原文地址: 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文檔項目中的這篇文章和這篇文章會有所幫助。