扣丁學(xué)堂淺談Linux文件系統(tǒng)詳解
2018-07-02 13:54:49
1354瀏覽
在目前大多數(shù)程序大家都知道需要理解文件系統(tǒng)的結(jié)構(gòu),但是當(dāng)我們?cè)?span>Linux上安裝軟件,有很多時(shí)候即使不知道實(shí)際的可執(zhí)行文件在哪里,它們也會(huì)神奇地工作,那么問(wèn)題在于文檔,首先需掌握目錄的組織方式以及/etc(不是用于“其它”文件),/usr(不是用于“用戶(hù)”文件)和/bin(不是“垃圾桶”)的意思,下面我們來(lái)看一下Linux文件系統(tǒng)詳解吧。
從終端窗口探索Linux文件系統(tǒng)是有道理的,這并不是因?yàn)樽髡呤且粋€(gè)脾氣暴躁的老人,并且對(duì)新孩子和他們漂亮的圖形工具不以為然(盡管某些事實(shí)如此),而是因?yàn)榻K端,盡管只是文本界面,才是更好地顯示Linux目錄樹(shù)結(jié)構(gòu)的工具。
事實(shí)上,幫助你了解這一切的、應(yīng)該首先安裝的第一個(gè)工具的名為:tree。如果你正在使用Ubuntu或Debian,你可以:
sudoaptinstalltree
在RedHat或Fedora:
sudodnfinstalltree
對(duì)于SUSE/openSUSE可以使用zypper:
sudozypperinstalltree
對(duì)于使用Arch(Manjaro,Antergos,等等)使用:
sudopacman-Stree
……等等。
一旦安裝好,在終端窗口運(yùn)行tree命令:
tree/
上述指令中的/指的是根目錄。系統(tǒng)中的其他目錄都是從根目錄分支而出,當(dāng)你運(yùn)行tree命令,并且告訴它從根目錄開(kāi)始,那么你就可以看到整個(gè)目錄樹(shù),系統(tǒng)中的所有目錄及其子目錄,還有它們的文件。
如果你已經(jīng)使用你的系統(tǒng)有一段時(shí)間了,這可能需要一段時(shí)間,因?yàn)榧词鼓阕约哼€沒(méi)有生成很多文件,Linux系統(tǒng)及其應(yīng)用程序總是在記錄、緩存和存儲(chǔ)各種臨時(shí)文件。文件系統(tǒng)中的條目數(shù)量會(huì)快速增長(zhǎng)。
不過(guò),不要感到不知所措。相反,試試這個(gè):
tree-L1/
上面的指令可以翻譯為“只顯示以/(根目錄)開(kāi)頭的目錄樹(shù)的第一級(jí)”。-L選項(xiàng)告訴樹(shù)你想看到多少層目錄。
大多數(shù)Linux發(fā)行版都會(huì)向你顯示與你在上圖中看到的相同或非常類(lèi)似的結(jié)構(gòu)。這意味著,即使你現(xiàn)在感到困惑,掌握這一點(diǎn),你將掌握大部分(如果不是全部的話(huà))全世界的Linux文件系統(tǒng)。
為了讓你開(kāi)始走上掌控之路,讓我們看看每個(gè)目錄的用途。當(dāng)我們查看每一個(gè)目錄的時(shí)候,你可以使用ls來(lái)查看他們的內(nèi)容。
目錄
從上到下,你所看到的目錄如下
/bin
/bin目錄是包含一些二進(jìn)制文件的目錄,即可以運(yùn)行的一些應(yīng)用程序。你會(huì)在這個(gè)目錄中找到上面提到的ls程序,以及用于新建和刪除文件和目錄、移動(dòng)它們基本工具。還有其它一些程序,等等。文件系統(tǒng)樹(shù)的其他部分有更多的bin目錄,但我們將在一會(huì)兒討論這些目錄。
/boot
/boot目錄包含啟動(dòng)系統(tǒng)所需的文件。我必須要說(shuō)嗎?好吧,我會(huì)說(shuō):不要?jiǎng)铀∪绻阍谶@里弄亂了其中一個(gè)文件,你可能無(wú)法運(yùn)行你的Linux,修復(fù)被破壞的系統(tǒng)是非常痛苦的一件事。另一方面,不要太擔(dān)心無(wú)意中破壞系統(tǒng):你必須擁有超級(jí)用戶(hù)權(quán)限才能執(zhí)行此操作。
/dev
`/dev目錄包含設(shè)備文件。其中許多是在啟動(dòng)時(shí)或甚至在運(yùn)行時(shí)生成的。例如,如果你將新的網(wǎng)絡(luò)攝像頭或USB隨身碟連接到你的機(jī)器中,則會(huì)自動(dòng)彈出一個(gè)新的設(shè)備條目。
/etc
/etc的目錄名稱(chēng)會(huì)讓人變得非常的困惑。/etc得名于最早的Unix系統(tǒng)們,它的字面意思是“etcetera”(諸如此類(lèi)),因?yàn)樗窍到y(tǒng)文件管理員不確定在哪里放置的文件的垃圾場(chǎng)。
現(xiàn)在,說(shuō)/etc是“要配置的所有內(nèi)容EverythingToConfigure”更為恰當(dāng),因?yàn)樗蟛糠郑ㄈ绻皇侨康脑?huà))的系統(tǒng)配置文件。例如,包含系統(tǒng)名稱(chēng)、用戶(hù)及其密碼、網(wǎng)絡(luò)上計(jì)算機(jī)名稱(chēng)以及硬盤(pán)上分區(qū)的安裝位置和時(shí)間的文件都在這里。再說(shuō)一遍,如果你是Linux的新手,最好是不要在這里接觸太多,直到你對(duì)系統(tǒng)的工作有更好的理解。
/home
/home是你可以找到用戶(hù)個(gè)人目錄的地方。在我的情況下,/home下有兩個(gè)目錄:/home/paul,其中包含我所有的東西;另外一個(gè)目錄是/home/guest目錄,以防有客人需要使用我的電腦。
/lib
/lib是庫(kù)文件所在的地方。庫(kù)是包含應(yīng)用程序可以使用的代碼文件。它們包含應(yīng)用程序用于在桌面上繪制窗口、控制外圍設(shè)備或?qū)⑽募l(fā)送到硬盤(pán)的代碼片段。
在文件系統(tǒng)周?chē)⒉贾嗟膌ib目錄,但是這個(gè)直接掛載在/的/lib目錄是特殊的,除此之外,它包含了所有重要的內(nèi)核模塊。內(nèi)核模塊是使你的顯卡、聲卡、WiFi、打印機(jī)等工作的驅(qū)動(dòng)程序。
/media
在/media目錄中,當(dāng)你插入外部存儲(chǔ)器試圖訪問(wèn)它時(shí),將自動(dòng)掛載它。與此列表中的大多數(shù)其他項(xiàng)目不同,/media并不追溯到1970年代,主要是因?yàn)楫?dāng)計(jì)算機(jī)正在運(yùn)行而動(dòng)態(tài)地插入和檢測(cè)存儲(chǔ)(U盤(pán)、USB硬盤(pán)、SD卡、外部SSD等),這是近些年才發(fā)生的事。
/mnt
然而,/mnt目錄是一些過(guò)去的殘余。這是你手動(dòng)掛載存儲(chǔ)設(shè)備或分區(qū)的地方?,F(xiàn)在不常用了。
/opt
/opt目錄通常是你編譯軟件(即,你從源代碼構(gòu)建,并不是從你的系統(tǒng)的軟件庫(kù)中安裝軟件)的地方。應(yīng)用程序最終會(huì)出現(xiàn)在/opt/bin目錄,庫(kù)會(huì)在/opt/lib目錄中出現(xiàn)。
稍微的題外話(huà):應(yīng)用程序和庫(kù)的另一個(gè)地方是/usr/local,在這里安裝軟件時(shí),也會(huì)有/usr/local/bin和/usr/local/lib目錄。開(kāi)發(fā)人員如何配置文件來(lái)控制編譯和安裝過(guò)程,這就決定了軟件安裝到哪個(gè)地方。
/proc
/proc,就像/dev是一個(gè)虛擬目錄。它包含有關(guān)你的計(jì)算機(jī)的信息,例如關(guān)于你的CPU和你的Linux系統(tǒng)正在運(yùn)行的內(nèi)核的信息。與/dev一樣,文件和目錄是在計(jì)算機(jī)啟動(dòng)或運(yùn)行時(shí)生成的,因?yàn)槟愕南到y(tǒng)正在運(yùn)行且會(huì)發(fā)生變化。
/root
/root是系統(tǒng)的超級(jí)用戶(hù)(也稱(chēng)為“管理員”)的主目錄。它與其他用戶(hù)的主目錄是分開(kāi)的,因?yàn)槟悴粦?yīng)該動(dòng)它。所以把自己的東西放在你自己的目錄中,伙計(jì)們。
/run
/run是另一個(gè)新出現(xiàn)的目錄。系統(tǒng)進(jìn)程出于自己不可告人的原因使用它來(lái)存儲(chǔ)臨時(shí)數(shù)據(jù)。這是另一個(gè)不要?jiǎng)铀奈募A。
/sbin
/sbin與/bin類(lèi)似,但它包含的應(yīng)用程序只有超級(jí)用戶(hù)(即首字母的s)才需要。你可以使用sudo命令使用這些應(yīng)用程序,該命令暫時(shí)允許你在許多Linux發(fā)行版上擁有超級(jí)用戶(hù)權(quán)限。/sbin目錄通常包含可以安裝、刪除和格式化各種東西的工具。你可以想象,如果你使用不當(dāng),這些指令中有一些是致命的,所以要小心處理。
/usr
/usr目錄是在UNIX早期用戶(hù)的主目錄所處的地方。然而,正如我們上面看到的,現(xiàn)在/home是用戶(hù)保存他們的東西的地方。如今,/usr包含了大量目錄,而這些目錄又包含了應(yīng)用程序、庫(kù)、文檔、壁紙、圖標(biāo)和許多其他需要應(yīng)用程序和服務(wù)共享的內(nèi)容。
你還可以在/usr目錄下找到bin,sbin,lib目錄,它們與掛載到根目錄下的那些有什么區(qū)別呢?現(xiàn)在的區(qū)別不是很大。在早期,/bin目錄(掛載在根目錄下的)只會(huì)包含一些基本的命令,例如ls、mv和rm;這是一些在安裝系統(tǒng)的時(shí)候就會(huì)預(yù)裝的一些命令,用于維護(hù)系統(tǒng)的一個(gè)基本的命令。而/usr/bin目錄則包含了用戶(hù)自己安裝和用于工作的軟件,例如文字處理器,瀏覽器和一些其他的軟件。
但是許多現(xiàn)代的Linux發(fā)行版只是把所有的東西都放到/usr/bin中,并讓/bin指向/usr/bin,以防徹底刪除它會(huì)破壞某些東西。因此,Debian、Ubuntu和Mint仍然保持/bin和/usr/bin(和/sbin和/usr/sbin)分離;其他的,比如Arch和它衍生版,只是有一個(gè)“真實(shí)”存儲(chǔ)二進(jìn)制程序的目錄,/usr/bin,其余的任何bin目錄是指向/usr/bin`的“假”目錄。
/srv
/srv目錄包含服務(wù)器的數(shù)據(jù)。如果你正在Linux機(jī)器上運(yùn)行Web服務(wù)器,你網(wǎng)站的HTML文件將放到/srv/http(或/srv/www)。如果你正在運(yùn)行FTP服務(wù)器,則你的文件將放到/srv/ftp。
/sys
/sys是另一個(gè)類(lèi)似/proc和/dev的虛擬目錄,它還包含連接到計(jì)算機(jī)的設(shè)備的信息。
在某些情況下,你還可以操縱這些設(shè)備。例如,我可以通過(guò)修改存儲(chǔ)在/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight/brightness中的值來(lái)更改筆記本電腦屏幕的亮度(在你的機(jī)器上你可能會(huì)有不同的文件)。但要做到這一點(diǎn),你必須成為超級(jí)用戶(hù)。原因是,與許多其它虛擬目錄一樣,在/sys中打亂內(nèi)容和文件可能是危險(xiǎn)的,你可能會(huì)破壞系統(tǒng)。直到你確信你知道你在做什么。否則不要?jiǎng)铀?br />
/tmp
/tmp包含臨時(shí)文件,通常由正在運(yùn)行的應(yīng)用程序放置。文件和目錄通常(并非總是)包含應(yīng)用程序現(xiàn)在不需要但以后可能需要的數(shù)據(jù)。
你還可以使用/tmp來(lái)存儲(chǔ)你自己的臨時(shí)文件——/tmp是少數(shù)掛載到根目錄下而你可以在不成為超級(jí)用戶(hù)的情況下與它進(jìn)行實(shí)際交互的目錄之一。
/var
/var最初被如此命名是因?yàn)樗膬?nèi)容被認(rèn)為是可變的variable,因?yàn)樗?jīng)常變化。今天,它有點(diǎn)用詞不當(dāng),因?yàn)檫€有許多其他目錄也包含頻繁更改的數(shù)據(jù),特別是我們上面看到的虛擬目錄。
不管怎樣,/var目錄包含了放在/var/log子目錄的日志文件之類(lèi)。日志是記錄系統(tǒng)中發(fā)生的事件的文件。如果內(nèi)核中出現(xiàn)了什么問(wèn)題,它將被記錄到/var/log下的文件中;如果有人試圖從外部侵入你的計(jì)算機(jī),你的防火墻也將記錄嘗試。它還包含用于任務(wù)的假脫機(jī)程序。這些“任務(wù)”可以是你發(fā)送給共享打印機(jī)必須等待執(zhí)行的任務(wù),因?yàn)榱硪粋€(gè)用戶(hù)正在打印一個(gè)長(zhǎng)文檔,或者是等待遞交給系統(tǒng)上的用戶(hù)的郵件。
你的系統(tǒng)可能還有一些我們上面沒(méi)有提到的目錄。例如,在屏幕截圖中,有一個(gè)/snap目錄。這是因?yàn)檫@張截圖是在Ubuntu系統(tǒng)上截取的。Ubuntu最近將snap包作為一種分發(fā)軟件的方式。/snap目錄包含所有文件和從snaps安裝的軟件。
更深入的研究
這里僅僅談了根目錄,但是許多子目錄都指向它們自己的一組文件和子目錄。圖2給出了基本文件系統(tǒng)的總體概念(圖片是在PaulGardner的CCBY-SA許可下提供的),Wikipedia對(duì)每個(gè)目錄的用途進(jìn)行了總結(jié)。
要自行探索文件系統(tǒng),請(qǐng)使用cd命令:cd將帶你到你所選擇的目錄(cd代表更改目錄)。
cd..將會(huì)帶你到上一層目錄,會(huì)使你更加接近根目錄,如果你在/usr/share/wallpapers目錄,然后你執(zhí)行cd..命令,你將會(huì)跳轉(zhuǎn)到/usr/share目錄,要查看目錄里有什么內(nèi)容,使用ls或這簡(jiǎn)單的使用l列出你所在目錄的內(nèi)容。當(dāng)然總是可以使用tree來(lái)獲得目錄中內(nèi)容的概述。在/usr/share上試試——里面有很多有趣的東西。
最后想要了解更多關(guān)于
Linux培訓(xùn)就業(yè)班或行業(yè)前景,請(qǐng)關(guān)注扣丁學(xué)堂官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線(xiàn)學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux視頻教程系統(tǒng),通過(guò)千鋒扣丁學(xué)堂金牌講師在線(xiàn)錄制的Linux視頻教程課程,讓你快速掌握Linux從入門(mén)到精通開(kāi)發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477
【關(guān)注微信公眾號(hào)獲取更多的學(xué)習(xí)資料】
查看更多關(guān)于“Linux培訓(xùn)資訊”的相關(guān)文章>>
標(biāo)簽:
Linux命令
Linux視頻教程
Linux培訓(xùn)
Linux在線(xiàn)學(xué)習(xí)
Linux在線(xiàn)視頻