Linux 文件與目錄管理

linux中什麼是一個文件的路徑呢,說白了就是這個文件存在的地方,例如/root/.ssh/authorized_keys這就是一個文件的路徑如果你告訴系統這個文件的路徑,那麼系統就可以找到這個文件linux的世界中,存在着絕對路徑和相對路徑

絕對路徑:路徑的寫法一定由根目錄”/”寫起,例如/usr/local/mysql這就是絕對路徑

相對路徑:路徑的寫法不是由根目錄”/”寫起,例如,首先用戶進入到/然後再進入到home,命令爲 cd /home然後 cd test此時用戶所在的路徑爲 /home/test 。第一個cd命令後跟 /home 第二個cd命令後跟test,並沒有斜槓,這個test是相對於/home目錄來講的,所以叫做相對路徑

pwd這個命令打印出當前所在目錄

[image]

cd進入到某一個目錄

[image]

./指的是當前目錄

../指的是當前目錄的上一級目錄

[image]

上圖中,首先進入到/usr/local/lib/目錄下,然後再進入 ./其實還是進入到當前目錄下,用pwd查看當前目錄,並沒有發生變化,然後再進入../則是進入到了/usr/local/目錄下,即/usr/local/lib目錄的上一級目錄你看明白了嗎?

mkdir創建一個目錄,這個命令在上一章節中提及過。mkdir其實就是make directory的縮寫其語法爲 mkdir [-mp] [目錄名稱],其中-m , –p爲其選項,-m:這個參數用來指定要創建目錄的權限,該參數不常用,所以筆者不做重點解釋。-p:這個參數很管用的,先來做個試驗,你會一目瞭然的

[image]

當我們想創建 /tmp/test/123目錄,可是提示不能創建,原因是/tmp/test目錄不存在,你會說,這個linux怎麼這樣傻,/tmp/test目錄不存在就自動創建不就OK了嘛,的確linux確實很傻,如果它發現要創建的目錄的上一級目錄不存在就會報錯然後linux也爲我們想好了解決辦法,即-p參數

[image]

你看到這裏,是不是明白-p參數的作用了?沒錯,它的作用就是遞歸創建目錄,即使上級目錄不存在還有一種情況就是如果你想要創建的目錄存在的話,會提示報錯,然後你加上-p參數後,就不會報錯了

[image]

rmdir刪除一個目錄

[image]

rmdir其實是rmove directory縮寫,其只有一個選項-p類似與mkdir命令,這個參數的作用是將上級目錄一起刪除舉個例子吧,新建目錄mkdir -p d1/d2/d3 rmdir -p d1/d2/d3相當於是刪除了d1,d1/d2, d1/d2/d3。如果一個目錄中還有目錄,那麼當你直接rmdir該目錄時,會提示該目錄不爲空,不能刪除如果你非要刪除不爲空的目錄,那你用rm指令吧

rm刪除目錄或者文件

rmdir只能刪除目錄但不能刪除文件,要想刪除一個文件,則要用rm命令了。rm同樣也有很多選項你可以通過 man rm 來獲得詳細幫助信息在這裏筆者只列舉較常用的幾個選項

-f強制的意思,如果不加這個選項,當刪除一個不存在的文件時會報錯

[image]

-i這個選項的作用是,當用戶刪除一個文件時會提示用戶是否真的刪除

[image]

如果刪除,輸入y否則輸入 n

-r當刪除目錄時,加該選項,如果不加這個選項會報錯。rm是可以刪除不爲空的目錄的

[image]

你會發現,筆者在列舉的rm例子中使用的是絕對路徑,而ls則使用的相對路徑這是爲什麼呢?

[image]

which用來查找一個命令的絕對路徑,這個命令筆者不詳細介紹,因爲平時筆者只用來查找一個命令的絕對路徑

alias用來設置指令的別名語法:alias[別名]=[指令名稱],例如 alias rm='rm -i' ,即當我們使用rm命令時,實際上是使用的是rm –i ,而用絕對路徑的/bin/rm則不會被alias,該命令在以後章節中會詳細介紹

