linux下修改文件/文件目录权限、拥有者及用户组
> 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有`所有者`、`所在组`、`其它组`的概念。
- 所有者
1. 一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有者
2. 用ls ‐ahl命令可以看到文件的所有者
3. 也可以使用chown 用户名 文件名来修改文件的所有者
- 文件所在组
1. 当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
2. 用ls ‐ahl命令可以看到文件的所有组
3. 也可以使用chgrp 组名 文件名来修改文件所在的组
- 其它组
1. 除开文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
# 文件属性
- 执行` ls -l` 或 `ls -al `显示如下内容:
```sh
[root@localhost ~]# ls -al
总用量 44
dr-xr-x---. 5 root root 4096 8月 6 14:44 .
dr-xr-xr-x. 17 root root 4096 7月 25 05:33 ..
-rw-------. 1 root root 1426 7月 25 05:35 anaconda-ks.cfg
-rw-------. 1 root root 431 8月 6 11:13 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 4 root root 29 8月 6 10:23 .cache
drwxr-xr-x. 3 root root 17 8月 6 10:23 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 24 7月 24 21:39 .dbus
-rw-r--r--. 1 root root 1474 7月 24 21:53 initial-setup-ks.cfg
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 66 8月 6 14:44 .xauthqxoZZ4
```
> 从上述可以看出,共有七列数据,下面将一一讲述:
- 第一列代表文件的类型与权限
> 第一列共有10个字符,第一个字符代表这个文件是`目录`、`文件`或 `链接文件` 等。
1.若是[d]则表示目录
2.若是[-]则表示文件
3.若是[l]则表示链接文件
4.若是[ b ]则表示为装置文件里面的可供储存的接口设备
5.若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
> 接下来的字符中,以三个为一组,且均为[rwx]的三个参数的组合, [ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute) 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。
1.第一组:文件拥有者的权限
2.第二组:同群组的权限
3.第三组:其他非本用户组的权限
- 第二列表示有多少个文件名链接到此节点
> 记录有多少不同的档名连结到相同的一个i-node,一般来说,若是文件则为1,若是文件夹(目录)则表示其下文件和目录的个数。
- 第三列表示文件(或目录)的拥有者
- 第四列表示文件的所属群组
- 第五列表示文件的容量大小(默认单位为bytes)
- 第六列表示文件的建档日期或者是最近的修改日期
- 第七列表示文件的全路径及其文件名
# 文件属性和权限更改
> Linux文件属性和权限的更改主要通过以下几个命令来实现:
1.chgrp:更改文件所属用户组
2.chown:更改文件拥有者
3. chmod:改变文件的权限
- 改变所属用户组:chgrp
```sh
[root@localhost tmp]# ls -al dir
总用量 4
drwxrwxr-x. 3 www1234 www1234 32 8月 6 15:14 .
drwxrwxrwt. 25 root root 4096 8月 6 15:14 ..
drwxrwxr-x. 3 www1234 www1234 17 8月 6 15:13 dir2
-rwxrw-rw-. 1 www1234 www1234 0 8月 6 15:13 file.txt
```
> 从上可以看出,dir2和file.txt文件是属于www1234用户组。
```sh
[root@localhost tmp]# chgrp user -R dir
[root@localhost tmp]# ls -al dir
总用量 4
drwxrwxr-x. 3 www1234 user 32 8月 6 15:14 .
drwxrwxrwt. 25 root root 4096 8月 6 15:15 ..
drwxrwxr-x. 3 www1234 user 17 8月 6 15:13 dir2
-rwxrw-rw-. 1 www1234 user 0 8月 6 15:13 file.txt
```
- 改变文件所有者:chown
```sh
[root@localhost tmp]# chown user1 -R dir
[root@localhost tmp]# ls -al dir
总用量 4
drwxrwxr-x. 3 user1 user 32 8月 6 15:14 .
drwxrwxrwt. 25 root root 4096 8月 6 15:22 ..
drwxrwxr-x. 3 user1 user 17 8月 6 15:13 dir2
-rwxrw-rw-. 1 user1 user 0 8月 6 15:13 file.txt
```
> 关于文件的复制cp
> 复制行为会复制执行者的属性与权限,通过以下例子可以理解:
```sh
[root@localhost tmp]# ls -al /home/www1234/file.txt
-rwxrw-r--. 1 www1234 www1234 0 8月 6 15:13 /home/www1234/file.txt
[root@localhost tmp]# cp /home/www1234/file.txt /home/user1/file.txt
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -al /home/user1/file.txt
-rwxr--r--. 1 root root 0 8月 6 15:36 /home/user1/file.txt
```
> 从上表看出,用户www1234文件file.txt的用户所有者,所属用户组均为www1234,而执行复制的操作的执行者是root用户,所以复制的文件属于root用户所有,文件的读写属性也发生了变化。
- 改变权限:chmod
> 数字类型改变权限:r:4,w:2,x:1
> 每种身份(owner、group、others)各自的三个权限(r、w、x)分数是需要累加的。
> 例如:[-rwxr-x---]
> owner:rwx=4+2+1=7
> group:r-x=4+1=5
> others: ---=0+0+0=0
> 改变main.c的权限:
> chmod 777 main.c 权限变为[-rwxrwxrwx]
- 权限对文件的意义:
1. r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
2. w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
3. x (execute):该文件具有可以被系统执行的权限.
> 在Windows底下一个文件是否具有执行的能力是藉由扩展名来判断的, 例如:.exe, .bat, .com 等等
> 在Linux底下,我们的文件是否能被执行,则是藉由是否具由x这个权限来决定的!跟档名是没有绝对的关系的。
- 权限对目录的意义:
1. r (read contents in directory):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据. 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
2. w (modify contents of directory):建立新的文件与目录;删除已经存在的文件与目录(不论该文件的权限为何);将已存在的文件或目录进行更名;搬移该目录内的文件、目录位置.
3. x (access directory):用户具备进入该目录成为工作目录的权限