1. 基本概念
1.1 用户和用户组
Linux是多用户操作系统,所以具有一套的完整用户系统,并进行有效的文件权限控制措施。每一个程序或者文件,都是根据用户(组)进行权限控制与管理的。
用户组是将权限相同的用户集中管理的组织单位。
每一个用户都属于一个用户组。在使用图形界面创建用户不指定用户组的情况下,Linux会自动创建一个与用户名相同的用户组。
每一个用户都有自己的目录。一般用户是在/home下,比如用户densintian的主目录就是/home/densintian,而root用户的目录位置在/root。说道这里,相信root这个词都不陌生,就是超级管理用户。能够代替所有的用户干任何事,为了安全起见,任何能不再它下面干的事情,就不要在它下面干。
1.2 权限
从使用方法的角度,权限分成三种:读取(r)写入(w)执行(x)
从使用者的角度,权限分为:所有者,用户组和全体用户
两者结合就变成了下面的表格(最后一行我们可以先不去管它)
好了,我们现在通过命令查看一下文件的权限如下:
ls 命令本身,是列目录。-l 是采用详细信息列表的方式显示。[densintian@rachel src]$ ls -l 总用量 20 -rw-rw-r--. 1 densintian densintian 1415 2014/10/26 00:23:15 add.cpp -rwxrwxr-x. 1 densintian densintian 8806 2014/10/26 00:24:12 a.out drwxrwxr-x. 2 densintian densintian 4096 2014/10/28 12:36:59 temp [densintian@rachel src]$
下面我们从左边开始,介绍每一列的含义第一个信息就是文件的权限。
现在目录中有三个文件
add.cpp 是程序的源代码文件a.out 是add.cpp编译后的可执行文件
temp 是一个目录我们位来说明第一列的信息,
第一位 说明了当前列表对象的类型 “-“ 是文件,而”d”就是目录第二位到第四位是所有者的权限,temp目录和a.out都是既可以读些也可以执行的状态。而add.cpp文件,因为只是一个源代码文件,本身是无法被执行的。所以并没有可执行权限。第五位到第七位是用户组的权限。第八位到第十位是Everyone的权限。
第二个信息是硬连接数。
这个概念我们在以后用到的时候再说,在这里我们只需要知道,对于一般的文件这个值是1,对于目录,这个值代表了这个目录中子目录的个数。因为任何一个目录都会有两个子目录[.]和[..],所以对于目录来说,这个值最小是2.
第三个信息是这个文件的所有者。
第四个信息是这个文件的用户组。
这里要注意,所有者和用户组是不相关的。这就好比我制作了一份考勤表的模板,要求一个项目部门给我填好。那么我作为文件所有者,具有文件的读写权限。这个项目部门(用户组)也需要有这个文件的读写权限。而我和这个部门没有直接的所属关系。
第五个信息是这个文件对象的大小
第六个信息是这个文件对象的最终修改日期和时间
第七个信息是这个文件对象的文件名
注意,新安装的Fedora操作系统会显示简单的日期和时间信息。为了和本教程的显示结果一致,请将环境变量$TIME_STYLE设置为'+%Y/%m/%d.%H:%M:%S',也可以直接写如.bashrc文件中。
[densintian@rachel ~]$ cat .bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions export TIME_STYLE='+%Y/%m/%d.%H:%M:%S' [densintian@rachel ~]$
2 变更权限
2.1 所有者和用户组的变更
所有者的变更,命令chown
命令格式 chown [所有者][:[组]] 文件...
用户组的变更,命令 chgrp
命令格式chgrp [所属群组] [文件或目录...]
2.2 文件权限的变更
文件权限的变更, 命令 chmod格式:chmod [options] mode files
2.3 实战
命令的讲述稍显抽象,我们通过实际操作来说明这个问题。
[chown]
[densintian@rachel temp]$ su #改变用户权限的操作必须在root用户下 密码: [root@rachel temp]# ll #<span style="font-family: Arial, Helvetica, sans-serif;">有test1,test2两个文件,都属于root用户</span> 总用量 0 -rw-r--r--. 1 root root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 root root 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chown densintian test1 #改变test1文件的所有者 [root@rachel temp]# ll 总用量 0 -rw-r--r--. 1 densintian root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 root root 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chown densintian:densintian test2 #改变test2文件的所有者和用户组 [root@rachel temp]# ll #可以看到区别 总用量 0 -rw-r--r--. 1 densintian root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian densintian 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chown root:densintian test1 [root@rachel temp]# ll #改变成不所属的用户和用户组 总用量 0 -rw-r--r--. 1 root densintian 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian densintian 0 2014/10/28.13:49:41 test2 [root@rachel temp]#
[chgrp][root@rachel temp]# ll #基于上次的运行结果 总用量 0 -rw-r--r--. 1 root densintian 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian densintian 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chgrp root test* #可以使用通配符 [root@rachel temp]# ll 总用量 0 -rw-r--r--. 1 root root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian root 0 2014/10/28.13:49:41 test2 [root@rachel temp]#
[chmod]
[root@rachel temp]# ll 总用量 0 -rw-r--r--. 1 root root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian root 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chmod 751 test1 #改变test1的权限,所有者分配读、写、执行(7)的权限,所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限 [root@rachel temp]# ll 总用量 0 -rwxr-x--x. 1 root root 0 2014/10/28.13:49:25 test1 -rw-r--r--. 1 densintian root 0 2014/10/28.13:49:41 test2 [root@rachel temp]# chmod u=rwx,g=rx,o=x test2 #上一个命令的另一种写法,执行结果是一样的。 [root@rachel temp]# ll 总用量 0 -rwxr-x--x. 1 root root 0 2014/10/28.13:49:25 test1 -rwxr-x--x. 1 densintian root 0 2014/10/28.13:49:41 test2 [root@rachel temp]#