Linux 文件系统为什么不做回收站功能? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Unlikely
V2EX    Linux

Linux 文件系统为什么不做回收站功能?

  Unlikely 2024-05-27 09:53:19 +08:00 6323 次点击
这是一个创建于 504 天前的主题,其中的信息可能已经有所发展或是发生改变。

这是个 feature 还是 bug ? 现在各大网盘,基本都会做一个定时的回收站,30 天以内可恢复,过期彻底删除。 哪种方式更合理些?

40 条回复    2024-05-30 00:18:19 +08:00
AoEiuV020JP
    1
AoEiuV020JP  
   2024-05-27 09:56:42 +08:00
我就记得是有的,
ghostwwg
    2
ghostwwg  
   2024-05-27 09:57:40 +08:00
网盘得回收站也不是文件系统提供得把。。。有了解 NTFS 得大神嘛。。。windows 下面得回收站是文件系统层做的还是应用侧完成得。
b821025551b
    3
b821025551b  
   2024-05-27 09:58:11 +08:00   2
vituralfuture
    4
vituralfuture  
   2024-05-27 10:02:48 +08:00 via Android   15
回收站是桌面环境提供的功能,跟文件系统无关,NTFS 也没有回收站功能
yolee599
    5
yolee599  
   2024-05-27 10:02:50 +08:00
回收站关文件系统什么事?不都是应用层的吗?
InkStone
    6
InkStone  
   2024-05-27 10:08:10 +08:00
这种回收站你自己实现起来也很容易。

把 rm alias 到 trash 上。然后开个定时任务定期清理就好了。
inhzus
    7
inhzus  
   2024-05-27 10:08:29 +08:00   1
alias: rm $1 -> mv $1 ~/.trash/
NessajCN
    8
NessajCN  
   2024-05-27 10:08:40 +08:00   1
这功能过于上层,根本不需要系统来提供啊
你建个目录,写个 .timer 文件让 systemd 30 天清一次,再在 .bashrc 里写个 function ,譬如
junk() {
mv "$1" "/trash/path/$1.trash"
}
就搞定了
BeautifulSoap
    9
BeautifulSoap  
   2024-05-27 10:11:45 +08:00 via Android   1
不是,我寻思 Windows 命令行里也没有回收站这功能啊?
为什么觉得 Linux 命令行就要有回收站了
回收站不过是桌面提供的功能罢了
xiangbohua
    10
xiangbohua  
   2024-05-27 10:16:55 +08:00
Linux 你想要还不简单啊,rm 命令替换一下不就行了。
littlewing
    11
littlewing  
   2024-05-27 10:27:35 +08:00
1. 没有 “Linux 文件系统” 这种文件系统,有 ext3 ext4 xfs zfs btrfs
2. windows mac 的回收站功能也不是文件系统支持的
3. linux 的桌面环境的文件管理器,比如 KDE 的 Dolphin 是带回收站功能的
ShinichiYao
    12
ShinichiYao  
   2024-05-27 10:36:49 +08:00
过去 Windows 有时候会告诉你,要删除的文件太大放不进回收站,是否直接删除,我就怀疑它是不是在硬盘哪个角落偷偷藏了一部分空间
mirtle
    13
mirtle  
   2024-05-27 10:39:31 +08:00   1
比 mv /trash 复杂一点,C:\ 删除一个文件会:

- 在 C:\$Recycle.Bin\S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1XXX\ ( SID )基于文件哈希值创建一个 $RXXXXXX.<file_ext> 的硬链接(数据文件);
- 创建名为 $IXXXXXX.<file_ext> 的文件(信文件),存储该文件的元数据(删除日期、原始位置)
- 删除该文件

还原逆向操作

系统实现的。
cwcc
    14
cwcc  
   2024-05-27 10:43:02 +08:00
linux 下一就是一,二就是二,符合计算机的操作直觉。回收站算是弥补人类缺陷的一种方式。
enihcam
    15
enihcam  
   2024-05-27 10:45:34 +08:00
这个问题就不属实。Linux 系统有很多支持 CoW 的文件系统,btrfs 、zfs 、bcachefs 等,随时 snapshot 恢复。
proxytoworld
    16
proxytoworld  
   2024-05-27 10:50:20 +08:00
@mirtle 硬链接指向那呢
FengMubai
    17
FengMubai  
   2024-05-27 10:53:49 +08:00
@ShinichiYao 不用怀疑, 就是
rlds
    18
rlds  
   2024-05-27 11:11:06 +08:00
这个还得看桌面环境,回收站都是应用侧功能
dmanbu
    19
dmanbu  
   2024-05-27 11:14:03 +08:00
cat /usr/lib/tmpfiles.d/tmp.conf
>>================================
q /tmp 1777 root root 10d
q /var/tmp 1777 root root 30d
>>================================

redhat 系的/tmp 目录就会删除超过 10 天的文件,这个时间你可以改
highFreqSurfer
    20
