在开始今天的话题之前,我们首先来回顾下ls命令。在ls命令中参数“-l”会显示出来目标的详细信息,如下所示:
1
2
3
4
5
6
7
8
|
[root@server02 ~]# ls -l /tmp/
总用量 4
-rwx------. 1 root root 836 5月 27 06:19 ks-script-ogzDFA
drwxr-xr-x. 5 root root 75 5月 30 05:26 test
drwxr-xr-x. 2 root root 6 5月 30 04:15 test1
drwxr-xr-x. 3 root root 17 5月 30 04:16 test2
-rw-------. 1 root root 0 5月 27 06:10 yum.log
[root@server02 ~]#
|
在前几帖中,我们曾提到过第一列(上图的“-”和“d”等)标记的是对象的文件类型。而后面还有10位,最后一位“.”表示开启了selinux,当关闭后,这个标识位将会消失。而中间的“rwxr-xr-x”等9位字符标记的是对象的权限。
这9位字符中,前三位描述的是所有者(如上图某行的第一个root,表示所有者是root用户)的权限,中间三位描述的是所属组(如上图某行的第二个root,表示所属组是root组)的权限,最后三位则描述的是除所有者和所属组外其他人的权限。其中“r”表示可读,“w”表示可写,“x”表示可执行,而“-”则表示的是没有该项权限。
在使用时,我们把“r”规定值为4,“w”为2,“x”为1,以及“-”为0,如rwx=7、r-x=5等。这样也就方便我们描述对象的权限。
chmod
1、命令作用
赋予文件或目录权限
2、命令格式
chmod [options] file
3、参数
-R 对目前目录下的所有文件和子目录进行相同的权限变更。
4、样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@server02 test]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月 30 07:03 1.txt
-rw-r--r--. 1 root root 0 5月 30 07:03 2.txt
drwxr-xr-x. 2 root root 6 5月 30 07:04 file1
[root@server02 test]# chmod 777 1.txt
[root@server02 test]# chmod u=rwx,g=rw,o=r 2.txt
[root@server02 test]# chmod g+w file1
[root@server02 test]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 5月 30 07:03 1.txt
-rwxrw-r--. 1 root root 0 5月 30 07:06 2.txt
drwxrwxr-x. 2 root root 6 5月 30 07:04 file1
[root@server02 test]#
|
注:推荐使用数字的方式赋予权限。
chown
1、命令作用
更改文件或目录的所有者或所属组
2、命令格式
chown [options] file
3、参数
-R 对目前目录下的所有文件和子目录进行相同的权限变更。
4、样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@server02 test]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 5月 30 07:03 1.txt
-rwxrw-r--. 1 root root 0 5月 30 07:03 2.txt
drwxrwxr-x. 2 root root 6 5月 30 07:04 file1
[root@server02 test]# chown user1 1.txt
[root@server02 test]# chown user2:user2 2.txt
[root@server02 test]# chown :user3 file1
[root@server02 test]# ll
总用量 0
-rwxrwxrwx. 1 user1 root 0 5月 30 07:03 1.txt
-rwxrw-r--. 1 user2 user2 0 5月 30 07:03 2.txt
drwxrwxr-x. 2 root user3 6 5月 30 07:04 file1
[root@server02 test]#
|
注:chgrp命令也可以更改所属组,因为chown也可以更改,不推荐使用
通过chown和chgrp两条命令,我们可以赋予文件或目录权限,也可以更换其所有者和所属组。那么,当一个新的文件和目录被创建的时候,它们的权限是怎么设置的呢?
1
2
3
4
5
6
7
|
[root@server02 test]# mkdir directory
[root@server02 test]# touch 1.txt
[root@server02 test]# ll
总用量 0
-rw-r--r--. 1 root root 0 5月 30 07:29 1.txt
drwxr-xr-x. 2 root root 6 5月 30 07:28 directory
[root@server02 test]#
|
可以看到默认生成的目录权限是755,文件权限是644。这样设置的原因是,目录需要执行权限才能cd进入目录下,而文件不需要执行权限,这样更安全些。而完成这个权限设置的功臣就是linux系统内的umask值。
1
2
3
|
[root@server02 test]# umask
0022
[root@server02 test]#
|
umask值默认为0022。目录采用777(rwxrwxrwx),文件采用666(rw-rw-rw-)的初始值,和umask值通过减权限(不是减法)的方式运算出目录和文件的初始权限。
1
2
3
4
5
6
|
例1:umask 002 002<-------w->
当创建一个文件 666<rw-rw-rw-> - 002<-------w-> = 664<rw-rw-r-->
当创建一个目录 777<rwxrwxrwx> - 002<-------w-> = 775<rwxrwxr-x>
例2: umask 033 033<----wx-wx>
当创建一个文件 666<rw-rw-rw-> - 033<----wx-wx> = 644<rw-r--r-->
当创建一个目录 777<rwxrwxrwx> - 033<----wx-wx> = 744<rwxr--r-->
|
chattr
1、命令作用
改变文件或目录属性
2、命令格式
chattr [options] file
3、参数
-i 不可以增加、追加、删除和更改,重命名任何内容和信息。
-a 只可以追加内容,不可以删除、更改和重命名。
4、样例
1
2
3
|
[root@server02 test]# chattr +i 1.txt
[root@server02 test]# chattr +a 2.txt
[root@server02 test]# chattr -i 1.txt
|
lsattr
1、命令作用
查看文件或目录属性
2、命令格式
lsattr [options] file
3、参数
-d 列出目录的属性信息。
-a 列出当前文件或目录下的所有文件(包含隐藏文件)的属性信息。
-R 列出目录下的所有文件和子目录及其下的所有文件的属性信息。
4、样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@server02 test]# lsattr
---------------- ./directory
----i----------- ./1.txt
-----a---------- ./2.txt
----i----------- ./dir1
[root@server02 test]# lsattr -a
---------------- ./.
---------------- ./..
---------------- ./directory
----i----------- ./1.txt
-----a---------- ./2.txt
----i----------- ./dir1
---------------- ./.3.txt
[root@server02 test]# lsattr -d
---------------- .
[root@server02 test]# lsattr -R directory
-----a---------- directory/test.txt
---------------- directory/dir2
directory/dir2:
-----a---------- directory/dir2/100.txt
[root@server02 test]#
|