什么是文件权限

Windows也有文件权限,很多朋友经常会遇到一些文件需要管理员权限才能操作,还有一些文件管理员也无法操作,一些病毒也常常利用windows权限系统的漏洞做诸如破坏用户的文件或者盗窃用户信息等恶意行为。Linux的文件权限系统不同于Windows,它更加严谨,但Linux的管理员账户是可以进行一切操作的,甚至可以删除整个操作系统,这要求管理员账号所有者谨慎行动,并且对重要数据时时备份。备份是最好的习惯,其实对windows来说更是如此(不过作为个人用户,我本人并没有怎么备份过,个人可以用网盘同步最重要文件)。

理解Linux权限之前必须先了解Linux用户和用户组。Linux每个用户都属于至少一个用户组,类似于我们每个人,都属于一个(些)团体,例如家庭、公司等。通常我们个人的电脑中,默认用户的用户组里面只有一个人。每个文件都至少属于一个用户和用户组,它对三类人规定了权限,按顺序分别是所属用户/所属组/其他人。权限用三种即读(r)、写(w)、执行(x),可以分别用数字4、2、1代表,这样每个权限组合都有从0到7之间的一个数字来代表,例如6就代表可读可写(4+2)权限。

Linux种有个用户root,它可以做一切事。改变权限的操作可以由文件所属用户或root执行(实际上我们可以通过sudo文件设置更复杂的权限,不过一般桌面用户用不到)。

设置文件权限

文件创建时,默认属于创建它的用户和该用户所属组的。权限设置分为改变所属和改变三个具体权限组合两种。

改变所属

chown命令可以改变所属用户,用法是chown 用户名 文件名,例如将/public下的example文件改为nobody用户所属,用chown nobody /public/example。当改变所属用户之后,你就失去了操作该文件权限的权力,除非你拥有root权限。

chgrp命令可以改变所属用户组,用法类似chown,即chgrp 组名 文件名

改变文件权限组合

chmod命令可以改变权限组合,有两种方法可以设置权限,分别是rwx和用数字代表权限。例如:

chmod 754 /public/example表示将文件/public/example对其所属用户权限设置为可读可写可执行(4+2+1),对其所属组权限设为可读可执行(4+1),对其他人设为可读(4)。

chmod u=rwx,g=rx,o=r /public/example可以实现上面同样功能。u代表所属用户(user),g代表所属组(group),o代表其他(others),a代表所有人。注意,u=rwx,g=rx,o=r中间没有空格。

chmod a+x /public/example表示为所有用户添加可执行权限。

如果用第二种方法,对某类对象不改变权限则可以省略,如:

chmod g=r /public/example表示将所属组权限改为可读不可写不可执行,其他人的权限不变。

文件夹权限设置

文件夹的可读权限是查看文件夹下的文件信息(文件名、创立时间、访问时间等),可执行权限是允许进入文件夹,可写权限是在文件夹中添加、删除文件等操作。用户只有对文件夹有执行权限,才能有读写权限,否则读写权限并不会有实际作用。

对文件夹设置权限与文件类似。但如果想对文件夹下所有文件都修改权限,需要加如-R选项。例如:
chmod -R 755 /public即将/public文件夹及其下所有文件和文件夹都设为755权限。

批量设置文件权限

方法1

1
find . -exec sh -c "if \[\[ -d "{}" \]\]; then chmod 755 "{}"; else chmod 644 "{}"; fi " \\;

方法2

1
2
find ./ -type f -print |xargs chmod 644;  
find ./ -type d -print|xargs chmod 755;

推荐方法:

1
2
chmod 644 -R ./  
find ./ -type d -print|xargs chmod 755;

注:这段我是从网上找的,上面方法有一点问题,还需要进一步测试。

带文件权限复制

文件复制时,一般会把所有者改变为文件操作者。如果想把源文件或文件夹连带所具有的权限一同复制到新地址,需要加上-p选项,如:cp -p /public/example /home/public/即将文件/public/example按照其原有的权限复制到/home/public文件夹中。

解压缩的文件权限

当用压缩解压文件夹时,与复制一样会出现权限改变,要保留权限则与复制一样,为压缩解压命令加上-p选项。

参考资料