原文地址:https://opensource.com/life/1...原文翻译地址:http://www.tony-yin.top/2017/...这里有一个技术问题:以下哪个是文件?目录Shell脚本办公文档串口(Serialports)内核数据结构内核调优参数硬盘分区逻辑卷(LVM)打印机套接字(Sockets)也许你不相信,但对于Unix和Linux来说,它们都是文件。这是最令人惊奇的概念之一——这样做允许许多管理任务通过一些非常简单但功能强大的方法来执行,否则这些任务很难甚至不可能实现。备份主引导记录作为一个简单任务的示例,考虑备份硬盘驱动器的主引导记录(MBR)。有时我需要恢复或重新创建我的MBR,尤其是分区表。从头开始重新创建它是非常困难的。但是从保存的文件中恢复非常容易。Linux有一个非常强大的GNU工具---dd,它可以实现这个和很多其他的功能。dd代表diskdump,意思是“磁盘转储”,但是我们很多资深管理员一直以为它是diskdestroyer的缩写,因为如果你不小心,这个工具会按照你的要求去做,包括销毁硬盘或分区上的所有数据。以下命令将备份您的MBR,它必须由root用户执行,因为非root用户没有权限访问/dev目录中的硬盘驱动器设备文件。BS是BlockSize的缩写,意思是块大小,count是从源文件中读取的块数。此命令将在/tmp目录中创建一个myMBR.bak文件。该文件大小为512字节,包含MBR的内容,包括引导代码和分区表。ddif=/dev/sdaof=/tmp/myMBR.bakbs=512count=1如果MBR损坏,需要启动到修复盘,执行下面的命令,本质上是上面的逆操作.值得注意的是,该命令不需要指定块大小和块号这两个参数,因为dd命令只是简单地将备份文件复制到硬盘的第一个扇区,当执行到末尾时源文件停止。ddif=/tmp/myMBR.bakof=/dev/sda都是文件系统的一部分Linux计算机上的所有内容都可以作为文件系统空间中的文件进行访问。这一点很重要,它可以让我们使用通用的工具来访问不同的东西。dd命令可用于将硬盘的整个分区复制到文件或另一个硬盘,如下所示。dd命令再次将数据复制到输入设备的末尾并停止。确保输出设备的容量大于输入设备的容量。ddif=/dev/sdf2of=/dev/sdg3ddif=/dev/sdaof=/dev/sdg另外还有其他的文件系统工具可以达到这个效果。例如,cat命令可用于将任何文件的内容发送到标准输出,包括分区和整个硬盘驱动器。然后,输出也可以重定向到一个文件。cat/dev/sda1>partition1.backup但是cat命令没有dd命令的控制功能。例如,您不能指定要从源设备或源文件中读取的数据量。这是一个有趣的实验,可以纠正一切皆文件的事实。大多数Linux发行版都有多个虚拟控制台,其中1到7个可用于通过shell界面登录到本地控制台会话。它们可以通过一些组合键访问,例如Ctrl-Alt-F1是控制台1,Ctrl-Alt-F2是控制台2等等。按Ctrl-Alt-F2切换到控制台2。在某些发行版中,登录信息包括与此控制台关联的tty(电传打字机)设备,但许多发行版不包含。该页面应该显示tty2的信息,因为您当前在控制台2中。使用非root登录,您可以使用whoami命令来确定哪个tty设备连接到当前控制台。在我们实际执行此实验之前,请查看/dev目录中tty2和tty3设备的列表。ls-l/devtty[23]里面定义了大量的tty设备,但是大部分我们并不关心,我们只关心tty2和tty3设备。作为设备文件,它们没有什么特别之处;它们只是简单的字符型设备。我们将使用这些设备进行此实验。tty2设备连接到虚拟控制台2,tty3设备连接到虚拟控制台3。按Ctrl-Alt-F3切换到控制台3,并再次以相同的非root用户身份登录。现在在控制台3中输入以下命令:echo"Helloworld">/dev/tty2按Ctrl-Alt-F2返回到控制台2。字符串"Helloworld"(不带引号)将显示在控制台2上。本实验也可以在GUI桌面的终端仿真器上执行。桌面上的终端会话使用/dev树中的伪终端设备,例如/dev/pts/1。通过Konsole或Xterm打开两个终端会话,确定它们连接到哪个伪终端,并使用一个向另一个发送消息。现在继续进行实验,使用cat命令在不同的终端中显示/etc/fstab文件。另一个有趣的实验是使用cat命令将文件直接打印到打印机。假设您的打印机设备是/dev/usb/lp0,并且您的打印机可以直接打印PDF文件,下面的命令将在您的打印机上打印一个PDF文件。cattest.pdf>/dev/usb/lp0dd命令也可用于打印准备打印的文件。但是,我认为cat命令实际上更适合这项任务。“一切都是文件”的含义“一切都是文件”的含义是深远的,远远超出本文所列举的那些。您已经在之前的实验中看到了一些示例,但这里有一个包含这些以及更多内容的简短列表。克隆硬盘。备份分区。备份主引导记录(MBR)。在USB驱动器上安装ISO映像。与其他最终用户交流。将文件打印到打印机。改变/proc伪文件系统中某些文件的内容来修改运行内核的配置参数。用随机数据或零覆盖文件、分区或整个硬盘驱动器。将不需要的输出重定向到永远不会显示的/dev/null设备。等等,等等,等等。..这里的例子太多了,任何一个列表都只是触及表面。我相信您会想出或指出比我在这里提到的更有创意的方法来使用Linux的这个特性。我很乐意看到您对如何使用“一切皆文件”的评论。附加信息有关/dev/目录和您可以在其中找到的设备的更多信息,请参阅LinuxJournal上的这篇文章。有关各个设备的更多详细信息,这篇文章和Linux文档项目中的这篇文章可能会有所帮助。
