目錄管理
絕對路徑和相對路徑
我們知道Linux的目錄結(jié)構(gòu)為樹狀結(jié)構(gòu)卸例,最頂級的目錄為根目錄 /仆百。
其他目錄通過掛載可以將它們添加到樹中饰潜,通過解除掛載可以移除它們别威。
在開始本教程前我們需要先知道什么是絕對路徑與相對路徑。
絕對路徑:
路徑的寫法凳枝,由根目錄 / 寫起抄沮,例如:/usr/share/doc 這個目錄。
相對路徑:
路徑的寫法岖瑰,不是由 / 寫起叛买,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:cd ../man 這就是相對路徑的寫法啦蹋订!
處理目錄的常用命令
接下來我們就來看幾個常見的處理目錄的命令吧:
ls: 列出目錄
cd:切換目錄
pwd:顯示目前的目錄
mkdir:創(chuàng)建一個新的目錄
rmdir:刪除一個空的目錄
cp: 復(fù)制文件或目錄
rm: 移除文件或目錄
mv: 移動文件與目錄率挣,或修改文件與目錄的名稱
你可以使用 man [命令] 來查看各個命令的使用文檔,如 :man cp露戒。
ls (列出目錄)
在Linux系統(tǒng)當中椒功, ls 命令可能是最常被運行的。
語法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱
選項與參數(shù):
-a :全部的文件智什,連同隱藏文件( 開頭為 . 的文件) 一起列出來(常用)
-l :長數(shù)據(jù)串列出动漾,包含文件的屬性與權(quán)限等等數(shù)據(jù);(常用)
將目錄下的所有文件列出來(含屬性與隱藏檔)
[root@www ~]# ls -al ~
cd (切換目錄)
cd是Change Directory的縮寫荠锭,這是用來變換工作目錄的命令旱眯。
語法:
cd [相對路徑或絕對路徑]
測試:
# 切換到用戶目錄下
[root@kuangshen /]# cd home
# 使用 mkdir 命令創(chuàng)建 kuangstudy 目錄
[root@kuangshen home]# mkdir kuangstudy
# 進入 kuangstudy 目錄
[root@kuangshen home]# cd kuangstudy
# 回到上一級
[root@kuangshen kuangstudy]# cd ..
# 回到根目錄
[root@kuangshen kuangstudy]# cd /
# 表示回到自己的家目錄,亦即是 /root 這個目錄
[root@kuangshen kuangstudy]# cd ~
接下來大家多操作幾次應(yīng)該就可以很好的理解 cd 命令的证九。
pwd ( 顯示目前所在的目錄 )
pwd 是 Print Working Directory 的縮寫删豺,也就是顯示目前所在目錄的命令。
[root@kuangshen kuangstudy]#pwd [-P]
選項與參數(shù):-P :顯示出確實的路徑愧怜,而非使用連接(link) 路徑呀页。
測試:
# 單純顯示出目前的工作目錄
[root@kuangshen ~]# pwd
/root
# 如果是鏈接,要顯示真實地址叫搁,可以使用 -P參數(shù)
[root@kuangshen /]# cd bin
[root@kuangshen bin]# pwd -P
/usr/bin
mkdir (創(chuàng)建新目錄)
如果想要創(chuàng)建新的目錄的話赔桌,那么就使用mkdir (make directory)吧供炎。
mkdir [-mp] 目錄名稱
選項與參數(shù):
-m :配置文件的權(quán)限喔!直接配置疾党,不需要看默認權(quán)限 (umask) 的臉色~
-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創(chuàng)建起來音诫!
測試:
# 進入我們用戶目錄下
[root@kuangshen /]# cd /home
# 創(chuàng)建一個 test 文件夾
[root@kuangshen home]# mkdir test
# 創(chuàng)建多層級目錄
[root@kuangshen home]# mkdir test1/test2/test3/test4
mkdir: cannot create directory ‘test1/test2/test3/test4’:
No such file or directory # <== 沒辦法直接創(chuàng)建此目錄啊雪位!
# 加了這個 -p 的選項竭钝,可以自行幫你創(chuàng)建多層目錄!
[root@kuangshen home]# mkdir -p test1/test2/test3/test4
# 創(chuàng)建權(quán)限為 rwx--x--x 的目錄雹洗。
[root@kuangshen home]# mkdir -m 711 test2
[root@kuangshen home]# ls -l
drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
drwx--x--x 2 root root 4096 Mar 12 21:58 test2
rmdir ( 刪除空的目錄 )
語法:
rmdir [-p] 目錄名稱
選項與參數(shù):-p :連同上一級『空的』目錄也一起刪除
測試:
# 看看有多少目錄存在香罐?
[root@kuangshen home]# ls -l
drwxr-xr-x 2 root root 4096 Mar 12 21:55 test
drwxr-xr-x 3 root root 4096 Mar 12 21:56 test1
drwx--x--x 2 root root 4096 Mar 12 21:58 test2
# 可直接刪除掉,沒問題
[root@kuangshen home]# rmdir test
# 因為尚有內(nèi)容时肿,所以無法刪除庇茫!
[root@kuangshen home]# rmdir test1
rmdir: failed to remove ‘test1’: Directory not empty
# 利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 依次刪除螃成。
[root@kuangshen home]# rmdir -p test1/test2/test3/test4
注意:這個 rmdir 僅能刪除空的目錄旦签,你可以使用 rm 命令來刪除非空目錄,后面我們會將寸宏!
cp ( 復(fù)制文件或目錄 )
語法:
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
選項與參數(shù):
-a:相當於 -pdr 的意思宁炫,至於 pdr 請參考下列說明;(常用)
-p:連同文件的屬性一起復(fù)制過去氮凝,而非使用默認屬性(備份常用)羔巢;
-d:若來源檔為連結(jié)檔的屬性(link file),則復(fù)制連結(jié)檔屬性而非文件本身罩阵;
-r:遞歸持續(xù)復(fù)制竿秆,用於目錄的復(fù)制行為;(常用)
-f:為強制(force)的意思稿壁,若目標文件已經(jīng)存在且無法開啟袍辞,則移除后再嘗試一次;
-i:若目標檔(destination)已經(jīng)存在時常摧,在覆蓋時會先詢問動作的進行(常用)
-l:進行硬式連結(jié)(hard link)的連結(jié)檔創(chuàng)建,而非復(fù)制文件本身威创。
-s:復(fù)制成為符號連結(jié)檔 (symbolic link)落午,亦即『捷徑』文件;
-u:若 destination 比 source 舊才升級 destination 肚豺!
測試:
# 找一個有文件的目錄溃斋,我這里找到 root目錄
[root@kuangshen home]# cd /root
[root@kuangshen ~]# ls
install.sh
[root@kuangshen ~]# cd /home
# 復(fù)制 root目錄下的install.sh 到 home目錄下
[root@kuangshen home]# cp /root/install.sh /home
[root@kuangshen home]# ls
install.sh
# 再次復(fù)制,加上-i參數(shù)吸申,增加覆蓋詢問梗劫?
[root@kuangshen home]# cp -i /root/install.sh /home
cp: overwrite ‘/home/install.sh’? y # n不覆蓋享甸,y為覆蓋
rm ( 移除文件或目錄 )
語法:
rm [-fir] 文件或目錄
選項與參數(shù):
-f :就是 force 的意思,忽略不存在的文件梳侨,不會出現(xiàn)警告信息蛉威;
-i :互動模式,在刪除前會詢問使用者是否動作
-r :遞歸刪除白卟浮蚯嫌!最常用在目錄的刪除了!這是非常危險的選項1铩T袷尽!
測試:
# 將剛剛在 cp 的實例中創(chuàng)建的 install.sh刪除掉晒旅!
[root@kuangshen home]# rm -i install.sh
rm: remove regular file ‘install.sh’? y
# 如果加上 -i 的選項就會主動詢問喔栅盲,避免你刪除到錯誤的檔名!
# 盡量不要在服務(wù)器上使用 rm -rf /
mv ( 移動文件與目錄废恋,或修改名稱 )
語法:
[root@www ~]# mv [-fiu] source destination
[root@www ~]# mv [options] source1 source2 source3 .... directory
選項與參數(shù):
-f :force 強制的意思谈秫,如果目標文件已經(jīng)存在,不會詢問而直接覆蓋拴签;
-i :若目標文件 (destination) 已經(jīng)存在時孝常,就會詢問是否覆蓋!
-u :若目標文件已經(jīng)存在蚓哩,且 source 比較新构灸,才會升級 (update)
測試:
# 復(fù)制一個文件到當前目錄
[root@kuangshen home]# cp /root/install.sh /home
# 創(chuàng)建一個文件夾 test
[root@kuangshen home]# mkdir test
# 將復(fù)制過來的文件移動到我們創(chuàng)建的目錄,并查看
[root@kuangshen home]# mv install.sh test
[root@kuangshen home]# ls
test
[root@kuangshen home]# cd test
[root@kuangshen test]# ls
install.sh
# 將文件夾重命名岸梨,然后再次查看喜颁!
[root@kuangshen test]# cd ..
[root@kuangshen home]# mv test mvtest
[root@kuangshen home]# ls
mvtest
基本屬性
看懂文件屬性
Linux系統(tǒng)是一種典型的多用戶系統(tǒng),不同的用戶處于不同的地位曹阔,擁有不同的權(quán)限半开。為了保護系統(tǒng)的安全性,Linux系統(tǒng)對不同的用戶訪問同一文件(包括目錄文件)的權(quán)限做了不同的規(guī)定赃份。
在Linux中我們可以使用ll
或者ls –l
命令來顯示一個文件的屬性以及文件所屬的用戶和組寂拆,如:
實例中,boot文件的第一個屬性用"d"表示抓韩。"d"在Linux中代表該文件是一個目錄文件纠永。
在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等:
當為[ d ]則是目錄
當為[ - ]則是文件谒拴;
若是[ l ]則表示為鏈接文檔 ( link file )尝江;
若是[ b ]則表示為裝置文件里面的可供儲存的接口設(shè)備 ( 可隨機存取裝置 );
若是[ c ]則表示為裝置文件里面的串行端口設(shè)備英上,例如鍵盤炭序、鼠標 ( 一次性讀取裝置 )啤覆。
接下來的字符中,以三個為一組惭聂,且均為『rwx』 的三個參數(shù)的組合窗声。
其中,[ r ]代表可讀(read)彼妻、[ w ]代表可寫(write)嫌佑、[ x ]代表可執(zhí)行(execute)。
要注意的是侨歉,這三個權(quán)限的位置不會改變屋摇,如果沒有權(quán)限,就會出現(xiàn)減號[ - ]而已幽邓。
每個文件的屬性由左邊第一部分的10個字符來確定(如下圖):
從左至右用0-9這些數(shù)字來表示炮温。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權(quán)限牵舵。第4-6位確定屬組(所有者的同組用戶)擁有該文件的權(quán)限柒啤,第7-9位確定其他用戶擁有該文件的權(quán)限。
其中:
第1畸颅、4担巩、7位表示讀權(quán)限,如果用"r"字符表示没炒,則有讀權(quán)限涛癌,如果用"-"字符表示,則沒有讀權(quán)限送火;
第2拳话、5、8位表示寫權(quán)限种吸,如果用"w"字符表示弃衍,則有寫權(quán)限,如果用"-"字符表示沒有寫權(quán)限坚俗;
第3镜盯、6、9位表示可執(zhí)行權(quán)限猖败,如果用"x"字符表示形耗,則有執(zhí)行權(quán)限,如果用"-"字符表示辙浑,則沒有執(zhí)行權(quán)限。
對于文件來說拟糕,它都有一個特定的所有者判呕,也就是對該文件具有所有權(quán)的用戶倦踢。
同時,在Linux系統(tǒng)中侠草,用戶是按組分類的辱挥,一個用戶屬于一個或多個組。
文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶边涕。
因此晤碘,Linux系統(tǒng)按文件所有者、文件所有者同組用戶和其他用戶來規(guī)定了不同的文件訪問權(quán)限功蜓。
在以上實例中园爷,boot 文件是一個目錄文件,屬主和屬組都為 root式撼。
修改文件屬性
1童社、chgrp:更改文件屬組
chgrp [-R] 屬組名 文件名
-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時著隆,如果加上-R的參數(shù)扰楼,那么該目錄下的所有文件的屬組都會更改。
2美浦、chown:更改文件屬主弦赖,也可以同時更改文件屬組
chown [–R] 屬主名 文件名
chown [-R] 屬主名:屬組名 文件名
3、chmod:更改文件9個屬性
chmod [-R] xyz 文件或目錄
Linux文件屬性有兩種設(shè)置方法浦辨,一種是數(shù)字蹬竖,一種是符號。
Linux文件的基本權(quán)限就有九個荤牍,分別是owner/group/others三種身份各有自己的read/write/execute權(quán)限案腺。
先復(fù)習一下剛剛上面提到的數(shù)據(jù):文件的權(quán)限字符為:『-rwxrwxrwx』, 這九個權(quán)限是三個三個一組的康吵!其中劈榨,我們可以使用數(shù)字來代表各個權(quán)限,各權(quán)限的分數(shù)對照表如下:
r:4 w:2 x:1
每種身份(owner/group/others)各自的三個權(quán)限(r/w/x)分數(shù)是需要累加的晦嵌,例如當權(quán)限為:[-rwxrwx---] 分數(shù)則是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
chmod 770 filename
可以自己下去多進行測試同辣!
文件內(nèi)容查看
概述
Linux系統(tǒng)中使用以下命令來查看文件的內(nèi)容:
cat 由第一行開始顯示文件內(nèi)容
tac 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫惭载!
nl 顯示的時候旱函,順道輸出行號!
more 一頁一頁的顯示文件內(nèi)容
less 與 more 類似描滔,但是比 more 更好的是棒妨,他可以往前翻頁!
head 只看頭幾行
tail 只看尾巴幾行
你可以使用 man [命令]來查看各個命令的使用文檔含长,如 :man cp券腔。
cat 由第一行開始顯示文件內(nèi)容
語法:
cat [-AbEnTv]
選項與參數(shù):
-A :相當於 -vET 的整合選項伏穆,可列出一些特殊字符而不是空白而已;
-b :列出行號纷纫,僅針對非空白行做行號顯示枕扫,空白行不標行號!
-E :將結(jié)尾的斷行字節(jié) $ 顯示出來辱魁;
-n :列印出行號烟瞧,連同空白行也會有行號,與 -b 的選項不同染簇;
-T :將 [tab] 按鍵以 ^I 顯示出來参滴;
-v :列出一些看不出來的特殊字符
測試:
# 查看網(wǎng)絡(luò)配置: 文件地址 /etc/sysconfig/network-scripts/
[root@kuangshen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
tac
tac與cat命令剛好相反,文件內(nèi)容從最后一行開始顯示剖笙,可以看出 tac 是 cat 的倒著寫卵洗!如:
[root@kuangshen ~]# tac /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=dhcp
DEVICE=eth0
nl 顯示行號
語法:
nl [-bnw] 文件
選項與參數(shù):
-b :指定行號指定的方式,主要有兩種:-b a :表示不論是否為空行弥咪,也同樣列出行號(類似 cat -n)过蹂;-b t :如果有空行,空的那一行不要列出行號(默認值)聚至;
-n :列出行號表示的方法酷勺,主要有三種:-n ln :行號在熒幕的最左方顯示;-n rn :行號在自己欄位的最右方顯示扳躬,且不加 0 脆诉;-n rz :行號在自己欄位的最右方顯示,且加 0 贷币;
-w :行號欄位的占用的位數(shù)击胜。
測試:
[root@kuangshen ~]# nl /etc/sysconfig/network-scripts/ifcfg-eth0
1DEVICE=eth0
2BOOTPROTO=dhcp
3ONBOOT=yes
more 一頁一頁翻動
在 more 這個程序的運行過程中,你有幾個按鍵可以按的:
空白鍵 (space):代表向下翻一頁役纹;
Enter :代表向下翻『一行』偶摔;
/字串 :代表在這個顯示的內(nèi)容當中,向下搜尋『字串』這個關(guān)鍵字促脉;
:f :立刻顯示出檔名以及目前顯示的行數(shù)辰斋;
q :代表立刻離開 more ,不再顯示該文件內(nèi)容瘸味。
b 或 [ctrl]-b :代表往回翻頁宫仗,不過這動作只對文件有用,對管線無用旁仿。
[root@kuangshen etc]# more /etc/csh.login
....(中間省略)....
--More--(28%) # 重點在這一行喔藕夫!你的光標也會在這里等待你的命令
less 一頁一頁翻動,以下實例輸出/etc/man.config文件的內(nèi)容:
less運行時可以輸入的命令有:
空白鍵 :向下翻動一頁;
[pagedown]:向下翻動一頁汁胆;
[pageup] :向上翻動一頁梭姓;
/字串 :向下搜尋『字串』的功能;
?字串 :向上搜尋『字串』的功能嫩码;
n :重復(fù)前一個搜尋 (與 / 或 ? 有關(guān)!)
N :反向的重復(fù)前一個搜尋 (與 / 或 ? 有關(guān)罪既!)
q :離開 less 這個程序铸题;
[root@kuangshen etc]# more /etc/csh.login
....(中間省略)....
: # 這里可以等待你輸入命令!
head 取出文件前面幾行
語法:
head [-n number] 文件
選項與參數(shù):-n 后面接數(shù)字琢感,代表顯示幾行的意思丢间!
默認的情況中,顯示前面 10 行驹针!若要顯示前 20 行烘挫,就得要這樣:
[root@kuangshen etc]# head -n 20 /etc/csh.login
tail 取出文件后面幾行
語法:
tail [-n number] 文件
選項與參數(shù):
- -n :后面接數(shù)字,代表顯示幾行的意思
默認的情況中柬甥,顯示最后 10 行饮六!若要顯示最后 20 行,就得要這樣:
[root@kuangshen etc]# tail -n 20 /etc/csh.login
拓展:Linux 鏈接概念
Linux 鏈接分兩種苛蒲,一種被稱為硬鏈接(Hard Link)卤橄,另一種被稱為符號鏈接(Symbolic Link)。
情況下臂外,ln 命令產(chǎn)生硬鏈接窟扑。
硬連接
硬連接指通過索引節(jié)點來進行連接。在 Linux 的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個編號,稱為索引節(jié)點號(Inode Index)关摇。在 Linux 中扰法,多個文件名指向同一索引節(jié)點是存在的。比如:A 是 B 的硬鏈接(A 和 B 都是文件名)鲁豪,則 A 的目錄項中的 inode 節(jié)點號與 B 的目錄項中的 inode 節(jié)點號相同,即一個 inode 節(jié)點對應(yīng)兩個不同的文件名,兩個文件名指向同一個文件忱辅,A 和 B 對文件系統(tǒng)來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問谭溉。
硬連接的作用是允許一個文件擁有多個有效路徑名墙懂,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能扮念。其原因如上所述损搬,因為對應(yīng)該目錄的索引節(jié)點有一個以上的連接。只刪除一個連接并不影響索引節(jié)點本身和其它的連接,只有當最后一個連接被刪除后巧勤,文件的數(shù)據(jù)塊及目錄的連接才會被釋放嵌灰。也就是說,文件真正刪除的條件是與之相關(guān)的所有硬連接文件均被刪除颅悉。
軟連接
另外一種連接稱之為符號連接(Symbolic Link)沽瞭,也叫軟連接。軟鏈接文件有類似于 Windows 的快捷方式剩瓶。它實際上是一個特殊的文件驹溃。在符號連接中,文件實際上是一個文本文件延曙,其中包含的有另一文件的位置信息豌鹤。比如:A 是 B 的軟鏈接(A 和 B 都是文件名),A 的目錄項中的 inode 節(jié)點號與 B 的目錄項中的 inode 節(jié)點號不相同枝缔,A 和 B 指向的是兩個不同的 inode布疙,繼而指向兩塊不同的數(shù)據(jù)塊。但是 A 的數(shù)據(jù)塊中存放的只是 B 的路徑名(可以根據(jù)這個找到 B 的目錄項)愿卸。A 和 B 之間是“主從”關(guān)系灵临,如果 B 被刪除了,A 仍然存在(因為兩個是不同的文件)擦酌,但指向的是一個無效的鏈接俱诸。
測試:
[root@kuangshen /]# cd /home
[root@kuangshen home]# touch f1 # 創(chuàng)建一個測試文件f1
[root@kuangshen home]# ls
f1
[root@kuangshen home]# ln f1 f2 # 創(chuàng)建f1的一個硬連接文件f2
[root@kuangshen home]# ln -s f1 f3 # 創(chuàng)建f1的一個符號連接文件f3
[root@kuangshen home]# ls -li # -i參數(shù)顯示文件的inode節(jié)點信息
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f2
397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1
從上面的結(jié)果中可以看出,硬連接文件 f2 與原文件 f1 的 inode 節(jié)點相同赊舶,均為 397247睁搭,然而符號連接文件的 inode 節(jié)點不同。
# echo 字符串輸出 >> f1 輸出到 f1文件
[root@kuangshen home]# echo "I am f1 file" >>f1
[root@kuangshen home]# cat f1
I am f1 file
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
I am f1 file
[root@kuangshen home]# rm -f f1
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
cat: f3: No such file or directory
通過上面的測試可以看出:當刪除原始文件 f1 后笼平,硬連接 f2 不受影響园骆,但是符號連接 f1 文件無效;
依此您可以做一些相關(guān)的測試寓调,可以得到以下全部結(jié)論:
刪除符號連接f3,對f1,f2無影響锌唾;
刪除硬連接f2,對f1,f3也無影響夺英;
刪除原文件f1晌涕,對硬連接f2沒有影響,導致符號連接f3失效痛悯;
同時刪除原文件f1,硬連接f2余黎,整個文件會真正的被刪除。