第六章 Linux文件與目錄管理

1.目錄與路徑

linux系統(tǒng)中,所有的文件與目錄是由跟目錄開(kāi)始的。那是所有目錄與文件的源頭,然后一個(gè)一個(gè)分支下來(lái),我們稱這種目錄配置方式為:目錄樹(shù)結(jié)構(gòu)。

1.1 相對(duì)路徑與絕對(duì)路徑

相對(duì)路徑:路徑寫法不是由"/"寫起,例如你現(xiàn)在在/usr/share/doc目錄下,要到/usr/share/man底下時(shí),可以寫成"cd ../man"。

絕對(duì)路徑:路徑的寫法由"/"寫起,例如"cd /usr/share/doc"這個(gè)目錄。

1.2 目錄的相關(guān)操作

特殊目錄

cd(change directory,變換目錄)

pwd(顯示目前所在的目錄)

[root@study ~]# pwd [-P]
選項(xiàng)與參數(shù):
-P : 顯示出真實(shí)的路徑,而不是使用鏈接路徑。

mkdir(建立新目錄)

[root@study ~]# mkdir [-mp] 目錄名稱
選項(xiàng)與參數(shù): 
-m:配置文件案的權(quán)限。直接設(shè)定,不需要看預(yù)設(shè)權(quán)限的臉色。
-p:幫助你直接將所需要的目錄(包含上層目錄)遞歸建立起來(lái)

范例:在/tmp下嘗試建立數(shù)個(gè)新目錄
[root@study ~]# cd /tmp
[root@study tmp]# mkdir test  

范例:遞歸建立一個(gè)目錄
[root@study tmp]# mkdir test/test2/test3  
mkdir:can't create directory 'test/test2/test3' :No such file or directory
[root@study tmp]# mkdir -p test/test2/test3
原來(lái)是test3上層沒(méi)先建test2的緣故。所以使用-p參數(shù)建立多級(jí)目錄。

范例:建立權(quán)限為rwx--x--x的目錄
[root@study tmp]# mkdir -m 711 test

rmdir(刪除空的目錄)

[root@study ~]# rmdir [-p] 目錄名稱
選項(xiàng)與參數(shù):
-p : 連同上層空的目錄一起刪除

范例:將mkdir范例中建立的目錄刪除
[root@study tmp]# rmdir test   ##刪除成功
[root@study tmp]# rmdir test1 ## 因?yàn)檫€有內(nèi)容,所以無(wú)法刪除!
rmdir:failed to remove 'test1' : Directory not empty
[root@study tmp]# rmdir -p test1/test2/test3 ## 刪除成功

1.3 關(guān)于執(zhí)行文件路徑的變量: $PATH

經(jīng)過(guò)FHS那一章說(shuō)明后,我們查閱文件屬性的指令ls完整文件名是:/bin/ls,為什么我們可以在任何地方直接輸入ls就可以使用呢?這是因?yàn)榄h(huán)境變量PATH的幫助。

現(xiàn)在使用"echo PATH"看看到底有哪些目錄被定義了?"echo"有顯示、輸出的意思,而PATH前面的表示后面接的是變量。

