Linux 文件系统为什么不做回收站功能? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Unlikely
V2EX    Linux

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

  •  1
     
  •   Unlikely May 27, 2024 6790 views
    This topic created in 700 days ago, the information mentioned may be changed or developed.

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

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

    把 rm alias 到 trash 上。然后开个定时任务定期清理就好了。
    inhzus
        7
    inhzus  
       May 27, 2024   1
    alias: rm $1 -> mv $1 ~/.trash/
    NessajCN
        8
    NessajCN  
       May 27, 2024   1
    这功能过于上层,根本不需要系统来提供啊
    你建个目录,写个 .timer 文件让 systemd 30 天清一次,再在 .bashrc 里写个 function ,譬如
    junk() {
    mv "$1" "/trash/path/$1.trash"
    }
    就搞定了
    BeautifulSoap
        9
    BeautifulSoap  
       May 27, 2024 via Android   1
    不是,我寻思 Windows 命令行里也没有回收站这功能啊?
    为什么觉得 Linux 命令行就要有回收站了
    回收站不过是桌面提供的功能罢了
    xiangbohua
        10
    xiangboha  
       May 27, 2024
    Linux 你想要还不简单啊,rm 命令替换一下不就行了。
    littlewing
        11
    littlewing  
       May 27, 2024
    1. 没有 “Linux 文件系统” 这种文件系统,有 ext3 ext4 xfs zfs btrfs
    2. windows mac 的回收站功能也不是文件系统支持的
    3. linux 的桌面环境的文件管理器,比如 KDE 的 Dolphin 是带回收站功能的
    ShinichiYao
        12
    ShinichiYao  
       May 27, 2024
    过去 Windows 有时候会告诉你,要删除的文件太大放不进回收站,是否直接删除,我就怀疑它是不是在硬盘哪个角落偷偷藏了一部分空间
    mirtle
        13
    mirtle  
       May 27, 2024   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  
       May 27, 2024
    linux 下一就是一,二就是二,符合计算机的操作直觉。回收站算是弥补人类缺陷的一种方式。
    enihcam
        15
    enihcam  
       May 27, 2024
    这个问题就不属实。Linux 系统有很多支持 CoW 的文件系统,btrfs 、zfs 、bcachefs 等,随时 snapshot 恢复。
    proxytoworld
        16
    proxytoworld  
       May 27, 2024
    @mirtle 硬链接指向那呢
    FengMubai
        17
    FengMubai  
       May 27, 2024
    @ShinichiYao 不用怀疑, 就是
    rlds
        18
    rlds  
       May 27, 2024
    这个还得看桌面环境,回收站都是应用侧功能
    dmanbu
        19
    dmanbu  
       May 27, 2024
    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  
       May 27, 2024
    别把你 windows 思维带到 linux
    LokiSharp
        21
    LokiSharp  
       May 27, 2024
    现代文件系统有个东西叫做快照
    lolizeppelin
        22
    lolizeppelin  
       May 27, 2024
    @dmanbu

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

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

    回收站也不是什么特别的功能,属于应用层了,不怎么需要操作系统特别支持
    geekvcn
        26
    geekvcn  
       May 27, 2024
    window 每个分区根目录都有一个隐藏文件夹,所谓的回收站就是把非 Shift+Del 删除的文件移动到回收站文件夹中。
    codehz
        27
    codehz  
       May 27, 2024
    @mirtle 想起来 NTFS 里删除正在被打开文件也是“移动”到\$Extend\$Deleted\<FILEID><RANDOM> 里
    dmanbu
        28
    dmanbu  
       May 27, 2024
    @lolizeppelin 看不懂配置么?你要当前分区,加一句配置就行了,很麻烦么?
    kenvix
        29
    kenvix  
       May 27, 2024
    @ShinichiYao #12 挂载点\$Recycle.Bin\SID
    kenvix
        30
    kenvix  
       May 27, 2024
    @proxytoworld #16 指向原文件啊
    lolizeppelin
        31
    lolizeppelin  
       May 27, 2024
    @dmanbu
    你怎么做到删任意文件直接进当前分区回收站呢 ,把 rm 改脚本你知道可能导致多少问题么
    lyxxxh2
        32
    lyxxxh2  
       May 27, 2024
    桌面版有
    至于命令行,我不希望有,懒着清空回收站。
    如果有要求,重置 rm mv 呗。
    ronyin
        33
    ronyin  
       May 27, 2024
    linux 需要挂载的,如果不挂载,删除就是灭有了。。
    dmanbu
        34
    dmanbu  
       May 27, 2024   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
       May 27, 2024
    @dmanbu 请教一下,/tmp 下的东西,是 OS 在系统关机的时候删,还是下次启动的时候删?如果要跨 boot ,是不是得放到 /var/tmp 下?
    dmanbu
        36
    dmanbu  
       May 27, 2024
    @Unlikely 系统运行的时候删,本质就是一个定时任务,/tmp 是默认的,你可以自定义在哪个目录,但注意,这个是 Redhat 系的 linux 发行版才默认有的,Debian 系的我记得好像没有,你需要自己装
    Ericcccccccc
        37
    Ericcccccccc  
       May 27, 2024
    你自己创建一个回收站文件夹不就行了
    dayeye2006199
        38
    dayeye2006199  
       May 28, 2024
    alias 一下 rm
    Unlikely
        39
    Unlikely  
    OP
       May 28, 2024
    @dmanbu 我看这个现在是放在 systemd 里面管理的。

    这个应该是当前看到的最佳方案了,多谢。
    cnt2ex
        40
    cnt2ex  
       May 30, 2024
    gio 就有回收站的功能

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

    这个回收站是 glib2 通用的,gnome 桌面环境就提供设置 30 天自动清除垃圾。
    About     Help     Advertise     Blog     API     FAQ     Solana     4954 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 173ms UTC 09:52 PVG 17:52 LAX 02:52 JFK 05:52
    Do have faith in what you're doing.
    ubao msn 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