Linux 文件权限管理

2021-08-01  本文已影响0人  闻花吟

概览

 

文件权限管理是Linux/Unix中很基础也很重要的概念,而网上大多充斥着粗制滥造的迷之操作误人子弟让人不忍直视,索性在此记录并与大家分享。

本文提及的Linux命令适用于绝大多数Linux/Unix发行版,如Ubuntu,CentOS, Fedora,Arch,苹果MacOS,Raspberry

Pi,或者其他bash环境,如Git bash等等。

 

环境

Windows 10 21H1 + Linux子系统Ubuntu 20 LTS + Windows Terminal,本文提及的所有操作都再此环境下运行,如果您使用的是MacOS或者任何Linux发行版,直接运行操作系统中的terminal亦可。

打开Windows Terminal,运行命令wsl进入Linux子系统:

* 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’是当前目录内所有文件所占磁盘空间的总和(KB),它下面的列表我们分成七列来看:

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

第二列:文件的硬链接数量,1代表此文件有1个硬链接,就是文件本身,可使用ln新建一个硬链接指向文件file,再次通过ls -l命令查看,两个文件在此的数值都变为了2;根据发行版的不同会有差异,当前文件如果是目录的话会显示其包含子目录的个数

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

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

第五列:文件大小(以字节为单位,byte,b)

第六列:文件修改时间,格式为‘月,日,时:分’

第七列:文件名,颜色显示依据不同终端主题和样式会有差别

文件属性

 

第一列的文件属性列表,我们可以继续拆分成四列来看:

首列标识了文件的类型,分别解释如下:

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

‘d’: directory, 此文件是一个目录,目录也是一个特殊的文件,它存放着其他文件或目录

‘l’:link,此文件是一个软链接文件

除了以上常见的三种文件标识,还有诸如c,b,p等特殊文件标识,日常工作中很少用到,这里就不细说了,感兴趣的小伙伴可以另行查阅。

在首列文件类型列之后,密密麻麻的有9个字母或横线组成了一串字符,我们把这9个字符拆分为3组,每组3个字符:

从左至右分别为:

第一组:user,用户,即owner,文件所属的用户,对此文件的权限都有哪些

第二组:group,组,文件所属的组内所包含的用户,对此文件的权限都有哪些

第三组:other,其他用户,除了此文件所有者和此文件所属组内用户的其他用户,对此文件的权限都有哪些。

每组对应的文件权限又分配有三个属性,r,w,x,并且三个属性的位置是固定不变的,即r永远在最左侧,w永远在最中间,x永远在最右侧。如果某个属性被禁用,则以横杠‘-’代替。三个属性分别为:

r:read,可读

w:write,可写

x:execute,可执行

-:none,没有

回到我们刚才查看的文件列表,可以很清楚3个文件的权限配置:

文件’file’:

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

这是一个普通文件,允许它的所有者用户neo读和写,但不允许执行;对名为neo的组内所有用户成员,允许他们可读,但不允许修改和执行;对既不是它的拥有者neo也不是neo组内成员的其他用户,允许读取,但不允许修改和执行。

文件’folder’:

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

这是一个文件夹,为它的所有者用户neo开放所有权限; 对名为neo的组内所有用户成员和其他用户,允许他们读取和执行,但不允许修改。

文件’folder’:

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

这是一个链接,允许所有用户读取,修改和执行。

chown修改文件所有者

文件的持有者可以通过命令chown改变,比如更改文件file的持有者从neo到smith,此命令如果是普通用户执行的话需要在命令前面加sudo:

sudo chown smith file

chown:change owner,更改持有者

sudo:SuperUser DO,超级用户做,指的是root用户

chown命令也可以同时修改用户和组,以‘用户名:组名’的形式:

sudo chown neo:neo file

chgrp修改文件所在组

文件的所在组可以通过命令chgrp改变,比如更改文件file的组从neo到matrix,此命令如果是普通用户执行的话需要在命令前面加sudo:

sudo chgrp matrix file

chgrp:change group,更改用户组

chmod修改文件权限

我们使用命令chmod修改文件权限。官方给出的文档用法是这样的:

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,用户,为文件所有者修改权限

例:为文件所有者添加可读权限chmod u+r file

g:group,组,为文件所在组修改权限

例:为文件所在组添加可读权限chmod g+r file

o:other,其他用户

例:为其他用户添加可读权限chmod o+r file

a:all, 全部,等同于ugo,为文件所有者,组和其他用户全部修改权限

例:为所有用户添加可读权限chmod a+r file

ugoa也可以随意组合,比如为用户组和其他用户移除可写权限chmod go-w file

[+-=]

+:添加权限

-:移除权限

=:使权限相同,为文件所有者,组或者其他用户,按照指定的所有者,组或者其他用户,或者指定的rwx权限,分配相同的文件权限

例:修改组权限为文件所有者相同的权限,修改前的组权限为r--, 修改后为rwx,见下图:

[rwx]

r:read,可读

w:write,可写(修改)

x:execute,可执行

rwx也可随意组合,例如,设置允许其他用户可读并且可写 chmod o+rw file, 再例如设置移除组和其他用户的可写和执行权限chmodgo-wx file

[-R]

递归的生效于目标目录下的所有子目录和文件

修改文件’file’的权限,为其所有者neo增加执行权限:

执行命令:chmod u+x file,再次执行命令ls -l确认修改结果

我们发现相比之前该文件的权限,经过更改后在用户组中多出了一个x,变为了rwx;其他两组没变,依然是r--

更快捷的方法

如果打开chmod --help,这个命令的man手册有一条用法:

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

Octal-mode:八进制模式,此模式分别为r, w, x分配了权重数值,即:

r: 4

w: 2

x: 1

回到我们最初新建的3个文件,用八进制标识权限分别为644,755,777:

所以chmod命令可作用于更加快捷的权限分配。例如修改file文件,使得它的持有者可读可写(4+2+0=6),组只可读可写(4+2+0=6),其他用户只可读(4+0+0=4):

chmod 664 file

一个文件的最高权限是777,即文件所有者,组和其他用户都有读,写和执行的权限,相当于ugo+rwx。

好多文件权限问题是文件持有者和组的问题,而不要上来就粗暴的给777,当作是玩水果机呢,即使你的环境非常安全,但也是一个很不好的习惯。

上一篇下一篇

猜你喜欢

热点阅读