文件和目錄屬性相關 Linux 命令詳解,收藏~

2021-02-14 一口Linux

轉自:佚名 

連結:https://www.jb51.net/LINUXjishu/151820.html

對於每一個Linux學習者來說,了解Linux文件系統的目錄結構,是學好Linux的至關重要的一步.,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。

當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。文件系統在Linux下看上去就象樹形結構,所以我們可以把文件系統的結構形象的稱為 樹形結構。

文件系統的是用來組織和排列文件存取的,所以她是可見的,在Linux中,我們可以通過ls等工具來查看其結構,在Linux系統中,我們見到的都是樹形結構;比如作業系統安裝在一個文件系統中,他表現為由/ 起始的樹形結構。linux文件系統的最頂端是/,我們稱/為Linux的root,也就是 Linux作業系統的文件系統。Linux的文件系統的入口就是/,所有的目錄、文件、設備都在/之下,/就是Linux文件系統的組織者,也是最上級的領導者。

由於linux是開放原始碼,各大公司和團體根據linux的核心代碼做各自的操作,編程。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統的PC。因為你根本不知道一些基本的配置,文件在哪裡。。。這就造成了混亂。這就是FHS(Filesystem Hierarchy Standard )機構誕生的原因。該機構是linux愛好者自發的組成的一個團體,主要是是對linux做一些基本的要求,不至於是操作者換一臺主機就成了linux的『文盲』。

