看《linux命令行大全》做的一点笔记。
链接
硬链接
每个文件默认会有一个硬链接,这个硬链接给予文件名字。每创建一个硬链接,就为一个文件创建了一个额外的目录项。通过使用ls -li
可以查看到硬链接和它关联的文件的索引节点号是相同的。
硬链接有2个局限:
- 硬链接不能关联与链接本身不在同一个磁盘分区上的文件。
- 硬链接不能关联目录。
删除硬链接时,文件本身将继续存在,直到其所有链接被删除。
使用ln file link
创建。
符号链接
符号链接克服上述硬链接的局限性,即它可以关联目录且可以跨越设备。
当写符号链接时,相关联的文件也会被写入。删除符号链接时,和硬链接相同,文件本身将继续存在。而若先于符号链接直接删除文件,那么该链接将继续存在,只是不指向任何东西,这被称为坏链接。
和硬链接不同,符号链接和它关联的文件的索引节点号三不同的。
使用ln -s item lin
创建。
通配符
使用字符类(如[:lower:]
)来代替范围表示(如[a-z]
)。
重定向
使用>
重定向标准输出,但每次都会重写,因此可以使用> xxx.txt
这个技巧来清空文件。
使用>>
则不会重写,而是追加模式。
文件描述符0,1和2分别表示标准输入、标准输出和标准错误。
要将标准输出和错误重定向到同一个文件,使用&> xxx.txt
。
/dev/null
是一个特殊文件,叫做位存储桶,它可以接受输入,但不会多任何处理。
可以将错误重定向到这里2> /dev/null
cat
接受标准输入并显示,可以用<重定向。
管道
使用|
将前面命令的输出重定向到后面命令的输入。用管道连接起来的命令叫做过滤器。
历史命令
使用history
查看历史命令,配合grep
搜索,如history | grep sudo
。
得到的命令历史列表中每个命令会有一个编号,可以使用!200
来执行200号命令。
也可以使用history后,输入Ctrl-r
启动增量搜索,然后输入要查找的命令内容,可以按回车来执行,也可以输入Ctrl-j
将其复制到命令行。若要退出增量搜索则输入Ctrl-c
。
vi
移动光标
快捷键 | 作用 |
---|---|
h | 左移一个字符 |
l | 右移一个字符 |
j | 下移一行 |
k | 上移一行 |
0 | 到当前行的行首 |
^ | 到当前行的第一个非空字符 |
$ | 到当前行的行尾 |
% | 查找匹配的括号 |
w | 到下一个单词或标点 |
W | 到下一个单词 |
b | 到上一个单词或标点 |
B | 到上一个单词 |
Ctrl-f | 下一页 |
Ctrl-b | 上一页 |
Ctrl-R | undo the undo |
数字n+G | 到第n行,如输入10G则移动到第10行 |
G | 到文件末尾 |
gg | 到文件开头 |
v | 选择文本,类似于平时用的shift |
很多命令都可以加上数字,如5l表示右移5个字符
删除、复制和粘贴
快捷键 | 作用 |
---|---|
x | 删除当前字符 |
dd | 剪切除当前行 |
dW(yw) | 剪切(复制)到下一个单词 |
d$(y$) | 剪切(复制)到行尾 |
d0(y0) | 剪切(复制)到行首 |
dG(yG) | 剪切(复制)到文件末尾 |
p | 粘贴到光标之后 |
P | 粘贴到光标之前 |
其他快捷键
快捷键 | 作用 |
---|---|
i | 插入模式 |
a | 从当前字符开始追加模式 |
A | 从当前行开始追加模式 |
u | 撤销一次修改 |
/ | 从前往后查找 |
? | 从后往前查找 |
n | 下一个 |
N | 上一个 |
r | replace |
R | replace模式 |
: s/old/new | 一次替换 |
: s/old/new/g | 本行替换 |
: %s/old/new/g | 全文替换 |
: %s/old/new/gc | 每次替换询问 |
查找
输入/
进入查找模式,输入正则表达式以进行搜索
包管理
ubuntu的上层工具是apt-get,底层工具是dpkg。前者从资源库下载软件及其依赖项,后者依靠现有的.deb文件下载,且不下载依赖项。
正则表达式
POSIX把正则表达式分为2类:基本正则表达式(BRE)和扩展正则表达式(ERE)。
BRE可以辨认^$.[]*
,而ERE则添加了(){}?+|
。
元字符 | 含义 |
---|---|
^ | 开头 |
$ | 结尾 |
. | 一个任意字符 |
* | 0个或多个任意字符 |
? | 1个或0个任意字符 |
+ | 1个或多个任意字符 |
{} | 前面元素出现的次数 |
shell脚本
在赋值时,变量名、等号和变量值之间必须没有空格。
使用关键词local
声明局部变量。
变量展开时可以加{}:
str="hello"
echo $str # 输出hello
echo $str! # 输出空,将创建变量str!,并给其赋值空
echo ${str}! # 输出hello!
控制流
if:
if [条件]; then
# do something
elif [条件]; then
# do something
else
# do something
fi
while:
while [条件]; do
# do something
done
tips
- 使用rm之前,先使用ls查看是否是要删除的文件。
whatis
命令提供简洁的命令说明。- 使用
""
可以阻止命令行的单词分割,例如ls -l "two words.txt"
。但注意,在""中参数展开、表达式展开和命令替换仍然有效。 - 使用
''
则可以阻止上述三个展开。 - 使用
cat -n
可以给文本添加行号
快捷键 | 作用 |
---|---|
Ctrl-a | 光标到行首 |
Ctrl-e | 光标到行尾 |
Alt-f | 光标到前一个字 |
Alt-b | 光标到后一个字 |
Ctrl-k | 从光标到行尾剪切 |
Ctrl-y | 粘贴 |
Ctrl-z | 停止前台进程 |