下面只列出最基础的用法,如需了解指令的更多参数和用法请自行查找资料
用中括号[]
包裹的参数为可选参数
一般而言,可以用man cmd
或cmd --help
或cmd -h
查看关于命令cmd
的说明和帮助
俗话说:“没有消息就是最好的消息”,Linux 下很多指令成功执行时都没有输出,只要确认输入正确,就无需担心运行结果是否正确。如仍需校验结果,常常需要使用不同指令辅助。
- 常用指令
- 用法:
cd [<path>]
- Change Directory,切换当前工作目录至
path
,或者说移至(打开)path
path
可以使用绝对路径或相对路径表示- 特殊用法:
path
缺省时默认为用户目录~
,即cd
等价于cd ~
cd -
:回到上个访问的目录
- 用法:
pwd
- Print Work Directory,输出当前工作目录的绝对路径
- 用法:
ls [-a] [-l] [-h] [<path>]
- 列出
path
下的所有文件(夹) path
缺省时默认为当前目录.
,即ls
等价于ls .
- 使用
-a
时列出包括隐藏文件(.
开头的文件) - 使用
-l
时列出包括文件权限、大小、创建时间在内的详细信息(类比 Windows 资源管理器从列表模式改成详细信息模式) - 使用
-h
时将文件大小带单位输出,便于阅读,需配合-l
使用
- 用法:
tree <path>
- 列出
path
下的所有文件(夹)和所有子文件(夹),用文件树的形式输出 path
默认为当前目录.
,即ls
等价于ls .
- 用法:
touch <name>
、mkdir <name>
- 创建一个叫
name
的空文件/空目录
- 见编辑器一节
- 用法:
mv <src> <dst>
、cp <src> <dst>
- 将文件从
src
移动/复制到dst
dst
可以为- 一个已存在的目录,此时会把
src
移动/复制到该目录下 - 一个不存在的文件/目录,此时
src
必须为一个文件/目录
- 一个已存在的目录,此时会把
src
可以是多个文件,此时dst
必须为一个已存在的目录
- 用法:
rmdir <dir>
- 将空目录
dir
删除,若非空则报错
- 用法:
rm [-R] <path>
- 删除
path
指定的文件 - 使用
-R
时采用递归删除的方式,删除path
指定的目录和其中所有的子目录/文件。不使用-R
而path
为目录时报错
- 用法:
echo <text>
- 输出
text
- 常用于脚本中(类比 c 语言 printf 使用)或配合输出重定向符使用
- 用法:
cat <file>
- 输出
file
的内容 - Note:当文件过大时可能造成卡顿,请考虑使用
head
或tail
- 用法:
head <file> [-n <lines>]
、tail <file> [-n <lines>]
- 输出
file
头部/尾部lines
行的内容,默认为10行
- 用法:
diff <file1> <file2>
- 逐行比较两个文件的差异并输出不同的行
- 如果两个文件没有差异则无输出
- 用法:
grep [-i] <pattern> <file>
- 在文件
file
中查找带有pattern
的行并输出 pattern
可以是一个正则表达式- 使用
-i
时忽略大小写 - 注:常与管道符联合使用
- 注:
grep
,awk
和sed
有时并称“Linux 三剑客”,它们有着比此处所提及到更强大的功能,但由于课程一般使用不到,请有兴趣的同学自行了解 - 示例:
$ cat config.json { ... "USERNAME": "some-user", "password": "this_is_a_passwd", ... }
$ grep -i username config.json "USERNAME": "some-user", $ grep username config.json // 无输出(未指定-i,config.json文档中没有匹配小写username的行)
- 用法:
chmod <permission> <path>
- 将
path
指定的文件(夹)赋予权限permission
,它可以是+r
,+w
,+x
,表示授予读、写、执行权限-r
,-w
,-x
,表示撤销读、写、执行权限- 上面写法可以连用,例如
+rw
表示授予读写权限 - 3位8进制数,见文件权限一节
- 用法:
chown <user>:<group> <path>
- 将
path
指定的文件(夹)的所有者更改为user:group
- 用法:
man <指令>
- 查看指令的用户手册
- 使用阅读模式
- 用法:
su [<user>]
- 切换至
user
,需要输入user
的密码 user
缺省时默认为当前用户,一般来讲没有作用,但考虑下面这种做法:user1@host:~$ sudo -u user2 su // 由于使用了 sudo -u,该命令被认为是以 user2 身份执行 // su 后面缺省了参数,故会将用户切换为 user2 // 而 sudo 是 user1 执行的,故需要输入的是 user1 的密码
- 常见特殊用法:直接
su root
需要使用root
的密码,该密码一般是用户未知、或者出于安全考虑被禁用的;而sudo su
可以切换至root
用户,只需输入自己的密码user1@host:~$ su root Password: // 应输入 root 的密码,未知或禁用 user1@host:~$ sudo su [sudo] Password of user1: // 应输入 user1 的密码,已知 // sudo su 等价于 sudo -u root su root,请参考这两个命令的缺省值理解
- 用法:
sudo [-u <user>] <指令>
- 以其它用户的身份执行指令
- 不使用
[-u <user>]
时默认为root
用户 - 短期内首次使用时会要求输入当前用户的密码
- 示例:
$ sudo apt update $ sudo reboot
- 用法:
<指令1> && <指令2>
、<指令1> || <指令2>
、<指令1> ; <指令2>
- 前一个指令成功、失败、无条件执行后一个指令
- 这三个用法可以类比 c 语言程序:
- 当指令成功时返回值为0,因此与类似于
if (func1()==0 && func2()==0) ;
||
同理;
则与 c 几乎完全相同,类似于func1(); func2();
- 当指令成功时返回值为0,因此与类似于
- 注意:
sudo <指令>
将被当作一个指令整体,即sudo <指令1> && <指令2>
只有指令1获得了超级用户权限 - 示例:
$ gcc hw1.c -o hw1 && ./hw1 // 编译 hw1.c 到 hw1 并在编译成功时运行它 $ cd ~/COD-Lab && git pull // 移动到 ~/COD-Lab 路径下并执行 git pull 拉取仓库 $ sudo apt update && apt upgrade // 错误:后一个 apt upgrade 指令没有 sudo 权限 $ sudo apt update && sudo apt upgrade // 正确:先执行更新软件源,随后更新所有软件包
- 用法:
<指令1> | <指令2>
- 简单来说,它是把指令1的输出作为指令2的输入进行执行
- 常见用于
grep
指令,例如cat <file> | grep <text>
等价于grep <text> <file>
- 示例(
config.json
文件内容见 grep):$ cat config.json | grep -i username "USERNAME": "some-user", $ cat config.json | grep password "password": "this_is_a_passwd",
- 用法:
<指令> > <file>
、<指令> >> <file>
- 将指令的输出放入
file
,前者会覆盖文件原本的内容,后者则增添到尾部 - 示例:
$ echo 123 > test $ cat test 123
$ echo 456 >> test $ cat test 123 456
$ echo 789 > test $ cat test 789
- 当一个指令需要多行输入时(通常是为了人读起来更方便),在除了最后一行外每行结尾增加
\
- 后续行的标识符将变成
>
,而不再是$
或#
- 示例:
$ echo 123\ > 456 \ // 注意本行的 \ 前有一个空格 > 789 123456 789 // 完全等价于 echo 123456 789
$ docker run -p 80:80 \ > -v /data:/data \ > -d nginx:latest // 完全等价于 docker run -p 80:80 -v /data:/data -d nginx:latest // 用于分割参数时必须在 \ 前带一个空格,否则↓
$ docker run -p 80:80\ > -d nginx:latest docker: Invalid containerPort: 80-d // 由于缺少空格,这行命令实际等价于 docker run -p 80:80-d nginx:latest,注意到 80-d 连在了一起,而它不是一个有效的端口号,故报错
apt
/dpkg
/make
- 见安装软件一节
- 见ssh一节
- 见git一节
- 用法:
exit
- 退出当前终端
- 用法:
shutdown [<-r>] [<-h>] <time> [<message>]
- 关机或重启
- 使用
-r
时重启 - 使用
-h
时关机 <time>
为倒计时,默认单位为分钟。可以是now
[message]
为关机信息- 示例:
$ shutdown -r now // 立即重启 $ shutdown -h 10 // 10分钟后关机
- 用法:
reboot
- 重启电脑
- 用法:
alias [<name>[=<cmd>]]
- 为命令
cmd
添加别名name
- 当命令中包含空格时,需用引号包裹
- 无参数时,列出所有已设置的别名及其对应的命令
- 参数仅包括
name
而无=<cmd>
时,列出该别名对应的命令,若未设置则无输出 - 该命令设置的别名仅针对当前会话有效,若需长期生效,需将命令写入
.profile
、.bashrc
等 dotfiles 中,见进阶内容-dotfiles - 示例:
$ ll // 尚未添加别名 bash: ll: command not found // 报错:未找到命令 $ alias ll // 列出 "ll" 对应的命令。未设置,无输出 $ alias ll="ls -alh" // 为命令 "ls -alh" 添加别名 "ll" $ ll // 等价于执行 "ls -alh",即列出目录文件 "ls",且包含参数 "-a" "-l" "-h",参考本章 ls 一节 ...