根據FHS(http://www.pathname.com/fhs/)的官方文件指出, 他們的主要目的是希望讓使用者可以了解到已安裝軟體通常放置於那個目錄下, 所以他們希望獨立的軟體開發商、作業系統製作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據而已。 這樣做好處非常多,因為Linux作業系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。

事實上,FHS是根據過去的經驗一直再持續的改版的,FHS依據文件系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種交互作用的形態,用表格來說有點像底下這樣:


可分享的(shareable)

不可分享的(unshareable)

不變的(static)

/usr (軟體放置處)

/etc (配置文件)

/opt (第三方協力軟體)

/boot (開機與核心檔)

可變動的(variable)

/var/mail (使用者郵件信箱)

/var/run (程序相關)

/var/spool/news (新聞組)

/var/lock (程序相關)

四種類型:

1. 可分享的:

可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;

2. 不可分享的:

自己機器上面運作的裝置文件或者是與程序有關的socket文件等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。

3. 不變的:

有些數據是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;

4. 可變動的:

經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。

事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼數據而已,分別是底下這三個目錄的定義:

/ (root, 根目錄):與開機系統有關;

/usr (unix software resource):與軟體安裝/執行有關;

/var (variable):與系統運作過程有關。

一. 根目錄 (/) 的意義與內容:

根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 

由於系統開機時需要特定的開機軟體、核心文件、開機所需程序、 函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 

因為根目錄是這麼的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分區, 因為越大的分區內你會放入越多的數據,如此一來根目錄所在分區就可能會有較多發生錯誤的機會。

因此FHS標準建議:根目錄(/)所在分區應該越小越好, 且應用程式所安裝的軟體最好不要與根目錄放在同一個分區內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。

根據以上原因,FHS認為根目錄(/)下應該包含如下子目錄:

目錄

應放置檔案內容

/bin

系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod(修改權限), chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot

主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。

/dev

在Linux系統上,任何裝置與周邊設備都是以檔案的型態存在於這個目錄當中。 只要通過存取這個目錄下的某個檔案,就等於存取某個裝置。比要重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc

系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。 一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是只有root有權力修改。FHS建議不要放置可執行檔(binary)在這個目錄中。 比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目錄有:/etc/init.d/ :所有服務的預設啟動script都是放在這裡的,例如要啟動或者關閉iptables的話: /etc/init.d/iptables start、/etc/init.d/ iptables stop

/etc/xinetd.d/ :這就是所謂的super daemon管理的各項服務的設定檔目錄。

/etc/X11/ :與X Window有關的各種設定檔都在這裡,尤其是xorg.conf或XF86Config這兩個X Server的設定檔。

/home

這是系統預設的使用者家目錄(home directory)。 在你新增一個一般使用者帳號時,預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號: ~ :代表當前使用者的家目錄,而 ~guest:則代表用戶名為guest的家目錄。

/lib

系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。 什麼是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。 尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組(驅動程式)。

/media

media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。 包括軟碟、光碟、DVD等等裝置都暫時掛載於此。 常見的檔名有:/media/floppy, /media/cdrom等等。

/mnt

如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。 只是有了/media之後,這個目錄就用來暫時掛載用了。

/opt

這個是給第三方協力軟體放置的目錄 。 什麼是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那麼也能夠將你的軟體安裝到這裡來。 不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。

/root

系統管理員(root)的家目錄。 之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區中。

/sbin

Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多只能用來查詢而已。放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

/srv

srv可以視為service的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄。 常見的服務例如WWW, FTP等等。 舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/裡面。呵呵,看來平時我們編寫的代碼應該放到這裡了。

/tmp

這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。

事實上FHS針對根目錄所定義的標準就僅限於上表,不過仍舊有些目錄也需要我們了解一下,具體如下:

目錄

應放置文件內容

/lost+found

這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時,將一些遺失的片段放置到這個目錄下。 這個目錄通常會在分割槽的最頂層存在,例如你加裝一個硬碟於/disk中,那在這個系統下就會自動產生一個這樣的目錄/disk/lost+found

/proc

這個目錄本身是一個虛擬文件系統(virtual filesystem)喔。 他放置的資料都是在內存當中,例如系統核心、行程資訊(process)(是進程嗎?)、周邊裝置的狀態及網絡狀態等等。因為這個目錄下的資料都是在記憶體(內存)當中,所以本身不佔任何硬碟空間。比較重要的檔案(目錄)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虛擬內存嗎[guest]?

/sys

這個目錄其實跟/proc非常類似,也是一個虛擬的檔案系統,主要也是記錄與核心相關的資訊。 包括目前已載入的核心模組與核心偵測到的硬體裝置資訊等等。 這個目錄同樣不佔硬碟容量。

除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分區則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分區去。那哪些目錄不可與根目錄分開呢?有底下這些:

/etc:配置文件

/bin:重要執行檔

/dev:所需要的裝置文件

/lib:執行檔所需的函式庫與核心所需的模塊

/sbin:重要的系統執行文件

這五個目錄千萬不可與根目錄分開在不同的分區。請背下來啊。 

二. /usr 的意義與內容:

依據FHS的基本定義,/usr裡面放置的數據屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網絡進行分區的掛載(例如在伺服器篇會談到的NFS伺服器),那麼/usr確實可以分享給區域網路內的其他主機來使用喔。

/usr不是user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是Unix作業系統軟體資源所放置的目錄,而不是用戶的數據啦。這點要注意。FHS建議所有軟體開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟體自己獨立的目錄。

因為是所有系統默認的軟體(distribution發布者提供的軟體)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的C:\Windows\ + C:\Program files\這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬碟容量。 一般來說,/usr的次目錄建議有底下這些:

目錄

應放置文件內容

/usr/X11R6/ 

為X Window System重要數據所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。 

/usr/bin/ 

絕大部分的用戶可使用指令都放在這裡。請注意到他與/bin的不同之處。(是否與開機過程有關) 

/usr/include/ 

c/c++等程序語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟體)安裝某些數據時,會使用到裡頭的許多包含檔。 

/usr/lib/ 

包含各應用軟體的函式庫、目標文件(object file),以及不被一般使用者慣用的執行檔或腳本(script)。 某些軟體會提供一些特殊的指令來進行伺服器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生 

/usr/local/ 

