介绍
谁应该阅读本指南
您是GNU /Linux的初学者,并且希望超越普通的窗口拖动和鼠标单击外观吗?本指南面向希望学习GNU /Linux命令行基础知识的绝对初学者。本教程旨在遍历与导航,文件和目录管理,软件安装和基本系统故障排除相关的基本Linux命令。
什么是GNU /Linux命令行
机会是,每当您听到有人谈论GNU /Linux操作系统时,您也会听他们谈论命令行或Linux命令。运行该命令并执行该命令!对?
但是,为什么呢?为什么GNU /Linux操作系统几乎总是与命令和命令行链接?简单的答案是,命令行是GNU /Linux操作系统的组成部分,因此,它为用户提供了更有效,更准确地执行任务的可能性,最重要的是,它还提供了有关整个执行过程的其他见解信息。
许多GNU /Linux的初学者都将命令行与Linux命令关联在一起,这些命令带有烦躁不安,high-level向导的魔术技能和不必要的开销。
让我们对自己诚实吧!不管您对GNU /Linux系统及其命令行有什么厌恶的理由,原因很可能与缺乏了解和不愿学习有关。
因此,我们不要将缺点归咎于GNU /Linux系统!无论您是初学者还是高级用户,它都能为您提供帮助。该系统可以为您提供多大程度的帮助,并不取决于您钱包的深度,因为某些其他专有操作系统就是这种情况!您从GNU /Linux系统获得的帮助量完全取决于您的学习意愿和决心。
在此阶段,我确定您要问自己的问题是:使用GNU /Linux操作系统是否需要学习GNU /Linux命令行和无数命令?快速的答案是不!安装了GUI的任何体面的GNU /Linux操作系统都不需要用户使用命令行来执行基本甚至高级任务。
您可能考虑学习GNU /Linux命令行的唯一原因是为了提高效率,以充分利用系统的大部分资源,并且如果前面的任务要求您这样做。请记住,许多GNU /Linux用户已经使用了多年甚至不知道命令行是什么!不知道Linux命令行是否完美就可以了,如果系统执行了您需要的操作,则即使是最基本的命令也不需要学习。
无论您使用哪种GNU /Linux操作系统,无论它是否具有图形用户界面,命令行始终以某种形式出现。
因此,如果您了解命令行基础知识,则无论使用什么系统,都仍会感到宾至如归。命令行通过使用各种命令,可以在没有GUI的情况下管理系统并甚至在任何GNU /Linux系统上执行最复杂的任务,以及远距离远程似乎使您感觉自己坐在正确的位置电脑正面。
但是,要做到这一点,至少需要对GNU /Linux命令行有基本的了解,并了解它提供的某些命令的一些基本用法。不要害怕,因为这正是您阅读此Linux命令教程将学到的内容。
什么是Linux命令
Linux命令是用于管理整个系统的整个GNU /Linux操作系统的本质。您可能不知道,但是在图形用户界面中运行的大多数应用程序都在后台为您执行Linux命令以完成给定的任务。
让应用程序为我们自动运行Linux命令有许多明显的好处。但是,缺点是,在许多情况下,我们无法自定义命令执行以使其达到期望的结果。此外,如果出了什么问题,用户很可能会被蒙在鼓里,甚至没有任何关于如何开始解决问题的提示。
现在您可能在想:好的,那很好多少个命令在那儿,我应该全部学习吗?GNU /Linux系统上可用的Linux命令数量无关紧要,因为系统之间的数量总是不同的。但是,如果您坚持要求确切的数字,请在终端中执行以下命令:
$ for i in ${PATH//:/ }; do ls $i; done | sort | uniq | wc -l
系统上可用的命令数量将有所不同。最重要的是,平均而言,GNU /Linux操作系统可能包含数千个命令,这些命令最终还会回答我们的下一个问题,即用户是否需要学习所有这些命令。好吧,您可以尝试,但是此任务注定要失败。
因此,最好的方法是从基础开始。绝对必须学习Linux命令,以帮助您导航GNU /Linux文件系统并执行基本的管理任务。一旦完成此任务并对Linux命令行充满信心,只需使用GNU /Linux系统即可轻松完成其余工作。您需要的是开放的胸怀和决心。
好的,这个闲聊已经足够,让我们开始吧!
基本的File-system和Navigation Linux命令
命令行参数,选项和参数
如果人们希望完全理解GNU /Linux命令行,那么了解Linux命令行参数,选项和参数之间的差异可能是最关键的部分。因此,请不要跳过本主题,而要确保在继续进行下一部分之前,您对本主题有充分的了解。
解释Linux命令行参数,选项和参数之间差异的最佳工具是ls命令。如果您不知道ls
命令,因为此命令将在后面的部分中详细介绍。打开终端并运行以下命令。不要输入$
符号,因为此符号仅用于通知您这是要在命令行上执行的命令,并且应以常规的非特权用户身份执行:
$ ls
键入上述命令并按Enter键后,该命令将列出当前目录中的所有文件和目录。现在,请忽略该命令的输出,请注意,该命令由单个参数组成,即该命令ls
本身。我们称这个论点为论点0
。接下来,尝试以下命令:
$ ls -a
上面的命令包含两个参数。第一个参数称为参数0
是个ls
命令本身,第二个参数编号为1
是个ls
命令的选项-a
。
命令选项允许用户修改命令输出。每个Linux命令都有一组不同的选项。命令选项是hard-coded放入命令本身。顾名思义,命令选项是可选的,不需要用户使用。在这种情况下ls
命令的选项-a
指示命令还打印位于我们目录中的隐藏文件或目录。
仍在主目录中时,运行以下命令:
$ ls -l .bashrc
如果您遵循,您已经知道上面的命令包含三个参数。首先,有0
命令本身的参数。第二个论点,更确切地说,是1
是个ls
命令的选项-l
指示ls
命令产生长列表输出,为用户提供有关一个或多个文件的更多信息。最后,第三个参数编号2
是提供给ls
命令告诉命令仅对名为的单个文件起作用.bashrc
。
请注意,在上述情况下.bashrc
归档前缀.
是文件名的一部分,它表示文件已隐藏。隐藏意味着ls
默认情况下,该命令不会将此文件作为其输出的一部分列出,除非-a
使用选项。
参数是命令行自变量,可为命令本身或其一个或多个选项提供附加信息。根据要执行的命令,可以提供一个或多个选项或参数。考虑以下示例:
$ ls -l -h .bashrc .bash_history
在这种情况下,我们的命令包含五个参数。有ls
命令,两个选项,分别是-l
和-h
最后有两个文件名作为参数,.bashrc
和.bash_history
文件。
在命令行上提供所有参数的顺序取决于您正在执行的Linux命令。但是,建议的通用规则是在命令后提供所有必需的选项,后跟所有必需的参数。例如,下面的命令也是有效的命令,其产生的输出与上面的命令相同,但是,应避免这种命令语法:
$ ls .bashrc -l .bash_history -h
最后,为了缩短您的命令,使其更具可读性,大多数命令允许用户将多个选项组合为一个参数。意味着可以组合选项-l
和-h
成为一个参数-lh
。例如:
$ ls -lh .bashrc .bash_history
以下视频总结了整个部分。到目前为止,您应该对命令行参数,选项和参数有一个清晰的了解。
文件系统导航
本节涵盖Linux命令行的另一个重要部分,即文件系统导航。这些年来,我已经看到许多用户很难理解GNU /Linux文件系统导航,因为它与通常的导航法有很大的不同。C:
要么D:
驱动器。在本节中,您还将学习前两个Linux命令,它们是cd
命令和pwd
命令。
让我们从以下语句开始:把…忘了吧C:
要么D:
从其他专有操作系统中获得的驱动器。这些知识不适用于此处,只会使您感到困惑。 GNU /Linux文件系统允许从整个文件系统内的任何目录访问任何硬盘驱动器或分区。但是,在现阶段,我们不应该为此担心。
也许描述GNU /Linux文件系统的最好比喻是我已经使用的那个类比。Bash脚本教程。想象一下GNU /Linux文件系统是多层建筑。所谓的根目录(建筑物的入口门)由/
提供整个文件系统(建筑物)的条目,因此可以访问所有目录(级别/房间)和文件(人员)。
要导航到3层的1号房,我们首先需要进入大门/
,然后进入3级level3/
然后从那里进入room1
。因此,绝对路径建筑物中这个特定房间的位置是/level3/room1
。从这里开始,如果我们也想在3楼同时访问room2,我们首先需要输入以下内容来离开当前位置:room1../
然后输入房间名称room2
。我们拿了一个相对路径到room2,在这种情况下是../room2
。我们已经在3楼了,所以无需离开整座建筑物,而是通过正门走上绝对的路/level3/room2
。令人困惑?在使用GNU /Linux命令行进行了几次会话后,请不要担心,知识会渗入其中,并成为您的第二天性。
信不信由你,GNU /Linux操作系统为所有用户提供了一个指南针,以以下形式帮助文件系统导航:pwd
(pintw欧金directory)命令。每当您迷路时,只需输入pwd
命令,它将向您显示路径。现在就试试。打开终端并输入pwd
跟回车:
$ pwd
默认情况下,您的起始工作目录始终是您的主目录。每个非系统用户的目录都位于/home
目录。如上图所示,用户主目录的绝对路径linuxconfig
是/home/linuxconfig
。如果您的系统包括用户”john”,则该用户主目录的绝对路径为/home/john
。
只有拥有该目录的实际用户和对GNU /Linux而言是管理员的管理员才可以访问任何用户主目录。root
用户。
在这一阶段,我们应该知道如何在命令行上输入命令,并且我们也知道如何获取文件系统中的当前位置。现在是时候开始四处走动了。为此,我们使用cd
(Changdirectory)命令。的cd
命令允许用户在用户具有适当访问权限的情况下导航到文件系统上可用的任何目录。
通过执行以下命令来尝试它,不要害怕尝试。不要忘记您的个人指南针,pwd
命令,以立即告诉您您当前的位置。请确保更换以下linuxconfig
具有您自己的用户名的用户:
$ cd /home
$ cd linuxconfig
$ cd /
$ cd home/linuxconfig
$ cd ../linuxconfig
$ cd ../../etc
$ cd /home/linuxconfig
除了5号线和6号线上面的命令应该是self-explanatory。上5号线我们使用了快捷方式../
上移到父目录linuxconfig
目录。上6号线我们向上移动了两个目录,最终导航到etc
目录。
执行cd
命令,不带任何参数,可以从任何位置立即导航到用户主目录。执行cd -
在您最近访问的两个位置之间切换。执行后您最终在哪个目录中cd ~
和cd .
命令?
你能说出两者之间的区别吗绝对和相对的路径?查看上面的图片,您可以计算出使用导航文件系统时,我们使用绝对路径还是相对路径的次数。cd
命令?
提示:绝对路径始终以/
字符。
遍历GNU /Linux文件系统并理解绝对路径和相对路径之间的差异对于任何初学者而言都不是容易的话题。继续前进之前,请确保您对cd
Linux命令和目录之间的导航,因为在接下来的部分中,这一知识将为您提供很好的服务。
列出目录内容
在这一点上,您应该对使用cd
命令,并且您还对GNU /Linux命令行有基本的了解,包括命令行参数,选项和参数。到目前为止,我们已经学会了如何导航到任何目录,但是还没有学会如何列出目录内容。列出目录内容是本节的主题。
用于列出任何目录内容的工具是ls
命令。现在就试试。打开终端并输入ls
自己的主目录中的命令,没有任何选项或参数:
$ ls
通过执行ls
如果命令没有任何选项或参数,该命令将列出当前工作目录的内容。许多现代终端通过将目录着色为蓝色,将常规文件着色为白色以及将可执行文件着色为绿色来向用户提供其他信息。请注意,您不会在许多终端上找到这种奢侈,因此,我们需要学习如何使用手动区分各种目录内容项。ls
命令。
大多数命令带有手册页,可用于了解其功能以及每个特定命令接受的参数。使用man
命令以显示任何所需命令的手册页。例如,显示ls
命令执行man ls
。要退出手册页,请按q
键。
正如我们在上一节中已经了解的那样,可以通过使用预编程的选项来修改命令的输出。在这种情况下-l
选项也称为长列表,将更多信息添加到默认值ls
输出:
$ ls -l
通过使用-l
选项,ls
该命令为用户提供了额外的信息,例如权限,用户或组的所有权,文件大小和修改时间。
另一个共同点ls
命令选项是-a
其中列出所有以及目录中的隐藏文件或目录。名称以开头的任何文件或目录.
隐藏,因此不包含在默认值中ls
命令输出。
$ ls -a
许多ls
命令的选项仅与其他选项结合使用才有意义。例如,要显示任何选定文件的文件大小,用户可以提供ls
与命令-l
选项,并以实际的文件名作为参数。考虑以下ls
命令示例以显示image.jpg
文件:
$ ls -l image.jpg
默认情况下,ls
命令显示文件大小(以字节为单位),除非-h
(可读)选项。请注意-h
除非与-l
选项。
此时,请务必注意,通过使用参数,用户可以列出任何目录或查找有关整个文件系统上任何文件的信息,而无需离开其主目录。为此,只需供应绝对要么相对的您希望列出更多信息的文件或目录的路径参数到ls
命令。尝试以下ls
命令示例:
$ ls /etc/systemd
$ ls -l ../
$ ls -lh /etc/services
使用ls
命令的手册页,看看是否可以找到一种方法来显示/etc
目录根据文件大小降序排列。
创建目录
目录的目的是保持文件系统,从而使我们的文件和系统文件井井有条。在本节中,您将学习如何使用mkdir
GNU /Linux命令行上的命令。
在GNU /Linux系统上创建目录就像执行以下命令一样简单mkdir
命令,同时直接指定所需的名称作为参数。现在就试试。打开终端并创建一个新目录,例如dir1
在您的主目录中。
$ mkdir dir1
避免在文件和目录中使用空格作为名称的一部分。在Linux中,可以通过用引号将名称或名称引起来来创建目录或文件名,并在其中留有空格。mkdir "my files"
,但是稍后可能会造成问题,因此请不惜一切代价避免!如果需要在文件或目录名称中使用空格,请使用下划线_
代替。
接下来,使用ls
命令以列出当前工作目录的内容,如果目录创建正确,则应该在命令输出中看到它。
与在当前工作目录中创建目录相同,您也可以在文件系统上的任何位置创建目录,前提是您拥有适当的权限。现在创建一个名为example
在/tmp
目录。
现在有两种方法可以完成此任务。首先,我们可以导航到/tmp
使用cd
命令并在目录中执行一次mkdir
命令,后跟新的目录名称。
另一种解决方案是通过仅在新目录名称前加上目录的正确绝对或相对路径作为前缀来创建目录example
目录将被创建。因此,无需使用cd
命令移至/tmp/
之前的目录mkdir
命令执行:
$ mkdir /tmp/example
关于mkdir
命令。只要您理解了前面解释的绝对路径和相对路径之间的区别,就可以了。只有一种其他常用选项与mkdir
命令,那就是-p
选项。
假设您希望创建一个新目录dir2
在现有目录中dir1
以及创建新的dir3
中dir2
。第一个解决方案是首先创建dir2
然后执行第二个mkdir
创建命令dir3
在dir2
目录。但是,使用-p
选项,这可以通过一个mkdir
命令执行:
$ mkdir -p dir1/dir2/dir3
使用您的用户帐户,尝试创建一个名为my_dir
在/etc
目录。它行得通吗?如果没有,为什么?
创建文件并读取文件内容
GNU /Linux系统以纯ASCII文本文件的形式存储有关设置,配置以及诸如日志之类的数据的大多数信息。因此,对于任何用户而言,至少必须对文本文件操作有基本的了解。
在本节中,您将学习如何创建文件,读取文件内容以及如何使用基于命令行的简单文本文件编辑器来编辑文本文件。
首先创建一个名为file1
在我们的主目录中。为此,我们使用touch
命令。打开您的终端并输入以下Linux命令:
$ touch file1
就这些!您现在已经成功创建了一个名为file1
在您的主目录中。执行ls
立即命令,您应该会看到这个新文件位于您的主目录中。
也许,您可能已经注意到我们创建的文件没有扩展名,例如.txt
要么.exe
。请注意,GNU /Linux系统上的文件扩展名除了在执行ls
命令列出所有文件和目录,很明显带有扩展名的文件.txt
可能是ASCII文本文件,并且带有.png
可能是图像文件。
在这一点上,必须指出,有许多方法可以在GNU /Linux操作系统上创建文件。实际上,几乎不需要像我们之前那样创建一个空文件。实际上,touch命令的主要目的不是创建文件,而是使用文件时间戳进行操作,这是另一个故事了。
由于文件的主要目的是存储数据,因此我们将这样做。让我们使用一个名为nano
创建一个名为todo-list.txt
包含一些任意文本。首先执行以下命令:
$ nano todo-list.txt
一旦执行nano
命令,nano编辑器打开,让您编辑新内容todo-list.txt
文件。在nano
编辑器根据需要对文件内容进行任何修改。
准备好后,按CTRL+o
其次是ENTER
键来保存文件。此时,新todo-list.txt
文件已创建。要退出nano
编辑按CTRL+x
组合键,如下图所示:
您可以通过指定文件名作为参数来继续编辑任何现有文本文件。nano
文本编辑器命令。
到目前为止,我们学习了如何创建文件以及如何使用命令行文本编辑器编辑现有或新的文本文件。我们还没有介绍的是如何读取文本文件的内容。好吧,说实话,没有什么可做的!您可以使用以下命令读取任何文件的内容cat
GNU /Linux命令。
现在就试试。执行cat
命令并作为参数提供您要检查的文件的名称。例如:
$ cat todo-list.txt
有些文件可能跨越数千行。尝试查找内容/etc/services
通过使用cat
命令。某些终端的行数有限且没有滚动条。因此,仅通过使用cat
命令。试验诸如less
要么more
阅读内容/etc/services
文件。
在我们将此部分标记为“完成并删除”之前,您还应该熟悉一个命令。该命令称为file
。
请记住,以前我们曾讨论过,将文件名后缀带有扩展名不是必需的。好吧,如果是这样的话,我们将如何知道在此主目录或GNU /Linux文件系统上任何位置存储的文件类型?这是file
命令变得很方便。的file
命令输出提供给它的任何文件的文件类型作为参数。现在就试试:
$ file todo-list.txt
重命名或移动文件和目录
另一个合理的步骤是学习如何重命名或移动文件和目录。至此,我们已经讨论了如何创建文件或目录,但是如何将现有目录或文件移动到另一个位置呢?好吧,您应该高兴地知道,在GNU /Linux系统下移动和重命名文件或目录在本质上是相同的。
重命名和移动GNU /Linux文件系统上的文件是一项简单的任务。所需要做的就是mv
命令以及对绝对路径和相对路径的理解,如上文所述文件系统导航部分。
考虑以下示例:
$ touch file1
$ mkdir dir1
使用上面touch
和mkdir
命令我们创建了一个名为file1
和目录dir1
。的用法touch
和mkdir
命令之前已经介绍过,因此不需要进行解释。
前面的任务是重命名file1
至file2
和dir1
至dir2
通过使用mv
命令。为此,我们需要提供mv
带有我们希望重命名的文件或目录的绝对或相对路径的命令作为第一个参数。第二个必需参数是文件或目录的绝对或相对路径,我们希望将文件或目录重命名为:
$ mv file1 file2
$ mv dir1 dir2
这里要了解的重点是GNU /Linux没有明确的命令来重命名文件。相反,mv
(移动的缩写)命令用于在过程中更改文件或目录名称的同时将文件或目录从一个位置移动到另一位置。考虑以下示例:
$ mv file2 /tmp/file3
$ mv dir2 /tmp/dir2
第一条命令已移动file2
进入目录/tmp/
并将其重命名为file3
。第二条命令已移动dir2
进入/tmp/
并且由于我们提供了相同的目标目录名,因此目录名保持不变。
因此,第二个命令实际上只是移动源dir2
进入目标目录/tmp/
因此,不需要用于说明新目录名称的第二个参数,可以将其简单地执行为:
$ mv dir2 /tmp/
了解以上内容至关重要mv
命令,因为mv
该命令还可以接受多个参数。这意味着可以通过执行单个目录来同时移动多个目录和/或文件mv
命令:
$ mkdir dir4 dir5
$ touch file4 file5
$ mv file4 dir4 file5 dir5 /tmp
唯一遵循多个的规则mv
命令参数是:如果有多个源参数提供给mv
命令最后提供的参数必须是目录。
以上mv
命令已将多个文件和目录移动到新位置:/tmp
目录。请务必在此处指出,无论您要提供给多少源文件或目录,mv
命令作为参数最后提供的参数被视为目标。
在我们转向另一个主题之前,重要的是要提到一个可能会破坏事实的事实。mv
命令。
如果将目标文件参数提供给
mv
该命令已经存在,可能会在不发出警告的情况下被覆盖,因此此操作有可能不可逆地删除您的数据而无法恢复。考虑以下mv
命令示例:
$ cat /tmp/sample.txt
linuxconfig.org
$ touch sample.txt
$ mv sample.txt /tmp/sample.txt
$ cat /tmp/sample.txt
$
如果不确定,请使用-i
指示的选项mv
命令以在目标文件已存在的情况下产生警报。例:
$ mv -i sample.txt /tmp/sample.txt
mv: overwrite '/tmp/sample.txt'?
下图展示了mv
如本节中所述执行命令:
复制文件和目录
在上一节中,我们讨论了如何通过使用文件和目录将文件和目录从一个位置移动到另一个位置。mv
GNU /Linux命令。本节涵盖了有关如何通过使用cp
命令。
从上一节中收集的大多数知识将有助于我们学习cp
GNU /Linux命令作为两者的语法mv
和cp
命令非常相似。主要区别在于,无需移动文件或目录,cp
命令创建源文件或目录的精确副本。
就像是mv
命令cp
该命令至少需要提供两个参数。第一个参数是源文件或目录,第二个参数是目标文件或目录。
让我们从创建位于我们的主目录中的文件副本的简单示例开始。首先,我们使用touch
命令创建一个新文件,名为file1
,然后我们将其精确复制为file2
:
$ touch file1
$ cp file1 file2
此处显而易见的规则是,提供给cp
命令不能相同:
$ cp file1 file1
cp: 'file1' and 'file1' are the same file
为源和目标参数提供完全相同的文件名的唯一方法是使用绝对路径或相对路径将文件复制到其他目录。下列cp
命令示例复制了file1
到目录/tmp
:
$ cp file1 /tmp/file1
但是,如果您无意更改文件名,则完全不需要提供文件名作为目标参数。因此,以上命令可以缩写为:
$ cp file1 /tmp/
通过执行单cp
命令制作一份副本/etc/services
文件到您的主目录并将其重命名为port-numbers.txt
。
您可以使用相同的cp
命令语法还可以复制目录。但是,有一个显著的区别,那就是要复制目录,我们需要使用-r
(递归)cp
命令选项。考虑以下示例:
$ mkdir dir1
$ cp dir1 /tmp/
cp: -r not specified; omitting directory 'dir1'
$ cp -r dir1 /tmp
在GNU /Linux中也是如此mv
命令,cp
该命令还接受多个参数。这意味着可以通过执行单个文件来同时复制多个文件和目录cp
命令。
规则是最后一个参数必须是目录。检查以下示例,我们首先在其中创建另一个示例目录和文件。接下来,我们将此目录以及其他两个文件复制到/tmp/
目录:
$ mkdir dir2
$ touch file1 file2
$ cp -r dir2/ file1 file2 /tmp/
如果将目标文件参数提供给
cp
该命令已经存在,可能会在不发出警告的情况下被覆盖,因此此操作有可能不可逆地删除您的数据而无法恢复。在某些情况下,此行为也对目录有效!考虑以下cp
命令示例:
$ cat sample.txt
linuxconfig.org
$ touch /tmp/sample.txt
$ cp /tmp/sample.txt sample.txt
$ cat sample.txt
$
如果不确定,请使用-i
指示的选项cp
命令以在目标文件已存在的情况下产生警报。例:
$ cp -i /tmp/sample.txt sample.txt
cp: overwrite 'sample.txt'?
下图展示了cp
如本节中所述执行命令:
删除文件和目录
在此阶段,您应该对Linux命令行基础非常有信心。您可能还已经注意到使用命令的一种模式。您应该知道如何创建,移动和重命名任何文件或目录。但是,在不知道如何删除文件或目录的情况下,文件系统将填满,因此将失去存储更多数据的能力。
本节将介绍两个命令。第一个命令是rmdir
第二个命令是rm
。当看两个的名字rmdir
和rm
命令,您可能会很快得出以下结论:rmdir
用于删除目录,后一个命令rm
用于删除文件,大多数情况下您是对的。让我们先来看一下rmdir
首先命令。
对于我们的实验,我们将使用以下目录结构,其中包含多个sub-directories和文件。我们的目标是学习如何使用rmdir
和rm
删除所有文件和目录的命令:
正如您已经学习的任何GNU /Linux命令一样,rmdir
该命令还接受多个参数。例如,删除dir4
我们需要做的就是提供rmdir
命令目录,其中包含我们希望删除的目录名称作为参数:
$ rmdir my_files/dir4/
简单吧?现在让我们删除下一个目录dir1
:
$ rmdir my_files/dir1
rmdir: failed to remove 'my_files/dir1': Directory not empty
如您所见,上面rmdir
命令无法删除dir1
目录。的主要工作rmdir
是删除目录,并且由于目录dir1
包含文件,rmdir
命令省略了该目录,并显示一条错误消息,提示该目录不为空。
逻辑是合理的!删除非空目录的唯一方法是使用rmdir
相当长的命令行选项--ignore-fail-on-non-empty
。但是,在这一点上,使用rm
命令。的rm
该命令具有正确的选项组合,能够删除任何数量的文件和目录,无论目录是空的还是由任意数量的文件和sub-directories填充。
首先,让我们测试rm
删除名为my_file.txt
:
$ rm my_files/my_file.txt
用以下方式删除目录rm
我们需要使用-r
选项组合。选项-r
代表递归,表示该命令将删除任何目录及其内容。以下命令将删除整个my_files/dir1
目录,包括任何文件或sub-directory:
使用删除文件
rm
命令是不可逆的动作。这意味着,根据所使用的文件系统和系统使用情况,您的数据无法恢复。确保使用时测量两次并切一次rm
Linux命令。
$ rm -r my_files/dir1/
使用rm
命令很简单。与许多其他Linux命令一样,它接受多个参数,因此可以轻松删除单个或任意数量的文件和目录。
执行单rm
命令删除整个my_file
目录位于您的主目录中。
搜索文件或目录
此时,您应该对file-system导航和文件/目录管理非常满意。在转到下一部分专门讨论基本GNU /Linux系统管理命令的部分之前,我们应该讨论如何在需要时查找文件。 Linux有两个主要命令,它们使用户可以搜索文件。即是locate
命令和find
命令。
的find
命令是一个功能强大的工具,因此使用起来可能有些困难,尤其是对于初学者而言。因此,我们涵盖了locate
命令,因为它更容易使用。
的基本用法locate
Linux命令非常简单。类型locate
后跟文件或目录名称作为参数。例如,让我们搜索一个名为issue
:
$ locate issue
上面的命令在整个file-system中产生包含字符串的文件或目录的列表issue
文件或目录名称中的任何位置。根据您要搜索的内容,此列表可能会增长到可观的规模。
因此,搜索精确的文件名匹配可能会产生输出,我们更倾向于寻找容纳的输出。为此,我们需要使用常用表达和locate
的命令行选项-r
。
正则表达式远远超出了本教程的范围。现在,我们只需要知道,要搜索确切的文件名或目录名,我们需要将字符串用/
和$
。例如:
$ locate -r /issue$
在您提升自己的地位之前locate
Linux命令大师,让我们简要讨论一下如何locate
命令运行。的locate
该命令的搜索速度非常快,因为它仅查询每天使用一次更新的现有预构建数据库索引文件。updatedb
命令。
缺点是locate
该命令将不会拾取自上次创建以来创建的任何文件或目录updatedb
命令已执行。但是,要包括任何新文件,用户可以选择运行updatedb
手动命令如下图所示:
$ sudo updatedb
尝试玩locate
Linux命令,看看是否可以找到一种方法来指示该命令仅在特定目录中搜索文件。
基本管理Linux命令
使用管理特权执行命令
您将运行的大多数Linux命令将在没有管理特权的情况下执行。实际上,仅在前面的任务需要执行命令的情况下才建议使用具有管理特权的命令执行命令。遵循这个简单的规则将有助于整体系统的完整性,并使用户在与Linux命令行交互时避免代价高昂和不必要的错误。
但是,很难想象完全避免以管理特权执行Linux命令。新软件安装,核心系统服务配置等需要管理特权。这是sudo
Linux命令变得很方便。给任何Linux命令加上前缀sudo
将确保以管理员身份(即root权限)执行命令。自己尝试:
$ sudo whoami
$ whoami
默认情况下,5分钟sudo
用户使用反复输入特权命令sudo
第一次成功认证后不带密码的命令。
每当您阅读任何与Linux相关的文档,要求您从终端运行Linux命令时,您都会看到所有带有前缀的命令$
要么#
。的$
符号要求将任何给定的Linux命令作为常规非特权用户执行。另一方面,#
指示给定的Linux命令将以root /管理特权直接执行,或者以root用户身份或通过使用sudo
命令。
软件安装
您的GNU /Linux系统的默认安装可以是(通常)是自定义的,以包括其他满足您需要的软件。如果各种GNU /Linux发行版之间存在差异,则这是安装软件的方式。该软件以可从相关分发软件包存储库中获得的软件包的形式提供。
关于软件包管理,GNU /Linux发行版有两个主要分支。
即它们是DEB和转速。第一个分支正在使用apt
第二个分支正在使用yum
命令以安装软件。当然,还有许多其他辅助命令可帮助安装或维护软件,但下面将说明基本知识。
首先,我们开始搜索要安装的软件的软件包名称。假设我们需要安装某种洪流客户端,以便能够下载洪流文件。首先,我们搜索一个包名称:
DEB GNU/LINUX SYSTEMS:
$ apt search torrent client
RPM GNU/LINUX SYSTEMS:
$ yum search torrent client
上面的命令将生成软件包名称及其相关描述的列表。阅读说明列,然后从左侧列中选择要安装的软件包。选择了要安装的软件包后,请再次执行相关的软件包管理命令以安装该软件包。
假设我们要安装的软件包称为bittorrent
。要开始安装,必须按照上一节中所述的管理特权执行我们的命令。出现提示时,键入y
执行安装:
DEB GNU/LINUX SYSTEMS:
$ sudo apt install bittorrent
RPM GNU/LINUX SYSTEMS:
$ sudo yum install bittorrent
执行apt search
命令可能会产生一长串的软件包,这些软件包可能不适合您的终端屏幕。为了克服这种不便,请使用命令more
然后使用空格键向下滚动列表。例:
$ apt search YOUR SEARCH KEYWORDS | more
至放弃然后返回命令行q
键。
检查磁盘空间使用情况
在本节中,您将学习如何检查目录和文件大小,以及如何获取有关当前磁盘空间使用情况的信息。我们将在本节中介绍的第一个Linux命令是df
命令。命令名称df
是单词的缩写d吠Free。
通过执行df
如果命令没有任何参数,则该命令返回有关所有可访问分区的已用磁盘空间和可用磁盘空间的信息(以千字节为单位)。默认值df
命令输出以千字节为单位打印磁盘使用情况信息。但是,可以通过使用-h
选项:
$ df -h
要检查任何所需目录的可用磁盘空间,只需将该目录的完整路径作为参数添加到df
命令。例:
$ df -h /home
既然我们已经了解了如何检查可用磁盘空间,那么了解如何检索有关文件和目录大小的信息也很重要。
要获取有关human-readable格式文件大小的信息,我们可以使用上面介绍的内容ls
结合命令-l
(long-listing)和-h
(human-readable)选项以及相关文件的完整或相对路径。例如下面ls
命令将返回称为的文件的大小swapfile
位于根目录中/
:
$ ls -lh /swapfile
与检查文件大小相同,我们可以使用du
命令以检查目录大小。默认情况下du
当提供目录参数时,命令将显示以下目录中所有目录的大小:
$ du -h /home/
要获取单个目录的总大小摘要,请使用-s
选项。再次,如本节中所有上述示例一样,我们对human-readable输出感兴趣,因此可以使用-h
选项:
$ du -sh /home/
/home
目录。”>
du
Linux命令检查大小/home
目录。跑过man ls
命令以获得所有可能的快速概览ls
命令选项。您能找到一种方法来使用ls
命令列出所有文件的目录,按目录的磁盘大小降序排列?
文件和目录压缩
在本节中,我们将讨论如何在GNU /Linux系统上压缩和解压缩文件的几种方法。您将学习的第一个工具是tar
和gzip
命令。的tar
该命令通常用于将整个目录合并为一个文件,并在必要时在进程中选择压缩。
下列tar
命令示例将合并整个目录my_dir
放入一个称为my_dir.tar
:
$ tar cf my_dir.tar my_dir
要进一步压缩生成的文件,我们可以使用gzip
命令生成一个压缩文件,称为my_dir.tar.gz
:
$ gzip my_dir.tar
但是,在大多数情况下,无论如何我们都需要压缩目录,因此可以结合使用tar
和gzip
作为上述命令的替代工具:
$ tar cxf my_dir.tar my_dir
组合产生的文件tar
和gzip
命令被称为gzip压缩包或简单地压缩包。
要解压缩任何压缩包,我们可以简单地还原该过程,但是gzip
我们将使用gunzip
命令。例如,解压缩gzip tarballmy_dir.tar.gz
我们可以使用gunzip
命令:
$ gunzip my_dir.tar.gz
上面的命令将产生我们的原始文件my_dir.tar
包含my_dir
目录。使用tar
命令,我们可以进一步解压缩此tarball来检索原始文件my_dir
目录:
$ tar xf my_dir.tar
关闭并重新启动
关于关闭和重新启动GNU /Linux操作系统,您只需要学习一个命令,即重新启动和关闭。该命令直观地称为shutdown
。
是的,确实可以使用以下方法重新启动系统:init 6
要么reboot
命令,但要学习shutdown
命令为您提供更多功能和选项。下面有一些示例shutdown
命令。
首先shutdown
命令示例将在一分钟内重新引导系统:
$ sudo shutdown -r
要重新启动您的GNU /Linux系统,请立即执行:
$ sudo shutdown -r now
使用以下命令关闭系统shutdown
命令遵循与上述重新启动命令相同的原理。以下两个示例显示如何在一分钟内立即关闭系统并延迟1.5小时(90分钟):
$ sudo shutdown
$ sudo shutdown now
$ sudo shutdown +90
如果您执行了延迟的系统关闭,则可以通过以下方式取消关闭过程:
$ sudo shutdown -c
高级Linux命令
排除Internet /网络连接故障
本节将向您介绍一些基本的网络技能。特别是,您将学习如何获取建立正确的Internet连接所需的服务的IP地址,以及如何对网络连接和Internet连接进行故障排除。
让我们开始使用以下网址获取本地IP地址:ip
命令。的ip
该命令具有许多选项,其中包括address
要么a
短选项,以显示分配给所有可用和已启用网络接口的IP地址:
$ ip a
上面的命令显示了系统当前使用的IP地址。请注意,您的网络接口名称可能不同。在下一个示例中,我们获取您的网关的IP地址。我们再次使用ip
命令,但这一次与r
(路线)选项:
$ ip r
下一个难题是DNS(域名服务器)IP地址。要检查您的系统使用哪个DNS服务器将主机名解析为IP地址,只需检查以下内容:/etc/resolv.conf
文件使用cat
如前所述的命令:
$ cat /etc/resolv.conf
现在,一旦我们获得了最基本的网络配置信息,便可以使用它来解决许多网络连接问题,例如Internet连接。最好的工具是ping
命令。
使用ping
命令,我们可以测试与任何IP地址或主机的连接。的ping
命令会将封包发送到任何所需的主机或IP地址,并将结果告知我们。默认情况下,ping
命令将向您选择的IP地址或主机发送无尽的ping命令。中断连续ping
按下CTRL+C
组合键。或者,使用-c
选项和数字的组合,表示您要发送的数据包计数。例如:
$ ping linuxconfig.org
PING linuxconfig.org (104.24.11.18) 56(84) bytes of data.
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=1 ttl=57 time=9.83 ms
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=2 ttl=57 time=10.0 ms
64 bytes from 104.24.11.18 (104.24.11.18): icmp_seq=3 ttl=57 time=9.95 ms
--- linuxconfig.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 9.833/9.933/10.008/0.073 ms
$ ping -c 2 8.8.4.4
PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data.
64 bytes from 8.8.4.4: icmp_seq=1 ttl=121 time=10.3 ms
64 bytes from 8.8.4.4: icmp_seq=2 ttl=121 time=10.4 ms
--- 8.8.4.4 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 10.340/10.412/10.485/0.125 ms
如果遇到任何Internet连接问题,可以通过从本地IP地址或任何公共主机开始ping以上所有IP地址来排除网络连接故障。使用此策略将帮助您缩小可能导致网络连接问题的问题,如下图所示。
ping
Linux命令。更改权限和所有权
GNU /Linux文件系统中的每个文件或目录都可以由不同的用户以及不同的用户组拥有。此外,可以将每个文件或目录设置为符合一个或多个权限,例如读取,写入和执行。有关文件或目录的权限或所有权的主题可以涵盖一本小书。由于我们对基础知识感兴趣,因此这里有一些技巧可以帮助您入门。
首先,获取有关文件或目录权限的实际信息。为此,执行已经学习的ls
用命令-l
选项,并以文件或目录名称作为参数。例如:
$ ls -l dir/
下图显示了有关输出的详细信息。请花一些时间来消化信息,然后再继续:
如上图所示,共有三种权限类型:读,写和执行。下表列出了所有权限类型及其符号和八进制表示形式:
权限类型 | 八进制表示 | 符号表示 |
---|---|---|
读 | 4 | [R |
写 | 2 | w |
执行 | 1个 | X |
更改GNU /Linux文件系统上的文件或目录权限的工具是chmod
。有两种方法可以使用以下方式更改文件或目录权限chmod
命令,即以八进制或符号表示。从这两种方法中,最好的方法是您最容易记住和使用的一种方法。
以下示例显示了如何使用chmod
使用八进制和符号表示的命令来更改dir
目录权限如下:
目标 | 需求 | 八进制表示 | 符号表示 |
---|---|---|---|
用户(所有者) | 读,写和执行 | 7之(4 + 2 + 1) | u = rwx |
组 | 读和写 | 6等于(4 + 2) | g = rw |
其他 | 没有权限 | 0 | o = |
以下两个chmod
使用八进制和符号权限表示的linux命令可以互换,并且会更改dir
目录权限符合以上要求:
OCTAL:
$ chmod 760 dir
SYMBOLIC:
$ chmod u=rwx,g=rw,o= dir
本节将介绍的最后一个工具是chown
命令。的chown
命令允许用户更改文件或目录的所有权。每个文件或目录都有两种类型的所有权。即,这些是用户和组的所有权。
通过使用更改所有权chown
命令是一个相当简单的过程。更改文件或目录所有权的通用规则是提供chown
命令带有两个参数。提供的第一个参数包含用户名和组名,我们希望此文件或目录归以.
第二个参数代表相关文件或目录的名称。
下列chown
Linux命令示例将更改名为file.txt
由用户拥有lubos
以及属于该组的所有用户linuxconfig
:
$ chown lubos.linuxconfig file.txt
chown
Linux命令适用以下两个规则。首先,用户和组必须存在,其次,将所有权从或更改为root
用户或组需要管理权限。见上面sudo
命令说明以获取更多信息。下图是本节讨论内容的快速摘要:
试用chmod
Linux命令的不同权限版本。您能解释一下将同一组权限应用于文件或目录有何不同?
检查系统的内核版本
有时您需要对GNU /Linux机器进行故障排除,因此您需要获取有关当前正在运行的Linux内核的信息。
使用uname
命令结合-a
将输出有关您的内核版本和体系结构的详细信息:
$ uname -a
的的Linux关键字实际上仅指系统的内核,而实际的操作系统命令基于GNU免费软件二进制文件,因此将整个操作系统称为GNU /Linux要么利尼克斯相对于简单地将其简称为的Linux。
结论
就这些了!但是,不要使本文冗长,以至于让您认为没有其他东西需要学习。相反,本文的目的只是向读者介绍一些基本的GNU /Linux命令行技术,因此几乎没有涉及任何内容。
请在下面提供反馈,以帮助我改善本文。如果您还有其他问题或需要其他帮助,请访问LinuxConfig论坛。
接下来您应该学什么?好吧,继续尝试基础知识,并每天尝试将新的Linux命令添加到您的库中。实践使完美!
熟悉基本的Linux命令后,请考虑Bash脚本教程让初学者了解如何结合使用Linux脚本和Shell脚本来自动执行任务。