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

原文地址:https://www.cnblogs.com/daemon369/p/3247304.html