Linux 命令行与 shell 脚本编程大全 (3rd ed)(24):基本的 bash shell 命令 3.4.2

阅读数:8 2019 年 11 月 17 日 15:21

Linux命令行与shell脚本编程大全(3rd ed)(24):基本的bash shell命令 3.4.2

内容简介
这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。

(遍历目录)

在 Linux 文件系统上,可以使用切换目录命令cd将 shell 会话切换到另一个目录。cd命令的格式非常简单:

复制代码
cd destination

cd命令可接受单个参数 _destination_,用以指定想切换到的目录名。如果没有为cd命令指定目标路径,它将切换到用户主目录。

_destination_ 参数可以用两种方式表示:一种是使用绝对文件路径,另一种是使用相对文件路径。

接下来将分别阐述这两种方法。这两者之间的不同对于理解文件系统遍历非常重要。

1. 绝对文件路径

用户可在虚拟目录中采用绝对文件路径引用目录名。绝对文件路径定义了在虚拟目录结构中该目录的确切位置,以虚拟目录的根目录开始,相当于目录的全名。

绝对文件路径总是以正斜线(/)作为起始,指明虚拟文件系统的根目录。因此,如果要指向 usr 目录所包含的 bin 目录下的用户二进制文件,可以使用如下绝对文件路径:

复制代码
/usr/bin

使用绝对文件路径可以清晰表明用户想切换到的确切位置。要用绝对文件路径来切换到文件系统中的某个特定位置,只需在cd命令后指定全路径名:

复制代码
christine@server01:~$ cd /usr/bin
christine@server01:/usr/bin$

注意,在上面的例子中,提示符中一开始有一个波浪号(~)。在切换到另一个目录之后,这个波浪号被 /usr/bin 替代了。CLI 提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。波浪号表明 shell 会话位于你的主目录中。在切换出主目录之后,如果提示符已经进行了相关配置的话,绝对文件路径就会显示在提示符中。

说明 如果你的 shell CLI 提示符中并没有显示 shell 会话的当前位置,那是因为它并没有进行相关的配置。如果你希望修改 CLI 提示符的话,第 6 章会告诉你如何更改配置。

如果没有配置好提示符来显示当前 shell 会话的绝对文件路径,也可以使用 shell 命令来显示所处的位置。pwd命令可以显示出 shell 会话的当前目录,这个目录被称为当前工作目录pwd命令的用法如下:

复制代码
christine@server01:/usr/bin$ pwd
/usr/bin
christine@server01:/usr/bin$

窍门 在切换到新的当前工作目录时使用pwd命令,是很好的习惯。因为很多 shell 命令都是在当前工作目录中操作的,在发出命令之前,你应该始终确保自己处在正确的目录之中。

可以使用绝对文件路径切换到 Linux 虚拟目录结构中的任何一级:

复制代码
christine@server01:/usr/bin$ cd /var/log
christine@server01:/var/log$
christine@server01:/var/log$ pwd
/var/log
christine@server01:/var/log$

还可以从 Linux 虚拟目录中的任何一级跳回主目录:

复制代码
christine@server01:/var/log$ cd
christine@server01:~$
christine@server01:~$ pwd
/home/christine
christine@server01:~$

但是,如果你只是在自己的主目录中工作,经常使用绝对文件路径的话未免太过冗长。例如,若已经位于目录 /home/christine,再输入下面这样的命令切换到 Documents 目录就有些繁琐了:

复制代码
cd /home/christine/Documents

幸好还有一种简单的解决方法。

2. 相对文件路径

相对文件路径允许用户指定一个基于当前位置的目标文件路径。相对文件路径不以代表根目录的正斜线(/)开头,而是以目录名(如果用户准备切换到当前工作目录下的一个目录)或是一个特殊字符开始。假如你位于 home 目录中,并希望切换到 Documents 子目录,那你可以使用cd命令加上一个相对文件路径:

复制代码
christine@server01:~$ pwd
/home/christine
christine@server01:~$
christine@server01:~$ cd Documents
christine@server01:~/Documents$ pwd
/home/christine/Documents
christine@server01:~/Documents$

上面的例子并没有使用正斜线(/),而是采用了相对文件路径将当前工作目录从 /home/christine 改为 /home/christine/Documents,大大减少了输入内容。

另外,此例中还要注意的是,如果提示符经过配置可以显示出当前工作目录,它就会一直显示波浪号。这表明当前工作目录位于用户 home 目录之下。

窍门 如果你刚接触命令行和 Linux 目录结构,建议暂时先坚持使用绝对文件路径。等熟悉了目录布局之后,再使用相对文件路径。

可以在任何包含子目录的目录中使用带有相对文件路径的cd命令。也可以使用一个特殊字符来表示相对目录位置。

有两个特殊字符可用于相对文件路径中:

  • 单点符(.),表示当前目录;
  • 双点符(…),表示当前目录的父目录。

你可以使用单点符,不过对cd命令来说,这没有什么意义。在本章后面你会看到另一个命令如何有效地在相对文件路径中使用单点符。

双点符在目录层级中移动时非常便利。如果你处在在主目录下的 Documents 目录中,需要切换到主目录下的 Downloads 目录,可以这么做:

复制代码
christine@server01:~/Documents$ pwd
/home/christine/Documents
christine@server01:~/Documents$ cd ../Downloads
christine@server01:~/Downloads$ pwd
/home/christine/Downloads
christine@server01:~/Downloads$

双点符先将用户带到上一级目录,也就是用户的主目录,然后 /Downloads 这部分再将用户带到下一级目录,即 Downloads 目录。必要时用户也可用多个双点符来向上切换目录。假如现在位于主目录中(/home/christine),想切换到 /etc 目录,可以输入如下命令:

复制代码
christine@server01:~$ cd ../../etc
christine@server01:/etc$ pwd
/etc
christine@server01:/etc$

当然,在上面这种情况下,采用相对路径其实比采用绝对路径输入的字符更多,用绝对路径的话,用户只需输入 /etc。因此,只在必要的时候才使用相对文件路径。

说明 在 shell CLI 提示符中加入足够的信息非常方便,本节正是这么做的。不过出于清晰性的考虑,在书中余下的例子里,我们只使用一个简单的 $ 提示符。

既然你已经知道如何遍历文件系统和验证当前工作目录,那就可以开始探索各种目录中究竟都有些什么东西了。下一节将学习如何查看目录中的文件。

评论

发布