查找和放置系统文件
本节讨论初级管理(LPIC-1)101 考试的主题 1.104.8 的内容。这个主题的权值是 5。
在本节中,学习以下内容:
- 文件系统层次标准(FHS)以及如何对文件和目录进行分类
- 查找文件和命令
文件系统层次标准(FHS)
文件系统层次标准(FHS)是一个文档,它指定 Linux 或其他类 UNIX 系统上目录的布局。创建它是为了提供一个共用的布局,让不同的 Linux 发行版将文件放在相同的位置,从而简化独立于发行版的软件开发。它还被用在文件系统层次标准(FHS)中(参见 参考资料)。
两个独立的 FHS 分类
FHS 的核心是两种独立的文件性质:
可共享的与不可共享的
可共享的文件可以位于一个系统上并在另一个系统上使用它们,而不可共享的文件只能在它们所在的系统上使用。
可变的与静态的
静态文件包括没有系统管理员参与就不会改变的文档、库和二进制文件。不是静态的文件就是可变的。
可以根据这些区别,将具有不同性质的文件存储在不同的文件系统上。表 6 是一个来自 FHS 文档的例子,展示了一个符合 FHS 的布局。
表 6. FHS 示例 |
| 可共享的 | 不可共享的 |
静态的 | /usr5akLinux联盟 /opt | /etc5akLinux联盟 /boot |
可变的 | /var/mail5akLinux联盟 /var/spool/news | /var/run5akLinux联盟 /var/lock |
根文件系统
FHS 的目标是使根文件系统尽可能小。它必须包含引导、恢复或修复系统所需的所有文件,包括有经验的管理员执行这些任务所需要的工具。引导系统要求在根文件系统上有足够的文件,能够挂载其他文件系统。
根文件系统中的目录
表 7 显示 FHS 要求在根(即 /)文件系统中存在的目录的用途。这些目录或它们的符号链接必须存在,除非标为可选的,只在存在对应的子系统时需要那些可选的目录。
表 7. FHS 根文件系统 |
目录 | 用途 |
bin | 基本的命令二进制文件 |
boot | 引导装载器的静态文件 |
dev | 设备文件 |
etc | 主机特有的系统配置 |
lib | 基本的共享库和内核模块 |
media | 可移除介质的挂载点 |
mnt | 临时挂载文件系统的挂载点 |
opt | 附加的应用程序软件包 |
sbin | 基本的系统二进制文件 |
srv | 这个系统提供的服务的数据 |
tmp | 临时文件 |
usr | 辅助层次结构 |
var | 可变数据 |
home | 用户的主目录(可选) |
lib<qual> | 替代格式的基本共享二进制文件(可选) |
root | 根用户的主目录(可选) |
/usr 和 /var
/usr 和 /var 层次结构足够复杂,能够容纳 FHS 要求的所有部分。/usr 文件系统是文件系统的第二个主要部分,包含可共享、只读的数据。它可以在系统之间共享,但是不经常这样做。/var 文件系统包含可变的数据文件,包括假脱机目录和文件、管理和日志数据、过渡和临时文件。/var 的某些部分不能在不同系统之间共享,但是其他目录(比如 /var/mail、/var/cache/man、/var/cache/fonts 和 /var/spool/news)可以共享。
要全面了解这个标准,请阅读 FHS 文档(参见 参考资料)。
文件在哪里?
Linux 系统常常包含成千上万的文件。我们在本教程中使用的是一个新安装的 Ubuntu 系统,仅在它的 /usr 层次结构中就包含近 50000 个文件。我有时候使用的 Fedora 系统有大约 175000 个文件。本节的其余部分介绍一些文件搜索工具,帮助您在这么多数据中查找文件,尤其是程序。
PATH
如果您有几个 Linux 系统,就可能会注意到作为根用户登录时能够执行 fdisk 等命令,但是作为一般用户时就不能执行。实际情况是,在命令行上运行程序时,bash(或其他)shell 搜索一系列目录,查找您需要的程序。目录的清单是在环境变量 PATH 中指定的,常见情况是根用户的路径包含 /sbin,而非根用户的路径不包含。清单 64 显示两个不同的用户路径示例,以及一个根路径示例。
5akLinux联盟
清单 64. 一些 PATH 示例
ian@pinguino:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:5akLinux联盟 /usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
[ian@attic4 ~]$ echo $PATH
/usr/kerberos/bin:5akLinux联盟 /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin
[ian@attic4 ~]$ su -
Password:
[root@attic4 ~]# echo $PATH
/usr/kerberos/sbin:5akLinux联盟 /usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:
/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
|
可以看到,PATH 变量只是一个由冒号分隔的目录名清单。因为 fdisk 命令实际上位于 /sbin/fdisk,所以只有第一个和最后一个路径允许用户通过输入 fdisk 运行它,而不需要提供完全限定的名称(/sbin/fdisk)。
路径常常是在一个初始化文件(比如 .bash_profile 或 .bashrc)中设置的。可以为当前会话指定新的路径。要记住,如果想让新的路径对您启动的其他进程生效,那么要导出 PATH 变量。一个例子见清单 65。
5akLinux联盟
清单 65. 修改 PATH
[ian@attic4 ~]$ fdisk
-bash: fdisk: command not found
[ian@attic4 ~]$ export PATH=/sbin:$PATH
[ian@attic4 ~]$ fdisk
Usage: fdisk [-l] [-b SSZ] [-u] device
E.g.: fdisk /dev/hda (for the first IDE disk)
or: fdisk /dev/sdc (for the third SCSI disk)
or: fdisk /dev/eda (for the first PS/2 ESDI drive)
or: fdisk /dev/rd/c0d0 or: fdisk /dev/ida/c0d0 (for RAID devices)
...
|
which、type 和 whereis
在前面的例子中,我们通过尝试运行 fdisk 发现它不可用。有几个命令可以帮助您解决这个问题。
which
可以使用 which 命令搜索路径,查找在输入一个命令时将执行的命令(如果有的话)。清单 66 显示的例子查找 fdisk 命令。
5akLinux联盟
清单 66. 使用 which
[ian@attic4 ~]$ which fdisk
/usr/bin/which: no fdisk in 5akLinux联盟 (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:
/usr/X11R6/bin:/home/ian/bin)
[ian@attic4 ~]$ export PATH=/sbin:$PATH
[ian@attic4 ~]$ which fdisk
/sbin/fdisk
|
which 命令显示一个命令在路径中的第一次出现。如果想知道这个命令是否出现了多次,那么添加 -a 选项,如清单 67 所示。
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论