找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux 笔记:核心思想、常用命令以及脚本语法

2019-9-23 12:40| 发布者: admin| 查看: 641| 评论: 0

摘要: 总结于 《鸟哥的 Linux 私房菜 - 基础学习篇》 ,图片也来自于此。核心思想目录树结构(directory tree)Linux 系统是基于目录树结构的,这是它的核心思想。目录,即文件夹。Linux 系统相当于一个文件夹,Linux 系统 ...
总结于 《鸟哥的 Linux 私房菜 - 基础学习篇》[1] ,图片也来自于此。

核心思想

目录树结构(directory tree)


Linux 系统是基于目录树结构的,这是它的核心思想。目录,即文件夹。Linux 系统相当于一个文件夹,Linux 系统的所有数据要么对应一个文件夹,要么就是一个文件。比如,你新建一个用户,其实就是新建了一个文件夹。一个用户对应一个文件夹。目录树结构:



上图中 长方形是文件夹, 波浪形是文件,根目录是 / 。这个 / 很巧妙,在 macOS 中,假设你下载文件 test.md 到 /Users/username/Desktop/,那么文件会下载到桌面,最前面这个 / 就是根目录。如果你写成 Users/username/Desktop/,那么文件就会下载到currentDerectory/Users/username/Desktop/下。

Linux 系统使用的是目录树架构,但其实数据是存放在 磁盘分区[2] 当中的,那么问题来了:目录树和磁盘分区是神马关系?这个时候就牵扯到一个叫「挂载(mount)」的概念了。

目录树和磁盘分区的关系


挂载其实就是建立目录树和磁盘分区之间的关系。目录只是一个标识,叫什么我们可以自定义,一个磁盘分区对应一个目录。

我们经常用 U 盘,假设一个 U 盘是一个磁盘分区,我们把一个假设叫 partition1 的 U 盘插到 Windows 电脑上,可能电脑就多了个 F 盘,那么目录就是 F ,相当于将目录 F 挂载到了 U 盘上,访问 F 就可以访问 partition1 里的内容。如果再插一个假设叫 partition2 的 U 盘,系统应该就会多了一个 H 盘,相当于目录 H 就挂载到了 partition2 上。假设 F 盘下将会有一个存放很多视频的 moive 文件夹,我们可以直接将 movie 文件夹挂载到 partition2 上,这样 movie 里的视频就存到 partition2 里面了,就不占用 F 盘的空间了。

在 Linux 系统中道理也是一样的,比如在搭建 Linux 环境的时候,可以将 /home 单独挂载到一个磁盘上。


图片来自《鸟哥的 Linux 私房菜 - 基础学习篇》

  • 更多内容请看鸟哥 Linux 安装模式下,磁碟分割的选择[3]

常用命令



vi/vim 的三种模式


vi <file>vim <file> 都是修改 <file> 的命令,后者为前者的增强版,输入此命令后,会有三种模式修改 <file> 文件。

  • 一般指令模式(command mode):你看不见你输入的内容

  • 编辑模式(insert mode):直接修改文件内容

  • 指令列命令模式(command-line mode):最下面一行,:/? 开头


图片来自《鸟哥的 Linux 私房菜 - 基础学习篇》

  • 以下指令详细含义请看 vim 程式编辑器[4]

常用指令


  • 一般指令模式:

指令含义
i当前位置进入 insert 模式
I第一个字符
a下一个字符
A末尾
o下一列开头
O上一列开头
rReplace 模式,取代一次
R一直取代
u撤销
Ctrl + r取消撤销,相当于 U?
0行首
end / $行尾
G最后一列
gg1 G,第一列
n<enter>向下移动 n 列
Ctrl + ffall,向下一页
Ctrl + bbefore,向上一页
x删除
X删除前一个
dd删除当前列
d$删除从当前位置到列尾
yy复制当前列


  • 编辑模式:

指令含义
Esc退出编辑模式,进入一般指令模式


  • 指令列命令模式:

指令含义
:w保存
:w!强制保证
:q退出
:q!强制退出
:wq退出并保存,相当于 ZZ
/word查找关键字
:set nu显示行号
:1,$s/word1/word2/gcword1 替换为 word2

/word 查找时,可使用 n 跳转到下一个查找结果,N 跳转到上一个查找结果

脚本语法


  • 遍历。示例:一个打印出当前路径下所有文件夹的目录的脚本,名叫 traverse.sh ,内容如下:
#!/bin/bash

for i in $(ls $(PWD))

do
if [ -d $i ];then
cd$i
pwd
cd ..
fi# if 反向,代表 if 结束
done

执行脚本:sh traverse.sh

  • 更多内容请看 学习 Shell Scripts[5]

其他命令

## 用户
passwd <username> # 修改用户的密码
whoami # 查看当前用户名

## 日志
less <file> # 查看最新日志
tail -f <file> # 查看实时日志
grep -5 <key> <file> # 查看日志 <file> 关键字 key 上下五行
grep -5 <key> <file1> <file2> # 输出日志 <file1> 关键字 key 上下五行的内容到 <file2> 中

## 进程
ps -ef|grep WeChat # 查看进程名叫 WeChat 的信息,最开头的数字为 id
kill -9 6002(最开头的数字) # 杀死进程 id 为 6002 的进程

sed -i's/word1/werd2/g' <file> # 替换 <file> 的 word1 为 word2(sed -- stream editor)
xclip -sel c < <file> # 不打开 <file> 的情况下复制其内容
df -h # 查看磁盘分区和目录信息(df -- display free disk space)
echo$PATH# 输出 $PATH 的内容

References

[1]
《鸟哥的 Linux 私房菜 - 基础学习篇》: http://linux.vbird.org/linux_basic/
[2]
磁盘分区: https://baike.baidu.com/item/磁盘分区
[3]
Linux 安装模式下,磁碟分割的选择: http://linux.vbird.org/linux_basic/0130designlinux.php#partition_install
[4]
vim 程式编辑器: http://linux.vbird.org/linux_basic/0310vi.php#vi
[5]
学习 Shell Scripts: http://linux.vbird.org/linux_basic/0340bashshell-scripts.php
[6]
linux-commans: https://www.geeksforgeeks.org/linux-commands/
[7]
man: http://man.he.net/
[8]
markdown-set-table-column-witdth: https://stackoverflow.com/questions/36121672/set-table-column-width-via-markdown
[9]
linux-current-directory: https://www.rapidtables.com/code/linux/linux-current-directory.html
[10]
bash_loop_list_strings: https://linuxhint.com/bash_loop_list_strings/
[11]
Copy the contents of a file into the clipboard without displaying its contents: https://unix.stackexchange.com/questions/211817/copy-the-contents-of-a-file-into-the-clipboard-without-displaying-its-contents


----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:DeppWang,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了