在使用 Linux 时,您几乎无需使用命令行解释器(shell)即可与系统进行通信。启动 Linux 系统后,通常会引导您进入图形用户界面,该界面会指导您完成登录过程以及与操作系统的后续交互。Linux 中的图形用户界面在安装期间最初配置,并由 KDE 或 GNOME 等桌面环境使用。
尽管如此,掌握一些 shell 的基本知识仍然很有用,因为您可能会遇到图形用户界面不可用的情况。例如,如果 X Window System 出现问题。如果您不熟悉 shell,在输入命令时可能会感到有些不舒服,但您越习惯它,就越会意识到命令行通常是执行某些日常任务的最快和最简单的方法。
对于 Unix 或 Linux,有几种 shell 可用,它们在行为和接受的命令上略有不同。在 openSUSE® Leap 中,默认 shell 是 Bash(GNU Bourne-Again Shell)。
以下部分将指导您完成 Bash shell 的第一步,并向您展示如何通过命令行完成一些基本任务。如果您有兴趣了解更多信息,或者已经感觉自己是 shell “power user”,请参阅 第 14 章,Bash 和 Bash 脚本。
基本上,有两种不同的方法可以从图形用户界面启动 shell,该界面通常在您启动计算机后显示
您可以离开图形用户界面,或者
您可以在图形用户界面内启动一个终端窗口 within。
虽然第一种选择始终可用,但只有在您已经登录到 KDE 或 GNOME 等桌面时,才能使用第二种选择。无论您选择哪种方式,总有返回的方法,并且可以在 shell 和图形用户界面之间来回切换。
如果您想尝试一下,请按 Ctrl–Alt–F2 离开图形用户界面。图形用户界面消失,您将被带到一个 shell,该 shell 提示您登录。键入您的用户名并按 Enter。然后键入您的密码并按 Enter。提示现在会更改并显示以下示例中的一些有用信息
1 2 3 tux@linux:~>
当您登录到远程计算机时,提示提供的信息始终会向您显示当前正在使用的系统。
当光标位于此提示符后时,您可以直接将命令传递给您的计算机系统。例如,您现在可以输入 ls -l 以详细格式列出当前目录的内容。如果这足以让您第一次接触 shell,并且您想返回到图形用户界面,您应该先从您的 shell 会话注销。为此,键入 exit 并按 Enter。然后按 Alt–F7 切换回图形用户界面。您会发现您的桌面和正在运行的应用程序未发生更改。
如果您已经登录到 GNOME 或 KDE 桌面,并且想在桌面内启动一个终端窗口,请按 Alt–F2 并输入 konsole(对于 KDE)或 gnome-terminal(对于 GNOME)。这将在您的桌面上打开一个终端窗口。由于您已经登录到您的桌面,因此提示会显示有关您系统的上述信息。您现在可以输入命令并执行任务,就像在与桌面并行运行的任何 shell 中一样。要切换到桌面上另一个应用程序,只需单击相应的应用程序窗口或从面板的任务栏中选择它。要关闭终端窗口,请按 Alt–F4。
当 shell 上出现提示时,它已准备好接收和执行命令。一个命令可以由几个元素组成。第一个元素是实际的命令,后跟参数或选项。您可以键入一个命令并使用以下键进行编辑:←、→、Home、End、<—(Backspace)、Del 和 Space。您可以更正拼写错误或添加选项。在按 Enter 之前,不会执行该命令。
shell 不会冗余:与某些图形用户界面不同,它通常不会在命令执行后提供确认消息。只有在出现问题或错误时,或者您通过执行带有特定选项的命令明确要求时,才会出现消息。
同样也要记住删除对象的命令。在输入不带任何选项的 rm 命令来删除文件之前,您应该知道您是否真的想删除该对象:它将被不可逆转地删除,没有确认。
在 第 13.6.1 节,“用户、组和其他人的权限” 中,您已经了解了最基本的命令之一:ls,它用于列出目录的内容。此命令可以带选项或不带选项使用。输入纯 ls 命令会显示当前目录的内容
>ls bin Desktop Documents public_html tux.txt>
Linux 中的文件可能具有文件扩展名或后缀,例如 .txt,但不一定需要具有扩展名。这使得在 ls 的此输出中难以区分文件和文件夹。默认情况下,Bash shell 中的颜色会给您一个提示:目录通常以蓝色显示,文件以黑色显示。
获取有关目录内容的更多详细信息的更好方法是使用带有选项字符串的 ls 命令。选项修改命令的工作方式,以便您可以让它执行特定任务。选项与命令用空格分隔,通常以连字符为前缀。 ls -l 命令以完整详细信息(长列表格式)显示相同目录的内容
>ls -l drwxr-xr-x 1 tux users 48 2015-06-23 16:08 bin drwx---r-- 1 tux users 53279 2015-06-21 13:16 Desktop drwx------ 1 tux users 280 2015-06-23 16:08 Documents drwxr-xr-x 1 tux users 70733 2015-06-21 09:35 public_html -rw-r--r-- 1 tux users 47896 2015-06-21 09:46 tux.txt>
此输出显示有关每个对象的以下信息
drwxr-xr-x1 12 tux3 users4 485 2006-06-23 16:086 bin7
对象类型和访问权限。有关更多信息,请参阅 第 13.6.1 节,“用户、组和其他人的权限”。 | |
指向此文件的硬链接数。 | |
文件或目录的所有者。有关更多信息,请参阅 第 13.6.1 节,“用户、组和其他人的权限”。 | |
分配给文件或目录的组。有关更多信息,请参阅 第 13.6.1 节,“用户、组和其他人的权限”。 | |
文件大小(以字节为单位)。 | |
上次更改的日期和时间。 | |
对象名称。 |
通常,您可以将多个选项组合起来,仅将第一个选项前缀为连字符,然后连续写入其他选项,而无需空格。例如,如果您想以长列表格式查看目录中的所有文件,可以将两个选项 -l 和 -a(显示所有文件)组合起来用于 ls 命令。执行 ls -la 还会显示目录中的隐藏文件,这些文件以开头的一个点表示(例如,.hiddenfile)。
您使用 ls 获取的内容列表按文件名按字母顺序排序。但是,就像图形文件管理器一样,您还可以根据各种标准对 ls 的输出进行排序,例如日期、文件扩展名或文件大小
对于日期和时间,请使用 ls -lt(显示最新文件)。
对于扩展名,请使用 ls -lx(首先显示没有扩展名的文件)。
对于文件大小,请使用 ls -lS(首先显示最大的文件)。
要反转排序顺序,请将 -r 作为选项添加到您的 ls 命令中。例如,ls -lr 会以相反的字母顺序显示内容列表,ls -ltr 会首先显示最旧的文件。还有许多其他有用的 ls 选项。在下一节中,您将学习如何调查它们。
在输入了几个命令后,您的 shell 将会填充各种命令和相应的输出。在下表中,找到一些用于在 shell 中导航和编辑的有用快捷键。
|
快捷键 |
功能 |
|---|---|
|
Ctrl–L |
清除屏幕并将当前行移动到页面顶部。 |
|
Ctrl–C |
中止当前正在执行的命令。 |
|
Ctrl–U |
从光标位置删除到行首。 |
|
Ctrl–K |
从光标位置删除到行尾。 |
|
Ctrl–D |
关闭 shell 会话。 |
|
↑, ↓ |
浏览已执行命令的历史记录。 |
如果您记得命令的名称,但不确定选项或命令的语法,请选择以下可能性之一
--help/-h 选项如果您只想查找某个命令的选项,请尝试输入命令后跟空格和 --help。此 --help 选项存在于许多命令中。例如,ls --help 显示 ls 命令的所有选项。
要了解有关各种命令的更多信息,您还可以使用手册页。手册页还提供命令作用的简短描述。可以使用 man 后跟命令名称来访问它们,例如,man ls。
手册页直接在 shell 中显示。要导航它们,请使用以下键
使用 Page ↑ 和 Page ↓ 向上和向下移动
使用 Home 和 End 移动到文档的开头和结尾
按 Q 退出手册页查看器
有关 man 命令的更多信息,请使用 man man。
信息页通常提供有关命令的更多信息。要查看某个命令的信息页,请输入 info 后跟命令名称(例如,info ls)。
信息页直接在 shell 中显示。要导航它们,请使用以下键
使用 Space 向前移动一个部分(node)。使用 <— 向后移动一个部分。
使用 Page ↑ 和 Page ↓ 向上和向下移动
按 Q 退出信息页查看器
请注意,并非所有命令都存在手册页和信息页。有时两者都可用(通常用于关键命令),有时仅存在手册页或信息页,有时两者都不存在。
要引用某个文件或目录,必须指定通往该目录或文件的路径。有两种方法可以指定路径
从根目录(/)到相关文件或目录的完整路径。例如,位于您的 Documents 目录中的名为 file.txt 的文本文件的绝对路径可能是
/home/tux/Documents/file.txt
从当前工作目录到相关文件或目录的路径。如果您的当前工作目录是 /home/tux,则您的 Documents 目录中的 file.txt 的相对路径是
Documents/file.txt
但是,如果您的工作目录是 /home/tux/Music,则需要先向上移动一级到 /home/tux(使用 ..),然后才能进一步向下移动
../Documents/file.txt
路径包含文件名、目录或两者,用斜杠分隔。绝对路径始终以斜杠开头。相对路径不以斜杠开头,但可以有一个或两个点。
在输入命令时,您可以根据自己的偏好或输入量选择指定路径的两种方式,结果是相同的。要更改目录,请使用 cd 命令并指定目录的路径。
如果文件名或目录名包含空格,请使用反斜杠 (\) 在空格前对其进行转义,或者用单引号将文件名括起来。否则,Bash 会将类似 My Documents 的文件名解释为两个文件或目录的名称,在本例中为 My 和 Documents。
在指定路径时,以下 “快捷方式” 可以节省您大量的输入
波浪线符号 (~) 是主目录的快捷方式。例如,要列出主目录的内容,请使用 ls ~。要列出其他用户的主目录内容,请输入 ls ~USERNAME (当然,只有在您具有查看内容的权限时才能工作,请参阅 第 13.6 节,“文件访问权限”)。例如,输入 ls ~tux 将列出名为 tux 的用户的主目录内容。即使您的主目录不名为 /home,也可以在网络环境中将波浪线符号用作主目录的快捷方式,因为它可以映射到文件系统中的任何目录。
从文件系统的任何位置,您可以通过输入 cd ~ 或直接输入 cd(不带任何选项)来访问您的主目录。
在使用相对路径时,用点 (.) 表示当前目录。这主要用于 cp 或 mv 等命令,通过这些命令您可以复制或移动文件和目录。
树中的下一级表示为两个点 (..)。要切换到当前目录的父目录,请输入 cd ..,要从当前目录向上移动两个级别,请输入 cd ../.. 等。
为了应用您的知识,请在下面找到一些示例。它们解决了您可能希望使用 Bash 对文件或文件夹执行的基本任务。
假设您想将位于主目录中的某个文件复制到需要先创建的 /tmp 的子目录中。
从您的主目录创建一个 /tmp 中的子目录
输入
> mkdir /tmp/test
mkdir 代表 “创建目录”。此命令在 /tmp 目录中创建一个名为 test 的新目录。在本例中,您使用绝对路径创建 test 目录。
要检查发生的情况,现在输入
> ls -l /tmp新的目录 test 应该出现在 /tmp 目录的内容列表中。
使用以下命令切换到新创建的目录
> cd /tmp/test现在在主目录的子目录中创建一个新文件,并将其复制到 /tmp/test。为此任务使用相对路径。
在复制、移动或重命名文件之前,请检查目标目录是否已包含同名的文件。如果是,请考虑更改其中一个文件名,或使用带有 -i 等选项的 cp 或 mv,该选项将在覆盖现有文件之前提示。否则,Bash 将在没有确认的情况下覆盖现有文件。
要列出主目录的内容,请输入
> ls -l ~默认情况下,它应该包含一个名为 Documents 的子目录。如果不是,请使用您已经知道的 mkdir 命令创建此子目录
> mkdir ~/Documents要在 Documents 目录中创建一个名为 myfile.txt 的新空文件,请输入
> touch ~/Documents/myfile.txt通常,touch 命令会更新现有文件的修改和访问日期。如果您使用 touch 加上目标目录中不存在的文件名,它将创建一个新文件。
输入
> ls -l ~/Documents新文件应该出现在内容列表中。
要复制新创建的文件,请输入
> cp ~/Documents/myfile.txt .不要忘记末尾的点。
此命令告诉 Bash 转到您的主目录,并将 myfile.txt 从 Documents 子目录复制到当前目录 /tmp/test,而不更改文件名。
通过输入以下命令检查结果
> ls -l文件 myfile.txt 应该出现在 /tmp/test 的内容列表中。
现在假设您想将 myfile.txt 重命名为 tuxfile.txt。最后,您决定删除重命名的文件和 test 子目录。
要重命名文件,请输入
> mv myfile.txt tuxfile.txt要检查发生的情况,请输入
> ls -l在内容列表中,不应再显示 myfile.txt,而应显示 tuxfile.txt。
mv 代表 移动,并带有两个选项:第一个选项指定源,第二个选项指定操作的目标。您可以使用 mv
重命名文件或目录,
将文件或目录移动到新位置,或
一步完成两者。
既然您认为不再需要该文件,可以通过输入以下命令删除它
> rm tuxfile.txtBash 会在没有确认的情况下删除该文件。
使用 cd .. 向上移动一个级别,并使用
> ls -l test检查 test 目录是否现在为空。
如果是,则可以通过输入以下命令删除 test 目录
> rmdir test
root,也称为超级用户,具有授权其访问系统所有部分并执行管理任务的权限。他们具有不受限制的更改系统和无限访问所有文件的能力。因此,执行某些管理任务或运行某些程序(例如 YaST)需要 root 权限。
为了在 shell 中临时成为 root,请按以下步骤操作
输入 su。系统将提示您输入 root 密码。
输入密码。如果您拼写错误 root 密码,shell 将显示一条消息。在这种情况下,您必须在重新输入密码之前重新输入 su。如果您的密码正确,则提示符末尾将出现井号 #,表示您现在正在以 root 身份行事。
执行您的任务。例如,将文件所有权转移给新用户,只有 root 才能执行此操作
>chownwilberkde_quick.xml
完成作为 root 执行的任务后,切换回您的普通用户帐户。为此,请输入
> exit井号将消失,您将再次以 “普通” 用户身份行事。
或者,您也可以使用 sudo(超级用户 “做”)来执行通常仅供 root 使用的任务。使用 sudo,管理员可以授予某些用户 root 权限以执行某些命令。根据系统配置,用户可以使用他们自己的密码运行 root 命令。由于时间戳功能,用户在输入密码后仅被授予有限时间内的“票证”。该票证通常在几分钟后过期。在 openSUSE 中,sudo 默认需要 root 密码(除非由您的系统管理员配置为其他方式)。
对于用户来说,sudo 很方便,因为它可防止您两次切换帐户(切换到 root 和切换回来)。使用 sudo 更改文件所有权只需要一个命令,而不是三个
>sudochownwilberkde_quick.xml
在您输入密码后,该命令将被执行。如果您在短时间内再次输入第二个 root 命令,则不会再次提示输入密码,因为您的票证仍然有效。在一段时间后,票证将自动过期,并且需要再次输入密码。这还可以防止用户忘记切换回其普通用户帐户并留下一个 root shell 而导致未经授权的人员获得 root 权限。
在 Linux 中,诸如文件或文件夹或进程之类的对象通常属于创建或启动它们的用户。对此规则有一些例外。有关例外情况的更多信息,请参阅 “安全和加固指南”书籍,第 19 章“Linux 中的访问控制列表”。
当您创建新文件或目录时,此对象的初始访问权限将根据预定义的方案设置。作为文件或目录的所有者,您可以更改此对象的访问权限。例如,您可以保护包含敏感数据的文件,防止其他用户读取,并且您可以授权您的组或其他用户在适当的情况下写入、读取或执行您的多个文件。
为 Linux 系统上的每个文件对象定义了三个权限集。这些集合包括对三种类型的用户(所有者、组和其他用户)的读取、写入和执行权限。
以下示例显示了 shell 中 ls -l 命令的输出。此命令列出目录的内容,并显示该目录中每个文件和文件夹的详细信息。
-rw-r----- 1 tux users 0 2015-06-23 16:08 checklist.txt -rw-r--r-- 1 tux users 53279 2015-06-21 13:16 gnome_quick.xml -rw-rw---- 1 tux users 0 2015-06-23 16:08 index.htm -rw-r--r-- 1 tux users 70733 2015-06-21 09:35 kde-start.xml -rw-r--r-- 1 tux users 47896 2015-06-21 09:46 kde_quick.xml drwxr-xr-x 2 tux users 48 2015-06-23 16:09 local -rwxr--r-- 1 tux users 624398 2015-06-23 15:43 tux.sh
如第三列所示,所有对象都属于用户 tux。它们被分配给用户 tux 属于的主要组 users。要检索访问权限,必须更仔细地检查列表的第一列。让我们看一下文件 kde-start.xml
|
类型 |
用户权限 |
组权限 |
其他人的权限 |
|
|
|
|
|
列表的第一列由一个前导字符后跟三个分组的九个字符组成。前导字符指示对象的类型:在本例中,连字符 (–) 表示 kde-start.xml 是一个文件。如果您找到字符 d,则表示该对象是一个目录,例如 示例 13.1,“文件和文件夹的访问权限” 中的 local。
接下来的三个块显示了所有者、组和其他用户的访问权限(从左到右)。每个块遵循相同的模式:第一个位置显示读取权限 (r),下一个位置显示写入权限 (w),最后一个显示执行权限 (x)。缺少任何权限表示为 -。在我们的示例中,kde-start.xml 的所有者具有对该文件的读取和写入权限,但无法执行它。users 组可以读取该文件,但无法写入或执行它。如第三个字符块所示,其他用户也是如此。
访问权限对应用于对象类型(文件或目录)的影响略有不同。下表显示了详细信息
|
访问权限 |
文件 |
文件夹 |
|---|---|---|
|
读取 (r) |
用户可以打开并读取文件。 |
用户可以查看目录的内容。如果没有此权限,用户将无法使用 |
|
写入 (w) |
用户可以更改文件:他们可以添加或删除数据,甚至可以删除文件的内容。但是,这不包括在他们没有文件所在目录的写入权限的情况下,将文件完全从目录中删除的权限。 |
用户可以在目录中创建、重命名或删除文件。 |
|
执行 (x) |
用户可以执行该文件。此权限仅适用于诸如程序或 shell 脚本之类的文件,而不适用于文本文件。如果操作系统可以直接执行该文件,用户无需读取权限即可执行该文件。但是,如果该文件必须像 shell 脚本或 perl 程序一样被解释,则需要额外的读取权限。 |
用户可以进入该目录并执行其中的文件。如果他们没有对该目录的读取权限,他们将无法列出文件,但只要他们知道文件的存在,仍然可以访问它们。 |
请注意,访问特定文件始终取决于文件本身以及文件所在目录的正确权限组合。
在 Linux 中,诸如文件或文件夹或进程之类的对象通常属于创建或启动它们的的用户。与文件或文件夹关联的组取决于用户在创建对象时所属的主组。创建新文件或目录时,此对象的初始访问权限将根据预定义的方案设置。有关详细信息,请参阅 第 13.6 节,“文件访问权限”。
作为文件或目录的所有者(当然,作为 root),您可以更改此对象的访问权限。
要更改文件或文件夹之类的对象的属性,例如访问权限,请使用 chmod 命令,后跟以下参数
要更改权限的用户,
您想要删除、设置或添加的访问权限类型,以及
您想要更改权限的文件或文件夹,用空格分隔。
您可以更改文件访问权限的用户分为以下几类:文件所有者(用户,u)、拥有文件的组(组,g)和其他用户(其他用户,o)。您可以添加、删除或设置以下权限之一或多个:读取、写入或执行。
作为 root,您还可以更改文件的所有权:使用 chown(更改所有者)命令,您可以将所有权转移给新用户。
以下示例显示了 shell 中 ls -l 命令的输出。
-rw-r----- 1 tux users 0 2015-06-23 16:08 checklist.txt -rw-r--r-- 1 tux users 53279 2015-06-21 13:16 gnome_quick.xml -rw-rw---- 1 tux users 0 2015-06-23 16:08 index.htm -rw-r--r-- 1 tux users 70733 2015-06-21 09:35 kde-start.xml -rw-r--r-- 1 tux users 47896 2015-06-21 09:46 kde_quick.xml drwxr-xr-x 2 tux users 48 2015-06-23 16:09 local -r-xr-xr-x 1 tux users 624398 2015-06-23 15:43 tux.jpg
在上面的示例中,用户 tux 拥有文件 kde-start.xml 并且具有读取和写入文件的权限,但无法执行该文件。users 组可以读取该文件,但无法写入或执行该文件。其他用户的情况也是如此,如第三组字符所示。
假设您是 tux 并且想要修改您文件的访问权限
如果想要授予 users 组对 kde-start.xml 的写入权限,请输入
> chmod g+w kde-start.xml要授予 users 组和其他用户对 kde-start.xml 的写入权限,请输入
> chmod go+w kde-start.xml要删除所有用户的写入权限,请输入
> chmod -w kde-start.xml如果您没有指定任何类型的用户,则更改将应用于所有用户——文件的所有者、所有组和其他用户。现在,即使所有者 tux 在没有重新建立写入权限的情况下也无法写入该文件。
要禁止 users 组和其他用户进入目录 local,请输入
> chmod go-x local要授予其他用户对两个文件(kde_quick.xml 和 gnome_quick.xml)的写入权限,请输入
> chmod o+w kde_quick.xml gnome_quick.xml假设您是 tux 并且想要将文件 kde_quick.xml 的所有权转移给另一个用户,名为 wilber。在这种情况下,请按以下步骤操作
输入 root 的用户名和密码。
输入
#chownwilberkde_quick.xml
使用以下命令检查发生了什么
> ls -l kde_quick.xml您应该得到以下输出
-rw-r--r-- 1 wilber users 47896 2006-06-21 09:46 kde_quick.xml
如果所有权已按您的意愿设置,请切换回您的正常用户帐户。
在 Bash 中输入命令可能需要大量的打字。本节介绍一些可以节省您时间和打字量的功能。
默认情况下,Bash 会“记住”您输入的命令。此功能称为“历史记录”。您可以浏览之前输入的命令,选择您想要重复的一个,然后再次执行它。为此,请重复按 ↑,直到所需的命令出现在提示符处。要向前浏览之前输入的命令列表,请按 ↓。为了更轻松地重复 Bash 历史记录中的某个命令,只需键入该命令的第一个字母并按 Page ↑。
您现在可以编辑所选命令(例如,更改文件名或路径),然后按 Enter 执行该命令。要编辑命令行,请使用箭头键将光标移动到所需位置,然后开始键入。
您还可以搜索历史记录中的某个命令。按 Ctrl–R 以启动增量搜索功能,显示以下提示符
> (reverse-i-search)`':只需键入您正在搜索的命令的一个或多个字母。您输入的每个字符都会缩小搜索范围。相应的搜索结果显示在冒号的右侧,而您的输入显示在冒号的左侧。要接受搜索结果,请按 Esc。提示符现在会更改为其正常外观,并显示您选择的命令。您现在可以编辑该命令或直接通过按 Enter 执行它。
在键入第一个字母后将文件名或目录名称补全到其完整长度是 Bash 的另一个有用功能。为此,键入前几个字母,然后按 →|(制表符)。如果文件名或路径可以唯一标识,则会立即补全,并且光标移动到文件名的末尾。然后,如果需要,您可以输入命令的下一个选项。如果文件名或路径无法唯一标识(因为有多个文件名以相同的字母开头),则该文件名或路径仅补全到变得模棱两可为止。然后,您可以再次按 →| 以获取列表。之后,您可以输入文件或路径的下一个字母,然后再次尝试补全,按 →|。在使用 →| 补全文件名和路径时,您可以同时检查您想要输入的文件或路径是否真的存在(并且您可以确保拼写正确)。
您可以使用通配符代替文件名中的一个或多个字符来进行路径名扩展。通配符是可以代表其他字符的字符。Bash 中有三种类型的通配符
|
通配符 |
功能 |
|
|
匹配任意单个字符 |
|
|
匹配任意数量的字符 |
|
|
匹配方括号内指定组中的一个字符,此处由字符串 SET 表示。 |
以下示例说明了如何利用 Bash 的这些便捷功能。
如果您已经完成了 第 13.4.1 节,“使用文件和目录的示例” 中的示例,您的 shell 缓冲区应该已填充命令,您可以使用历史记录功能检索这些命令。
按 ↑ 重复,直到出现 cd ~。
按 Enter 执行该命令并切换到您的主目录。
默认情况下,您的主目录包含以相同字母开头的两个子目录,Documents 和 Desktop。
键入 cd D 并按 →|。
什么也不会发生,因为 Bash 无法识别您想要更改的子目录。
再次按 →| 以查看可能的选项列表
>cd DDesktop/ Documents/ Downloads/>cd D
提示符仍然显示您的初始输入。键入您想要进入的子目录的下一个字符,然后再次按 →|。
Bash 现在将补全路径。
您现在可以使用 Enter 执行该命令。
现在假设您的主目录包含具有各种文件扩展名的几个文件。它还保存了您以不同的文件名保存的同一个文件的几个版本 myfile1.txt、myfile2.txt 等。您想要根据文件的属性搜索某些文件。
首先,在您的主目录中创建一些测试文件
使用 touch 命令创建几个(空)文件,具有不同的文件扩展名,例如 .pdf、.xml 和 .jpg。
您可以连续执行此操作(不要忘记使用 Bash 历史记录功能),也可以使用一个 touch 命令:只需添加几个用空格分隔的文件名即可。
创建至少两个具有相同文件扩展名的文件,例如 .html。
要创建同一个文件的几个“版本”,请输入
> touch myfile{1..5}.txt此命令创建五个连续编号的文件:myfile1.txt、…、myfile5.txt。
列出目录的内容。它应该如下所示
> ls -l
-rw-r--r-- 1 tux users 0 2006-07-14 13:34 foo.xml
-rw-r--r-- 1 tux users 0 2006-07-14 13:47 home.html
-rw-r--r-- 1 tux users 0 2006-07-14 13:47 index.html
-rw-r--r-- 1 tux users 0 2006-07-14 13:47 toc.html
-rw-r--r-- 1 tux users 0 2006-07-14 13:34 manual.pdf
-rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile1.txt
-rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile2.txt
-rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile3.txt
-rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile4.txt
-rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile5.txt
-rw-r--r-- 1 tux users 0 2006-07-14 13:32 tux.png使用通配符,根据各种标准选择某些文件子集
要列出所有具有 .html 扩展名的文件,请输入
> ls -l *.html要列出所有“myfile.txt”版本,请输入
> ls -l myfile?.txt请注意,由于文件的编号是单位数,因此您只能在此处使用 ? 通配符。一旦您有一个名为 myfile10.txt 的文件,您必须使用 * 通配符才能查看所有版本的 myfile.txt(或者添加另一个问号,使您的字符串看起来像 myfile??.txt)。
例如,要删除版本 1-3 和版本 5 的 myfile.txt,请输入
> rm myfile[1-3,5].txt使用以下命令检查结果
> ls -l应该只剩下 myfile4.txt 的所有 myfile.txt 版本。
您还可以在一个命令中组合多个通配符。在上面的示例中,rm myfile[1-3,5].* 将产生与 rm myfile[1-3,5].txt 相同的结果,因为只有具有 .txt 扩展名的文件可用。
rm 命令中使用通配符在 rm 命令中使用通配符可能非常有用,但也非常危险:您可能会删除目录中比预期更多的文件。要查看 rm 将影响哪些文件,请先使用 ls 代替 rm 运行您的通配符字符串。
为了从命令行编辑文件,你需要了解 vi 编辑器。vi 是一个默认编辑器,几乎可以在所有 UNIX/Linux 系统上找到。它可以运行几种操作系统模式,在这种模式下,你按下的键具有不同的功能。这使得它对初学者来说并不容易,但你应该至少了解 vi 的最基本操作。在某些情况下,可能只有 vi 可用。
基本上,vi 使用三种操作模式
在这种模式下,vi 接受某些键组合作为命令。可以执行简单的任务,例如搜索单词或删除一行。
在这种模式下,你可以编写普通文本。
在这种模式下,也称为冒号模式(因为你需要输入冒号才能切换到此模式),vi 还可以执行更复杂的任务,例如搜索和替换文本。
在以下(非常简单)示例中,你将学习如何使用 vi 打开和编辑文件,如何保存更改并退出 vi。
在以下内容中,找到几个你可以在 vi 中通过按键输入的命令。这些以大写形式显示,就像键盘上的字母一样。如果你需要以大写形式输入键,则会明确说明,通过显示包含 Shift 键的键组合。
要创建并使用 vi 打开一个新文件,请输入
> vi textfile.txt默认情况下,vi 以 命令模式打开,在这种模式下你无法输入文本。
按 I 切换到插入模式。底行会更改,并指示你现在可以插入文本。
写一些句子。如果你想插入新行,首先按 Esc 切换回命令模式。按 O 插入新行并再次切换到插入模式。
在插入模式下,你可以使用箭头键和 Del 编辑文本。
要退出 vi,按 Esc 再次切换到命令模式。然后按 :,这将带你进入扩展模式。底行现在显示一个冒号。
要退出 vi 并保存更改,输入 wq(w 代表 write;q 代表 quit)并按 Enter。如果你想以不同的名称保存文件,输入 w FILENAME 并按 Enter。
要不保存地退出 vi,输入 q! 并按 Enter。
Bash 提供了几个命令来搜索文件和搜索文件的内容
find
使用 find,在给定的目录中搜索文件。第一个参数指定开始搜索的目录。选项 -name 必须后跟一个搜索字符串,该字符串也可以包含通配符。与使用数据库的 locate 不同,find 扫描实际目录。
grep
grep 命令在指定的文本文件中找到特定的搜索字符串。如果找到搜索字符串,该命令将显示包含 searchstring 的行以及文件名。如果需要,可以使用通配符指定文件名。
使用 grep 搜索文件内容时,输出会显示找到 searchstring 的行以及文件名。通常,此上下文信息仍然不足以决定你是否要打开并编辑此文件。Bash 提供了几个命令,可以直接在 shell 中快速查看文本文件的内容,而无需打开编辑器。
head使用 head 可以查看文本文件的前几行。如果你不进一步指定命令,head 将显示文本文件的前 10 行。
tailtail 命令是 head 的对应命令。如果你不带任何其他选项使用 tail,它将显示文本文件的最后 10 行。这对于查看系统的日志文件非常有用,因为最新的消息或日志条目通常位于文件的末尾。
less使用 less,显示文本文件的全部内容。要上下移动半页,请使用 Page ↑ 和 Page ↓。使用 Space 向下滚动一页。 Home 将带你到开头,End 将带你到文档的末尾。要结束查看模式,请按 Q。
more除了 less 之外,你还可以使用较旧的程序 more。它基本上具有相同的功能,但是不太方便,因为它不允许你向后滚动。使用 Space 向前移动。当你到达文档末尾时,查看器会自动关闭。
catcat 命令显示文件的内容,将整个内容不间断地打印到屏幕上。由于 cat 不允许你滚动,因此它作为查看器用处不大,但它通常与其他命令结合使用。
有时,如果你想将命令的输出写入文件以供进一步编辑,或者如果你想组合几个命令,使用一个命令的输出作为下一个命令的输入,那将会很有用。Shell 通过重定向或管道提供此功能。
通常,shell 中的标准输出是你的屏幕(或打开的 shell 窗口),标准输入是键盘。使用某些符号,你可以将输入或输出重定向到另一个对象,例如文件或另一个命令。
使用 >,你可以将命令的输出转发到文件(输出重定向),使用 <,你可以将文件用作命令的输入(输入重定向)。
通过管道符号 |,你也可以重定向输出:使用管道,你可以组合几个命令,使用一个命令的输出作为下一个命令的输入。与重定向符号 > 和 < 相比,管道的使用不限于文件。
要将命令(例如 ls)的输出写入文件,请输入
> ls -l > filelist.txt这将创建一个名为 filelist.txt 的文件,其中包含当前目录的内容列表,由 ls 命令生成。
但是,如果名为 filelist.txt 的文件已经存在,则此命令将覆盖现有文件。要防止这种情况,请使用 >> 代替 >。输入
> ls -l >> filelist.txt会将 ls 命令的输出简单地附加到名为 filelist.txt 的现有文件。如果文件不存在,则会创建该文件。
重定向也可以反向工作。与其从键盘使用标准输入来获取命令,不如使用文件作为输入
> sort < filelist.txt这将强制 sort 命令从 filelist.txt 的内容获取其输入。结果显示在屏幕上。当然,你也可以将结果写入另一个文件,使用重定向的组合
> sort < filelist.txt > sorted_filelist.txt如果命令生成了大量的输出,例如 ls -l 可能会生成,那么将输出管道传输到像 less 这样的查看器以便能够滚动页面可能会很有用。为此,请输入
> ls -l | less当前目录的内容列表显示在 less 中。
管道也经常与 grep 命令结合使用,以便在另一个命令的输出中搜索特定字符串。例如,如果你想查看目录中由用户 tux 拥有的文件列表,请输入
> ls -l | grep tux如 第 13.8 节,“编辑文本” 中所示,可以从 shell 启动程序。具有图形用户界面的应用程序需要 X Window System 并且只能从图形用户界面中的终端窗口启动。例如,如果你想在 KDE 或 GNOME 的终端窗口中打开主目录中的名为 vacation.pdf 的文件,只需运行 okular ~/vacation.pdf(或 evince ~/vacation.pdf)即可启动显示文件的 PDF 查看器。
再次查看终端窗口时,你会发现只要 PDF 查看器打开,命令行就会被阻止,这意味着你的提示符不可用。要更改此设置,请按 Ctrl–Z 暂停该进程并输入 bg 将该进程发送到后台。
现在,你仍然可以查看 vacation.pdf,同时你的提示符可用于进一步的命令。更简单的方法是在启动时直接将进程发送到后台。为此,请在命令末尾添加一个与符号
> okular ~/vacation.pdf &如果你从同一个 shell 启动了多个后台进程(也称为作业),则 jobs 命令会给你一个作业的概述。它还会显示方括号中的作业编号及其状态
> jobs
[1] Running okular book.opensuse.startup-xep.pdf &
[2]- Running okular book.opensuse.reference-xep.pdf &
[3]+ Stopped man jobs要将作业带到前台,请输入 fg JOB_NUMBER。
虽然 job 仅显示从特定 shell 启动的后台进程,但 ps 命令(不带任何选项)显示你的所有进程的列表——你启动的进程。以下是一个示例输出
> ps
PID TTY TIME CMD
15500 pts/1 00:00:00 bash
28214 pts/1 00:00:00 okular
30187 pts/1 00:00:00 kwrite
30280 pts/1 00:00:00 ps如果无法以正常方式终止程序,请使用 kill 命令停止该程序(或进程)。为此,请指定 ps 的输出中显示的进程 ID (PID)。例如,要关闭上面的示例中的 KWrite 编辑器,请输入
> kill 30187这将发送一个 TERM 信号,指示程序自行关闭。
或者,如果 jobs 命令显示的程序是后台作业,你也可以使用 kill 命令与作业编号结合使用来终止该进程。当使用作业编号标识作业时,必须在数字前加上百分号 (%)
> kill %JOB_NUMBER如果 kill 无效——有时对于 “失控” 程序而言——请尝试
> kill -9 PID这将发送一个 KILL 信号而不是 TERM 信号,通常会结束指定的进程。
本节旨在介绍处理作业和进程的最基本的命令集。有关系统管理员的概述,请参阅 “系统分析和调优指南”书籍,第 2 章“系统监控实用程序”,第 2.3 节“进程”。
在 Linux 上,有两种类型的命令可以使数据更易于传输
归档器,它从几个较小的文件创建更大的文件。最常用的归档器是 tar,另一个示例是 cpio。
压缩器,它无损地减小文件大小。最常用的压缩器是 gzip 和 bzip2。
将这两种类型的命令结合起来,其效果与在其他操作系统中流行的压缩归档文件(例如 ZIP 或 RAR)类似。
要将 test 目录及其所有文件和子目录打包到名为 testarchive.tar 的归档文件中,请执行以下操作
打开 shell。
使用 cd 更改到包含 test 目录的主目录。
使用以下命令压缩文件
> tar -cvf testarchive.tar test-c 选项创建归档,使其成为由 -f 指示的文件。 -v 选项列出正在处理的文件。
test 目录及其所有文件和目录在你的硬盘上保持不变。
使用以下命令查看归档文件的内容
> tar -tf testarchive.tar要解压缩归档文件,请使用
> tar -xvf testarchive.tar如果当前目录中的文件与归档文件中的文件名称相同,则它们将被覆盖,不会发出任何警告。
要压缩文件,请使用 gzip 或,为了获得更好的压缩效果,请使用 bzip2。
对于此示例,请重用 步骤 13.8,“归档文件” 中的 testarchive.tar 归档文件。
要压缩归档文件,请使用
> gzip testarchive.tar使用 ls,现在可以看到文件 testarchive.tar 不再存在,并且已经创建了文件 testarchive.tar.gz。
或者,可以使用 bzip2 testarchive.tar,其工作方式类似,但提供稍微更好的压缩率。
现在再次解压缩并解归档文件
这可以分两步完成,首先解压缩文件,然后解归档文件
>gzip --decompress testarchive.tar.gz>tar -xvf testarchive.tar
也可以一步完成解压缩和解归档
> tar -xvf testarchive.tar使用 ls,可以看到已经创建了一个名为 test 的新目录,其内容与您主目录中的 test 目录相同。
本节概述了最重要的 Linux 命令。本章列出的命令远不止这些。除了各个命令之外,还列出了参数,并在适当的情况下介绍了一个典型的示例应用程序。
根据您的需要调整参数。如果不存在名为 file 的文件,则编写 ls file 毫无意义。通常可以将多个参数组合起来,例如,通过编写 ls -la 而不是 ls -l -a。
以下部分列出了最重要的文件管理命令。它涵盖了从常规文件管理到操作文件系统 ACL 的所有内容。
ls 选项 文件如果您在没有任何其他参数的情况下运行 ls,则程序将以简短形式列出当前目录的内容。
-l详细列表
-a显示隐藏文件
cp 选项 源文件 目标文件将 源文件 复制到 目标文件。
如果现有 目标文件 存在,则在覆盖之前等待确认
递归复制(包括子目录)
mv 选项 源文件 目标文件将 源文件 复制到 目标文件,然后删除原始 源文件。
在移动之前创建 源文件 的备份副本
如果现有 目标文件 存在,则在覆盖之前等待确认
rm 选项 文件从文件系统中删除指定的文件。除非使用 -r 选项,否则 rm 不会删除目录。
-r删除任何现有的子目录
-i在删除每个文件之前等待确认
ln 选项 源文件 目标文件从 源文件 创建到 目标文件 的内部链接。通常,这种链接直接指向同一文件系统上的 源文件。但是,如果使用 -s 选项执行 ln,它将创建一个符号链接,该链接仅指向 源文件 所在的目录,从而实现跨文件系统的链接。
创建符号链接
cd 选项 目录更改当前目录。不带任何参数的 cd 将更改为用户的家目录。
mkdir 选项 目录创建一个新目录。
rmdir 选项 目录如果指定的目录已经为空,则删除该目录。
chown 选项 用户名[:组] 文件将文件的所有权转移给具有指定用户名的用户。
-R更改所有子目录中的文件和目录
chgrp 选项 组名 文件将给定 文件 的组所有权转移给具有指定组名的组。如果文件所有者同时是当前组和新组的成员,则文件所有者才能更改组所有权。
chmod 选项 模式 文件更改访问权限。
模式 参数包含三个部分:组、访问权限 和 访问类型。 组 接受以下字符
用户
组
其他用户
对于 访问权限,使用 + 授予访问权限,使用 - 拒绝访问权限。
访问类型 由以下选项控制
读取
写入
执行——执行文件或更改为目录
Setuid 位——应用程序或程序将以文件所有者的身份启动
或者,可以使用数字代码。此代码的四位数由 4、2 和 1 的值之和组成——二进制掩码的十进制结果。第一位设置 Set User ID (SUID) (4)、Set Group ID (2) 和 Sticky (1) 位。第二位定义文件所有者的权限。第三位定义组权限,最后一位设置所有其他用户的权限。读取权限用 4 设置,写入权限用 2 设置,执行文件的权限用 1 设置。文件的所有者通常会收到 6 或 7 用于可执行文件。
gzip 参数 文件此程序使用复杂的数学算法压缩文件的内容。以这种方式压缩的文件具有 .gz 扩展名,在使用之前需要解压缩。要压缩多个文件甚至整个目录,请使用 tar 命令。
解压缩打包的 gzip 文件,使其恢复到原始大小并可以正常处理(如命令 gunzip)
tar 选项 归档文件 文件
tar 将一个或多个文件放入归档文件中。压缩是可选的。 tar 是一个相当复杂的命令,具有多个可用选项。最常用的选项是
-f将输出写入文件而不是通常情况下写入屏幕
-c创建一个新的 TAR 归档文件
-r将文件添加到现有归档文件
-t输出归档文件的内容
-u添加文件,但仅当它们比归档文件中已有的文件更新时
-x从归档文件中解包文件(提取)
-z使用 gzip 压缩生成的归档文件
-j使用 bzip2 压缩生成的归档文件
-v列出处理的文件
由 tar 创建的归档文件以 .tar 结尾。如果 TAR 归档文件也使用 gzip 压缩,则结尾为 .tgz 或 .tar.gz。如果它使用 bzip2 压缩,则结尾为 .tar.bz2。
find 选项使用 find,在给定目录中搜索文件。第一个参数指定开始搜索的目录。 -name 选项后跟一个搜索字符串,该字符串也可以包含通配符。与使用数据库的 locate 不同,find 扫描实际目录。
file 选项 文件在 Linux 中,文件可以具有文件扩展名,但不必具有文件扩展名。 file 确定给定文件的文件类型。使用 file 的输出,然后可以选择合适的应用程序来打开该文件。
尝试查看压缩文件内部
cat 选项 文件cat 命令显示文件的内容,将整个内容不间断地打印到屏幕上。
在左边距处对输出进行编号
less 选项 文件可以使用此命令浏览指定文件的内容。使用 Page ↑ 和 Page ↓ 向上或向下滚动半页,或使用 Space 向下滚动整页。使用 Home 和 End 跳转到文件的开头或结尾。按 Q 退出程序。
grep 选项 搜索字符串 文件grep 命令在指定的文件中找到特定的搜索字符串。如果找到搜索字符串,则该命令将显示找到 搜索字符串 的行以及文件名。
-i忽略大小写
-H仅显示相关文件的名称,而不显示文本行
-n此外,还显示找到匹配项的行号
-l仅列出不包含 搜索字符串 的文件
diff 选项 文件 1 文件 2diff 命令比较两个文件的内容。该程序生成的输出列出所有不匹配的行。这通常被程序员使用,他们只需要发送他们的程序更改而不需要整个源代码。
-q仅报告两个文件是否不同
-u生成““统一””diff,使输出更易于阅读
mount 选项 设备 挂载点此命令可用于将任何数据介质(例如硬盘、CD-ROM 驱动器和其他驱动器)挂载到 Linux 文件系统的目录。
-r只读挂载
-t 文件系统指定文件系统:对于 Linux 硬盘,这通常是 ext4、xfs 或 btrfs。
对于未在 /etc/fstab 文件中定义的硬盘,还必须指定设备类型。在这种情况下,只有 root 才能挂载它。如果还需要其他用户挂载文件系统,请在 /etc/fstab 文件中为相关驱动器指定选项 user(用逗号分隔),并保存此更改。有关更多信息,请参阅 mount(1) man 页。
umount 选项 挂载点此命令将挂载的驱动器从文件系统卸载。为了防止数据丢失,在从其驱动器中取出可移动数据介质之前,请运行此命令。通常,只有 root 才能运行 mount 和 umount 命令。要允许其他用户运行这些命令,请编辑 /etc/fstab 文件,为相关驱动器指定选项 user。
以下部分列出了一些检索系统信息以及控制进程和网络所需的最重要的命令。
df 选项 目录不使用任何选项的 df 命令将显示有关所有已挂载驱动器上的总磁盘空间、当前使用的磁盘空间和可用空间的的信息。如果指定了目录,则信息将限制为该目录所在的驱动器。
-h以千兆字节、兆字节或千字节(人类可读格式)显示已占用块的数量
-T文件系统类型(ext2、nfs 等)
du 选项 路径当不带任何参数执行时,此命令显示当前目录中文件和子目录占用的总磁盘空间。
-a显示每个文件的尺寸
-h以人类可读的格式输出
-s仅显示计算出的总大小
free 选项命令 free 显示有关 RAM 和交换空间使用情况的信息,显示两类别的总用量和已用量。有关更多信息,请参阅参考手册,“特殊系统功能”,第 15.1.7 节“free 命令”。
-b以字节为单位输出
-k以千字节为单位输出
-m以兆字节为单位输出
date 选项这个简单的程序显示当前的系统时间。如果以 root 身份运行,它也可以用来更改系统时间。有关该程序的详细信息,请参阅 date(1) man 手册页。
top 选项
top 提供当前正在运行的进程的快速概览。按 H 键访问一个页面,该页面简要说明了自定义程序的常用选项。
ps 选项 进程ID如果没有任何选项运行此命令,它将显示您自己所有程序或进程的表格——您启动的那些。此命令的选项不由连字符开头。
显示所有进程的详细列表,与所有者无关
kill 选项 进程ID不幸的是,有时无法以正常方式终止程序。在大多数情况下,您仍然可以通过执行 kill 命令并指定相应的进程 ID(请参阅 top 和 ps)来停止这样的失控程序。kill 发送一个 TERM 信号,指示程序自行关闭。如果这不起作用,可以使用以下参数
发送一个 KILL 信号而不是 TERM 信号,几乎在所有情况下都将指定进程结束
killall 选项 进程名此命令类似于 kill,但使用进程名(而不是进程 ID)作为参数,结束所有具有该名称的进程。
ping 选项 主机名或 IP 地址ping 命令是测试 TCP/IP 网络基本功能的标准工具。它向目标主机发送一个小数据包,请求立即回复。如果这有效,ping 将显示一条消息,表明网络链路正在运行。
-c数字确定要发送的总数据包数,并在发送完数据包后结束(默认情况下,未设置限制)
-f
flood ping:发送尽可能多的数据包;一种流行的手段,仅供 root 使用,用于测试网络
-i值指定两个数据包之间的间隔(以秒为单位)(默认值:一秒)
host 选项 主机名 服务器域名系统将域名解析为 IP 地址。使用此工具,向名称服务器(DNS 服务器)发送查询。
ssh 选项 [用户@]主机名 命令SSH 实际上是一种 Internet 协议,使您能够通过网络在远程主机上工作。SSH 也是一个 Linux 程序名称,它使用该协议来启用对远程计算机的操作。
passwd 选项 用户名用户可以随时使用此命令更改自己的密码。管理员 root 可以使用该命令更改系统上任何用户的密码。
su 选项 用户名su 命令使您可以从正在运行的会话中以不同的用户名登录。指定用户名和相应的密码。对于 root,不需要密码,因为 root 有权假定任何用户的身份。在使用不指定用户名的命令时,系统会提示您输入 root 密码并切换到超级用户 (root)。使用 su - 来启动不同用户的登录 shell。
halt 选项为了避免数据丢失,您应该始终使用此程序来关闭系统。
reboot 选项与 halt 相同,只是系统会立即重新启动。
clear此命令清除控制台的可见区域。它没有选项。