Linux命令行与shell脚本编程 - 浏览文件系统

发布日期:2025-02-04 19:40    点击次数:74

当登录系统并获得shell命令提示符后,你通常位于自己的主目录中。一般情况下,除了主目录,你还想探索Linux系统中的其他领域。本节将告诉你如何使用shell命令来实现这个目标。在开始前,先了解一下Linux文件系统,为下一步做铺垫。

Linux文件系统

如果刚接触Linux系统,你可能弄不清楚Linux如何引用文件和目录,而对已经习惯于Microsoft Windows操作系统方式的人来说更是如此。在继续探索Linux系统之前,最好先了解一下Linux采用的方法。

你会发现,两者的第一处不同是,Linux的路径中不使用驱动器盘符。在Windows中,计算机上安装的物理驱动器的分区决定了文件路径。Windows会为每个物理磁盘分区分配一个盘符,每个分区都有自己的目录结构,用于访问存储在其中的文件。

举例来说,在Windows中,你经常会看到这样的文件路径

C:\Users\Rich\Documents\test.doc

这种Windows文件路径表明了文件test.doc究竟位于哪个磁盘分区中。如果将test.doc保存在由E标识的闪存中,那么文件的路径就是E:\test.doc,表明文件位于E盘的根目录。

Linux则采用另一种方式。Linux会将文件存储在名为虚拟目录(virtual directory)的单个目录结构中。虚拟目录会将计算机中所有存储设备的文件路径都纳入单个目录结构。

Linux虚拟目录结构只包含一个称为根(root)目录的基础目录。根目录下的目录和文件会按照其访问路径一一列出,这点跟Windows类似。

你会注意到Linux使用正斜线(/)而不是反斜线(\)来分隔文件路径中的目录。反斜线在Linux中用作转义字符,如果误用在文件路径中会造成各种各样的问题。如果你之前用的是Windows环境,那么可能得花点儿时间来适应。

在Linux中你会看到下面这样的路径。

/home/rich/Documents/test.doc

这表明文件test.doc位于Documents目录,该目录位于rich目录,而rich目录则包含在home目录中。要注意的是,路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘中的信息。

Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备。我们称在Linux系统中安装的第一块硬盘为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。

Linux会使用根驱动器上一些特别的目录作为挂载点(mount point)。挂载点是虚拟目录中分配给额外存储设备的目录。Linux会让文件和目录出现在这些挂载点目录中,即便它们位于其他物理驱动器中。

系统文件通常存储在根驱动器中,而用户文件则存储在其他驱动器中,如图所示。

上图展示了计算机中的两块硬盘。一块硬盘(Disk 1)与虚拟目录的根目录关联,其他硬盘可以挂载到虚拟目录结构中的任何地方。在这个例子中,另一块硬盘(Disk 2)被挂载到了/home,这是用户主目录所在的位置。

Linux文件系统结构演进自Unix文件系统。在Linux文件系统中,采用通用的目录名表示一些常见的功能。表3-3列出了一些常见的Linux顶层虚拟目录名及其内容。

在CentOS Linux系统中,根虚拟目录通常包含下列顶层目录:

bin dev home lib64 mnt proc run srv tmp varboot etc lib media opt root sbin sys usr

/usr目录值得特别关注,因为该目录是一个次目录层级结构,包含可共享的只读文件。你经常会在其中发现用户命令、源代码文件、游戏,等等。下面是CentOS系统中的/usr目录:

bin games include lib lib64 libexec local sbin share src tmp

常见的Linux目录名均基于文件系统层级标准(filesystemhierarchy standard,FHS)。很多Linux发行版遵循了FHS。这样一来,你就能够在任何兼容FHS的Linux系统中轻而易举地查找文件。

当你登录系统并获得shell CLI提示符后,shell会话会从你的主目录开始。主目录是分配给用户账户的一个特有目录。在创建用户账户时,系统通常会为其分配主目录。可以使用图形界面在虚拟目录中跳转。要想在CLI提示符下切换虚拟目录,需要使用cd命令。

遍历目录

在Linux文件系统中,可以使用目录切换(cd)命令来将shell会话切换到另一个目录。cd命令的语法非常简单:

cd destination

cd命令可以接受单个参数destination,用以指定你想切换到的目录名。如果没有为cd命令指定目标路径,则会切换到你的用户主目录。destination参数可以用两种方式表示:一种是绝对路径,另一种是相对路径。

绝对路径

用户可以在虚拟目录中采用绝对路径来引用目录名。绝对路径定义了在虚拟目录结构中,该目录从根目录开始的确切位置,相当于目录的全名。绝对路径总是以正斜线(/)作为起始,以指明虚拟文件系统的根目录。因此,如果要指向usr目录所包含的子目录bin,可以写成下面这样:

/usr/bin

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

[christine@localhost ~]$ cd /usr/bin[christine@localhost bin]$

注意,在上面的例子中,提示符开头有一个波浪号(~)。在切换到另一个目录之后,这个波浪号被bin替代了。CLI提示符正是用它来帮助你跟踪当前所在虚拟目录结构中的位置。波浪号表明shell会话当前位于你的主目录中。离开主目录之后,提示符中的目录也会随之发生变化(如果提示符已经进行了相关配置的话)。

相对路径

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

[christine@localhost ~]$ pwd/home/christine[christine@localhost ~]$ cd Documents[christine@localhost Documents]$ pwd/home/christine/Documents[christine@localhost Documents]$

注意,在上面的例子中并没有使用正斜线(/),而是使用相对路径将当前工作目录从/home/christine改为了/home/christine/Documents,少敲了不少键盘。

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

现在你已经知道如何遍历文件系统并确认当前工作目录,可以开始探索各种目录中究竟都有哪些内容了。