概覽
?
文件權(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 - 當前所在Windows目錄
* WSL - Windows Subsystem for Linux
* neo - Linux主機當前登錄用戶
* @ - At失驶,在
* workstation - Linux主機名
* :/mnt/c/Users/neo - Linux當前目錄
* $ - 當前用戶是一個普通用戶,root用戶會顯示為#
neo@workstation:/mnt/c/Users/neo$ 這個完整的解釋是:普通用戶neo在workstation主機中的/mnt/c/Users/neo目錄下
運行cd ~進入home目錄枣购,開始我們的探索之旅
*~ - home目錄
*pwd - print working directory嬉探,打印工作目錄(當前所在目錄)
*/home/neo – 用戶neo的home目錄
準備些素材
使用命令mkdir新建一個目錄’folder’,使用命令touch新建文件’file’棉圈,使用命令ln
-s建立一個軟連接’link’并指向目錄’folder’涩堤,最后使用命令ls -l或者ll命令確認
* mkdir – make directory 建立目錄
* ln – link,-s symbolic分瘾,建立符號鏈接(軟鏈接)
* ls – list胎围,-l list,以列表的方式列出文件和目錄德召,同ll命令(list list)
簡單說明一下這個列表白魂,獨占一行的‘total’是當前目錄內(nèi)所有文件所占磁盤空間的總和(KB),它下面的列表我們分成七列來看:
第一列:就是本文所述的重點上岗,文件屬性(模式)列表
第二列:文件的硬鏈接數(shù)量碧聪,1代表此文件有1個硬鏈接,就是文件本身液茎,可使用ln新建一個硬鏈接指向文件file,再次通過ls -l命令查看辞嗡,兩個文件在此的數(shù)值都變?yōu)榱?捆等;根據(jù)發(fā)行版的不同會有差異,當前文件如果是目錄的話會顯示其包含子目錄的個數(shù)
第三列:owner续室,文件所有者的用戶名
第四列:group栋烤,文件所在組的組名
第五列:文件大小(以字節(jié)為單位,byte挺狰,b)
第六列:文件修改時間明郭,格式為‘月,日丰泊,時:分’
第七列:文件名薯定,顏色顯示依據(jù)不同終端主題和樣式會有差別
文件屬性
?
第一列的文件屬性列表,我們可以繼續(xù)拆分成四列來看:
首列標識了文件的類型瞳购,分別解釋如下:
‘-‘: 此文件是一個普通文件
‘d’: directory, 此文件是一個目錄话侄,目錄也是一個特殊的文件,它存放著其他文件或目錄
‘l’:link,此文件是一個軟鏈接文件
除了以上常見的三種文件標識年堆,還有諸如c吞杭,b,p等特殊文件標識变丧,日常工作中很少用到芽狗,這里就不細說了,感興趣的小伙伴可以另行查閱痒蓬。
在首列文件類型列之后童擎,密密麻麻的有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永遠在最左側(cè),w永遠在最中間宅静,x永遠在最右側(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]
遞歸的生效于目標目錄下的所有子目錄和文件
修改文件’file’的權(quán)限卿拴,為其所有者neo增加執(zhí)行權(quán)限:
執(zhí)行命令:chmod u+x file衫仑,再次執(zhí)行命令ls -l確認修改結(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個文件到踏,用八進制標識權(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)限,相當于ugo+rwx踪少。
好多文件權(quán)限問題是文件持有者和組的問題塘安,而不要上來就粗暴的給777,當作是玩水果機呢援奢,即使你的環(huán)境非常安全兼犯,但也是一個很不好的習(xí)慣。