Linux 文件權(quán)限管理

概覽

?

文件權(quán)限管理是Linux/Unix中很基礎(chǔ)也很重要的概念,而網(wǎng)上大多充斥著粗制濫造的迷之操作誤人子弟讓人不忍直視,索性在此記錄并與大家分享。

本文提及的Linux命令適用于絕大多數(shù)Linux/Unix發(fā)行版,如Ubuntu,CentOS, Fedora,Arch,蘋果MacOS,Raspberry

Pi,或者其他bash環(huán)境,如Git bash等等。

?

環(huán)境


Windows 10 21H1 + Linux子系統(tǒng)Ubuntu 20 LTS + Windows Terminal,本文提及的所有操作都再此環(huán)境下運行,如果您使用的是MacOS或者任何Linux發(fā)行版,直接運行操作系統(tǒng)中的terminal亦可。

打開Windows Terminal,運行命令wsl進入Linux子系統(tǒng):

* PS - PowerShell

* C:\Users\neo - 當(dāng)前所在Windows目錄

* WSL - Windows Subsystem for Linux

* neo - Linux主機當(dāng)前登錄用戶

* @ - At,在

* workstation - Linux主機名

* :/mnt/c/Users/neo - Linux當(dāng)前目錄

* $ - 當(dāng)前用戶是一個普通用戶,root用戶會顯示為#

neo@workstation:/mnt/c/Users/neo$ 這個完整的解釋是:普通用戶neo在workstation主機中的/mnt/c/Users/neo目錄下



運行cd ~進入home目錄,開始我們的探索之旅

*~ - home目錄

*pwd - print working directory,打印工作目錄(當(dāng)前所在目錄)

*/home/neo – 用戶neo的home目錄


準(zhǔn)備些素材


使用命令mkdir新建一個目錄’folder’,使用命令touch新建文件’file’,使用命令ln

-s建立一個軟連接’link’并指向目錄’folder’,最后使用命令ls -l或者ll命令確認(rèn)

* mkdir – make directory 建立目錄

* ln – link,-s symbolic,建立符號鏈接(軟鏈接)

* ls – list,-l list,以列表的方式列出文件和目錄,同ll命令(list list)

簡單說明一下這個列表,獨占一行的‘total’是當(dāng)前目錄內(nèi)所有文件所占磁盤空間的總和(KB),它下面的列表我們分成七列來看:

第一列:就是本文所述的重點,文件屬性(模式)列表

第二列:文件的硬鏈接數(shù)量,1代表此文件有1個硬鏈接,就是文件本身,可使用ln新建一個硬鏈接指向文件file,再次通過ls -l命令查看,兩個文件在此的數(shù)值都變?yōu)榱?;根據(jù)發(fā)行版的不同會有差異,當(dāng)前文件如果是目錄的話會顯示其包含子目錄的個數(shù)

第三列:owner,文件所有者的用戶名

第四列:group,文件所在組的組名

第五列:文件大小(以字節(jié)為單位,byte,b)

第六列:文件修改時間,格式為‘月,日,時:分’

第七列:文件名,顏色顯示依據(jù)不同終端主題和樣式會有差別


文件屬性

?

第一列的文件屬性列表,我們可以繼續(xù)拆分成四列來看:

首列標(biāo)識了文件的類型,分別解釋如下:

‘-‘: 此文件是一個普通文件

‘d’: directory, 此文件是一個目錄,目錄也是一個特殊的文件,它存放著其他文件或目錄

‘l’:link,此文件是一個軟鏈接文件

除了以上常見的三種文件標(biāo)識,還有諸如c,b,p等特殊文件標(biāo)識,日常工作中很少用到,這里就不細(xì)說了,感興趣的小伙伴可以另行查閱。

在首列文件類型列之后,密密麻麻的有9個字母或橫線組成了一串字符,我們把這9個字符拆分為3組,每組3個字符:

從左至右分別為:

第一組:user,用戶,即owner,文件所屬的用戶,對此文件的權(quán)限都有哪些

第二組:group,組,文件所屬的組內(nèi)所包含的用戶,對此文件的權(quán)限都有哪些

第三組:other,其他用戶,除了此文件所有者和此文件所屬組內(nèi)用戶的其他用戶,對此文件的權(quán)限都有哪些。

每組對應(yīng)的文件權(quán)限又分配有三個屬性,r,w,x,并且三個屬性的位置是固定不變的,即r永遠(yuǎn)在最左側(cè),w永遠(yuǎn)在最中間,x永遠(yuǎn)在最右側(cè)。如果某個屬性被禁用,則以橫杠‘-’代替。三個屬性分別為:

r:read,可讀

w:write,可寫

x:execute,可執(zhí)行

-:none,沒有

回到我們剛才查看的文件列表,可以很清楚3個文件的權(quán)限配置:


文件’file’:

-rw-r--r--?1? neo? neo?0? Jul? 31?19:31? file

