[TOC]
### 1. Linux 文件权限概念
```
[dmtsai@study ~]$ su - # 先来切换一下身份看看
Password:
Last login: Tue Jun 2 19:32:31 CST 2015 on tty2
[root@study ~]# ls -al
total 48
dr-xr-x---. 5 root root 4096 May 29 16:08 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 927 Jun 2 11:27 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 3 root root 17 May 6 00:14 .config <=范例说明处
drwx------. 3 root root 24 May 4 17:59 .dbus
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg <=范例说明处
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ] [ 7 ]
[ 权限 ][链接][拥有者][群组][文件大小][ 修改日期 ] [ 文件名 ]
```
* 第一个字符代表这个文件是“目录、文件或链接文件等等”:
>
> 当为[ d ]**则是目录**,例如上表文件名为“.config”的那一行;
> 当为[ - ]**则是文件**,例如上表文件名为“initial-setup-ks.cfg”那一行;
> 若是[ l ]则表示为链接文件(link file);
> 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
> 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
### 2. 如何改变文件属性与权限
先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:
* chgrp :改变文件所属群组
* chown :改变文件拥有者
* chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
* 改变所属群组, chgrp
*********
* 改变权限, chmod
文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。我们就来谈一谈:
* 数字类型改变文件权限
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 先复习一下刚刚上面提到的数据:文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
> r:4
> w:2
> x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是:
> owner = rwx = 4+2+1 = 7
> group = rwx = 4+2+1 = 7
> others= --- = 0+0+0 = 0
那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
```
[root@study ~]# ls -al .bashrc
-rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod a+w .bashrc
[root@study ~]# ls -al .bashrc
-rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc
```
而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
```
[root@study ~]# chmod a-x .bashrc
[root@study ~]# ls -al .bashrc
-rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
[root@study ~]# chmod 644 .bashrc # 测试完毕得要改回来喔!
```
### 3. 目录与文件之权限意义:
现在我们知道了**Linux系统内文件的三种身份(拥有者、群组与其他人)**,知道每种身份都有三种权限(rwx), 已知道能够使用chown, chgrp, chmod去修改这些权限与属性,当然,利用ls -l去观察文件也没问题。前两小节也谈到了这些文件权限对于数据安全的重要性。那么,**这些文件权限对于一般文件与目录文件有何不同呢?**
* 权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
> r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
> w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
> x (execute):该文件具有可以被系统执行的权限。
在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!