絕對路徑和相對路徑
我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /窥翩。
其他目錄通過掛載可以將它們添加到樹中业岁,通過解除掛載可以移除它們。
在開始本教程前我們需要先知道什么是絕對路徑與相對路徑寇蚊。
絕對路徑:
路徑的寫法笔时,由根目錄 / 寫起,例如:/usr/share/doc 這個目錄仗岸。
相對路徑:
路徑的寫法允耿,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時扒怖,可以寫成:cd ../man 這就是相對路徑的寫法啦较锡!
處理目錄的常用命令
接下來我們就來看幾個常見的處理目錄的命令吧:
ls: 列出目錄
cd:切換目錄
pwd:顯示目前的目錄
mkdir:創(chuàng)建一個新的目錄
rmdir:刪除一個空的目錄
cp: 復制文件或目錄
rm: 移除文件或目錄
mv: 移動文件與目錄,或修改文件與目錄的名稱
你可以使用 man [命令] 來查看各個命令的使用文檔盗痒,如 :man cp蚂蕴。
ls (列出目錄)
在Linux系統(tǒng)當中, ls 命令可能是最常被運行的俯邓。
語法:
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱
選項與參數(shù):
-a :全部的文件骡楼,連同隱藏文件( 開頭為 . 的文件) 一起列出來(常用)
-l :長數(shù)據(jù)串列出,包含文件的屬性與權限等等數(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 ~</pre>
接下來大家多操作幾次應該就可以很好的理解 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</pre>
mkdir (創(chuàng)建新目錄)
如果想要創(chuàng)建新的目錄的話,那么就使用mkdir (make directory)吧。
mkdir [-mp] 目錄名稱
選項與參數(shù):
-m :配置文件的權限喔挣饥!直接配置除师,不需要看默認權限 (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)建權限為 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</pre>
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
因為尚有內容舵稠,所以無法刪除!
[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</pre>
注意:這個 rmdir 僅能刪除空的目錄谣膳,你可以使用 rm 命令來刪除非空目錄阵幸,后面我們會將荠割!
cp ( 復制文件或目錄 )
語法:
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
選項與參數(shù):
-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-p:連同文件的屬性一起復制過去融撞,而非使用默認屬性(備份常用)盼铁;
-d:若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身尝偎;
-r:遞歸持續(xù)復制,用於目錄的復制行為鹏控;(常用)
-f:為強制(force)的意思致扯,若目標文件已經(jīng)存在且無法開啟,則移除后再嘗試一次当辐;
-i:若目標檔(destination)已經(jīng)存在時抖僵,在覆蓋時會先詢問動作的進行(常用)
-l:進行硬式連結(hard link)的連結檔創(chuàng)建,而非復制文件本身缘揪。
-s:復制成為符號連結檔 (symbolic link)耍群,亦即『捷徑』文件;
-u:若 destination 比 source 舊才升級 destination 找筝!
測試:
找一個有文件的目錄蹈垢,我這里找到 root目錄
[root@kuangshen home]# cd /root
[root@kuangshen ~]# ls
install.sh
[root@kuangshen ~]# cd /home
復制 root目錄下的install.sh 到 home目錄下
[root@kuangshen home]# cp /root/install.sh /home
[root@kuangshen home]# ls
install.sh
再次復制,加上-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 :遞歸刪除罢抛恪!最常用在目錄的刪除了坎藐!這是非常危險的選項N埂!!
測試:
將剛剛在 cp 的實例中創(chuàng)建的 install.sh刪除掉吵聪!
[root@kuangshen home]# rm -i install.sh
rm: remove regular file ‘install.sh’? y
如果加上 -i 的選項就會主動詢問喔凌那,避免你刪除到錯誤的檔名!
盡量不要在服務器上使用 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)
測試:
復制一個文件到當前目錄
[root@kuangshen home]# cp /root/install.sh /home
創(chuàng)建一個文件夾 test
[root@kuangshen home]# mkdir test
將復制過來的文件移動到我們創(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),不同的用戶處于不同的地位住练,擁有不同的權限地啰。為了保護系統(tǒng)的安全性,Linux系統(tǒng)對不同的用戶訪問同一文件(包括目錄文件)的權限做了不同的規(guī)定讲逛。
在Linux中我們可以使用ll
或者ls –l
命令來顯示一個文件的屬性以及文件所屬的用戶和組亏吝,如:
[圖片上傳失敗...(image-f710f3-1653630776643)]
實例中,boot文件的第一個屬性用"d"表示盏混。"d"在Linux中代表該文件是一個目錄文件蔚鸥。
在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等:
當為[ d ]則是目錄
當為[ - ]則是文件许赃;
若是[ l ]則表示為鏈接文檔 ( link file )止喷;
若是[ b ]則表示為裝置文件里面的可供儲存的接口設備 ( 可隨機存取裝置 );
若是[ c ]則表示為裝置文件里面的串行端口設備图焰,例如鍵盤启盛、鼠標 ( 一次性讀取裝置 )。
接下來的字符中技羔,以三個為一組僵闯,且均為『rwx』 的三個參數(shù)的組合。
其中藤滥,[ r ]代表可讀(read)鳖粟、[ w ]代表可寫(write)、[ x ]代表可執(zhí)行(execute)拙绊。
要注意的是向图,這三個權限的位置不會改變泳秀,如果沒有權限,就會出現(xiàn)減號[ - ]而已榄攀。
每個文件的屬性由左邊第一部分的10個字符來確定(如下圖):
[圖片上傳失敗...(image-38a0ec-1653630776643)]
從左至右用0-9這些數(shù)字來表示嗜傅。
第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權限檩赢。第4-6位確定屬組(所有者的同組用戶)擁有該文件的權限吕嘀,第7-9位確定其他用戶擁有該文件的權限。
其中:
第1贞瞒、4偶房、7位表示讀權限,如果用"r"字符表示军浆,則有讀權限棕洋,如果用"-"字符表示,則沒有讀權限乒融;
第2掰盘、5、8位表示寫權限簇抵,如果用"w"字符表示庆杜,則有寫權限,如果用"-"字符表示沒有寫權限碟摆;
第3、6叨橱、9位表示可執(zhí)行權限典蜕,如果用"x"字符表示,則有執(zhí)行權限罗洗,如果用"-"字符表示愉舔,則沒有執(zhí)行權限。
對于文件來說伙菜,它都有一個特定的所有者轩缤,也就是對該文件具有所有權的用戶。
同時贩绕,在Linux系統(tǒng)中火的,用戶是按組分類的,一個用戶屬于一個或多個組淑倾。
文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶馏鹤。
因此,Linux系統(tǒng)按文件所有者娇哆、文件所有者同組用戶和其他用戶來規(guī)定了不同的文件訪問權限湃累。
在以上實例中勃救,boot 文件是一個目錄文件,屬主和屬組都為 root治力。
修改文件屬性
1蒙秒、chgrp:更改文件屬組
chgrp [-R] 屬組名 文件名
-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時宵统,如果加上-R的參數(shù)晕讲,那么該目錄下的所有文件的屬組都會更改。
2榜田、chown:更改文件屬主益兄,也可以同時更改文件屬組
chown [–R] 屬主名 文件名
chown [-R] 屬主名:屬組名 文件名
3、chmod:更改文件9個屬性
chmod [-R] xyz 文件或目錄
Linux文件屬性有兩種設置方法箭券,一種是數(shù)字净捅,一種是符號。
Linux文件的基本權限就有九個辩块,分別是owner/group/others三種身份各有自己的read/write/execute權限蛔六。
先復習一下剛剛上面提到的數(shù)據(jù):文件的權限字符為:『-rwxrwxrwx』, 這九個權限是三個三個一組的废亭!其中国章,我們可以使用數(shù)字來代表各個權限,各權限的分數(shù)對照表如下:
r:4 w:2 x:1
每種身份(owner/group/others)各自的三個權限(r/w/x)分數(shù)是需要累加的豆村,例如當權限為:[-rwxrwx---] 分數(shù)則是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
chmod 770 filename
可以自己下去多進行測試液兽!
文件內容查看
概述
Linux系統(tǒng)中使用以下命令來查看文件的內容:
cat 由第一行開始顯示文件內容
tac 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫掌动!
nl 顯示的時候四啰,順道輸出行號!
more 一頁一頁的顯示文件內容
less 與 more 類似粗恢,但是比 more 更好的是柑晒,他可以往前翻頁!
head 只看頭幾行
tail 只看尾巴幾行
你可以使用 man [命令]來查看各個命令的使用文檔眷射,如 :man cp匙赞。
cat 由第一行開始顯示文件內容
語法:
cat [-AbEnTv]
選項與參數(shù):
-A :相當於 -vET 的整合選項,可列出一些特殊字符而不是空白而已妖碉;
-b :列出行號涌庭,僅針對非空白行做行號顯示,空白行不標行號嗅绸!
-E :將結尾的斷行字節(jié) $ 顯示出來脾猛;
-n :列印出行號,連同空白行也會有行號鱼鸠,與 -b 的選項不同猛拴;
-T :將 [tab] 按鍵以 ^I 顯示出來羹铅;
-v :列出一些看不出來的特殊字符
測試:
查看網(wǎng)絡配置: 文件地址 /etc/sysconfig/network-scripts/
[root@kuangshen ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
tac
tac與cat命令剛好相反,文件內容從最后一行開始顯示愉昆,可以看出 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 :代表向下翻『一行』关贵;
/字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字卖毁;
:f :立刻顯示出檔名以及目前顯示的行數(shù)揖曾;
q :代表立刻離開 more ,不再顯示該文件內容亥啦。
b 或 [ctrl]-b :代表往回翻頁翩肌,不過這動作只對文件有用,對管線無用禁悠。
[root@kuangshen etc]# more /etc/csh.login
....(中間省略)....
--More--(28%) # 重點在這一行喔!你的光標也會在這里等待你的命令
less 一頁一頁翻動兑宇,以下實例輸出/etc/man.config文件的內容:
less運行時可以輸入的命令有:
空白鍵 :向下翻動一頁碍侦;
[pagedown]:向下翻動一頁;
[pageup] :向上翻動一頁隶糕;
/字串 :向下搜尋『字串』的功能瓷产;
?字串 :向上搜尋『字串』的功能;
n :重復前一個搜尋 (與 / 或 ? 有關枚驻!)
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é)點對應兩個不同的文件名诵原,兩個文件名指向同一個文件砚蓬,A 和 B 對文件系統(tǒng)來說是完全平等的恒界。刪除其中任何一個都不會影響另外一個的訪問纤虽。
硬連接的作用是允許一個文件擁有多個有效路徑名誉碴,這樣用戶就可以建立硬連接到重要文件邻眷,以防止“誤刪”的功能蔓钟。其原因如上所述科吭,因為對應該目錄的索引節(jié)點有一個以上的連接囤萤。只刪除一個連接并不影響索引節(jié)點本身和其它的連接纯出,只有當最后一個連接被刪除后蚯妇,文件的數(shù)據(jù)塊及目錄的連接才會被釋放。也就是說暂筝,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除箩言。
軟連接
另外一種連接稱之為符號連接(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 之間是“主從”關系镐确,如果 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
從上面的結果中可以看出,硬連接文件 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 文件無效;
依此您可以做一些相關的測試竭翠,可以得到以下全部結論:
刪除符號連接f3,對f1,f2無影響振坚;
刪除硬連接f2,對f1,f3也無影響斋扰;
刪除原文件f1渡八,對硬連接f2沒有影響,導致符號連接f3失效传货;
同時刪除原文件f1,硬連接f2屎鳍,整個文件會真正的被刪除。