惨!数据差点归零。
起因是这样的:
想要写一个 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 ,心惊胆战地回滚到了一天前的快照,暂时没有发现特别大的损失。这才松了一口气。
吓死了,下次删文件前一定要注意当前目录啊。。。
![]() |
1
Nugine0 74 天前 ![]() 笑死,上一个还热乎呢,这又来一个 https://v2ex.com/t/976473
|
![]() |
2
BeautifulSoap 74 天前 via Android
问题的次要原因还在 alpine 默认只有 sh ,而 sh 不像 bash ,zsh 那样显示目前在哪个目录。
在 alpine 里操作的时候经常就出现不用 pwd 搞不清自己在哪个目录的情况。 |
![]() |
3
BeautifulSoap 74 天前 via Android
试了一下,干,怎么 alphine 下的 sh 又显示当前目录了。难道记差了
|
![]() |
4
mikewang OP @BeautifulSoap #3 alpine 现在默认 shell 是 /bin/ash ,其实是显示当前目录的。不过 docker 默认进去的目录就是 /,提示就是:/ #,比较不显眼
|
5
chenliangngng 74 天前
别用*,我要删也是自己选目录删的
|
6
vvhy 74 天前
我装了个 safe-rm
|
7
wipbssl 74 天前
加入参数 f 时都写绝对路径吧
|
8
wipbssl 74 天前
为什么你们都喜欢加-f 呢?
|
9
yeqizhang 74 天前 via Android
我觉得你挂载的目录太大了,然后其实和你描述 docker 这块也没啥关系吧,你解压不是在宿主机解压再删除的么,除了看清目录,建议不要用*,除非是*xxx 这样
|
10
xiaoranj 74 天前
我还以为在说鼎桥成都公安的事呢
|
![]() |
11
mikewang OP @yeqizhang #9 不是的,解压、删除都是在 docker 临时容器内进行的,为了写 Dockerfile 前测试下。
一般来说 docker 内就算全删了也没事,最多就是重建个容器,问题在于我映射了宿主路径。 |
12
jqtmviyu 74 天前
吓得我 `alias rm='rm -i'`
|
![]() |
13
ysc3839 74 天前 via Android
@BeautifulSoap bash 默认也不会显示目录吧?都是发行版的 profile 给配置了个会显示目录的 PS1 所以才显示的
|
14
passive 74 天前 via Android ![]() 有一次
rm -r $foo/* 结果 $foo 拼错了或者没定义。 幸好平时的习惯把数据拯救了: 我会在各个根目录上 : > ! ; chmod 000 ! rm 的时候首先删到这个 ! 文件,没有权限会出错,不会继续删下去了。 |
![]() |
15
loading 74 天前 via iPhone
alias rm=trash
|
16
winstars 74 天前 via Android
改成./*会死吗,这么偷懒
|
18
mobmoob 74 天前
别用*就好
|
19
vcn8yjOogEL 74 天前
rm 前先 ls
|
20
julyclyde 74 天前
@BeautifulSoap shell 是否显示当前目录不是由 PS1 管理吗?
那个 sh 是不支持 PS1 ? |
![]() |
21
mikewang OP |
![]() |
23
realpg 73 天前
什么野鸡教出来的运维……
rm -rf 相对的基本都被开除了 |
![]() |
25
BaiLinfeng 73 天前
上几周我就是 rm -rf ./*直接把系统干废了,就是没看清目录,直接在根目录执行了,还好是我自己本地的环境。想修复可惜连 ssh 都无法进入了,只要重新安装系统了
|
26
diagnostics 73 天前
看起来 ubuntu 一定让你用 ubuntu 这个用户登陆是有道理的。
|
27
rev1si0n 73 天前
我就吃过亏,然后用了 safe-rm ,用了还不放心,定时任务定时从 bash history 中删除所有 rm 命令😂
|
![]() |
28
hsfzxjy 73 天前 via Android ![]() 看到首页有两个这个帖子我就绷不住了
|
![]() |
29
ob 73 天前
@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 |
31
fdd92 73 天前
删除文件夹最好别用相对路径呀。。
|
33
mauis 73 天前
非要用 rm 用绝对路径好了。别相对
|
![]() |
34
dimpleok 73 天前
可以参考,https://zhuanlan.zhihu.com/p/658109345 (利用技术手段避免误删除根目录).
|
35
jellyspot 73 天前
我用 rm 命令要求都是必须跟完整路径,不要怕麻烦,麻烦点安全
|
36
James369 73 天前
我一般删除前先 mv /tmp/, 完了过几天再删除
|
37
bobryjosin 73 天前
我的习惯一般要删也是完整路径,删完指定目录再 mkdir 一个,麻烦是麻烦了点但是确实安全,尤其是* -f ,就算要用一定要再看一眼,要明白自己在干什么。
|
38
lovelylain 73 天前 via Android
之前给移动硬盘格式化 btrfs ,把娃的照片从手机剪切到上面,后来强迫症喜欢删除空目录,一个不小心把移动硬盘根目录删了,花了一天一夜尝试恢复,只恢复出一些不重要的文件,后来养成了定期快照的习惯。
|
![]() |
39
Love4Taylor 73 天前 via iPhone
所以要养成有事没事 ls 的习惯
|
![]() |
40
inzufu 73 天前 via Android ![]() 看到标题就已经想笑了)
|
![]() |
41
guanzhangzhang 73 天前
非 bash 那种小 sh 的,WORKDIR 缺省都是 /
|
42
iseki 73 天前
我现在 rm 这种命令所有出现 * 的都得使劲确认才敢按🤣比 / 危险多了
|
43
iwwftlan 73 天前
最近经常看到 rm 的瓜, 前几天刚看了一个成都某公司员工把公安系统删库了。。。
|
44
pocarisweat 73 天前 ![]() 做破坏性操作参数带*的时候,我会按 tab 把*给展开再确认一遍
|
![]() |
45
mikewang OP #44 @pocarisweat 这个是 zsh 的特性吧,比 bash 强
|
![]() |
46
89ao 72 天前
rm -rf 不加绝对路径的真的是看多了。
再不济 mv 到/tmp 都不麻烦,要养成习惯啊别等人说 |
![]() |
47
GoldenSheep 72 天前
哈哈哈 上星期我刚 cd /etc; rm -rf ./* 就少打了一个点
|
![]() |
48
hGaHLRyC 67 天前
养成 mv 到 tmp 才是好习惯。
|