highFreqSurfer  
   2024-05-27 11:24:02 +08:00
别把你 windows 思维带到 linux
LokiSharp
    21
LokiSharp  
   2024-05-27 11:27:44 +08:00
现代文件系统有个东西叫做快照
lolizeppelin
    22
lolizeppelin  
   2024-05-27 11:36:06 +08:00
@dmanbu

别来坑人行不
跨分区删个大文件卡十几秒

回收站都要建立在当前分区的,这玩意不是 gui 不好做
LuJason
    23
LuJason  
   2024-05-27 11:38:22 +08:00
windows 上说白了也就是个 mv ,Linux 上把 rm 改成 mv 也是一样的
my3157
    24
my3157  
   2024-05-27 12:04:51 +08:00
$ which rm
rm: aliased to trash
lecia
    25
lecia  
   2024-05-27 13:03:28 +08:00 via iPhone
你可能需要这个
install trash-cli
alias rm=trash-put

回收站也不是什么特别的功能,属于应用层了,不怎么需要操作系统特别支持
geekvcn
    26
geekvcn  
   2024-05-27 13:25:13 +08:00
window 每个分区根目录都有一个隐藏文件夹,所谓的回收站就是把非 Shift+Del 删除的文件移动到回收站文件夹中。
codehz
    27
codehz  
   2024-05-27 13:26:41 +08:00
@mirtle 想起来 NTFS 里删除正在被打开文件也是“移动”到\$Extend\$Deleted\<FILEID><RANDOM> 里
dmanbu
    28
dmanbu  
   2024-05-27 13:59:12 +08:00
@lolizeppelin 看不懂配置么?你要当前分区,加一句配置就行了,很麻烦么?
kenvix
    29
kenvix  
   2024-05-27 14:05:13 +08:00
@ShinichiYao #12 挂载点\$Recycle.Bin\SID
kenvix
    30
kenvix  
   2024-05-27 14:06:17 +08:00
@proxytoworld #16 指向原文件啊
lolizeppelin
    31
lolizeppelin  
   2024-05-27 14:13:44 +08:00
@dmanbu
你怎么做到删任意文件直接进当前分区回收站呢 ,把 rm 改脚本你知道可能导致多少问题么
lyxxxh2
    32
lyxxxh2  
   2024-05-27 14:35:39 +08:00
桌面版有
至于命令行,我不希望有,懒着清空回收站。
如果有要求,重置 rm mv 呗。
ronyin
    33
ronyin  
   2024-05-27 16:09:37 +08:00
linux 需要挂载的,如果不挂载,删除就是灭有了。。
dmanbu
    34
dmanbu  
   2024-05-27 16:13:12 +08:00   1
@lolizeppelin 你看看楼主需求:一个定时的回收站,30 天以内可恢复,过期彻底删除
这个用 tmpfiles.d 完全可以实现,rm 文件?干嘛要 rm ?回收站也只是一个 mv 啊!!
假设 /dev/sdb2 挂载到 /data2
/usr/lib/tmpfiles.d/tmp.conf 加上:q /data2/tmp 1777 root root 30d
你要删一个文件,直接执行 mv file /data2/tmp/ ,过了 30 天会自动删除
事实上,在服务器上,为了安全都是禁用 rm 命令的,大家删文件,都是直接 mv 到 /tmp 下等自动删除
Unlikely
    35
Unlikely  
OP
   2024-05-27 16:53:01 +08:00
@dmanbu 请教一下,/tmp 下的东西,是 OS 在系统关机的时候删,还是下次启动的时候删?如果要跨 boot ,是不是得放到 /var/tmp 下?
dmanbu
    36
dmanbu  
   2024-05-27 17:06:39 +08:00
@Unlikely 系统运行的时候删,本质就是一个定时任务,/tmp 是默认的,你可以自定义在哪个目录,但注意,这个是 Redhat 系的 linux 发行版才默认有的,Debian 系的我记得好像没有,你需要自己装
Ericcccccccc
    37
Ericcccccccc  
   2024-05-27 17:15:37 +08:00
你自己创建一个回收站文件夹不就行了
dayeye2006199
    38
dayeye2006199  
   2024-05-28 08:11:45 +08:00
alias 一下 rm
Unlikely
    39
Unlikely  
OP
   2024-05-28 08:38:49 +08:00
@dmanbu 我看这个现在是放在 systemd 里面管理的。

这个应该是当前看到的最佳方案了,多谢。
cnt2ex
    40
cnt2ex  
   2024-05-30 00:18:19 +08:00
gio 就有回收站的功能

gio trash --list
gio trash --restore
gio trash --empty

这个回收站是 glib2 通用的,gnome 桌面环境就提供设置 30 天自动清除垃圾。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3224 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 30ms UTC 11:56 PVG 19:56 LAX 04:56 JFK 07:56
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86