這是一個普通文件,允許它的所有者用戶neo讀和寫,但不允許執(zhí)行;對名為neo的組內(nèi)所有用戶成員,允許他們可讀,但不允許修改和執(zhí)行;對既不是它的擁有者neo也不是neo組內(nèi)成員的其他用戶,允許讀取,但不允許修改和執(zhí)行。


文件’folder’:

drwxr-xr-x?1? neo? neo?512? Jul? 31?19:31? folder

這是一個文件夾,為它的所有者用戶neo開放所有權(quán)限; 對名為neo的組內(nèi)所有用戶成員和其他用戶,允許他們讀取和執(zhí)行,但不允許修改。


文件’folder’:

lrwxrwxrwx?1? neo? neo?6? Jul? 31?19:31? link -> folder

這是一個鏈接,允許所有用戶讀取,修改和執(zhí)行。


chown修改文件所有者

文件的持有者可以通過命令chown改變,比如更改文件file的持有者從neo到smith,此命令如果是普通用戶執(zhí)行的話需要在命令前面加sudo:

sudo chown smith file

chown:change owner,更改持有者

sudo:SuperUser DO,超級用戶做,指的是root用戶

chown命令也可以同時修改用戶和組,以‘用戶名:組名’的形式:

sudo chown neo:neo file

chgrp修改文件所在組

文件的所在組可以通過命令chgrp改變,比如更改文件file的組從neo到matrix,此命令如果是普通用戶執(zhí)行的話需要在命令前面加sudo:

sudo chgrp matrix file

chgrp:change group,更改用戶組


chmod修改文件權(quán)限

我們使用命令chmod修改文件權(quán)限。官方給出的文檔用法是這樣的:

Each MODE is of the form'[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

下面的用法是我自己整理的,用著比較簡便:

chmod [ugoa][+-=][rwx] [-R]path/filename

*chmod - change file mode bits 修改文件模式位


[ugoa]

u:user,用戶,為文件所有者修改權(quán)限

例:為文件所有者添加可讀權(quán)限chmod u+r file

g:group,組,為文件所在組修改權(quán)限

例:為文件所在組添加可讀權(quán)限chmod g+r file

o:other,其他用戶

例:為其他用戶添加可讀權(quán)限chmod o+r file

a:all, 全部,等同于ugo,為文件所有者,組和其他用戶全部修改權(quán)限

例:為所有用戶添加可讀權(quán)限chmod a+r file

ugoa也可以隨意組合,比如為用戶組和其他用戶移除可寫權(quán)限chmod go-w file


[+-=]

+:添加權(quán)限

-:移除權(quán)限

=:使權(quán)限相同,為文件所有者,組或者其他用戶,按照指定的所有者,組或者其他用戶,或者指定的rwx權(quán)限,分配相同的文件權(quán)限

例:修改組權(quán)限為文件所有者相同的權(quán)限,修改前的組權(quán)限為r--, 修改后為rwx,見下圖:

[rwx]

r:read,可讀

w:write,可寫(修改)

x:execute,可執(zhí)行

rwx也可隨意組合,例如,設(shè)置允許其他用戶可讀并且可寫 chmod o+rw file, 再例如設(shè)置移除組和其他用戶的可寫和執(zhí)行權(quán)限chmodgo-wx file


[-R]

遞歸的生效于目標(biāo)目錄下的所有子目錄和文件


修改文件’file’的權(quán)限,為其所有者neo增加執(zhí)行權(quán)限:

執(zhí)行命令:chmod u+x file,再次執(zhí)行命令ls -l確認(rèn)修改結(jié)果

我們發(fā)現(xiàn)相比之前該文件的權(quán)限,經(jīng)過更改后在用戶組中多出了一個x,變?yōu)榱藃wx;其他兩組沒變,依然是r--


更快捷的方法

如果打開chmod --help,這個命令的man手冊有一條用法:

chmod [OPTION]... OCTAL-MODE FILE...

Octal-mode:八進制模式,此模式分別為r, w, x分配了權(quán)重數(shù)值,即:

r: 4

w: 2

x: 1


回到我們最初新建的3個文件,用八進制標(biāo)識權(quán)限分別為644,755,777:

所以chmod命令可作用于更加快捷的權(quán)限分配。例如修改file文件,使得它的持有者可讀可寫(4+2+0=6),組只可讀可寫(4+2+0=6),其他用戶只可讀(4+0+0=4):

chmod 664 file

一個文件的最高權(quán)限是777,即文件所有者,組和其他用戶都有讀,寫和執(zhí)行的權(quán)限,相當(dāng)于ugo+rwx。

好多文件權(quán)限問題是文件持有者和組的問題,而不要上來就粗暴的給777,當(dāng)作是玩水果機呢,即使你的環(huán)境非常安全,但也是一個很不好的習(xí)慣。

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

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

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