一些常用的 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