防止自己意外删除文件

防止自己意外删除文件

我是 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

相关内容