統管理員在本機自行安裝自己下載的軟體(非distribution默認提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於/usr/local/目錄下,可與原先的舊版軟體有分別啦。 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄 

/usr/sbin/ 

非系統正常運作所需要的系統指令。最常見的就是某些網絡伺服器軟體的服務指令(daemon) 

/usr/share/ 

放置共享文件的地方,在這個目錄下放置的數據幾乎是不分硬體架構均可讀取的數據, 因為幾乎都是文本文件嘛。在此目錄下常見的還有這些次目錄:/usr/share/man:聯機幫助文件

/usr/share/doc:軟體雜項的文件說明

/usr/share/zoneinfo:與時區有關的時區文件

/usr/src/ 

一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。 

三.  /var 的意義與內容:

如果/usr是安裝時會佔用較大硬碟容量的目錄,那麼/var就是在系統運作後才會漸漸佔用硬碟容量的目錄。 因為/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟體運作所產生的文件, 包括程序文件(lock file, run file),或者例如MySQL資料庫的文件等等。常見的次目錄有:

目錄

應放置文件內容

/var/cache/

應用程式本身運作過程中會產生的一些暫存檔

/var/lib/

程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟體應該要有各自的目錄。 舉例來說,MySQL的資料庫放置到/var/lib/mysql/而rpm的資料庫則放到/var/lib/rpm去

/var/lock/

某些裝置或者是文件資源一次只能被一個應用程式所使用,如果同時有兩個程序使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟體所使用。 舉例來說,刻錄機正在刻錄一塊光碟,你想一下,會不會有兩個人同時在使用一個刻錄機燒片? 如果兩個人同時刻錄,那片子寫入的是誰的數據?所以當第一個人在刻錄時該刻錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用

/var/log/

非常重要。這是登錄文件放置的目錄。裡面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。

/var/mail/

放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中,通常這兩個目錄是互為連結文件。

/var/run/

某些程序或者是服務啟動後,會將他們的PID放置在這個目錄下

/var/spool/

這個目錄通常放置一些隊列數據,所謂的「隊列」就是排隊等待其他程序使用的數據。 這些數據被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是工作排程數據(crontab),就會被放置到/var/spool/cron/目錄中。

由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。

四. 目錄樹(directory tree) :

在Linux底下,所有的文件與目錄都是由根目錄開始的。那是所有目錄與文件的源頭, 然後再一個一個的分支下來,因此,我們也稱這種目錄配置方式為:目錄樹(directory tree), 這個目錄樹的主要特性有:

目錄樹的啟始點為根目錄 (/, root);

每一個目錄不止能使用本地端的 partition 的文件系統,也可以使用網絡上的 filesystem 。舉例來說, 可以利用 Network File System (NFS) 伺服器掛載某特定目錄等。

每一個文件在此目錄樹中的文件名(包含完整路徑)都是獨一無二的。

如果我們將整個目錄樹以圖的方法來顯示,並且將較為重要的文件數據列出來的話,那麼目錄樹架構就如下圖所示:

五. 絕對路徑與相對路徑

除了需要特別注意的FHS目錄配置外,在文件名部分我們也要特別注意。因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種文件名/路徑的寫法依據是這樣的:

絕對路徑:

由根目錄(/)開始寫起的文件名或目錄名稱, 例如 /home/dmtsai/.bashrc;

相對路徑:

相對於目前路徑的文件名寫法。 例如 ./home/dmtsai 或 http://www.cnblogs.com/home/dmtsai/ 等等。反正開頭不是 / 就屬於相對路徑的寫法

而你必須要了解,相對路徑是以你當前所在路徑的相對位置來表示的。舉例來說,你目前在 /home 這個目錄下, 如果想要進入 /var/log 這個目錄時,可以怎麼寫呢?

cd /var/log   (absolute)

cd ../var/log (relative)

因為你在 /home 底下,所以要回到上一層 (../) 之後,才能繼續往 /var 來移動的,特別注意這兩個特殊的目錄:

.  :代表當前的目錄,也可以使用 ./ 來表示;

.. :代表上一層目錄,也可以 ../ 來代表。

這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式, 就是代表上一層與目前所在目錄的工作狀態。

實例1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內?

命令:

cd /var/spool/mail

cd ../cron

說明:

由於/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中。如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的,尤其對於某些軟體開發商來說。 一般來說,軟體開發商會將數據放置到/usr/local/裡面的各相對目錄。 但如果用戶想要安裝到不同目錄呢?就得要使用相對路徑。

實例2:網絡文件常常提到類似./run.sh之類的數據,這個指令的意義為何?

說明:

由於指令的執行需要變量的支持,若你的執行文件放置在本目錄,並且本目錄並非正規的執行文件目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。./代表本目錄的意思,所以./run.sh代表執行本目錄下, 名為run.sh的文件。

Linux文件類型和Linux文件的文件名所代表的意義是兩個不同的概念。我們通過一般應用程式而創建的比如file.txt、file.tar.gz ,這些文件雖然要用不同的程序來打開,但放在Linux文件類型中衡量的話,大多是常規文件(也被稱為普通文件)。

一. 文件類型

Linux文件類型常見的有:普通文件、目錄文件、字符設備文件和塊設備文件、符號連結文件等,現在我們進行一個簡要的說明。

1. 普通文件 

我們用 ls -lh 來查看某個文件的屬性,可以看到有類似-rwxrwxrwx,值得注意的是第一個符號是 - ,這樣的文件在Linux中就是普通文件。這些文件一般是用一些相關的應用程式創建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類文件的刪除方式是用rm 命令。 另外,依照文件的內容,又大略可以分為:

1>. 純文本檔(ASCII):

這是Linux系統中最多的一種文件類型,稱為純文本檔是因為內容為我們人類可以直接讀到的數據,例如數字、字母等等。 幾乎只要我們可以用來做為設定的文件都屬於這一種文件類型。 舉例來說,你可以用命令:cat ~/.bashrc 來看到該文件的內容。 (cat 是將一個文件內容讀出來的指令).

2>. 二進位文件(binary):

Linux系統其實僅認識且可以執行二進位文件(binary file)。Linux當中的可執行文件(scripts, 文字型批處理文件不算)就是這種格式的文件。 剛剛使用的命令cat就是一個binary file。

3>. 數據格式文件(data): 

有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件 (data file)。舉例來說,我們的Linux在使用者登錄時,都會將登錄的數據記錄在 /var/log/wtmp那個文件內,該文件是一個data file,他能夠透過last這個指令讀出來! 但是使用cat時,會讀出亂碼~因為他是屬於一種特殊格式的文件?

2. 目錄文件

當我們在某個目錄下執行,看到有類似 drwxr-xr-x ,這樣的文件就是目錄,目錄在Linux是一個比較特殊的文件。注意它的第一個字符是d。創建目錄的命令可以用 mkdir 命令,或cp命令,cp可以把一個目錄複製為另一個目錄。刪除用rm 或rmdir命令。 

3. 字符設備或塊設備文件 

如時您進入/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 ,這表示字符設備文件。比如貓等串口設備。我們看到 /dev/sda1 的屬性是 brw-r ,注意前面的第一個字符是b,這表示塊設備,比如硬碟,光碟機等設備。

這個種類的文件,是用mknode來創建,用rm來刪除。目前在最新的Linux發行版本中,我們一般不用自己來創建設備文件。因為這些文件是和內核相關聯的。

與系統周邊及儲存等相關的一些文件, 通常都集中在/dev這個目錄之下!通常又分為兩種:

區塊(block)設備檔 :

就是一些儲存數據, 以提供系統隨機存取的接口設備,舉例來說,硬碟與軟盤等就是啦! 你可以隨機的在硬碟的不同區塊讀寫,這種裝置就是成組設備!你可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]!

