linux下安全的执行rm

本文介绍了一种安全删除Linux系统文件的方法,通过将rm命令替换为mv命令或将文件移动到指定的.trash目录,甚至使用trash-cli工具将文件放入Gnome回收站,避免误删导致的数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载时请注明出处和作者联系方式
文章出处:http://blog.youkuaiyun.com/jack0106 
作者联系方式:冯牮 fengjian0106@yahoo.com.cn

 

前两天有个同事在命令行下面执行rm的时候,不小心删除了很多系统文件,搞得系统崩溃了,我们想过恢复ext4文件系统,但是没有成功,最终还是重装电脑。我之前也犯过同样的错误,所以再总结一下

 

1. 最简单的办法,将rm替换为mv,方法如下:

 

在~/.bashrc 文件里追加下面一段,然后刷新该文件 source ~/.bashrc 即可。使用rm命令的时候就会把文件移动到指定的文件夹~/.trash下 

 

 

 

 

这种方法虽然简单,但是还不够灵活,而且这个rm命令,不能处理命令行选项。

 

2. 第一种方法的改进,可以参考此帖http://iregex.org/blog/safer-rm-command.html

不足的地方----仍然是不能处理rm的命令行选项。

 

3. 提供一个和rm兼容的工具,选项参数和rm保持一致。(这个代码我还没有找到,我也没有自己去写,因为,后面还有更好的方法)

不足的地方----本来这种方法已经没有不足了,但是,gnome图形环境下,是有回收站的,我们还可以更好的和回收站整合

 

4. 提供一个和rm兼容的工具,选项参数和rm保持一致,并且,文件会被删除到gnome的回收站中(gnome回收站的路径是~/.local/share/Trash  其中还包含2个或多个子路径,回收站里面不仅保存文件,还保存执行删除操作时的一起额外信息,比如原始路径和删除的时间),这样的话,在图形环境下,也可以察看被删除的文件,并且可以恢复。

 

 

这个工具已经有了,不需要我们自己造轮子,在ubuntu下执行sudo apt-get install trash-cli,然后就会得到trash这个命令行工具,看一下它的帮助信息,和容易就可以使用了

 

trash --help

Usage: trash [OPTION]... FILE...

 

Put files in trash

 

Options:

  --version            show program's version number and exit

  -h, --help           show this help message and exit

  -d, --directory      ignored (for GNU rm compatibility)

  -f, --force          ignored (for GNU rm compatibility)

  -i, --interactive    ignored (for GNU rm compatibility)

  -r, -R, --recursive  ignored (for GNU rm compatibility)

  -v, --verbose        explain what is being done

 

 

 

 

5. 如果要重新造轮子,怎么造?

这就要用到glib中的gio模块,在gio中,文件都是用GFile来表示的,GFile有一个函数,就是把文件删除到回收站中,函数如下:

 

 

要自己造轮子,就要用到这个函数,还可以进一步深入,这个函数的内部,是如何实现的?这个函数的内部,调用到了glocalfile.c中的另外一个函数,如下:

 

 

可以用c编码,也可以用python编码,其实前面提到的trash工具,就是用python编写的。

 

 

 

