最起码不像 rm -rf 一样,删除/的话 什么提示都没有
看了这两天的热帖,有两个都是因为 rm -rf 误删的,我自己之前说实话也执行过,想问一下有好的方法吗?
1
em70 2023-09-24 14:22:29 +08:00 22
自己加的 f,还怪人不提示
|
2
Vegetable 2023-09-24 14:38:16 +08:00 1
你是否在找 sudo
|
3
e9pWeUbh9PGCnp95 2023-09-24 14:43:07 +08:00
直接改 rm 的源码, 把-f 这个参数给 nop 掉 <doge>
|
4
realpg 2023-09-24 14:45:52 +08:00 1
对于一个合格的运维,rm 就不可能误删
查 history 习惯不好的都开了 企业内规范定好, 比如你想删除/home/a 下面的所有文件 那么你应该要么切到 a 上级 rm -rf a/* 要么 rm -rf a 然后重新创建 a 进入 a 目录再 rm -rf * 的 写岗位手册里全开除就完事 这就是我公司我定的规则 |
5
akira 2023-09-24 14:47:58 +08:00 1
最好的办法就是不要登服务器。 其它方法都是治标不治本的
|
6
timochan 2023-09-24 14:58:32 +08:00 1
不要盲目使用 ROOT 权限不就行了,需要的时候再 sudo
|
8
realpg 2023-09-24 15:09:23 +08:00
|
9
nuk 2023-09-24 15:14:16 +08:00
在每次更改之前 snapshot ,直接给你回溯的机会
|
10
cyningxu 2023-09-24 15:22:42 +08:00
这话问得,f 不是运行命令的人加的么
|
11
Jirajine 2023-09-24 15:28:29 +08:00 via Android
@realpg #4 非常糟糕的规则,这样做麻烦不说,如果目录 a 有特殊的权限或其他 attribute 都会无法保留。
rm -rf * 要么执行前按 tab 通过 glob expansion 把*替换成实际要删除的文件名,要么 alias rm='rm -I' 或者其他 trash cli 提供二次确认。 不过这些都不能解决之前那个帖子容器环境下默认 shell 补全和配置都很受限的情况。 |
12
ydpro 2023-09-24 15:30:14 +08:00
记得之前 github 上有一个项目就是可以回滚输入的命令,但是忘记叫什么了。
|
14
realpg 2023-09-24 15:49:45 +08:00
|
15
someonedeng 2023-09-24 15:55:47 +08:00 3
rm 改成移动到某个目录,然后定期清理
|
16
joyhub2140 2023-09-24 16:26:39 +08:00 1
都不如打快照来得安心。
|
17
tairan2006 2023-09-24 16:28:33 +08:00 via Android
trash
|
18
matchalatte 2023-09-24 17:36:53 +08:00 1
alias rm=trash-put
trash-cli 类似于桌面环境的回收站,删除只是移到另一个路径,可以用 trash-empty 30 清理 30 天前的垃圾文件。 https://github.com/andreafrancia/trash-cli |
19
Jirajine 2023-09-24 18:08:46 +08:00 via Android
@realpg #14 如果 a 是一个含有空格的目录名,仍然可能会导致误删除。而且切了工作目录忘切回去怎么办?要不规范再加一条切到上级不许用 cd ,必须用 pushd 和 popd 。
其实如果 rm 是 GNU coreutils 提供的,直接要求使用或 alias 一个 -I 就可以了,该选项会在删除多个文件是提醒用户确认一次。 |
20
realpg 2023-09-24 18:23:20 +08:00
@Jirajine #19
公司环境不存在有空格的目录名 而且手册建议 tab 确认会自动加上引号 你总是试图用那些特例来质疑已经稳定运行很久的规则 而我不可能把公司运维岗位规范手册那么厚的一本都贴 V2 论坛上 感觉,您真的,就好像互联网上的那种运动器材成精生物…… |
21
realpg 2023-09-24 18:26:45 +08:00
@Jirajine #19
管理的艺术就是行政命令和技术结合,该行政命令时候就不要技术解决,该技术解决的不依赖行政命令 而且,我已经从数据中心公司离职了 至少我治下的公司从来没出过任何这类事故,哪怕没有重大影响 因为运维的 shell 的操作都是通过堡垒系统,所有指令甚至所有键盘按键都是记录的,隐形风险操作随便数据库写个查询就能列出来,一次不长脑子未造成恶劣影响可以学习,可以巨额罚款填坑大家聚餐,多次不长脑子的运维都没任何补偿的滚蛋了 |
22
iseki 2023-09-24 18:54:49 +08:00 via Android
@realpg 很危险啊,/* 这种东西尽量不要出现,rm -rf / 都能保护住,谁手滑敲成 rm -rf sth /* 一点机会都不会有
|
23
iseki 2023-09-24 18:57:50 +08:00 via Android
没什么太好办法,不用 -f 也就那么回事,时间长了人一旦皮条了一点辙都没有。坚持双人检查可能更有意义
|
25
iseki 2023-09-24 19:05:05 +08:00
@realpg 我觉得这个还好,除非你当前在 / 下面,否则 rm -rf / 只会提示 preserved ,*也就删删当前目录,我提这个主要规避删根的···
|
26
Jirajine 2023-09-24 19:05:35 +08:00 via Android
@realpg
因为你这种规范要求就和这个帖子 https://www.v2ex.com/t/816040 不准用 http put 一样没什么实际意义纯粹给人制造麻烦,GNU rm 已经内置了-i 和-I 的保护措施不用。顺便-f 根本是不必要的,很多人习惯 rm -rf 的原因是有些系统会默认 alias rm='rm -i',会导致批量删除时不加-f 会让每个文件都提示从而无法正常使用。 |
27
MrKrabs 2023-09-24 19:20:56 +08:00 2
执行 rm 前要手机验证码
|
28
dimpleok 2023-09-24 19:23:22 +08:00
可以试试这里提到的方法,https://zhuanlan.zhihu.com/p/658109345 (利用技术手段避免误删除根目录)
|
29
ZRS 2023-09-24 19:26:11 +08:00 via iPhone
做运维工具,不要手操,手操禁止高危命令
|
30
bt7vip 2023-09-24 19:35:18 +08:00 via Android
生产环境把 rm 设置成高危命令,删文件统一将文件 MV 到/tmp 目录,删除非/tmp 下文件直接报错。
|
31
realpg 2023-09-24 20:03:12 +08:00 1
@Jirajine #26
良好的习惯比什么都重要 要不干啥那么多误删库的 下属员工习惯怎么培养的问题,我觉得我比你这种纯敲键盘没带过大运维的有经验 @iseki #25 说实话 我们实际生产中 大部分都是用且上级指名删整目录然后重建目录的办法 很少有之前谁提到的什么目录带特殊权限什么的骚操作 因为罚的太狠,随便查查操作历史就知道,干活的都很小心,各种反复确认 2017 年时候疫情前业绩好,在沈阳这种三线城市,基本运维(有夜班,除非极特殊情况比如大割接,不加班)年底能拿 6 月薪的奖金,入职后三个月内一次险性可以不处罚,其他时候一次半月奖金填大坑聚餐,两次险性行为全年绩效奖就全没有,月薪普遍 8K 的话,你瞎鸡儿搞哪怕没严重后果,搞两次半年工资就打水漂了 而且我之前提过,大部分场景,都是假终端,shell 操作的都是在特殊堡垒平台软件上,有二次包装,按键都是全记录分析的,这种场景是有能力拦截不正确高危操作的。 培养习惯更重要,因为总有时候需要本地操作很多敏感数据,当时我们的业务,有些数据你操作错一次是要蹲监狱的。 |
32
someday3 2023-09-24 20:33:07 +08:00
就算有 windows 类似的回收站,你信不信,还是会有大量的人误删除,把回收站清空后发现又误删除。
无他,人的问题单纯的技术是解决不了的。 腾讯的云备份那么多流程,结果操作员精准避开所有规定的流程,导致数据丢失。在 nb 的流程、规范和技术都阻挡不住犯蠢的人。 操作删除和其他危险命令的时候自己警觉一点,看一下有没有敲错,目录对不对,有没有超权限,比什么技术都 nb 。 |
33
ochatokori 2023-09-24 20:59:58 +08:00 via Android
我只会在外层用 tab 把路径补全出来,不会手写更不会进去用*
|
34
Jirajine 2023-09-24 21:37:19 +08:00 via Android 1
@realpg #31 你不如干脆说只要记录审计加重罚让人小心操作就解决了。
你提供的推荐方式是错误的,只要目录的权限和当前 umask 不同、或所有用户/组与当前登录用户不同,从上级删除并重建就一定会把权限搞乱套。更不用说 xattr 等扩展属性、或者删掉了一个 btrfs subvolume 然后重建了一个普通的目录这种会为以后埋坑的现象。除非你的服务器是单用户的不然这种情况绝对不是“很少”而是很常见。 不要把你在特定场景的施行那一套“运维体操”当作一般建议。 |
35
iseki 2023-09-24 21:42:41 +08:00 via Android
@realpg 嗯,我一般也是指明删整目录,打星号太危险了,每次涉及到通配符我都得停下来再三确认…
我们这倒是不罚款,但是总搞出事故也不是什么好事啊…我到现在还没有一次把人家线上目录删坏过。 不过你这样罚款它违反不违反劳动法 |
36
realpg 2023-09-24 22:11:49 +08:00 2
@iseki #35
罚款不是目的,目的是养成习惯。习惯就是让你习惯公司规定写死的规则,你可以不理解,你可以嫌麻烦,你可以嫌这个很傻逼;这些弱智的规定都是有原因的,都是为了让傻瓜也能少犯错误。盲目自信才是出现各种奇葩问题的本质原因,在这里就是给你打掉自己自作聪明的机会,不遵守规则,就让你肉疼到死。 搞技术的,天生排斥管理,也不想深入学习管理,不站在管理的思维上考虑问题,这也是 35 岁危机的一个重大原因,上升空间自己给自己堵死了。 删除这个,基本日常每周培训的重点强调就是去上级删整个目录再重建。要么还有一个在 web 控制台的文件传输系统删除的办法。 开除以前的罚款大部分都是直接填坑进公司基金,也不上交公司,聚餐团建用,差额公司掏。只有没有绩效奖金这种是公司赚了。 小地方,这边招的素质参差不齐,虽然日常操作都是在高层假控制台上,总有特殊情况需要你本地操作的时候,以及协同客户操作客户的机器。日常习惯就是一点点积累的。 我们这边日常各种强调的就是多用 tab 补全,多按不犯错。vi 调配置里多按 esc 切模式等一系列基本建议,就是防止某一次出坑。 有些区域,业务比较敏感,真的是误操作会蹲监狱的。 至于劳动法,严格遵守。因为大老板是体制内高层领导出身,当地有头有脸,一切有法可依的地方合规做的特别好,本市在商界是不著名小企业,但是在当地政府那边是有一号的。 运维普通员工合同工资都是 5K 多,不出重大生产安全事故到手都 8K 多,严格遵守劳动法,在职过一年社保公积金技术都按上一年实发调整到 8K 左右。扣的只有合同没有一点承诺的 12 薪+过节费以外的个人绩效奖金。这部分在入职时候也是不说的,除非你是内推别人告诉你这公司有这待遇,否则都是你呆满 1 年你才知道有这比意外之财,4 月 1 日以后入职当年没有。 而且,这个是要连坐的,三次险性事故征候,或一次造成损失实际事故,根据损失评估,有明确标准,是团队,还是所在班次(倒班班次)、运维分公司,乃至全公司这个钱都没有。 |
37
066aQg6jasP39ov4 2023-09-24 22:15:08 +08:00
那不是自己业务不熟练能力不行还怪到工具上了?这种水平的还敢有管理员权限?啥公司啊?
|
38
ulosggs 2023-09-24 22:26:25 +08:00
这个 realpg 一直强调自己的管理多么牛,怎么这么牛的管理者招过来的小弟全是菜鸡呢
|
39
inhzus 2023-09-24 22:43:30 +08:00 via iPad
alias rm mv
|
40
dabai0806 2023-09-24 23:07:32 +08:00 1
https://github.com/andreafrancia/trash-cli
brew info trash-cli pip install trash-cli alias rm='trash-put' alias rl='trash-list' alias rr='trash-restore' |
41
pengtdyd 2023-09-25 00:02:10 +08:00
能问出这个问题,本身就是一个问题。
|
42
lbm008 2023-09-25 00:15:10 +08:00
[Trash management]( https://wiki.archlinux.org/title/Trash_management)
|
43
lindas 2023-09-25 00:37:06 +08:00
我习惯先 ls 一下想删除的东西,然后再把 ls 改成 rm
|
44
james122333 2023-09-25 01:41:58 +08:00 via Android
当然有 不过不讲
|
45
james122333 2023-09-25 01:47:03 +08:00 via Android
|
46
rio 2023-09-25 02:11:20 +08:00 1
主要还是操作系统发行版不给力,那么多靠谱的方案可以保护系统核心文件不受影响( macOS 下 `rm -rf` 就不会影响核心系统,Linux 原生的方案也有 btrfs snapshot 可以利用),但是没有人做 🤷
|
47
Ocean810975 2023-09-25 03:55:39 +08:00 via Android
在 linux 下用 pwsh 确实不会出现这样的问题
|
48
msg7086 2023-09-25 06:55:58 +08:00 1
要提示没有权限,可以用非特权用户。
要给提醒,可以不加 f ,可以用 zsh 。 要最佳实践,可以制定规则,可以写 checklist ,可以在执行危险操作之前双手离开键盘先思考 5 秒钟人生再按下回车。 危险操作,每个行业都有。做手术的,开飞机开火车的,做化工的,造大楼的,甚至是马路上开车的。运维又不是什么特殊岗位。看看别的行业怎么避免手滑的,怎么规范操作的,照搬一下就行了。 讲讲我自己的运维习惯。我所有的操作都是 root 账号下运行,因为我所有的操作都涉及到 root 权限,开非特权账号没有意义。首先是我用 zsh 并且把 IP ,主机名,当前目录放在提示符里,高亮分颜色显示,一眼就知道自己操作的是哪台机器,在哪个目录里操作。其次对于重要的生产机,我会在提示符里加上高亮闪烁的 PRODUCTION 字样,一眼就知道自己在操作危险环境。最后对于有副作用的操作,比如 rm ,比如升级软件包,比如重启机器等,按下回车之前脑子里先想一想自己在干什么,确认无误以后再按。 人犯错是无解的,再多的措施无法避免。但是这些措施可以把一月一遇、一年一遇的错误操作,变成十年一遇,百年一遇。航空业那么多飞机天天飞,事故也是无法避免的,但是现在的措施可以做到概率足够小,远比坐车甚至走路安全,那就行了。 |
49
rekord 2023-09-25 07:44:02 +08:00 via Android
要不做个别名,将 rm 映射到 cp ,然后是不是就变成了回收站的效果。
|
50
huajingyu 2023-09-25 07:44:31 +08:00 via Android
我使用 Windows ,经常使用 CMD 。( CMD 比文件资源管理器快。)
我很少使用 \ 和 . 目录,我删除文件和目录,会输入绝对路径,或是至少有一个文件名的相对路径。从来没有只删除 \ 或 . 的情况。 比如说我要删除 Folder 这整个文件夹,如果当前目录在这个文件夹中,我会先 CD .. 到上层文件夹,然后再输入 RMDIR /S Folder 去删除。 不过我很早以前,当前目录在用户文件夹的时候,不小心 DEL /S *.TXT 把用户文件夹下所有文本文件删了一部分,后来及时 ^C 给中断了。然后重装了一些软件。( AppData 是第一个被遍历的文件夹,所以一些配置文件被删除了。) |
51
gpt5 2023-09-25 08:14:38 +08:00
mv
|
52
THESDZ 2023-09-25 09:03:50 +08:00
safe-rm
|
53
cslive 2023-09-25 09:05:48 +08:00
上审计,高危命令需要授权确认
|
54
dadebucuo 2023-09-25 09:34:17 +08:00
用 inode 精确删单个目录
cd /xxx ll -i find /xxx -maxdepth 1 -inum $inodeNo | xargs rm -rf |
55
lisxour 2023-09-25 09:39:07 +08:00
把 rm 换掉不就好了,系统层面基本无解,你从命令行删除文件,即使系统有回收站,大概率也只是提供给 GUI 用的,windows 也是一样,你在 cmd 删文件是不会跑到回收站的,回收站仅限于资源管理器删除。
1. 换成更安全的兼容替代品,比如 dry run 检测到正在删除根目录或者系统目录的东西,先提示一个大大的 warning 2. 把 rm 换成有备份的替代,基本就是 rm 换成了 mv |
56
standchan 2023-09-25 09:39:44 +08:00
别名、权限,linux 已经做的很多的,抵不上你糟糕的习惯!!!!
|
57
2NUT 2023-09-25 09:55:51 +08:00
精细化权限控制 不要使用 root 权限
|
58
blackkkk 2023-09-25 09:57:26 +08:00
1 、不用-f
2 、删前备份 3 、禁/开头,要删哪些进入对应目录,总不至于你们把东西放在/目录下吧,规范上都不合理了。 |
59
xFrye 2023-09-25 10:50:03 +08:00
有啊,删目录之前看看自己确认下要删什么东西不行么? sudo -rf 还不知道自己要删的哪个目录,只能找神仙来救救你了
|
60
qiyilai 2023-09-25 10:51:01 +08:00
终于知道奇怪的功能特性和需求的来源了
|
61
llrasd 2023-09-25 10:58:05 +08:00
mv 到 /tmp 目录,过几天就自己自动删除了
|
62
pota 2023-09-25 11:02:24 +08:00
后悔药就是不要 rm mv 就好
|
63
suofeiya 2023-09-25 11:04:39 +08:00
|
64
cy18 2023-09-25 11:11:50 +08:00
|
65
tomychen 2023-09-25 11:28:00 +08:00
mv 到 for_delete_path/
然后让主管来 rm (路过.jpg |
66
zsh2517 2023-09-25 13:25:56 +08:00
说一下我自己的情况
1. 不 rm * 或者 ./XX (包括 ./*),为了避免键盘出问题。 删除一个东西的时候,进到他的上一层,然后 rm 后面直接跟跟具体的文件名/目录名,而不是通配符(例外情况,*.jpg ,log-* 这种名称+通配符) 2. rm 输入完之后,tab 确认一下(文件不存在/前缀匹配/完全匹配,shell 表现是不一样的) 3. rm xxx; rm xxx -r; rm xxx -rf; ,默认情况 rm ,知道是目录的情况下才加 -r ,删除有问题的时候才加 -rf 。 避免删除以为是个文件,结果是个目录的情况。以及后面输入参数的时候有机会再看一遍删除的东西对不对 4. 重要的东西,mv xx xx.old / mv xx ~/.trash 先扔一边,确认没问题再删除 |
68
happyxhw101 2023-09-25 13:30:47 +08:00
用 mv 代替 rm
|
70
julyclyde 2023-09-25 19:56:58 +08:00
文责自负就挺安全的
|
72
dode 2023-09-26 09:26:54 +08:00
搞上存储快照、数据库备份,CI/CD 部署,容器运行无状态服务
|
73
ruifeng 2023-09-28 15:19:05 +08:00
把 rm 改成 mv 到/tmp
|