{"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":""}}