第03章:探索系统
既然现在我们知道如何在文件系统中来回移动,是时候导览一下 Linux 系统了。在开始之前,我们要学几个命令,在导览时会很受用:
ls
列出目录内容(List directory contents)file
确定文件类型(Determine file type)less
查看文件内容(View file contents)
更有趣的 ls
ls
命令大概是最常用的命令了。 通过它,我们能查看目录的内容、确定各种重要文件和目录的属性。如我们之前所见,我们能简单的输入 ls
查看当前工作目录中的文件和子目录清单:
除了当前工作目录,我们可以指定目录来列出清单,如:
甚至可以指定多个目录。下例中,我们将列出用户家目录(用 ~
表示)和 usr
目录。
我们也能改变输出格式来展示更多细节:
通过在命令中加入 -l
,我们能改变输出为长格式。
选项和参数
从上述命令中,我们得到一个关于命令如何工作的重点。命令通常会通过有一个或若干个选项(options)——甚者——带上一个或更多参数(arguments)来修整它们的行为。所以,大多数命令长得看起来像这样:
大多数命令的选项由一个字母跟随一个短横线(dash)例如 -l
组成,不过还有很多命令,包括那些来自 GNU 项目的命令,支持由两个短横线和一个单词组成的长选项(long options)。还有,很多命令允许把多个短选项串在一起。在下面的例子中,ls
命令后跟随着两个选项,l
选项将导致长格式输出,t
选项负责按文件修改时间排序。
我们将加个长选项 --reverse
来降序排列输出结果。
注意:命令选项,一如文件名,在 Linux 中是大小写敏感的。
ls
命令有许多可能的选项。最常用的如下表 3-1。
短格式
长格式
描述
-a
--all
列出所有文件,即便是以 .
开头的隐藏文件。
-A
--almost-all
如 -a
选项,但不包含 .
和 ..
目录。
-d
--directory
通常情况下,如果指定了一个目录,ls
会列出指定目录的内容,而非当前目录中的内容。使用该选项和 -l
选项连接,用以查看该目录,而非其内容。
-F
--classify
该选项在每个项目后加个后缀。例如,在目录后加个 /
。
-h
--human-readable
在长格式中,按人类可读的格式替代字节数。
-l
以长格式显示结果。
-r
--reverse
以倒序显示结果。默认情况下按字母顺序排列结果。
-S
按文件大小排序。
-t
按文件修改时间排序。
长格式详述
如前述,-l
选项会使 ls
命令以长格式显示结果。这一格式包含大量有用的信息。下面是一个来自 Ubuntu 系统的示例。
表 3-2 为我们展示了对上述结果的各个字段的含义。
表 3-2 ls
长格式字段
字段
意义
-rw-r--r--
对文件的访问权限。第一个字符指示文件的类型。在不同的类型中,-
(dash)表示一个常规文件。d
表示一个目录。接下来的三个字符表示文件属主对该文件的访问权限。再后面三个表示文件所属用户组成员对该文件的访问权限。最后三个字符表示其他用户对该文件的访问权限。在第九章「权限」将详细讨论该处的细节。
1
文件硬链接的数目。详见本章的「符号链接和硬链接」。
root
文件属主。
root
文件所属用户组。
32059
文件字节数。
2007-04-03 11:05
文件最后修改日期和时间。
oo-cd-cover.odf
文件名。
用 file 确定文件类型
在浏览系统时,了解文件内容会很有用。我们用 file
命令确定一个文件的类型。如前所述,Linux 中的文件名不需要反映文件的类型。一个如 picture.jpg
的文件名通常被希望包含 JPEG 格式的压缩图像,但在 Linux 中不是必须如此。我们可以用如下方式调用 file
命令:
当被调用后,file
命令将打印出该文件的简短描述。例如:
还有很多文件类型。事实上,类 UNIX 系统有一个普遍的理念,即「一切皆文件」(everything is a file)。当我们继续我们的课程时,我们将看到这句陈述是怎样的真实。
虽然我们系统中的许多文件都很熟悉,例如 MP3 和 JPEG,但还是有很多类型不太明显,有些则很陌生。
使用 less 查看文件内容
less
命令是用来查看文本文件的程序。在 Linux 系统中包含有很多人类可读的文本。less
程序提供了一个检查文件的捷径。
何为「文本」?
有许多方法来展示计算机中的信息。所有方法都涉及定义信息与将用于表示信息的一些数字之间的关系。计算机,仅能理解数字和那些被转换成数字表示的数据。
有些表示系统非常复杂(比如压缩过的视频文件),有些则相当简单。其中最早也最简单的是 ASCII text。ASCII 全称美国标准信息交换码(American Standard Code for Information Interchange)。它是一个简单的编码方案,首先被用在电子打字机上,用以映射键盘字符到数字符号。
文本是简单地一对一地字符映射到数字。它非常紧凑。五十个字符的文本就翻译为五十个字节的数据。这对于理解文本仅包含简单的字符映射到数字,是很重要的。这与 Microsoft Word 或 LibreOffice Writer 之类文字处理软件所生成的文件不同。那些文件对比简单的 ASCII 文本,包含了许多用来描述文档结构和格式的非文本元素(non-text elements)。普通 ASCII 文本仅包含字符本身以及一些基本的控制符号,如制表符(tabs)、回车符(carriage returns)、换行符(line feeds)。
整个 Linux 系统,有许多文件以文本格式存储,也有许多 Linux 工具可以处理这些文本。即便是 Windows 系统也能识别这种重要的格式,NOTEPAD.EXE 程序就是一个纯文本编辑器。
我们为何要检查文本文件?因为很多系统设置文件(configuration files)是以这种格式存储的,通过读取这些文件,我们能看到系统如何工作。另外,一些系统使用的程序,即脚本(scripts)也是以这种格式存储的。后面章节中,我们将学习如何编写文本文件以修改系统设置、写出我们自己的脚本,现在,先让我们看看这些文件的内容吧。
less
命令通常这样使用:
启动之后,less
程序允许我们向前或向后浏览文本。例如,检查一下定义所有系统用户帐户的文件,键入以下命令:
当 less
程序启动后,我们能看到文件的内容。如果文件内容多于一页的,我们能上下滚动文件。要退出 less
,按 q
键即可。
下表是 less
程序最常用的键盘命令。
表 3-3:less 命令
命令
行为
Page Up
或 b
向后翻一页
Page Down
或 space
向前翻一页
上箭头
向上一行
下箭头
向下一行
G
移动到文件末尾
1G
或 g
移动到文件开头
/字符
向前查找「字符」
n
继续前次的查找
h
显示帮助文件
q
退出 less
少即是多(Less Is More)
less
程序是更早期 Unix 程序more
的改进替代品。less
这个名字是对于「少即是多(less is more)」这句当代建筑和设计的格言的一个把戏。
less
属于「翻页(pagers)」程序类别,允许以一页一页的形式方便地查看长文本文档。不同于more
只允许向前翻页,less
程序允许向前或向后翻页,并且还有一些其它新功能。
导览
Linux 系统的文件系统布局与其他类 Unix 系统的文件系统布局非常相似。该设计实际上在已出版的标准「Linux 文件系统等级标准(Linux Filesystem Hierarchy Standard)」中被指定。并非所有的 Linux 发行版都完全符合该标准,但是大多数都非常接近。
下面,我们准备漫步文件系统,来看一下我们的 Linux 系统究竟有多棒。同时也将给我们一个练习浏览技能的机会。我们将发现很多人类可读的有趣的文件。当我们开始导览时,尝试以下命令:
cd
到指定目录ls -l
列出目录内容如果发现有趣的文件,用
file
检查该文件类型如果看起来可能是文本文件,用
less
查看如果意外地尝试查看一个非文本文件,把终端窗口搞得一团糟,我们用
reset
命令恢复。
记住复制粘贴技巧!如果你在用鼠标,你可以双击文件名复制,然后用中键粘贴到命令行中。
来回查看时,不用担心。常规用户是最大限度地被禁止胡搞的,那是系统管理员的事情。如果一个命令报错,就换其它命令。花一些时间到处看看,系统是用来浏览的。记住,在 Linux 中,没有秘密!
目录
注释
/
根目录,一切文件的起始。
/bin
包含供系统启动和运行的二进制文件(程序)。
/boot
包含 Linux 内核,初始化内存磁盘映像(提供启动时所需的驱动),及启动加载器。
有趣的文件:
- /boot/grub/grub.conf
或 menu.lst
用以配置启动加载器
- /boot/vmlinuz
(或类似文件),即 Linux 内核。
/dev
这是一个保存设备节点(device nodes)的特殊目录。「一切皆文件」这一概念同样适用于设备。这里是由内核维护的它所能理解的设备清单。
/etc
该目录包含了所有系统级别的配置文件。同时也包含了系统启动时开启各种系统服务的 Shell 脚本。该目录内所有文件都是可读的文本文件。
有意思的文件:/etc
中所有文件都很有意思。其中这几个特别有趣:
- /etc/crontab
定义自动执行任务的文件。
- /etc/fstab
关于存储设备及其加载点的表。
- /etc/passwd
用户帐户清单。
/home
按常规配置,每个用户都被分配到一个 /home
中的目录。普通用户仅能在自己的家目录中操作文件。这一限制能保护系统免受用户的误操作。
/lib
包含核心系统程序所用的共享库文件(shared library files)。有点类似于 Windows 系统中的共享链接库文件(DLLs)。
/lost+found
Linux 文件系统中,每个被格式化的分区或设备,如 ext4,都会有这个目录。用来保存文件系统中断事件中产生的部分恢复文件。如果没有什么糟糕的事发生,这个目录都会留空。
/media
现代 Linux 系统的该目录包含了可移动存储媒体(如 USB 设备、光盘等)的加载点。当这些设备插入时,会自动被加载。
/mnt
老旧的 Linux 系统,该目录包含手动加载的可移动设备的加载点。
/opt
该目录用来安装「可选的」软件。主要用来安装商用软件产品。
/proc
这个目录是特别的。它并非存储在硬盘中的真实的文件系统。而是由内核维护的虚拟文件系统。它所包含的是窥视到内核自身的文件。这些文件是可读的,并带给我们一个关于内核如何审视计算机的图像。
/root
root 用户的家目录。
/sbin
包含「系统」二进制文件。通常是由超级用户保存的用以执行关键系统任务的程序。
/tmp
存储各类程序所产生的临时文件。一些配置将导致该目录在系统重启时被清空。
/usr
该目录是 Linux 系统中最大的一棵目录树。包含常规用户所用到的所有程序及其支持文件。
/usr/bin
该目录包含 Linux 发行版所安装的可执行程序,正常情况下,包含上千个程序。
/usr/lib
包含供 /usr/bin
中的程序所用的共享库文件。
/usr/local
用以保存没有包含在发行版,但是被系统层面广泛使用的程序。从源码编译的程序通常被安装在/usr/local/bin
中。在更现代的 Linux 系统中,这个目录存在,但被留空,仅供系统管理员放一些文件。
/usr/sbin
包含更多的系统管理程序。
/usr/share
包含 /usr/bin
目录中的程序所用到的全部共享数据,包含诸如默认配置文件、图标、屏幕背景、声音文件等等。
/usr/share/doc
大多数安装在系统中的包,都会包含各种文档。在该目录中,我们可以看到按包组织的文档文件。
/var
除了 /tmp
和 /home
,我们目前位置看到的目录都是相对静止的。/var
目录树保存那些经常变动的数据,诸如多变的数据库、池文件、用户邮件等等。
/var/log
该目录保存日志文件(log files),记录多变的系统行为。对于监视某个时间段,这些文件很重要。其中最有用的是 /var/log/messages
和 /var/log/syslog
。注意,出于某些系统安全原因,仅超级用户能查看日志文件。
符号链接
当我们用 ls
查看目录的时候(如 /lib
目录),会看到类似这样的条目:
注意第一个字母是 l
,并且这条好像有两个文件名。这种特殊的文件叫作符号链接(symbolic link)或者软链接(soft link)、符号链接(symlink)。在大多数类 Unix 系统中,都存在一个文件有多个文件名的情况。虽然目前为止还看不到,但是这是一个很有用的功能。
想象一下这样的场景:一个程序需要用到一个共享资源中的一个 "foo" 文件,但是这个 "foo" 文件经常改版。所以,将版本号放在文件名中,对于管理员来说会很好,能看到安装的是什么版本的 "foo" 文件。这样就会出现一个问题。如果我们变更了这个共享资源的名称,我们要向下追踪所有依赖于这个文件的程序,变更其所依赖的资源名称,每次改版升级都要修改所有依赖它的程序。看起来是不是一点儿都不好玩了?
这就要靠符号链接来拯救了。假设我们安装了 2.6 版的 "foo",其文件名为 "foo-2.6",然后创建了一个叫 "foo" 的符号链接,指向 "foo-2.6"。这意味着当一个程序需要打开文件 "foo" 文件,实际上打开的是 "foo-2.6" 文件。现在大家都开心了。依赖于 "foo" 文件的程序能找到它,我们也能看到实际上安装的版本号。当升级到 "foo-2.7" 时,我们安装到系统,删去 "foo" 符号链接,并创建一个新的符号链接指向新版本。这样不仅能解决版本升级带来的问题,而且能在系统中保存这个文件的两个版本。想象一下 "foo-2.7" 有个 bug(该死的开发人员!),我们需要回退到老版本,于是我们只要删掉指向新版本的符号链接,重建一个指向旧版本的符号链接即可。
本节开头列出的文件名显示一个符号链接 libc.so.6
,指向一个名为 libc-2.6.so
的共享库文件。意味着程序找 libc.so.6
文件,实际上会得到 libc-2.6.so
文件。在下章我们将学习如何创建符号链接。
硬链接
当我们学习链接课题的时候,我们需要注意到还有第二种链接,硬链接(hard link)。硬链接同样允许文件有多个名称,但是是用另外的方法来实现的。关于两种链接的区别,我们将在下章详细讨论。
总结
本章中我们学习了很多关于系统的知识。我们看到了多种不同的文件和目录以及他们的内容。我们从中可以看到系统是多么开放。在 Linux 系统中有这么多重要的文件,都是用人类可读的文本文件。非如很多私有系统,Linux 让一切都可以得到检查和学习。
扩展阅读
Last updated
Was this helpful?