文件和目錄管理
FHS
FHS普监,文件系統(tǒng)層次標(biāo)準(zhǔn)贵试。多數(shù)Linux版本采用這種文件組織形式,類似于 Windows 操作系統(tǒng)中C盤的文件目錄凯正,采用樹形結(jié)構(gòu)組織文件毙玻。
FHS,定義了系統(tǒng)中每個(gè)區(qū)域的用途廊散、所需要的最小構(gòu)成的文件和目錄桑滩,同時(shí)還給出了例外處理和矛盾處理。
根目錄
在 Linux 中允睹,根目錄使用“ROOT”或者“/”表示运准。
ls /
FHS 定義的目錄結(jié)構(gòu)
目錄 | 目錄的用途 |
---|---|
/bin | 常見的用戶指令 |
/boot | 內(nèi)核和啟動(dòng)文件 |
/dev | 設(shè)備文件 |
/etc | 系統(tǒng)和服務(wù)的配置文件 |
/home | 系統(tǒng)默認(rèn)的普通用戶的家目錄 |
/lib | 系統(tǒng)函數(shù)庫(kù)目錄 |
/lost+found | ext3 文件系統(tǒng)需要的目錄,用于磁盤檢查 |
/mnt | 系統(tǒng)加載文件系統(tǒng)時(shí)常用的掛載點(diǎn) |
/opt | 第三方軟件安裝目錄 |
/proc | 虛擬文件系統(tǒng) |
/root | root 用戶的家目錄 |
/sbin | 存放系統(tǒng)管理指令 |
/tmp | 臨時(shí)文件的存放目錄 |
/usr | 存放與用戶直接相關(guān)的文件和目錄 |
/media | 系統(tǒng)用來(lái)掛載光驅(qū)等臨時(shí)文件系統(tǒng)的掛載點(diǎn) |
絕對(duì)路徑和相對(duì)路徑
絕對(duì)路徑
絕對(duì)路徑一定是以“/”開頭的
pwd // 查看當(dāng)前路徑
特殊目錄
在每個(gè)目錄下缭受,都會(huì)固定存在兩個(gè)特殊目錄胁澳,分別是一個(gè)點(diǎn)(.)和兩個(gè)點(diǎn)(..)的目錄。前者表示的是當(dāng)前目錄米者,后者表示的是上層目錄韭畸。
在Linux下,所有以點(diǎn)開頭的文件都是"隱藏文件"蔓搞,對(duì)于這類文件胰丁,只是用命令ls-l是看不到的,必須要使用ls-la才可以看到喂分。
相對(duì)路徑
顧名思義锦庸,“相對(duì)路徑”的關(guān)鍵在于當(dāng)前在什么路徑下。假設(shè)當(dāng)前目錄在/usr/local下蒲祈,那么它的上層目錄(/usr目錄)可以用../表示甘萧,而/usr/local的下層目錄(src)則可以用./src表示萝嘁。
cd ..
文件的相關(guān)操作
Linux 遵循一切皆文件的規(guī)則。
創(chuàng)建文件
touch
如果文件存在幔嗦,則更改文件的修改時(shí)間屬性酿愧。
刪除文件
rm FileName
移動(dòng)或重命名文件
移動(dòng)文件
mv FileName
重命名文件
mv OldFileName NewFileName
Linux 下的目錄也是一種“文件”,所以這里將的 mv 命令也用樣適用于對(duì)目錄的操作邀泉。
查看文件
cat FileName
查看文件頭
有時(shí)候文件非常大,使用 cat 命令顯示出來(lái)的內(nèi)容太多钝鸽,而我們可能并不像查看全部?jī)?nèi)容汇恤,只是想看看文件開始部分的內(nèi)容,這時(shí)候可以使用 head 命令了拔恰,后面跟上需要查看的文件名就可以了因谎。默認(rèn)顯示10行。
head FileName
也可以使用 -n 參數(shù)指定顯示的行數(shù)
查看文件尾
tail FileName
和 head 命令正好相反颜懊,默認(rèn)同樣是10行财岔。
但是 tail 還有個(gè)更實(shí)用的功能,就是可以動(dòng)態(tài)地查看文件尾河爹。這對(duì)查看一些不斷改變的文件來(lái)說(shuō)是非常有用的匠璧。比如系統(tǒng)中會(huì)有很多日志文件,這些文件是會(huì)隨時(shí)變化的咸这。
要查看這些動(dòng)態(tài)地文件可以使用 -f 參數(shù)夷恍。
目錄的相關(guān)炒作
與其他操作系統(tǒng)一樣,Linux 也有目錄的概念媳维,目錄的作用在于存放其他的目錄和文件酿雪。
進(jìn)入目錄
cd DirName
創(chuàng)建目錄
mkdir DirName
使用 -p 參數(shù)可以一次性創(chuàng)建所有目錄
刪除目錄
rm
刪除非空目錄,加上參數(shù) -f
遞歸刪除目錄,加上參數(shù) -r
通常使用 rm -rf 來(lái)刪除目錄侄刽,但是有安全風(fēng)險(xiǎn)指黎。
文件和目錄的復(fù)制
cp FileName|DirName
第三個(gè)參數(shù)為重命名
cp FileName|DirName [newName]
文件和目錄的權(quán)限
查看文件或目錄的權(quán)限
ls -al
這條命令中 -l 表示列出每個(gè)文件的詳細(xì)信息,-a 表示同時(shí)列出隱藏文件!
第一列便是文件的類別和權(quán)限州丹。
其中第一個(gè)字符的取值范圍如下:
第一個(gè)字符 | 含義 |
---|---|
d | 目錄 |
- | 普通文件 |
l | 鏈接文件 |
b | 塊文件 |
c | 字符文件 |
s | socket 文件 |
p | 管道文件 |
第二列代表連接數(shù)醋安,除了目錄文件之外,其他所有文件的連接數(shù)都是1当叭,目錄文件的連接數(shù)是該目錄中包含其他目錄的總個(gè)數(shù)+2茬故,也就是說(shuō),如果目錄A中的包含目錄B和C蚁鳖,則目錄A的連接數(shù)為4磺芭。
第三列代表該文件的所有人。
第四列代表該文件的所有組醉箕。
第五列代表文件的大小钾腺。
第六列代該文件的創(chuàng)建時(shí)間或最近的修改時(shí)間徙垫。
第七列是文件名。
文件的隱藏屬性
Linux 下的文件還有一些隱藏屬性放棒,必須使用如下命令查看:
lsattr
結(jié)果中第一列是13個(gè)小短橫姻报,其中每一個(gè)下橫線都是一個(gè)屬性,如果當(dāng)前位置上設(shè)置了該屬性就會(huì)顯示相對(duì)應(yīng)的字符间螟。
如果要設(shè)置文件的隱藏屬性吴旋,需要使用如下命令:
chattr
常用屬性 | 含義 |
---|---|
a | 文件只能在尾部增加數(shù)據(jù)而不能被刪除 |
i | 文件將無(wú)法寫入、改名厢破、刪除荣瑟,即便是root用戶也不行 |
改變文件權(quán)限
Linux下每個(gè)文件都定義了文件擁有者(user)、擁有組(group)摩泪、其他人(others)的權(quán)限笆焰,使用 u、g见坑、o 來(lái)分別表示擁有者嚷掠、擁有組、其他人荞驴,而對(duì)應(yīng)的具體權(quán)限則使用 rwx 的組合來(lái)定義不皆,增加權(quán)限使用 + 號(hào),刪除權(quán)限使用 - 號(hào)戴尸,詳細(xì)權(quán)限使用 = 號(hào)粟焊。
作用 | 命令 |
---|---|
某文件添加用戶讀權(quán)限 | chmod u+r FileName |
給某文件刪除用戶讀權(quán)限 | chmod u-r FileName |
給某文件添加用戶寫權(quán)限 | chmod u+w FileName |
給某文件刪除用戶寫權(quán)限 | chmod u-w FileName |
給某文件添加用戶執(zhí)行權(quán)限 | chmod u+x FileName |
給某文件刪除用戶執(zhí)行權(quán)限 | chmod u-x FileName |
給某文件設(shè)定用戶擁有讀寫執(zhí)行權(quán)限 | chmod u=rwx FileName |
如果要給用戶組或其他人添加或刪除相關(guān)權(quán)限,只需要將上面的u相應(yīng)地更換成 g 或 o 即可孙蒙。
但是這一方式只能給文件擁有者项棠、文件擁有組或者其他所有人設(shè)置權(quán)限,如果想同時(shí)設(shè)置所有人的權(quán)限就需要使用數(shù)字表示法了挎峦。
定義 r=4香追,w=2,x=1,如果權(quán)限是 rwx,則數(shù)字表示7,如果權(quán)限是 r-x,則數(shù)字表示為5.
如果是修改一個(gè)目錄坦胶,且該目錄下所有的目錄文件都遞歸修改權(quán)限透典,則加上參數(shù) -R 。
更改文件的擁有者
chown UserName FileName
如果需要修改的不是一個(gè)文件而是一個(gè)目錄顿苇,以及該目錄下所有的文件峭咒、子目錄、子目錄下的所有文件和目錄纪岁,則需要使用 -R 參數(shù)凑队,遞歸設(shè)置。
更改文件的擁有組
chgrp Group FileName
同樣幔翰,使用 -R 參數(shù)遞歸設(shè)置
文件的特殊屬性
如截圖所示漩氨,權(quán)限中多了一個(gè)特殊的 “s”西壮。這表示為 SUID 權(quán)限,這個(gè)權(quán)限只能用于二進(jìn)制文件叫惊。
給一個(gè)二進(jìn)制文件添加 SUID 權(quán)限的命令:
chmod u+s FileName
如果某個(gè)二進(jìn)制文件的用戶組被設(shè)置了 s 權(quán)限款青,則該文件的用戶組中所有的用戶都能以該文件的用戶身份去運(yùn)行這個(gè)命令,一般來(lái)說(shuō)SGID 命令在系統(tǒng)中用的很少霍狰,給一個(gè)二進(jìn)制文件添加 SGID 權(quán)限的命令:
chmod g+s FileName
Sticky 權(quán)限只能用于設(shè)置在目錄上抡草,設(shè)置了這種權(quán)限的目錄,任何用戶都可以在該目錄中創(chuàng)建或修改文件蔗坯,但是只有該文件的創(chuàng)建者和 root 可以刪除自己的文件渠牲。
chmod o+t DirName
默認(rèn)權(quán)限和umask
對(duì)于 root 用戶,文件的默認(rèn)權(quán)限是 644 步悠,目錄的默認(rèn)權(quán)限是 755 ;對(duì)于普通用戶瘫镇,文件的默認(rèn)權(quán)限是 664鼎兽,目錄的默認(rèn)權(quán)限是775.
那么這個(gè)值是如何計(jì)算出來(lái)的呢?
是通過(guò)遮罩(umask)來(lái)實(shí)現(xiàn)的铣除。首先看一下 /etc/profile 文件中谚咬,通過(guò)第51行道55行的一段代碼設(shè)置了不同用戶的遮罩值。
從上面的代碼中可以看出尚粘,UID大于99的用戶設(shè)置了umask為002择卦,否則為022。所以u(píng)mask值對(duì)于root用戶是022郎嫁,對(duì)于普通用戶是002秉继,這就造成了上面我們看到的root用戶和普通用戶創(chuàng)建出來(lái)的文件和目錄默認(rèn)權(quán)限是不一樣的。
如何使用遮罩計(jì)算權(quán)限泽铛?
777 用字符串表示為:rwxrwxrwx,如果遮罩值為022尚辑,用字符串表示為 ----w--w-,那么前者第五位和第八位的w被遮罩掉,權(quán)限變作rwxr-xr-x,用數(shù)字表示就是755盔腔。
不能通過(guò)同位相減的方法計(jì)算遮罩后的值杠茬,比如說(shuō)777-022同位相減得到755,666-022同位相減得到644,這種看似正確的結(jié)果其實(shí)只是一種巧合弛随,并不是了解遮罩的正確方式瓢喉。假設(shè)有個(gè)文件的權(quán)限為666,在遮罩值為011的情況下舀透,采用該方法計(jì)算得到的權(quán)限值為655栓票,但實(shí)際上正確的權(quán)限值為666。
查看文件類型
file PATH -name FileName
數(shù)據(jù)庫(kù)查找
與 find 不同盐杂,locate 命令依賴于一個(gè)數(shù)據(jù)庫(kù)文件逗载,Linux系統(tǒng)默認(rèn)每天會(huì)檢索一下系統(tǒng)中的所有文件哆窿,然后將檢索到的文件記錄到數(shù)據(jù)庫(kù)中。在運(yùn)行 lcoate 命令的時(shí)候可直接到數(shù)據(jù)庫(kù)中查找記錄并打印到屏幕上厉斟,所以使用 locate 命令要比 find 命令反饋更為迅速挚躯。
在執(zhí)行這個(gè)命令之前一般需要執(zhí)行 updatedb 命令(這不是必須的,因?yàn)橄到y(tǒng)每天會(huì)自動(dòng)檢索并更新數(shù)據(jù)庫(kù)信息擦秽,但有時(shí)候會(huì)因?yàn)槲募l(fā)了變化而系統(tǒng)還沒(méi)有再次更新而無(wú)法找到實(shí)際上存在的文件码荔。所以需要主動(dòng)運(yùn)行該命令,以創(chuàng)建新的文件列表數(shù)據(jù)庫(kù)),以及時(shí)更新數(shù)據(jù)庫(kù)記錄感挥。
查找執(zhí)行文件
which 用于從系統(tǒng)的PATH變量所定義的目錄中查找可執(zhí)行的絕對(duì)路徑缩搅。
使用 whereis 也能查到其路徑,但是和 which 不同的是触幼,它不但能找出其二進(jìn)制文件硼瓣,還能找出相關(guān)的 man 文件。
文件壓縮和打包
gizp/gunzip
gzip/gunzip 是用來(lái)壓縮和解壓縮單個(gè)文件的工具置谦,使用方法比較簡(jiǎn)單堂鲤。
gzip FileName
gunzip FileName
tar
tar 不但可以打包文件,還可以將整個(gè)目錄中的全部文件整合成一個(gè)包媒峡,整合包的同時(shí)還能使用 gzip 的功能進(jìn)行壓縮瘟栖,比如說(shuō)把整個(gè) /boot 目錄整合并壓縮成一個(gè)文件。
一般來(lái)說(shuō)谅阿,整合后的包習(xí)慣使用 .tar 作為其后綴名半哟,使用 gzip 壓縮后的文件則使用 .gz 作為其后綴名。因?yàn)?tar 有同時(shí)整合和壓縮的功能,所以可使用 .tar.gz 作為后綴名,或者簡(jiǎn)寫為 .tgz唠帝。
tar -zcvf boot.tgz /boot
這里 -z 的含義是使用 gzip 壓縮翁脆,-c 是創(chuàng)建壓縮文件,-v 是顯示當(dāng)前被壓縮的文件,-f 是指使用文件名
解壓命令如下:
tar -zxvf boot.tgz -C DirName
后面可以使用 -C 來(lái)指定壓縮后文件的存放目錄
bzip2
使用 bzip2 壓縮文件時(shí),默認(rèn)會(huì)產(chǎn)生以 .bz2 擴(kuò)展名結(jié)尾的文件,這里使用 -z 參數(shù)進(jìn)行壓縮蔬墩,使用 -d 參數(shù)進(jìn)行解壓縮。
cpio
該命令一般是不單獨(dú)使用的耗拓,需要和find命令一同使用拇颅。當(dāng)由find按照條件找出需要備份的文件列表后,可通過(guò)管道的方式傳遞給 cpio 進(jìn)行備份乔询,生成 /tmp/conf.cpio 文件樟插,然后再將生成的 /tmp/conf.cpio 文件中包含的文件列表完全還原回去。