V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Unlikely
V2EX  ›  Linux

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

  •  1
     
  •   Unlikely · 28 天前 · 5210 次点击

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

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

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

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

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

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

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

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

    这个回收站是 glib2 通用的,gnome 桌面环境就提供设置 30 天自动清除垃圾。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5309 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:13 · PVG 17:13 · LAX 02:13 · JFK 05:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.