V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
smdbh
V2EX  ›  Linux

现在 Linux 上有啥危险命令提示的工具吗

  •  
  •   smdbh · 141 天前 · 6087 次点击
    这是一个创建于 141 天前的主题,其中的信息可能已经有所发展或是发生改变。
    10 多年终于遇到来了,手滑敲太快,来了个全盘操作。。。。
    想问下,现在有没有 shell 的插件,或工具,能拦截命令,在对全盘有写操作的时候,进行提示。最好基于 zsh ,bash
    62 条回复    2024-06-22 16:29:03 +08:00
    honus
        1
    honus  
       141 天前
    养成日常不用 root 用户的习惯吧
    lstz
        2
    lstz  
       140 天前 via Android
    上 zsh
    abcde123456789
        3
    abcde123456789  
       140 天前
    终于理解为啥不推荐用 root 了
    SayHelloHi
        4
    SayHelloHi  
       140 天前
    借楼问下 有没有检查安全更新的脚本 可以一键安装安全更新包 😁 求一个
    smdbh
        5
    smdbh  
    OP
       140 天前
    @abcde123456789 ,不是 root , 在制作 rootfs ,sudo 了, 两个目录没分清
    xmai
        6
    xmai  
       140 天前   ❤️ 2
    搞个函数包装一下原始命令,比如包装一下 rm 命令,

    ```
    rm() {
    echo “Are you sure you want to delete? (y/n)”
    read answer
    if [ “$answer” == “y” ]; then
    command rm “$@”
    else
    echo “Delete aborted!”
    fi
    }
    ```

    执行 rm 命令之前,添加了一个询问用户是否确认删除的逻辑。只有在用户确认删除时,才会执行原始的 rm 命令。
    smdbh
        7
    smdbh  
    OP
       140 天前
    @lstz ,就是 zsh ,是有啥插件吗,默认和 bash 没区别,都直接执行
    xmai
        8
    xmai  
       140 天前   ❤️ 3
    你硬要上插件,也是有解决方案,这个插件可以拦截任何有风险的 shell 命令(默认或由您定义)并提示进行双重验证
    https://github.com/kaplanelad/shellfirm
    Jinnrry
        9
    Jinnrry  
       140 天前 via Android
    我们公司 ssh 服务器要经过跳板机,跳板机会记录所有操作命令,同时会做命令审计,如果你敲个 rm /或者导出敏感文件日志啥的,立马就中断要求提审批单
    Jiceburger
        10
    Jiceburger  
       140 天前 via Android   ❤️ 9
    @xmai 额,也许 alias rm="rm -i" 更简单一些?
    xubeiyou
        11
    xubeiyou  
       140 天前
    让运维隔段时间做备份。。。我当前小公司就这么做的
    huangmingyou
        12
    huangmingyou  
       140 天前
    我现在习惯把危险命令写到临时文件 file, 检查确认后用 bash file 执行。
    villivateur
        13
    villivateur  
       140 天前   ❤️ 1
    $ rm --help
    Usage: rm [OPTION]... [FILE]...
    Remove (unlink) the FILE(s).

    -f, --force ignore nonexistent files and arguments, never prompt
    -i prompt before every removal
    -I prompt once before removing more than three files, or
    when removing recursively; less intrusive than -i,
    while still giving protection against most mistakes
    --interactive[=WHEN] prompt according to WHEN: never, once (-I), or
    always (-i); without WHEN, prompt always
    --one-file-system when removing a hierarchy recursively, skip any
    directory that is on a file system different from
    that of the corresponding command line argument
    --no-preserve-root do not treat '/' specially
    --preserve-root[=all] do not remove '/' (default);
    with 'all', reject any command line argument
    on a separate device from its parent
    -r, -R, --recursive remove directories and their contents recursively
    -d, --dir remove empty directories
    -v, --verbose explain what is being done
    --help display this help and exit
    --version output version information and exit

    我觉得 -I 的那一坨够用了
    smdbh
        14
    smdbh  
    OP
       140 天前
    @xmai @villivateur , 是个方法,但我这次翻车的是 chmod ,把权限搞崩了,导致 sudo 等命令没法用了
    llh880808
        15
    llh880808  
       140 天前   ❤️ 8
    我一直在推荐同事修改键入 rm 命令的顺序,比如 rm -rf /some/nouse/path ,常规顺序是从左到右,我建议先输入/some/nouse/path ,然后 ctrl-a 回到开头再输入 rm -rf
    从左到右的顺序,我一直担心路径还没输入完,就不小心按到回车的事情发生
    chenjiasange
        16
    chenjiasange  
       140 天前
    我犯贱的时候,不小心直接把整个 rm / 整个删除了。。。。
    A4l1CteRQHlG1Bs8
        17
    A4l1CteRQHlG1Bs8  
       140 天前
    举例子类似 rm 给 alias 到 trash 命令.

    cp alias 到 cp -i 这种..

    另外别用 root..后患无穷
    w4ngzhen
        18
    w4ngzhen  
       140 天前   ❤️ 1
    更加推荐 rm 别名到 cp 等,把删除的内容放到临时目录下。至于 rm 加上确认 prompt ,可能短期有用,但是长期很容易养成一路 yes 的习惯,实际上没啥大用处。
    wenxueywx
        19
    wenxueywx  
       140 天前   ❤️ 6
    @llh880808 使用习惯不好,rm -rf 不要连用,要用 rm /xxxxx -rf
    wushenlun
        20
    wushenlun  
       140 天前 via Android   ❤️ 1
    @xmai 用久了就会习惯性 -y
    hanlin85
        21
    hanlin85  
       140 天前
    @wenxueywx 这个有点道理,学习了
    hefish
        22
    hefish  
       140 天前
    有没有能防止 rm -i -rf / 命令,误按 y 的办法?
    codehz
        23
    codehz  
       140 天前
    @wenxueywx 无效的,放在尾部的只能是路径,参数放尾部会被认为是一个叫-rf 的文件名
    kneo
        24
    kneo  
       140 天前 via Android   ❤️ 1
    相信我,什么安全措施都没用,最后都会被你巧妙的绕过。
    chendl111
        25
    chendl111  
       140 天前
    没有,linux 就是把自主权交给你,除非你用 windows
    proxychains
        26
    proxychains  
       140 天前   ❤️ 1
    即便是简单的 echo , 使用不当也是灾难的.
    echo > /etc/nginx/nginx.conf
    proxychains
        27
    proxychains  
       140 天前   ❤️ 1
    @llh880808 #15 我们内部规定是不允许使用绝对路径进行删除, 而是 cd 到目标路径然后再删除.

    rm -fr /data/useless ❌

    cd data
    rm -fr ./useless ✅
    wenxueywx
        28
    wenxueywx  
       140 天前
    @codehz 大部分类 linux 系统是可以的,macos 不行。
    momooc
        29
    momooc  
       140 天前 via Android
    @codehz Linux 这样操作没问题,我也喜欢这样用
    jcdv2
        30
    jcdv2  
       140 天前
    更危险的是藏在脚本里的吧?遇到不符合预期的输入的时候,拦截不一定起效
    mark2025
        31
    mark2025  
       140 天前
    @llh880808 -rf 参数不是可以最后输入吗 ,比如 'rm /some -rf'
    llh880808
        32
    llh880808  
       140 天前
    @wenxueywx 嗯,也是一个很好的建议。不过我觉得 rm -rf 即使不连用也也有风险,因为修改顺序是防止文件名/路径输入完之前就误按回车确认,尤其是同一个目录下,有多个前缀类似的文件/目录的时候,比如./foo 和 ./foobar 这种,很有可能想删 foobar 误删了 foo
    llh880808
        33
    llh880808  
       140 天前
    @mark2025 我的重点是,先确保想删的文件路径都输入完成,再去执行删除,即使-rf 放后面,在没有 alias rm=rm -i 的环境下,仍然可能误删文件的
    llh880808
        34
    llh880808  
       140 天前
    @proxychains 同意,我的本意是强调文件路径完整,只是刚好举了个根目录的例子;当然,不要从根目录开始会更安全
    majula
        35
    majula  
       140 天前
    @codehz #23

    如果用的是 coreutils 的 ls ,它是走 libc 的 getopt() 来处理参数的。而某些 libc (比如 glibc )的 getopt() 实现有 shuffle 参数的默认行为

    参考: https://www.man7.org/linux/man-pages/man3/getopt.3.html (搜索 POSIXLY_CORRECT )
    aycclm
        36
    aycclm  
       140 天前
    @hefish 按了第一次 y 再提示一次,下次改按 n ?
    Foxii
        37
    Foxii  
       140 天前 via Android
    定期自动高频快照,低频备份。二次确认什么的再多也都有概率翻车的,本就是因为脑子慢了,手比脑子快,二次确认也没用
    HankAviator
        38
    HankAviator  
       140 天前
    @aycclm 让别名随机生成验证码,需要删除则输入 4 位字母数字,哈哈哈哈
    Int100
        39
    Int100  
       140 天前
    @proxychains #27

    > 我们内部规定是不允许使用绝对路径进行删除, 而是 cd 到目标路径然后再删除.

    rm -fr /data/useless ❌

    cd data
    rm -fr ./useless ✅


    很好的建议,我一直是这么操作的,而且这样很符合直觉
    netabare
        40
    netabare  
       140 天前
    光怼 rm 没用吧,不安全的命令也不是只有 rm 。mv 也能把文件和文件夹搞飞。
    aragakiyuii
        41
    aragakiyuii  
       140 天前 via Android
    我记得之前有人说根节点下面放个全一点的🤣 node_modules
    orioleq
        42
    orioleq  
       140 天前 via iPhone
    危险的从来都不是工具,而是人。
    GoodRui
        43
    GoodRui  
       140 天前 via Android
    以前一直对这种低级误操作嗤之以鼻,认为这人得多 sb 才会出现这种低级错误。直到有一次手滑 rm -rf / path/to/del .../ 后面手滑打了个空格...
    qilme
        44
    qilme  
       140 天前 via Android
    @aragakiyuii 前几天误用脚本删了家目录,最后卡在了 `.bun` 才发现,检查后发现只删掉了 `.aria2` 目录
    msg7086
        45
    msg7086  
       140 天前   ❤️ 1
    我主机 zsh 有语法高亮插件,临时做的 rootfs 里一般只有 bash ,所以肯定不会搞错。
    楼上说的目录里手滑加空格的情况在我这也不是问题,因为存在的文件项有下划线,两个文件项中间有空格的话下划线就断开了,一眼就能看出是两个项目。

    危险命令归根结底就是要养成执行危险操作前双手离开键盘盯着命令看 5 秒,想清楚了再执行,而不是依靠各种 alias 或者 sudo 权限这种东西。总有一天你会上手一台没有 alias 的机器,总有一天你会顺手打出 sudo rm ,就算 rm 被 alias 了,总有一天你会习惯性打出-rf ,又或者打出 chown/chmod -R 。你会习以为常地认为系统会保护你,不让你执行危险操作。这种精神麻痹是非常危险的。
    msg7086
        46
    msg7086  
       140 天前
    我之前也误删过数据,不过不是你们想的那种误删。我误删是在部署一个程序项目的时候,要回滚一个数据库结构变更记录,本来应该输入 VERSION=20xxxxxx 的,结果我不小心打了 STEP=20xxxxxx ,结果直接把数据库滚没了。

    所以归根结底还是要危险操作多留心,多检查,然后就是多备份。别的都是假的。
    rulagiti
        47
    rulagiti  
       140 天前
    safe-rm
    busuzhike
        48
    busuzhike  
       140 天前
    牢记任何改动之前,先做备份
    DefoliationM
        49
    DefoliationM  
       139 天前 via Android
    alias rm=trash-put
    v2exchen
        50
    v2exchen  
       139 天前
    制作 rootfs 不一定要用 sudo ,有试过 fakeroot 吗
    jheroy
        51
    jheroy  
       139 天前 via Android
    删东西重来不是直接删,都是先 mv xxx xxx.bak 没问题再删,做危险操作前都要二次检查命令,并且保证有恢复手段
    635925926
        52
    635925926  
       139 天前
    我记得 centos 是不支持直接 rm /的,会有报错提示
    chenliangngng
        53
    chenliangngng  
       139 天前
    @llh880808 感觉有点像函数式编程,行为放最后,如果有对应插件那就太好了
    yoqu
        54
    yoqu  
       139 天前   ❤️ 1
    @Int100 😂,以前我就是这么操作的,写了一个脚本,
    cd /xxx/xxx
    rm -rf ./
    然后执行脚本的时候发现/xxx/xxx 目录不存在,自动停留在根目录,发服务器被全删了。。。。
    ladeo
        55
    ladeo  
       139 天前
    多用绝对路径,少用相对路径吧
    eggt
        56
    eggt  
       139 天前
    @wenxueywx rm -rf / 和 rm / -rf 不是一样的吗
    MrUser
        57
    MrUser  
       139 天前
    1. 不要直接使用 root 用户;
    2. 所有需要 sudo 的都是危险命令;
    leon2023
        58
    leon2023  
       139 天前
    没办法,sudo 很多时候都必须用,只能是小心小心再小心
    Int100
        59
    Int100  
       139 天前
    @yoqu #54

    所以脚本执行危险啊😂
    oneisall8955
        60
    oneisall8955  
       139 天前
    @yoqu 为什么不 rm /xxx/xxx/* 呢要 cd 进去 rm ./
    yoqu
        61
    yoqu  
       138 天前
    @oneisall8955 因为以前太年轻了
    julyclyde
        62
    julyclyde  
       138 天前
    @Int100
    @proxychains 某一天 cd 失败了,rm 成功了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3673 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 121ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.