在Linux中,使用ls -al
命令可以查看当前目录下所有文件的权限内容。
第一列的十个字符描述了这个文件的相关权限。
d
表示了这个文件为目录,后面三组rwx
分别描述了用户、用户组、其他人对该文件的权限。
那么对于文件和目录,其rwx
权限分别具有什么含义呢?
文件权限
r
权限指可以读这个文件中的具体内容。
w
权限指可以修改文件的内容。(但不包括删除文件,删除文件的权限属于目录)
x
权限指可以执行这个文件,例如python脚本文件,拥有x
权限后,可以通过python xx.py
进行执行。
目录权限
r
权限指可以读这个目录的结构,也即是该目录下的文件名,可以使用ls
命令列举出该目录下的所有文件。
w
权限指可以修改目录的内容,包括了:重命名或删除这个目录下已经存在的文件或目录、在这个目录下创建新的文件、移动该目录下的文件。
x
权限较为特殊,需要与文件的可执行权限进行区分。目录的可执行权限是指能够进入该目录下,即可以通过cd
命令打开该目录。
示例
我们假设在lyg
这个用户的主目录下有一个文件test.py
,该文件的路径为/home/lyg/test.py
。
该文件的权限为:
即该文件的所有者为root
,所属组为root
,lyg
这个用户对该文件只有读权限。
所以lyg
用户只能读取该文件的内容,而无法修改文件内容也无法执行。
如上图,尝试往文件中添加内容失败。
而对于/home/lyg
这个目录,lyg
的权限为可读可写可执行:
所以lyg用户拥有修改这个目录下文件的权限,我们尝试给test.py
重命名。
进阶
对于如上示例中的test.py
文件,lyg
用户权限为r--
,明显是不具有x
权限的。
我们首先查看test.py
的内容:
只输出一行hello world
。
如果用户lyg
去执行这个文件,由于不具有可执行权限,应该是无法打印输出的。
然而在真正执行时,使用python test.py
程序却正常输出了。
这是由于python test.py
命令调用了解释器去读取test.py
这个文件,所以我们只要具有解释器的可执行权限和test.py
的读取权限即可执行了。
如果去掉test.py
的读权限,再进行执行:
可以看到,由于不具有读权限而在执行时报错。
我们重新给lyg
用户设置test.py
文件的读权限,再使用另外一种方式运行这个文件:
./test.py
命令则是直接执行这个文件,由于不具有x
权限而未执行成功。
./
命令的具体含义可参考这篇博客。