你应该知道的 37 个重要的 Linux 命令

对于刚接触 Linux 或者对 Linux 命令不太熟悉的你来说,本文将为你提供一份全面的命令指南,你可以将其视为 Linux 终端操作的基本参考。这些命令同样适用于 macOS 命令行环境。

终端必备工具

Linux 系统拥有数量庞大的命令,这里我们精选了 37 个最核心的命令。掌握这些命令,你将能够更加熟练地使用 Linux 命令行界面。

以下命令列表按照字母顺序排列,它们在列表中的位置与其实用性或难易程度无关。想要深入了解某个命令的具体用法,请查阅其手册页(manual page),当然,man 命令本身也在我们的列表中,它正是 “manual” 的缩写。

1. alias (别名)

alias 命令允许你为命令或命令序列定义自定义名称。之后,你只需输入这个短名称,系统就会执行对应的命令或命令序列。

例如:

alias cls=clear

这条命令创建了一个名为 cls 的别名,它相当于 clear 命令。当你输入 cls 时,屏幕会被清空,效果和输入 clear 一样。别名可以帮你节省一些输入时间。如果你经常在 Windows 和 Linux 命令行之间切换,你可能会在 Linux 中不自觉地输入 Windows 的 cls 命令。通过设置这个别名,你就可以在 Linux 中使用 cls 命令了。

别名的功能远不止如此。以下是一个更复杂的别名 pf (进程查找),它使用引号将命令序列括起来,这是因为命令序列中包含空格。这个别名使用 ps 命令列出运行的进程,并通过管道将其输出传递给 grep 命令。 grep 命令在 ps 的输出中查找与命令行参数 $1 匹配的条目。

alias pf="ps -e | grep $1"

如果你想查找快门程序的进程 ID (PID),或者想知道快门程序是否正在运行,你可以使用这个别名,输入 pf、一个空格和你感兴趣的进程名称:

pf shutter

通过命令行定义的别名只在当前终端窗口有效,当你关闭窗口时,它们就会消失。要使别名永久生效,请将其添加到你的主目录下的 .bash_aliases 文件中。

2. cat (连接)

cat 命令 (concatenate 的缩写) 可以将文件内容输出到终端窗口。 相比于在编辑器中打开文件,这种方式速度更快,并且可以避免意外修改文件。 要查看 .bash_log_out 文件的内容,在主目录为当前工作目录时(默认情况),输入以下命令:

cat .bash_logout

如果文件内容超过终端窗口的行数,文本会滚动过快而无法阅读。这时你可以将 cat 的输出通过管道传递给 less 命令,使其更易于管理。使用 less,你可以通过上下箭头键、PgUp 和 PgDn 键以及 Home 和 End 键在文件中前后滚动。输入 q 退出 less

cat .bashrc | less

3. cd (更改目录)

cd 命令用于改变当前工作目录。 换句话说,它能让你在文件系统中移动到新的位置。

如果要切换到当前目录下的子目录,只需输入 cd 加上子目录的名称即可:

cd work

如果要切换到文件系统目录树中其他位置的目录,需要提供以 / 开头的目录路径:

cd /usr/local/bin

要快速返回主目录,可以使用 ~ (波浪号) 字符作为目录名称:

cd ~

这里再分享一个小技巧:你可以使用双点符号 .. 来表示当前目录的父目录。你可以输入以下命令返回上一级目录:

cd ..

假设你现在在一个目录中,它的父目录中包含其他目录,以及你当前所在的目录。要切换到父目录中的其他目录,可以使用 .. 符号来简化输入:

cd ../games

4. chmod (更改文件模式)

chmod 命令用于设置文件或文件夹的文件权限标志。这些标志决定了哪些用户可以读取、写入或执行文件。当你使用 -l (长格式) 选项列出文件时,你会看到一串类似下面的字符:

-rwxrwxrwx

如果第一个字符是 -,表示该项目是一个文件;如果第一个字符是 d,则表示该项目是一个目录。字符串的其余部分是三组三个字符。从左到右,第一组表示文件所有者的权限,中间一组表示组的权限,最右边一组表示其他用户的权限。在每组字符中,r 代表读取,w 代表写入,x 代表执行。

如果存在 rwx 字符,则表示授予了相应的权限。如果该字母不存在,而是显示 -,则表示没有授予该权限。

