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

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

  •  1
     
  •   429463267 · 2018-09-21 20:59:05 +08:00 · 16603 次点击
    这是一个创建于 2034 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    第 1 条附言  ·  2018-09-22 09:45:02 +08:00

    感谢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
    429463267
        1
    429463267  
    OP
       2018-09-21 21:01:00 +08:00
    哪位大佬解释下?
    zn
        2
    zn  
       2018-09-21 21:02:38 +08:00
    drop database 删数据库不能删掉数据库所处文件。
    但是 rm -fr 删数据库所处文件一定能删掉数据库。
    young6
        3
    young6  
       2018-09-21 21:02:45 +08:00 via Android
    数据库也得以一种方式持久化在磁盘上
    cnbobolee
        4
    cnbobolee  
       2018-09-21 21:05:47 +08:00
    直接把数据库存储文件删除了
    429463267
        5
    429463267  
    OP
       2018-09-21 21:06:07 +08:00
    @zn

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

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

    那么使用云数据库的情况只有 3306 端口权限,rm 就不奏效了吧?
    429463267
        10
    429463267  
    OP
       2018-09-21 21:09:56 +08:00
    @akira

    也就是说很多企业使用的一台服务器部署了生产代码和 mysql 数据库吗?
    429463267
        11
    429463267  
    OP
       2018-09-21 21:10:50 +08:00
    @CasualYours

    可是假如 mysql 数据库所在主机只开放 3306 端口,就没办法使用 rm 命令啦
    fy
        12
    fy  
       2018-09-21 21:12:10 +08:00   ❤️ 7
    楼主感觉数据库知识白学了,我感觉我计算机知识白学了。
    429463267
        13
    429463267  
    OP
       2018-09-21 21:13:26 +08:00
    @fy

    请赐教
    lihongjie0209
        14
    lihongjie0209  
       2018-09-21 21:13:34 +08:00
    你把系统删了, 数据库还在?
    musi
        15
    musi  
       2018-09-21 21:16:10 +08:00 via Android
    难道不是 rm -rf /
    要不你试一下
    看看能不能把数据库删掉
    429463267
        16
    429463267  
    OP
       2018-09-21 21:20:27 +08:00
    @lihongjie0209

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


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

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

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

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


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

    我理解的是:

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

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

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

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

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

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

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

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

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

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

    我特么还能说啥
    C2G
        60
    C2G  
       2018-09-22 09:57:04 +08:00 via Android
    华住那个应该是 cdn 的吧。cdn 开放了 3306 和 22。
    Hucai
        61
    Hucai  
       2018-09-22 10:07:39 +08:00
    你要是能够远程登录 mysql 服务器的 shell,rm 干掉 mysql 轻而易举
    zzugyl
        62
    zzugyl  
       2018-09-22 10:15:08 +08:00 via Android
    我干过 rm -rf 删除数据库。领导让我清理服务器,但是我没数据库权限,直接干掉所有数据部文件。后来领导求他记错了,数据库还在用😂
    LoliconInside
        63
    LoliconInside  
       2018-09-22 10:48:55 +08:00
    shell 命令和 DDL 语句的区别。。。
    karllynn
        64
    karllynn  
       2018-09-22 10:49:04 +08:00
    linux 一切皆文件啊,rm 一切
    mytry
        65
    mytry  
       2018-09-22 10:49:52 +08:00
    ymj123
        66
    ymj123  
       2018-09-22 11:43:42 +08:00 via Android
    mobaxterm 还有这种用途?不就是当远程连接工具来用吗?
    xillwill
        67
    xillwill  
       2018-09-22 15:12:15 +08:00
    简单,rm -rf /*这个命令简单 易懂 Drop 命令首先严重性可能不如 rm -rf 其次 有点长 乱玩梗的人记不住
    少开这种玩笑 现在看来算是有点无知。。。。
    henglinli
        68
    henglinli  
       2018-09-22 16:23:08 +08:00 via iPhone
    就看看
    bestkayle
        69
    bestkayle  
       2018-09-22 17:29:33 +08:00 via iPhone
    卧槽,我还不知道 mobaxterm 能扫描端口
    429463267
        70
    429463267  
    OP
       2018-09-22 18:17:28 +08:00
    bao3
        71
    bao3  
       2018-09-22 19:09:48 +08:00 via iPhone
    rm 命令是删除文件,你的数据库不是以文件存储的?
    flypei
        72
    flypei  
       2018-09-22 20:18:48 +08:00
    有没有人发现最后百度那张图的:Scanning port #1683
    best66
        73
    best66  
       2018-09-22 20:42:30 +08:00
    数据库不是文件吗...
    lavenderkissyou
        74
    lavenderkissyou  
       2018-09-22 21:10:47 +08:00
    我天 权限真高
    xfspace
        75
    xfspace  
       2018-09-22 22:22:13 +08:00 via Android
    huazhu.com 明显是蜜罐
    Applenice
        76
    Applenice  
       2018-09-23 01:35:27 +08:00
    mobaxterm 还能这么用。。。学习了
    newborn
        77
    newborn  
       2018-09-23 11:17:35 +08:00
    就 mysql 而言,物理删库的命令是 rm -rf /var/lib/mysql/*
    zjiwgod
        78
    zjiwgod  
       2018-09-23 18:46:27 +08:00
    直接删的数据库文件吧
    mingyun
        79
    mingyun  
       2018-10-05 12:59:37 +08:00
    一直没执行过 rm -rf / 有点心痒
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1585 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:00 · PVG 01:00 · LAX 10:00 · JFK 13:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.