一、Linux 文件的基本属性
在Linux系统中“一切皆文件”,使用 ll 或者 ls –l 命令来显示一个文件的权限信息。
第一列: 文件类型(共10个字符) + 权限 --> man find 搜索type可看-:普通文件d:目录c:字符设备 --> /dev/tty 例如 USB接口、猫等一些串行端口设备b:块设备 --> /dev下查找 例如光驱,硬盘等属于块设备.:SELINUX相关 l:链接文件 --> 软连接p:管道文件,特殊少见的设备后面的9个字符每3个为一组[rwx],分别代表文件所有者、文件所有者所在用户组、其它用户对文件拥有的权限。[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。若没有其中的任何一个权限则用“-”表示。执行的权限有两个字符可选,最常见的一个是“x”代表可执行。另一个是“s”代表套接口文件。第二列:硬链接个数 默认从1开始 如果是目录,则默认是2(目录不做硬链接)为这个目录下的目录文件数目(这个数目=隐藏目录数目+普通目录数目)。(如果这只是一个普通文件,那“2”就代表这个文件有两个别名,这个文件被人创建了一个硬链接文件),总而言之它就是一个计数第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
第五列:文件大小(默认字节数),如果想看K或者M等,前面加一个选项-h
第六-八列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
第九列:文件名或目录名。
更改文件属性
1、chmod:更改文件9个属性
2、chown:更改文件属主,也可以同时更改文件属组
3、chgrp:更改文件属组
对文件和目录文件的权限的正确认识
1)文件:
r-读:对文件的内容有读的权限,对应命令:cat,more,less,head,tail等
w-写:可以修改文件的内容,对应命令:vi,vim,echo等,注意:对文件的写权限不能删除文件本身,要删除文件必须拥有文件的父文件夹的写权限
x-执行:表示拥有执行这个文件的权限,但是不是说有这个权限,文件就可以执行,文件是否可以执行,要看这个文件里的内容是否是执行的代码。
2)目录:
r-读:是可以查看文件夹里的内容,对应命令:ls
w-写:可以修改子目录和文件里的内容,也就是可以复制,删除,新建,移动文件夹里的子目录和文件,对应命令:cp,touch,mv,rm等
x-执行:文件夹显示是不能运行的,对文件夹设置执行权限,表示可以进入到文件夹里边去,对应的命令:cd
二、更改文件或目录权限的9个属性
chmod命令:英文 change the permissions mode of a file
命令所在路径:/bin/chmod
功能:改变文件或目录权限
执行权限:所有使用者
语法: chmod [-cfvR] [--help] [--version] mode file...
参数说明
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...]
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。权限用数字表示:r=4,w=2,x=1
其他参数说明:
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
- --help : 显示辅助说明
- --version : 显示版本
注意:不是每一个Linux用户都有权限更改某个文件或目录权限,能更改文件或目录权限的只有两种用户
1)root用户:root用户是linux系统权限最大的用户。别人不能干的事,root用户都能干。
2)文件的所有者:我们通过ls命令查看某个文件的详细信息,可以看到该文件的所有者。
常用的权限的数字模式又这几种:
644(rw-r--r--):这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。
755(rwxr-xr-x):这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。
777(rwxrwxrwx):这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。
实例:
1)赋予abc目录下的file2.cfg文件,拥有者rwx,所属组rw,其他人r权限
[root@centos7 abc]# ll
总用量 8
-rw------- 1 root root 1440 12月 12 14:22 file2.cfg
drwxr-xr-x 2 root root 29 12月 12 11:27 test22
-rw-r--r-- 1 root root 57 12月 12 14:37 test.txt
[root@centos7 abc]# ^C
[root@centos7 abc]# chmod u+rwx,g+rw,o+r ./file2.cfg
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 root root 1440 12月 12 14:22 file2.cfg
drwxr-xr-x 2 root root 29 12月 12 11:27 test22
-rw-r--r-- 1 root root 57 12月 12 14:37 test.txt
2)赋予abc目录下的test.txt文件,拥有者rwx,所属组rx,其他人r权限,数字操作754
[root@centos7 abc]# chmod 754 ./test.txt
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 root root 1440 12月 12 14:22 file2.cfg
drwxr-xr-x 2 root root 29 12月 12 11:27 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
3)赋予test22目录下的所有子目录和文件(递归赋予权限,包含该目录),拥有者rwx,所属组rx,其他人r权限,数字操作754
[root@centos7 abc]# ll ./test22
总用量 4
-rw------- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-x 2 root root 6 1月 4 14:08 test_d
[root@centos7 abc]# chmod -R 754 ./test22/
[root@centos7 abc]# ll ./test22
总用量 4
-rwxr-xr-- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-- 2 root root 6 1月 4 14:08 test_d
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 root root 1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root 43 1月 4 14:08 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
三、改变文件或目录拥有者权限
一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的文件拥有者,也没有权限把自己的文件拥有者改设为别人。只有系统管理者(root)才有这样的权限。
chown命令:英文 change file ownership
命令所在路径:/bin/chown
功能:更改文件属主,也可以同时更改文件属组
执行权限:系统管理者
语法: chown [-cfhvR] [--help] [--version] user[:group] file...
参数 :
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- --help : 显示辅助说明
- --version : 显示版本
实例:
1)先创建一个lisi用户,和g_lisi用户组
通过useradd [户名]命令创建用户,通过passwd [用户名] 命令设置密码
通过 groupadd [用户组]命令创建用户组
[root@centos7 abc]# useradd lisi
[root@centos7 abc]# passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码包含用户名在某些地方
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos7 abc]# groupadd g_lisi
2)将abc目录下的file2.cfg文件的拥有者改为lisi用户,所属组改为g_lisi用户组(若是递归修改,加 -R)
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 root root 1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root 43 1月 4 14:08 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
[root@centos7 abc]# chown -c lisi:g_lisi ./file2.cfg
changed ownership of "./file2.cfg" from root:root to lisi:g_lisi
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 lisi g_lisi 1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root 43 1月 4 14:08 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
四、改变文件或目录所属组
chgrp命令:英文 change file group ownership
命令所在路径:/bin/chown
功能描述:用于变更文件或目录的所属群组。
执行权限:系统管理者
语法: chgrp [-cfhRv] [--help] [--version] [所属群组] [文件或目录...]
或 chgrp [-cfhRv] [--help] [--reference=<参考文件或目录>] [--version] [文件或目录...]
参数说明
-c或--changes 效果类似"-v"参数,但仅回报更改的部分。
-f或--quiet或--silent 不显示错误信息。
-h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或--verbose 显示指令执行过程。
--help 在线帮助。
--reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
--version 显示版本信息。
实例:
1)将test22目录下的test_d目录的所属组,改为g_lisi用户组
[root@centos7 abc]# ll ./test22
总用量 4
-rwxr-xr-- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-- 2 root root 6 1月 4 14:08 test_d
[root@centos7 abc]# chgrp -v g_lisi ./test22/test_d/
changed group of "./test22/test_d/" from root to g_lisi
[root@centos7 abc]# ll ./test22
总用量 4
-rwxr-xr-- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-- 2 root g_lisi 6 1月 4 14:08 test_d
2)将test22目录下的所有文件及目录的所属组,改为abc目录的所属组(递归修改)
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 lisi g_lisi 1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root 43 1月 4 14:08 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
[root@centos7 abc]# ll ./test22
总用量 4
-rwxr-xr-- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-- 2 root g_lisi 6 1月 4 14:08 test_d
[root@centos7 abc]# chgrp -vR --reference=. ./test22
"./test22/anaconda-ks.cfg" 的所属组已保留为root
changed group of "./test22/test_d" from g_lisi to root
"./test22" 的所属组已保留为root
[root@centos7 abc]# ll
总用量 8
-rwxrw-r-- 1 lisi g_lisi 1440 12月 12 14:22 file2.cfg
drwxr-xr-- 3 root root 43 1月 4 14:08 test22
-rwxr-xr-- 1 root root 57 12月 12 14:37 test.txt
[root@centos7 abc]# ll ./test22
总用量 4
-rwxr-xr-- 1 root root 1440 12月 12 11:25 anaconda-ks.cfg
drwxr-xr-- 2 root root 6 1月 4 14:08 test_d
五、查看,设置建立文件时预设的权限掩码
umask命令:英文 the user file-creation mask
命令所在路径:shell 内置命令
功能描述:查看,设置建立文件时预设的权限掩码
语法:umask [-S] [权限掩码]
参数说明:
-S 以文字的方式(rwx形式)来表示权限掩码。
1、umask介绍
在linux系统中,我们创建一个新的文件或者目录的时候,这些新的文件或目录都会有默认的访问权限,umask命令与文件和目录的默认访问权限有关。若用户创建一个文件,则文件的默认访问权限为 -rw-rw-rw- ,创建目录的默认权限 drwxrwxrwx ,而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值。
注意:可能大家不太明白这个命令的意思,我们分别执行umask和 umask -S
2、查看默认/当前权限掩码
[root@centos7 ~]# umask
0022
[root@centos7 ~]# umask -S
u=rwx,g=rx,o=rx
可以看到 umask 执行显示结果是 0022,第一个0表示特殊权限,可以暂时不用理会。然后,后三位022表示权限的掩码值(与普通权限(rwx)有关),可以简单理解为:
若创建为文件,则 666(rw-rw-rw-) - 022 = 644(rw-r--r--)
若创建为目录,则 777(rwxrwxrwx)- 022 = 755(rwxr-xr-x)
通过实例验证一下:
注意:
在Linux系统中,所有新创建的文件都是没有可执行权限的。这是由于Linux系统的一种自我保护,因为类似的病毒木马程序都是具有可执行权限的。所以在Linux系统中,新创建的文件是没有可执行权限的。对于新建的文件最高的权限666(rw-rw-rw-)
3、暂时修改默认/当前权限掩码(重启失效,了解即可)
设置当前的权限掩码为024,
文件:666(rw-rw-rw-)- 024 = 642(rw-r---w-),目录:777(rwxrwxrwx)- 023 = 754(rwxr-xr--)
如要永久更改修改,将umask保存到环境文件中:
全局设置: /etc/bashrc
用户设置:~/.bashrc
4、递归创建目录时的权限分配问题
结论:递归创建时指定的权限只对最底层目录生效,而上级目录都是默认权限。
5、权限掩码值的计算
参考文章:http://www.360doc.com/content/17/1213/10/41190201_712627810.shtml
站在前辈的肩膀上,每天进步一点点
ends~