ls在前面的命令中多次用到它現在你已經明白它的含義了吧沒有錯,就是查看某個目錄或者某個文件,是list的簡寫。ls後可以跟一個目錄,也可以跟一個文件以下是ls的選項,在這裏筆者並沒有完全列出,只是列出了平時使用最多的選項其他選項,你可以自行通過man ls 查詢

-a全部的檔案都列出,包括隱藏的。linux文件系統中同樣也有隱藏文件這些隱藏文件的文件名是以.開頭的例如.test, /root/.123, /root/.ssh 等等,隱藏文件可以是目錄也可以是普通文件

-l詳細列出文件的屬性信息,包括大小創建日期所屬主所屬組等等。ll這個命令等同於ls –l 。

[image]

--color=never/always/auto never即不要顯示顏色,always即總顯示顏色,auto是由系統自行判斷Redhat/CentOS系統中,默認是帶顏色的,因爲我們平時用的ls已經alias成了ls –color=tty 所以目錄的顏色是藍色的,而可執行文件的顏色是綠色這樣有助於幫我們區分文件的格式

[image]

-d後邊跟目錄,如果不加這個選項則列出目錄下的文件,加上後只列車目錄本身

[image]

cp copy的簡寫,即拷貝格式爲 cp [選項] [來源文件 ] [目的文件],例如我想把test1拷貝成test2,這樣即可 cp test1 test2,以下介紹幾個常用的選項

-d這裏涉及到一個連接的概念連接分爲軟連接和硬連接在以後的章節中會詳細解釋,現在你只要明白這裏的軟連接跟windows中的快捷方式類似即可如果不加這個-d則拷貝軟連接時會把軟連接的目標文件拷貝過去,而加上後,其實只是拷貝了一個連接文件(即快捷方式)

[image]

上例中的ln命令即爲建立連接的,以後再做詳細解釋

-r如果你要拷貝一個目錄,必須要加-r選項,否則你是拷貝不了目錄的

[image]

-i如果遇到一個存在的文件,會問是否覆蓋Redhat/CentOS系統中,我們使用的cp其實是cp –i

[image]

下面簡單做一個小試驗,很快你就會明白-i選項的作用了

[image]

上例中,touch命令,看字面意思就是摸一下,沒錯,如果有這個文件,則會改變文件的訪問時間,如果沒有這個文件就會創建這個文件前面說過echo,其實就是打印,在這裏所echo的內容”abc” “def”並沒有顯示在屏幕上,而是分別寫進了文件 111222,其寫入作用的就是這個大於號”>”linux中這叫做重定向,即把前面產生的輸出寫入到後面的文件中在以後的章節中會做詳細介紹,這裏你要明白它的含義即可cat命令則是讀一個文件,並把讀出的內容打印到當前屏幕上該命令也會在後續章節中詳細介紹

-u該選項僅當目標文件存在時纔會生效,如果源文件比目標文件新纔會拷貝,否則不做任何動作

mv移動的意思,是move的簡寫格式爲 mv [ 選項 ] [源文件] [目標文件],下面介紹幾個常用的選項

-icp-i一樣,當目標文件存在時會問用戶是否要覆蓋Redhat/CentOS系統中,我們使用的mv其實是mv –i

-u和上邊cp命令的-u選項一個作用,當目標文件存在時纔會生效,如果源文件比目標文件新纔會移動,否則不做任何動作

該命令有集中情況,你注意到了嗎?

1目標文件是目錄,而且目標文件不存在;

2目標文件是目錄,而且目標文件存在;

3目標文件不是目錄不存在;

4目標文件不是目錄存在;

目標文件是目錄,存在和不存在,移動的結果是不一樣的,如果存在,則會把源文件移動到目標文件目錄中不存在的話移動完後,目標文件是一個文件這樣說也許你會覺得有點不好理解,看例子吧

[image]

windows下的重命名,在linux下用mv就可以搞定

cat比較常用的一個命令,即查看一個文件的內容並顯示在屏幕上

-n查看文件時,把行號也顯示到屏幕上

[image]

上例中出現了一個”>>”,這個符號跟前面介紹的”>”的作用都是重定向,即把前面輸出的東西輸入到後邊的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有內容則會刪除文件中內容,而”>>”則不會

