Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@root home]# ls -lhi
total 12K
1580812 drwxr-xr-x 2 root root 4.0K Jun 13 15:46 dev
1317928 drwxr-xr-x 2 root root 4.0K Mar 7 13:36 docker
1580987 drwxr-xr-x 2 root root 4.0K Jun 13 14:48 test1
1、inode(index node)是inode索引节点;
2、第一个字符:代表文件类型,-代表普通文件,d代表目录
第2-10个字符,代表文件或者目录的权限,
3、文件的硬连接数,具有相同inode节点号的多个文件是互为硬链接文件;
4和5、属主和属组
6、文件或目录的大小
7、8、9、最近修改时间
10、文件或目录名
我们重点介绍2:
第一个字符代表文件类型
d(directory)表示目录
-(regular file) 普通文件
l (link)链接文件
b(block)块设备和其它外围设备,是特殊类型的文件
c(character)字符设备文件
s(socket)套接字文件
p(named pipe)管道文件
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。
其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。
属主就是代表这个文件是该用户创建的,属组代表该组下的用户对文件有无相应权限。
修改文件属性:
[root@root home]# useradd gongj
[root@root home]# ll
total 16
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx------ 2 gongj gongj 4096 Jun 13 16:34 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
[root@root home]# su gongj #切换到gongj账户
[root@root gongj]# touch gj123.txt
[gongj@root ~]$ ll
total 0
-rw-rw-r-- 1 gongj gongj 0 Jun 13 16:39 gj123.txt
现在我们能看到gongj以及gj123.txt的属主和属组都是gongj
1、chgrp:更改文件属组
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
这命令需要在root账户下执行
[root@root home]# chgrp -R root gongj/
[root@root home]# ll
total 16
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx------ 2 gongj root 4096 Jun 13 16:41 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
[root@root home]# cd gongj/
[root@root gongj]# ll
total 0
-rw-rw-r-- 1 gongj root 0 Jun 13 16:39 gj123.txt
可能看到gongj的属组和gj123.txt的属组已经改为了root。
2、chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
[root@root home]# chown -R root gongj/
[root@root home]# ll
total 16
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx------ 2 root root 4096 Jun 13 16:41 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
[root@root home]# cd gongj/
[root@root gongj]# ll
total 0
-rw-rw-r-- 1 root root 0 Jun 13 16:39 gj123.txt
可能看到gongj的属主和gj123.txt的属主已经改为了root。
再次将gongj的属主和属组修改为gongj
[root@root home]# chown -R gongj:gongj gongj
[root@root home]# ll
total 16
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx------ 2 gongj gongj 4096 Jun 13 16:41 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
在创建一个用户yuanj
useradd yuanj
[root@root home]# ll
total 20
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx------ 2 gongj gongj 4096 Jun 13 16:41 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
drwx------ 2 yuanj yuanj 4096 Jun 13 17:23 yuanj
#登录yuanj用户
[yuanj@root home]$ cd gongj/
-bash: cd: gongj/: Permission denied # -bash:cd:gongj/:权限被拒绝
可以看到yuanj账户进入不了gongj目录,因为gongj的目录权限为
rwx------,属组和其他用户权限都没有,那我们将其他用户权限放开
chmod:更改文件9个属性
chmod [-R] xyz 文件或目录
inux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
各权限的分数对照表如下:
r:4 w:2 x:1
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
再次回到我们这个案例,我们需要将其他用户权限打开
切换到root用户
[root@root home]# chmod -R 707 gongj
[root@root home]# ll
total 20
drwxr-xr-x 2 root root 4096 Jun 13 15:46 dev
drwxr-xr-x 2 root root 4096 Mar 7 13:36 docker
-rw-r--r-- 1 root root 0 Jun 13 16:24 gj.txt
drwx---rwx 2 gongj gongj 4096 Jun 13 16:41 gongj
drwxr-xr-x 2 root root 4096 Jun 13 14:48 test1
drwx------ 2 yuanj yuanj 4096 Jun 13 17:23 yuanj
切换到yaunj用户
[yuanj@root home]$ cd gongj/
[yuanj@root gongj]$ ll
total 0
-rw-rw-r-- 1 gongj gongj 0 Jun 13 16:39 gj123.txt
[yuanj@root gongj]$ vim gj123.txt
gongj账户下的目录和文件yaunj账户都能进行操作了。
至于去切换属主和属组这种还是用的少的。