范例:先用root身份列出搜尋的路徑是什么
[root@study ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/bin:/usr/sbin:/usr/bin:/root/bin

范例:用dmtsai的身份列出搜尋的路徑是什么
[root@study ~]# exit 
[dmtsai@study ~]# echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
## 目前的/bin是鏈接到/usr/bin中的。

PATH是由一堆目錄所組成的,每個(gè)目錄中介用冒號(hào)隔開(kāi),每個(gè)目錄有順序之分的??瓷厦娴妮敵?,可以發(fā)現(xiàn)無(wú)論是root還是dmtsai都有/bin或/usr/bin這個(gè)目錄在PATH內(nèi),所以當(dāng)然能夠在任何地方執(zhí)行l(wèi)s了。

注意問(wèn)題:為什么${path}搜尋的目錄不加入本目錄(.)?
答:
1.如果在PATH中加入本目錄(.)后,確實(shí)能夠在指令所在目錄進(jìn)行指令的執(zhí)行。但我們的工作目錄經(jīng)常切換,因此能夠執(zhí)行的指令會(huì)有變動(dòng):每個(gè)目錄底下的可執(zhí)行文件都不相同。
2.如果有壞心使用者在/tmp底下做了一個(gè)指令,/tmp是大家都能寫入的環(huán)境。假設(shè)這個(gè)指令會(huì)竊取用戶數(shù)據(jù),如果你使用root身份來(lái)執(zhí)行這個(gè)命令,就慘了。如果這個(gè)命令的名稱又是經(jīng)常用到的ls時(shí),那就更危險(xiǎn)。

  • 不同身份使用這預(yù)設(shè)的PATH不同,默認(rèn)能夠隨意執(zhí)行的指令也不同;

  • PATH是可以修改的;

  • 使用絕對(duì)路徑或相對(duì)路徑直接制定某個(gè)指令的文件名來(lái)執(zhí)行,會(huì)比搜尋PATH來(lái)的正確;

  • 指令應(yīng)該要放到正確的目錄下,執(zhí)行才會(huì)比較方便;

  • 本目錄(.)最好不要放到PATH中;

2.文件與目錄管理

2.1 文件與目錄的檢視:ls

ls命令

常用選項(xiàng)參數(shù):

-a : 全部的文件,連同隱藏文檔一起列出來(lái)
-d : 僅列出目錄本身,不是列出目錄內(nèi)所有文件數(shù)據(jù)
-l : 長(zhǎng)數(shù)據(jù)串行輸出,包含文件的屬性與權(quán)限等等數(shù)據(jù)

2.2 復(fù)制、刪除、移動(dòng):cp、rm、mv

  • cp:復(fù)制目錄或文件
cp命令

常用選項(xiàng)參數(shù):

-a : 相當(dāng)于"-dr --preserve=all"
-i : 若目標(biāo)文件已經(jīng)存在時(shí),在覆蓋時(shí)會(huì)先詢問(wèn)動(dòng)作的進(jìn)行
-p : 連同文件的屬性(權(quán)限、用戶、時(shí)間)一起復(fù)制過(guò)去
-r : 遞歸持續(xù)復(fù)制,用于目錄的復(fù)制行為
-s : 復(fù)制成為符號(hào)鏈接文件,即"快捷方式"文件
-d : 復(fù)制鏈接文件的屬性
  • rm:移除目錄或文件

選項(xiàng)參數(shù):

-f :就是force,忽略不存在的文件,不會(huì)出現(xiàn)警告信息
-i :在刪除前會(huì)詢問(wèn)使用者是否動(dòng)作
-f :遞歸刪除。
  • rmdir :刪除空目錄

  • mv :移動(dòng)文件、目錄或更名

-f :force,如果目標(biāo)文件已經(jīng)存在,不會(huì)詢問(wèn)直接覆蓋掉
-i :若目標(biāo)文件已經(jīng)存在,就會(huì)詢問(wèn)是否覆蓋
-u:若目標(biāo)文件已經(jīng)存在,且source比較新,才會(huì)更新

2.3 獲取路徑的文件與目錄名稱

取得路徑的文件與目錄名稱

3.文件內(nèi)容查閱

3.1 直接檢視文件內(nèi)容

  • cat :由第一行開(kāi)始顯示文件內(nèi)容
cat命令

常用選項(xiàng)參數(shù):

-n : 打印出行號(hào),連同空白行也會(huì)有行號(hào),與-b的選項(xiàng)不同
-b : 列出行號(hào),空白行不標(biāo)記

  • tac : 從最后一行開(kāi)始顯示,可以看出tac是cat倒著寫
tac命令

  • nl : 顯示的時(shí)候,順道輸出行號(hào)
nl命令

3.2 可翻頁(yè)檢視

more:一頁(yè)一頁(yè)顯示文件內(nèi)容

more命令

快捷鍵:

  • 空格鍵:向下翻一頁(yè)

  • 回車鍵:向上翻一頁(yè)

  • /字符串:向下搜索"字符串"這個(gè)關(guān)鍵詞

  • :f :立刻顯示出文件名以及目前顯示的行數(shù)

  • q :立刻推出more

  • b或者[crtl]+b:往回翻頁(yè),這個(gè)動(dòng)作只對(duì)文件有用,對(duì)管道無(wú)用。


less :與more相似,但是它可以往前翻頁(yè)

快捷鍵:

  • 空格鍵:向下翻一頁(yè)

  • [pagedown] :向下翻一頁(yè)

  • [pageup] : 向上翻一頁(yè)

  • /字符串:向下搜索"字符串"功能

  • ?字符串:向上搜索"字符串"功能

  • n:重復(fù)前一個(gè)搜索動(dòng)作

  • N:反向的重復(fù)前一個(gè)搜索動(dòng)作

  • g:前進(jìn)到這個(gè)資料的第一行

  • G:前進(jìn)到這個(gè)數(shù)據(jù)的最后一行

  • q:離開(kāi)less


3.3 資料截取

head : 只看頭幾行

常用選項(xiàng)參數(shù):

-n ${number} :-n后面接數(shù)字,代表顯示多少行,默認(rèn)是前20行

tail:取出后面幾行

常用選項(xiàng)參數(shù):

-n ${number}:后面接數(shù)字,代表顯示多少行
-f:標(biāo)識(shí)持續(xù)偵測(cè)后面所接的內(nèi)容,如果有新內(nèi)容被添加則向下滾動(dòng)

3.4 非純文本檔:od

我們?cè)趺床殚哹inary file呢?可以利用od這個(gè)指令!

