查看权限

ls -l file来查看某个文件的权限,结果的前10个字符代表权限信息。这十位字符,可分为四组,第一个字符一组,剩余九个每三个一组。

第一个字符可是是d或者-:

  • d: 文件夹
  • -: 文件

比如drwxrwxr-x 6 yalei yalei 4096 Jun 18 08:50 ××××××,表示这是一个文件夹,剩下三组的意思是:

  • rwx: 当前用户的权限:读,写,执行。r,w和x分别对应read,write和execute

  • rwx: 当前用户所属的用户组权限:读,写,执行

  • r-x: 其他用户的权限:读,执行

类似的,下边的文件,当前用户有读写权限;而该用户所属的用户组有读的权限,不能写入;其他用户组的用户没有任何权限。

-rw-r-----  1 yalei yalei 3052535 Jun 23 15:54 ××××××

更改权限

chmod xxx file_name命令修改权限。其中参数xxx主要是u o g+-r w x的不同组合。u,g,o分别代表user,group和others;即当前用户,用户组和其他用户。+ -表示赋予和撤消,r w x即读,写,执行。合在一起就是给用户赋予或撤消某种权限。

chmod u+x file # 只给当前用户加上可执行权限
chmod u+rwx,o+rw,g-rwx file # 当前用户加读写和执行权限,用户组加读写权限,其他用户撤消所有权限

更改权限的另一种方式是把参数xxx写成三位数的形式,比如chmod 777 file就是给所有用户赋予所有权限。解读方式是:

  • 4 读
  • 2 写
  • 1 执行

所以7=4+2+1,表示读写和执行权限,6表示读写,5表示可读和可执行,3表示可写和可执行(这个比较奇葩,能写但不能读),0表示没有任何权限。777分别对应的是user,group和others的权限。那么chmod 600 file就是只给当前用户读写权限。

如果更改整个文件夹的所有文件,加上chmod -R ...的参数就好。

更改拥有者

通常有权限问题都是因为该文件(夹)不属于自己。比如下边的文件夹,文件夹属于root这个用户和wheel这个用户组。可以看到用户组也是没有写入权限的,只有root用户有权限。

$ ll /etc
lrwxr-xr-x@ 1 root  wheel    11B Aug  5  2015 /etc -> private/etc

这时需要写入操作的话,有好几种方案:

(1) 可以在命令前加上sudo关键字,表示以超级管理员的身份运行,需要输入密码。适用于不常用的特殊写入访问,比如修改host文件。最后,如果你的用户不是超级管理员,那就放弃吧。

(2) 添加用户组的写入权限并把自己的用户加到该用户组。适用于公共目录下常用的写入操作,此处公共目录就是除自身主目录的其他所有目录。

sudo chmod -R 775 /etc      # 添加用户组的写入权限
sudo usermod -a -G wheel YOUR_USER_NAME  # 给自己的用户添加用户组

(3) 更改文件夹的拥有者(owner)。适用于一些私密文件夹里常用的写入操作,比如一些文件夹不想让其他用户访问。 比如经常需要装Python的包,但又不想让其他用户乱装。跟第二个方案差不多。

/etc文件夹改成某个用户和某个用户组下的命令:

sudo chown -R /etc YOUR_USER_NAME:USER_GROUP