原文地址: https://opensource.com/life/1...
原翻译地址: http://www.tony-yin.top/2017/...
这里先提一个技巧性的问题:如下哪个是文件?html
Shell
脚本Office
文档Serial ports
)LVM
)Sockets
)也许你不会相信,可是对于Unix
和Linux
,它们都是文件。这是最使人惊奇的概念之一——这样作使得许多管理任务能够被一些很是简单但功能强大的方法执行,不然这些任务实现起来可能很是困难甚至不可能。linux
举个简单任务的例子,考虑一下为你的硬盘驱动器地主引导记录(MBR
)作一个备份工做。有时候我须要恢复或从新建立个人MBR
,尤为是分区表。从头开始从新建立它是很是困难的。可是从保存好的文件中恢复出来这是很是容易的。Linux
有一个很强大的GNU
工具 --- dd
,它能够实现这个和其余不少功能。shell
dd
表示disk dump
的缩写,意为“磁盘转储”,可是咱们不少资深管理员一直认为它是disk destroyer
的缩写,由于若是你不是很当心的话,这个工具会准确无误地执行你告诉它要作的事情,包括将硬盘上或者分区上全部的数据都破坏掉。数据结构
如下命令将会备份你的MBR
,它必需要是root
用户执行,由于非root
用户没有访问/dev
目录下硬盘驱动器设备文件的权限。BS
是Block Size
缩写,表示块大小,count
表示从源文件读取的块的个数。这个命令将在/tmp
目录建立一个myMBR.bak
的文件。这个文件的大小将为512
字节,包含了MBR
的内容,包括引导代码和分区表等。工具
dd if=/dev/sda of=/tmp/myMBR.bak bs=512 count=1
若是MBR
被损坏了,就须要引导到一个修复盘并执行下面的命令,这个命令本质上就是上面的反向操做。值得注意的是这条命令没有必要指定块大小和块个数这两个参数,由于dd
命令将会把备份文件简单地拷贝到硬盘的第一个扇区,而且当它执行到源文件末尾后中止。spa
dd if=/tmp/myMBR.bak of=/dev/sda
Linux
计算机上的全部内容均可以做为文件系统空间的文件被访问。这是很是重要的,这使得咱们 能够使用通用的工具访问不一样的东西。.net
dd
命令可用于将硬盘的整个分区拷贝到一个文件或者以下所示的其余硬盘。在这里dd
命令再次将数据拷贝到输入设备的末尾并中止。请确保输出设备的容量要大于输入设备。翻译
dd if=/dev/sdf2 of=/dev/sdg3 dd if=/dev/sda of=/dev/sdg
此外文件系统还有其余工具能够达到此做用。好比,cat
命令能够用来将任意文件的内容发送到标准输出,这包括分区和整个硬盘。而后,输出还能够被重定向到一个文件。code
cat /dev/sda1 > partition1.backup
可是,cat
命令没有dd
命令的控制功能。例如,不能指定从源设备或者源文件读取的数据量。htm
下面是一个有趣的实验,它将正面一切皆文件的事实。大多数Linux
发行版都有多个虚拟控制台,其中1
到7
能够用来登陆到一个带有shell
接口的本地控制台会话。能够经过一些组合键访问它们,好比Ctrl-Alt-F1
是控制台1
,Ctrl-Alt-F2
是控制台2,以此类推。
按Ctrl-Alt-F2
切换到控制台2。在一些发行版中,登陆信息包括与此控制台相关的tty
(Teletype
)设备,可是也有不少发行版不包括。页面应该显示tty2
的信息,由于你当前在控制台2
。
用一个非root
登陆,你能够经过who am i
这个命令来肯定哪个tty
设备链接到当前控制台。
在咱们实际执行这个实验以前,请看一下/dev
目录下的tty2
和tty3
设备的列表清单。
ls -l /dev tty[23]
有大量的定义过的tty
设备,可是它们其中的大多数咱们并不关心,咱们只关系tty2
和tty3
设备。做为设备文件,它们没有什么特殊之处;它们只是简单的字符类型的设备。咱们将用这些设备作这个实验。tty2
设备链接到虚拟控制台2
,tty3
设备链接到虚拟控制台3
。
按Ctrl-Alt-F3
组合键切换到控制台3
,再次以一样的非root
用户登陆。
如今在控制台3
输入如下命令:
echo "Hello world" > /dev/tty2
按Ctrl-Alt-F2
组合键返回控制台2
。字符串“Hello world”(没有引号)将显示在控制台2
上。
这个实验也能够在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
)。u
盘上安装ISO
镜像。/proc pseudo
文件系统中的某些文件的内容,以修改运行内核的配置参数。/dev/null
设备,它将永远不会显示。这里有太多的例子,任何一个列表都只是表面的一部分。我相信,你确定会想出或指出许多比我这里提到更有创造性的方式,来使用Linux
的这个特性。我很乐意看到你对如何使用“一切都是文件”的评论。
有关/dev/
目录和你可能在那里找到的设备的更多信息,请参阅Linux Journal
上的这篇文章。有关单个设备的更详细信息,Linux文档项目中的这篇文章和这篇文章会有所帮助。