您好,歡迎進入深圳市穎特新科技有限公司官方網(wǎng)站!
在linux中什么是一個文件的路徑呢,說白了就是這個文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 這就是一個文件的路徑。如果你告訴系統(tǒng)這個文件的路徑,那么系統(tǒng)就可以找到這個文件。在linux的世界中,存在著絕對路徑和相對路徑。
絕對路徑:路徑的寫法一定由根目錄”/”寫起,例如/usr/local/mysql 這就是絕對路徑。
相對路徑:路徑的寫法不是由根目錄”/”寫起,例如,首先用戶進入到/ 然后再進入到home ,命令為 cd /home 然后 cd test 此時用戶所在的路徑為 /home/test 。第一個cd命令后跟 /home 第二個cd命令后跟test ,并沒有斜杠,這個test是相對于/home 目錄來講的,所以叫做相對路徑。
pwd 這個命令打印出當(dāng)前所在目錄
cd 進入到某一個目錄
./ 指的是當(dāng)前目錄
../ 指的是當(dāng)前目錄的上一級目錄。
上圖中,首先進入到/usr/local/lib/ 目錄下,然后再進入 ./ 其實還是進入到當(dāng)前目錄下,用pwd查看當(dāng)前目錄,并沒有發(fā)生變化,然后再進入../ 則是進入到了/usr/local/目錄下,即/usr/local/lib目錄的上一級目錄。你看明白了嗎?
mkdir 創(chuàng)建一個目錄,這個命令在上一章節(jié)中提及過。mkdir 其實就是make directory的縮寫。其語法為 mkdir [-mp] [目錄名稱] ,其中-m , –p 為其選項,-m:這個參數(shù)用來指定要創(chuàng)建目錄的權(quán)限,該參數(shù)不常用,所以筆者不做重點解釋。-p:這個參數(shù)很管用的,先來做個試驗,你會一目了然的。
當(dāng)我們想創(chuàng)建 /tmp/test/123 目錄,可是提示不能創(chuàng)建,原因是/tmp/test目錄不存在,你會說,這個linux怎么這樣傻,/tmp/test目錄不存在就自動創(chuàng)建不就OK了嘛,的確linux確實很傻,如果它發(fā)現(xiàn)要創(chuàng)建的目錄的上一級目錄不存在就會報錯。然后linux也為我們想好了解決辦法,即-p參數(shù)。
你看到這里,是不是明白-p參數(shù)的作用了?沒錯,它的作用就是遞歸創(chuàng)建目錄,即使上級目錄不存在。還有一種情況就是如果你想要創(chuàng)建的目錄存在的話,會提示報錯,然后你加上-p參數(shù)后,就不會報錯了。
rmdir 刪除一個目錄。
rmdir 其實是rmove directory 縮寫,其只有一個選項-p 類似與mkdir命令,這個參數(shù)的作用是將上級目錄一起刪除。舉個例子吧,新建目錄mkdir -p d1/d2/d3 ,rmdir -p d1/d2/d3相當(dāng)于是刪除了d1,d1/d2, d1/d2/d3。如果一個目錄中還有目錄,那么當(dāng)你直接rmdir 該目錄時,會提示該目錄不為空,不能刪除。如果你非要刪除不為空的目錄,那你用rm指令吧。
rm 刪除目錄或者文件
rmdir 只能刪除目錄但不能刪除文件,要想刪除一個文件,則要用rm命令了。rm同樣也有很多選項。你可以通過 man rm 來獲得詳細幫助信息。在這里筆者只列舉較常用的幾個選項。
-f 強制的意思,如果不加這個選項,當(dāng)刪除一個不存在的文件時會報錯。
-i 這個選項的作用是,當(dāng)用戶刪除一個文件時會提示用戶是否真的刪除。
如果刪除,輸入y 否則輸入 n
-r 當(dāng)刪除目錄時,加該選項,如果不加這個選項會報錯。rm是可以刪除不為空的目錄的。
你會發(fā)現(xiàn),筆者在列舉的rm例子中使用的是絕對路徑,而ls 則使用的相對路徑。這是為什么呢?
which 用來查找一個命令的絕對路徑,這個命令筆者不詳細介紹,因為平時筆者只用來查找一個命令的絕對路徑。
alias 用來設(shè)置指令的別名。語法:alias[別名]=[指令名稱],例如 alias rm='rm -i' ,即當(dāng)我們使用rm命令時,實際上是使用的是rm –i ,而用絕對路徑的/bin/rm 則不會被alias,該命令在以后章節(jié)中會詳細介紹。
【環(huán)境變量PATH】
上邊提到了alias,也提到了絕對路徑的/bin/rm ,然后你意識到?jīng)]有,為什么我們輸入很多命令時是直接打出了命令,而沒有去使用這些命令的絕對路徑?這是因為環(huán)境變量PATH在起作用了。請輸入 echo $PATH,這里的echo其實就是打印的意思,而PATH前面的$表示后面接的是變量。
因為/bin 在PATH的設(shè)定中,所以自然就可以找到ls了。如果你將 ls 移動到 /root 底下的話,然后你自己本身也在 /root 底下,但是當(dāng)你執(zhí)行 ls 的時候,他就是不理你?怎么辦?這是因為 PATH 沒有 /root 這個目錄,而你又將 ls 移動到 /root 底下了,自然系統(tǒng)就找不到可執(zhí)行文件了,因此就會告訴你, command not found !那么該怎么克服這種問題呢?
有兩個方法,一種方法是直接將 /root 的路徑加入 PATH 當(dāng)中!如何增加?可以使用:
PATH=”$PATH”:/root
另一種方式則是使用完整檔名,亦即直接使用相對或絕對路徑來執(zhí)行,例如:
/root/ls
./ls
關(guān)于rm,筆者使用最多便是-rf兩個選項合用了。不管刪除文件還是目錄都可以。但是方便的同時也要多注意,萬一你的手太快后邊跟了/那樣就會把你的系統(tǒng)文件全部刪除的,切記切記。
ls 在前面的命令中多次用到它,F(xiàn)在你已經(jīng)明白它的含義了吧。沒有錯,就是查看某個目錄或者某個文件,是list的簡寫。ls 后可以跟一個目錄,也可以跟一個文件。以下是ls的選項,在這里筆者并沒有完全列出,只是列出了平時使用最多的選項。其他選項,你可以自行通過man ls 查詢。
-a 全部的檔案都列出,包括隱藏的。linux文件系統(tǒng)中同樣也有隱藏文件。這些隱藏文件的文件名是以.開頭的。例如.test, /root/.123, /root/.ssh 等等,隱藏文件可以是目錄也可以是普通文件。
-l 詳細列出文件的屬性信息,包括大小、創(chuàng)建日期、所屬主所屬組等等。ll 這個命令等同于ls –l 。
--color=never/always/auto never即不要顯示顏色,always 即總顯示顏色,auto 是由系統(tǒng)自行判斷。在Redhat/CentOS 系統(tǒng)中,默認是帶顏色的,因為我們平時用的ls已經(jīng)alias成了ls –color=tty 所以目錄的顏色是藍色的,而可執(zhí)行文件的顏色是綠色。這樣有助于幫我們區(qū)分文件的格式。
-d 后邊跟目錄,如果不加這個選項則列出目錄下的文件,加上后只列車目錄本身。
cp copy的簡寫,即拷貝。格式為 cp [選項] [ 來源文件 ] [目的文件] ,例如我想把test1 拷貝成test2 ,這樣即可 cp test1 test2,以下介紹幾個常用的選項
-d 這里涉及到一個“連接”的概念。連接分為軟連接和硬連接。在以后的章節(jié)中會詳細解釋,現(xiàn)在你只要明白這里的軟連接跟windows中的快捷方式類似即可。如果不加這個-d 則拷貝軟連接時會把軟連接的目標文件拷貝過去,而加上后,其實只是拷貝了一個連接文件(即快捷方式)。
上例中的ln 命令即為建立連接的,以后再做詳細解釋。
-r 如果你要拷貝一個目錄,必須要加-r選項,否則你是拷貝不了目錄的。
-i 如果遇到一個存在的文件,會問是否覆蓋。在Redhat/CentOS系統(tǒng)中,我們使用的cp其實是cp –i
下面簡單做一個小試驗,很快你就會明白-i 選項的作用了。
上例中,touch 命令,看字面意思就是摸一下,沒錯,如果有這個文件,則會改變文件的訪問時間,如果沒有這個文件就會創(chuàng)建這個文件。前面說過echo,其實就是打印,在這里所echo的內(nèi)容”abc” 和 “def”并沒有顯示在屏幕上,而是分別寫進了文件 111和222, 其寫入作用的就是這個大于號”>” 在linux中這叫做重定向,即把前面產(chǎn)生的輸出寫入到后面的文件中。在以后的章節(jié)中會做詳細介紹,這里你要明白它的含義即可。而cat 命令則是讀一個文件,并把讀出的內(nèi)容打印到當(dāng)前屏幕上。該命令也會在后續(xù)章節(jié)中詳細介紹。
-u 該選項僅當(dāng)目標文件存在時才會生效,如果源文件比目標文件新才會拷貝,否則不做任何動作。
mv 移動的意思,是move的簡寫。格式為 mv [ 選項 ] [源文件] [目標文件],下面介紹幾個常用的選項。
-i 和cp的-i 一樣,當(dāng)目標文件存在時會問用戶是否要覆蓋。在Redhat/CentOS系統(tǒng)中,我們使用的mv其實是mv –i
-u 和上邊cp 命令的-u選項一個作用,當(dāng)目標文件存在時才會生效,如果源文件比目標文件新才會移動,否則不做任何動作。
該命令有集中情況,你注意到了嗎?
1) 目標文件是目錄,而且目標文件不存在;
2) 目標文件是目錄,而且目標文件存在;
3) 目標文件不是目錄不存在;
4) 目標文件不是目錄存在;
目標文件是目錄,存在和不存在,移動的結(jié)果是不一樣的,如果存在,則會把源文件移動到目標文件目錄中。不存在的話移動完后,目標文件是一個文件。這樣說也許你會覺得有點不好理解,看例子吧。
windows下的重命名,在linux下用mv就可以搞定。
cat 比較常用的一個命令,即查看一個文件的內(nèi)容并顯示在屏幕上。
-n 查看文件時,把行號也顯示到屏幕上。
上例中出現(xiàn)了一個”>>”,這個符號跟前面介紹的”>”的作用都是重定向,即把前面輸出的東西輸入到后邊的文件中,只是”>>”是追加的意思,而用”>”,如果文件中有內(nèi)容則會刪除文件中內(nèi)容,而”>>”則不會。
-A 顯示所有東西出來,包括特殊字符
tac 其實是cat的反寫,同樣的功能也是反向打印文件的內(nèi)容到屏幕上。
more 也是用來查看一個文件的內(nèi)容。當(dāng)文件內(nèi)容太多,一屏幕不能占下,而你用cat肯定是看不前面的內(nèi)容的,那么使用more就可以解決這個問題了。當(dāng)看完一屏后按空格鍵繼續(xù)看下一屏。但看完所有內(nèi)容后就會退出。如果你想提前退出,只需按q鍵即可。
less 作用跟more一樣,但比more好在可以上翻,下翻?崭矜I同樣可以翻頁,而按”j”鍵可以向下移動(按一下就向下移動一行),按”k”鍵向上移動。在使用more和less查看某個文件時,你可以按一下”/” 鍵,然后輸入一個word回車,這樣就可以查找這個word了。如果是多個該word可以按”n”鍵顯示下一個。另外你也可以不按”/”而是按”?”后邊同樣跟word來搜索這個word,唯一不同的是,”/”是在當(dāng)前行向下搜索,而”?”是在當(dāng)前行向上搜索。
head head后直接跟文件名,則顯示文件的前十行。如果加 –n 選項則顯示文件前n行。
tail 和head一樣,后面直接跟文件名,則顯示文件最后十行。如果加-n 選項則顯示文件最后n行。
-f 動態(tài)顯示文件的最后十行,如果文件是不斷增加的,則用-f 選項。如:tail -f /var/log/messages
【文件的所屬主以及所屬組】
一個linux目錄或者文件,都會有一個所屬主和所屬組。所屬主,即文件的擁有者,而所屬組,即該文件所屬主所在的一個組。Linux這樣設(shè)置文件屬性的目的是為了文件的安全。例如,test文件的所屬主是user0 而test1文件的所屬主是user1,那么user1是不能查看test文件的,相應(yīng)的user0也不能查看test1文件。然后有這樣一個應(yīng)用,我想創(chuàng)建一個文件同時讓user0和user1來查看怎么辦呢?
這時“所屬組”就派上用場了。即,創(chuàng)建一個群組users,讓user0和user1同屬于users組,然后建立一個文件test2,且其所屬組為users,那么user0和user1都可以訪問test2文件。
Linux文件屬性不僅規(guī)定了所屬主和所屬組,還規(guī)定了所屬主(user)、所屬組(group)以及其他用戶(others)對該文件的權(quán)限。你可以通過ls -l 來查看這些屬性。
【linux文件屬性】
上例中,用ls –l 查看當(dāng)前目錄下的文件時,共顯示了9列內(nèi)容(用空格劃分列),都代表了什么含義呢?
第1列,包含的東西有該文件類型和所屬主、所屬組以及其他用戶對該文件的權(quán)限。第一列共10位。其中第一位用來描述該文件的類型。上例中,我們看到的類型有”d”, “-“ ,其實除了這兩種外還有”l”, “b”, “c”,”s”等。
d 表示該文件為目錄;
- 表示該文件為普通文件;
l 表示該文件為連接文件(linux file),上邊提到的軟連接即為該類型;
b 表示該文件為塊設(shè)備文件,比如磁盤分區(qū)
c 表示該文件為串行端口設(shè)備,例如鍵盤、鼠標。
s 表示該文件為套接字文件(socket),用于進程間通信。
后邊的9位,每三個為一組。均為rwx 三個參數(shù)的組合。其中r 代表可讀,w代表可寫,x代表可執(zhí)行。前三位為所屬主(user)的權(quán)限,中間三位為所屬組(group)的權(quán)限,最后三位為其他非本群組(others)的權(quán)限。下面拿一個具體的例子來述說一下。
一個文件的屬性為-rwxr-xr-- ,它代表的意思是,該文件為普通文件,文件擁有者可讀可寫可執(zhí)行,文件所屬組對其可讀不可寫可執(zhí)行,其他用戶對其只可讀。
對于一個目錄來講,打開這個目錄即為執(zhí)行這個目錄,所以任何一個目錄必須要有x權(quán)限才能打開并查看該目錄。例如一個目錄的屬性為 drwxr--r-- 其所屬主為root,那么除了root外的其他用戶是不能打開這個目錄的。
第2列,表示為連接占用的節(jié)點(inode),若為目錄時,通常與該目錄地下還有多少目錄有關(guān)系,關(guān)于連接(link)在以后章節(jié)詳細介紹。
第3列,表示該文件的所屬主。
第4列,表示該文件的所屬組。
第5列,表示該文件的大小。
第6列、第7列和第8列為該文件的創(chuàng)建日期或者最近的修改日期,分別為月份日期以及時間。
第9列,文件名。如果前面有一個. 則表示該文件為隱藏文件。
【更改文件的權(quán)限】
更改文件的權(quán)限,也就是更改所屬主、所屬組以及他們對應(yīng)的讀寫執(zhí)行權(quán)限。
1)更改所屬組 chgrp
語法:chgrp [組名] [文件名]
這里用到了groupadd 命令,其含義即增加一個用戶組。該命令在以后章節(jié)中做詳細介紹,你只要知道它是用來增加用戶組的即可。
2)更改文件的所屬主 chown
語法:chown [ -R ] 賬戶名 文件名
chown [ -R ] 賬戶名:組名 文件名
這里的-R選項只作用于目錄,作用是級聯(lián)更改,即不僅更改當(dāng)前目錄,連目錄里的目錄或者文件全部更改。
useradd 是增加一個賬戶,以后會詳細介紹。上例中,首先建立一個目錄test,然后在test目錄下創(chuàng)建一個普通文件test2,因為是以root的身份創(chuàng)建的目錄和文件,所以所屬主以及所屬組都是root。chown user1 test 這使test的目錄所屬主由root變?yōu)榱藆ser1 ,然后test目錄下的test2文件所屬主以及所屬組還是root。接著 chown –R user1:testgroup test 這樣把test連同test目錄下的test2 的所屬主以及所屬組都改變了。
3)改變用戶對文件的讀寫執(zhí)行權(quán)限 chmod
在linux中為了方便更改這些權(quán)限,linux使用數(shù)字去代替rwx ,具體規(guī)則為r: 4 w:2 x:1 -:0 舉個例子,-rwxrwx---用數(shù)字表示就是 770,具體是這樣來的:
rwx = 4+2+1=7; rwx= 4+2+1=7; --- = 0+0+0=0
chmod 語法: chmod [-R] xyz 文件名 (這里的xyz,表示數(shù)字)
-R 選項作用同chown,級聯(lián)更改。
值得提一下的是,在linux系統(tǒng)中,默認一個目錄的權(quán)限為 755,而一個文件的默認權(quán)限為644.
如果你創(chuàng)建了一個目錄,而該目錄不想讓其他人看到內(nèi)容,則只需設(shè)置成 rwxr----- (740) 即可。
chmod 還支持使用rwx的方式來設(shè)置權(quán)限。!從之前的介紹中我們可以發(fā)現(xiàn),基本上就九個屬性分別是(1)user (2)group (3)others 三群啦!那么我們就可以藉由 u, g, o 來代表三群的屬性!此外, a 則代表 all 亦即全部的三群!那么讀寫的屬性就可以寫成了 r, w, x!也就是可以使用底下的方式來看:
現(xiàn)在我想把一個文件設(shè)置成這樣的權(quán)限 rwxr-xr-x (755),使用這種方式改變權(quán)限的命令為
另外還可以針對u, g, o, a增加或者減少某個權(quán)限(讀,寫,執(zhí)行),例如
另外linux下還有兩個比較特殊的權(quán)限s和t,請點擊linux下文件的特殊權(quán)限s和t
umask
上邊也提到了默認情況下,目錄權(quán)限值為766,普通文件權(quán)限值為644。那么這個值是由誰規(guī)定呢?追究其原因就涉及到了umask。
umask語法: umask xxx (這里的xxx代表三個數(shù)字)
查看umask值只要輸入umask然后回車。 umask預(yù)設(shè)是0022,其代表什么含義?先看一下下面的規(guī)則:
1)若用戶建立為普通文件,則預(yù)設(shè)“沒有可執(zhí)行權(quán)限”,只有rw兩個權(quán)限。最大為666(-rw-rw-rw-)
2)若用戶建立為目錄,則預(yù)設(shè)所有權(quán)限均開放,即777(drwxrwxrwx)
umask數(shù)值代表的含義為,上邊兩條規(guī)則中的默認值(文件為666,目錄為777)需要減掉的權(quán)限。所以目錄的權(quán)限為(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的權(quán)限為(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定義的,比如設(shè)定umask 為 002,你再創(chuàng)建目錄或者文件時,默認權(quán)限分別為(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)和(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。
umask 可以在/etc/bashrc里面更改,預(yù)設(shè)情況下,root的umask為022,而一般使用者則為002,因為可寫的權(quán)限非常重要,因此預(yù)設(shè)會去掉寫權(quán)限。
chattr 修改文件的特殊屬性
語法: chattr [+-=][ASaci [文件或者目錄名]
+-= :分別為增加、減少、設(shè)定
A:增加該屬性后,文件或目錄的atime將不可被修改;
S:增加該屬性后,會將數(shù)據(jù)同步寫入磁盤中;
a:增加該屬性后,只能追加不能刪除,非root用戶不能設(shè)定該屬性;
c:自動壓縮該文件,讀取時會自動解壓;
i:增加后,使文件不能被刪除、重命名、設(shè)定連接、寫入、新增數(shù)據(jù);
增加i屬性后不能在該目錄中建立文件。
增加a屬性后,只能追加不能刪除。
lsattr 列出文件/目錄的特殊屬性
語法: lsattr [-aR] [文件/目錄名]
-a:類似與ls 的-a 選項,即連同隱藏文件一同列出;
-R:連同子目錄的數(shù)據(jù)一同列出
在上例中,test4是在test3目錄增加a屬性后建立的,所以test4也有a屬性,通過這個例子可以看出,chattr 的屬性是級聯(lián)生效的,不僅對當(dāng)前目錄生效而且會對目錄下的文件同樣生效。
【在linux下搜索一個文件】
在windows下有一個搜索工具,可以讓我們很快的找到一個文件,這是很有用的。然而在linux下搜索功能更加強大。
which 用來查找可執(zhí)行文件的絕對路徑。
在前面章節(jié)中已經(jīng)多次用到該命令,需要注意的一點是,which只能用來查找PATH環(huán)境變量中出現(xiàn)的路徑下的可執(zhí)行文件。這個命令用的也是蠻多的,有時候我們不知道某個命令的絕對路徑,which一下很容易就知道了。
當(dāng)查找的文件在PATH變量中并沒有時,就會報錯。
whereis 通過預(yù)先生成的一個文件列表庫去查找跟給出的文件名相關(guān)的文件。
語法: whereis [-bmsu] [文件名稱]
-b:只找binary 文件
-m:只找在說明文件manual路徑下的文件
-s:只找source來源文件
-u:沒有說明檔的文件
說明:whereis 筆者幾乎很少用到,如果你感興趣請深入研究。
locate 類似于whereis,也是通過查找預(yù)先生成的文件列表庫來告訴用戶要查找的文件在哪里。后邊直接跟文件名。如果你的linux沒有這個命令,請安裝軟件包 mlocate ,這個軟件包在你的系統(tǒng)安裝盤里,后綴名是RPM,隨后介紹的find命令會告訴你如何查找這個包。如果你裝的CentOS你可以使用這個命令來安裝 yum install –y mlocate 。 前提是你的CentOS能連互聯(lián)網(wǎng)。至于yum這個命令如何使用,到后續(xù)章節(jié)你自然會明白。如果你剛裝上這個命令,初次使用會報錯。
這是因為系統(tǒng)還沒有生成那個文件列表庫。你可以使用updatedb 命令立即生成(更新)這個庫。如果你的服務(wù)器上正跑著重要的業(yè)務(wù),那么你最好不要去運行這個命令,因為一旦運行,服務(wù)器的壓力會變大。這個數(shù)據(jù)庫默認情況下每周更新一次。所以你用locate命令去搜索一個文件,正好是在兩次更新時間段內(nèi),那你肯定是得不到結(jié)果的。你可以到/etc/updated.conf 去配置這個數(shù)據(jù)庫生成(更新)的規(guī)則。locate命令筆者用的也并不多,所以你只要明白有這么一個東西即可。你用到時再去深究其用法吧。
find 這個搜索工具是筆者用的最多的一個,所以請你務(wù)必要熟悉它。
語法: find [路徑] [參數(shù)] 下面介紹幾個筆者經(jīng)常用的參數(shù)
-atime +n :訪問或執(zhí)行時間大于n天的文件
-ctime +n :寫入、更改inode屬性(例如更改所有者、權(quán)限或者連接)時間大于n天的文件
-mtime +n :寫入時間大于n天的文件
看到這里,你對這三個time是不是有些暈了,那筆者就先給你介紹一下這三個time屬性。
文件的 Access time,atime 是在讀取文件或者執(zhí)行文件時更改的。文件的 Modified time,mtime 是在寫入文件時隨文件內(nèi)容的更改而更改的。文件的 Create time,ctime 是在寫入文件、更改所有者、權(quán)限或鏈接設(shè)置時隨 Inode 的內(nèi)容更改而更改的。 因此,更改文件的內(nèi)容即會更改 mtime 和 ctime,但是文件的 ctime 可能會在 mtime 未發(fā)生任何變化時更改,例如,更改了文件的權(quán)限,但是文件內(nèi)容沒有變化。 如何獲得一個文件的atime mtime 以及ctime ?
ls -l 命令可用來列出文件的 atime、ctime 和 mtime。
ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime
atime不一定在訪問文件之后被修改,因為:使用ext3文件系統(tǒng)的時候,如果在mount的時候使用了noatime參數(shù)那么就不會更新atime的信息。而這是加了 noatime 取消了, 不代表真實情況。反正, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了。
繼續(xù)講find常用的參數(shù)。
-name filename 直接查找該文件名的文件,這個使用最多了。
-type type :通過文件類型查找。文件類型在前面部分已經(jīng)簡單介紹過,相信你已經(jīng)大體上了解了。type 包含了 f, b, c, d, l, s 等等。后續(xù)的內(nèi)容還會介紹文件類型的。
【linux的文件系統(tǒng)】
搞計算機的應(yīng)該都知道windows的系統(tǒng)格式化硬盤時會指定格式,fat 或者 ntfs。而linux的文件系統(tǒng)格式為Ext2,或者Ext3 。早期的linux使用Ext2格式,目前的linux都使用了Ext3。 Ext2文件系統(tǒng)雖然是高效穩(wěn)定的。但是,隨著Linux系統(tǒng)在關(guān)鍵業(yè)務(wù)中的應(yīng)用,Linux文件系統(tǒng)的弱點也漸漸顯露出來了,因為Ext2文件系統(tǒng)是非日志文件系統(tǒng)。這在關(guān)鍵行業(yè)的應(yīng)用是一個致命的弱點。Ext3文件系統(tǒng)是直接從Ext2文件系統(tǒng)發(fā)展而來,Ext3文件系統(tǒng)帶有日志功能,可以跟蹤記錄文件系統(tǒng)的變化,并將變化內(nèi)容寫入日志,寫操作首先是對日志記錄文件進行操作,若整個寫操作由于某種原因 (如系統(tǒng)掉電) 而中斷,系統(tǒng)重啟時,會根據(jù)日志記錄來恢復(fù)中斷前的寫操作,而且這個過程費時極短。目前Ext3文件系統(tǒng)已經(jīng)非常穩(wěn)定可靠。它完全兼容Ext2文件系統(tǒng)。用戶可以平滑地過渡到一個日志功能健全的文件系統(tǒng)中來。這實際上了也是ext3日志文件系統(tǒng)初始設(shè)計的初衷。
Linux文件系統(tǒng)在windows中是不能識別的,但是在linux系統(tǒng)中你可以掛載的windows的文件系統(tǒng),linux目前支持MS-DOS,VFAT,F(xiàn)AT,BSD等格式。如果你使用的是Redhat或者CentOS,那么你不要妄圖掛載NFS格式的文件到linux下,因為它不支持NFS。雖然有些版本的linux支持NFS,但不建議使用,因為目前的技術(shù)還不成熟。
Ext3文件系統(tǒng)為Redhat/CentOS默認使用的文件系統(tǒng),除了Ext3文件系統(tǒng)外,有些linux發(fā)行版例如SuSE默認的文件系統(tǒng)為reiserFS ,Ext3 獨特的優(yōu)點就是易于轉(zhuǎn)換,很容易在 Ext2 和 Ext3 之間相互轉(zhuǎn)換,而具有良好的兼容性,其它優(yōu)點 ReiserFS 都有,而且還比它做得更好。如高效的磁盤空間利用和獨特的搜尋方式都是Ext3 所不具備的,速度上它也不能和 ReiserFS相媲美,在實際使用過程中,reiserFS 也更加安全高效,據(jù)說反刪除功能也不錯。
ReiserFS 的優(yōu)勢在于,它是基于 B*Tree 快速平衡樹這種高效算法的文件系統(tǒng),例如在處理小于 1k 的文件比 Ext3 快 10 倍。再一個就是 ReiserFS 空間浪費較少,它不會對一些小文件分配 inode,而是打包存放在同一個磁盤塊 (簇) 中,Ext2/Ext3 是把它們單獨存放在不同的簇上,如簇大小為 4k,那么 2 個 100 字節(jié)的文件會占用 2 個簇,ReiserFS 則只占用一個。當(dāng)然 ReiserFS 也有缺點,就是每升級一個版本,都要將磁盤重新格式化一次。
【linux文件類型】
在前面的內(nèi)容中簡單介紹了普通文件(-),目錄(d)等,在linux文件系統(tǒng)中,主要有以下幾種類型的文件。
1)正規(guī)文件(regular file):就是一般類型的文件,當(dāng)用ls –l 查看某個目錄時,第一個屬性為”-“的文件就是正規(guī)文件,或者叫普通文件。正規(guī)文件又可分成純文字文件(ascii)和二進制文件(binary)。純文本文件是可以通過cat, more, less等工具直接查看內(nèi)容的,而二進制文件并不能。例如我們用的命令/bin/ls 這就是一個二進制文件。
2)目錄(directory):這個很容易理解,就是目錄,跟windows下的文件夾一個意思,只不過在linux中我們不叫文件夾,而是叫做目錄。ls –l 查看第一個屬性為”d”。
3)連接檔(link):ls –l 查看第一個屬性為 “l”,類似windows下的快捷方式。這種文件在linux中很常見,而且筆者在日常的系統(tǒng)運維工作中用的很多,所以你要特意留意一下這種類型的文件。在后續(xù)章節(jié)筆者會介紹。
4)設(shè)備檔(device):與系統(tǒng)周邊相關(guān)的一些檔案,通常都集中在 /dev 這個目錄之下!通常又分為兩種:區(qū)塊 (block) 設(shè)備檔 :就是一些儲存數(shù)據(jù),以提供系統(tǒng)存取的接口設(shè)備,簡單的說就是硬盤啦!例如你的一號硬盤的代碼是 /dev/hda1 等等的檔案啦!第一個屬性為 “ b “;字符 (character) 設(shè)備檔 :亦即是一些串行端口的接口設(shè)備,例如鍵盤、鼠標等等!第一個屬性為 “ c “。
* linux 文件后綴名
對于后綴名這個概念,相信你不陌生吧。在linux系統(tǒng)中,文件的后綴名并沒有具體意義,也就是說,你加或者不加,都無所謂。但是為了容易區(qū)分,linux愛好者們都習(xí)慣給文件加一個后綴名,這樣當(dāng)用戶看到這個文件名時就會很快想到它到底是一個什么文件。例如1.sh, 2.tar.gz, my.cnf, test.zip等等,如果你首次接觸這些文件,你也許會感到很暈,沒有關(guān)系,隨著學(xué)習(xí)的深入,你就會逐漸的了解這些文件了。筆者所列舉的幾個文件名中1.sh代表它是一個shell script ,2.tar.gz 代表它是一個壓縮包,my.cnf 代表它是一個配置文件,test.zip 代表它是一個壓縮文件。
另外需要你知道的是,早期Unix系統(tǒng)文件名最多允許14個字符,而新的Unix或者linux系統(tǒng)中,文件名最長可以到達 256 個字符!
【linux中的連接檔】
在講連接檔之前,需要你先理解inode的概念。什么是inode呢?這就需要你知道磁盤的整體構(gòu)造。磁盤是有多個盤片(類似與光盤)重疊在一起構(gòu)成的,而每個盤片上會有一個可以移動的磁頭,這個磁頭的作用就是用來讀寫數(shù)據(jù)的。磁頭并不是一直在動,當(dāng)磁頭固定時,盤片轉(zhuǎn)一圈,這一圈就是一個磁道了。很多個盤片同半徑的那一圈的磁道總和稱為磁柱。而由圓心向外畫出直線,可以得到一個個扇區(qū),如圖二所示,一個扇區(qū)的物理量大約是 512 bytes ( 約 0.5K )。
圖一
圖二
知道了大體的硬盤構(gòu)造之后,再來談一談怎么硬盤分割( partition )呢?我們在進行硬盤分割的時候,最小都是以磁柱為單位進行分割的,那么分割完成之后自然就是格式化( format )啰,在 Linux 里面我們在進行格式化的時候必須要考慮到 Block 與 inode 的信息,這個 block 還好理解,他是我們磁盤可以記錄的最小單位,是由數(shù)個 sector 所組成的,所以他的大小通常為 n*512 bytes ,例如 4K 。那么 inode 是什么? Block 是記錄“檔案內(nèi)容數(shù)據(jù)”的地區(qū),而 inode 則是記錄“該檔案的屬性、及該檔案放置在哪一個 Block 之內(nèi)”的信息!所以,每個檔案都會占用到至少一個 inode 。而當(dāng)我們 Linux 系統(tǒng)要找到這個檔案時,他會先去搜尋 inode table 找到這個檔案的屬性及數(shù)據(jù)放置的地區(qū),然后再到數(shù)據(jù)去找到數(shù)據(jù)存放的 Block 進而將數(shù)據(jù)取出利用。這個 inode 數(shù)目在一開始就會被設(shè)定好,他的設(shè)定方式通常是利用 ( 硬盤大小 / 一個容量 ),這個容量至少應(yīng)該比 Block 要大一些較佳,例如剛剛的 Block 訂為 4K ,那么 inode 可以訂為 8K 左右。所以,一顆 1GB 的硬盤,如果以 8K 來規(guī)劃他的 inode 數(shù)時,他的 inode 就會有 131072 個 inode 啦!而一個 inode 的大小為 128 bytes 這么大!這么一來的話,我們就可以清楚的知道了,那就是一個 partition 格式化為一個 filesystem 之后,基本上,他一定會有 inode table 與 data area 兩個區(qū)塊,一個用來記錄檔案的信息與該檔案放置的 block 區(qū)塊,一個用來記錄檔案的內(nèi)容!
由于我們 Linux 在讀取數(shù)據(jù)的時候,是先查詢 inode table 以得到數(shù)據(jù)是放在那個 Block 里面,然后再去該 Block 里面讀取真正的數(shù)據(jù)內(nèi)容!然后,那個 block 是我們在格式化硬盤的時候規(guī)定出來的一個值,這個 block 是由 2 的 n 次方個sector 所集結(jié)而成的!所以,他是 0.5K 的倍數(shù)!假設(shè)我們 block 規(guī)劃為 4KBytes 好了,那么由于一個 inode 與一個block 最多均只紀錄一個檔案,所以,如果你的一個檔案有 0.1 K bytes 這么大時,你要曉得的是,由于你的 block 為 4K bytes ,因此,你就會有 3.9 Kbytes 的空間浪費掉!所以,當(dāng)你在格式化硬盤的時候,請千萬注意到你的系統(tǒng)未來的使用方向。
【ln 建立連接檔】
前面提到過兩次連接檔的概念,現(xiàn)在終于該好好介紹下這部分內(nèi)容了。連接檔分為兩種,硬連接(hard link)和軟連接(symbolic link)。
Hard Links: 上面內(nèi)容中說過,當(dāng)系統(tǒng)要讀取一個文件時,就會先去讀inode table,然后再去根據(jù)inode中的信息到塊區(qū)域去將數(shù)據(jù)取出來。而hard link 是直接再建立一個inode連接到文件放置的塊區(qū)域。也就是說,進行hard link的時候?qū)嶋H上該文件內(nèi)容沒有任何變化,只是增加了一個指到這個文件的inode,不過這樣一來就會有個問題,因為增加的inode會連接到塊區(qū)域,而目錄本身僅僅消耗inode而已,那么hard link就不能連接目錄了。請你記住,hard link 有兩個限制:1 不能跨文件系統(tǒng),因為不通的文件系統(tǒng)有不同的inode table; 2 不能連接目錄。
Symbolic Links:跟hard link不同,這個是建立一個獨立的文件,而這個文件的作用是當(dāng)讀取這個連接文件時,它會把讀取的行為轉(zhuǎn)發(fā)到該文件所link的文件上。這樣講,也許比較繞口,那么就來舉一個例子,F(xiàn)在有文件a,我們做了一個軟連接文件b(只是一個連接文件,非常。,b指向了文件a。當(dāng)讀取b時,那么b就會把讀取的動作轉(zhuǎn)發(fā)到a上,這樣就讀取到了文件a。所以,當(dāng)你刪除文件a時,文件b并不會被刪除,但是再讀取b時,會提示無法打開文件。而,當(dāng)你刪除b時,a是不會有任何影響的。
看樣子,似乎 hard link 比較安全,因為即使某一個 inode 被殺掉了,只要有任何一個 inode 存在,那么該文件就不會不見!不過,不幸的是,由于 Hard Link 的限制太多了,包括無法做目錄的 link ,所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方向較廣!那么如何建立軟連接和硬連接呢?這就用到了ln 命令。
ln 語法: ln [-s] [來源文件] [目的文件]
ln 常用的選項就一個-s ,如果不加就是建立硬連接,加上就建立軟連接。
在建立硬連接前后,123目錄所占空間大小并沒有改變。
當(dāng)把源文件刪除后,空間仍舊沒有變化。說明了刪除一個文件其實只是刪除了inode信息。
不能創(chuàng)建目錄的硬連接。
建立軟連接后,456目錄增加了4k
刪除源文件后會提示“沒有這個文件”的錯誤。
目錄是可以軟連接的。
刪除軟連接對源文件沒有任何影響。
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08