两条Linux删数据跑路命令
rm -rf /
无提示循环删除根目录,,删除存在被恢复的可能
dd if=/dev/urandom of=/dev/hda1
随机填写数据到相应分区,直到填满为止。重写后的分区无法挂载,并且创建和拷贝文件都会报错。
hda1是本地硬盘
我们该如何再次避免删库“跑路”等事件的再次发生?
对此,在企业首先做好权限管理以及多重审核机制的同时,CSDN 也曾教诸多程序员们如何在 Linux 下谨慎使用 rm,避免从删库到跑路的悲剧发生:
一个方案就是重定向 rm 命令以嫁接为 mv 命令,相当于给 Linux 系统定制了一个回收站。实现方式如下:
最后将上述脚本写入 /etc/bashrc,并立即执行命令 source /etc/bashrc 即刻生效。最好写个定时清理回收站任务
以上的脚本定义了几个命令:
rl:查看回收站下的文件;
unrm 文件名或目录:恢复到当前的路径下;
rmtrash:清空回收站,不过会友好提示。
执行 rm 不会真正删除,而是使用 mv 移动到我们指定的回收站。实在真的想删除可以 /bin/rm 来进行删除。另外,需要注意的时,之前 rm 指令的一些参数可能不再使用,因为 rm 现在其实是 mv 了。
还有无论是运维、DBA 还是程序员们都应该在日常 Coding 时严加注意操作规范,铭记“一失手成千古恨”的后果。在审查时也要做好自动容灾、数据同步的步骤,最后,重要的事情说三遍,不要忘记:
备份!
备份!
备份!
原文链接:https://blog.csdn.net/u012724167/article/details/82799450
当然,虽然是 sudo 开头,但是它之所以经常被使用,是因为:这个命令可以帮你抓取用 root 权限运行上一条命令。所以它排名第一,大家感觉这是非常有用的。
排名第二、三、四位的一次如下:
分别一次的意思是:
python -m SimpleHTTPServer,快速启动一个 HTTP 服务输出当前目录。
^foo^bar,快速字符修正,替换上一条命令的对应字符。
ctrl-x e,快速调用编辑器编写一个冗长,复杂或棘手的命令。下次使用shell时,请尝试键入ctrl-x e(按住控制键按x然后按e)。 shell 将使用您在命令行中编写的内容并将其粘贴到$ EDITOR指定的编辑器中。然后,您可以使用vi,emacs,nano等所有强大的宏和命令进行闲暇编辑。
所以,如果你想学习 Linux 命令,更想知道哪些 Linux 命令更有意义,更实用,可以通过这个网站学习,他是大家按照最常用,最实用的命令,投票出来的。
目前这个网站上有关 Linux 命令有 13,610 个,可以说非常全面了。
学会了最实用,最常用的 Linux 命令,可以提高大家编程效率的同时,还能防止大家删库跑路!
网站地址:https://www.commandlinefu.com
原文链接:https://blog.csdn.net/oqjya206rsq71/article/details/88266047
防止删库方法大全
昨天有个工程师写了一个删除日志的bug:
...
rm -rf / home/work/logs/
...
还好是在测试环境执行的,否则估计要跑路了。
画外音:一个“多了一个空格”的bug,看懂了么?
曾经我也干过类似的傻事,写过这样删除日志的脚本:
...
cd ${log_path}
rm -rf *
...
进入到日志目录,然后把日志都删除。
画外音:看上去没有任何问题?当目录不存在时,悲剧就发生了。
如何避免类似的删除根目录的“惨剧”发生,有这样一些建议:
一、命令替换
在生产环境把rm -rf 命令替换为mv,再写个定时shell定期清理。
画外音:模拟了回收站的功能。
二、收拢权限
帐号权限的分离,线上分配work帐号,只能够删除/home/work/logs/目录,无法删除根目录。
画外音:大公司一般线上权限管理比较规范,小公司就未必了,搞不好所有的小伙伴都有权限在线上乱搞。
三、使用&&
可以通过“&&”,将
cd ${log_path}
rm -rf *
合并成一个语句
cd ${log_path} && rm -rf *
当前半句执行失败的时候,后半句不再执行。
四、判断目录是否存在
制定编码规范,对目录进行操作之前,要先判断目录是否存在。
画外音:靠人的自觉来保证规范的执行,总感觉有些不太靠谱。当然,规范是有必要的。
https://blog.csdn.net/qq_29996285/article/details/85272208
每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有bug,呵呵。
那么如果真的删除了不该删除的文件,比如数据库、日志或执行文件,咋办呢?欲知后事如何,请仔细看完本篇文章。
模拟场景
1、删除
误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件:
> rm -f /root/selenium/Spider/MySql.Data.dll
> ll /root/selenium/Spider/MySql.Data.dll
ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory
2、恢复
(1)、使用lsof命令查看当前是否有进程打
开/root/selenium/Spider/MySql.Data.dll文件:
> lsof | grep /root/selenium/Spider/MySql.Data.dll
从上面可以看出,当前文件状态为已删除(deleted)。
(2)、查看是否存在恢复数据:
/proc/13067/fd:进程操作的文件描述符目录。
86:文件描述符。
> cat /proc/13067/fd/86
(3)、使用I/O重定向恢复文件
> cat /proc/23778/fd/86 > /root/selenium/Spider/MySql.Data.dll
> ls -l /root/selenium/Spider/MySql.Data.dll
-rw-r--r-- 1 root root 702464 Feb 10 12:03 /root/selenium/Spider/MySql.Data.dll
重新运行程序:
说明恢复的文件没有问题。
刨根问底
在Linux系统中,每个运行中的程序都有一个宿主进程彼此隔离,以/proc/进程号来体现(Linux本质上就是一个文件系统),比如:ls -l /proc/13067 查看进程PID为13067的进程信息。
当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。
总结
如果不小心误删了文件,不要着急,首先使用 lsof 查看打开该文件的进程,然后再使用 cat /proc/进程号/fd/文件描述符 查看恢复数据,最后使用I/O重定向的方式来恢复文件。