![我是否正确理解了 Linux/Unix 中目录的权限?](https://linux22.com/image/1232157/%E6%88%91%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E7%90%86%E8%A7%A3%E4%BA%86%20Linux%2FUnix%20%E4%B8%AD%E7%9B%AE%E5%BD%95%E7%9A%84%E6%9D%83%E9%99%90%EF%BC%9F.png)
我是否正确理解了 Linux/Unix 中目录的权限?
如果您的目录仅具有
r
(读取)权限,那么您被允许查看目录的内容(哪些文件位于该目录),但是您无法执行此操作,因为您无法进入(cd
)此目录(因为没有权限x
)。您也无法从目录外部(例如通过)查看目录的内容(哪些文件位于该目录) 。您也无法使用和命令ls directoryname/*
读取(查看)位于此类目录中的文件的内容(即使您有权读取这些文件)。如果这些文件位于这样的目录中,您也无法修改(写入)文件(即使您对它们有写入权限)(无论您尝试、或某些文本编辑器)。所以,从我的角度来看,仅对目录具有权限相当于对该目录完全没有权限。cat
more
cat >>
echo >>
cp
r
如果您的目录仅具有
x
(执行)权限,则您可以进入(cd
)目录,但不能查看(ls
)目录的内容(因为您没有读取目录的权限)。如果目录仅具有权限,并且其中包含您具有(读取)和(写入)权限x
的文件,您仍然无法使用(至少某些)文本编辑器(例如)打开此文件。但您可以使用或等命令读取文件上下文。您将能够使用或修改文件内容。所以,在我看来,这就是允许用户“读取”和“写入”目录中现有文件的原因(如果文件也具有相应的权限)。r
w
mcedit
cat
more
echo >>
cat >>
x
如果目录具有
r
权限x
但没有w
(写入)权限,则您无法更改目录的内容(位于该目录中的文件集)。例如,您无法在该目录中创建新文件或删除目录中的现有文件。但您仍然可以更改现有文件的内容。因此,您需要w
权限才能在目录中创建或删除文件。添加:
值得一提的是,
w
对目录的权限是创建和删除目录中文件的必要条件,但还不够。如果目录只有w
权限,您将无法从目录中添加/删除文件。要做到这一点,您需要拥有x
目录的权限(除了w
权限之外)。
答案1
问题是:
如果您的目录仅具有“r”(读取)权限,则您可以查看目录的内容(哪些文件位于该目录),但您无法执行此操作,因为您无法进入(“cd”)该目录(因为没有“x”权限)。
是的,你可以这样做,你可以看到目录包含的文件列表:
$ mkdir mydir
$ echo text > mydir/myfile
$ chmod a-wx mydir
$ ls -lA
total 4
dr--r--r-- 2 hcs hcs 4096 2010-02-28 22:12 mydir
$ ls -lA mydir
ls: cannot access mydir/myfile: Permission denied
total 0
-????????? ? ? ? ? ? myfile
但是您无法从文件访问除其名称之外的任何其他信息,如列表所示。
答案2
请记住,要读取文件,您需要对文件所在目录的执行权限和对文件本身的读取权限。要写入文件,您需要对目录的执行权限和对文件的写入权限。要创建新文件或删除文件,您需要对目录的写入权限。您还需要对所有父目录(包括根目录)的执行权限。如果父目录完全私有,则组访问将被破坏。
因此,从我阅读您的问题和此页面来看,您似乎已经完全理解了。
答案3
r
权限授予对文件名列表的访问权限(但不是元数据)
x
权限授予对文件元数据(inode、大小、所有者、组、权限等)的访问权限(但无权访问文件名列表)
ls
首先枚举文件名列表,然后访问每个文件的文件元数据。元数据通过 访问stat
。
这里有一些例子,假设目录“example”包含文件“data”。
具有r
权限:
cat /example/data
将失败(无法访问文件元数据)ls -lA example
将部分成功(授予对文件名列表的访问权限,但不授予对元数据的访问权限)cd example
将失败(当前目录意味着无法访问元数据)
具有x
权限:
cat /example/data
将会成功(已授予对文件元数据的访问权限)(无需访问 LIST)ls -lA example
将失败(无法访问文件名列表)cd example
将会成功ls
将失败(无法访问文件名列表)ls -l data
将会成功(授予元数据访问权限)