Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
smdbh
V2EX  ›  Linux

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

  •  
  •   smdbh · Jun 20, 2024 · 8260 views
    This topic created in 869 days ago, the information mentioned may be changed or developed.
    10 多年终于遇到来了,手滑敲太快,来了个全盘操作。。。。
    想问下,现在有没有 shell 的插件,或工具,能拦截命令,在对全盘有写操作的时候,进行提示。最好基于 zsh ,bash
    62 replies  •  2024-06-22 16:29:03 +08:00
    honus
    honus
    Jun 20, 2024
    1
    养成日常不用 root 用户的习惯吧
    lstz
    lstz
    Jun 20, 2024 via Android
    2
    上 zsh
    abcde123456789
    abcde123456789
    Jun 20, 2024
    3
    终于理解为啥不推荐用 root 了
    SayHelloHi
    SayHelloHi
    Jun 20, 2024
    4
    借楼问下 有没有检查安全更新的脚本 可以一键安装安全更新包 😁 求一个
    smdbh
    smdbh
    OP
    Jun 20, 2024
    5
    @abcde123456789 ,不是 root , 在制作 rootfs ,sudo 了, 两个目录没分清
    xmai
    xmai
    Jun 20, 2024❤️2
    6
    搞个函数包装一下原始命令,比如包装一下 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
    smdbh
    OP
    Jun 20, 2024
    7
    @lstz ,就是 zsh ,是有啥插件吗,默认和 bash 没区别,都直接执行
    xmai
    xmai
    Jun 20, 2024❤️3
    8
    你硬要上插件,也是有解决方案,这个插件可以拦截任何有风险的 shell 命令(默认或由您定义)并提示进行双重验证
    https://github.com/kaplanelad/shellfirm
    Jinnrry
    Jinnrry
    Jun 20, 2024 via Android
    9
    我们公司 ssh 服务器要经过跳板机,跳板机会记录所有操作命令,同时会做命令审计,如果你敲个 rm /或者导出敏感文件日志啥的,立马就中断要求提审批单
    Jiceburger
    Jiceburger
    Jun 20, 2024 via Android❤️9
    10
    @xmai 额,也许 alias rm="rm -i" 更简单一些?
    xubeiyou
    xubeiyou
    Jun 20, 2024
    11
    让运维隔段时间做备份。。。我当前小公司就这么做的
    huangmingyou
    huangmingyou
    Jun 20, 2024
    12
    我现在习惯把危险命令写到临时文件 file, 检查确认后用 bash file 执行。
    DawnMoon
    DawnMoon
    Jun 20, 2024❤️1
    13
    $ 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
    smdbh
    OP
    Jun 20, 2024
    14
    @xmai @villivateur , 是个方法,但我这次翻车的是 chmod ,把权限搞崩了,导致 sudo 等命令没法用了
    llh880808
    llh880808
    Jun 20, 2024❤️8
    15
    我一直在推荐同事修改键入 rm 命令的顺序,比如 rm -rf /some/nouse/path ,常规顺序是从左到右,我建议先输入/some/nouse/path ,然后 ctrl-a 回到开头再输入 rm -rf
    从左到右的顺序,我一直担心路径还没输入完,就不小心按到回车的事情发生
    chenjiasange
    chenjiasange
    Jun 20, 2024
    16
    我犯贱的时候,不小心直接把整个 rm / 整个删除了。。。。
    A4l1CteRQHlG1Bs8
    A4l1CteRQHlG1Bs8
    Jun 20, 2024
    17
    举例子类似 rm 给 alias 到 trash 命令.

    cp alias 到 cp -i 这种..

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

    rm -fr /data/useless ❌

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

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

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

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

    rm -fr /data/useless ❌

    cd data
    rm -fr ./useless ✅


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

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

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

    所以脚本执行危险啊😂
    itechify
    itechify
    Jun 21, 2024
    60
    @yoqu 为什么不 rm /xxx/xxx/* 呢要 cd 进去 rm ./
    yoqu
    yoqu
    Jun 22, 2024
    61
    @oneisall8955 因为以前太年轻了
    julyclyde
    julyclyde
    Jun 22, 2024
    62
    @Int100
    @proxychains 某一天 cd 失败了,rm 成功了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4915 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 08:51 · PVG 16:51 · LAX 00:51 · JFK 03:51
    ♥ Do have faith in what you're doing.