Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
CatCode
V2EX  ›  Linux

关于 rm -rf /有感

  •  1
     
  •   CatCode · Dec 21, 2019 · 10937 views
    This topic created in 2334 days ago, the information mentioned may be changed or developed.

    刚刚看到了这个帖子 就在刚刚,rm -rf 删软连接的时候后面多加了个 /,现在杯具了 ,又想起了我在 你们平时用 Linux 时喜欢用 root 用户吗 里回复的

    我大 root 敢死队什么时候怕过?

    结合最近发生的一件事情说一下:
    某些发行版的 rm 是默认--preserve-root 的,所以rm -rf /并没有什么卵效果。当然我不确定指定了多个路径的情况。我用过的发行版不多,作死也不多,这一条如果有知道的更多的,欢迎指正。

    然后,在讨论rm这个问题的时候,总有人会说alias rm to mv。我想说,其实这样并不能挡住误操作。 这里举一个就前不久在我这里发生的真实例子:
    (背景:高校非计算机科学相关专业的科研机群) 在一台节点机上,给新人“练手”:用 root 编译安装一个软件。新人打算备份一下某些数据,但是误操作mv /* bak/(通配符前多打了一个斜杠)新人还真“新”,没搞懂乍回事儿,觉得怎么突然这么慢,也没按 Ctrl +C。等了好久才反应过来,叫来前辈看情况。
    此时,各种 bin 已经都被移走了,所有命令都是各种command not found,然后新人居然一个 Ctrl+D 退掉了 SSH——当时那台机器最后一个 SSH 连接。
    最后,迫于那台机器上没啥值得抢救的数据,直接重装了,省事儿。

    可以看到,rm是有一些重要路径的保护措施的,而mv没有。而总所周知mv是不会丢失数据内容,而rm是可能导致数据丢失的(数据恢复不是 100%保证成功)。

    起一个别名并不能解决问题。

    然而,删掉了系统,真的有那么可怕吗?我觉得不是,重装系统太简单了。
    真正可怕的是删掉、系统上产生的还有价值的数据、删掉部署在系统之上的技术栈、以及机器掉线带来的其他负面影响。
    并没有系统命令可以帮你保护这些内容

    那我们能做什么呢?老生常谈了:
    在敲下回车之前,留个心,多看一眼,仔细一点。
    勤备份:不仅仅是备份数据,还有软件架构的冗余、人员的冗余等等。

    最后,感谢大家深夜听我逼逼这么多。

    45 replies    2019-12-26 09:06:12 +08:00
    MadHouse
        1
    MadHouse  
       Dec 21, 2019 via Android
    用 rm , 尽量不同 rm-rf
    nvkou
        2
    nvkou  
       Dec 21, 2019 via Android
    所有路径都使用相对路径不好吗? 多 cd 多./不好吗?
    iamwho
        3
    iamwho  
       Dec 21, 2019

    真正可怕的是删掉、系统上产生的还有价值的数据、删掉部署在系统之上的技术栈、以及机器掉线带来的其他负面影响。
    并没有系统命令可以帮你保护这些内容。



    alias rm to mv 就不是为了防止误操作,而是防止误操作造成数据丢失,所以你的说法不成立。
    wtks1
        4
    wtks1  
       Dec 21, 2019 via Android
    给新手低权限账号就行了
    KentY
        5
    KentY  
       Dec 21, 2019
    关于"喜欢用 root 用户吗"那个帖, 我上来就回复了, 这个听别人怎么劝都没用, 吃一堑才能长一智.

    我做过比 rm /这个更蠢的事, 因为写脚本拷贝,粘贴, 结果粘贴的历史记录没弄好, 把无关命令贴进脚本, 把整个硬盘擦了, ssd 很快... 但是机器还正常运行了大概几十秒..我还排错呢..:D 所以在很多方面有教训并不是坏事. 当然要是没备份就另说了.

    @MadHouse
    当你在做一个工作, 发现截然不同路径的 n 个文件 /目录需要处理(比如说 rm), 你怎么做, cd n 次吗?
    实际操作中, 可能 3 次就是极限了
    iamverylovely
        6
    iamverylovely  
       Dec 21, 2019
    mv /* bak/也有可能是少打了一个点。mv ./* bak/
    carpRed
        7
    carpRed  
       Dec 21, 2019 via Android
    我也记得是被限制过得,无奈很多人喜欢玩这个梗,看不起我大开源社区
    ihipop
        8
    ihipop  
       Dec 21, 2019 via Android
    pip install trash-cli
    mostkia
        9
    mostkia  
       Dec 21, 2019
    我删除东西都是用 rm -i 的,就怕删错东西
    lcdtyph
        10
    lcdtyph  
       Dec 21, 2019
    多用 tab 补全,可以避免很多路径输入错误的问题
    deorth
        11
    deorth  
       Dec 21, 2019
    可以像我司一样,每半个月开一次会,培训安全生产,输出心得。每月抽查安全生产守则和处罚条例。出线上重大事故的,扣 5000 开除。所有上级上管本季度绩效为 C,按级别扣钱。
    HuLiY
        12
    HuLiY  
       Dec 21, 2019
    忘记了从哪看到的一个程序员的原则:在每个文件夹下新建 recycle 文件夹,删除文件统一用 mv ./recycle,然后定期删除 recycle。虽说不能完全避免误删风险,但也相当于多了一道保护。

    话说回来,误删这种事情,只能降低风险,没法完全避免。
    hoyixi
        13
    hoyixi  
       Dec 21, 2019
    如果是公司的环境,背后透射出的是管理烂,正规点的公司,员工账号能干些啥规定的死死的,根本没有权限,想删也删不了。 而且通常,环境一般也是专门或者隔离的,最坏情况也造成不了多大灾难。
    zr8657
        14
    zr8657  
       Dec 21, 2019
    之前有一次上午操作一台生产机器,中午休息完下午再操作的时候发现生产环境的应用都被删了。当时汗都下来了,那感觉真是一言难尽,折腾到半夜也没弄好,随手看了下 rm rf 的命令执行时间发现是中午,然后就回家睡觉了。
    yuzenan888
        15
    yuzenan888  
       Dec 21, 2019   ❤️ 1
    我记得我经历过最惨的一次是 rm -rf ./* 忘了加点,发现问题后 3 秒内按了 Ctrl + C,回过神来发现 /bin、/boot 已经被删掉了,但由于当时根目录下还有个 /data 目录,这个目录挂载到 samba 磁盘上,当时估计 samba 服务器上的硬盘还处于休眠状态没启动,IO 卡在这里了,回过头检查的时候发现 /data 目录毫发无损……真是庆幸!当时用的是 CentOS 系统,/bin 是软链接到 /usr/bin 的,所以 /usr/bin/ln -s /usr/bin /bin 恢复,然后再从新装系统上拷贝 /boot 过来就没事啦。

    我觉得可以通过在根目录上建一个名字为 1 的目录,然后往里面塞入大量的零碎小文件(十万个)来减缓损失,当然只是预防手贱而已。
    CatCode
        16
    CatCode  
    OP
       Dec 21, 2019
    @iamwho `mv`就安全了吗?`mv`和`cp`在文件名相同的情况下,默认的行为是覆盖喔。举个例子,
    ```bash
    cp test.conf test.conf.bak #创建备份
    vi test.conf #大量的编辑
    ##略:其他的很多操作
    cp test.conf test.conf.bak #原本想 vi test.conf,使用上下箭头键切命令时多切了一个
    ```
    这样,你的备份 test.conf.bak 就没了。

    我在文中想引申出来的是:每个命令都是有一定的风险的,只是风险等级不同。
    难道只有“误删数据”才叫“事故”吗?
    mv、cp、>覆盖掉了已存在的文件
    >>追加的内容和原有内容无法区分
    UPDATE WHRER 的条件输错修改了不该修改的位置
    apt install 把某个依赖升级到了并不兼容的高版本
    ...
    甚至是 Windows 上,删除文件点了“是”,点开了回收站又点到了“清空”,再次确认还点了“是”这样的三重防护都挡不住的没睡醒。

    我认为每个用户都应该在执行命令前,能明确这个命令会有哪些作用。
    而对于现有的容错设计,我们必须明白其容错能力并非无限。
    JamesR
        17
    JamesR  
       Dec 21, 2019
    每小时快照一次,怕个球。
    no1xsyzy
        18
    no1xsyzy  
       Dec 21, 2019
    是在 GNU coreutils 6.2 版本修改的这一默认行为(--preserve-root )
    https://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=log;h=refs/tags/COREUTILS-6_2
    BSD、Mac 和非 GNU 的 Linux 都不清楚,Minix 我盲猜是没默认 --preserve-root 的
    msg7086
        19
    msg7086  
       Dec 21, 2019   ❤️ 1
    敲下回车之前多留心才是真的。
    sudo 也好 mv 也好,管不住自己的回车键,一样总有一天会冲破安全措施的。
    养成危险动作前再三确认,以及脑子不好使的时候不要瞎瘠薄操作的习惯。
    CivAx
        20
    CivAx  
       Dec 21, 2019
    严格上来说 mv 的杀伤性可比 rm 大多了……

    rm 看起来就凶神恶煞,对付 rm 的人都小心翼翼

    mv 看起来人畜无害,给错参数就直接完蛋
    xiaomingVTEX
        21
    xiaomingVTEX  
       Dec 21, 2019
    能力越大, 责任越大
    niming007zh
        22
    niming007zh  
       Dec 21, 2019
    @yuzenan888
    为什么不敲 rm -rf *呢
    paopjian
        23
    paopjian  
       Dec 21, 2019
    请问这种连基本命令都没法用了怎么修复回去呢?
    yuzenan888
        24
    yuzenan888  
       Dec 21, 2019
    @niming007zh 习惯问题……经常执行脚本文件都是这样输的。
    CatCode
        25
    CatCode  
    OP
       Dec 21, 2019
    @paopjian 硬盘拆下来,找别的机器挂上,尝试 mv 回来
    xuanbg
        26
    xuanbg  
       Dec 21, 2019
    命令总有输错的时候,这个时候能挽救你的唯有备份。纠结 root 或者 user,rm 还是 mv,其实真的没有意义。

    把数据和应用分开存放,多玩 Docker,少玩系统。不要觉得自己能耐,设置了足够多的安全保障,不会错。淹死的都是会水的
    xuanbg
        27
    xuanbg  
       Dec 21, 2019   ❤️ 1
    真正的安全不是追求不犯错,而是允许犯错,而且不怕你犯错。
    KnothHe
        28
    KnothHe  
       Dec 21, 2019
    我现在是在桌面使用 Linux 的时候尽量不用 rm,改用 trash 了。实在是害怕意外删除有用的文件又没办法恢复了。
    SaigyoujiYuyuko
        29
    SaigyoujiYuyuko  
       Dec 21, 2019
    还是仔细看好吧 233
    charlie21
        30
    charlie21  
       Dec 21, 2019
    倒霉就是倒霉
    mokeyjay
        31
    mokeyjay  
       Dec 21, 2019
    我已经非常习惯在录入任何路径前使用 ./ 了,这俩键挨在一起,按着还挺顺手
    sola97
        32
    sola97  
       Dec 22, 2019 via Android
    习惯性打 tab 二次确认
    mwftts
        33
    mwftts  
       Dec 22, 2019 via Android
    所以可以把一次回车改成两次回车吗
    mytsing520
        34
    mytsing520  
    PRO
       Dec 22, 2019
    所以有上堡垒机的必要性
    realpg
        35
    realpg  
    PRO
       Dec 22, 2019
    真不知道菜鸡运维都哪来的勇气-r 和-f
    sxd96
        36
    sxd96  
       Dec 22, 2019 via iPhone
    没有用的,习惯问题。
    按说 windows 该没问题吧 gui 的,我室友非要 shift del,拦都拦不住,误删过不止一次课件啊报告啊什么的。
    还是要好习惯。
    b00tyhunt3r
        37
    b00tyhunt3r  
       Dec 22, 2019 via iPhone
    @nvkou 恰恰所有路径使用绝对路径才安全
    sparkssssssss
        38
    sparkssssssss  
       Dec 22, 2019 via Android
    所以我现在基本不用星号,能不用 r 就不用,
    CatCode
        39
    CatCode  
    OP
       Dec 22, 2019
    @realpg 比如你要删一个有.git 目录的目录,就要用到-rf,不然一个一个按 y 会累死的
    @sxd96 Windows 下删 U 盘 /储存卡里的东西是不经过回收站的,不要问我是怎么知道的
    realpg
        40
    realpg  
    PRO
       Dec 22, 2019
    @CatCode #39
    不用 r 不用 f 当然不行

    我的意思是菜鸡运维哪来的勇气看都不看审都不审就回车 很潇洒么
    MadHouse
        41
    MadHouse  
       Dec 22, 2019 via Android
    @KentY 批量操作当然用 sh 脚本,不过我是 emacs 重度用户,习惯用 dired 模式
    nnnToTnnn
        42
    nnnToTnnn  
       Dec 23, 2019
    话说执行 rm -rf 这个命令的时候你们都不检查一下的吗?

    每当执行以下命令我至少都会看三遍以上进行确认。

    1. rm -rf xxxx (linux 命令)
    2. delete from xxxxxx where xxx=xxx (sql 命令)

    这些命令我至少在按下回车之前检查三遍以上,以前同事会经常看见我写完一句 sql 或者 linux 命令就盯着屏幕看好久,然后我问为啥不执行 =。=
    nnnToTnnn
        43
    nnnToTnnn  
       Dec 23, 2019
    其次,还有就是为什么在 linux 用户下,用个 sudo 切换一下身份就这么难么? 假如你用的是 sudo 而非 root 身份。

    起码在报一堆的 xxx 无权限的时候 ctrl +c 还能解决问题。

    这让我又想到了之前一个 v2 的帖子,非要用 root 用户去操作服务器。

    1. 权利太大,容易误删数据
    2. root 身份启动的软件是具有 root 权限的。稍微一个漏洞整个系统全玩完
    no1xsyzy
        44
    no1xsyzy  
       Dec 23, 2019
    @nnnToTnnn 一个笑话:
    在 rm 之前先要沐浴更衣,点上一支沉香,呼吸,感受,敲入命令,闭眼,再睁开,回忆一下参数的含义,想象 shell 参数展开的结果,确认无误,按下回车。
    TynMh
        45
    TynMh  
       Dec 26, 2019
    既然知道是新手练手,为啥还要给 root 权限呢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3200 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 119ms · UTC 14:28 · PVG 22:28 · LAX 07:28 · JFK 10:28
    ♥ Do have faith in what you're doing.