長文干貨:文件和目錄屬性相關(guān) Linux 命令詳解,收藏~


轉(zhuǎn)自:佚名
鏈接:https://www.jb51.net/LINUXjishu/151820.html
Linux 目錄結(jié)構(gòu)
對于每一個Linux學(xué)習(xí)者來說,了解Linux文件系統(tǒng)的目錄結(jié)構(gòu),是學(xué)好Linux的至關(guān)重要的一步.,深入了解linux文件目錄結(jié)構(gòu)的標(biāo)準(zhǔn)和每個目錄的詳細(xì)功能,對于我們用好linux系統(tǒng)只管重要,下面我們就開始了解一下linux目錄結(jié)構(gòu)的相關(guān)知識。
當(dāng)在使用Linux的時候,如果您通過ls –l /?就會發(fā)現(xiàn),在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發(fā)現(xiàn)也有很多的目錄或文件。文件系統(tǒng)在Linux下看上去就象樹形結(jié)構(gòu),所以我們可以把文件系統(tǒng)的結(jié)構(gòu)形象的稱為?樹形結(jié)構(gòu)。
文件系統(tǒng)的是用來組織和排列文件存取的,所以她是可見的,在Linux中,我們可以通過ls等工具來查看其結(jié)構(gòu),在Linux系統(tǒng)中,我們見到的都是樹形結(jié)構(gòu);比如操作系統(tǒng)安裝在一個文件系統(tǒng)中,他表現(xiàn)為由/?起始的樹形結(jié)構(gòu)。linux文件系統(tǒng)的最頂端是/,我們稱/為Linux的root,也就是 Linux操作系統(tǒng)的文件系統(tǒng)。Linux的文件系統(tǒng)的入口就是/,所有的目錄、文件、設(shè)備都在/之下,/就是Linux文件系統(tǒng)的組織者,也是最上級的領(lǐng)導(dǎo)者。
由于linux是開放源代碼,各大公司和團體根據(jù)linux的核心代碼做各自的操作,編程。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統(tǒng)的PC。因為你根本不知道一些基本的配置,文件在哪里。。。這就造成了混亂。這就是FHS(Filesystem?Hierarchy?Standard?)機構(gòu)誕生的原因。該機構(gòu)是linux愛好者自發(fā)的組成的一個團體,主要是是對linux做一些基本的要求,不至于是操作者換一臺主機就成了linux的‘文盲’。
根據(jù)FHS(http://www.pathname.com/fhs/)的官方文件指出,?他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置于那個目錄下,?所以他們希望獨立的軟件開發(fā)商、操作系統(tǒng)制作者、以及想要維護系統(tǒng)的用戶,都能夠遵循FHS的標(biāo)準(zhǔn)。?也就是說,F(xiàn)HS的重點在于規(guī)范每個特定的目錄下應(yīng)該要放置什么樣子的數(shù)據(jù)而已。?這樣做好處非常多,因為Linux操作系統(tǒng)就能夠在既有的面貌下(目錄架構(gòu)不變)發(fā)展出開發(fā)者想要的獨特風(fēng)格。
事實上,F(xiàn)HS是根據(jù)過去的經(jīng)驗一直再持續(xù)的改版的,F(xiàn)HS依據(jù)文件系統(tǒng)使用的頻繁與否與是否允許使用者隨意更動,?而將目錄定義成為四種交互作用的形態(tài),用表格來說有點像底下這樣:
可分享的(shareable) | 不可分享的(unshareable) | |
不變的(static) | /usr?(軟件放置處) | /etc?(配置文件) |
/opt?(第三方協(xié)力軟件) | /boot?(開機與核心檔) | |
可變動的(variable) | /var/mail?(使用者郵件信箱) | /var/run?(程序相關(guān)) |
/var/spool/news?(新聞組) | /var/lock?(程序相關(guān)) |
四種類型:
1.?可分享的:
可以分享給其他系統(tǒng)掛載使用的目錄,所以包括執(zhí)行文件與用戶的郵件等數(shù)據(jù),?是能夠分享給網(wǎng)絡(luò)上其他主機掛載用的目錄;
2.?不可分享的:
自己機器上面運作的裝置文件或者是與程序有關(guān)的socket文件等,?由于僅與自身機器有關(guān),所以當(dāng)然就不適合分享給其他主機了。
3.?不變的:
有些數(shù)據(jù)是不會經(jīng)常變動的,跟隨著distribution而不變動。?例如函式庫、文件說明文件、系統(tǒng)管理員所管理的主機服務(wù)配置文件等等;
4.?可變動的:
經(jīng)常改變的數(shù)據(jù),例如登錄文件、一般用戶可自行收受的新聞組等。
事實上,F(xiàn)HS針對目錄樹架構(gòu)僅定義出三層目錄底下應(yīng)該放置什么數(shù)據(jù)而已,分別是底下這三個目錄的定義:
/?(root, 根目錄):與開機系統(tǒng)有關(guān);
/usr (unix software resource):與軟件安裝/執(zhí)行有關(guān);
/var (variable):與系統(tǒng)運作過程有關(guān)。
一. 根目錄?(/)?的意義與內(nèi)容:
根目錄是整個系統(tǒng)最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的,?同時根目錄也與開機/還原/系統(tǒng)修復(fù)等動作有關(guān)。?由于系統(tǒng)開機時需要特定的開機軟件、核心文件、開機所需程序、?函式庫等等文件數(shù)據(jù),若系統(tǒng)出現(xiàn)錯誤時,根目錄也必須要包含有能夠修復(fù)文件系統(tǒng)的程序才行。?因為根目錄是這么的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區(qū),?因為越大的分區(qū)內(nèi)你會放入越多的數(shù)據(jù),如此一來根目錄所在分區(qū)就可能會有較多發(fā)生錯誤的機會。
因此FHS標(biāo)準(zhǔn)建議:根目錄(/)所在分區(qū)應(yīng)該越小越好,?且應(yīng)用程序所安裝的軟件最好不要與根目錄放在同一個分區(qū)內(nèi),保持根目錄越小越好。?如此不但效能較佳,根目錄所在的文件系統(tǒng)也較不容易發(fā)生問題。說白了,就是根目錄和Windows的C盤一個樣。
根據(jù)以上原因,F(xiàn)HS認(rèn)為根目錄(/)下應(yīng)該包含如下子目錄:
目錄 | 應(yīng)放置檔案內(nèi)容 |
/bin | 系統(tǒng)有很多放置執(zhí)行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod(修改權(quán)限), chown, date, mv, mkdir, cp, bash等等常用的指令。 |
/boot | 主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設(shè)定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。 |
/dev | 在Linux系統(tǒng)上,任何裝置與周邊設(shè)備都是以檔案的型態(tài)存在于這個目錄當(dāng)中。?只要通過存取這個目錄下的某個檔案,就等于存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 |
/etc | 系統(tǒng)主要的設(shè)定檔幾乎都放置在這個目錄內(nèi),例如人員的帳號密碼檔、各種服務(wù)的啟始檔等等。?一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是只有root有權(quán)力修改。FHS建議不要放置可執(zhí)行檔(binary)在這個目錄中。?比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。?另外,其下重要的目錄有:/etc/init.d/?:所有服務(wù)的預(yù)設(shè)啟動script都是放在這里的,例如要啟動或者關(guān)閉iptables的話:?/etc/init.d/iptables start、/etc/init.d/ iptables stop /etc/xinetd.d/?:這就是所謂的super daemon管理的各項服務(wù)的設(shè)定檔目錄。 /etc/X11/?:與X Window有關(guān)的各種設(shè)定檔都在這里,尤其是xorg.conf或XF86Config這兩個X Server的設(shè)定檔。 |
/home | 這是系統(tǒng)預(yù)設(shè)的使用者家目錄(home directory)。?在你新增一個一般使用者帳號時,預(yù)設(shè)的使用者家目錄都會規(guī)范到這里來。比較重要的是,家目錄有兩種代號:?~?:代表當(dāng)前使用者的家目錄,而?~guest:則代表用戶名為guest的家目錄。 |
/lib | 系統(tǒng)的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已?。?什么是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執(zhí)行之意。?尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關(guān)的模組(驅(qū)動程式)。 |
/media | media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。?包括軟碟、光碟、DVD等等裝置都暫時掛載于此。?常見的檔名有:/media/floppy, /media/cdrom等等。 |
/mnt | 如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。?只是有了/media之后,這個目錄就用來暫時掛載用了。 |
/opt | 這個是給第三方協(xié)力軟體放置的目錄?。?什么是第三方協(xié)力軟體???舉例來說,KDE這個桌面管理系統(tǒng)是一個獨立的計畫,不過他可以安裝到Linux系統(tǒng)中,因此KDE的軟體就建議放置到此目錄下了。?另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那么也能夠?qū)⒛愕能涹w安裝到這里來。?不過,以前的Linux系統(tǒng)中,我們還是習(xí)慣放置在/usr/local目錄下。 |
/root | 系統(tǒng)管理員(root)的家目錄。?之所以放在這里,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區(qū)中。 |
/sbin | Linux有非常多指令是用來設(shè)定系統(tǒng)環(huán)境的,這些指令只有root才能夠利用來設(shè)定系統(tǒng),其他使用者最多只能用來查詢而已。放在/sbin底下的為開機過程中所需要的,里面包括了開機、修復(fù)、還原系統(tǒng)所需要的指令。至于某些伺服器軟體程式,一般則放置到/usr/sbin/當(dāng)中。至于本機自行安裝的軟體所產(chǎn)生的系統(tǒng)執(zhí)行檔(system binary),則放置到/usr/local/sbin/當(dāng)中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 |
/srv | srv可以視為service的縮寫,是一些網(wǎng)路服務(wù)啟動之后,這些服務(wù)所需要取用的資料目錄。?常見的服務(wù)例如WWW, FTP等等。?舉例來說,WWW伺服器需要的網(wǎng)頁資料就可以放置在/srv/www/里面。呵呵,看來平時我們編寫的代碼應(yīng)該放到這里了。 |
/tmp | 這是讓一般使用者或者是正在執(zhí)行的程序暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當(dāng)然,重要資料不可放置在此目錄啊。?因為FHS甚至建議在開機時,應(yīng)該要將/tmp下的資料都刪除。 |
事實上FHS針對根目錄所定義的標(biāo)準(zhǔn)就僅限于上表,不過仍舊有些目錄也需要我們了解一下,具體如下:
目錄 | 應(yīng)放置文件內(nèi)容 |
/lost+found | 這個目錄是使用標(biāo)準(zhǔn)的ext2/ext3檔案系統(tǒng)格式才會產(chǎn)生的一個目錄,目的在于當(dāng)檔案系統(tǒng)發(fā)生錯誤時,將一些遺失的片段放置到這個目錄下。?這個目錄通常會在分割槽的最頂層存在,例如你加裝一個硬盤于/disk中,那在這個系統(tǒng)下就會自動產(chǎn)生一個這樣的目錄/disk/lost+found |
/proc | 這個目錄本身是一個虛擬文件系統(tǒng)(virtual?filesystem)喔。?他放置的資料都是在內(nèi)存當(dāng)中,例如系統(tǒng)核心、行程資訊(process)(是進程嗎?)、周邊裝置的狀態(tài)及網(wǎng)絡(luò)狀態(tài)等等。因為這個目錄下的資料都是在記憶體(內(nèi)存)當(dāng)中,所以本身不占任何硬盤空間。比較重要的檔案(目錄)例如:?/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虛擬內(nèi)存嗎[guest]? |
/sys | 這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統(tǒng),主要也是記錄與核心相關(guān)的資訊。?包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。?這個目錄同樣不占硬盤容量。 |
除了這些目錄的內(nèi)容之外,另外要注意的是,因為根目錄與開機有關(guān),開機過程中僅有根目錄會被掛載,?其他分區(qū)則是在開機完成之后才會持續(xù)的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關(guān)的目錄,?就不能夠與根目錄放到不同的分區(qū)去。那哪些目錄不可與根目錄分開呢?有底下這些:
/etc:配置文件
/bin:重要執(zhí)行檔
/dev:所需要的裝置文件
/lib:執(zhí)行檔所需的函式庫與核心所需的模塊
/sbin:重要的系統(tǒng)執(zhí)行文件
這五個目錄千萬不可與根目錄分開在不同的分區(qū)。請背下來啊。?
二. /usr 的意義與內(nèi)容:
依據(jù)FHS的基本定義,/usr里面放置的數(shù)據(jù)屬于可分享的與不可變動的(shareable, static),?如果你知道如何透過網(wǎng)絡(luò)進行分區(qū)的掛載(例如在服務(wù)器篇會談到的NFS服務(wù)器),那么/usr確實可以分享給局域網(wǎng)絡(luò)內(nèi)的其他主機來使用喔。
/usr不是user的縮寫,其實usr是Unix Software Resource的縮寫,?也就是Unix操作系統(tǒng)軟件資源所放置的目錄,而不是用戶的數(shù)據(jù)啦。這點要注意。FHS建議所有軟件開發(fā)者,應(yīng)該將他們的數(shù)據(jù)合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。
因為是所有系統(tǒng)默認(rèn)的軟件(distribution發(fā)布者提供的軟件)都會放置到/usr底下,因此這個目錄有點類似Windows 系統(tǒng)的C:\Windows\?+ C:\Program files\這兩個目錄的綜合體,系統(tǒng)剛安裝完畢時,這個目錄會占用最多的硬盤容量。?一般來說,/usr的次目錄建議有底下這些:
目錄 | 應(yīng)放置文件內(nèi)容 |
/usr/X11R6/? | 為X Window System重要數(shù)據(jù)所放置的目錄,之所以取名為X11R6是因為最后的X版本為第11版,且該版的第6次釋出之意。? |
/usr/bin/? | 絕大部分的用戶可使用指令都放在這里。請注意到他與/bin的不同之處。(是否與開機過程有關(guān))? |
/usr/include/? | c/c++等程序語言的檔頭(header)與包含檔(include)放置處,當(dāng)我們以tarball方式?(*.tar.gz?的方式安裝軟件)安裝某些數(shù)據(jù)時,會使用到里頭的許多包含檔。? |
/usr/lib/? | 包含各應(yīng)用軟件的函式庫、目標(biāo)文件(object file),以及不被一般使用者慣用的執(zhí)行檔或腳本(script)。?某些軟件會提供一些特殊的指令來進行服務(wù)器的設(shè)定,這些指令也不會經(jīng)常被系統(tǒng)管理員操作,?那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統(tǒng),?那可能會有/usr/lib64/目錄產(chǎn)生? |
/usr/local/? | 統(tǒng)管理員在本機自行安裝自己下載的軟件(非distribution默認(rèn)提供者),建議安裝到此目錄,?這樣會比較便于管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版,?此時你可以將新版軟件安裝于/usr/local/目錄下,可與原先的舊版軟件有分別啦。?你可以自行到/usr/local去看看,該目錄下也是具有bin,?etc,?include,?lib...的次目錄? |
/usr/sbin/? | 非系統(tǒng)正常運作所需要的系統(tǒng)指令。最常見的就是某些網(wǎng)絡(luò)服務(wù)器軟件的服務(wù)指令(daemon)? |
/usr/share/? | 放置共享文件的地方,在這個目錄下放置的數(shù)據(jù)幾乎是不分硬件架構(gòu)均可讀取的數(shù)據(jù),?因為幾乎都是文本文件嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯(lián)機幫助文件 /usr/share/doc:軟件雜項的文件說明 /usr/share/zoneinfo:與時區(qū)有關(guān)的時區(qū)文件 |
/usr/src/? | 一般原始碼建議放置到這里,src有source的意思。至于核心原始碼則建議放置到/usr/src/linux/目錄下。? |
三. ?/var 的意義與內(nèi)容:
如果/usr是安裝時會占用較大硬盤容量的目錄,那么/var就是在系統(tǒng)運作后才會漸漸占用硬盤容量的目錄。?因為/var目錄主要針對常態(tài)性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運作所產(chǎn)生的文件,?包括程序文件(lock file, run file),或者例如MySQL數(shù)據(jù)庫的文件等等。常見的次目錄有:
目錄 | 應(yīng)放置文件內(nèi)容 |
/var/cache/ | 應(yīng)用程序本身運作過程中會產(chǎn)生的一些暫存檔 |
/var/lib/ | 程序本身執(zhí)行的過程中,需要使用到的數(shù)據(jù)文件放置的目錄。在此目錄下各自的軟件應(yīng)該要有各自的目錄。?舉例來說,MySQL的數(shù)據(jù)庫放置到/var/lib/mysql/而rpm的數(shù)據(jù)庫則放到/var/lib/rpm去 |
/var/lock/ | 某些裝置或者是文件資源一次只能被一個應(yīng)用程序所使用,如果同時有兩個程序使用該裝置時,?就可能產(chǎn)生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟件所使用。?舉例來說,刻錄機正在刻錄一塊光盤,你想一下,會不會有兩個人同時在使用一個刻錄機燒片??如果兩個人同時刻錄,那片子寫入的是誰的數(shù)據(jù)?所以當(dāng)?shù)谝粋€人在刻錄時該刻錄機就會被上鎖,?第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續(xù)使用 |
/var/log/ | 非常重要。這是登錄文件放置的目錄。里面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。 |
/var/mail/ | 放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為鏈接文件。 |
/var/run/ | 某些程序或者是服務(wù)啟動后,會將他們的PID放置在這個目錄下 |
/var/spool/ | 這個目錄通常放置一些隊列數(shù)據(jù),所謂的“隊列”就是排隊等待其他程序使用的數(shù)據(jù)。?這些數(shù)據(jù)被使用后通常都會被刪除。舉例來說,系統(tǒng)收到新信會放置到/var/spool/mail/中,?但使用者收下該信件后該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中,?等到被送出后就被刪除。如果是工作排程數(shù)據(jù)(crontab),就會被放置到/var/spool/cron/目錄中。 |
由于FHS僅是定義出最上層(/)及次層(/usr,?/var)的目錄內(nèi)容應(yīng)該要放置的文件或目錄數(shù)據(jù),?因此,在其他次目錄層級內(nèi),就可以隨開發(fā)者自行來配置了。
四.?目錄樹(directory?tree)?:
在Linux底下,所有的文件與目錄都是由根目錄開始的。那是所有目錄與文件的源頭, 然后再一個一個的分支下來,因此,我們也稱這種目錄配置方式為:目錄樹(directory tree), 這個目錄樹的主要特性有:
目錄樹的啟始點為根目錄?(/, root);
每一個目錄不止能使用本地端的 partition 的文件系統(tǒng),也可以使用網(wǎng)絡(luò)上的 filesystem 。舉例來說,?可以利用 Network File System (NFS)?服務(wù)器掛載某特定目錄等。
每一個文件在此目錄樹中的文件名(包含完整路徑)都是獨一無二的。
如果我們將整個目錄樹以圖的方法來顯示,并且將較為重要的文件數(shù)據(jù)列出來的話,那么目錄樹架構(gòu)就如下圖所示:

