Linux文件属性
在Linux当中的文件和目录都会有一个所有者和所属组。所有者是指文件或目录的拥有者,所属组指的是这个文件属于哪一个用户组。这样设置文件属性是为了文件和目录的安全。
使用ls-l命令可以查看文件或目录的权限
[root@localhost ~]# ls -l 22
-rw-r--r--. 1 root root 0 1月 31 03:33 22
如上图所示,执行ls-l 命令后显示出来的内容就是该文件的属性了。-rw-r--r-- 其中第一个字符“-”表示该文件是个普通文件,下面列举一下各个不同的字符表示的意思。
第一个字符表示的意思
- d 表示该文件是目录
- -表示该文件是普通文件
- l 表示该文件为链接文件
- b 表示该文件为块设备,比如/dev/sda 这样的硬盘分区文件就是这种类型 -c表示该文件为串行端口设备文件,比如键盘、鼠标、打印机、tty终端等
- s表示该文件为套接字文件,用于进程之间的通信
文件属性当中后九位,每三位一组,都是rwx-这四个字符的组合,前三位表示该文件所有者的权限,中间三位表示该文件所属组的权限,后三位表示其他用户对该文件的权限
- r为可读权限,用数字表示r=4
- w为可写权限,用数字表示w=2
- x为可执行权限,用数字表示x=1 所以当我们在赋予一个文件权限时,比如赋予它所有者可读可写可执行,所属组可读可执行,其他用户可执行的权限时 ,可以使用chmod 731 filename
我们还可以看到,在权限属性字符的后面还有一个字符“·”
这个是因为新版本的ls添加了SELinux或者acl的属性。如果文件或目录使用了SELinux context的属性,这里就会显示一个. ,如果设置了acl属性,这个地方会显示一个+。
[root@localhost ~]# ls -l 22
-rw-r--r--. 1 root root 0 1月 31 03:33 22
- 在“.”后面还有一个“1”这个数字表示该文件占用的节点,如果是目录,那么这个数值与该目 -下的子目录数量有关。
- 后面的第一个“root”表示该文件的所有者
- 第二个“root”表示该文件的所属组
- “0”表示文件的大小
- 再后面表示文件最后一次被修改的时间(mtime),依次是月,日,点
- 最后一组字符是文件名
chmod命令
chmod (change mode)命令是用来更改文件或目录权限的命令 格式为chmod 权限 filename 上面我们提到了读写执行权限用数字表示的方式,那么在系统中默认的目录权限为755 ,文件的默认权限是644,除了用数字表示,我们在更改权限的时候也可以直接用字符更改。举个例子:
[root@localhost ~]# ls -l 22
-rw-r--r--. 1 root root 0 1月 31 03:33 22
[root@localhost ~]# chmod 777 22
[root@localhost ~]# ls -l
总用量 4
-rwxrwxrwx. 1 root root 0 1月 31 03:33 22
-rw-------. 1 root root 973 1月 31 02:11 anaconda-ks.cfg
[root@localhost ~]# chmod u=rwx,g=rw,o=--- 22
[root@localhost ~]# ls -l 22
-rwxrw----. 1 root root 0 1月 31 03:33 22
[root@localhost ~]# ^C
[root@localhost ~]#
可以看到,在使用字符修改的时候需要使用u=rwx ,g=rw,o=--- ,其中u表示user,g表示group,o表示others 的权限 ,此外还可以使用a ,a表示所有,包括所有者,所属组和其他用户
[root@localhost ~]# chmod a+rw 22
[root@localhost ~]# ls -l 22
-rwxrw-rw-. 1 root root 0 1月 31 03:33 22
chmod命令还有一个-R的选项,这个指针对目录使用,表示级联更改目录属性,将该目录下所有的目录和文件都改成和该目录相同的权限。
chown命令
chown命令(change owner)可以更改文件和目录的所有者 格式为:chown_ 用户名:组名 文件名_,当文件是目录时,且要讲目录下所有的文件都更改所有者,需要使用 chown -R 用户名:组名 文件名,当不需要更改所属组时,将":组名"这个参数删掉即可。
[root@localhost ~]# ls -l 22
-rwxrw-rw-. 1 root root 0 1月 31 03:33 22
[root@localhost ~]# chown lic 22
[root@localhost ~]# !ls
ls -l 22
-rwxrw-rw-. 1 lic root 0 1月 31 03:33 22
[root@localhost ~]#
chgrp命令
chgrp命令(change group)更改文件的所属组,格式为:chgrp 组名 文件名 ,同样的,如果要更改一个目录及该目录下左右文件的所属组,需要使用:chgrp- R命令。
umask命令
umask的值用来改变文件的默认权限,一个目录预设权限时777,一个文件预设权限是666,分析一下umask的值和默认权限的关系可以得出的结论是,文件默认权限=预设值-umask值。举个例子:
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir test01
[root@localhost ~]# ls -ld test01/
drwxr-xr-x. 2 root root 6 2月 23 23:35 test01/
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# mkdir test02
[root@localhost ~]# ls -ld test02
drwxrwxr-x. 2 root root 6 2月 23 23:36 test02
[root@localhost ~]# umask 077
[root@localhost ~]# umakd
-bash: umakd: 未找到命令
[root@localhost ~]# umask
0077
[root@localhost ~]# mkdir test03
[root@localhost ~]# ls -ld test03
drwx------. 2 root root 6 2月 23 23:37 test03
[root@localhost ~]#
chattr命令
chattr命令(change attribute),格式为:chattr [+、-、=] [参数] 文件名或目录名 其参数如下:
- A:增加改属性后,表示文件或目录的Atime将不可修改。
- s:增加该属性后,表示数据会同步写入磁盘中。
- a :增加改属性后,表示文件只能追加,不能删除,只有root用户才能设定改属性。
- c :增加该属性后,表示自动压缩该文件,在读取时会自动解压。
- i :增加该属性后,表示文件不能删除,重命名,设定链接、写入及新增数据。
[root@localhost ~]# umask
0022
[root@localhost ~]# mkdir test01
[root@localhost ~]# ls -ld test01/
drwxr-xr-x. 2 root root 6 2月 23 23:35 test01/
[root@localhost ~]# umask 002
[root@localhost ~]# umask
0002
[root@localhost ~]# mkdir test02
[root@localhost ~]# ls -ld test02
drwxrwxr-x. 2 root root 6 2月 23 23:36 test02
[root@localhost ~]# umask 077
[root@localhost ~]# umakd
-bash: umakd: 未找到命令
[root@localhost ~]# umask
0077
[root@localhost ~]# mkdir test03
[root@localhost ~]# ls -ld test03
drwx------. 2 root root 6 2月 23 23:37 test03
[root@localhost ~]#
上面例子中,给test01 设置“i”权限后,即使root用户也不能在这个目录中创建目录或文件。减掉-i 权限后就可以正常执行创建目录的命令了。
[root@localhost ~]# chattr +a test01
[root@localhost ~]# touch test01/123
[root@localhost ~]# rm test01/123
rm:是否删除普通空文件 "test01/123"?y
rm: 无法删除"test01/123": 不允许的操作
[root@localhost ~]# chattr -a test01
[root@localhost ~]# rm test01/123
rm:是否删除普通空文件 "test01/123"?y
[root@localhost ~]#
在这里可以看到,给该目录设置a权限后,只能在该目录下创建文件,不能删除文件了。
lsattr命令
lsattr命令(list attribute),用于读取文件或目录的特殊权限 ,其格式为:lsattr -[a 、R] [文件名或目录名]
- a表示连同隐藏文件一同列出
- R 表示连同子目录的数据一同列出
[root@localhost ~]# lsattr test01
---------------- test01/test04
[root@localhost ~]# lsattr -a test01
---------------- test01/.
---------------- test01/..
---------------- test01/test04
[root@localhost ~]# lsattr -R test01
---------------- test01/test04
test01/test04:
[root@localhost ~]#