将目录内容标记为只读

将目录内容标记为只读

我想将目录标记为只读,使其内容只读。使用 chmod a=rx 使该目录只能读取/可执行,因此无法删除该目录及其内容。虽然已经完成了一半,但仍然可以修改内容。 chmod a=r 阻止读取内容。

有任何想法吗?

答案1

听起来您正在寻找

chmod a-w -R your_directory

要防止更改目录中的文件,必须删除文件本身的写入属性。

答案2

长话短说:

  1. 递归地将目录和其中所有现有/新文件设置为只读:

    sudo chmod a=r -R /path/to/the/folder/

  2. 设置目录本身的权限,以便每个人都可以进入该目录

    sudo chmod a=rx /path/to/the/folder/


我没有足够的声誉来发表评论,所以我会对此做出彻底的回答。

我指的是SS64 chmod 页面如果我不记得有关 chmod 的内容,可以快速参考。

在你的主目录中创建一个测试目录,然后创建一个测试文件,最后列出目录内容:

mkdir ~/testaubs
cd ~/testaubs
touch testfile.aubs
ls -l

总计 0

-rw-r--r-- 1 aubs aubs 0 12 月 4 日 03:19 testfile.aubs

该文件read-write用于所有者read为了团体read用户(还有谁)。

根据您提供的参数a=rx,您允许每个人读取该文件,但也可以执行它。问题标题说只读

如果你运行:

chmod a=rx testfile.aubs
ls -l

总计 0

-r-xr-xr-x 1 aubs aubs 0 12 月 4 日 03:19 testfile.aubs

该文件现在read-execute包含所有者read-execute为了团体read-execute用户(还有谁)。

您可以通过运行以下命令将此文件的权限设置为read适用于所有人:

chmod a=r testfile.aubs
ls -l

总计 0

-r--r--r-- 1 aubs aubs 0 12 月 4 日 03:19 testfile.aubs

现在,任何人(除了 root 之外)都无法对该文件进行任何更改,甚至包括您。

当您在同一目录中创建另一个文件时,下一个问题就出现了:

touch testfile2.aubs
ls -l

总计 0

-rw-r--r-- 1 aubs aubs 0 12 月 4 日 03:35 testfile2.aubs

-r--r--r-- 1 aubs aubs 0 12 月 4 日 03:19 testfile.aubs

testfile2.aubs文件继承了它所在的父目录的权限,这是read-write为了所有者read为了团体read用户(还有谁)。


如果你想阻止任何人创造目录中的新文件,还需要设置父目录的权限。

首先,我们将检查这些权限是什么,因此我们将上升一级并列出所有文件,但限制为仅查看测试目录:

cd ..
ls -l  | grep test

drwxr-xr-x 2 aubs aubs 4096 12 月 4 日 03:35 测试

我们可以看到父目录有read-write-execute以下权限所有者read-execute为了团体read-execute用户(还有谁)。

我们可以对目录中的所有现有文件和新文件设置递归权限所有者,团体用户仅具有read,但我们需要提升权限,因为sudo我们将第一个文件设置为read仅用于所有者(我们的帐户):

sudo chmod a=r -R test/
ls -l | grep test

dr--r--r-- 2 aubs aubs 4096 12 月 4 日 03:35 测试

然后我们可以设置目录本身的权限,所以所有者,团体用户都具有读取执行功能(它们需要执行才能进入目录,否则会出现错误bash: cd: test/: Permission denied)。这还需要通过以下方式提升权限sudo

sudo chmod a=rx test/
ls -l | grep test

dr-xr-xr-x 2 aubs aubs 4096 12 月 4 日 03:35 测试

我们必须使用sudo上述某些内容,因为当我们从我们的帐户(所有者)中删除“写入”时,我们将失去再次更改它的权限!

现在我们可以进入文件夹并列出内容(看到每个人都是read唯一的):

cd test/
ls -l

总计 0

-r--r--r-- 1 aubs aubs 0 12 月 4 日 03:35 testfile2.aubs

-r--r--r-- 1 aubs aubs 0 12 月 4 日 03:19 testfile.aubs

但我们无法创建新文件:

touch testfile3.aubs 

触摸:无法触摸“testfile3.aubs”:权限被拒绝

相关内容