-A顯示所有東西出來,包括特殊字符

[image]

tac其實是cat的反寫,同樣的功能也是反向打印文件的內容到屏幕上

[image]

more也是用來查看一個文件的內容當文件內容太多,一屏幕不能佔下,而你用cat肯定是看不前面的內容的,那麼使用more就可以解決這個問題了當看完一屏後按空格鍵繼續看下一屏但看完所有內容後就會退出如果你想提前退出,只需按q鍵即可

less作用跟more一樣,但比more好在可以上翻,下翻空格鍵同樣可以翻頁,而按”j”鍵可以向下移動(按一下就向下移動一行),按”k”鍵向上移動在使用moreless查看某個文件時,你可以按一下”/”鍵,然後輸入一個word回車,這樣就可以查找這個word如果是多個該word可以按”n”鍵顯示下一個另外你也可以不按”/”而是按”?”後邊同樣跟word來搜索這個word,唯一不同的是,”/”是在當前行向下搜索,而”?”是在當前行向上搜索

head head後直接跟文件名,則顯示文件的前十行如果加 –n 選項則顯示文件前n

[image]

tailhead一樣,後面直接跟文件名,則顯示文件最後十行如果加-n選項則顯示文件最後n

[image]

-f動態顯示文件的最後十行,如果文件是不斷增加的,則用-f選項如:tail -f /var/log/messages


另外linux下還有兩個比較特殊的權限s和t,請點擊linux下文件的特殊權限s和t

umask

上邊也提到了默認情況下,目錄權限值爲766,普通文件權限值爲644。那麼這個值是由誰規定呢?追究其原因就涉及到了umask。

umask語法: umask xxx(這裏的xxx代表三個數字)

查看umask值只要輸入umask然後回車。 umask預設是0022,其代表什麼含義?先看一下下面的規則:

1)若用戶建立爲普通文件,則預設沒有可執行權限,只有rw兩個權限最大爲666-rw-rw-rw-

2)若用戶建立爲目錄,則預設所有權限均開放,即777drwxrwxrwx

