權(quán)限管理的重要性
linux是多用戶多任務(wù)分時(shí)系統(tǒng)前塔,不是單單創(chuàng)建多個(gè)用戶、多個(gè)群組就可以了伐割。還需要對(duì)一個(gè)文件的所有權(quán)進(jìn)行定義才能讓各個(gè)用戶相互獨(dú)立忌穿。而最根本的就是對(duì)文件以及目錄的權(quán)限管理了。
目錄與文件
既然權(quán)限管理最主要的就是管理目錄與文件的權(quán)限傲茄,那么我們首先就先講講linux的目錄與文件毅访。
linux下文件和目錄的命名規(guī)則如下:
- 除了反斜杠外,所有字符都可以使用但是一些特殊的字符應(yīng)該避免使用盘榨。
- 目錄名和文件名長(zhǎng)度限制在255個(gè)字符內(nèi)
- 在linux中目錄和文件名是區(qū)分大小寫(xiě)的
- 與windows不同喻粹,文件的擴(kuò)展名對(duì)于linux沒(méi)有特殊的含義,雖然也使用擴(kuò)展名來(lái)指代類型草巡,但是其打開(kāi)以及運(yùn)行等不依賴擴(kuò)展名守呜。
- 在linxu中萬(wàn)物皆為文進(jìn),包括硬件設(shè)備等山憨,在后續(xù)的學(xué)習(xí)中會(huì)學(xué)到
目錄與文件相關(guān)命令
cd切換目錄
cd [相對(duì)路徑或絕對(duì)路徑]
changeDirectory 用于切換工作目錄
其中有一些特殊的符號(hào):
特殊符號(hào) | 作用 |
---|---|
~ | 代表當(dāng)前登陸用戶的主目錄 |
~用戶名 | 表示切換至指定用戶的主目錄 |
- | 代表上次所在的目錄 |
. | 代表當(dāng)前目錄 |
.. | 代表上級(jí)目錄 |
這里補(bǔ)充一個(gè)知識(shí)點(diǎn)查乒,我們?cè)谑褂妹钚械臅r(shí)候有一個(gè)命令提示符其會(huì)提示我們所在的目錄:
[root@localhost ~]#
root代表當(dāng)前用戶的用戶名
@是分隔符
localhost是當(dāng)前系統(tǒng)主機(jī)名的簡(jiǎn)寫(xiě)
~就是一個(gè)路徑表示,代表當(dāng)前用戶的家目錄對(duì)于root就是/root表示該用戶是root用戶郁竟,而$表示該用戶是普通用戶
pwd答應(yīng)工作目錄
pwd
PrintWorkingDirectory 打印工作目錄
ls列出目錄下目錄及文件
ls [選項(xiàng)] [目錄路徑]
list 作用是列出目錄路徑下的所有目錄和文件玛迄,如果不加路徑則默認(rèn)為當(dāng)前路徑
| 選項(xiàng) | 功能 |
| -a | 顯示全部文件,包含隱藏文件(以.開(kāi)頭的文件) |
| -h | 以人們易讀的方式顯示文件和目錄大小即1KB 23MB等 |
| -i | 顯示inode節(jié)點(diǎn)信息 |
| -l | 使用長(zhǎng)格式列出文件和目錄信息 |
| -R | 連同子目錄內(nèi)容一起列出來(lái) |
| --color=never/always/auto | 以顏色區(qū)分文件棚亩,never表示不顯示顏色蓖议,always表示顯示顏色藻肄,auto表示讓系統(tǒng)依據(jù)配置來(lái)判斷是否顯示顏色以及什么文件顯示什么顏色 |
該命令可以說(shuō)是linux下用的最多的命令,通常我們會(huì)使用ls -al 來(lái)列出目錄下文件的詳細(xì)信息拒担。
大部分發(fā)行版用不同的顏色來(lái)區(qū)分不同種類的文件嘹屯。
[hncjygd@bogon tmp]$ ls -al
總用量 4
drwxr-xr-x. 3 hncjygd wheel 31 11月 4 16:54 .
drwx------. 21 hncjygd wheel 4096 11月 3 23:24 ..
drwxr-xr-x. 3 hncjygd wheel 18 11月 4 16:54 test
-rw-r--r--. 1 hncjygd wheel 0 11月 4 16:54 test1
上面就是列出的文件的信息信息,默認(rèn)包含七列:
- 第一列:規(guī)定了不同用戶對(duì)文件所擁有的權(quán)限
- 第二列:引用計(jì)數(shù)从撼,代表該文件的硬連接個(gè)數(shù)州弟,對(duì)于目錄則代表該目錄有多少個(gè)一級(jí)子目錄
- 第三列:文件的所有者
- 第四列:文件所屬組
- 第五列:大小,默認(rèn)單位字節(jié)低零,可以添加-h選項(xiàng)來(lái)增加可讀性
- 第六列:文件修改時(shí)間婆翔,狀態(tài)或數(shù)據(jù)修改都會(huì)更改這個(gè)時(shí)間
- 第七列:文件名或目錄名
mkdir創(chuàng)建目錄
mkdir [-mp] 目錄名
-m 用于手動(dòng)配置所創(chuàng)建的目錄的權(quán)限,而不是使用默認(rèn)權(quán)限 mkdir -m 711 test1
-p 遞歸創(chuàng)建所有目錄 mkdir test2/test3
rmdir刪除空目錄
rmdir [-p] 目錄名
-p 遞歸刪除空目錄
這個(gè)命令不常用掏婶,因?yàn)橹荒軇h除空目錄啃奴,通常我們都是使用rm命令來(lái)刪除目錄。
但是當(dāng)你只想刪除空目錄的時(shí)候可以使用mkdir來(lái)確保非空目錄不被刪除
touch 創(chuàng)建新文件或修改文件時(shí)間戳
Linux系統(tǒng)下雄妥,每個(gè)文件主要擁有三個(gè)時(shí)間參數(shù)(可以通過(guò)stat命令進(jìn)行查看)最蕾,分別是文件的訪問(wèn)時(shí)間、數(shù)據(jù)修改時(shí)間以及狀態(tài)修改時(shí)間:
- 訪問(wèn)時(shí)間:(AccessTime atime) 只要文件的內(nèi)容被讀取老厌,訪問(wèn)時(shí)間就會(huì)更新(cat vim等操作都會(huì)改變這個(gè)時(shí)間)
- 數(shù)據(jù)修改時(shí)間:(Modify Time mtime) 當(dāng)文件的內(nèi)容數(shù)據(jù)發(fā)生變化瘟则,修改時(shí)間就會(huì)更新
- 狀態(tài)修改時(shí)間:(Change Time ctime) 但文件的狀態(tài)發(fā)生變化,該時(shí)間就會(huì)更新(比如文件權(quán)限改變等枝秤,mtime更新ctime一定也隨之更新醋拧,反之則不一定)
touch [選項(xiàng)] 文件名
如果文件名的文件不存在則創(chuàng)建一個(gè)空文件。
選項(xiàng) | 含義 |
---|---|
-a | 只修改文件的訪問(wèn)時(shí)間 |
-c | 僅修改文件時(shí)間參數(shù)淀弹,如果文件不存在則不建立新文件(與其他參數(shù)配合使用) |
-d | 后面跟想要修訂的日期(可以不用當(dāng)前的日期)丹壕,他會(huì)將atime mtime時(shí)間都改為指定的時(shí)間 |
-m | 只修改文件的數(shù)據(jù)修改時(shí)間 |
-t | 命令后面可以跟想要修改的日期,時(shí)間格式為[[CC]YY]MMDDhhmm[.SS] |
說(shuō)明:
- 其中的 a m 參數(shù)只能將文件修改為當(dāng)前時(shí)間
- 如果想要修改為其他時(shí)間需要加t參數(shù)后跟時(shí)間 其中MMDDhhmm是必須的薇溃,其他可選
- 狀態(tài)修改時(shí)間無(wú)法被改變菌赖,因?yàn)槔碚撋闲薷臅r(shí)間也會(huì)導(dǎo)致?tīng)顟B(tài)的變化
ln建立鏈接(軟鏈接 硬鏈接)
要想知道什么是鏈接,首先需要知道linux的ext文件系統(tǒng)是如何工作的痊焊。ext文件系統(tǒng)會(huì)把分區(qū)主要分為兩個(gè)部分:小部分用于保存inode信息盏袄,大部分用于保存block信息。
inode的默認(rèn)大小是128Byte或256Byte薄啥,其記錄了以下內(nèi)容:
- 文件的字節(jié)數(shù)
- 文件擁有者的UID
- 文件的GID
- 文件的權(quán)限
- 文件的時(shí)間戳:atime mtime ctime
- 鏈接數(shù):即有多少個(gè)文件名指向這個(gè)inode
- 文件數(shù)據(jù)block的位置
我們可以通過(guò)stat命令來(lái)查看某個(gè)文件的inode信息,可以看到除了文件名外基本上文件的所有信息都保存在inode中了(文件名是記錄在父目錄的block中的)逛尚。在Linux系統(tǒng)內(nèi)部并不使用文件名垄惧,而是使用文件的inode號(hào)碼來(lái)識(shí)別文件的,對(duì)于系統(tǒng)來(lái)說(shuō)文件名只是inode號(hào)碼便于識(shí)別的一個(gè)別稱绰寞。用戶通過(guò)文件名打開(kāi)文件的具體步驟為:首先系統(tǒng)找到這個(gè)文件名對(duì)應(yīng)的inode號(hào)碼到逊,其次通過(guò)inode號(hào)碼獲取inode信息铣口,最后根據(jù)inode信息找到文件數(shù)據(jù)所在的block,讀出數(shù)據(jù)觉壶。
現(xiàn)在我們來(lái)說(shuō)明什么是硬鏈接和軟鏈接:
硬連接:一般情況下脑题,文件名和inode號(hào)碼是一一對(duì)應(yīng)關(guān)系,每個(gè)inode號(hào)碼對(duì)應(yīng)一個(gè)文件名铜靶。但是Linux系統(tǒng)允許多個(gè)文件名指向同一個(gè)inode號(hào)碼叔遂。即可以用不同的文件名來(lái)訪問(wèn)同樣的內(nèi)容,對(duì)文件內(nèi)容的修改會(huì)影響所有文件争剿,而且刪除任意一個(gè)文件名已艰,不影響另一個(gè)文件名過(guò)的訪問(wèn)。這里面順便順便說(shuō)一下目錄文件的鏈接數(shù)蚕苇,創(chuàng)建文件的時(shí)候默認(rèn)會(huì)生成.和..兩個(gè)特殊的目錄代表當(dāng)前文件夾以及父文件夾哩掺,其實(shí)際上就是當(dāng)前文件的硬鏈接以及父文件的硬鏈接。所以任何一個(gè)目錄的硬鏈接總數(shù)總是等于2加上它的子目錄總數(shù)涩笤。
軟鏈接:軟鏈接類似于windows的快捷方式嚼吞。在linux中的作用機(jī)制是:文件A和文件B的inode號(hào)碼雖然不一樣,但是文件A的內(nèi)容是文件B的路徑蹬碧,讀取文件A時(shí)誊薄,系統(tǒng)會(huì)自動(dòng)訪問(wèn)文件B,這個(gè)時(shí)候稱文件A是文件B的軟鏈接或者叫符號(hào)鏈接锰茉。當(dāng)我們刪除A的時(shí)候并不影響B(tài)文件呢蔫,但是當(dāng)我們刪除B的是時(shí)候再打開(kāi)文件A就會(huì)報(bào)錯(cuò)。這就意味著文件A依賴于文件B而存在飒筑。并且因?yàn)槲募嗀指向文件B的文件名片吊,而不是文件B的inode號(hào)碼,所以創(chuàng)建文件B的軟鏈接协屡,文件B的inode鏈接數(shù)不會(huì)因此發(fā)生變化俏脊。
創(chuàng)建鏈接:
ln [選項(xiàng)] 源文件 目標(biāo)文件
-s:建立軟鏈接,不加任何選項(xiàng)為建立硬鏈接
-f:強(qiáng)制肤晓,如果目標(biāo)文件已經(jīng)存在爷贫,則刪除目標(biāo)文件后再建立鏈接文件
硬鏈接的特點(diǎn):
- 不論是修改源文件,還是修改硬鏈接文件补憾,另一個(gè)文件中的數(shù)據(jù)都會(huì)發(fā)生改變
- 不論是刪除源文件漫萄,還是刪除硬鏈接文件,只要還有一個(gè)文件存在盈匾,這個(gè)文件都可以被訪問(wèn)
- 硬鏈接不會(huì)建立新的inode信息
- 硬鏈接不能跨分區(qū)建立腾务,因?yàn)樵诓煌奈募到y(tǒng)中,inode號(hào)是重新計(jì)算的削饵。
- 硬鏈接不能鏈接目錄岩瘦,因?yàn)槿绻o目錄建立硬鏈接未巫,那么不僅目錄本身需要重新建立,目錄下所有的文件也需要建立硬鏈接启昧,這太過(guò)復(fù)雜叙凡。
而軟鏈接除了在刪除源文件時(shí)會(huì)導(dǎo)致軟鏈接失效外,其可以跨分區(qū)建立密末,可以建立目錄的軟鏈接等優(yōu)點(diǎn)握爷,所以在實(shí)際應(yīng)用中,軟鏈接使用的較多苏遥。
cp復(fù)制文件和目錄
cp [選項(xiàng)] 源文件 目標(biāo)文件
選項(xiàng) | 含義 |
---|---|
-d | 如果源文件為軟鏈接饼拍,則復(fù)制出的目標(biāo)文件也為軟鏈接 |
-p | 復(fù)制后目標(biāo)文件保留源文件的屬性(包括UID GID 權(quán)限和時(shí)間) |
-r | 遞歸復(fù)制,用于復(fù)制目錄 |
-a | 相當(dāng)于-dpr的集合 |
-i | 如果目標(biāo)存在則會(huì)詢問(wèn)是否覆蓋 |
-l | 把目標(biāo)文件建立為源文件的硬鏈接文件田炭,而不是復(fù)制源文件 |
-s | 把目標(biāo)文件建立為源文件的軟鏈接文件师抄,而不是復(fù)制源文件 |
需要注意的問(wèn)題:
- 源文件可以有多個(gè),這種情況下教硫,目標(biāo)文件必須時(shí)目錄才可以
- 復(fù)制可以是文件叨吮,也可以是目錄,要復(fù)制目錄需要加-r
rm 刪除文件或目錄
rm [選項(xiàng)] 文件或目錄
選項(xiàng) | 含義 |
---|---|
-f | 強(qiáng)制刪除瞬矩,系統(tǒng)不會(huì)詢問(wèn)而是直接刪除 |
-i | 與-f相反茶鉴,在刪除前,系統(tǒng)提示是否刪除 |
-r | 遞歸刪除景用,主要用于刪除目錄 |
注意:
- rm命令是一個(gè)具有破壞性的命令涵叮,其會(huì)永久刪除文件或目錄
- 刪除成功后系統(tǒng)不會(huì)給出提示,這是linux 的一個(gè)重要思想伞插,沒(méi)有提示就意味著成功
mv移動(dòng)文件或改名
mv [選項(xiàng)] 源文件 目標(biāo)文件
選項(xiàng) | 含義 |
---|---|
-f | 強(qiáng)制覆蓋割粮,即使目標(biāo)文件已經(jīng)存在,不詢問(wèn)直接覆蓋 |
-i | 與上面相反媚污,如果目標(biāo)文件存在舀瓢,詢問(wèn)是否覆蓋 |
-n | 如果目標(biāo)文件已經(jīng)存在,不覆蓋也不詢問(wèn) |
-v | 顯示文件或目錄的移動(dòng)過(guò)程 |
-u | 若目標(biāo)文件已經(jīng)存在耗美,但兩者相比京髓,源文件更新,則會(huì)對(duì)目標(biāo)文件進(jìn)行升級(jí) |
注意:
- mv命令可以移動(dòng)目錄商架,而且不需要加-r的遞歸
權(quán)限
linux 多用戶權(quán)限控制的本質(zhì)堰怨,就是讓不同的用戶能夠訪問(wèn)的文件不同。而root可以訪問(wèn)任何文件甸私,所以就擁有至高無(wú)上的權(quán)力诚些。而如何規(guī)定一個(gè)用戶能夠訪問(wèn)那些文件,而不能訪問(wèn)那些文件皇型,這些都由文件自己說(shuō)的算诬烹,這就是文件的權(quán)限。
使用ls -l可以查看文件的長(zhǎng)屬性:
drwxrwxr-x. 5 hncjygd wheel 46 11月 1 20:31 study
-rw-rw-r--. 1 hncjygd wheel 23 11月 3 21:12 test
-rw-r--r--. 1 hncjygd grouptest 0 11月 2 22:00 test2
-rw-rw-r--. 1 hncjygd wheel 0 11月 2 22:01 test3
其中最重要的參數(shù)就是第一個(gè)弃鸦,代表了文件類型和權(quán)限绞吁。
drwxrwxr-w
其中分為四個(gè)部分:
首字母-文件類型
后面9個(gè)字符分為三組分別代表:擁有者、所屬用戶組唬格、其他
其中首字母由以下取值:
- d 代表目錄
- - 代表文件
- l 代表一個(gè)軟鏈接(硬鏈接還是-與文件無(wú)異)
- b 代表塊設(shè)備如磁盤(pán)等
- c 代表字符設(shè)備如鼠標(biāo)家破、鍵盤(pán)等需要連續(xù)串行讀寫(xiě)的設(shè)備
- s 代表套接字文件
- p 代表命名管道文件
后面的由rwx組成的分別代表?yè)碛姓摺⑺鶎俳M购岗、其他用戶的權(quán)限:
- r - 代表讀
- w - 代表可寫(xiě)
- x - 代表可運(yùn)行
- - 代表不具有某個(gè)權(quán)限
rwx權(quán)限 | 對(duì)文件的作用 |
---|---|
r-讀權(quán)限 | 表示可讀取文件中的實(shí)際內(nèi)容汰聋,即可以對(duì)文件執(zhí)行cat more less head tail等文件查看操作 |
w-寫(xiě)權(quán)限 | 表示可以編輯文件中的內(nèi)容,即可以執(zhí)行vim echo等文件數(shù)據(jù)修改命令 |
x-執(zhí)行權(quán)限 | 表示該文件可以運(yùn)行喊积,當(dāng)然具體是否能夠正確運(yùn)行烹困,還需要看代碼 |
rwx權(quán)限 | 對(duì)目錄的作用 |
---|---|
r-讀權(quán)限 | 表示具有讀取目錄結(jié)構(gòu)列表的權(quán)限,即執(zhí)行l(wèi)s |
w-寫(xiě)權(quán)限 | 對(duì)于目錄來(lái)書(shū)w權(quán)限是最高的權(quán)限乾吻,擁有w權(quán)限就可以在目錄中:建立新的文件或目錄髓梅,刪除已經(jīng)存在的目錄和文件(無(wú)論文件或目錄的權(quán)限是如何),對(duì)已存在的文件或目錄移動(dòng)或重命名绎签。 |
x-執(zhí)行權(quán)限 | 代表用戶可以進(jìn)入該目錄枯饿,即執(zhí)行cd命令 |
權(quán)限修改
chgrp修改文件和目錄的所屬組
chgrp [-R] 所屬組 文件名/目錄名
chgrp - change group
-R用于更改目錄的所屬組,表示更改連同目錄中所有文件的所屬組信息
chown修改文件和目錄的所有者和所屬組
chown [-R] 所有者[:所屬組] 文件或目錄
chown - change owner
-R 表示連同目錄中的所有文件也更改
chown可以同時(shí)更改所有者和所屬組诡必,其中使用分號(hào)隔開(kāi)奢方,也可以單獨(dú)更改所有者。
也可以使用 chown -R :所屬組 文件或目錄 來(lái)單獨(dú)更改所屬組爸舒,但是通常還是使用chgrp命令為好
chmod修改文件或目錄的權(quán)限
我們知道linux中蟋字,文件的基本權(quán)限由9個(gè)字符組成,而chmod就是可以修改則9個(gè)字符的命令碳抄。其修改方式有2中:數(shù)字和符號(hào)愉老,其中又以數(shù)字修改最常用。
使用數(shù)字修改:
chmod [-R] 權(quán)限值 文件名/目錄名
-R用于目錄剖效,表示連同目錄中的文件一同修改
權(quán)重值:其中 r=>4 w=>2 x=>1 其實(shí)就是二進(jìn)制數(shù) rwx就是7 r-x就是5 -wx就是3 等
chmod 755 example 就是將example文件權(quán)限設(shè)置為 rwxr-xr-x
使用字符修改文件權(quán)限:
既然文本的基本權(quán)限是三個(gè)用戶身份(所有者 所屬組 其他人) 搭配三種權(quán)限(rwx)嫉入。所以可以使用u g o來(lái)代表三個(gè)用戶身份 a表示全部,rwx來(lái)表示三種權(quán)限璧尸,以此來(lái)更改權(quán)限
chmod u=rwx,go=rx example 等同于 chmod 755 example
從上面的對(duì)比可知咒林,數(shù)字修該更加方便。
umask修改新建文件文件夾的默認(rèn)權(quán)限
在新建文件或文件夾的時(shí)候爷光,系統(tǒng)會(huì)給與默認(rèn)的權(quán)限.(可以直接運(yùn)行umask來(lái)查看但前用戶的默認(rèn)權(quán)限)垫竞,通常情況下 root的默認(rèn)權(quán)限是0022,普通用戶的是0002.
0022對(duì)應(yīng)的就是----w--w-,實(shí)際上系統(tǒng)并不直接使用umask默認(rèn)權(quán)限為文件或目錄的初始權(quán)限,而是進(jìn)行了操作:
文件/目錄的初始權(quán)限: 文件/目錄的最大默認(rèn)權(quán)限-umask權(quán)限
文件的默認(rèn)最大權(quán)限是666欢瞪,因?yàn)閤權(quán)限是文件的最高權(quán)限活烙,必須手動(dòng)賦予
目錄的默認(rèn)權(quán)限是777
對(duì)于root用戶:文件默認(rèn)權(quán)限666-022=644即rw-r--r-- 目錄的默認(rèn)權(quán)限777-022=755即rwxr-xr-x
對(duì)于普通用戶:文件默認(rèn)權(quán)限666-002=664即rw-rw-r-- 目錄的默認(rèn)權(quán)限777-002=775即rwxrwxr-x
可以通過(guò)umask命令來(lái)直接修改默認(rèn)權(quán)限:
umask 033
注意:這種修改只是臨時(shí)有效,關(guān)閉終端后就不再生效了遣鼓,如果想要永久生效啸盏,需要更改配置文件 /etc/profile.這個(gè)配置文件是一個(gè)sh腳本文件,是用來(lái)配置環(huán)境變量的骑祟,其會(huì)在一個(gè)用戶登陸系統(tǒng)時(shí)執(zhí)行回懦。其中有一段是用來(lái)定義umask的。
# /etc/profile
# Set our umask
umask 022