Linux命令手册遵循80/20规则:您将在大约20%的时间内学习一个主题的80%。
本手册并不试图涵盖与Linux及其命令相关的所有内容。它侧重于您将在80%或90%的时间内使用的小的核心命令,并试图简化更复杂的命令的使用。
所有这些命令都可以在Linux、MacOS、WSL以及任何具有UNIX环境的地方运行。
我希望这本手册的内容能帮助您实现您想要的:熟悉Linux。
它也是最流行的开源操作系统,它给了你很大的自由。
它为组成互联网的绝大多数服务器提供动力。它是一切建设的基础。但不仅仅是这样。Android是基于Linux(修改后的版本)的。
Linux“核心”(称为内核)于1991年在芬兰诞生,它从卑微的开端已经走过了很长一段路。它后来成为GNU操作系统的内核,创造了GNU/Linux二人组。
在Linux上,有一件事是微软、苹果和谷歌等公司永远无法提供的:在你的电脑上做任何你想做的事的自由。
他们实际上走的是相反的方向,建造有围墙的花园,特别是在移动的一侧。
它是由志愿者开发的,有些是由依赖它的公司支付的,有些是独立开发的。但是,没有一家商业公司可以规定Linux中包含哪些内容,或者项目的优先事项。
您也可以使用Linux作为您的日常计算机。我使用MacOS是因为我真的很喜欢它的应用程序和设计(我也曾经是iOS和Mac应用程序的开发者)。但在使用MacOS之前,我使用的是Linux作为我的主要计算机操作系统。
没有人可以决定你可以运行哪些应用程序,也没有人可以用追踪你、你的位置等的应用程序来“呼叫总部”。
Linux的特别之处还在于,它不像Windows或MacOS那样只有一个Linux。取而代之的是,我们有分布。
“发行版”是由一家公司或组织制作的,将Linux核心与其他程序和工具打包在一起。
但还有很多,更多的存在。您也可以创建自己的发行版。但最有可能的是,你会使用一个有很多用户和一个社区的流行软件。这可以让你做你需要做的事情,而不会浪费太多的时间,重新发明轮子,找出常见问题的答案。
一些台式计算机和笔记本电脑出厂时预装了Linux。或者,你也可以将其安装在基于Windows的电脑或Mac电脑上。
但是,你不需要仅仅为了了解Linux的工作原理而破坏你现有的计算机。
如果你使用的是Mac,你只需要知道MacOS的幕后是一个UNIX操作系统。它与GNU/Linux系统有很多相同的想法和软件,因为GNU/Linux是UNIX的免费替代品。
Unix是一个总括的术语,从70年代开始,它将大公司和机构中使用的许多操作系统集合在一起。
MacOS终端使您能够访问与我将在本手册的其余部分中描述的完全相同的命令。
微软有一个用于Linux的官方Windows子系统,您可以(也应该!)。在Windows上安装。这将使您能够在您的PC上以一种非常简单的方式运行Linux。
但在大多数情况下,你会通过像DigitalOcean这样的VPS(虚拟专用服务器)在云中运行一台Linux电脑。
Shell是一个命令解释程序,它向用户公开一个界面,以便与底层操作系统一起工作。
它允许您使用文本和命令执行操作,并为用户提供能够创建脚本等高级功能。
这一点很重要:Shell使您能够以比图形用户界面(GUI)更优化的方式执行任务。命令行工具可以提供许多不同的配置选项,而不会太复杂而无法使用。
有很多不同种类的贝壳。这篇文章关注的是Unix外壳,你可以在Linux和MacOS电脑上找到它们。
随着时间的推移,为这些系统创建了许多不同类型的外壳,其中一些占据了空间:Bash、CSH、Zsh、Fish等等!
所有的贝壳都起源于伯恩贝壳,叫做sh。“谍影重重”是因为它的创作者是史蒂夫·伯恩。
Bash的意思是Bourne-Again贝壳。SH是专有的,不是开源的,Bash创建于1989年,目的是为GNU项目和自由软件基金会创建一个免费的替代方案。由于项目必须付费才能使用Bourne Shell,因此Bash变得非常流行。
如果你使用Mac,试着打开你的Mac终端。默认情况下,它运行ZSH(或Catalina之前的Bash)。
您可以将系统设置为运行任何类型的Shell-例如,我使用Fish Shell。
每个Shell都有自己独特的功能和高级用法,但它们都有一个共同的功能:它们可以让您执行程序,并且可以编程。
在本手册的其余部分,我们将详细介绍您将使用的最常见命令。
我将介绍的第一个命令将帮助您理解所有其他命令。
每次我不知道如何使用命令时,我都会键入man<;命令>;来获取手册:
这是一个手册页面。手册页是作为开发人员学习的重要工具。它们包含了如此多的信息,有时几乎是太多了。上面的屏幕截图只是解释ls命令的14个屏幕中的一个。
大多数情况下,当我需要快速学习命令时,我会使用这个名为TLDR Pages:https://tldr.sh.的网站。这是一个您可以安装的命令,然后您可以像这样运行它:tldr<;命令>;。它为您提供了对命令的非常快速的概述,并提供了一些常见使用场景的方便示例:
这不是人类的替代品,而是一种方便的工具,可以避免在手册页中出现的大量信息中迷失自己。然后,您可以使用手册页浏览可以在命令上使用的所有不同选项和参数。
在文件夹内,可以使用ls命令列出该文件夹包含的所有文件:
如果添加文件夹名称或路径,它将打印该文件夹的内容:
LS接受很多选项。我最喜欢的组合之一是-al。试试看:
文件权限(如果您的系统支持ACL,您还会获得ACL标志)。
这组数据由l选项生成。相反,a选项还会显示隐藏的文件。
一旦有了文件夹,就可以使用cd命令移到其中。Cd表示更改目录。您可以通过指定要移动到的文件夹来调用它。您可以指定文件夹名称或整个路径。
#字符表示注释的开始,该注释在找到后持续到整行。
当您在文件系统中感到迷失时,调用pwd命令以了解您所处的位置:
UNIX命令中的选项通常采用这种形式。您只需将它们添加到命令名之后,它们就会更改命令的行为方式。你也经常可以组合多个选项。
您可以通过键入man<;Commandname>;来查找命令支持的选项。例如,现在尝试使用man mkdir(按Q键以Esc手册页)。手册页是针对UNIX的令人惊叹的内置帮助。
正如您可以使用mkdir创建文件夹一样,您也可以使用rmdir删除文件夹:
要删除包含文件的文件夹,我们将使用更通用的rm命令,该命令使用-rf选项删除文件和文件夹:
请小心,因为此命令不会要求确认,它会立即删除您要求它删除的任何内容。
从命令行删除文件时没有bin,恢复丢失的文件可能很困难。
一旦有了文件,就可以使用mv命令移动它。您可以指定文件的当前路径及其新路径:
PEAR文件现在被移到new_pear。这就是重命名文件和文件夹的方式。
如果最后一个参数是文件夹,则位于第一个参数路径的文件将移动到该文件夹中。在这种情况下,您可以指定一个文件列表,这些文件将全部移动到由最后一个参数标识的文件夹路径中:
触摸珍珠触摸苹果苹果水果#梨和苹果移动到水果文件夹
要复制文件夹,需要添加-r选项以递归复制整个文件夹内容:
您也可以打开一个目录,在MacOS上打开Finder应用程序,同时打开当前目录:
特价菜。符号指向当前目录,如..。指向父目录。
如果该文件已经存在,它将以写入模式打开该文件,并更新该文件的时间戳。
Find命令可用于查找与特定搜索模式匹配的文件或文件夹。它会递归搜索。
查找当前树下具有.js扩展名的所有文件,并打印匹配的每个文件的相对路径:
使用引号将特殊字符(如*)括起来,以避免Shell解释它们,这一点很重要。
使用-type f仅搜索文件,或使用-type l仅搜索符号链接。
在当前树下查找与名称“node_module”或“public”匹配的目录:
您可以通过添加-DELETE选项删除与搜索匹配的所有文件。这将删除过去24小时内编辑的所有文件:
您可以对每个搜索结果执行一个命令。在本例中,我们运行cat来打印文件内容:
它被用来创建链接。什么是链接?它就像一个指向另一个文件的指针,或者一个指向另一个文件的文件。您可能熟悉Windows快捷方式。它们很相似。
硬链接很少使用。它们有几个限制:不能链接到目录,也不能链接到外部文件系统(磁盘)。
例如,假设您有一个名为recules.txt的文件。您可以使用以下命令创建指向它的硬链接:
现在,无论何时编辑这些文件中的任何一个,都会更新这两个文件的内容。
如果删除原始文件,链接仍将包含原始文件内容,因为只有当有一个硬链接指向它时,才会将其删除。
软链接则不同。它们更强大,因为您可以链接到其他文件系统和目录。但请记住,当原件被移除时,链接将被断开。
例如,假设您有一个名为recules.txt的文件。您可以使用以下命令创建指向它的软链接:
在本例中,当您使用ls-al列出文件时,可以看到有一个特殊的l标志。文件名末尾有@,如果启用了颜色,其颜色也会有所不同:
现在,如果您删除原始文件,链接将被断开,并且如果您试图访问它,外壳程序会告诉您“没有这样的文件或目录”:
可以使用gzip命令使用名为LZ77的gzip压缩协议压缩文件。
这将压缩该文件,并在其后面附加一个.gz扩展名。原始文件将被删除。
为防止出现这种情况,您可以使用-c选项并使用输出重定向将输出写入文件名(例如gz)文件:
C选项指定输出将转到标准输出流,保持原始文件不变。
有不同级别的压缩。压缩越多,压缩(和解压缩)所需的时间就越长。级别范围从1(最快,压缩最差)到9(最慢,压缩较好),默认为6。
-v选项打印压缩百分比信息。下面是一个与-k(保留)选项一起使用的示例:
除了-d选项在默认情况下始终处于启用状态之外,ganzip命令基本上等同于gzip命令。
这将压缩并删除.gz扩展名,并将结果放入文件名文件中。如果该文件存在,它将覆盖该文件。
Tar命令用于创建存档,将多个文件分组到单个文件中。
它的名字来自过去,意思是磁带存档(回到档案存储在磁带上的时候)。
C选项代表创建。F选项用于写入归档文件。
要解压gzip的存档文件,可以使用Gunzip或gzip-d,然后解压它。但是tar-xf会识别出它是一个gzip归档文件,并为您这样做:
通常情况下,总是使用一组您喜欢使用的选项来运行程序。
但如果使用-al选项,它将打印更有用的内容,包括文件修改日期、大小、所有者和权限。它还将列出隐藏文件(以.开头的文件):
您可以创建一个新命令,例如,我喜欢将其命名为ll,这是ls-al的别名。
一旦这样做了,您就可以像调用常规的UNIX命令一样调用ll:
要使其成为永久性的,您需要将其添加到外壳配置中。这可以是~/.bashrc或~/.profile或~/.bash_profile(如果您使用Bash Shell),具体取决于用例。
如果命令中有变量,请注意使用引号:如果使用双引号,变量将在定义时解析。如果使用单引号,它将在调用时解析。这两个是不同的:
$pwd指的是外壳所在的当前文件夹。如果您现在导航到一个新文件夹,lsCurrent会列出新文件夹中的文件,而lsthis仍会列出您定义别名时所在文件夹中的文件。
在某些方面与尾巴相似,我们有猫。不过,cat还可以向文件中添加内容,这使它变得超级强大。
在最简单的用法中,cat将文件内容打印到标准输出:
使用输出重定向操作符,您可以将多个文件的内容连接到一个新文件中:
使用>;>;可以将多个文件的内容附加到一个新文件中,如果该文件不存在,则创建该文件:
查看源代码文件时,查看行号很有帮助。您可以使用-n选项让cat打印它们:
您只能使用-b向非空行添加一个数字,也可以使用-s删除所有多个空行。
Cat通常与管道操作符|结合使用,将文件内容作为输入提供给另一个命令:cat file1|另一个命令。
较少的命令是我经常使用的命令。它在一个漂亮的交互式用户界面中显示存储在文件中的内容。
您可以使用向上键和向下键导航文件内容,也可以使用空格键和b逐页导航。您也可以按G键跳到文件的末尾,然后按g键跳回开头。
您可以通过按/并键入要搜索的单词来搜索文件中的内容。这是向前搜索。您可以使用?向后搜索。符号并键入一个单词。
该命令只是可视化文件的内容。您可以通过按v键直接打开编辑器。它将使用系统编辑器,在大多数情况下,系统编辑器是vim。
按F键进入跟随模式或观看模式。当文件被其他人更改时,比如来自另一个程序,您可以实时看到更改。
默认情况下不会发生这种情况,而且您只能看到打开文件时的文件版本。您需要按Ctrl-C退出此模式。在本例中,其行为类似于运行Tail-f<;filename>;命令。
您可以打开多个文件,并使用:n(转到下一个文件)和:p(转到上一个文件)在它们之间导航。
在我看来,Tail的最佳用例是在调用时使用-f选项。它在最后打开文件,并监视文件更改。
每当文件中有新内容时,它都会打印在窗口中。这对于查看日志文件非常有用,例如:
您可以从特定行开始打印整个文件内容,在行号前使用+:
尾巴可以做更多的事情,一如既往,我的建议是检查一下男人的尾巴。
Wc命令为我们提供了有关它通过管道接收的文件或输入的有用信息。
返回的第一列是行数。二是字数。第三个是字节数。
ASCII字符集中的字节等同于字符。但对于非ASCII字符集,字符数可能会有所不同,因为某些字符可能需要多个字节(例如,这在Unicode中发生)。
Grep命令是一个非常有用的工具。当你掌握了它,它会对你的日常编程有很大的帮助。
您可以使用grep搜索文件,或将其与管道结合以过滤另一个命令的输出。
例如,下面是如何在index.md文件中查找Document.getElementById行的匹配项的方法:
一件非常有用的事情是告诉grep在匹配的行前打印2行,在匹配行之后打印2行,以获得更多上下文。这是使用-C选项完成的,该选项接受以下几行:
如前所述,您可以使用grep过滤另一个命令的输出。我们可以使用以下工具复制与上面相同的功能:
您可能会发现另一件非常有用的事情是使用-v选项反转结果,排除与特定字符串匹配的行:
默认情况下,排序区分大小写,并按字母顺序排序。使用--Ignore-case选项对不区分大小写的内容进行排序,使用-n选项按数字顺序进行排序。
排序不像许多UNIX命令那样只对文件起作用,它还对管道起作用。因此,您可以在另一个命令的输出上使用它。例如,您可以使用以下命令对ls返回的文件进行排序:
Sort功能非常强大,有很多选项,您可以通过调用man Sort来探索这些选项。
您可以从文件中获取这些行,也可以使用另一个命令的输出中的管道:
排序命令有自己的方法来使用-u(唯一)选项删除重复项。但优衣库拥有更大的权力。
您可以告诉它只显示重复的行,例如,使用-d选项:
Diff是一个方便的命令。假设您有两个文件,它们包含几乎相同的信息,但您找不到这两个文件之间的区别。
假设您有两个文件:dogs.txt和more dogs.txt。不同之处在于more dogs.txt多了一个狗名:
Diff dogs.txt more dogs.txt会告诉您第二个文件还有一行,第三行是Vanille:
如果颠倒文件的顺序,它会告诉您第二个文件缺少第3行,其内容为Vanille:
但是,您会更熟悉-u选项,因为Git版本控制系统使用该选项来显示版本之间的差异:
比较目录的工作方式与此相同。您必须使用-r选项进行递归比较(进入子目录):
如果您感兴趣的是哪些文件不同,而不是内容,请使用r和q选项:
通过运行man diff,您可以在手册页中探索更多选项:
ECHO命令完成一项简单的工作:它将传递给它的参数打印到输出。
注意特殊字符需要用反斜杠转义。$例如:
这只是个开始。当涉及到与外壳功能的交互时,我们可以做一些很好的事情。
我们可以回显当前文件夹中以字母o开头的文件:
这里可以使用任何有效的Bash(或您正在使用的任何Shell)命令和功能。
您还可以执行命令,并将结果打印到标准输出(或者打印到文件,如您所见):
请注意,默认情况下不保留空格。为此,您需要用双引号将命令括起来:
Linux或MacOS等操作系统(以及一般的每个UNIX系统)中的每个文件/目录都有一个所有者。
一个文件的所有者可以用它做任何事情。它可以决定那份文件的命运。
所有者(和根用户)也可以使用chown命令将所有者更改为其他用户:
例如,如果您有一个属于超级用户的文件,则不能以其他用户身份对其进行写入:
通常需要更改目录的所有权,并递归所有。
.