我们使用ls -l查看文件列表,前面有一串信息:
解析:
一个文件有一个所有者(user-u),一个组(group-g),其他人(other-o)。
修改所有者、所属组,可以使用 chown 命令:
chown 目标用户 file/dir :修改文件或目录的所有者为目标用户。
chown .目标组 file/dir :修改文件或目录的所属组为目标组。也可以使用 chown :目标组 file/dir 。
chown 目标用户.目标组 file/dir :同时改变文件或目录的所属者和所属组。也可以使用 chown 目标用户:目标组 file/dir 。
chgrp :这个命令用来专门修改所属组。例如 chgrp 目标组 file/dir 。
在使用chown或chgrp命令对多层目录进行修改时,要使用 -R递归 的进行修改:
chown -R leo hello :把hello目录已经hello中的所有目录和文件的所有者都修改为leo。
上图中的一列数字,为硬连接的数量。
上图中的11个字符:
第一个"-":代表是文件还是文件夹,是文件夹的话,该位置为"d"。普通文件(文本文件、二进制文件)都显示"-"。软连接显示"l"。可以存储东西的设备,例如/dev/sda1,用"b"标识。不能存储东西的设备,例如tty,用"c"标识,例如/dev/tty。 第2~9个"-":每三个为一组,第一组代表所有者的权限,第二组代表所属组用户的权限,第三组代表其他人的权限。
每一组的三个字符:
rwx:r表示读权限,w表示写权限,x表示执行权限。r是4,w是2,x是1,加起来是7,所以可读可写可执行就是7,可读可写是6,以此类推。
最后一个".":
与selinux和acl有关。如果关闭selinux,该点消失。
文件夹的可执行:
能够cd进去就表示可执行。如果不想让某个用户查看该文件夹下的内容,就可以设置该用户对此文件夹不可执行。或者给他可执行权限,不给读权限,用户能够cd进去,但不能查看内容。
修改权限:(root和文件所有者可以修改权限)
chmod u+x file:表示给所有者加上可执行权限。 chmod g+x file:表示给所有组加上可执行权限。 chmod o+x file:表示给其他用户加上可执行权限。 chmod g+rwx file:表示给所属组加上可读可写可执行权限。 chmod u+r,g+x file:用","隔开。 chmod u=rw file:用rw覆盖以前u的权限(不管以前的u是什么权限)。 chmod a+x file:a代表all,包含了所有者、所属组、其他人。 chmod 777 file:表示给所有者、所属组、其他人都给可读可写可执行权限。 chmod 600 file:表示给所有者可读可写权限,所属组和其他人都没有任何权限。
刚创建好的文件和目录,权限默认分别是644和755:
因为目录需要赋予可执行权限,才能cd进去。
系统可以给文件和目录默认的最高权限分别是666和777。我们可以通过修改umask来修改默认权限。
umask 022 :意思是, --- -w- -w- 。文件的默认最高权限是 rw- rw- rw- ,经过umask对所属组和其他人的w权限过滤( rw- rw- rw- 过滤 --- -w- -w- ),变成了 rw- r-- r--,所以默认最高权限是644。目录同理。
s权限:
出现在可执行命令的所有者x权限位置,例如/bin/passwd命令:
当拥有这个s权限时,普通用户在使用这个命令时,也会获得root用户的权限。所以普通用户才能自己修改密码(/etc/shadow对普通用户是没有任何权限的)。
例如:我们可以给/bin/vim添加s权限,使普通用户可以编辑属于root:root的文本文件。
chmod u+s /bin/vim
s权限出现的目录的所属组的x权限位置,例如:
chmod g+s /hello/ :给根目录下的hello目录的所属组加上s权限。
那么,拥有该目录写权限的其他用户到这个目录下创建的所有文件或文件夹的所属组都与hello的所属组相同。
t权限:
出现在目录的other用户的x权限位置:表示该目录下的文件,除了root和所有者,其他用户是不能删除的。
chmod n644 file :在n的位置,代表s和t权限。n=4表示在u+s,n=2表示g+s,n=1表示o+t。
隐藏权限:
chattr +a file :表示该文件夹只能增大不能减小,例如date >> file,可以执行成功,但是date>file就报错。删除file也不可以。
chattr +i file :不能修改该文件,也不能删除。
lsattr file :查看该文件的隐藏权限。
===