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

rm -rf * 前一定一定要看清当前目录

  •  
  •   mikewang ·
    MikeWang000000 · Sep 23, 2023 · 9706 views
    This topic created in 1146 days ago, the information mentioned may be changed or developed.

    惨!数据差点归零。


    起因是这样的:

    想要写一个 Dockerfile ,先建个容器敲一下:

    docker run --rm -v /mnt/sda1:/mnt/sda1 -it alpine
    

    为了方便,把数据盘也挂上去了。

    然后做了一些复制解压:

    cp /mnt/sda1/somefile.tar.gz .
    tar xzvf somefile.tar.gz
    cd somefile-v1.0
    ls
    

    看了看内容觉得不是自己想要的,回上一级目录准备删掉:

    cd ..
    rm -rf *
    

    我想当然地认为自己在 /root 下面,这里原本应该什么都没有。然而一回车:

    rm: can't remove 'dev/console': Resource busy
    rm: can't remove 'dev/urandom': Resource busy
    rm: can't remove 'dev/random': Resource busy
    rm: can't remove 'dev/tty': Resource busy
    rm: can't remove 'dev/full': Resource busy
    ...^C^C^C^C^C^C^C^C^C^C^C
    

    。。。是在 / 啊!!!然后 /mnt/sda1 的东西自然也是被删了一堆,吓坏我了。


    好在是 ZFS ,心惊胆战地回滚到了一天前的快照,暂时没有发现特别大的损失。这才松了一口气。

    吓死了,下次删文件前一定要注意当前目录啊。。。

    Supplement 1  ·  Sep 24, 2023
    补充说明一下,上面的操作都是在 Docker 容器内进行的。我也是因为在容器内觉得没多大事,所以操作过于随意了。
    一般来说 Docker 容器内就算全删了也没事,最多就是重建个容器。这里问题在于我映射了宿主路径,再加上误操作,导致宿主数据丢失。
    48 replies  •  2023-10-01 03:42:08 +08:00
    Nugine0
    Nugine0
    Sep 23, 2023❤️5
    1
    笑死,上一个还热乎呢,这又来一个 https://v2ex.com/t/976473
    BeautifulSoap
    BeautifulSoap
    Sep 23, 2023 via Android
    2
    问题的次要原因还在 alpine 默认只有 sh ,而 sh 不像 bash ,zsh 那样显示目前在哪个目录。
    在 alpine 里操作的时候经常就出现不用 pwd 搞不清自己在哪个目录的情况。
    BeautifulSoap
    BeautifulSoap
    Sep 23, 2023 via Android
    3
    试了一下,干,怎么 alphine 下的 sh 又显示当前目录了。难道记差了
    mikewang
    mikewang
    OP
    Sep 23, 2023
    4
    @BeautifulSoap #3 alpine 现在默认 shell 是 /bin/ash ,其实是显示当前目录的。不过 docker 默认进去的目录就是 /,提示就是:/ #,比较不显眼
    chenliangngng
    chenliangngng
    Sep 23, 2023
    5
    别用*,我要删也是自己选目录删的
    vvhy
    vvhy
    Sep 24, 2023
    6
    我装了个 safe-rm
    wipbssl
    wipbssl
    Sep 24, 2023
    7
    加入参数 f 时都写绝对路径吧
    wipbssl
    wipbssl
    Sep 24, 2023
    8
    为什么你们都喜欢加-f 呢?
    yungo8
    yungo8
    Sep 24, 2023 via Android
    9
    我觉得你挂载的目录太大了,然后其实和你描述 docker 这块也没啥关系吧,你解压不是在宿主机解压再删除的么,除了看清目录,建议不要用*,除非是*xxx 这样
    xiaoranj
    xiaoranj
    Sep 24, 2023
    10
    我还以为在说鼎桥成都公安的事呢
    mikewang
    mikewang
    OP
    Sep 24, 2023
    11
    @yeqizhang #9 不是的,解压、删除都是在 docker 临时容器内进行的,为了写 Dockerfile 前测试下。
    一般来说 docker 内就算全删了也没事,最多就是重建个容器,问题在于我映射了宿主路径。
    jqtmviyu
    jqtmviyu
    Sep 24, 2023
    12
    吓得我 `alias rm='rm -i'`
    ysc3839
    ysc3839
    Sep 24, 2023 via Android
    13
    @BeautifulSoap bash 默认也不会显示目录吧?都是发行版的 profile 给配置了个会显示目录的 PS1 所以才显示的
    passive
    passive
    Sep 24, 2023 via Android❤️10
    14
    有一次

    rm -r $foo/*

    结果 $foo 拼错了或者没定义。
    幸好平时的习惯把数据拯救了:

    我会在各个根目录上

    : > ! ; chmod 000 !

    rm 的时候首先删到这个 ! 文件,没有权限会出错,不会继续删下去了。
    loading
    loading
    Sep 24, 2023 via iPhone
    15
    alias rm=trash
    winstars
    winstars
    Sep 24, 2023 via Android
    16
    改成./*会死吗,这么偷懒
    melkor
    melkor
    Sep 24, 2023 via iPhone❤️1
    17
    @winstars 在/目录结果也没啥区别……
    mobmoob
    mobmoob
    Sep 24, 2023
    18
    别用*就好
    vcn8yjOogEL
    vcn8yjOogEL
    Sep 24, 2023
    19
    rm 前先 ls
    julyclyde
    julyclyde
    Sep 24, 2023
    20
    @BeautifulSoap shell 是否显示当前目录不是由 PS1 管理吗?
    那个 sh 是不支持 PS1 ?
    mikewang
    mikewang
    OP
    Sep 24, 2023
    21
    @jqtmviyu @loading #12 #15 alias 不错,不过像我这样在 docker 内调试的还是看一下,全新的环境里没有 alias 。
    这次文件系统定时快照救了我,这个大概是最后一道防线。

    @winstars #16 ./* 在根目录也会一样删光。这次事故给我的经验是,还是检查下路径为好。

    ----

    总之,十年 Linux 老用户栽在这上面非常滴惭愧,各种命令因为熟练已经开始闭眼打了,系统也很忠诚地执行了我 “清空当前目录” 的指令。命令没输错,执行很精准,只是当前目录( docker 进入的默认目录)是个根。[裂开]
    rekulas
    rekulas
    Sep 24, 2023❤️4
    22
    @jqtmviyu 吓得我马上又给你改成 alias cd="rm -rf"
    alias alias="reboot"
    realpg
    realpg
    Sep 24, 2023
    23
    什么野鸡教出来的运维……
    rm -rf 相对的基本都被开除了
    realpg
    realpg
    Sep 24, 2023
    24
    @winstars #16
    这也没区别
    正确的做法是到上级目录删除整个目录本身 指定名称 需要重建再重建
    BaiLinfeng
    BaiLinfeng
    Sep 24, 2023
    25
    上几周我就是 rm -rf ./*直接把系统干废了,就是没看清目录,直接在根目录执行了,还好是我自己本地的环境。想修复可惜连 ssh 都无法进入了,只要重新安装系统了
    diagnostics
    diagnostics
    Sep 24, 2023
    26
    看起来 ubuntu 一定让你用 ubuntu 这个用户登陆是有道理的。
    rev1si0n
    rev1si0n
    Sep 24, 2023
    27
    我就吃过亏,然后用了 safe-rm ,用了还不放心,定时任务定时从 bash history 中删除所有 rm 命令😂
    hsfzxjy
    hsfzxjy
    Sep 24, 2023 via Android❤️1
    28
    看到首页有两个这个帖子我就绷不住了
    ob
    ob
    Sep 24, 2023
    29
    @passive 试验了一下,好像还是可以删除
    [root@VM-8-10-centos a]# : > ! ; chmod 000 ! ;
    [root@VM-8-10-centos a]# ll
    total 0
    ---------- 1 0 0 0 Sep 24 06:48 !
    [root@VM-8-10-centos a]# rm -rf !
    [root@VM-8-10-centos a]# ll
    total 0
    godymoon
    godymoon
    Sep 24, 2023
    30
    @Nugine0 一进来就看到连续两个 rm -rf 的,笑死了
    MrL21
    MrL21
    Sep 24, 2023
    31
    删除文件夹最好别用相对路径呀。。
    passive
    passive
    Sep 24, 2023 via Android
    32
    @ob 别带 -f

    正常操作一般用不到 -f
    mauis
    mauis
    Sep 24, 2023
    33
    非要用 rm 用绝对路径好了。别相对
    dimpleok
    dimpleok
    Sep 24, 2023
    34
    可以参考,https://zhuanlan.zhihu.com/p/658109345 (利用技术手段避免误删除根目录).
    jellyspot
    jellyspot
    Sep 24, 2023
    35
    我用 rm 命令要求都是必须跟完整路径,不要怕麻烦,麻烦点安全
    James369
    James369
    Sep 24, 2023
    36
    我一般删除前先 mv /tmp/, 完了过几天再删除
    bobryjosin
    bobryjosin
    Sep 24, 2023
    37
    我的习惯一般要删也是完整路径,删完指定目录再 mkdir 一个,麻烦是麻烦了点但是确实安全,尤其是* -f ,就算要用一定要再看一眼,要明白自己在干什么。
    lovelylain
    lovelylain
    Sep 24, 2023 via Android
    38
    之前给移动硬盘格式化 btrfs ,把娃的照片从手机剪切到上面,后来强迫症喜欢删除空目录,一个不小心把移动硬盘根目录删了,花了一天一夜尝试恢复,只恢复出一些不重要的文件,后来养成了定期快照的习惯。
    love4taylor
    love4taylor
    Sep 24, 2023 via iPhone
    39
    所以要养成有事没事 ls 的习惯
    Inzufu
    Inzufu
    Sep 24, 2023 via Android❤️1
    40
    看到标题就已经想笑了)
    guanzhangzhang
    guanzhangzhang
    Sep 24, 2023
    41
    非 bash 那种小 sh 的,WORKDIR 缺省都是 /
    iseki
    iseki
    Sep 24, 2023
    42
    我现在 rm 这种命令所有出现 * 的都得使劲确认才敢按🤣比 / 危险多了
    iwwftlan
    iwwftlan
    Sep 25, 2023
    43
    最近经常看到 rm 的瓜, 前几天刚看了一个成都某公司员工把公安系统删库了。。。
    pocarisweat
    pocarisweat
    Sep 25, 2023❤️1
    44
    做破坏性操作参数带*的时候,我会按 tab 把*给展开再确认一遍
    mikewang
    mikewang
    OP
    Sep 25, 2023
    45
    #44 @pocarisweat 这个是 zsh 的特性吧,比 bash 强
    89ao
    89ao
    Sep 25, 2023
    46
    rm -rf 不加绝对路径的真的是看多了。
    再不济 mv 到/tmp 都不麻烦,要养成习惯啊别等人说
    GoldenSheep
    GoldenSheep
    Sep 25, 2023
    47
    哈哈哈 上星期我刚 cd /etc; rm -rf ./* 就少打了一个点
    hGaHLRyC
    hGaHLRyC
    Oct 1, 2023
    48
    养成 mv 到 tmp 才是好习惯。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2054 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 132ms · UTC 14:53 · PVG 22:53 · LAX 06:53 · JFK 09:53
    ♥ Do have faith in what you're doing.