od常用選項(xiàng)參數(shù)

3.5 創(chuàng)建文件:touch

touch命令參數(shù)

4.文件與目錄的默認(rèn)權(quán)限與隱藏權(quán)限

上一章我們都知道一個(gè)文件有若干個(gè)屬性,包括讀寫執(zhí)行等基本權(quán)限(rwx)、是否為目錄(d)、文件(-)或者連結(jié)檔(l)等等。

除了基本權(quán)限,Linux傳統(tǒng)的Ext2/Ext3/Ext4文件系統(tǒng)下,我們還可以設(shè)定其他的系統(tǒng)隱藏屬性,這部分可以用"chattr"設(shè)定,用"lsattr"查看,最重要的屬性就是可以設(shè)定其不可修改的特性。(文件的擁有者都不能修改,安全機(jī)制上很重要。)在CentOS 7.x中利用xfs作為預(yù)設(shè)文件系統(tǒng),但是xfs只有chattr命令的部分參數(shù)支持。

4.1 文件預(yù)設(shè)權(quán)限:umask

那么新增一個(gè)文件或目錄,默認(rèn)的權(quán)限是什么?"umask"就起作用了。

umask

umask的數(shù)字是該默認(rèn)值需要減掉的權(quán)限。

4.2 文件隱藏屬性

需要注意的是,下面的指令只能在Ext2/Ext3/Ext4的Linux傳統(tǒng)文件系統(tǒng)上完整生效。

  • chattr:配置文件隱藏屬性
chattr命令參數(shù)

常用選項(xiàng)參數(shù)

-a:設(shè)定a后,本文件只能增加數(shù)據(jù),而不能刪除也不能修改數(shù)據(jù),只有root才能設(shè)定這個(gè)屬性。
-i:可以讓一個(gè)文件不能被刪除、改名、設(shè)定鏈接也無(wú)法寫入或新增數(shù)據(jù),只有root才能設(shè)定此屬性。
  • lsattr:顯示文件隱藏屬性
lsattr命令參數(shù)

4.3 文件特殊權(quán)限:SUID、SGID、SBIT

Set UID

當(dāng)s標(biāo)志在文件擁有者的x權(quán)限上時(shí),例如/usr/bin/passwd這個(gè)文件的權(quán)限狀態(tài)是"-rwsr-xr-x",此時(shí)被稱為Set UID,有以下幾個(gè)功能:

  • SUID權(quán)限僅對(duì)二進(jìn)制程序有效;

  • 執(zhí)行者對(duì)于該程序需要有x的可執(zhí)行權(quán)限;

  • 本權(quán)限僅在執(zhí)行該程序的過(guò)程中有效;

  • 執(zhí)行者將具有該程序擁有者的權(quán)限;

例如:Linux系統(tǒng)中,所有的賬號(hào)密碼都記錄在/etc/shadow這個(gè)文件,這個(gè)文件權(quán)限是"----------- 1 root root",意思是這個(gè)文件僅有root可讀且僅有root可以強(qiáng)制寫入。那么我們的test賬號(hào)能否自行修改自己的密碼?當(dāng)然可以了!

明明/etc/shadow不能讓別的賬戶存取,為什么test用戶還能修改?因?yàn)樗腟UID權(quán)限:

  • test對(duì)于/usr/bin/passwd這個(gè)程序來(lái)說(shuō)是具有x權(quán)限的;

  • passwd的擁有者是root賬號(hào);

  • test執(zhí)行passwd過(guò)程中,會(huì)暫時(shí)獲得root權(quán)限;

  • /etc/shadow就可以被test執(zhí)行的passwd修改了;

注意:SUID僅能勇仔binary program上,不能用在shell script上。

Set GID

當(dāng)s標(biāo)志在文件的群組的x時(shí),則成為Set GID。與SUID不同的是,SGID可以針對(duì)文件或目錄來(lái)設(shè)定。

對(duì)文件來(lái)說(shuō),SGID有如下的功能:

  • SGID對(duì)二進(jìn)制程序有用;

  • 程序執(zhí)行者對(duì)于該程序來(lái)說(shuō),需具備x權(quán)限;

  • 執(zhí)行者在執(zhí)行的過(guò)程中將會(huì)獲得該程序群組的支持;

對(duì)目錄來(lái)說(shuō),SGID有如下的功能:

  • 用戶若對(duì)于此目錄具有r與x的權(quán)限時(shí),該用戶能夠進(jìn)入此目錄;

  • 用戶在此目錄下的有效群組將會(huì)變成該目錄的群組;

  • 若用戶在此目錄下具有w的權(quán)限(可以新建文件),則使用者建立的新文件,該新文件的群組與此目錄的群組相同。

