对于刚接触 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
代表执行。
如果存在 r
、w
或 x
字符,则表示授予了相应的权限。如果该字母不存在,而是显示 -
,则表示没有授予该权限。
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.txt
和 alpha2.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
, stones
和 lonely
等。
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
命令时提到的 ps
和 grep
技巧。 我们可以搜索快门进程,获得它的 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