Linux chmod+x无效
在Linux系统中,对于一个文件或者目录,需要设置权限,来控制用户对该文件或目录的访问权限,其中chmod命令是最主要且经常使用的命令之一。chmod
命令用于修改文件或目录的访问权限,使得不同的用户可以有不同的读写执行权限。
chmod
命令由9个字符组成,分为3组,分别为文件所有者权限、组用户权限和其他用户的权限,每组权限又分为3种,即读、写、执行权限。其中读权限为r
,写权限为w
,执行权限为x
。chmod
命令的用法如下:
chmod [选项] 模式 文件名
例如:我们可以用下面的命令将文件test.txt
所有者的读写权限设置为可执行权限:
chmod u+rwx test.txt
其中,u
表示文件所有者,rwx
表示读写执行权限。我们还可以用不同方式来表示文件权限,比如:
- 数字方式:使用数字(0-7)来表示不同的读写执行权限。其中,0表示没有权限,1表示执行权限,2表示写权限,3表示写执行权限,4表示读权限,5表示读执行权限,6表示读写权限,7表示读写执行权限。例如,
chmod 755 test.txt
,其中,7表示文件所有者有读写执行权限,5表示组用户和其他用户有读执行权限。 - 符号方式:使用符号
+、-、=
来表示增加、减少、直接设置权限。其中,+
表示增加权限,-
表示删除权限,=
表示直接设置权限。例如,chmod g+w test.txt
,表示给组用户增加写权限。
通常我们使用的是数字方式,但是一些Linux系统中,如果我们使用chmod+x来添加执行权限时,却发现并没有起到设置开启执行权限的作用。原因如下:
原因
在Linux系统中,只要当前执行目录所在的文件系统可执行,我们的chmod +x
命令就可以正常的执行。如果是在nfs文件系统中,或者在Samba共享的目录中,那么我们设置的执行权限很有可能就会失效,这种情况可能出现在使用nfs挂载后,再修改文件的模式。这是由于nfs的客户端和服务器之间,传递的是一些特殊的标记,比如说文件标记为可执行权限,但由于nfs实现的原因,这些标记并不会正确地传递过去。
解决
对于这种情况,我们可以使用一组命令来解决,例如:
chattr -i file
chmod +x file
chattr +i file
其中,chattr
命令用来设置文件的扩展属性,-i
选项表示设置文件为不可变的。这个命令的作用是,设置文件为不可变后,即使nfs客户端或者服务器发送了特定的标记,这个标记也会被忽略。然后我们使用chmod +x
命令来添加执行权限,最后再使用chattr +i
命令设置文件为可变。这样,就可以解决在nfs或者存储设备中设置执行权限无效的问题了。
sudo chattr -i <directory-or-file-name>
sudo chmod +x <directory-or-file-name>
sudo chattr +i <directory-or-file-name>
结论
chmod +x
在Linux中经常用来修改文件和目录的访问权限,但如果在nfs文件系统中使用,就可能会失效。这个问题的解决方法是使用chattr -i
、chmod +x
和chattr +i
三个命令来设置文件和目录的属性,以确保`chmod +x命令能够正常设置文件的执行权限。尤其是在nfs文件系统或者存储设备中,我们更应该遵循这个规则,以确保文件权限的正确设置。