一些常用的 Linux 命令及相关技巧
参考网站
常用终端命令
更新软件
Ubuntu/Debian
1 | |
注意:在 Ubuntu18.04 以后应尽量使用 apt,而不是 apt-get。apt 在运行时可以给出更多的提示。
CentOS
1 | |
Arch Linux/Manjaro
1 | |
文件管理
-
ls:列出目录内容(list);加参数-l可查看详细信息(包括权限) -
cd:改变目录(change directory)。特别地,cd -等价于cd $OLDPWD,可以进入刚才(上一次)所在的目录 -
rm:删除目录或文件(remove)
参数:-f强制删除文件或目录;-r或-R:递归处理,如果删除中含有目录,则必须加上此选项。 -
rmdir:删除空目录(remove directory) -
mkdir:创建目录(make directory) -
mv:移动(重命名)目录或文件(move) -
touch:创建新的空文件 -
cp:复制目录或文件(copy) -
1
2
3# -name:指定文件名关键字;默认区分大小写,使用 -iname 可以忽略大小写 # 搜索范围包含了起始目录及其所有子目录;可以使用"."(当前目录) find /home -name "*.txt"直接使用
find或find .可以列出当前目录及其所有子目录下的所有文件,相当于递归版的ls。 -
locate
与find的功能类似,但locate会预先建立一个索引数据库,直接在该索引中搜索,因此查询速度较快。updatedb命令可以用来强制更新索引数据库。1
2
3
4# 查找和 pwd 相关的所有文件 locate pwd # 搜索 etc 目录下所有以 sh 开头的文件 locate /etc/sh -
nano:字符终端文本编辑器 -
vi/vim:Vim 编辑器 -
运行当前目录下的文件时,需使用相对路径
./test.sh,而非直接使用文件名test.sh
文本处理
-
grep
global search regular expression (RE) and print out the line(全面搜索正则表达式并把行打印出来)的缩写。可以用于搜索或提取文本中的字符串,其默认输出为匹配到的字符串所在的一整行,可以通过-o参数使其只输出匹配到的内容本身。1
2
3
4
5# -n/--line-number:打印匹配结果所在行号 grep -n 'word' aaa.txt # -i/--ignore-case:忽略大小写(默认大小写敏感) # -R/-r --recursive:递归搜索,加入该参数可以不指定文件而是指定目录(若不指定默认为当前目录"."),搜索范围包含了此目录及其所有子目录 grep -ri 'listen' .进阶用法:
1
2
3
4# 在系统进程中搜索 nginx ps -ef | grep nginx # 在当前目录下递归搜索 nginx.conf 文件 find / | grep nginx.conf以上两个命令都用到了
|,这是「管道命令符」,它会将前一个命令的标准输出作为后一个命令的标准输入。此外,还可以用xargs在命令之间传递参数,可以参考这里。 -
sed
stream editor(流式文本编辑器)的缩写。 -
awk
AWK 是一种处理文本的编程语言,是一个强大的文本分析工具。其名称来自它的三位创始人 Alfred Aho, Peter Weinberger 和 Brian Kernighan 的姓氏首字母。
下载
-
1
2
3
4# -O:以指定的文件名保存 wget -O file.zip http://example.com/large.file # -i/--input-file:下载在文件中出现的所有链接 wget -i file.txt -
1
2# -o/--output:把输出写到指定名称的文件中 curl http://jaywcjlove.gitee.io/test.iso -o filename.iso
解压
-
1
2# -d:指定文件解压缩后所要存储的目录 unzip test.zip -d /tmp -
1
2# -x:-x/--extract/--get:从备份文件中还原文件;-f/--file=:指定备份文件 tar -xf archive.tar -
1
2
3
4# -d/--decompress/----uncompress:解开压缩文件 gzip –d /opt/etc.zip.gz # 与上面等价 gunzip /opt/etc.zip.gz
权限更改
-
chmod
change mode 的缩写,用于修改文件/目录的读、写、执行权限。1
2
3
4
5
6
7# 将文件 file1.txt 与 file2.txt 设为该文件拥有者、与其所属同一个群体者可写入,其他 人不可写入 chmod ug+w,o-w file1.txt file2.txt # 赋予所有人所有权限(两条命令等价) chmod a=rwx file chmod 777 file # 将 /home/wwwroot/ 里的所有文件和文件夹设置为 755 权限 chmod -R 755 /home/wwwroot/*参数:
u表示该文件的拥有者,g表示与该文件的拥有者属于同一个群体 (group) 者,o表示其他以外的人,a表示这三者皆是;
+表示增加权限,-表示取消权限,=表示唯一设定权限;
r表示可读取,w表示可写入,x表示可执行,-表示无权限;
-R表示递归处理(recursive),即将指令目录下的所有文件及子目录一并处理。3 个数字依次表示 User、Group、及 Other 的权限 。r=4(读取),w=2(写入),x=1(执行)。如:rwx 属性则 4+2+1=7;rw- 属性则 4+2=6;r-x 属性则 4+1=7。
-
chown
change owner 的缩写,用于修改文件/目录所有者。 -
chgrp
change group 的缩写,用于修改文件/目录所属群组。用户组配置文件为/etc/group。
文件打印(输出)
-
cat
concatenate(连接)的缩写,所谓「连接文件并打印到标准输出设备上」。1
cat /var/log/shadowsocks.log注:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。可以按 Ctrl+S 停止滚屏;按 Ctrl+Q 恢复滚屏。
系统状态
-
ps
process status 的缩写。报告当前系统的进程状态。参数:-e:显示所有进程信息,连同命令行;-f:显示UID, PPIP, C 与 STIME 栏位。 -
top
实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,提供了互动式界面,用热键可以管理。类似于 Windows 中的任务管理器。
日志查看
-
tail
在屏幕上显示指定文件的末尾若干行,通常用于日志文件的跟踪输出1
tail -f /opt/bitnami/nginx/logs/error.log-f:显示文件最新追加的内容。另有tailf命令,当文件改名之后它也能继续跟踪,且与tail的机制有一定区别。
终端控制
-
history
显示历史命令常配合
!使用以执行特定序号的历史命令;也可配合| grep进行历史记录查找。其记录文件保存于~/.bash_history。参数:
-c:清空历史命令;history 10:显示最近的 10 条历史命令。 -
clear:终端清屏
其他命令
-
man
manual 的缩写,用于查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。1
2
3
4# 查看 grep 命令的帮助文档 man grep # 查看 bash 中所有的快捷键 man readline
特殊符号意义
-
.:当前目录 -
..:当前目录的上级目录 -
~:代表当前用户的目录,如用户 user 的主目录就是/home/user/。特别地,root 用户的主目录为/root/ -
/:正斜杠是路径分隔符,单独使用表示根目录 -
\:反斜杠是转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值。常用的情况:如果在\之后一个换行字符(回车)立即出现,则转义字符使行得以继续,即多行执行一条命令。遇到单一命令过长时常常分行写并在每行最后使用\以增加可读性 -
;:用分号隔开一行的多个命令,每个命令按照从左到右的顺序依次执行,彼此之间不关心是否失败,所有命令都会执行 -
&:放在命令的启动参数后面(命令最后)表示设置此进程为后台进程(即不占用当前终端的IO),但关闭终端仍会终止进程。常与nohup(关闭 session 不终止进程)一起使用,如nohup ./test.sh & -
&&:shell 在执行某个命令的时候,会返回一个值,保存在 shell 变量$?中。当$? == 0时,表示执行成功;否则表示执行失败。&&即逻辑与,可以连接两个命令,只有左边的命令执行成功才会执行右边的命令 -
|:管道命令符,将前一个命令的标准输出作为后一个命令的标准输入 -
||:即逻辑与,可以连接两个命令,只有左边的命令执行失败($? != 0)才会执行右边的命令 -
>:输出重定向(覆盖原内容),如丢弃输出内容:command > /dev/null -
>>:输出重定向(追加) -
>&:输出重定向(合并文件),常用于重定向标准错误输出,如./test.sh > log.txt 2>&1,具体可以参考这里或这里 -
<:输入重定向,同样也存在<<和<&。以上四条可以参考此页 -
!:引用历史命令,后直接跟数字可执行history对应序号的历史命令,或跟某一命令(的前几个字符)以执行最近一次使用的某命令 -
!!:引用上一条命令,类似方向上键,但可以方便地实现任意位置的扩充 -
!$:引用上一条命令的最后一个参数。感叹号的其他用法详见这里 -
^:用于替换上一条命令的某些字串并执行。如:^foo^bar可将上一条命令中的第一个foo用bar代替并立刻执行。要替换上一条命令的所有foo可以使用!!:gs/foo/bar(这实际是 vi 的语法)。详见 COMMANDLINEFU.com 的解说 -
#:注释。特别地,#!用在脚本的第一行以指定脚本解释器,如#!/bin/bash
终端快捷键指令
-
Tab:命令自动补全
一般情况下 Linux 终端中输入部分指令,按 TAB 就能自动补全。在某些系统(如 CentOS)中,可能对部分软件(如 docker)的指令没有预装命令补齐脚本,可以手动安装并刷新:
1
2
3
4sudo yum install -y bash-completion # 刷新 source /usr/share/bash-completion/bash_completion source /usr/share/bash-completion/completions/docker -
上/下键:切换上/下一条历史命令
-
Ctrl + C:终止当前任务/进程
-
Ctrl + R:搜索命令行历史记录
按下按键之后,输入关键字便可以搜索;重复按下 Ctrl + R 会向后查找匹配项;回车会执行当前匹配的命令;右方向键会将匹配项放入当前行中,不会直接执行;Ctrl + S 会向前查找匹配项。
vi/vim 编辑器命令及快捷键
注意:以下快捷键区分大小写,大写的快捷键需要按住 Shift
查找
查找到的字符串会被高亮
/字符串:从当前光标所在位置开始向文件尾部查找指定字符串的内容?字符串:从当前光标所在位置开始向文件头部查找指定字符串的内容- n:向后查找下一个
- N:向前查找下一个(需要按住 Shift)
模式切换
- Esc:从编辑模式切换到命令模式
- i:在当前字符前插入文本(进入编辑模式)
撤销与恢复
在命令模式下:
- u:撤销
- Ctrl + r:恢复/反撤销
保存与退出
-
:wq!
在命令模式下,执行强制保存并退出操作。其中w表示保存(write),q表示退出(quit),!表示强制执行(即使文件为只读);各符号可组合使用。 -
:x
在命令模式下,写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间;否则不会更新文件修改时间。(而:wq即使文件没有被修改也强制写入,并更新文件的修改时间) -
ZZ
在命令模式下的保存并退出(需要按住 Shift)。 -
ZQ
在命令模式下的退出且不保存(需要按住 Shift)。
翻页
- Ctrl + u:向文件首翻半屏
- Ctrl + d:向文件尾翻半屏
- Ctrl + f:向文件尾翻一屏
- Ctrl + b:向文件首翻一屏
修改文件换行符
在 Windows 下编写的脚本直接在 Linux 上执行,往往会因为换行符的问题(Windows 默认为 CRLF,Unix 则为 LF)而报错:
bad interpreter: No such file or directory
在 vi 命令模式中使用 :set ff,可以看到它的编码格式为 dos。
使用命令修改文件编码为 unix::set ff=unix