溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Linux中管理設(shè)備

發(fā)布時(shí)間:2021-10-25 16:26:48 來(lái)源:億速云 閱讀:163 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹了怎么在Linux中管理設(shè)備,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

設(shè)備文件

設(shè)備文件也稱為設(shè)備特定文件。設(shè)備文件用來(lái)為操作系統(tǒng)和用戶提供它們代表的設(shè)備接口。所有的 Linux 設(shè)備文件均位于 /dev 目錄下,是根 (/)  文件系統(tǒng)的一個(gè)組成部分,因?yàn)檫@些設(shè)備文件在操作系統(tǒng)啟動(dòng)過(guò)程中必須可以使用。

關(guān)于這些設(shè)備文件,要記住的一件重要的事情,就是它們大多不是設(shè)備驅(qū)動(dòng)程序。更準(zhǔn)確地描述來(lái)說(shuō),它們是設(shè)備驅(qū)動(dòng)程序的門(mén)戶。數(shù)據(jù)從應(yīng)用程序或操作系統(tǒng)傳遞到設(shè)備文件,然后設(shè)備文件將它傳遞給設(shè)備驅(qū)動(dòng)程序,驅(qū)動(dòng)程序再將它發(fā)給物理設(shè)備。反向的數(shù)據(jù)通道也可以用,從物理設(shè)備通過(guò)設(shè)備驅(qū)動(dòng)程序,再到設(shè)備文件,***到達(dá)應(yīng)用程序或其他設(shè)備。

讓我們以一個(gè)典型命令的數(shù)據(jù)流程來(lái)直觀地看看。

怎么在Linux中管理設(shè)備
圖 1:一個(gè)典型命令的簡(jiǎn)單數(shù)據(jù)流程。

在上面的圖 1 中,顯示一個(gè)簡(jiǎn)單命令的簡(jiǎn)化數(shù)據(jù)流程。從一個(gè) GUI 終端仿真器,例如 Konsole 或 xterm 中發(fā)出 cat  /etc/resolv.conf 命令,它會(huì)從磁盤(pán)中讀取 resolv.conf  文件,磁盤(pán)設(shè)備驅(qū)動(dòng)程序處理設(shè)備的具體功能,例如在硬盤(pán)驅(qū)動(dòng)器上定位文件并讀取它。數(shù)據(jù)通過(guò)設(shè)備文件傳遞,然后從命令到設(shè)備文件,然后到 6  號(hào)偽終端的設(shè)備驅(qū)動(dòng),然后在終端會(huì)話中顯示。

當(dāng)然, cat 命令的輸出可以以下面的方式被重定向到一個(gè)文件, cat /etc/resolv.conf > /etc/resolv.bak  ,這樣會(huì)創(chuàng)建該文件的備份。在這種情況下,圖 1 左側(cè)的數(shù)據(jù)流量將保持不變,而右邊的數(shù)據(jù)流量將通過(guò) /dev/sda2  設(shè)備文件、硬盤(pán)設(shè)備驅(qū)動(dòng)程序,然后到硬盤(pán)驅(qū)動(dòng)器本身。

這些設(shè)備文件使得使用標(biāo)準(zhǔn)流 (STD/IO) 和重定向訪問(wèn) Linux 或 Unix  計(jì)算機(jī)上的任何一個(gè)設(shè)備非常容易。只需將數(shù)據(jù)流定向到設(shè)備文件,即可將數(shù)據(jù)發(fā)送到該設(shè)備。

設(shè)備文件類別

設(shè)備文件至少可以按兩種方式劃分。***種也是最常用的分類是根據(jù)與設(shè)備相關(guān)聯(lián)的數(shù)據(jù)流進(jìn)行劃分。比如,tty (teletype)  和串行設(shè)備被認(rèn)為是基于字符的,因?yàn)閿?shù)據(jù)流的傳送和處理是以一次一個(gè)字符或字節(jié)進(jìn)行的;而塊類型設(shè)備(如硬盤(pán)驅(qū)動(dòng)器)是以塊為單位傳輸數(shù)據(jù),通常為 256  個(gè)字節(jié)的倍數(shù)。

您可以在終端上以一個(gè)非 root 用戶,改變當(dāng)前工作目錄(PWD)到 /dev ,并顯示長(zhǎng)目錄列表。 這將顯示設(shè)備文件列表、文件權(quán)限及其主、次設(shè)備號(hào)。  例如,下面的設(shè)備文件只是我的 Fedora 24 工作站上 /dev 目錄中的幾個(gè)文件。 它們表示磁盤(pán)和 tty 設(shè)備類型。 注意輸出中每行的最左邊的字符。 b  代表是塊類型設(shè)備,c 代表字符設(shè)備。

