我经常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 垃圾规范。
在章节中垃圾目录,垃圾回收遵循这样的后备过程:
- 家庭垃圾,位于
$XDG_DATA_HOME/Trash
。在你的情况下,它可能是/root/Trash
为了root。也有可能是 sudo 通过$XDG_DATA_HOME
了,所以也尝试在你自己的垃圾箱下寻找它。它是主要垃圾用过的。 - 对于不与 共享相同挂载根的目录
$XDG_DATA_HOME
,可以使用挂载目录顶部目录中的垃圾箱。$topdir/.Trash/$UID
可以先尝试一下。- 如果测试失败(例如
$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-cli
with时垃圾箱的位置sudo
,@Arthur2e5 回答了这个问题。我只需补充一点,就我而言,位置是:
/home/.Trash-0