前言
已经拖更好几天了,有些坚持的事情一旦中断便很难再捡起来了,所以还是尽可能的坚持下去,今天就简单记录一下文件权限相关的操作。
这里先扔出一张图,这么懒的我居然画了一张图!不过前几天感冒状态不太好,这张图画了好几晚上才完成,就凑活看吧。
基本上看注释就能明白各列的含义,关于“文件硬链接数”这一列还有点疑问,在CentOS上测试,确实如注释所言,普通文件显示的硬链接数,目录文件显示的是第一级子目录的个数,但是在WSL上却不符合这个说法,暂时还没有找到原因,接下来还是列举下文件权限相关的操作吧。
基础概念
在linux系统中的每个用户必须属于一个组,不能独立于组外。而每个文件的权限区分所有者、所在组、其它人,就像图片中展示的那样
- 所有者:指创建文件的人,拥有第一组权限
- 所在组:指的是和所有者在同组的人,拥有第二组权限
- 其他人:指排除掉前两类的其他人,拥有第三组权限
每组权限都分为读、写、执行三种具体权限,对应数字分别是4、2、1,字母表示为r、w、x,没有权限可以用-
表示,也就是0,因为有这些表示方法,修改文件的命令形式也有很多种。
一个文件的访问权限是可以进行修改的,用户可以使用 chmod
命令来重新设定不同的访问权限,可以使用 chown
命令来更改某个文件或目录的所有者,也可以利用 chgrp
命令来更改某个文件或目录的用户组。
chmod 命令
上面说到文件的权限分为所有者、同组人、其他人三组,每组权限又有r、w、x三种权限,分别用数字4、2、1表示,举几个对照的例子如下
rwx r-x r–x 755
rw- r–- –-- 640
rw- rw- r–- 664
因为表示的多样性,该命令有通常有字母表达式和数字表达式两种用法,格式如下:
chmod [who] [+ | – | =] [mode] filename
命令中各选项的含义为:
命令中的 who
可是下述字母中的任一个或者它们的组合:
u
表示所有者userg
表示同组用户groupo
表示其他人othera
表示所有用户all,是系统默认值
权限改变的符号可以是:
+
添加某个权限–
取消某个权限=
赋予给定权限并取消其他所有权限(如果有的话)
命令中的 mode
所表示的权限可用下述字母的任意组合:
r
可读权限w
可写权限x
可执行权限X
只有目标文件对某些用户是可执行的或该目标文件是目录时才追加 x 属性u
与文件属主拥有一样的权限g
与和文件属主同组的用户拥有一样的权限o
与其他用户拥有一样的权限
常见写法如下:
$ chmod a+x happy.txt
$ chmod ug+w file.xml
$ chmod 755 a.out
chgrp 命令
该命令能改变文件或目录所属的组,语法如下:
chgrp [option] group filename
option参数可选:
-f,–quiet,–silent: 不显示错误信息
-R,–recursive: 递归处理,将指定目录下的所有文件及子目录一并处理
-v,–verbose: 显示指令执行过程
命令中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组的。
$chgrp -R mysql /opt/local/my.ini
chown 命令
该命令可以更改某个文件或目录的属主,也就是所有者。语法如下:
chown [option] groupname|username filename
chown可以将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。与 chgrp命令一样,参数文件也是以空格分开的要改变权限的文件列表,支持通配符。
option参数可选:
-f: 若该文件拥有者无法被更改也不要显示错误讯息
-h: 只对于连结(link)进行变更,而非该 link 真正指向的文件
-v: 显示拥有者变更的详细资料
-R: 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
修改文件所有者的例子如下:
$ chown redis /ect/redis/redis.config
总结
ls -l
命令执行后的第5列,表示文件的硬连接数chmod a+x happy.txt
可以修改文件的权限信息chgrp a+x fruit.txt
可以修改文件的所有组信息chown redis /ect/redis/redis.config
可以修改文件的所有者信息
鲁迅先生说“我向来是不惮以最坏的恶意,来推测中国人的,然而我还不料,也不信竟会下劣凶残到这地步。”
其实黑暗中往往也透露着光明~