chmod 的一种使用方式是以 3 位数字的形式提供你希望授予所有者、组和其他用户的权限。最左边的数字代表所有者,中间的数字代表组,最右边的数字代表其他用户。以下列出了你可以使用的数字及其含义:

0:无权限
1:执行权限
2:写入权限
3:写入和执行权限
4:读取权限
5:读取和执行权限
6:读写权限
7:读、写、执行权限

以我们的 example.txt 文件为例,假设我们看到所有三组字符都是 rwx。这意味着所有用户都对该文件具有读取、写入和执行权限。

现在,假设我们要为所有者设置读取、写入和执行权限 (对应数字 7);为组设置读写权限 (对应数字 6);为其他用户设置读取和执行权限 (对应数字 5)。我们可以使用 chmod 命令,并将权限数字设置为 765

chmod -R 765 example.txt

如果要为所有者设置读取、写入和执行权限 (对应数字 7),为组和其他用户设置读写权限 (对应数字 6),我们需要使用 chmod 命令,并将权限数字设置为 766

chmod 766 example.txt

5. chown (更改所有者)

chown 命令允许你更改文件的所有者和组所有者。使用 ls -l 列出我们的 example.txt 文件,我们可以在文件描述中看到 dave dave。 其中第一个 dave 表示文件所有者的名称,在本例中是用户 dave。 第二个条目 dave 表示组所有者的名称,也是 dave。每个用户在创建时都会创建一个默认组,该用户是该组的唯一成员。这表明该文件没有与其他用户组共享。

你可以使用 chown 更改文件的所有者或组,或者同时更改两者。你需要提供所有者和组的名称,用 : 字符分隔。并且你需要使用 sudo。要保留 dave 作为文件的所有者,但将 mary 设置为组所有者,请使用以下命令:

sudo chown dave:mary example.txt

要将所有者和组所有者都更改为 mary,可以使用以下命令:

sudo chown mary:mary example.txt

要将文件所有者和组所有者都改回 dave,可以使用以下命令:

sudo chown dave:dave example.txt

6. curl (客户端 URL)

curl 命令是一个从统一资源定位器 (URL) 或 Internet 地址检索信息和文件的工具。

curl 命令可能不是 Linux 发行版的标准组件。 如果你使用的是 Ubuntu 或其他基于 Debian 的发行版,可以使用 apt-get 将此软件包安装到你的系统中。在其他 Linux 发行版上,请使用你的 Linux 发行版的包管理器来安装它。

sudo apt-get install curl

假设你想从 GitHub 存储库中检索单个文件。通常,没有官方支持的方法,你需要克隆整个存储库。然而,使用 curl,我们可以直接检索我们想要的文件。

这个命令可以帮助我们检索文件。请注意,你需要使用 -o (输出) 选项指定保存文件的名称。否则,文件的内容会在终端窗口中快速滚动,而不会保存到你的计算机中。

curl https://raw.githubusercontent.com/torvalds/linux/master/kernel/events/core.c -o core.c

如果你不想看到下载进度信息,可以使用 -s (静默) 选项。

curl -s https://raw.githubusercontent.com/torvalds/linux/master/kernel/events/core.c -o core.c

7. df (磁盘空间)

df 命令显示计算机已挂载文件系统的大小、已用空间和可用空间。

两个最有用的选项是 -h (人类可读) 和 -x (排除) 选项。 -h 选项以 Mb 或 Gb 而不是字节显示大小。 -x 选项允许你告诉 df 命令忽略你不想关注的文件系统。例如,当你使用 snap 命令安装应用程序时创建的 squashfs 伪文件系统。

df -h -x squashfs

8. diff (比较)

diff 命令比较两个文本文件并显示它们之间的差异。 它提供了许多选项,可以根据你的需求定制显示。

-y (并排) 选项并排显示行差异。 -W (宽度) 选项允许你指定用于避免换行的最大行宽。在这个例子中,这两个文件分别名为 alpha1.txtalpha2.txt--suppress-common-lines 选项可以防止 diff 命令列出匹配的行,让你专注于有差异的行。

diff -y -W 70 alpha1.txt alpha2.txt --suppress-common-lines

9. echo (回显)

echo 命令将字符串文本输出 (回显) 到终端窗口。

以下命令会在终端窗口上输出 “A string of text” 这串文字:

echo A string of text

echo 命令还可以显示环境变量的值,例如 $USER$HOME$PATH 等环境变量。它们分别包含用户名、用户主目录以及用户在命令行中输入内容时,系统搜索匹配命令的路径。