字符(character)設備文件:

亦即是一些串行埠的接口設備, 例如鍵盤、滑鼠等等!這些設備的特色就是一次性讀取的,不能夠截斷輸出。 舉例來說,你不可能讓滑鼠跳到另一個畫面,而是滑動到另一個地方!第一個屬性為 [ c ]。

4. 數據接口文件(sockets):

 

數據接口文件(或者:套接口文件),這種類型的文件通常被用在網絡上的數據承接了。我們可以啟動一個程序來監聽客戶端的要求, 而客戶端就可以透過這個socket來進行數據的溝通了。第一個屬性為 [ s ], 最常在/var/run這個目錄中看到這種文件類型了。

例如:當我們啟動MySQL伺服器時,會產生一個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. 符號連結文件: 

當我們查看文件屬性時,會看到有類似 lrwxrwxrwx,注意第一個字符是l,這類文件是連結文件。是通過ln -s 源文件名 新文件名 。上面是一個例子,表示setup.log是install.log的軟連結文件。怎麼理解呢?這和Windows作業系統中的快捷方式有點相似。

符號連結文件的創建方法舉例:

[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. 數據輸送文件(FIFO,pipe):

FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題。FIFO是first-in-first-out的縮寫。第一個屬性為[p] 。

二. Linux文件擴展名

1. 擴展名類型

基本上,Linux的文件是沒有所謂的擴展名的,一個Linux文件能不能被執行,與他的第一欄的十個屬性有關, 與檔名根本一點關係也沒有。這個觀念跟Windows的情況不相同喔!在Windows底下, 能被執行的文件擴展名通常是 .com .exe .bat等等,而在Linux底下,只要你的權限當中具有x的話,例如[ -rwx-r-xr-x ] 即代表這個文件可以被執行。

不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文本檔,如果經由修改權限成為 -rwxrwxrwx 後,這個文件能夠真的執行成功嗎? 當然不行~因為他的內容根本就沒有可以執行的數據。所以說,這個x代表這個文件具有可執行的能力, 但是能不能執行成功,當然就得要看該文件的內容.

雖然如此,不過我們仍然希望可以藉由擴展名來了解該文件是什麼東西,所以,通常我們還是會以適當的擴展名來表示該文件是什麼種類的。底下有數種常用的擴展名:

*.sh : 腳本或批處理文件 (scripts),因為批處理文件為使用shell寫成的,所以擴展名就編成 .sh

*Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因為壓縮軟體分別為 gunzip, tar 等等的,由於不同的壓縮軟體,而取其相關的擴展名!

*.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件。.html 的文件可使用網頁瀏覽器來直接開啟,至於 .php 的文件, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算後的網頁結果。

基本上,Linux系統上的文件名真的只是讓你了解該文件可能的用途而已,真正的執行與否仍然需要權限的規範才行。例如雖然有一個文件為可執行文件,如常見的/bin/ls這個顯示文件屬性的指令,不過,如果這個文件的權限被修改成無法執行時,那麼ls就變成不能執行。

上述的這種問題最常發生在文件傳送的過程中。例如你在網絡上下載一個可執行文件,但是偏偏在你的 Linux系統中就是無法執行!呵呵!那麼就是可能文件的屬性被改變了。不要懷疑,從網絡上傳送到你的 Linux系統中,文件的屬性與權限確實是會被改變的。

2. Linux文件名長度限制:

在Linux底下,使用預設的Ext2/Ext3文件系統時,針對文件名長度限制為:

單一文件或目錄的最大容許文件名為 255 個字符

包含完整路徑名稱及目錄 (/) 之完整檔名為 4096 個字符

是相當長的檔名!我們希望Linux的文件名可以一看就知道該文件在幹嘛的, 所以檔名通常是很長很長。

3. Linux文件名的字符的限制:

由於Linux在文字接口下的一些指令操作關係,一般來說,你在設定Linux底下的文件名時, 最好可以避免一些特殊字符比較好!例如底下這些:

* ? > < ; & ! [ ] | \ ' " ` ( ) { }

因為這些符號在文字接口下,是有特殊意義的。另外,文件名的開頭為小數點「.」時, 代表這個文件為隱藏文件!同時,由於指令下達當中,常常會使用到 -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

文件類型:文件類型是-,表示這是一個普通文件; 關於文件的類型,請參考:Linux文件類型與擴展名 文件權限:文件權限是rw-r--r-- ,表示文件屬主可讀、可寫、不可執行,文件所歸屬的用戶組不可寫,可讀,不可執行,其它用戶不可寫,可讀,不可執行;硬連結個數: log2012.log這個文件沒有硬連結;因為數值是1,就是他本身;文件屬主:也就是這個文件歸哪於哪個用戶 ,它歸於root,也就是第一個root;文件屬組:也就是說,對於這個文件,它歸屬於哪個用戶組,在這裡是root用戶組;訪問可修改時間 :這裡的時間是最後訪問的時間,最後訪問和文件被修改或創建的時間,有時並不是一致的;當然文檔的屬性不僅僅包括這些,這些是我們最常用的一些屬性。inode 譯成中文就是索引節點。每個存儲設備或存儲設備的分區(存儲設備是硬碟、軟盤、U盤等等)被格式化為文件系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數 據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。作業系統根據指令, 能通過inode值最快的找到相對應的文件。做個比喻,比如一本書,存儲設備或分區就相當於這本書,Block相當於書中的每一頁,inode 就相當於這本書前面的目錄,一本書有很多的內容,如果想查找某部份的內容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內容。雖然不太恰當,但還是比較形象。當我們用ls 查看某個目錄或文件時,如果加上-i 參數,就可以看到inode節點了;比如我們前面所說的例子:

[root@localhost test]#  ls -li log2012.log 

2095112 -rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

log2012.log 的inode值是 2095112 ; 查看一個文件或目錄的inode,要通過ls 命令的的 -i參數。

 

 

進群,請加一口君個人微信,帶你嵌入式入門進階。

在公眾號內回復「1024」,即可免費獲取學習資料,期待你的關注~

相關焦點

  • linux基礎命令(文件操作/文件權限)
    文件操作常用命令Linux是一個一切皆文件的作業系統,不管是普通的文件、目錄、套接字等,在Linux中都是以文件的方式對待,雖然他們的類型不同,但linux對其提供的是同一套操作界面。切換工作目錄cd 目標工作路徑註:目標工作路徑可為絕對路徑也可為相對路徑切換工作目錄eg.
  • Linux 文件與目錄管理常用命令
    現在我們來看一下處理目錄的常用命令1、 Ls:列出目錄:在linux系統當中,ls命令會常常被運行,而它的使用方法是:2、 Cd:切換目錄:Cd是change directory的縮寫,這是用來切換工作目錄的命令。
  • Linux 文件和文件夾權限詳解
    Linux 文件和文件夾權限詳解一點PHP建站技術分享之linux權限探討,很多初學者只是在練習的時候使用過幾次命令,例如chmod又或者chown等,但是很少會在實際中會去關心這個問題,下面一點博主詳細給大夥分析linux
  • 每天一個 Linux 命令(23):Linux 目錄結構
    ,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin … … 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。
  • Linux如何設置目錄和文件的權限/Linux如何管理目錄和文件屬性
    Linux如何管理目錄和文件屬性概述:在Linux文件系統的安全模型中,為系統中的文件(或目錄)賦予了兩個屬性:訪問權限和文件所有者,簡稱為「權限」和「歸屬」。其中,訪問權限包括讀取、寫入、可執行三種基本類型,歸屬包括屬主(擁有該文件的用戶帳號)、屬組(擁有該文件的組帳號)。
  • 每天一個 Linux 命令(31): /etc/group文件詳解
    /etc/passwd和/etc/shadow文件都是有關於系統管理員對用戶和用戶組管理時相關的文件。linux /etc/group文件是有關於系統管理員對用戶和用戶組管理的文件,linux用戶組的所有信息都存放在/etc/group文件中。具有某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
  • Linux文件的常用操作命令
    less # 命令行中查看文件可以上下翻頁反覆瀏覽head # 命令行中查看文件頭幾行tail # 命令行中查看文件尾幾行wc # 統計文件的單詞數 行數等信息3、目錄管理常用指令pwd #查看你當前所在的目錄cd # 切換目錄ls # 查看顯示目錄的內容du # 統計目錄和文件空間的佔用情況mkdir # 創建新目錄rmdir # 刪除空目錄touch # 創建文件rm # 刪除文件
  • linux命令大全
    雖然,大部分人最熟悉的還是WINDOWS用戶,但是總有各種各樣的原因讓我們選擇linux,不論因為何種原因開始接觸linux,但都希望大家儘快進入到Linux的世界裡,玩轉Linux高手,最終發現linux的可愛之處。本文將linux命令大致分為了10個部分:文件管理、磁碟管理、文檔編輯、文件傳輸、磁碟維護、網絡通訊、系統管理、系統設置、備份壓縮、設備管理。各位看官可將本文收藏,以備將來不時之需。
  • Linux命令之文件搜索
    前言在linux最小安裝模式下,當我們登錄到一臺不是自己安裝的linux伺服器上時,有的時候我們需要知道某個軟體的安裝位置,例如:我們需要知道mysql安裝在哪個目錄下,那麼我們應該怎麼辦呢?這就用到了文件的搜索功能。
  • Linux中的文件和目錄結構詳解
    ,深入了解linux文件目錄結構的標準和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下linux目錄結構的相關知識。        當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包含很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或文件。
  • 【松勤軟體測試基礎】Linux | 與Linux文件和目錄管理相關的一些重要命令(四)
    SUID/SGID/SBIT 權限設置上面介紹了SUID與SGID的功能,那麼,如何打開文件使其成為具有SUID與SGID的權限呢?這就需要使用數字的那種方式來更改權限了。我們修改文件的rwx屬性用的是3個數字,所以如果我們需要使文件具有SUID或者SGID的權限,這時就要用到4組數字,即在rwx的3組數字前面加上一個數字就行了。
  • linux刪除命令rm的使用
    在linux中創建文件很容易,系統中隨時會有文件變得過時且毫無用處。用戶可以用rm命令將其刪除。該命令的功能為刪除一個目錄中的一個或多個文件或目錄,它也可以將某個目錄及其下的所有文件及子目錄均刪除。對於連結文件,只是刪除了連結,原有文件均保持不變。
  • Linux教程之Linux mkdir 創建文件夾命令
    Linux教程之Linux mkdir 創建文件夾命令 Linux(Ubuntu/Fedora/CentOS/RetHat)可以通過GMONE和KDE界面直接創建文件夾和文件目錄。當然,有時候直接通過終端用 mkdir 命令來創建會更方便,特別是在Root權限的文件夾和目錄中......
  • Linux文件操作,這些命令可以搞定
    使用ls命令帶-l選項,就可以在終端輸出中顯示文件元數據屬性。例如:輸出中的每行都包含與當前目錄中存在的文件或子目錄相關的元數據信息。
  • Linux下使用tar命令
    解壓語法:tar [主選項+輔選項] 文件或者目錄使用該命令時,主選項是必須要有的,它告訴tar要做什麼事情,輔選項是輔助使用的,可以選用。主選項:c :創建新的檔案文件。如果用戶想備份一個目錄或是一些文件,就要選擇這個選項。相當於打包。
  • Linux掛載命令mount用法及參數詳解
    #cp /dev/cdrom /home/sunky/mydisk.iso 或 #dd if=/dev/cdrom of=/home/sunky/mydisk.iso註:執行上面的任何一條命令都可將當前光碟機裡的光碟製作成光碟鏡像文件/home/sunky/mydisk.iso2、將文件和目錄製作成光碟鏡像文件
  • linux作業系統常用命令及常用問題
    >linux作業系統詳解(linux不再難懂)●man :任何時候你覺得對一個命令行不是很確定,都可以通過輸入「man + 命令」了解這個命令能確切是做什麼的。●cd :要變更你當前所在的目錄。●mkdir :創建一個新的目錄。●cp :複製文件/重命名文件。
  • Linux基礎命令之:實驗內容及小結
    命令為:su-root(4)查看cross-3.3.2.tar.bz2所在的Windows下對應分區的格式,並記下其文件設備名稱,如「/dev/hda1」等。命令為:fdisk-l(5)使用mkdir命令在「/mnt」新建子目錄作為掛載點。命令為:mkdir/mnt/win(6)掛載Windows相應分區。
  • Linux 三劍客 Awk、Sed、Grep 命令詳解
    Linux三劍客Awk命令詳解命令名稱Awk  pattern scanning and processing language命令作用對文本和數據進行處理詳細說明awk 是一種程式語言,用於在linux/unix下對文本和數據進行處理。
  • Python學習第174課——Linux移動文件、重命名文件、刪除文件命令
    上節我們學習了複製文件的命令,cp就是copy的簡寫。這節我們繼續學習其他的命令。●移動文件移動文件使用命令:mv 要移動的文件 移動到哪裡mv就是move的簡寫。我們桌面上的linux文件夾裡面的game文件夾,裡面只有一個mygame,沒有其他的東西,如下圖:而在linux_intro裡面有個文件linux_oprate.txt,現在我們要把linux_oprate.txt這個文件移動到game文件夾裡面,就可以使用命令:mv linux_intro/linux_oprate.txt game然後我們查看下