linux下的目录操作和文件操作(3)

这一个功能非常有用。除了我们可以在主目录方便访问我们经常访问的文件,而且我们可以为重要的文件或目录建立多个链接,提供“防删除”的功能,避免以为删除造成严重后果。这样做的原理是,如果一个文件(或目录)的索引节点有一个以上的链接,删除操作只能破坏其一,索引节点本身的其他链接仍然不受影响。当然,如果对只有一个链接的文件发出删除命令,索引节点、文件数据块与目录的连接都会被释放,文件也真正删除。 
上面的链接说的都是硬链接,和索引节点号直接相关的链接。我们知道,每一个文件系统(如一个硬盘分区)都有自己的索引节点数组,因此索引节点号只有在同一个文件系统中才是唯一的,这意味着,固定链接只能用在一个文件系统的内部。 
而符号链接(symbolic link,又常被称为软链接)则没有这个限制,它和windows系统中的快捷方式非常相似,它可以用在不同的文件系统之中。因此,在两个文件之间建立链接,如果要求保证可移植性,应尽量使用符号链接。可以使用 ln -s 来产生符号链接。 
· 文件、目录的属性 
涉及到文件的属性,就不可避免的关联到用户管理,关于这个内容,请先参考专题五中的用户管理部分,再来阅读这一部分。linux下,每一个文件、每一个目录都必须有一个属主,并针对拥有文件的用户自己、用户所在组、其它所有帐号(组)分别设定读、写、执行三种权限。例如,我(假定是usergroup组的username帐户的拥有者)使用如下命令建立一个新的文件 
touch mytestfile 
然后我们使用ls -l mytestfile这一命令来查看这个文件的权限状态(关于ls命令,可以前面已有错误,可以查阅本站的命令查询),可以得到如下的屏幕输出显示: 
-rw-rw-r-- 1 username usergroup 0 Feb 6 21:37 mytestfile 
输出分为7个部分,分别表示文件权限属性、硬连接个数、文件所有者帐户、文件所属组、文件大小、文件创建时间、文件名称。 
· 使用chown命令修改文件的主人 
当你新建立一个文件的时候,文件的所有者当然就是你了。这一事实只有超级用户(比如说root)才可以通过chown命令改变(例如 chown otheruser mytestfile,把mytestfile文件的属主改为otheruser)。普通用户不能把自己的文件“送”给别人,不然你把有特殊目的的程序给了root怎么办?:) 
chown命令的用法比较简单。这里我先假设你现在拥有超级用户权限,那么你就可以使用如下命令将一个文件“送给”username用户了: 
chown username /home/username/thefileisrootcreate.txt (假定该文件是由root创建的) 
修改一个目录的所有者也是类似的: 
chown username /home/newboat 
当然,如果这个目录还有子目录及文件需要同时送给username,chown也是支持-R参数的: 
chown -R username /home/newboat 
如果你同时想修改文件/目录所属的组的话,你可以使用以下命令方便的达到目的: 
chown -R username.othergroup /home/newboat 
这样,不但文件主人得到了修改,文件所属的组也变成了othergroup 
· 修改文件的组属性 
文件所属组你倒是可以改变,前提是: 
1、你的超级用户。 
2、你同时属于两个或两个以上的组。 
两个条件你至少具备一个,你才能够把文件所属旧组变为新组。使用如下的命令将当前目录下所有html文件所属的组改为httpd: 
chgrp httpd *.html 
和chown命令一样,chgrp也可以使用-R参数对一个目录内的所有文件和子目录进行递归的修改组属性。 
:你可以使用不带参数的groups命令查看自己属于哪个组。 
文件权限的设定是我们这一小节讨论的核心,我们主要介绍chmod命令的两种用法。 
· 使用访问字符串设置文件目录权限 
每一个文件、目录都针对用户自己、用户所在组、其它所有帐号(组)分别有读、写、执行三种权限及其组合。ls -l查看文件属性的第一个字段所示。总共十位字符“-rw-rw-r--”,第一位是目录区分标志,如果是d的话,表示这是一个目录。第二到四位分别表示文件所有者的读(r:read)、写(w:write)、执行(x:execute)属性,第五到七位是文件所属组的读、写、执行权限,第八到第十位则是其它用户的读、写、执行权限。如果对应的位是相应的字母,就是有这相应权限,否则为“-”,表示没有获得这个许可。象刚才例子中的文件就是自己可读写,本组可读写,其它用户可读,所有的用户(包括自己)都不能执行它。 
我们的用u、g、o分别来指代用户(user)、组(group)、其它帐户(other),就可以方便的设置文件和目录的权限了。当然,我们也可以用a来表示所有的这三项。 
例如,我们要对所有perl的脚本文件设定权限,对所有用户都可以读和执行,文件所有者还允许写许可,那么我们可以使用如下命令: 
chmod a+rx,u+w *.pl 
注意:如果要使用多个访问字符串,它们之间要用逗号隔开,各个许可字符串之间不允许有空格。正如上例所示。 
如果要修改目录中所有文件和子目录的权限属性,可以使用chmod提供的-R参数来递归修改。例如,下列命令将/www/site1目录及其下面的子目录的权限属性设定为所有者和组可读、写、执行,其它用户不可访问: 
chmod -R a+rwx,o-rwd /www/site1 
注意,不要轻易使用-R选项,这可能会带来安全隐患。 
使用字符串方便了理解,单输入那么多字母还是有点累,如果你对8进制有些概念的话,可以使用下面介绍的方法来做权限设置。 
· 使用八进制数设置文件目录权限 
我们知道,在ls -l的输出中,文件权限表示为“-rw-rw-r--”,前一位只和是否为目录或连接有关,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和“r--”,“-”代表无效“0”,其它字符代表有效“1”,那么这个文件的权限就是“110”、“110”、“100”,把这个2进制串转换成对应的8进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。我们也可以使用类似这种三位八进制数来设定文件授权,如上边两个例子,就也可以写为: 
chmod 755 *.pl 
chmod -R 770 /www/site1 
是不是很简洁?关键在于你能根据你需要设定的权限正确的选择八进制数(利用八进制数的二进制表示可以非常轻易的做到这一点)。 
· 读、写、执行的权限说明 
1、所谓写的权限,也就是对文件修改和删除的权限。如果目录的写权限也对你开放了,则可以创建、删除或修改该目录下的任何文件或自目录——即使该文件和子目录并不属于你。 
2、对目录有只读许可的用户,不能用cd命令进入该目录;还必须同时有执行许可才可以进入该目录。 
3、必须同时拥有读和执行权限才可以使用ls这样的程序列出目录内容清单。 
4、只对目录有执行权限的用户,想访问该目录下的文件有读权限的文件,必须知道该文件名才可以访问。  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5e5d5b6f68e2a86456e3d7deb4d1965b.html