umask數值代表的含義爲,上邊兩條規則中的默認值(文件爲666,目錄爲777)需要減掉的權限所以目錄的權限爲(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的權限爲(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定義的,比如設定umask 002,你再創建目錄或者文件時,默認權限分別爲(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。

[image]

umask可以在/etc/bashrc裏面更改,預設情況下,rootumask022,而一般使用者則爲002,因爲可寫的權限非常重要,因此預設會去掉寫權限

chattr修改文件的特殊屬性

語法: chattr [+-=][ASaci [文件或者目錄名]

+-=:分別爲增加減少設定

A:增加該屬性後,文件或目錄的atime將不可被修改;

S:增加該屬性後,會將數據同步寫入磁盤中;

a:增加該屬性後,只能追加不能刪除,非root用戶不能設定該屬性;

c:自動壓縮該文件,讀取時會自動解壓;

i:增加後,使文件不能被刪除重命名設定連接寫入新增數據;

[image]

增加i屬性後不能在該目錄中建立文件

[image]

增加a屬性後,只能追加不能刪除

lsattr列出文件/目錄的特殊屬性

語法: lsattr [-aR] [文件/目錄名]

-a:類似與ls-a選項,即連同隱藏文件一同列出;

-R:連同子目錄的數據一同列出

[image]

在上例中,test4是在test3目錄增加a屬性後建立的,所以test4也有a屬性,通過這個例子可以看出,chattr的屬性是級聯生效的,不僅對當前目錄生效而且會對目錄下的文件同樣生效

linux下搜索一個文件

windows下有一個搜索工具,可以讓我們很快的找到一個文件,這是很有用的然而在linux下搜索功能更加強大

which用來查找可執行文件的絕對路徑

在前面章節中已經多次用到該命令,需要注意的一點是,which只能用來查找PATH環境變量中出現的路徑下的可執行文件這個命令用的也是蠻多的,有時候我們不知道某個命令的絕對路徑,which一下很容易就知道了

[image]

當查找的文件在PATH變量中並沒有時,就會報錯

whereis通過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件

語法: whereis [-bmsu] [文件名稱]

-b:只找binary文件

-m:只找在說明文件manual路徑下的文件

-s:只找source來源文件

-u:沒有說明檔的文件

[image]

說明:whereis筆者幾乎很少用到,如果你感興趣請深入研究

locate類似於whereis,也是通過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裏後邊直接跟文件名如果你的linux沒有這個命令,請安裝軟件包 mlocate ,這個軟件包在你的系統安裝盤裏,後綴名是RPM,隨後介紹的find命令會告訴你如何查找這個包如果你裝的CentOS你可以使用這個命令來安裝 yum install –y mlocate 。 前提是你的CentOS能連互聯網至於yum這個命令如何使用,到後續章節你自然會明白如果你剛裝上這個命令,初次使用會報錯

[image]

這是因爲系統還沒有生成那個文件列表庫你可以使用updatedb命令立即生成(更新)這個庫如果你的服務器上正跑着重要的業務,那麼你最好不要去運行這個命令,因爲一旦運行,服務器的壓力會變大這個數據庫默認情況下每週更新一次所以你用locate命令去搜索一個文件,正好是在兩次更新時間段內,那你肯定是得不到結果的你可以到/etc/updated.conf去配置這個數據庫生成(更新)的規則。locate命令筆者用的也並不多,所以你只要明白有這麼一個東西即可你用到時再去深究其用法吧

find這個搜索工具是筆者用的最多的一個,所以請你務必要熟悉它

語法: find [路徑] [參數]下面介紹幾個筆者經常用的參數

-atime +n:訪問或執行時間大於n天的文件

-ctime +n:寫入更改inode屬性(例如更改所有者權限或者連接)時間大於n天的文件

-mtime +n:寫入時間大於n天的文件

看到這裏,你對這三個time是不是有些暈了,那筆者就先給你介紹一下這三個time屬性

文件的 Access timeatime是在讀取文件或者執行文件時更改的文件的 Modified timemtime是在寫入文件時隨文件內容的更改而更改的文件的 Create timectime是在寫入文件更改所有者權限或鏈接設置時隨 Inode 的內容更改而更改的因此,更改文件的內容即會更改 mtime ctime,但是文件的 ctime可能會在 mtime未發生任何變化時更改,例如,更改了文件的權限,但是文件內容沒有變化如何獲得一個文件的atime mtime以及ctime

ls -l命令可用來列出文件的 atime、ctime mtime。

ls -lc filename         列出文件的 ctime

ls -lu filename         列出文件的 atime

ls -l filename         列出文件的 mtime    

atime不一定在訪問文件之後被修改,因爲:使用ext3文件系統的時候,如果在mount的時候使用了noatime參數那麼就不會更新atime的信息而這是加了 noatime 取消了,不代表真實情況反正,這三個 time stamp都放在 inode mtime, atime修改inode就一定會改,既然 inode改了, ctime也就跟著要改了

繼續講find常用的參數

-name filename直接查找該文件名的文件,這個使用最多了

[image]

-type type:通過文件類型查找文件類型在前面部分已經簡單介紹過,相信你已經大體上了解了。type包含了 f, b, c, d, l, s等等後續的內容還會介紹文件類型的

[image]

linux的文件系統

搞計算機的應該都知道windows的系統格式化硬盤時會指定格式,fat或者 ntfs。linux的文件系統格式爲Ext2,或者Ext3 。早期的linux使用Ext2格式,目前的linux都使用了Ext3。 Ext2文件系統雖然是高效穩定的但是,隨着Linux系統在關鍵業務中的應用,Linux文件系統的弱點也漸漸顯露出來了,因爲Ext2文件系統是非日誌文件系統這在關鍵行業的應用是一個致命的弱點。Ext3文件系統是直接從Ext2文件系統發展而來,Ext3文件系統帶有日誌功能,可以跟蹤記錄文件系統的變化,並將變化內容寫入日誌,寫操作首先是對日誌記錄文件進行操作,若整個寫操作由於某種原因 (如系統掉電)而中斷,系統重啓時,會根據日誌記錄來恢復中斷前的寫操作,而且這個過程費時極短目前Ext3文件系統已經非常穩定可靠它完全兼容Ext2文件系統用戶可以平滑地過渡到一個日誌功能健全的文件系統中來這實際上了也是ext3日誌文件系統初始設計的初衷

Linux文件系統在windows中是不能識別的,但是在linux系統中你可以掛載的windows的文件系統,linux目前支持MS-DOSVFATFATBSD等格式如果你使用的是Redhat或者CentOS,那麼你不要妄圖掛載NFS格式的文件到linux下,因爲它不支持NFS。雖然有些版本的linux支持NFS,但不建議使用,因爲目前的技術還不成熟

Ext3文件系統爲Redhat/CentOS默認使用的文件系統,除了Ext3文件系統外,有些linux發行版例如SuSE默認的文件系統爲reiserFSExt3獨特的優點就是易於轉換,很容易在 Ext2 Ext3之間相互轉換,而具有良好的兼容性,其它優點 ReiserFS都有,而且還比它做得更好如高效的磁盤空間利用和獨特的搜尋方式都是Ext3所不具備的,速度上它也不能和 ReiserFS相媲美,在實際使用過程中,reiserFS也更加安全高效,據說反刪除功能也不錯

ReiserFS的優勢在於,它是基於 B*Tree快速平衡樹這種高效算法的文件系統,例如在處理小於 1k的文件比 Ext3 10再一個就是 ReiserFS空間浪費較少,它不會對一些小文件分配 inode,而是打包存放在同一個磁盤塊 ()中,Ext2/Ext3是把它們單獨存放在不同的簇上,如簇大小爲 4k,那麼 2 100字節的文件會佔用 2個簇,ReiserFS則只佔用一個當然 ReiserFS也有缺點,就是每升級一個版本,都要將磁盤重新格式化一次

【ln建立連接檔

前面提到過兩次連接檔的概念,現在終於該好好介紹下這部分內容了連接檔分爲兩種,硬連接(hard link)和軟連接(symbolic link

Hard Links上面內容中說過,當系統要讀取一個文件時,就會先去讀inode table,然後再去根據inode中的信息到塊區域去將數據取出來hard link 是直接再建立一個inode連接到文件放置的塊區域也就是說,進行hard link的時候實際上該文件內容沒有任何變化,只是增加了一個指到這個文件的inode,不過這樣一來就會有個問題,因爲增加的inode會連接到塊區域,而目錄本身僅僅消耗inode而已,那麼hard link就不能連接目錄了請你記住,hard link 有兩個限制:1不能跨文件系統,因爲不通的文件系統有不同的inode table 2 不能連接目錄

Symbolic Linkshard link不同,這個是建立一個獨立的文件,而這個文件的作用是當讀取這個連接文件時,它會把讀取的行爲轉發到該文件所link的文件上這樣講,也許比較繞口,那麼就來舉一個例子現在有文件a,我們做了一個軟連接文件b(只是一個連接文件,非常小),b指向了文件a。當讀取b時,那麼b就會把讀取的動作轉發到a上,這樣就讀取到了文件a。所以,當你刪除文件a時,文件b並不會被刪除,但是再讀取b時,會提示無法打開文件而,當你刪除b時,a是不會有任何影響的

看樣子,似乎 hard link比較安全,因爲即使某一個 inode被殺掉了,只要有任何一個 inode存在,那麼該文件就不會不見!不過,不幸的是,由於 Hard Link的限制太多了,包括無法做目錄的 link,所以在用途上面是比較受限的!反而是 Symbolic Link的使用方向較廣!那麼如何建立軟連接和硬連接呢?這就用到了ln命令

ln語法: ln [-s] [來源文件] [目的文件]

ln常用的選項就一個-s,如果不加就是建立硬連接,加上就建立軟連接

[image]

在建立硬連接前後,123目錄所佔空間大小並沒有改變

[image]

當把源文件刪除後,空間仍舊沒有變化說明了刪除一個文件其實只是刪除了inode信息

[image]

不能創建目錄的硬連接

[image]

建立軟連接後,456目錄增加了4k

[image]

刪除源文件後會提示沒有這個文件的錯誤

[image]

目錄是可以軟連接的

[image]

刪除軟連接對源文件沒有任何影響


發佈了25 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章