我的工作机是linux系统。我登录root帐号,从svn服务器check out源代码。之后使用文本编辑器修改源码,竟然发现无法保存!!昨天读了《鸟菜》相关章节后,总算明白了原因。这一切与linux的文件权限有关。
1. linux系统是多用户多任务的系统。这点与windows不同,windows是单用户多任务系统。linux系统允许多个用户从不同的终端同时登录。假设目前有A用户、B用户同时登录了系统,那么linux系统必须保证A用户的私有数据不被B用户查看、修改。为了实现这一需求,linux设计了文件权限。文件权限有:1)用户权限、2)用户组权限、3)其他人权限三种类型。用户权限就是赋予文件所有者的权限,用户组权限就是赋予文件所有者所述用户组的权限,其他人权限就是赋予所有者、所有者同组之外那些人的权限。权限有三种:可读、可写、可执行。可以利用命令“ls -l”或者“ll"来查看文件属性。
2. 一个默认创建的文件/文件夹是有默认权限的。可以通过命令“umask”或者"umask -S"来查看文件的默认权限。
3. 可以利用命令"chown"来改变文件所有者,可以利用命令"chgrp"来改变文件所属用户组,可以利用命令"chmod"改变文件的访问权限。
4. 除了上述的可读、可写、可执行权限外,文件还有一些特殊的隐藏属性。可以利命令"chattr"改变文件的隐藏属性,利用命令"lsattr"查看文件的隐藏属性。
我之前遇到的问题是:root账户check out的源码,无法被test账户修改。原因为:
1. 登录root账户。 命令为:su root (之后输入密码)
2. 执行umask -S。输出为:u=rwx,g=rx,o=rx。说明root所属用户组以及其他人不能修改root账户创建文件及文件夹。
3. 执行svn checkout命令。此时相当于root账户创建了一系列文件。其他人只有访问权,没有修改权的。
解决的方法很简单。有两种方法:1)使用chown命令,将源码文件所有者变为普通账户。即执行命令chown test:test src/。2)使用chmod改变源码文件的访问属性,为其他用户赋予可写权限。建议使用第1种权限。