我是 RHEL 服务器上的用户(不是 root)。我希望能够继续编辑主目录中的文件,但设置权限,这样我就不会意外删除它。这可能吗?我可以这样做,以便在删除它之前需要二次提示(例如“您确定吗?y/n”)?
答案1
您可以通过以下方式删除文件解除链接它指向它所引用的目录(一个文件也可以在多个目录中引用,或者多次(使用不同的名称)引用到一个目录,这就是我们通常所说的硬链接)。
那么重要的权限不是文件的权限,而是它链接到的目录的权限。
因此,如果您将其放在您无权写入权限的目录中:
mkdir important-files
echo test > important-files/myfile
chmod a-w important-files # make the directory not writable
然后您将无法删除myfile
,但只要该文件可写,您仍然可以修改该文件。
答案2
如果您创建子目录并删除自己的写访问权限,则您将无法删除该目录中的任何文件,但您仍然可以修改它们。
$ mkdir dir ; echo something > dir/foo ; chmod a-w dir
$ $EDITOR dir/foo
$ rm -rf dir/
rm: cannot remove 'dir/foo': Permission denied
尽管您在编辑内容时仍然可能会破坏或截断内容,所以更好的选择是进行备份。您的系统管理员可以(应该?)将备份保存到您无法删除的目录中,但是可以使用与上面基本相同的想法来完成一个廉价的模拟:创建一个目录,并创建一个临时恢复写入权限的脚本,使backup复制到该目录并再次清除写入权限。
答案3
我希望能够继续编辑主目录中的文件,但设置权限,这样我就不会意外删除它。这可能吗?
简而言之,不是每个文件都具有通常的 Unix 权限。也许ACL能提供如此细粒度的控制吗?
我可以这样做,以便在删除它之前需要二次提示(例如“您确定吗?y/n”)?
rm
一个常见的解决方法是为to设置别名rm -i
,例如 in ~/.bash_aliases
(如果您的发行版支持),~/.bashrc
甚至全局 in /etc/bashrc
(可能会被 bash
包的更新覆盖,因此最好不要使用此选项):
$ cat .bash_aliases
alias rm='rm -i'
...
答案4
这只适用于您在 myFile 变量中指定的一个文件。
#
# Wrapper around /bin/rm to prevent accidental `rm myFile`
#
rm (){
local rm=$(which rm)
myFile="important.txt"
if [ -f "$myFile" ]; then
$rm -iv "$myFile"
else
$rm "$@"
fi
}
请记住将其添加到 /etc/profile 然后./etc/profile
。