文件是允許操作系統(tǒng)記錄和存儲(chǔ)信息的常規(guī)結(jié)構(gòu)。 與其他操作系統(tǒng)不同,類UNIX操作系統(tǒng)將所有內(nèi)容都視為一個(gè)通用文件。 這意味著不僅分區(qū)以文件形式提供,而且某些設(shè)備(例如RAM,智能手機(jī),外部硬盤驅(qū)動(dòng)器和光盤驅(qū)動(dòng)器)的目錄也是文件。 另外,套接字和管道也是文件!
此外,每個(gè) TTY 終端(使用CTRL ALT F1打開的終端)都是系統(tǒng)眼中的"文件"。
目錄 /dev
如果瀏覽 /dev 目錄,您將看到相對(duì)于其他媒體對(duì)應(yīng)系統(tǒng)裝載的所有文件。就好像你把手機(jī)插入電腦,一個(gè)外部硬盤驅(qū)動(dòng)器,甚至一個(gè)U盤,都變成了操作系統(tǒng)的"文件"。
系統(tǒng)分區(qū)是在 /dev 文件夾中使用"sd"啟動(dòng)的文件。在同一文件夾中,TY 是遠(yuǎn)程打字機(jī)設(shè)備,由"CTRL +ALT+F1"命令訪問的外殼終端。光學(xué)媒體系統(tǒng)(DVD、CD 等)使用的程序集塊也在此文件夾中,所有文件都在這里列出。
特殊設(shè)備
在文件夾/dev中有4個(gè)特殊的文件目錄:full,zero,random和null。 它們的共同之處在于它們是"特殊檔案",而不僅僅是目錄。
設(shè)備空:/dev/nullnull 設(shè)備(設(shè)備 null)通常用于丟棄由于某種原因結(jié)果無關(guān)緊要的進(jìn)程的輸出流。它還可用作一個(gè)空的便利文件。通常,此操作通過系統(tǒng)控制臺(tái)上的重定向命令執(zhí)行。發(fā)送到設(shè)備"/dev/null"的任何文件都將因操作方式而永久消失,并立即丟棄數(shù)據(jù)。
它就像一個(gè)大黑洞,一個(gè)永遠(yuǎn)也不填滿的垃圾堆。
程序員因?yàn)檫@種特殊性而對(duì)/dev/null開很多玩笑。
請(qǐng)嘗試以下命令:$echo "hello world" ,你會(huì)會(huì)看到"hello world"作為命令輸出。
現(xiàn)在嘗試:$ echo "hello world"> /dev/null將返回空輸出。
也就是說,什么都不會(huì)發(fā)生。因?yàn)槊钶敵?hello world"被丟棄了,它被黑洞吞沒了。/dev/null 基于 UNIX 的系統(tǒng)的工作方式類似于黑洞:那里發(fā)送的東西不會(huì)回來!基本上,所有的命令輸出沒有存儲(chǔ),它是直接丟棄,就好像它從未生成過一樣。
設(shè)備已滿:/dev/full在 Linux 上,/dev/full是一個(gè)特殊的文件,在訪問時(shí)始終返回相同的錯(cuò)誤代碼:ENOSPC -這意味著"設(shè)備上沒有可用空間"。此外,它還有另一個(gè)函數(shù):因?yàn)樗冀K已滿,因此它為以讀取形式訪問它的任何進(jìn)程提供無限數(shù)量的空字符 (NULL)。此設(shè)備通常用于測(cè)試程序在遇到由于內(nèi)存磁盤而出錯(cuò)時(shí)的行為!
請(qǐng)嘗試以下命令:$echo "hello world">/dev/full它將給這個(gè)設(shè)備完全錯(cuò)誤,模仿一個(gè)擁擠的硬盤!bash:echo:write error:No space left on device
零設(shè)備:/dev/zero在類似 Unix 的操作系統(tǒng)上,/dev/zero 是一個(gè)特殊的文件,它提供從其中讀取的空字符數(shù) — ASCII 表的 NULL,0x00;而不是"零位"、"0"字符,其值為 0x30*。例如,此設(shè)備生成的空字符流可用于覆蓋磁盤上的信息(以清理它)或生成大小為 X 到無窮大的干凈文件。BSD 系統(tǒng)通過 mmap 函數(shù)實(shí)現(xiàn)共享內(nèi)存,該函數(shù)將 /dev /zero 映射到 RAM 來使用它。
創(chuàng)建稱為"test"的大型空文件:$ dd if=/dev/zero of=/home/ $user/test count=1000 bs=1000
如果不對(duì)命令施加限制,則獲取為"dd if=/dev/zero=/home/$user/test",您將看到一個(gè)文件,該文件將無限制增長(zhǎng)直到磁盤寫滿,它才會(huì)停止增長(zhǎng),從而導(dǎo)致"無磁盤空間可用"錯(cuò)誤。當(dāng)您要恢復(fù)分區(qū)表已損壞且無法恢復(fù)的筆驅(qū)動(dòng)器時(shí),此命令很有趣。
dd命令強(qiáng)制寫入,和 /dev /zero 將填充每個(gè)存儲(chǔ)塊,zero。它將處于新制造狀態(tài),要求您稍后使用程序(如磁盤或 Gparted)來重建分區(qū)表!請(qǐng)注意此命令,如果輸出為 of=/dev/sda1,則對(duì)整個(gè) sda1 磁盤(用零填充)歸零,從而使文件無法恢復(fù)。
隨機(jī)設(shè)備:/dev/random它的工作原理和使用 of=/dev/zero 相同的邏輯,填充磁盤,使用隨機(jī)值創(chuàng)建大小 n 的文件,這些文件由計(jì)算機(jī)處理生成、收集 GPU 信息字符、RAM 內(nèi)存等。/dev/random 適用于需要高質(zhì)量隨機(jī)數(shù)(如 SSH 和其他共享網(wǎng)絡(luò)的一次性鍵盤或公鑰生成)的用途。
如果我們將 /dev/zero的內(nèi)容發(fā)送到 /dev/null會(huì)發(fā)生什么事情。
$ sudo dd if=/dev/zero of=/dev/null
此命令將生成一個(gè)趨向于無窮大的文件,該文件將記錄在無限空間設(shè)備中 – 我們的黑洞!實(shí)際上,它不會(huì)損壞硬件磁盤,因?yàn)閷?shí)際上不會(huì)生成數(shù)據(jù)并將其寫入磁盤。但是,在內(nèi)核的角度來看,有數(shù)據(jù)傳輸:它將產(chǎn)生高CPU消耗,這將選擇其中一個(gè)內(nèi)核來占用100%cpu。這種類型的命令用于性能測(cè)試,例如,檢查計(jì)算機(jī)在 CPU 中 100% 的性能表現(xiàn)。
掛載分區(qū)
1. 使用 DD 命令創(chuàng)建充滿zero的 4Gb 文件。
$ dd if=/dev/zero of=~/test bs= 1M count=40962
現(xiàn)在,讓我們格式化此文件,選擇具有 EXT4 格式!
$mkfs.ext4 -m .005 ~/test
命令中的 -m 標(biāo)志會(huì)導(dǎo)致我們默認(rèn)將 EXT4 設(shè)置為 05 的"根"空間。這對(duì)于安裝系統(tǒng)和防止 EXT4 在默認(rèn)情況下占用大量磁盤空間甚至很有用。現(xiàn)在你有一個(gè)4GB的文件類型"unkown"的"test"在你的/home目錄下。把它裝成分區(qū)!
$ sudo mkdir /media/test
$ sudo mount -rw ~/test/media/test/
這樣我們就創(chuàng)建好了一個(gè)EXT4 格式文件,并且創(chuàng)建了一個(gè) EXT4 分區(qū),我們可以在這里面創(chuàng)建其它文件或者寫入東西。
我們可以針對(duì)任何文件格式執(zhí)行相同的過程:EXT2、FAT32、NTFS 等。一切都只取決于我們的需求!但是,不要認(rèn)為您可以在其上安裝 Windows,因?yàn)樗欠謪^(qū)內(nèi)的分區(qū),在 EXT4(或 btrfs 或 xfs)下管理它,具體取決于您的系統(tǒng))。將其作為分區(qū)安裝在 Windows 上也比較棘手,因?yàn)橄到y(tǒng)不作為基于 UNIX的設(shè)備運(yùn)行,將塊設(shè)備讀取為文件,而是以不同的方式對(duì)待它們。
一切都是一個(gè)文件
也就是說,文件夾、目錄、分區(qū)(即存儲(chǔ)事物的東西)都不過是定義在磁盤或 SSD 扇區(qū)中的"索引文件"。
當(dāng)他們討論基于UNIX的系統(tǒng)的時(shí)候,為了簡(jiǎn)單話理解,我們就說一切都只是一個(gè)文件,當(dāng)然這么理解有一定的偏頗,但是對(duì)于我們理解操作系統(tǒng)卻有著非常大的幫助。





