在我的一些文件上犯了相关错误之后rm
(这很好,因为我有备份),我开始思考如何限制自己犯这样的错误。我没有对文件权限进行任何操作,所以我开始阅读相关内容,但我认为我可能遗漏了一些东西。我本质上想设置我的数据备份(一:Windows NT 文件系统外部硬盘驱动器;二:基于 UNIX 的服务器,但我不知道它的确切细节),以便当我尝试删除或以其他方式时操作我的文件,如果没有其他覆盖,我将无法这样做sudo
,或者得到某种“你确定吗?”提示。或者,也许人们使用的某种“标准”文件备份权限比我想象的更好?
我一直在尝试chmod
各种设置,但我似乎无法做到正确。据我了解,这755
似乎是一种标准,但据我了解,这并不能阻止我犯我所犯的错误。关于什么555
?您应该以与文件不同的方式设置文件夹吗?人们通常使用什么来保护他们的长期存储,即您不会经常访问的文件?
答案1
如果删除“w”位,则不会意外覆盖删除“w”位的任何内容。如果这是一个目录,则意味着您无法在该目录中添加或删除文件;如果那是一个文件,则意味着您无法更改该文件。然而,该方法的缺点是您会丢失数据(IMO,文件权限是备份数据的一部分)。
另一种方法是使用“不可变”扩展属性:
chattr +i file_or_directory
缺点是那方法的一个缺点是它可能会令人困惑:ls -l
告诉你可以写入文件,但如果你尝试它,内核会说“权限被拒绝”,即使是 root;你必须记住扩展属性(它lsattr
可以告诉你有关)
最后一句话:避免意外更改不需要经常访问的文件的最佳方法就是,简单地说,不让他们可用正常使用。不要自动挂载文件系统;使该mount
步骤成为备份过程的一部分。如果你这样做了,所有这些问题都会消失。
答案2
它通常会避免所有这些sudo
并故意禁止您自己访问您的文件 - 它可能会给您带来问题,并且可能会很烦人,您无论如何都会覆盖自己的保护机制。
相反,我会使用trash-cli
它的行为类似于桌面类型的垃圾桶,如果您犯了错误,您可以在以后恢复文件。
如果您使用 APT 包管理器,您可以使用以下命令安装
apt-get install trash-cli
或者使用yum
任何pacman
你的包管理器,然后基本上只需rm
用trash
命令替换命令即可。然后您可以疯狂删除文件,而不必担心丢失数据,因为您可以稍后恢复文件。
如果您使用 verbose ie,trash -v <file>
trash-cli 将列出将文件删除到的目录。
答案3
那么别名呢?在命令行中输入别名,您将看到所有定义的别名。我建议添加类似的内容:
alias rm='rm -i'
在 ~/.bashrc 中定义它(以便您将来可以删除它或更改它以满足您的需要。)
[mal@localhost ~]$ touch 123
[mal@localhost ~]$ rm 123
[mal@localhost ~]$ touch 123
[mal@localhost ~]$ rm -i 123
rm: remove regular empty file ‘123’? y
[mal@localhost ~]$
或者
这里还有一个技巧。
使用或-i
在该目录中创建一个名为的文件touch -- -i
touch ./-i
现在尝试rm -rf *
:
[mal@localhost stack]$ touch {1..10}
[mal@localhost stack]$ touch -- -i
[mal@localhost stack]$ ls
1 10 2 3 4 5 6 7 8 9 -i
[mal@localhost stack]$ rm -rf *
rm: remove regular empty file ‘1’? n
rm: remove regular empty file ‘10’? n
rm: remove regular empty file ‘2’? n
这里*
会扩展-i
到命令行,所以你的命令最终会变成rm -rf -i
。该命令在删除前会提示。
或者
使用安全管理
Safe-rm 是一种安全工具,旨在通过用包装器替换 /bin/rm 来防止意外删除重要文件,该包装器根据永远不应删除的可配置文件和目录黑名单检查给定参数。
Users who attempt to delete one of these protected files or directories will not be able to do so and will be shown a warning
消息代替:
$ rm -rf /usr Skipping /usr