五.?絕對路徑與相對路徑
除了需要特別注意的FHS目錄配置外,在文件名部分我們也要特別注意。因為根據(jù)檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。?這兩種文件名/路徑的寫法依據(jù)是這樣的:
絕對路徑:
由根目錄(/)開始寫起的文件名或目錄名稱,?例如?/home/dmtsai/.bashrc;
相對路徑:
相對于目前路徑的文件名寫法。?例如 ./home/dmtsai 或 http://www.cnblogs.com/home/dmtsai/?等等。反正開頭不是?/?就屬于相對路徑的寫法
而你必須要了解,相對路徑是以你當(dāng)前所在路徑的相對位置來表示的。舉例來說,你目前在?/home 這個目錄下,?如果想要進入?/var/log 這個目錄時,可以怎么寫呢?
cd?/var/log???(absolute)
cd?../var/log?(relative)
因為你在?/home 底下,所以要回到上一層?(../)?之后,才能繼續(xù)往?/var 來移動的,特別注意這兩個特殊的目錄:
. ?:代表當(dāng)前的目錄,也可以使用 ./?來表示;
.. :代表上一層目錄,也可以 ../?來代表。
這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達(dá)方式,?就是代表上一層與目前所在目錄的工作狀態(tài)。
實例1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內(nèi)?
命令:
cd?/var/spool/mail
cd?../cron
說明:
由于/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中。如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的,尤其對于某些軟件開發(fā)商來說。?一般來說,軟件開發(fā)商會將數(shù)據(jù)放置到/usr/local/里面的各相對目錄。?但如果用戶想要安裝到不同目錄呢?就得要使用相對路徑。
實例2:網(wǎng)絡(luò)文件常常提到類似./run.sh之類的數(shù)據(jù),這個指令的意義為何?
說明:
由于指令的執(zhí)行需要變量的支持,若你的執(zhí)行文件放置在本目錄,并且本目錄并非正規(guī)的執(zhí)行文件目錄(/bin, /usr/bin等為正規(guī)),此時要執(zhí)行指令就得要嚴(yán)格指定該執(zhí)行檔。./代表本目錄的意思,所以./run.sh代表執(zhí)行本目錄下,?名為run.sh的文件。
Linux文件類型與擴展名
Linux文件類型和Linux文件的文件名所代表的意義是兩個不同的概念。我們通過一般應(yīng)用程序而創(chuàng)建的比如file.txt、file.tar.gz ,這些文件雖然要用不同的程序來打開,但放在Linux文件類型中衡量的話,大多是常規(guī)文件(也被稱為普通文件)。
一.?文件類型
Linux文件類型常見的有:普通文件、目錄文件、字符設(shè)備文件和塊設(shè)備文件、符號鏈接文件等,現(xiàn)在我們進行一個簡要的說明。
1.?普通文件?
我們用 ls -lh 來查看某個文件的屬性,可以看到有類似-rwxrwxrwx,值得注意的是第一個符號是?-?,這樣的文件在Linux中就是普通文件。這些文件一般是用一些相關(guān)的應(yīng)用程序創(chuàng)建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類文件的刪除方式是用rm 命令。?另外,依照文件的內(nèi)容,又大略可以分為:
1>.?純文本檔(ASCII):
這是Linux系統(tǒng)中最多的一種文件類型,稱為純文本檔是因為內(nèi)容為我們?nèi)祟惪梢灾苯幼x到的數(shù)據(jù),例如數(shù)字、字母等等。?幾乎只要我們可以用來做為設(shè)定的文件都屬于這一種文件類型。?舉例來說,你可以用命令:?cat?~/.bashrc?來看到該文件的內(nèi)容。?(cat 是將一個文件內(nèi)容讀出來的指令).
2>.?二進制文件(binary):
Linux系統(tǒng)其實僅認(rèn)識且可以執(zhí)行二進制文件(binary?file)。Linux當(dāng)中的可執(zhí)行文件(scripts,?文字型批處理文件不算)就是這種格式的文件。?剛剛使用的命令cat就是一個binary file。
3>.?數(shù)據(jù)格式文件(data):?
有些程序在運作的過程當(dāng)中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數(shù)據(jù)文件?(data file)。舉例來說,我們的Linux在使用者登錄時,都會將登錄的數(shù)據(jù)記錄在?/var/log/wtmp那個文件內(nèi),該文件是一個data file,他能夠透過last這個指令讀出來!?但是使用cat時,會讀出亂碼~因為他是屬于一種特殊格式的文件?
2.?目錄文件
當(dāng)我們在某個目錄下執(zhí)行,看到有類似 drwxr-xr-x ,這樣的文件就是目錄,目錄在Linux是一個比較特殊的文件。注意它的第一個字符是d。創(chuàng)建目錄的命令可以用 mkdir 命令,或cp命令,cp可以把一個目錄復(fù)制為另一個目錄。刪除用rm 或rmdir命令。?
3.?字符設(shè)備或塊設(shè)備文件?
如時您進入/dev目錄,列一下文件,會看到類似如下的:
[root@localhost?~]#?ls?-al?/dev/tty
crw-rw-rw-?1?root?tty?5,?0?11-03?15:11?/dev/tty
[root@localhost?~]#?ls?-la?/dev/sda1
brw-r-----?1?root?disk?8,?1?11-03?07:11?/dev/sda1
我們看到/dev/tty的屬性是 crw-rw-rw-?,注意前面第一個字符是 c ,這表示字符設(shè)備文件。比如貓等串口設(shè)備。我們看到?/dev/sda1 的屬性是 brw-r-----?,注意前面的第一個字符是b,這表示塊設(shè)備,比如硬盤,光驅(qū)等設(shè)備。
這個種類的文件,是用mknode來創(chuàng)建,用rm來刪除。目前在最新的Linux發(fā)行版本中,我們一般不用自己來創(chuàng)建設(shè)備文件。因為這些文件是和內(nèi)核相關(guān)聯(lián)的。
與系統(tǒng)周邊及儲存等相關(guān)的一些文件,?通常都集中在/dev這個目錄之下!通常又分為兩種:
區(qū)塊(block)設(shè)備檔?:
就是一些儲存數(shù)據(jù),?以提供系統(tǒng)隨機存取的接口設(shè)備,舉例來說,硬盤與軟盤等就是啦!?你可以隨機的在硬盤的不同區(qū)塊讀寫,這種裝置就是成組設(shè)備!你可以自行查一下/dev/sda看看,?會發(fā)現(xiàn)第一個屬性為[ b ]!
字符(character)設(shè)備文件:
亦即是一些串行端口的接口設(shè)備,?例如鍵盤、鼠標(biāo)等等!這些設(shè)備的特色就是一次性讀取的,不能夠截斷輸出。?舉例來說,你不可能讓鼠標(biāo)跳到另一個畫面,而是滑動到另一個地方!第一個屬性為?[ c ]。
4.?數(shù)據(jù)接口文件(sockets):?
數(shù)據(jù)接口文件(或者:套接口文件),這種類型的文件通常被用在網(wǎng)絡(luò)上的數(shù)據(jù)承接了。我們可以啟動一個程序來監(jiān)聽客戶端的要求,?而客戶端就可以透過這個socket來進行數(shù)據(jù)的溝通了。第一個屬性為?[ s ],?最常在/var/run這個目錄中看到這種文件類型了。
例如:當(dāng)我們啟動MySQL服務(wù)器時,會產(chǎn)生一個mysql.sock的文件。
[root@localhost?~]#?ls?-lh?/var/lib/mysql/mysql.sock?
srwxrwxrwx?1?mysql?mysql?0?04-19?11:12?/var/lib/mysql/mysql.sock
注意這個文件的屬性的第一個字符是 s。
5.?符號鏈接文件:?
當(dāng)我們查看文件屬性時,會看到有類似 lrwxrwxrwx,注意第一個字符是l,這類文件是鏈接文件。是通過ln -s 源文件名?新文件名?。上面是一個例子,表示setup.log是install.log的軟鏈接文件。怎么理解呢?這和Windows操作系統(tǒng)中的快捷方式有點相似。
符號鏈接文件的創(chuàng)建方法舉例:
[root@localhost?test]#?ls?-lh?log2012.log
-rw-r--r--?1?root?root?296K?11-13?06:03?log2012.log
[root@localhost?test]#?ln?-s?log2012.log??linklog.log
[root@localhost?test]#?ls?-lh?*.log
lrwxrwxrwx?1?root?root???11?11-22?06:58?linklog.log?->?log2012.log
-rw-r--r--?1?root?root?296K?11-13?06:03?log2012.log
6.?數(shù)據(jù)輸送文件(FIFO,pipe):
FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題。FIFO是first-in-first-out的縮寫。第一個屬性為[p]?。
二.?Linux文件擴展名
1.?擴展名類型
基本上,Linux的文件是沒有所謂的擴展名的,一個Linux文件能不能被執(zhí)行,與他的第一欄的十個屬性有關(guān),?與檔名根本一點關(guān)系也沒有。這個觀念跟Windows的情況不相同喔!在Windows底下,?能被執(zhí)行的文件擴展名通常是 .com .exe .bat等等,而在Linux底下,只要你的權(quán)限當(dāng)中具有x的話,例如[?-rwx-r-xr-x ]?即代表這個文件可以被執(zhí)行。
不過,可以被執(zhí)行跟可以執(zhí)行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文本檔,如果經(jīng)由修改權(quán)限成為?-rwxrwxrwx 后,這個文件能夠真的執(zhí)行成功嗎??當(dāng)然不行~因為他的內(nèi)容根本就沒有可以執(zhí)行的數(shù)據(jù)。所以說,這個x代表這個文件具有可執(zhí)行的能力,?但是能不能執(zhí)行成功,當(dāng)然就得要看該文件的內(nèi)容.
雖然如此,不過我們?nèi)匀幌M梢越逵蓴U展名來了解該文件是什么東西,所以,通常我們還是會以適當(dāng)?shù)臄U展名來表示該文件是什么種類的。底下有數(shù)種常用的擴展名:
*.sh :?腳本或批處理文件?(scripts),因為批處理文件為使用shell寫成的,所以擴展名就編成 .sh
*Z, *.tar, *.tar.gz, *.zip, *.tgz:?經(jīng)過打包的壓縮文件。這是因為壓縮軟件分別為 gunzip, tar 等等的,由于不同的壓縮軟件,而取其相關(guān)的擴展名!
*.html, *.php:網(wǎng)頁相關(guān)文件,分別代表 HTML 語法與 PHP 語法的網(wǎng)頁文件。?.html?的文件可使用網(wǎng)頁瀏覽器來直接開啟,至于?.php?的文件,?則可以透過?client?端的瀏覽器來?server?端瀏覽,以得到運算后的網(wǎng)頁結(jié)果。
基本上,Linux系統(tǒng)上的文件名真的只是讓你了解該文件可能的用途而已,真正的執(zhí)行與否仍然需要權(quán)限的規(guī)范才行。例如雖然有一個文件為可執(zhí)行文件,如常見的/bin/ls這個顯示文件屬性的指令,不過,如果這個文件的權(quán)限被修改成無法執(zhí)行時,那么ls就變成不能執(zhí)行。
上述的這種問題最常發(fā)生在文件傳送的過程中。例如你在網(wǎng)絡(luò)上下載一個可執(zhí)行文件,但是偏偏在你的 Linux系統(tǒng)中就是無法執(zhí)行!呵呵!那么就是可能文件的屬性被改變了。不要懷疑,從網(wǎng)絡(luò)上傳送到你的?Linux系統(tǒng)中,文件的屬性與權(quán)限確實是會被改變的。
2.?Linux文件名長度限制:
在Linux底下,使用預(yù)設(shè)的Ext2/Ext3文件系統(tǒng)時,針對文件名長度限制為:
單一文件或目錄的最大容許文件名為?255?個字符
包含完整路徑名稱及目錄?(/)?之完整檔名為?4096?個字符
是相當(dāng)長的檔名!我們希望Linux的文件名可以一看就知道該文件在干嘛的,?所以檔名通常是很長很長。
3.?Linux文件名的字符的限制:
由于Linux在文字接口下的一些指令操作關(guān)系,一般來說,你在設(shè)定Linux底下的文件名時,?最好可以避免一些特殊字符比較好!例如底下這些:
*???>?;?&?!?[?]?|?\?'?"?`?(?)?{?}
因為這些符號在文字接口下,是有特殊意義的。另外,文件名的開頭為小數(shù)點“.”時,?代表這個文件為隱藏文件!同時,由于指令下達(dá)當(dāng)中,常常會使用到?-option 之類的選項,?所以你最好也避免將文件檔名的開頭以?-?或?+?來命名。
linux文件屬性詳解
[root@localhost?test]#?ls?-lih
總計?316K
2095120?lrwxrwxrwx?1?root?root???11?11-22?06:58?linklog.log?->?log2012.log
2095112?-rw-r--r--?1?root?root?296K?11-13?06:03?log2012.log
2095110?-rw-r--r--?1?root?root???61?11-13?06:03?log2013.log
2095107?-rw-r--r--?1?root?root????0?11-13?06:03?log2014.log
2095117?-rw-r--r--?1?root?root????0?11-13?06:06?log2015.log
2095118?-rw-r--r--?1?root?root????0?11-16?14:41?log2016.log
2095119?-rw-r--r--?1?root?root????0?11-16?14:43?log2017.log
2095113?drwxr-xr-x?6?root?root?4.0K?10-27?01:58?scf
2095109?drwxrwxr-x?2?root?root?4.0K?11-13?06:08?test3
2095131?drwxrwxr-x?2?root?root?4.0K?11-13?05:50?test4
2095112?-rw-r--r--?1?root?root?296K?11-13?06:03?log2012.log
[root@localhost?test]#??ls?-li?log2012.log?
2095112?-rw-r--r--?1?root?root?302108?11-13?06:03?log2012.log
本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲??! 推薦閱讀:
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲?。?!
