也许你不相信“一切皆文件”,但是linux和Unix就是这样。这是一个令人感到震惊的概念——它使得一些简单却非常强大的功能成为可能,比如在运维任务中执行一些用其他的方法极度的困难,或者根本不可能完成的任务。
备份MBR(Master Boot Record 主引导记录)##
举个例子:考虑一下一个简单的任务——备份你硬盘上的主引导记录。我有时候需要恢复或者重建我的主引导记录,尤其是分区表,但这些从头重建是非常困难的,而从备份恢复,就简单多了。linux提供了强大的GNU工具——dd,这个工具不但可以备份MBR,而且还有许多功能。
dd的意思是磁盘转储(disk dump),但是我们运维人员在很长一段时间内,都把他叫做“磁盘毁灭者”(disk destoryer),因为一旦你不小心,它会准确的执行命令,即使是破坏磁盘或者分区上的所有数据。
下面这个命令将会备份你的MBR,但必须以root权限运行,因为非root用户是不能进入/dev目录下的硬盘设备文件的。BS是BlockSize,count是从资源文件(即/dev/sda 译者注)读取的分区号。这个命令将会在/tmp目录下创建一个myMBR.bak文件。这个文件占512个字节,包含了你的MBR以及引导程序和分区表。
dd if=/dev/sda of=/tmp/myMBR.bak bs=512 count=1
如果MBR已经损坏了,可能需要启动到一个恢复磁盘上,使用下面这个命令,它实际上执行了一个恢复操作。注意,这里不需要像上一条命令一样指出区块大小编码,因为dd命令会简单的将备份文件拷贝到硬盘的第一个扇区,并在备份文件结束后停止复制。
dd if=/tmp/myMBR.bak of=/dev/sda
都是文件系统的一部分
Linux计算机上的任何东西都可以作为文件系统上的文件来访问。一切的关键在于在不同的地方使用相同的工具。
这个dd命令可以被用来拷贝硬盘上的整个分区到一个文件或者是像下面这样拷贝到另一个硬盘上。和之前一样,dd复制时会在输入设备的结束点停下来。要确保输出设备的空间比输入设备要大。
dd if=/dev/sda of=/dev/sdg3
dd if=/dev/sda of=/dev/sdg
还有另外一些文件系统工具。比如cat命令,可以发送任何文件的内容到标准输出,其中包含了分区和整个硬盘设备,标准输出可以被重定向到文件。
cat /dev/sda1 > partition1.backup
但是cat命令不能像dd一样做一些控制,比如指明从设备或者文件读入的数据大小。
这里有一个有趣的实验,演示(demonstrate)了一切皆文件这个事实。大多数Linux发行版都集成了几个虚拟终端,号码从1到7,可以用他们通过shell端口登录到一个本地的控制台会话。可以通过快捷键Ctrl-Alt-F1来访问一号控制台,Ctrl-Alt-F2访问二号控制台,以此类推。
按下Ctrl-Alt-F2选择二号控制台。在一些发行版上,登录信息包括了和此控制台关联的tty设备信息,但大多数都不是这样。(如果有的话)它会是tty2,因为你现在就在二号控制台上。
以非root用户登录,然后你可以使用who an i命令——没错就是这个,用空格(隔开)——来确定哪一个tty设备关联了这个控制台。
在我们实际演示这个实验之前,在/dev目录看一下tty2, tty3的列表设备列表。
ls -l /dev/tty[23] //原文这里写成了/dev tty[23]
将会显示许多设备被拒绝访问,但我们大都不用关心,只需要看tty2, tty3这两个设备,我们将在下面的实验使用这两个设备。tty2关联二号虚拟控制台,tty3是三号。
按下Ctrl-Alt-F3进入三号控制台,同样以非root用户登入。
现在在三号控制台下面键入这个命令。
echo "Hello world" > /dev/tty2
按Ctrl-Alt-F2进入二号控制台,”Hello world”(没有引号)将会显示在上面。
这个实验也可以在GUI界面上使用。桌面上的终端会话使用/dev目录下的模拟的终端设备,例如,/dev/pts/1 。用Konsole或者Xterm打开两个终端会话,试着确定他们关联了哪一个虚拟终端,并用一个给另一个发送信息。
现在继续实验,使用cat命令来在不同终端中显示/etc/fstab文件。
另一个有趣的实验是直接使用cat命令让打印机打印文件。假定你的打印机是/dev/usb/lp0,并且你的打印机可以直接打印PDF文件,下面这个命令将会在你的打印机上打印一个PDF文件。
cat test.pdf > /dev/usb/lp0
dd命令也可以打印打印机支持的文件,但我认为cat命令实际上更适合。
”一切皆文件”的含义
“一切皆文件”的含义是很广泛的,最好是像这篇短文一样将其列出来。在之前的实验中你已经看到了一些例子,这里还有一个表格,里面包含了这些以及另外的实验。
- 克隆硬盘
- 备份分区
- 备份MBR
- 将ISO镜像安装到USB设备
- 与其他终端的用户交流
- 向打印机传输文件
- 改变/proc目录的某些文件,来改变一些正在运行的内核的一些配置参数
- 用随机数据或空数据填充文件,分区或者是硬盘
- 将一些不想要的文件重定向到/dev/null设备文件,来使它们永远地消失
- 等等等等……
额外的信息
想要看更多的关于你在这看到的/dev目录和设备文件的信息,请参考LinuxJournal上的这篇文章。
想要看更多具体的关于独特的设备文件的信息,Linux Documentation Project上的这篇文章和这篇文章将会很有用。
关于作者
David Both – David Both是一个linux和开源支持者,居住在加利福尼亚州。他已经当了二十多年的IT工作,并在IBM工作了20多年。他1981年在IBM是为IBM的初代个人计算机写了第一册使用指南。他也为RedHat公司教过RHCE班,并且在MCI通信公司,世通公司(Worldcom),思科公司(Cisco)和北加利福尼亚州政府工作过。