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