Sticky Bit

SBIT只針對(duì)目錄有效,對(duì)于文件已經(jīng)沒(méi)有效果了,對(duì)目錄的作用是:

  • 當(dāng)用戶對(duì)于此目錄具有w、x權(quán)限,亦即具有寫入的權(quán)限時(shí),用戶在該目錄下建立新文件或目錄時(shí),僅有自己與root才有權(quán)限刪除該文件;

當(dāng)test用戶于A目錄是具有群組或其他人的身份,并且擁有該目錄的w權(quán)限時(shí),表示"test用戶對(duì)該目錄內(nèi)任何人建立對(duì)目錄或文件都可以進(jìn)行刪除、更名、移動(dòng)等操作"。如果A目錄加上了SBIT權(quán)限,"test用戶只能對(duì)自己建立對(duì)文件或目錄進(jìn)行刪除、更名、移動(dòng)操作,無(wú)法刪除別人的。"

SUID、SGID、SBIT 權(quán)限設(shè)定

  • 4 為SUID

  • 2 為SGID

  • 1 為SBIT

例如要將一個(gè)文件的權(quán)限改為"-rwsr-xr-x"時(shí),由于s在用戶權(quán)限中,所以使用SUID。因此在原先的755上還要加上4,也就是"chmod 4755 filename"。

也可以使用符號(hào)來(lái)處理:SUID為u+s,SGID為g+s,SBIT為o+t。

4.4 觀察文件類型:file

如果想知道文件的基本數(shù)據(jù),是屬于ASCII、data文件還是binary等需要用"file"這個(gè)指令。

5.指令與文件的搜尋

5.1 腳本文件名的搜索

which:尋找執(zhí)行檔

選項(xiàng)參數(shù):

-a:將所有由PATH目錄中可以找到的指令均列出,而不只第一個(gè)被找到的指令名稱。

5.2 文件檔名的搜索

whereis:由一些特定的目錄中尋找文件、文件名

whereis命令參數(shù)

locate、updatedb

locate參數(shù)命令

locate尋找數(shù)據(jù)是在已建立的數(shù)據(jù)庫(kù)"/var/lib/mlocate/"里面的數(shù)據(jù)搜索的,不用直接在硬盤中存取數(shù)據(jù),所以很塊。

而數(shù)據(jù)庫(kù)的建立默認(rèn)是每天執(zhí)行一次,如果你新建立的文件,當(dāng)天用locate,它會(huì)告訴你找不到。

那么可以手動(dòng)更新db嗎?所以就會(huì)用到updatedb命令。

  • updatedb:會(huì)根據(jù)/etc/updatedb.conf的設(shè)定去搜索系統(tǒng)硬盤內(nèi)的文件名,并更新/var/lib/mlocate內(nèi)的數(shù)據(jù)庫(kù)文件;

  • locate:依據(jù)/var/lib/mlocate內(nèi)的數(shù)據(jù)庫(kù)記錄,找出用戶輸入的關(guān)鍵詞文件名。

find

find命令選項(xiàng)參數(shù)
find命令選項(xiàng)參數(shù)
find命令選項(xiàng)參數(shù)
find命令選項(xiàng)參數(shù)

總結(jié)

  • 檢查文件的內(nèi)容可使用的指令包括有:cat、tac、nl、more、less、head、tail等

  • 新建文件/目錄時(shí),新文件的預(yù)設(shè)權(quán)限使用umask規(guī)范。默認(rèn)目錄完全權(quán)限為"drwxrwxrwx",文件則為"-rw-rw-rw-"。

  • 文件具有SUID權(quán)限時(shí),代表當(dāng)前用戶執(zhí)行此binary程序時(shí),在執(zhí)行過(guò)程中用戶會(huì)暫時(shí)具有程序擁有者的權(quán)限。

  • 目錄具有SGID的特殊權(quán)限時(shí),代表用戶在這個(gè)目錄下新建文件的群組都會(huì)與該目錄的群組相同。

  • 目錄具有SBIT的特殊權(quán)限時(shí),代表該目錄下用戶建立的文件只有自己和root可以刪除。

  • 觀察文件的類型可以使用file來(lái)查看。

  • 搜索指令的完整文件名可用which、type,這兩個(gè)指令都透過(guò)PATH變量來(lái)搜索。

  • 搜索文件的完整檔名可以使用whereis找特定目錄或locate到數(shù)據(jù)庫(kù)搜索,而不是真正的搜索文件系統(tǒng)。

  • 利用find可以加入許多選項(xiàng)來(lái)直接查詢文件系統(tǒng),以獲得自己想要知道的檔名。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容