我正在使用 Ubuntu-Mate 20.04,我的主文件夹中的大部分内容都丢失了。我认为这可能是由于错误地使用了 sudo 中的“rm”命令,但不确定是否还有其他原因。
我解释一下:我试图删除 /home/user2 上的一个文件夹(“targetfolder(某物)”)及其内容,当时我以 user1 的身份登录(user1 具有 sudo 权限)。因此,我这样做了:
sudo rm -r /home/user2/targetfolder (something)/
起初 rm 由于括号而给出了一些错误消息 - 我的意思是:()-,所以我用 * 替换了文件夹名称的一部分,然后执行以下操作:
sudo rm -r /home/user2/targetfolder */
注意:我可能因为空格('targetfolder *')而对文件夹名称使用了引号,尽管在终端中注册的最后一个命令没有引号。
据我了解,rm 应该只删除 user2 主文件夹中名称以“targetfolder”开头的任何文件夹,但它似乎删除了 user1 主文件夹的大部分内容。我补充说,由于我不清楚 rm 是否在工作,所以我关闭了终端,我想,是终止了该进程。
以防万一,user1 和 user2 主文件夹都使用 ecryptfs 加密(/home/user2 中要删除的文件夹位于 .Private 之外,因此未加密)。
所以,我的问题是,我使用的 rm 命令是否会删除 user1 主文件夹的内容(甚至影响系统)。
我最近备份了丢失的内容,但我想确保这不是由于 rm 命令以外的其他问题造成的。
提前致谢并且抱歉我的英语不好。
答案1
此命令
sudo rm -r /home/user2/targetfolder */
会尝试删除一个/home/user2/targetfolder
可能不存在的文件夹,然后删除匹配的项目*/
。这意味着当前工作目录中存在的所有非隐藏目录(及其内容)。如果当前工作目录是的主目录user1
,那么是的,这就是会受到影响的目录。
错误在于没有转义空格。空格是分隔参数的分隔符。在这里,您提供了两个参数(在选项 旁边-r
),/home/user2/targetfolder
和 */
,其中后者由 shell 扩展以匹配所有非隐藏子目录(例如Documents/
、Videos/
等)。
引用文件名模式,或者转义空格,例如
sudo rm -r "/home/user2/targetfolder "*/
或者
sudo rm -r /home/user2/targetfolder\ */
将会包括/home/user2/targetfolder (something)/
和其他匹配的文件夹(如果有)。
一般来说,将rm -r
和 结合使用sudo
,正如您所经历的那样,是极其危险的。不要立即执行此类命令,而应先进行验证。
sudo rm -r
用替换ls -d
。这将列出参数中包含的所有项目,并允许您预先验证将删除哪些内容(感谢 cocomac 提供的提示)。- 一旦
ls
列出您想要删除的内容,按↑即可调用该命令并更改ls -d
为sudo rm -r
。
如果必须删除单个目录,请完全避免使用通配符。使用制表符补全。这样,您就可以确保在命令行中正确输入了特定名称。