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

2023-09-23 23:10:52 +08:00
 mikewang

惨!数据差点归零。


起因是这样的:

想要写一个 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 ,心惊胆战地回滚到了一天前的快照,暂时没有发现特别大的损失。这才松了一口气。

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

7221 次点击
所在节点    Linux
48 条回复
Nugine0
2023-09-23 23:16:51 +08:00
笑死,上一个还热乎呢,这又来一个 https://v2ex.com/t/976473
BeautifulSoap
2023-09-23 23:19:18 +08:00
问题的次要原因还在 alpine 默认只有 sh ,而 sh 不像 bash ,zsh 那样显示目前在哪个目录。
在 alpine 里操作的时候经常就出现不用 pwd 搞不清自己在哪个目录的情况。
BeautifulSoap
2023-09-23 23:25:05 +08:00
试了一下,干,怎么 alphine 下的 sh 又显示当前目录了。难道记差了
mikewang
2023-09-23 23:45:35 +08:00
@BeautifulSoap #3 alpine 现在默认 shell 是 /bin/ash ,其实是显示当前目录的。不过 docker 默认进去的目录就是 /,提示就是:/ #,比较不显眼
chenliangngng
2023-09-23 23:57:38 +08:00
别用*,我要删也是自己选目录删的
vvhy
2023-09-24 00:13:55 +08:00
我装了个 safe-rm
wipbssl
2023-09-24 00:28:21 +08:00
加入参数 f 时都写绝对路径吧
wipbssl
2023-09-24 00:30:27 +08:00
为什么你们都喜欢加-f 呢?
yeqizhang
2023-09-24 00:47:50 +08:00
我觉得你挂载的目录太大了,然后其实和你描述 docker 这块也没啥关系吧,你解压不是在宿主机解压再删除的么,除了看清目录,建议不要用*,除非是*xxx 这样
xiaoranj
2023-09-24 01:01:00 +08:00
我还以为在说鼎桥成都公安的事呢
mikewang
2023-09-24 01:24:22 +08:00
@yeqizhang #9 不是的,解压、删除都是在 docker 临时容器内进行的,为了写 Dockerfile 前测试下。
一般来说 docker 内就算全删了也没事,最多就是重建个容器,问题在于我映射了宿主路径。
jqtmviyu
2023-09-24 02:49:37 +08:00
吓得我 `alias rm='rm -i'`
ysc3839
2023-09-24 03:53:36 +08:00
@BeautifulSoap bash 默认也不会显示目录吧?都是发行版的 profile 给配置了个会显示目录的 PS1 所以才显示的
passive
2023-09-24 04:21:36 +08:00
有一次

rm -r $foo/*

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

我会在各个根目录上

: > ! ; chmod 000 !

rm 的时候首先删到这个 ! 文件,没有权限会出错,不会继续删下去了。
loading
2023-09-24 07:09:26 +08:00
alias rm=trash
winstars
2023-09-24 08:21:59 +08:00
改成./*会死吗,这么偷懒
melkor
2023-09-24 09:00:59 +08:00
@winstars 在/目录结果也没啥区别……
mobmoob
2023-09-24 09:10:09 +08:00
别用*就好
vcn8yjOogEL
2023-09-24 10:52:26 +08:00
rm 前先 ls
julyclyde
2023-09-24 11:37:28 +08:00
@BeautifulSoap shell 是否显示当前目录不是由 PS1 管理吗?
那个 sh 是不支持 PS1 ?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/976554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX