为啥Linux的命令 rm 没有回收站呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥Linux的命令 rm 没有回收站呢?相关的知识,希望对你有一定的参考价值。

参考技术A

rm 是一个明确的命令, 即删除 文件。操纵计算机, 输入命令的是人. 人需要对操作负责. 您可以备份, 快照, 或者用其他的工具避免误删除. 但最终, 还是要将文件真正删除的. rm 就是这个命令。我们可以想象下, windows 下的删除, 文件进入了回收站, 那么清空回收站之后呢. 是否需要为清空回收站再建立一个"垃圾场" ?

rm 是基础命令,回收站对应的基础命令是mv 或者cp然后rm,本质上是把文件移到一个固定的不显眼的地方,是比rm更高一级的封装。linux 中的很多命令都是非常基础命令,它只实现单一功能,不会过多的为用户考虑,回收站的功能应该属于更高一级,不是和rm这种属于同一级的。当你删除你自己的文件时, 因为这个文件是你的, 所以你应该知道自己在做什么,你要为你的行为负责,所以, 简单来说, Linux是为"负责任的人"设计的。

有一种风格叫 worse is better ,简单的来说就是能够实现比尽善尽美更重要。rm 的实现应该比设计回收站简单不少。在 linux 并不是面向普通用户的情况下, linux 自身不提供回收站也可以理解。并且 linux 的一些发行版(不知道能不能算是面向普通用户了)中是有回收站的(无论是图形界面中删除的回收站,还是 trash-cli )。linux 本身设计回收站只是在目标明确下使用了合适的取舍。

可以用alias设置一下,没什么必要就是了。现在我在win上也不用回收站了,为了满足自己对内存的执念一直是shift+delete完事。rm也是同样的操作。至于说删完没后悔过肯定是假的,在命令行里尤甚,一个操作失误就能带来不可挽回的后果(血泪教训)。写慢点,回车前review一下很有必要

参考技术B 是因为这个命令里面本来就没有,你是不是没有看到回收站,回收站是在右下角点击左键就可以了。 参考技术C 可能是你这个命令不太正确,而且也确实有的没有回收站,没有回收站,一般是有着信息处理站的。 参考技术D 这个命令需要重新激活一下程序才可以有回收站,并且需要先执行删除的指令,才能够彻底进入回收站。

禁用rm命令,使用mv命令给linux建立回收站

把rm命令转换成mv命令,不能使用-r 参数,会报出一个错误,因为mv命令没有-r参数,下面是方法:

  • 在用户主目录下创建一个隐藏文件夹~/.trash作为垃圾回收站
    [[email protected] shellXT]# mkdir -p ~/.trash
  • 写一个脚本
    
    [[email protected] tmp]# vim ~/.bashrc 

#设置别名,rm是删除文件,rl是查看回收站,ur是恢复文件
alias rm=‘trash‘
alias rl=‘trashlist‘
alias ur=‘undelfile‘
#替换rm指令移动文件到~/.trash/中
trash()
{
mv [email protected] ~/.trash/
}
#显示回收站中垃圾清单
trashlist()
{
echo -e "33[32m==== Garbage Lists in ~/.trash/ ====33[0m"
echo -e "\a33[33m----Usage------33[0m"
echo -e "\a33[33m-1- Use ‘cleartrash‘ to clear all garbages in ~/.trash!!!33[0m"
echo -e "\a33[33m-2- Use ‘ur‘ to mv the file in garbages to current dir!!!33[0m"
ls -al ~/.trash
}
#找回回收站相应文件
undelfile()
{
mv -i ~/.trash/[email protected] ./
}
#清空回收站
cleartrash()
{
echo -ne "\a33[33m!!!Clear all garbages in ~/.trash, Sure?[y/n]33[0m"
read confirm
if [ $confirm == ‘y‘ -o $confirm == ‘Y‘ ] ;then
/bin/rm -rf ~/.trash/
/bin/rm -rf ~/.trash/.
2>/dev/null
fi
}

- 在命令行下面刷新一下环境配置,即可生效:

[[email protected] ~]# source ~/.bashrc


- source命令的作用就是用来执行一个脚本,那么:
source a.sh 同直接执行 ./a.sh 有什么不同呢,比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,如果你用source来执行 ,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结构并没有反应到父shell里,但是source不同它就是在本shell中执行的,所以可以看到结果

以上是关于为啥Linux的命令 rm 没有回收站呢?的主要内容,如果未能解决你的问题,请参考以下文章

将linux下的rm命令改造成移动文件至回收站

linux下rm命令修改,增加回收站功能笔记

Linux下禁用rm命令之建立回收站 𫌡

Linux下禁用rm命令之建立回收站 񮜞

Linux下禁用rm命令之建立回收站 𑯄

linux中使用rm命令将文件移到回收站的方法