{
    "act": "_viewAct",
    "msg": "db-pager。",
    "row": {
        "did": "2018-cy-pr5w",
        "dno": "1",
        "catid": "i1014",
        "hinfo": null,
        "title": "程序员如何优雅地防止从删库到跑路？",
        "mpic": null,
        "jump": null,
        "show": "1",
        "color": "993300",
        "click": "1",
        "vtype": null,
        "aip": "127.0.0.1",
        "atime": "1546177893",
        "auser": "adm_123",
        "eip": "127.0.0.1",
        "etime": "1546177893",
        "euser": "adm_123",
        "detail": "<p>\r\n\tIT 界的有一个老梗，一次某论坛的数据库管理员抱怨自己老板一直虐待他，结果他一气之下就删库跑路了……\r\n<\/p>\r\n<p>\r\n\t此前也曾有新闻报道，北京一软件工程师离职后因公司未能如期结清工资，便利用其在所设计的网站中安插的后门文件将网站源代码全部删除，结果因破坏计算机信息系统罪而获刑五年......\r\n<\/p>\r\n<p>\r\n\t但如果我在服务器维护的时候不小心执行了 rm -rf 命令……现在整台服务器被我删光了肿么办？？？......所以程序员特别喜欢跑步锻炼。\r\n<\/p>\r\n<p>\r\n\t好吧，言归正传。本文我们来讨论下，程序员如何优雅地防止数据误删。现在先来介绍一下 rm。\r\n<\/p>\r\n<p>\r\n\trm 是 linux 系统下删除文件的命令，-r 代表删除这个下面的一切，一切的一切那种的一切。f 表示不需要用户确认，直接执行。\r\n<\/p>\r\n<p>\r\n\t通常这个命令都是指定文件夹用的，比如：\r\n<\/p>\r\n<p>\r\n\trm -rf \/home\/test\/\r\n<\/p>\r\n<p>\r\n\t就是删除 \/home\/test\/ 这个文件夹下面的所有东西。\r\n<\/p>\r\n<p>\r\n\t但是如果后面的文件夹路径没有加对，rm -rf \/ 在服务器上也就意味着…\r\n<\/p>\r\n<p>\r\n\t<br \/>\r\n<\/p>\r\n<p>\r\n\t解脱了......\r\n<\/p>\r\n<p>\r\n\t俗话说的好：常在河边走，哪能不湿鞋。那该怎么避免这种悲剧的发生呢？\r\n<\/p>\r\n<p>\r\n\t一个方案就是重定向 rm 命令以嫁接为 mv 命令，相当于给 Linux 系统定制了一个回收站。\r\n<\/p>\r\n<p>\r\n\t实现方式如下：\r\n<\/p>\r\n<p>\r\n\t最后将上述脚本写入 \/etc\/bashrc，并立即执行命令 source \/etc\/bashrc 即刻生效。\r\n<\/p>\r\n<p>\r\n\t<br \/>\r\n<\/p>\r\n<p>\r\n\t这个脚本定义了几个命令：\r\n<\/p>\r\n<p>\r\n\trl：查看回收站下的文件；\r\n<\/p>\r\n<p>\r\n\tunrm 文件名或目录：恢复到当前的路径下；\r\n<\/p>\r\n<p>\r\n\trmtrash：清空回收站，不过会友好提示。\r\n<\/p>\r\n<p>\r\n\t执行 rm 不会真正删除，而是使用 mv 移动到我们指定的回收站。实在真的想删除可以 \/bin\/rm 来进行删除。另外，需要注意的时，之前 rm 指令的一些参数可能不再使用，因为 rm 现在其实是 mv 了。\r\n<\/p>\r\n<p>\r\n\t看着是还可以，但是也有一些问题，比如删除文件不能重名，若重名了会提示你是否进行覆盖。那就需要再进行特殊处理了，比如删除时加个时间戳什么的，有兴趣的动手实现下吧。\r\n<\/p>\r\n<p style=\"text-align:right;\">\r\n\tFROM:&nbsp;https:\/\/baijiahao.baidu.com\/s?id=1610547571272900229\r\n<\/p>",
        "author": null,
        "source": "https:\/\/baijiahao.baidu.com\/s?id=1610547571272900229",
        "seo_key": "删库，跑路",
        "seo_des": "程序员如何优雅地防止数据误删",
        "seo_tag": null,
        "rel_doc": null,
        "exfile": null
    },
    "dic": {
        "uncatego": {
            "kid": "uncatego",
            "pid": "0",
            "title": "未分类",
            "deep": "1",
            "frame": "0",
            "char": "W",
            "cfgs": null,
            "icon": ""
        },
        "type1": {
            "kid": "type1",
            "pid": "0",
            "title": "Type1",
            "deep": "1",
            "frame": "0",
            "char": "T",
            "cfgs": null,
            "icon": ""
        },
        "type4": {
            "kid": "type4",
            "pid": "type1",
            "title": "Type4",
            "deep": "2",
            "frame": "0",
            "char": "T",
            "cfgs": null,
            "icon": ""
        },
        "type2": {
            "kid": "type2",
            "pid": "0",
            "title": "Type2",
            "deep": "1",
            "frame": "0",
            "char": "T",
            "cfgs": null,
            "icon": ""
        },
        "tag2": {
            "kid": "tag2",
            "pid": "0",
            "title": "TAg2",
            "deep": "1",
            "frame": "0",
            "char": "T",
            "cfgs": null,
            "icon": ""
        },
        "te2": {
            "kid": "te2",
            "pid": "0",
            "title": "te2",
            "deep": "1",
            "frame": "0",
            "char": "T",
            "cfgs": null,
            "icon": ""
        }
    },
    "_info": {
        "errno": 0,
        "errmsg": ""
    },
    "_debug": {
        "ram": "0.819(MB)",
        "used": "31.477(ms)",
        "vp": "\/yskit\/index.php\/api\/demo.2018-cy-pr5w?debug=1",
        "rp": "",
        "ip": "ra=216.73.217.127",
        "ua": "Mozilla\/5.0 AppleWebKit\/537.36 (KHTML, like Gecko; compatible; ClaudeBot\/1.0; +claudebot@anthropic.com)",
        "req": "GET"
    }
}