brw-rw---- 1 root disk 8, 0 Nov 7 07:06 sda  brw-rw---- 1 root disk 8, 1 Nov 7 07:06 sda1  brw-rw---- 1 root disk 8, 16 Nov 7 07:06 sdb  brw-rw---- 1 root disk 8, 17 Nov 7 07:06 sdb1  brw-rw---- 1 root disk 8, 18 Nov 7 07:06 sdb2  crw--w---- 1 root tty 4, 0 Nov 7 07:06 tty0  crw--w---- 1 root tty 4, 1 Nov 7 07:07 tty1  crw--w---- 1 root tty 4, 10 Nov 7 07:06 tty10  crw--w---- 1 root tty 4, 11 Nov 7 07:06 tty11

識(shí)別設(shè)備文件更詳細(xì)和更明確的方法是使用設(shè)備主要以及次要號(hào)。 磁盤(pán)設(shè)備主設(shè)備號(hào)為 8,將它們指定為 SCSI 塊設(shè)備。請(qǐng)注意,所有 PATA 和 SATA  硬盤(pán)驅(qū)動(dòng)器都由 SCSI 子系統(tǒng)管理,因?yàn)榕f的 ATA 子系統(tǒng)多年前就由于代碼質(zhì)量糟糕而被認(rèn)為不可維護(hù)。造成的結(jié)果就是,以前被稱為 “hd[a-z]”  的硬盤(pán)驅(qū)動(dòng)器現(xiàn)在被稱為 “sd[a-z]”。

你大概可以從上面的示例中推出磁盤(pán)驅(qū)動(dòng)器次設(shè)備號(hào)的模式。次設(shè)備號(hào) 0、 16、 32 等等,直到 240,是整個(gè)磁盤(pán)的號(hào)。所以主/次 8/16 表示整個(gè)磁盤(pán)  /dev/sdb , 8/17 是***個(gè)分區(qū)的設(shè)備文件,/dev/sdb1。數(shù)字 8/34 代表 /dev/sdc2。

在上面列表中的 tty 設(shè)備文件編號(hào)更簡(jiǎn)單一些,從 tty0 到 tty63 。

Kernel.org 上的 Linux  下的已分配設(shè)備文件是設(shè)備類型和主次編號(hào)分配的正式注冊(cè)表。它可以幫助您了解所有當(dāng)前定義的設(shè)備的主要/次要號(hào)碼。

趣味設(shè)備文件

讓我們花幾分鐘時(shí)間,執(zhí)行幾個(gè)有趣的實(shí)驗(yàn),演示 Linux 設(shè)備文件的強(qiáng)大和靈活性。 大多數(shù) Linux 發(fā)行版都有 1 到 7 個(gè)虛擬控制臺(tái),可用于使用  shell 接口登錄到本地控制臺(tái)會(huì)話。 可以使用 Ctrl-Alt-F1(控制臺(tái) 1),Ctrl-Alt-F2(控制臺(tái) 2)等鍵盤(pán)組合鍵來(lái)訪問(wèn)。

請(qǐng)按 Ctrl-Alt-F2 切換到控制臺(tái) 2。在某些發(fā)行版,登錄顯示的信息包括了與此控制臺(tái)關(guān)聯(lián)的 tty 設(shè)備,但大多不包括。它應(yīng)該是  tty2,因?yàn)槟闶窃诳刂婆_(tái) 2 中。

以非 root 用戶身份登錄。 然后你可以使用 who am i 命令 — 是的,就是這個(gè)命令,帶空格 — 來(lái)確定哪個(gè) tty  設(shè)備連接到這個(gè)控制臺(tái)。

在我們實(shí)際執(zhí)行此實(shí)驗(yàn)之前,看看 /dev 中的 tty2 和 tty3 的設(shè)備列表。

ls -l /dev/tty[23]

有大量的 tty 設(shè)備,但我們不關(guān)心他們中的大多數(shù),只注意 tty2 和 tty3 設(shè)備。  作為設(shè)備文件,它們沒(méi)什么特別之處。它們都只是字符類型設(shè)備。我們將使用這些設(shè)備進(jìn)行此實(shí)驗(yàn)。 tty2 設(shè)備連接到虛擬控制臺(tái) 2,tty3 設(shè)備連接到虛擬控制臺(tái)  3。