echo $USER
echo $HOME
echo $PATH

以下命令会发出蜂鸣声。 -e (转义码) 选项将转义字符解释为 “响铃”字符

echo -e "a"

echo 命令在 shell 脚本中也非常有用。 脚本可以使用此命令生成可见输出,以指示脚本执行过程中的进度或结果。

10. exit (退出)

exit 命令可以关闭终端窗口,结束 shell 脚本的执行,或者让你从 SSH 远程会话中注销。

exit

11. find (查找)

如果你忘记了文件的存放位置,可以使用 find 命令来追踪你确定存在的文件。你需要告诉 find 命令从哪里开始搜索以及要寻找什么。在这个例子中,. 表示当前文件夹,-name 选项告诉 find 命令查找名称与搜索模式匹配的文件。

你可以使用通配符,其中 * 表示任意字符序列,而 ? 表示任意单个字符。我们使用 *ones* 来匹配包含序列 “ones” 的任何文件名,例如 bones, stoneslonely 等。

find . -name *ones*

正如我们所见,find 返回了一个匹配列表,其中一个是名为 Ramones 的目录。我们可以告诉 find 将搜索限制在文件中,使用带 f 参数的 -type 选项。 f 参数代表文件。

find . -type f -name *ones*

如果你希望搜索不区分大小写,请使用 -iname (不区分名称) 选项。

find . -iname *wild*

12. finger (指纹)

finger 命令为你提供有关用户的简短信息,包括用户上次登录的时间、用户的主目录和用户帐户的全名。

13. free (内存)

free 命令为你提供计算机内存使用情况的摘要。 它会显示主随机存取存储器 (RAM) 和交换存储器的使用情况。 -h (human) 选项用于提供人性化的数字和单位,如果不使用此选项,则数字以字节为单位。

free -h

14. grep (全局正则表达式打印)

grep 工具用于搜索包含指定模式的行。 当我们介绍 alias 命令时,我们使用 grep 搜索了另一个程序 ps 的输出。 grep 命令也可以搜索文件的内容。 在这里,我们在当前目录的所有文本文件中搜索单词 “train”。

grep train *.txt

输出会列出文件名并显示匹配的行。 匹配的文本会高亮显示。

grep 的功能和绝对实用性绝对值得你检查它的 手册页

15. groups (组)

groups 命令可以告诉你用户属于哪些组。

groups dave
groups mary

16. gzip (压缩)

gzip 命令可以压缩文件。 默认情况下,它会删除原始文件并保留压缩版本。 要保留原始版本和压缩版本,请使用 -k (保留) 选项。

gzip -k core.c

17. head (头部)

head 命令可以列出文件的前 10 行。 如果你想查看更少或更多的行,请使用 -n (数字) 选项。 在这个例子中,我们先使用默认行数为 10 的 head 命令。 然后,我们使用 -n 选项,只请求输出 5 行。

head -core.c
head -n 5 core.c

18. history (历史)

history 命令可以列出你之前在命令行上执行过的命令。你可以通过键入感叹号 ! 以及历史列表中的命令编号来重复执行历史记录中的任何命令。

!188

键入两个感叹号 !! 可以重复上一次执行的命令。

!!

19. kill (杀死)

kill 命令允许你从命令行终止进程。 你可以通过提供要终止的进程的进程 ID (PID) 来执行此操作。 不要随意终止进程,你需要有充分的理由这样做。 在本例中,我们假设快门程序已经锁定了。

为了找到快门程序的 PID,我们将使用上面介绍 alias 命令时提到的 psgrep 技巧。 我们可以搜索快门进程,获得它的 PID:

ps -e | grep shutter.

一旦我们确定了 PID(在这种情况下为 1692),我们就可以通过以下方式杀死它:

kill 1692

20. less (少)

less 命令允许你在不打开编辑器的情况下查看文件。它速度更快,而且可以避免你无意中修改文件。使用 less,你可以通过上下箭头键、PgUp 和 PgDn 键以及 Home 和 End 键在文件中前后滚动。按 Q 键退出 less

要查看文件,请将文件名作为参数传递给 less 命令:

less core.c

你还可以将其他命令的输出通过管道传递给 less。 要查看 ls 命令输出的整个硬盘驱动器的文件列表,请使用以下命令:

ls -R / | less

在文件中向前搜索可以使用 /,向后搜索可以使用 ?

21. ls (列出)

