Linux文件与目录普通权限
在Linux下可以使用ls -l命令查看文件的权限:
可以看到,第一列就是文件或者目录的权限。总共有十个字符,意义如下:
1. 第一个字符是类型,表明是文件还是目录等。
常见的有以下几种:
文件: -
目录: d
字符设备: c
块设备: b
链接文件: I
2. 第2~4三个字符是文件所有者(u, user)的权限,r代表读(read),w代表写(write),x代表执行(execute)。有相应的权限就在相应的位置用rwx代表,没有相应的权限就用-代表。
用户权限也可以用二进制数字0和1代表,100代表r--,表明有读权限而没有写和执行权限,对应数字6;011代表-wx,有写权限和执行权限,没有读权限,对应数字为2+1=3。这个数字在使用chmod命令来修改文件权限时很有用。
3. 第5~7三个字符代表的是文件所属的群组(g, group)的权限,字符代表的意义同上。
4. 第8~10三个字符代表的是非以上两者的其他人或组(o, other)的权限,字符的意义同上。
ls -l命令查看的文件的信息,第三列就代表文件的拥有者,第四列代表文件所属的群组。示例如下:
-rwxr-xr-- 1 testuser testgroup 5238 Jun 05 10:00 testfile
上例中,testuser用户对testfile文件拥有读写执行权限,testgroup组的成员对testfile文件拥有读和执行的权限,而其他的用户就只有读的权限了。当然,对于root用户来说,他拥有机器中所有文件的所有权限,root用户是linux中拥有最高权限用户。
Linux系统中文件的权限最大的用途是在于安全方面。没有权限的用户就无法访问指定文件,无法查看制定目录,这样在多用户的系统上就可以做到彼此一定程度隔绝,保障每个用户的数据的隐私性和安全性。
例如/etc/shadow文件使用来存储所有用户的登录密码的。这个文件是不能任意让人读取的,尽管文件内容可能是加密的字符串。因此我们需要只有root或者指定用户可以访问。例如在我的机器中:
-rw-r----- 1 root shadow 1225 7月 12 20:49 /etc/shadow
有时我们又需要将文件共享给其他人来访问,譬如在团队协助开发项目或者共享一些数据资源等。那我们应该怎么做呢?方法有很多,譬如将文件权限开放给指定组成员,那么将需要共享的成员加入指定组即可;或者拷贝一份文件到公共目录,然后更改文件权限,将文件拥有者修改为指定成员;... 。
那么我们怎么来修改文件权限呢?
1. chgrp:改变文件所属的组
系统中的所有组都存放在/etc/group文件中,使用chgrp可以在这些组中进行切换。例如:
$ chgrp grp1 test1.txt
如果试图切换到不存在的组,会提示错误。需要先创建组,然后再改变文件的组。
2. chown:改变文件所有者
系统中的用户帐号存放在/etc/passwd文件中,改变用户也需要首先存在这个用户。示例如下:
$ chown usr1 test1.txt #改变test1.txt用户为usr1
$ chown usr1:grp1 test1.txt #同时改变用户和组
$ chown -R usr1 dir1 #递归改变用户,指定目录下的所有文件及其子目录中的文件都会被改变用户
$ chown usr1.grp1 test1.txt #同时改变用户及组
$ chown .grp1 test1.txt #改变组
3. chmod:改变文件权限
改变文件的权限可以使用代表权限的数字或者权限字符。如:
$ chmod 123 test1.txt #使文件有---x-w--wx 权限
$ chmod 777 test2.txt #赋权限 -rwxrwxrwx
$ chmod -R 644 dir1 #递归赋权限
使用权限字符来修改权限的方法如下表:
chmod | u(user) g(group) o(other) a(all) |
+(加入) -(除去) =(设定) |
r(read) w(write) x(execute) |
文件或目录 |
Tips:
1. Linux文件的权限:
r:可读取文件内容
w:可编辑,新增,修改文件的内容,不具有删除文件权限
x:可执行文件
2. Linux的目录的权限:
r:读取该目录下的文件名数据
w:有建立新文件与目录权限,有删除已有文件和目录权限,有重命名文件和目录权限,有移动文件和目录的权限
x:有切换工作目录到当前目录的权限
3. 用户拥有文件的w权限不意味着用户可以删除该文件;只有当用户拥有某个目录的w权限,才能删除该目录下的文件,且可删除任意权限的文件,包括root用户的文件。
4. Linux下文件的扩展名其实意义不大,譬如文件具有x属性就可以执行,而与扩展名无关。当然也有一些惯用的扩展名,譬如:sh, py等。
5. Linux下的文件和目录名称最后不要包含一些特殊符号,譬如:* ? > < ; & ! [ ] | \ ' " ` ( ) { }
6. Linux下的文件名前后都可以包含空格,这个是一个小陷阱。你可能无意间输入文件名前面有空格,Linux并不会像windows一样自动去掉空格。这样你后面操作文件可能就会发现,你明明看到了这个文件,输入命令却找不到。
参考:
http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission_2.php
http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager_4.php