我是否正确理解了 Linux/Unix 中目录的权限?

我是否正确理解了 Linux/Unix 中目录的权限?

我是否正确理解了 Linux/Unix 中目录的权限?

  1. 如果您的目录仅具有r(读取)权限,那么您被允许查看目录的内容(哪些文件位于该目录),但是您无法执行此操作,因为您无法进入(cd)此目录(因为没有权限x)。您也无法从目录外部(例如通过)查看目录的内容(哪些文件位于该目录) 。您也无法使用和命令ls directoryname/*读取(查看)位于此类目录中的文件的内容(即使您有权读取这些文件)。如果这些文件位于这样的目录中,您也无法修改(写入)文件(即使您对它们有写入权限)(无论您尝试、或某些文本编辑器)。所以,从我的角度来看,仅对目录具有权限相当于对该目录完全没有权限。catmorecat >>echo >>cpr

  2. 如果您的目录仅具有x(执行)权限,则您可以进入(cd)目录,但不能查看(ls)目录的内容(因为您没有读取目录的权限)。如果目录仅具有权限,并且其中包含您具有(读取)和(写入)权限x的文件,您仍然无法使用(至少某些)文本编辑器(例如)打开此文件。但您可以使用或等命令读取文件上下文。您将能够使用或修改文件内容。所以,在我看来,这就是允许用户“读取”和“写入”目录中现有文件的原因(如果文件也具有相应的权限)。rwmceditcatmoreecho >>cat >>x

  3. 如果目录具有r权限x但没有w(写入)权限,则您无法更改目录的内容(位于该目录中的文件集)。例如,您无法在该目录中创建新文件或删除目录中的现有文件。但您仍然可以更改现有文件的内容。因此,您需要w权限才能在目录中创建或删除文件。

    添加:

  4. 值得一提的是,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将会成功(授予元数据访问权限)

相关内容