按 Ctrl-Alt-F3 切換到控制臺(tái) 3。再次以同一非 root 用戶身份登錄。 現(xiàn)在在控制臺(tái) 3 上輸入以下命令。

echo "Hello world" > /dev/tty2

按 Ctrl-Alt-f2 鍵以返回到控制臺(tái) 2。字符串 “Hello world”(沒(méi)有引號(hào))將顯示在控制臺(tái) 2。

該實(shí)驗(yàn)也可以使用 GUI 桌面上的終端仿真器來(lái)執(zhí)行。 桌面上的終端會(huì)話使用 /dev 中的偽終端設(shè)備,如 /dev/pts/1。 使用 Konsole 或  Xterm 打開(kāi)兩個(gè)終端會(huì)話。 確定它們連接到哪些偽終端,并使用一個(gè)向另一個(gè)發(fā)送消息。

現(xiàn)在繼續(xù)實(shí)驗(yàn),使用 cat 命令,試試在不同的終端上顯示 /etc/fstab 文件。

另一個(gè)有趣的實(shí)驗(yàn)是使用 cat 命令將文件直接打印到打印機(jī)。 假設(shè)您的打印機(jī)設(shè)備是 /dev/usb/lp0,并且您的打印機(jī)可以直接打印 PDF  文件,以下命令將在您的打印機(jī)上打印 test.pdf 文件。

cat test.pdf > /dev/usb/lp0

/dev 目錄包含一些非常有趣的設(shè)備文件,這些文件是硬件的入口,人們通常不認(rèn)為這是硬盤(pán)驅(qū)動(dòng)器或顯示器之類的設(shè)備。 例如,系統(tǒng)存儲(chǔ)器 RAM  不是通常被認(rèn)為是“設(shè)備”的東西,而 /dev/mem 是通過(guò)其可以實(shí)現(xiàn)對(duì)存儲(chǔ)器的直接訪問(wèn)的入口。 下面的例子有一些有趣的結(jié)果。

dd if=/dev/mem bs=2048 count=100

上面的 dd 命令提供比簡(jiǎn)單地使用 cat 命令 dump 所有系統(tǒng)的內(nèi)存提供了更多的控制。 它提供了指定從 /dev/mem  讀取多少數(shù)據(jù)的能力,還允許指定從存儲(chǔ)器哪里開(kāi)始讀取數(shù)據(jù)。雖然讀取了一些內(nèi)存,但內(nèi)核響應(yīng)了以下錯(cuò)誤,在 /var/log/messages 中可以看到。

Nov 14 14:37:31 david kernel: usercopy: kernel memory exposure attempt detected from ffff9f78c0010000 (dma-kmalloc-512) (2048 bytes)

這個(gè)錯(cuò)誤意味著內(nèi)核正在通過(guò)保護(hù)屬于其他進(jìn)程的內(nèi)存來(lái)完成它的工作,這正是它應(yīng)該工作的方式。 所以,雖然可以使用 /dev/mem 來(lái)顯示存儲(chǔ)在 RAM  內(nèi)存中的數(shù)據(jù),但是訪問(wèn)的大多數(shù)內(nèi)存空間是受保護(hù)的并且會(huì)導(dǎo)致錯(cuò)誤。 只可以訪問(wèn)由內(nèi)核內(nèi)存管理器分配給運(yùn)行 dd 命令的 BASH shell  的虛擬內(nèi)存,而不會(huì)導(dǎo)致錯(cuò)誤。 抱歉,但你不能窺視不屬于你的內(nèi)存,除非你發(fā)現(xiàn)了一個(gè)可利用的漏洞。

/dev 中還有一些非常有趣的設(shè)備文件。 設(shè)備文件 null,zero,random 和 urandom 不與任何物理設(shè)備相關(guān)聯(lián)。

例如,空設(shè)備 /dev/null 可以用作來(lái)自 shell 命令或程序的輸出重定向的目標(biāo),以便它們不顯示在終端上。 我經(jīng)常在我的 BASH  腳本中使用這個(gè),以防止向用戶展示可能會(huì)讓他們感到困惑的輸出。 /dev/null 設(shè)備可用于產(chǎn)生一個(gè)空字符串。 使用如下所示的 dd 命令查看  /dev/null 設(shè)備文件的一些輸出。

# dd if=/dev/null bs=512 count=500 | od -c  0+0 records in  0+0 records out0 bytes copied, 1.5885e-05 s, 0.0 kB/s  0000000

注意,因?yàn)榭兆址裁匆矝](méi)有所以確實(shí)沒(méi)有可見(jiàn)的輸出。 注意看看字節(jié)數(shù)。

