首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  程序员

😤😤😤rm -rf 这个命令是用来强制删除 Linux 文件的,但是网上流传的数据库删库命令也是他???难道不是 drop database xxx?👋

  •  1
     
  •   429463267 · 56 天前 · 6579 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

    😤😤😤😤# 大佬们,请教个问题:

    rm -rf 这个命令是用来强制删除 linux 文件的,但是坊间流传的数据库删库命令也是他,然而删除 mysql 数据库命令是 drop database xxx

    所以这两个命令是不是被网友混淆了?

    而且一般数据库都是云端的,本机远程连接,在 mysql 命令行执行 rm 命令也是无效的啊。。。

    所以该怎么解释使用 rm -rf 删库跑路的段子?

    难道我的数据库知识白学了?

    第 1 条附言  ·  55 天前

    感谢25楼的答案,一语中的。

    因为我之前工作的一家公司是多台服务器独立 ip,而且分为生产服务器和测试服务器,数据库也是独立的。总监说买服务器,然后组长马上就买了,几万的样子,在阿里云。

    平时我最多也就可以看到 git 仓库里面测试数据库的账号密码,所以说我以为大家都是比较规范的管理数据库(生产数据库服务器和部署代码的生产服务器独立运行 ),rm -rf 删库这种操作得有个前提就是数据库服务器所在的主机已经暴露了ssh 22端口,这个被危险分子拿到之后就比较危险了。

    接下来咱们对比一下华住酒店的服务器和大厂服务器规范化:

    拿到主服务器ip之后,使用神器 mobaxterm [推荐一波] 扫描开放端口, 发现华住首先作为企业网站都没有使用ssl证书,太落后了;

    其次向外网开放了200以内的高危端口号,尤其是风险最高的22ssh 端口 和 3306 mysql 数据库端口。。。

    再看看某度,只开放了80 和 443 http + https 端口用于网页访问。这个没有槽点。。。

    79 回复  |  直到 2018-10-05 12:59:37 +08:00
        1
    429463267   56 天前
    哪位大佬解释下?
        2
    zn   56 天前
    drop database 删数据库不能删掉数据库所处文件。
    但是 rm -fr 删数据库所处文件一定能删掉数据库。
        3
    young6   56 天前 via Android
    数据库也得以一种方式持久化在磁盘上
        4
    cnbobolee   56 天前
    直接把数据库存储文件删除了
        5
    429463267   56 天前
    @zn

    假如云数据库只给了 3306 端口权限,那么在 mysql 命令行也没法使用 rf 命令啊
        6
    akira   56 天前
    而且一般数据库都是云端的
    --------------------------------------
    这个假设错了哦。rm -rf 删库的,都是自建的数据库
        7
    CasualYours   56 天前 via Android
    太天真了,rm -rf 是可以删掉 linux 的
        8
    yingfengi   56 天前 via Android
    @429463267 你这样去深究就没意思了,就是个梗。
    要这么说,我 ssh 用 3306 端口啊
        9
    429463267   56 天前
    @young6

    也就是说这种情况是:
    必须得有数据库所在物理主机的 21 端口权限,使用 shell 命令从物理上删除 mysql 存储文件?

    那么使用云数据库的情况只有 3306 端口权限,rm 就不奏效了吧?
        10
    429463267   56 天前
    @akira

    也就是说很多企业使用的一台服务器部署了生产代码和 mysql 数据库吗?
        11
    429463267   56 天前
    @CasualYours

    可是假如 mysql 数据库所在主机只开放 3306 端口,就没办法使用 rm 命令啦
        12
    fy   56 天前   ♥ 7
    楼主感觉数据库知识白学了,我感觉我计算机知识白学了。
        13
    429463267   56 天前
    @fy

    请赐教
        14
    lihongjie0209   56 天前
    你把系统删了, 数据库还在?
        15
    musi   56 天前 via Android
    难道不是 rm -rf /
    要不你试一下
    看看能不能把数据库删掉
        16
    429463267   56 天前
    @lihongjie0209

    我的理解是:
    一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ?
        17
    changnet   56 天前 via Android   ♥ 2
    楼主没分清楚 shell 指令和 sql 语句,以及他们执行的环境
        18
    429463267   56 天前
    @musi


    我的理解是:
    一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ?
        19
    429463267   56 天前
    @changnet

    不是我没懂,我是觉得数据库服务器不应该开放 21 端口,不应该让 DBA 通过远程终端登录 21 端口去操作 linux 主机,这太危险
        20
    RickyHao   56 天前 via Android
    楼主请去学一下计算机基础知识,用一下 Linux 再来提问吧…
        21
    zeroDev   56 天前 via Android
    建议题主自己试试
        22
    CasualYours   56 天前 via Android
    @429463267 这样肯定不会,然而出事的都是远程服务器,而且超级用户权限。这个 var 放在根目录挺碍眼的,rm,然后 gg
        23
    mikeguan   56 天前 via Android   ♥ 1
    21 端口一般 FTP 用
    22 端口一般 ssh 用
    无法连接数据库服务器 如果需要运维操作怎么办?你的服务器只开 3306 端口可以 但是你需要确保你永远不需要登录操作
        24
    mikeguan   56 天前 via Android
    @429463267 其实我觉得一般企业数据库端口都是不对外开放的 (点名华住)
        25
    zn   56 天前 via iPhone   ♥ 1
    @429463267 那是你觉得,你的想法很正确,然而你的想法有个致命缺陷,那就是太理想化了,以为所有企业都很专业很严格地管理、使用数据库。

    现实中大部分企业都是自己在服务器上安装一个数据库,然后就这么用下去了。然后总会有手贱的人一不下心在服务器上运行了个 rm -fr /,然后就 gg 了。
        26
    izoabr   56 天前
    你可以弄个数据库,然后#rm -rf /
    你会发现无忧无虑
        27
    429463267   56 天前
    @zn

    看了你的答案,豁然开朗,醍醐灌顶。。。


    因为我之前工作的公司都是多台服务器独立 ip,而且分为生产服务器和测试服务器,数据库也是独立的。
    我最多也就可以看到 git 仓库里面测试数据库的账号密码
        28
    429463267   56 天前
    @429463267 @zn @young6 @cnbobolee @akira @CasualYours @yingfengi @fy @lihongjie0209 @musi @changnet @RickyHao @zeroDev @mikeguan @izoabr

    我理解的是:

    生产服务器和生产数据库不在同一台主机,我以为其他公司也这样呢😡。

    如果把生产代码和生产数据库全部放一台服务器主机上,那只能说这家公司太穷了。。。
        29
    celeron533   56 天前 via Android
    @429463267
    Drop database 实在数据库管理控制台里做的,只能删除数据库,不影响数据库软件自身以及文件系统

    rm rf 则是在数据库所在的操作系统做的事情,任何东西都可以一锅端,包括数据文件和数据库软件以及操作系统自身

    如果 dba 能直接 ssh 到数据库服务器(不是 MySQL 控制台),然后 su rm rf 那就完蛋了
        30
    429463267   56 天前
    唉,此贴终结,看来是我太认真了
    @yingfengi
        31
    zn   56 天前 via iPhone
    @429463267 你应该还没工作吧,很多情况想得太理想化了。其实这样做的公司太多了因为服务器托管是要钱的,一年一万左右,两台就是两倍价格。所以很多公司就托管一台性能好的,什么都放上面跑,比你托管两台划算多了。这是性价比问题,不是穷不穷的问题。一个巨无霸汉堡 20 块,两个 30,你肯定买得起,可是你会买两个回来吃一个扔一个吗?
        32
    harde   56 天前
    @429463267 太穷。。。。 图样图森破

    我前公司,Oracle 集群,有灾备,但是 rm -rf / 一样会死人的。。。。。。
        33
    harde   56 天前
    无论是不是多服务器,你数据库的服务器总是需要维护的。 那就会给 rm -rf /提供机会。

    即使所谓的云数据库,你也很难保证云厂商的攻城狮不给你来个从删库到跑路。。。
        34
    Cu635   56 天前
    数据库怎么存放数据啊,不还是以文件形式存放在磁盘上嘛。只是文件内容不是明文而是二进制格式化的了。
        35
    MonoLogueChi   56 天前 via Android   ♥ 2
    一切皆是文件
        36
    kslr   56 天前
    数据库机器也需要维护,那就有操作环境
        37
    young6   56 天前 via Android
    @429463267 ssh 是在端口 22 ;所以说用 rm -rf 删库的都是运维,开发一般没有存储数据库机器的 root 权限。不管用啥服务器,总需要有人维护,总有被 rm -rf 的风险。
        38
    xiqingongzi   56 天前 via iPhone
    你高看了云服务的普及程度。以及,云服务也需要人维护。只要有人 rm-rf,就没救。
        39
    luozic   56 天前 via iPhone   ♥ 1
    root 用户上去干活,并且一般 rm 不都是 alias 到 mv 到备份文件夹?
        40
    mikeguan   56 天前 via Android
    @429463267 #28 数据库服务器也需要维护的 你的想法部署一次跑终身基本不可能 虽然需要登录操作数据库的情况很少 比如磁盘满了,你需要清日志,需要打安全补丁等也会需要登录的
        41
    NullPoint   56 天前 via Android
    温馨提示 备份也删掉
        42
    Judoon   56 天前 via Android
    数据库再怎么服务化,也基本是跑在 linux 上的,数据也是会要落盘的,你没权限 rm 不代表别人没有
        43
    fyibmsd   56 天前 via iPhone
    知道啥叫万物皆文件吗
        44
    likuku   56 天前
    云端的数据库也不是凭空悬在真空中啊...虽然只给你等麻瓜开放个 3306 之类的端口。

    实际再怎么也是跑在一个系统里的,即便是容器 /虚拟机,它们底层承载还是有个系统的...

    直接登入承载系统,rm -rf ...太慢了好嘛,直接 dd if=/dev/zero of=/dev/disk 就好,直接给裸磁盘写满空数据。
        45
    chiu   56 天前
    All is file
    rm 能删万物
        46
    RobertYang   56 天前 via Android
    要不你先在生产环境试试?
        47
    Rehtt   56 天前 via Android
    数据库其实就是以文件的方式存在磁盘上的,而 rm -rf 是把磁盘上的文件都删了
        48
    zjp   56 天前 via Android
    还有一点,MySQL,PG 都能在客户端执行系统命令。没人用 root 跑数据库吧,rm -rf /执行不了,删除数据库文件的权限还是有的
        49
    littlewing   56 天前
    试一下在 MySQL Client 中敲 \! rm -rf /
        50
    jadec0der   56 天前
    DBA 登录服务器很正常,因为要排查问题需要看日志啥的
        51
    dangyuluo   56 天前
    drop 是可以通过 binlog 恢复的,只要你有耐心和运气。rm 真的就是回天乏术了
        52
    susecjh   56 天前 via Android
    基础感人
        53
    happyz90   55 天前 via Android
    @429463267 如果只开放 3306 用于数据库,那你想想最初安装和配置数据库是怎么在这台机器上操作的?同样的方式就可以在这台机器上执行 rm 了。
        54
    IvanLi127   55 天前 via Android
    云数据库难道不跑在服务器上?难道没人能操作云数据库的服务器?难道什么人都有资格操作数据库?删库跑路也得有点资格才行
        55
    aver4vex   55 天前
    数据库最终也是以文件的形式存在于系统中。这个没毛病老铁。
        56
    huluhulu   55 天前 via iPhone
    drop 只能删除 mysql 数据库,也可能只能删除一个数据库,但是 rm -rf /可以删除任何数据库,不管数量种类大小。
        57
    passerbytiny   55 天前
    你们是太小看数据库了,数据库本身是有一部分日志或容灾措施的,虽然不完善,但是有。
    如果只是 drop,没备份也有一定的几率恢复过来。而 rm -rf,没备份的话,基本没可能救回来了。

    另外,rm -rf 命令通常是用来清理临时文件的,使用频率非常高,但经常 drop database 的人,你能遇见几个。
        58
    GeruzoniAnsasu   55 天前 via Android
    知道是段子还能钻牛角尖钻到这个程度也是厉害
        59
    429463267   55 天前
    @GeruzoniAnsasu

    好吧,是我太较真太严谨了
    😂

    我特么还能说啥
        60
    C2G   55 天前 via Android
    华住那个应该是 cdn 的吧。cdn 开放了 3306 和 22。
        61
    Hucai   55 天前
    你要是能够远程登录 mysql 服务器的 shell,rm 干掉 mysql 轻而易举
        62
    zzugyl   55 天前 via Android
    我干过 rm -rf 删除数据库。领导让我清理服务器,但是我没数据库权限,直接干掉所有数据部文件。后来领导求他记错了,数据库还在用😂
        63
    LoliconInside   55 天前
    shell 命令和 DDL 语句的区别。。。
        64
    karllynn   55 天前
    linux 一切皆文件啊,rm 一切
        65
    mytry   55 天前
        66
    ymj123   55 天前 via Android
    mobaxterm 还有这种用途?不就是当远程连接工具来用吗?
        67
    xillwill   55 天前
    简单,rm -rf /*这个命令简单 易懂 Drop 命令首先严重性可能不如 rm -rf 其次 有点长 乱玩梗的人记不住
    少开这种玩笑 现在看来算是有点无知。。。。
        68
    henglinli   55 天前 via iPhone
    就看看
        69
    bestkayle   55 天前 via iPhone
    卧槽,我还不知道 mobaxterm 能扫描端口
        70
    429463267   55 天前
        71
    bao3   55 天前 via iPhone
    rm 命令是删除文件,你的数据库不是以文件存储的?
        72
    flypei   55 天前
    有没有人发现最后百度那张图的:Scanning port #1683
        73
    best66   55 天前
    数据库不是文件吗...
        74
    lavenderkissyou   55 天前
    我天 权限真高
        75
    xfspace   55 天前 via Android
    huazhu.com 明显是蜜罐
        76
    Applenice   55 天前
    mobaxterm 还能这么用。。。学习了
        77
    newborn   54 天前
    就 mysql 而言,物理删库的命令是 rm -rf /var/lib/mysql/*
        78
    zjiwgod   54 天前
    直接删的数据库文件吧
        79
    mingyun   42 天前
    一直没执行过 rm -rf / 有点心痒
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   719 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 26ms · UTC 22:52 · PVG 06:52 · LAX 14:52 · JFK 17:52
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1