前面说到 ls 命令的时候,有个 ls -l 的用法,见下图 这个命令可以查看文件的详细信息,具体含义详见下图,
先来回顾一下文件类型: “d” 表示目录 “-” 表示普通文件或是二进制文件 “c” 表示字符串设备文件 “l” 表示软链接文件 “b” 表示块设备文件 “s” 表示 socket 文件 第一列中除了第一个字符表示文件的类型之外,后面的九位表示文件的权限,有三个属性:是否可读(read,可读为r,不可读为-),是否可写(write,可写为w,不可写为-),是否可执行(可执行为x,不可执行为-)。 ①权限的前三位 表示文件所有者的权限,rw-为可读可写不可执行 ②权限的中间三位 表示文件所属用户组的权限,r--为只读 ③权限的后三位 表示其他用户的权限,即除了文件所有者和文件所属组之外的用户权限。r--为只读 权限还可以用数字表示,r=4,w=2,x=1,例如: rwx=7,rw-=6;--x=1;rw-r--r--=644;rw-r-xr-x=655。
现在搞清楚了权限的表达方式,来介绍一个命令 chmod ,它是 change mode 的缩写,意思为更改权限。 做个实验,我们把 2.txt 这个文件更改一下权限,为所有者读写执行,所属组和其他用户全部都没有权限,这个权限就表达为 rwx------=700,现在输入命令 chmod 700 2.txt ,回车,即可设置成功,然后用命令 ls -l 2.txt ,见下图, 以上就是 chmod 这个命令对权限更改的用法。 接着再来说一下,权限位后面的那一点 “.”,这个点不是每个文件都有的,这个“.”意味着这个文件受制于 selinux ,如果 selinux 开启了,创建的文件或是创建的目录第一列的最后一位会有一点, 如果把 selinux 关闭,输入命令 getenforce 查看 selinux 是否关闭,回车,见下图, 命令 setenforce 0 是临时关闭 selinux 。彻底关闭的话,需要更改配置文件,输入命令 vi /etc/selinux/config ,这次先不更改,查看下图, 默认 SELINUX=enforcing ,enforcing 表示开启,permissive 表示警告, disabled 表示关闭。按字母“:q”退出。 更改配置文件并重启,接下来,我们创建一个新的文件,再用 ls -l 命令查看就不会有一个点了。这个做个了解就可以了。
关于 chmod 的用法,还有一个选项 -R , 举个例子,见下图, 用 cd 命令进入目录 /tmp/ ,用 ls -l 命令查看这个目录,再用命令 ls -l 进入目录 lys2 ,可以看到 1.txt 文件,这个文件的权限是 rw-r--r-- ,即 744 ,我们更改一下 1.txt 这个文件的权限,输入命令 chmod 777 lys2 ,回车,再用命令 ls -l lys2 和 ls -ld lys2 做个比较,见下图 , 可以看出目录 lys2 下的文件 1.txt 的权限并没有变化。由此可见, chmod 这个命令对文件也好,对目录也好,它操作生效的仅仅是目录本身,如果想把目录下面的子目录和子文件,全部一次性的批量的更改权限的话,这个时候就用到 -R 这个命令了,输入命令 chmod -R 770 lys2 ,见下图, 可以看出,lys2 目录和 1.txt 文件的权限都变成 rwxrwx--- , 770 了。
chmod 命令还有一种更简单直观的用法,见下图, 其中, u=rwx ,即 user 所有者用户的权限。g=r ,即 group 所属组用户的权限。o=r ,即 other 其他用户的权限。上面的命令中,- 不显示出来,直接略过,并且把 - 写上去的命令也是不对的。上图中的这个命令写法比较的繁琐,建议还是用数字表示。
chmod 命令还有一种用法,见下图, 其中,a+x 中的 a 表示所有的用户,+ 表示加上权限,x 表示可执行权限。命令执行完毕之后,用 ls -l 命令查看,可以发现,所有者、所属组和其他用户的权限里都有 x 这个可执行权限。而 a-x 这个命令就是,所有的用户减去 x 这个可执行权限,用命令 ls -l 查看,可以发现所有的用户权限都没有了 x 这个可执行权限。 a 是针对所有用户权限的命令,当然也可以只针对单个用户权限的命令,把 a 换成 u 、 g 、o 就是更改相对应用户的权限。见下图,
以上就是 chmod 命令的用法,总结: ①chmod + 数字权限表达方式 + 文件 ,更改文件的用户权限; ②chmod + 数字权限表达方式 + 目录 ,仅更改目录的用户权限,没有更改目录下的子目录和子文件权限; ③chmod + -R + 数字权限表达方式 + 目录,批量更改目录和目录下的子目录和子文件权限; ④chmod + u=rwx,g=rwx,o=rwx + 目录,u,g,o中的权限自己定义,并非全部写 rwx ,仅更改目录的用户权限,没有更改目录下的子目录和子文件权限; ⑤chmod + (a/u/g/o)+(+/-)+(r/w/x/-)+ 文件/目录,增加或去掉相关用户的相关权限。