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