Linux 的“泄密的心脏”,第 6 部分
大家好。很高兴再次在角落里看到你们微笑的面孔,这里是系统管理员的角落。本周,我们将用一些非常酷的东西来结束“泄密的心脏”系列,你可能再也不会以同样的方式看待你的 Linux 系统了。你可能不知道,但在你的计算机上住着一个幽灵:一个拥有大量目录和文件的文件系统,很像任何其他文件系统,只是这个文件系统实际上根本不存在。事实上,它在你每次关机时都会消失,并在你每次重启时重建。

在写这篇文章的时候,我意识到我玩得太开心了。生活中的有些东西太酷了,你只想一直摆弄它们。在过去的几篇文章中,我一直将你的 Linux 系统日志比作你的系统保存的一种数字日记。如果日志是你系统私人日记的窥视孔,那么 /proc 文件系统(或伪文件系统,因为它实际上并不存在)就是观察你系统灵魂的方式。
好吧,我已经说过两次了。神秘的 /proc 文件系统怎么可能不存在呢?如果我在根目录上执行 ls -l,我会得到一个大小为零的目录。你自己试试看。
# ls -l / (note: only showing partial listing) drwxr-xr-x 2 root root 4096 Aug 1 15:07 patch dr-xr-xr-x 90 root root 0 Aug 12 19:57 proc drwxr-x--- 113 root root 12288 Aug 14 14:55 root drwxr-xr-x 3 root root 4096 Jul 12 16:40 sbin drwxrwxrwt 8 root root 4096 Aug 14 15:21 tmp drwxr-xr-x 21 root root 4096 Mar 13 17:07 usr drwxr-xr-x 18 root root 4096 Jun 22 18:59 var
请注意,/proc 确实大小为零。但是,当我使用 cd /proc 切换到 /proc 目录并在那里执行 ls 时,我看到了大量信息。
# cd /proc # ls 1 10102 10105 10311 10315 10702 10710 10712 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10755 10766 1145 1146 1147 1148 1149 1150 1151 1152 2 3 330 345 346 355 369 4 420 429 443 446 447 449 450 461 475 490 5 508 528 583 6 612 626 675 715 716 717 718 719 720 723 745 752 753 757 771 773 775 776 7922 808 811 8784 8786 8788 8789 8936 9008 9088 911 914 9957 apm bus cmdline cpuinfo devices dma fb filesystems fs ide interrupts ioports kcore kmsg ksyms loadavg locks mdstat meminfo misc modules mounts net partitions pci rtc scsi self slabinfo sound stat swaps sys tty uptime version
对于一个空目录来说,这里有很多东西。让我们从一些简单的东西开始。
哎呀。在我继续之前,请允许我发出一个 警告!!! <开始使用含糊措辞> 除非你确切地知道自己在做什么,否则不要去更改你的 /proc 文件系统的内容。你可以使用其中的一些条目做一些非常酷的事情,你可以通过更改这里各种东西来调整你实际运行的系统,但请注意。 简单的东西。先看看名为“cpuinfo”的文件。又是另一个零大小的文件。现在,cat 该文件并查看结果。这是我的显示结果 实际上它是一个 奔腾 150,但阅读我的系统如何看待自己仍然有点令人着迷。让我们看看当我们查看名为“interrupts”的文件时会发生什么。有人猜吗? 类似地,在 meminfo 文件上执行 cat 将为您提供有关内存(物理内存和交换空间)的当前统计信息。查看 /proc/scsi 将显示您的 SCSI 分配,而查看 sound 文件将显示您的声卡配置。 cat 你的 /proc/partitions 文件将显示你的磁盘分区信息,“version”是你的运行内核以及它是如何编译的。继续查看。这里有很多东西,而且非常有趣。 到现在为止,你可能已经注意到我没有告诉你全部真相。当你在 /proc 上执行 ls -l 时,你实际上找到了两个非零大小的文件。其中一个名为“kcore”,对于一个不占用空间的东西来说,它可能相当大。如果你真的想深入了解你的 Linux 系统的核心,请仔细听;当你在这里看时,你几乎可以听到它的跳动。这是你的内核的一种“镜像”。也许显微镜的镜头会是一个更好的类比。请注意,该文件占用空间大小与你拥有的物理内存大致相同。这不是巧合。 kcore 是你系统的内存 - 如果你喜欢,就是它的 RAM。事实上,它是当前 RAM 中的所有内容,因此,它是一个动态的野兽。对于你在 /proc 中看到的很多内容来说,情况也是如此。从一分钟到下一分钟查看“meminfo”将产生一组不同的数字,因为处理了实际内存与交换空间的需求。 另一个“大”文件(虽然小得多)是名为“self”的东西,如果你在 /proc 上执行 ls -l,你会注意到 self 实际上是指向一个数字的指针。这是我现在执行 ls -l 时得到的结果 我要求你 ls -l 整个 /proc 目录而不是仅仅“self”的原因是:我想让你看到这个数字(在我的例子中是2183)也是 /proc 目录下的一个目录。现在,再执行一次 ls -l。它不见了,不是吗? 所有这些数字是干什么用的?它们是做什么用的?每个数字似乎都是一个目录。你会在那里找到什么?这样做:尝试 ps ax 以获取系统上正在运行的进程列表。更好的是,这样做 这将只得到进程号,而没有长显示。现在,将该列表与位于 /proc 中的数字进行比较。看起来熟悉吗?你系统上当前运行的每个进程都在 /proc 文件系统中有一个模拟。让我们看看我们可以在那里发现什么隐藏的东西。只是为了好玩,让我们选择我系统上的一个进程。对于这个小小的探索,我正在使用一个名为 Eterm 的终端模拟器。如果你没有它,请从 http://www.eterm.org 获取。稍后你会感谢我的。当然,它很漂亮,但一点点漂亮的东西并没有那么糟糕,对吧?(我又跑题了。对不起。) 我的一个 Eterm 会话的进程 ID 是 834(ps ax | grep Eterm 的结果)。如果我 cd 到 /proc/834 并执行 ls -l,这就是我看到的 再一次,其中一些可以使用 cat 或 more 或 less 查看。 cmdline 文件显示了执行 Eterm 的命令,而 environ 显示了此处工作的环境变量。查看 maps 以获取当前可执行文件正在使用的所有库的列表。查看 fd 目录内部,看看你是否可以弄清楚这些数字代表什么。 当然,有一些系统命令可以很好地显示 /proc 中发生的事情。例如,top 命令就是进程的快照。诸如 meminfo 和 pci 之类的文件可以在 KDE 的 kcontrol 程序的帮助下以图形方式展开。只需查看 信息 选项卡。如果你看得足够久,你可能会找到一个工具,以漂亮的图形格式显示所有这些东西。在某些方面,这是 /proc 文件系统背后的部分原因:为程序员/管理员/等等提供一种更简单的方式来访问核心系统信息并修改正在运行的内核。稍后获取工具。现在四处看看。这是一种技术冒险,奖品是对你的系统“引擎盖”下发生的事情的更深入理解。是的,Bobby,就是那个没有焊死的引擎盖。 我刚才是不是说了修改正在运行的内核?嗯...这听起来像是一个很好的停顿点,让你为下次我们在系统管理员的角落见面时准备好迎接全新的事物。(我不是个坏蛋吗?)直到下次,永远记住:你的 Linux 系统正在和你说话。你在听吗? # cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 5
model : 2
model name : Pentium 75 - 200
stepping : 12
cpu MHz : 150.342254
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : yes
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr mce cx8
bogomips : 59.80
# cat /proc/interrupts
CPU0
0: 6422178 XT-PIC timer
1: 43093 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 3 XT-PIC soundblaster
8: 1 XT-PIC rtc
10: 34143 XT-PIC eth0
12: 541052 XT-PIC PS/2 Mouse
13: 1 XT-PIC fpu
14: 1622951 XT-PIC ide0
15: 6 XT-PIC ide1
NMI: 0
lr>wxrwxrwx 1 root root 64 Aug 16 13:28 self -> 2183
ps ax | cut -c1-5
total 0
-r--r--r-- 1 mgagne mgagne 0 Aug 16 13:59 cmdline
lrwx------ 1 mgagne mgagne 0 Aug 16 13:59 cwd ->
r/share/Eterm/themes/Eterm
-r-------- 1 mgagne mgagne 0 Aug 16 13:59 environ
lrwx------ 1 mgagne mgagne 0 Aug 16 13:59 exe ->
r/bin/Eterm-0.8.10
dr-x------ 2 mgagne mgagne 0 Aug 16 13:59 fd
pr--r--r-- 1 mgagne mgagne 0 Aug 16 13:59 maps
-rw------- 1 mgagne mgagne 0 Aug 16 13:59 mem
lrwx------ 1 mgagne mgagne 0 Aug 16 13:59 root -> /
-r--r--r-- 1 mgagne mgagne 0 Aug 16 13:59 stat
-r--r--r-- 1 mgagne mgagne 0 Aug 16 13:59 statm
-r--r--r-- 1 mgagne mgagne 0 Aug 16 13:59 status
电子邮件:ljeditors@ssc.com