根分区的垃圾桶在哪里?

根分区的垃圾桶在哪里?

我经常trash-put从命令行删除文件。最近,我给我的rm命令起了别名,trash-put这样我就不会意外删除一些重要的东西。

然而,现在发生的事情是我必须从/var/log文件夹中删除一些文件以释放/文件系统上的一些空间。我这样做是使用sudo

sudo rm /var/log/somelog

#Above command is equivalent to: 
sudo trash-put /var/log/somelog

执行此操作后,分区上没有恢复可用空间,因为文件肯定已移至某个垃圾桶。然而,当我检查我的垃圾桶时,没有文件。我试图查看分区.Trash-100上是否有文件夹/,但即使如此也不存在。

那么,我的垃圾文件去了哪里?我如何找到它,以便我可以摧毁它以恢复一些空间?

答案1

您删除的那些文件实际上可能仍由另一个进程打开。在这种情况下,当该进程关闭其文件句柄时,文件空间将变得可用。

您可以使用以下命令查找这些文件lsof

lsof |grep "var/log"|grep deleted

答案2

使用时不会调用别名sudo

$ alias a=ls
$ sudo a
sudo: a: command not found

这意味着这些文件是实际上删除而不是移动到某个垃圾箱。

如果存在仍保持文件打开状态的进程,例如用于写入文件,则文件使用的空间将不会被回收,直到这些进程关闭文件或退出。

答案3

根据垃圾放置的联机帮助页,trash-put 将文件放入垃圾箱,垃圾箱由FreeDesktop.org 垃圾规范

在章节中垃圾目录,垃圾回收遵循这样的后备过程:

  1. 家庭垃圾,位于$XDG_DATA_HOME/Trash。在你的情况下,它可能是/root/Trash为了root。也有可能是 sudo 通过$XDG_DATA_HOME了,所以也尝试在你自己的垃圾箱下寻找它。它是主要垃圾用过的。
  2. 对于不与 共享相同挂载根的目录$XDG_DATA_HOME,可以使用挂载目录顶部目录中的垃圾箱。
    1. $topdir/.Trash/$UID可以先尝试一下。
    2. 如果测试失败(例如$topdir/.Trash不存在),请使用 $topdir/.Trash-$UID.对于您的情况,请尝试在 中查找它/.Trash-0,因为sudo它使您的 UID 根。

更新:

狂吃“根垃圾”给了我更多。

一个非常古老的教程其中提到gksudo nautilus '/root/.Trash/',根目录下的.Trash(而不是fd.o 中的)目录可能是一个不错的选择。Trash$XDG_DATA_HOME

根据a very old questions 中文是什么意思其中.Trash-root为询问者的可移动磁盘创建,一些实现使用用户名而不是数字 UID。

答案4

正如评论和答案中指出的那样,问题在于别名的扩展。

但对此有一些解决方案:

如果您想sudo使用所有别名(从而规避@Kusalananda 指出的问题),您可以将以下别名添加到别名文件中:

alias sudo='sudo '

如果您这样做了,sudo rm就会扩展到sudo trash-put您所期望的那样。

回答 @Dubu 关于别名仅用作命令的第一个单词的评论:如果将标志添加-g到别名定义中,它将成为全局的并且即使不在命令位置也可以工作。您可以使用您的别名来完成此操作rm。但是,您可能不希望 出现其他不好的意外sudo,因此第一种方法在这里更合适。例如,如果您想要为管道命令设置别名(例如alias -g pl='| less'),则此命令更相关。

至于使用trash-cliwith时垃圾箱的位置sudo,@Arthur2e5 回答了这个问题。我只需补充一点,就我而言,位置是:

/home/.Trash-0

相关内容