给你一个反悔的机会

系统 Linux
Linux 下 rm 命令是表示删除一个文件,而Linux是没有回收站机制,所以文件一旦删除的话,就彻底从磁盘上删除了。

Linux 下 rm 命令是表示删除一个文件,而Linux是没有回收站机制,所以文件一旦删除的话,就彻底从磁盘上删除了。而很多人喜欢加上 -f 选项,是代表强制的意思,更暴力的是删除文件夹的时候使用 rm -rf 命令,这样一来,文件夹本身,以及文件夹下的子子孙孙,都一了百了了。

而万一如果你执行了 rm -rf /* 命令,那无疑效果与下面等同:

[[340890]]

由于没有回收站机制,很多人吃过这个亏,良许也是,曾经辛苦写的几个月的代码,一个 rm 命令全部化为乌有,搞得每次执行 rm 命令的时候,手都是颤抖的……

既然Linux没有回收站,那我们能否自己实现一个?答案当然是肯定的。下面,我们就自己动手做一个回收站,给自己一个后悔的机会。

既然罪魁祸首是 rm 命令,那我们就对这个命令进行改造。在Linux下对命令进行重定义是使用 alias 命令,修改的是 .bashrc 文件,即:

  1. vim ~/.bashrc 

在文件尾部,我们添加以下几句代码:

  1. mkdir -p ~/.trash 
  2. alias rm=trashalias r=trashalias rl='ls ~/.trash/' 
  3. alias ur=undelfile 
  4. undelfile() 
  5. {    mv -i ~/.trash/$@ ./ 
  6. }trash() 
  7. {    mv -i $@ ~/.trash/ 
  8. }cleartrash() 
  9. {    read -p "clear sure?[n]" confirm 
  10.     [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* 

在这里,我们是在家目录下建立一个 .trash 的隐藏文件夹,作为回收站。然后,我们对 rm 命令进行重定义。当我们执行 rm 或者 r 的时候,将执行 trash 函数。而在 trash 函数里,只做一件事:

  1. mv -i $@ ~/.trash/ 

就是将 rm 之后所有的文件移动到 .trash 目录下(即模拟丢进回收站)。-i 选项表示如果 .trash 目录有同名文件的话,将提示是否覆盖。

我们将 rl 定义为 ls ~/.trash/ ,也就是说,我们可以通过 rl 来查看 .trash 目录下的文件,即被「删除」的文件。

如果要还原文件,可以执行 ur ,而 ur 将执行 undelfile 函数。在 undelfile 里,又将 ur 之后的文件从 .trash 目录移回到原目录,从而实现文件删除还原。

当过了一段时间后,回收站里文件太多了,我们可以使用 cleartrash 命令清空回收站。它将执行同名函数,调用 /bin/rm 命令将 .trash 目录清空。

.bashrc 文件修改完毕之后,我们要让它生效:

  1. source ~/.bashrc 

我们来实际体会一下:

删除文件

  1. alvin@alvin-pc:~/test$ touch file1 file2 file3 
  2. alvin@alvin-pc:~/test$ ls 
  3. file1  file2  file3alvin@alvin-pc:~/test$ rm file1 file2  
  4. alvin@alvin-pc:~/test$ r file3 

查看回收站文件

  1. alvin@alvin-pc:~/test$ rl 
  2. file1  file2  file3 

还原被删除的文件

  1. alvin@alvin-pc:~/test$ rl 
  2. file1  file2  file3 
  3. alvin@alvin-pc:~/test$ ur file1 
  4. alvin@alvin-pc:~/test$ ur file2 
  5. alvin@alvin-pc:~/test$ ur file3 
  6. alvin@alvin-pc:~/test$ ls 
  7. file1  file2  file3 
  8. alvin@alvin-pc:~/test$ rl 
  9. alvin@alvin-pc:~/test$ 

清空回收站

  1. alvin@alvin-pc:~/test$ rm file1 file2 file3 
  2. alvin@alvin-pc:~/test$ rl 
  3. file1  file2  file3alvin@alvin-pc:~/test$ cleartrash 
  4. clear sure?[n]y 
  5. alvin@alvin-pc:~/test$ rl 
  6. alvin@alvin-pc:~/test$ 

通过以上这些步骤,我们虽然可以实现一个回收站的功能,但实际的工作中,我们还是要养成定时备份的习惯,这样即使有误操作,我们也可以将损失降到最低。

本文授权转载自公众号「良许Linux」。良许,世界500强外企Linux开发工程师,公众号里分享大量Linux干货,欢迎关注!

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2014-11-19 13:06:59

2023-01-30 16:21:24

Linux外观

2023-10-30 08:45:55

Spring容器拦截

2022-12-22 08:22:17

Python图像图像处理

2021-08-04 17:55:38

keysRedis数据库

2012-03-05 19:43:00

lumia

2018-07-03 15:20:36

Promise函数借钱

2019-09-30 09:26:29

Java编程语言国旗

2020-09-15 13:56:08

公众号机器人图灵机器人

2018-08-26 05:38:44

路由器调制解调器网络设备

2022-03-31 08:09:04

CSS绘制技巧时钟

2015-07-29 15:05:01

2014-08-18 14:58:25

微软IE

2022-10-21 14:27:53

元宇宙网络空间稀缺虚拟环境

2021-08-26 11:02:55

云计算云计算环境云应用

2018-09-13 15:05:27

信息安全网络安全安全行业

2023-07-11 14:13:04

技术会谈

2021-12-24 10:29:28

SpringJava微服务

2024-01-08 13:40:00

并发安全• 数量

2021-09-12 17:23:57

canvas动画函数
点赞
收藏

51CTO技术栈公众号