rm -rf 这个命令是用来强制删除 Linux 文件的,但是网上流传的数据库删库命令也是他???难道不是 drop database xxx? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
429463267
V2EX    程序员

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

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

    # 大佬们,请教个问题:

    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  
    O
       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
    就看看
    KgM4gLtF0shViDH3
        69
    KgM4gLtF0shViDH3  
       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  
    PRO
       2018-09-22 20:18:48 +08:00
    有没有人发现最后百度那张图的:Scanning port #1683
    best66
        73
    best66  
       2018-09-22 20:42:30 +08:00
    数据库不是文件吗...
    ReturnNull1
        74
    ReturnNull1  
       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     Solana     4119 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 10:15 PVG 18:15 LAX 03:15 JFK 06:15
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86