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

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

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

    这是个 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 不好做
    zh584728
        23
    zh584728  
       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   ·   实用小工具   ·   5110 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:47 · PVG 13:47 · LAX 22:47 · JFK 01:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.