/dev/random 和 /dev/urandom 設(shè)備也很有趣。 正如它們的名字所暗示的,它們都產(chǎn)生隨機(jī)輸出,不僅僅是數(shù)字,而是任何字節(jié)組合。  /dev/urandom 設(shè)備產(chǎn)生的是確定性的隨機(jī)輸出,并且非??臁?這意味著輸出由算法確定,并使用種子字符串作為起點(diǎn)。  結(jié)果,如果原始種子是已知的,則黑客可以再現(xiàn)輸出,盡管非常困難,但這是有可能的。 使用命令 cat /dev/urandom 可以查看典型的輸出,使用  Ctrl-c 退出。

/dev/random 設(shè)備文件生成非確定性的隨機(jī)輸出,但它產(chǎn)生的輸出更慢一些。  該輸出不是由依賴于先前數(shù)字的算法確定的,而是由擊鍵動(dòng)作和鼠標(biāo)移動(dòng)而產(chǎn)生的。 這種方法使得復(fù)制特定系列的隨機(jī)數(shù)要困難得多。使用 cat 命令去查看一些來(lái)自  /dev/random 設(shè)備文件輸出。嘗試移動(dòng)鼠標(biāo)以查看它如何影響輸出。

正如其名字所暗示的,/dev/zero 設(shè)備文件產(chǎn)生一個(gè)無(wú)止境的零作為輸出。 注意,這些是八進(jìn)制零,而不是ASCII字符零(0)。 使用如下所示的 dd  查看 /dev/zero 設(shè)備文件中的一些輸出

# dd if=/dev/zero bs=512 count=500 | od -c  0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0  *  500+0 records in  500+0 records out  256000 bytes (256 kB, 250 KiB) copied, 0.00126996 s, 202 MB/s  0764000

請(qǐng)注意,此命令的字節(jié)數(shù)不為零。

創(chuàng)建設(shè)備文件

在過(guò)去,在 /dev 中的設(shè)備文件都是在安裝時(shí)創(chuàng)建的,導(dǎo)致一個(gè)目錄中有幾乎所有的設(shè)備文件,盡管大多數(shù)文件永遠(yuǎn)不會(huì)用到。  在不常發(fā)生的情況,例如需要新的設(shè)備文件,或意外刪除后需要重新創(chuàng)建設(shè)備文件,可以使用 mknod 程序手動(dòng)創(chuàng)建設(shè)備文件。  前提是你必須知道設(shè)備的主要和次要號(hào)碼。

CentOS 和 RHEL 6、7,以及 Fedora 的所有版本——可以追溯到至少 Fedora 15,使用較新的創(chuàng)建設(shè)備文件的方法。  所有設(shè)備文件都是在引導(dǎo)時(shí)創(chuàng)建的。 這是因?yàn)?udev 設(shè)備管理器在設(shè)備添加和刪除發(fā)生時(shí)會(huì)進(jìn)行檢測(cè)。這可實(shí)現(xiàn)在主機(jī)啟動(dòng)和運(yùn)行時(shí)的真正的動(dòng)態(tài)即插即用功能。  它還在引導(dǎo)時(shí)執(zhí)行相同的任務(wù),通過(guò)在引導(dǎo)過(guò)程的很早的時(shí)期檢測(cè)系統(tǒng)上安裝的所有設(shè)備。 Linux.com 上有一篇很棒的對(duì) udev 的描述。

回到 /dev 中的文件列表,注意文件的日期和時(shí)間。 所有文件都是在上次啟動(dòng)時(shí)創(chuàng)建的。 您可以使用 uptime 或者 last  命令來(lái)驗(yàn)證這一點(diǎn)。在上面我的設(shè)備列表中,所有這些文件都是在 11 月 7 日上午 7:06 創(chuàng)建的,這是我***一次啟動(dòng)系統(tǒng)。

當(dāng)然, mknod 命令仍然可用, 但新的 MAKEDEV (是的,所有字母大寫(xiě),在我看來(lái)是違背 Linux 使用小寫(xiě)命令名的原則的)  命令提供了一個(gè)創(chuàng)建設(shè)備文件的更容易的界面。 在當(dāng)前版本的 Fedora 或 CentOS 7 中,默認(rèn)情況下不安裝 MAKEDEV 命令;它安裝在 CentOS  6。您可以使用 YUM 或 DNF 來(lái)安裝 MAKEDEV 包。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“怎么在Linux中管理設(shè)備”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI