Linux 下谨慎使用 rm,重定向rm为mv命令

两条Linux删数据跑路命令

rm

rm -rf /
  •  

无提示循环删除根目录,,删除存在被恢复的可能

dd

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重定向的方式来恢复文件。

你可能感兴趣的:(LINUX)