这可能是大多数 Linux 用户接触的第一个命令。它会列出指定目录中的文件和文件夹。默认情况下,ls 会在当前目录中查找。 ls 命令有很多选项,强烈建议你查阅它的 手册页。 这里我们列出一些常用的例子。

列出当前目录中的文件和文件夹:

ls

要使用详细列表列出当前目录中的文件和文件夹,请使用 -l (长格式) 选项:

ls -l

要使用人性化的文件大小,请添加 -h (human) 选项:

ls -lh

要包含隐藏文件,请使用 -a (所有文件) 选项:

ls -lha

22. man (手册)

man 命令可以在 less 中显示命令的 “手册页”。 手册页是该命令的用户手册。 因为 man 使用 less 来显示手册页,你可以使用 less 的搜索功能。

例如,要查看 chown 的手册页,请使用以下命令:

man chown

使用上下箭头键或 PgUp 和 PgDn 键在文档中滚动。 按 q 退出手册页,或按 h 获取帮助。

23. mkdir (创建目录)

mkdir 命令允许你在文件系统中创建新目录。 你必须向 mkdir 提供新目录的名称。 如果新目录不在当前目录中,则必须提供新目录的路径。

要在当前目录中创建两个名为 “invoices” 和 “quotes” 的新目录,请使用以下两个命令:

mkdir invoices
mkdir quotes

要在 “invoices” 目录中创建一个名为 “2019” 的新目录,请使用以下命令:

mkdir invoices/2109

如果你要创建一个目录,但其父目录不存在,你可以使用 -p (parents) 选项,让 mkdir 同时创建所有必需的父目录。 在以下命令中,我们在 “quotes” 目录内的 “yearly” 目录中创建 “2019” 目录。“yearly” 目录不存在,但我们可以让 mkdir 一次创建所有指定的目录:

mkdir -p quotes/yearly/2019

这时,“yearly” 目录也会被创建。

24. mv (移动)

mv 命令允许你将文件和目录从一个目录移动到另一个目录。它还可以用来重命名文件。

要移动文件,你必须告诉 mv 命令文件在哪里以及要将其移动到哪里。 在本例中,我们将名为 apache.pdf 的文件从 ~/Document/Ukulele 目录移动到当前目录,当前目录用单个 . 表示。

mv ~/Documents/Ukulele/Apache.pdf .

要重命名文件,你可以将文件“移动”到具有新名称的文件。

mv Apache.pdf The_Shadows_Apache.pdf

文件移动和重命名操作可以一步完成:

mv ~/Documents/Ukulele/Apache.pdf ./The_Shadows_Apache.pdf

25. passwd (密码)

passwd 命令允许你更改用户的密码。只需键入 passwd 即可更改你自己的密码。

你也可以更改其他用户帐户的密码,但必须使用 sudo。 你会被要求输入两次新密码。

sudo passwd mary

26. ping (网络)

ping 命令可以让你验证是否与其他网络设备建立了网络连接。它通常用于帮助解决网络问题。 要使用 ping,你需要提供其他设备的 IP 地址或机器名称。

ping 192.168.4.18

ping 命令会一直运行,直到你使用 Ctrl+C 将其停止。

这里简单说明一下输出结果:

IP 地址为 192.168.4.18 的设备正在响应我们的 ping 请求,并发送回 64 字节的数据包。
互联网控制消息协议 (ICMP) 序列号允许我们检查丢失的响应(丢弃的数据包)。
TTL 数字是数据包的 “生存时间”。 每次数据包通过路由器时,它(应该)减一。 如果它达到零,则丢弃数据包。 这样做的目的是防止网络环回问题淹没网络。
时间值是从你的计算机到设备并返回的往返时间。 简单来说,这个时间越低越好。

要让 ping 运行特定次数的 ping 尝试,请使用 -c (计数) 选项。

ping -c 5 192.168.4.18

要听到 ping 的声音,请使用 -a (可听) 选项。

ping -a 192.168.4.18

27. ps (进程状态)

ps 命令会列出正在运行的进程。 不带任何选项使用 ps 会导致它列出在当前 shell 中运行的进程。

ps

要查看与特定用户相关的所有进程,请使用 -u (用户) 选项。 这可能会是一个很长的列表,为了方便查看,请将其输出通过管道传递给 less 命令。

ps -u dave | less

要查看正在运行的每个进程,请使用 -e (每个进程) 选项:

ps -e | less

28