我想将目录标记为只读,使其内容只读。使用 chmod a=rx 使该目录只能读取/可执行,因此无法删除该目录及其内容。虽然已经完成了一半,但仍然可以修改内容。 chmod a=r 阻止读取内容。
有任何想法吗?
答案1
听起来您正在寻找
chmod a-w -R your_directory
要防止更改目录中的文件,必须删除文件本身的写入属性。
答案2
长话短说:
递归地将目录和其中所有现有/新文件设置为只读:
sudo chmod a=r -R /path/to/the/folder/
设置目录本身的权限,以便每个人都可以进入该目录
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”:权限被拒绝