<think>好的,我现在需要解决的问题是:如何在Linux系统中设置执行rm命令时默认执行rm -i,也就是让系统在删除文件前提示确认。我之前可能听说过可以通过别名或者修改环境配置来实现,但具体步骤不太确定,需要仔细理清楚。 首先,我记得Linux中的rm命令默认情况下是不会提示确认的,除非有特别的配置。而rm -i会在每次删除前询问用户是否确认,这样可以防止误删。用户的需求就是希望每次输入rm的时候,系统自动加上-i选项,这样更安全。 接下来,我需要确定如何让rm默认使用-i选项。通常,这可能涉及到修改用户的shell配置文件,比如bash的话是.bashrc或者.bash_profile,或者其他shell如zsh的配置文件。不同的shell有不同的配置文件,所以首先需要确认用户使用的是哪种shell。不过大多数情况下,用户可能在使用bash,所以可以先考虑bash的配置。 然后,我记得设置别名(alias)是一个常用的方法。例如,在.bashrc文件中添加一行alias rm='rm -i',这样每次输入rm时,实际上执行的是rm -i。但需要确认这样做是否有效,以及是否存在潜在的冲突。例如,如果系统本身已经在某个全局配置中设置了别名,可能会覆盖用户的设置。不过通常用户级别的配置文件优先级更高,所以应该是可行的。 另外,我还需要考虑是否系统本身已经配置了这样的别名。比如,在一些Linux发行版中,root用户可能默认就有alias rm='rm -i',而普通用户可能没有。所以用户可能需要自己添加这个别名。 步骤可能是这样的:首先,打开用户的shell配置文件,比如~/.bashrc,然后在文件末尾添加alias rm='rm -i',保存后,执行source ~/.bashrc使配置生效。或者重新打开终端,让新的配置生效。 不过,这里需要注意,如果用户之前已经自定义过rm的别名,可能会有冲突,需要检查是否已经存在相关设置。另外,如果用户希望这个设置对所有用户生效,可能需要修改全局配置文件,比如/etc/profile或/etc/bash.bashrc,但这通常需要管理员权限,并且可能会影响其他用户,所以一般建议仅在用户级别配置。 还有一个可能性是使用环境变量。例如,有些系统可能通过设置POSIX的选项或者某些特定的变量来改变rm的行为,但这种方法可能不如别名直接和常见。因此,使用别名可能是更简单有效的方式。 另外,需要提醒用户,这种别名设置只在交互式shell中有效。如果在脚本中使用rm,可能不会触发别名,因为脚本中的shell通常是非交互式的,并且可能不会读取用户的配置文件。因此,用户需要注意在脚本中如果需要提示,仍然需要显式使用rm -i,或者确保脚本中的shell配置加载了别名。 此外,用户可能想知道如何撤销这个设置,或者临时绕过别名。这时候,可以使用反斜杠转义命令,比如\rm file.txt,或者使用完整路径的rm命令,如/bin/rm file.txt,这样就不会调用别名了。 还有可能存在的一个问题是,如果用户同时使用了其他命令,比如trash-cli等替代rm的工具,这时候可能需要不同的配置方法,但问题中并没有提到这些,所以可以暂时不考虑。 总结一下,步骤应该是: 1. 打开用户的shell配置文件(如~/.bashrc)。 2. 添加别名alias rm='rm -i'。 3. 保存文件并重新加载配置或重启终端。 4. 测试输入rm命令是否提示确认。 此外,需要检查是否存在其他可能覆盖别名的配置,比如~/.bash_profile或~/.profile等,如果有的话,可能需要将别名添加在这些文件中,或者确保.bashrc被正确加载。 最后,可能需要注意不同的shell,比如如果用户使用zsh,配置文件是~/.zshrc,步骤类似。需要根据实际情况调整。</think>在Linux系统中,可以通过设置**别名(alias)**让`rm`命令默认以交互模式(`-i`选项)运行,即在删除前要求用户确认。以下是具体步骤: --- ### **步骤说明** 1. **编辑Shell配置文件** 根据你使用的Shell类型(如`bash`或`zsh`),修改对应的配置文件: - **Bash**:打开 `~/.bashrc` - **Zsh**:打开 `~/.zshrc` 使用文本编辑器(如`nano`或`vim`): ```bash nano ~/.bashrc # 以bash为例 ``` 2. **添加别名** 在文件末尾添加以下行: ```bash alias rm='rm -i' ``` 这表示当输入`rm`时,实际执行的是`rm -i`。 3. **使配置生效** 保存文件后,运行以下命令立即生效: ```bash source ~/.bashrc # 对应你修改的配置文件 ``` 或重新打开终端。 --- ### **验证是否生效** 输入`rm`命令尝试删除文件,若出现类似以下提示,则配置成功: ```bash rm: remove regular file 'example.txt'? ``` --- ### **注意事项** 1. **临时绕过别名** 若需临时使用原始`rm`(无确认提示),可通过以下方式: ```bash \rm example.txt # 使用反斜杠转义 或 /bin/rm example.txt # 使用完整路径 ``` 2. **脚本中的行为** 别名默认仅在交互式Shell中生效。脚本中直接调用`rm`时不会触发`-i`,需在脚本内显式指定`rm -i`。 3. **全局配置(需管理员权限)** 若要为所有用户设置,可修改全局配置文件(如`/etc/bash.bashrc`),但需谨慎操作。 --- ### **恢复默认设置** 删除配置文件中的别名行,并重新加载配置即可: ```bash source ~/.bashrc ``` 通过这种方式,你可以有效避免因误操作删除重要文件的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值