读“rm -rf/ 又引发了一个血案”之触动

本文介绍了一种在Linux系统中防止误删文件的方法,通过修改~/.bashrc文件中的alias命令,将rm命令的功能替换为将文件移至回收站目录(/tmp/recylebin)。此外,还提供了一种保留原有rm命令功能的同时实现文件回收的方法。

昨天在开源中国社区看到一篇文章:rm -rf/ 又引发了一个血案  http://www.oschina.net/news/72561/rm-rf

触动很深,虽然本人不是Linux管理员,不过在广大网友的评论中捕获了一条有用的信息,模拟Windows系统的

回收站功能,通过修改~/.bashrc里面alias给rm指定成mv功能,将原本要删除的文件移动到 /tmp/recylebin

里面,这样只需要偶尔专门清理该文件夹下内容,避免因误操作删除重要文件,于是就编写了个简单脚本实现该

功能如下所示:

#!/bin/sh

#filename:recylebin.sh

mv  -f  $*  /tmp/recylebin

该脚本功能就是将指定的所有文件移动到/tmp/recylebin目录下面,然后就修改了下根目录下的 ~/.bashrc文件,主要

添加了如下内容:

alias rm='/sh/recyclebin.sh'         //该脚本存储在根目录/sh中(手动创建)

然后再shell终端执行下source ~/.bashrc,修改立即生效,接下来就进行测试,一切就OK啦,好像这样就结束了,

但是注意到,要是需要清理/tmp/recyclebin目录,又要修改~/.bashrc文件,注释掉添加的内容,这样有点麻烦,于是

就想了另外一种折中的办法,rm功能保留进行如下修改:

alias rm='rm -i'     //删除文件是提示是否确认删除

alias del='/sh/recyclebin.sh'

然后再shell终端执行下source ~/.bashrc,这样以后就用del命令作为常用的删除操作,当需要清理回收站时就用rm

命令,方法有很多,主要还是需要养成良好的编程习惯,减少bug。

努力成长中... ...

<think>首先,用户的问题是:“递归删除非空目录/cat 的方法是()” 并给出了选项: A. del /cat/* B. rm -rf /cat C. rm -rf /cat/* D. rm -rf /cat/ 我需要回答这个问题,然后根据问题和我的回答提出3-5个相关问题。 问题是在问如何递归删除非空目录。在Linux或Unix系统中,递归删除目录及其内容通常使用`rm -rf`命令。 - `rm` 是删除命令。 - `-r` 或 `-R` 选项表示递归删除。 - `-f` 选项表示强制删除,不提示确认。 所以,正确的命令应该是`rm -rf /cat`。 现在,分析选项: A. del /cat/* — `del` 是Windows命令,不是Unix/Linux命令。而且它只删除目录下的文件,不会删除目录本身或子目录。 B. rm -rf /cat — 这应该删除整个`/cat`目录及其内容。选项`-rf`表示递归强制删除。 C. rm -rf /cat/* — 这会删除`/cat`目录下的所有文件和子目录,但不会删除`/cat`目录本身。因为`/*`匹配目录下的内容,而不包括目录。 D. rm -rf /cat/ — 这与B类似,但末尾有斜杠。在Unix/Linux中,目录路径末尾的斜杠通常不影响行为,`rm -rf /cat/`应该等同于`rm -rf /cat`,因为它指定的是同一个目录。 在Unix/Linux中,`/cat`和`/cat/`在大多数命令中是等价的,都指向同一个目录。`rm -rf /cat/`应该也能删除整个目录。 但标准写法通常是`rm -rf /cat`,没有末尾斜杠。 选项B是`rm -rf /cat`,选项D是`rm -rf /cat/`。两者都应该工作,但问题可能期望最标准的答案。 回顾问题:选项B是`rm -rf /catC` — 等等,用户输入是“B. rm -rf /catC”,这看起来像是打字错误。在用户消息中是: “B. rm -rf /catC” 但在上下文中,应该是“/cat”,而不是“/catC”。检查用户消息: “B. rm -rf /catC” 这可能是笔误。用户的问题中写的是“/cat”,但选项B是“rm -rf /catC”,这似乎多了个“C”。或许是“rm -rf /cat”,但写成了“/catC”。 在用户消息中是: “B. rm -rf /catC” 但目录是“/cat”,所以“/catC”可能是个错误。选项C和D有“/cat/*”和“/cat/”,所以B应该是“rm -rf /cat”。 我认为这是一个打字错误,应该是“rm -rf /cat”。 同样,选项A是“del /cat/*”,这是Windows命令。 所以,正确答案应该是B或D,但B有“/catC”,这不对。 用户输入: “B. rm -rf /catC” 这很可能是“rm -rf /cat”的笔误,因为“C”可能是多余的。或者它是“/cat”的一部分。 在上下文中,目录是“/cat”,所以选项B应该是“rm -rf /cat”。 我会假设这是一个错误,并认为B是“rm -rf /cat”。 现在,比较B和D: - B: rm -rf /cat - D: rm -rf /cat/ 两者在功能上应该相同。`rm -rf` 删除目录时,无论是否有末尾斜杠,效果一样。 但选项C: rm -rf /cat/* 只删除内容,不删除目录本身。 选项A: del /cat/* 是无效的,因为`del`不是标准Unix命令。 所以,B和D都是正确的,但问题可能只有一个正确答案。 在标准实践中,`rm -rf /cat` 更常见。 选项D是“rm -rf /cat/”,有末尾斜杠。 在`rm`命令中,末尾斜杠不影响行为。例如,`rm -rf dir` 和 `rm -rf dir/` 都删除`dir`目录。 但有一个细微差别:如果`/cat`是一个符号链接,`rm -rf /cat`会删除符号链接本身,而`rm -rf /cat/`会删除链接指向的目录内容。但在这个问题中,它指定为“目录”,所以应该是物理目录,不是符号链接。 问题说“非空目录/cat”,所以它应该是一个目录。 因此,B和D都应该工作。 但选项B被写为“rm -rf /catC”,这看起来像是个错误。 或许“C”是选项标签的一部分?不,选项是A、B、C、D,所以“B. rm -rf /catC” 意思是命令是“rm -rf /catC”,但目录是“/cat”,所以不一致。 用户消息是:“B. rm -rf /catC” 但上下文是删除“/cat”,所以可能是个打字错误,应该是“rm -rf /cat”。 同样,选项C是“rm -rf /cat/*”,D是“rm -rf /cat/”。 我认为最合理的答案是B,但写错了,或者是D。 另一个想法:选项B是“rm -rf /catC”,其中“C”可能是选项的一部分,但目录是“/cat”,所以命令“rm -rf /catC”会尝试删除一个名为“/catC”的目录,而不是“/cat”。所以如果目录是“/cat”,这不会工作。 但问题明确说“目录/cat”,所以选项B是错误的,因为它指定了不同的目录。 因此,选项B无效,因为它有“/catC”而不是“/cat”。 选项D是“rm -rf /cat/”,这应该删除“/cat”目录。 选项C是“rm -rf /cat/*”,只删除内容,不删除目录。 选项A无效。 所以正确答案应该是D: rm -rf /cat/ 但B如果正确写应该是正确的,但这里写错了。 在用户输入中,是“B. rm -rf /catC”,可能“C”是多余的,或者是“cat”的一部分。 但为了准确,我将基于文本判断。 或许“/catC”是“/cat”的笔误。 在回答中,我应该指出正确的命令。 标准命令是`rm -rf /cat`。 选项D是`rm -rf /cat/`,也正确。 但选项C`rm -rf /cat/*`不正确,因为它留下空目录。 例如: - `rm -rf /cat`:删除整个目录及其内容。 - `rm -rf /cat/*`:删除目录下的所有内容,但目录本身仍然存在(现在为空)。 所以对于删除目录本身,C不正确。 A不正确。 B有错误路径。 D正确。 所以答案应该是D。 在选项中,D是“rm -rf /cat/”,有末尾斜杠。 是的。 在一些系统中,末尾斜杠可能影响行为,如果目录是符号链接,但这里不是问题。 所以我认为D是正确答案。 现在,回答格式:我需要用中文回答,并解释。 然后,在末尾提出3-5个相关问题,以“§§相关问题§§”开头。 首先,回答问题。 正确选项是D. rm -rf /cat/ 但B如果正确写应该是正确的,但这里不是。 或许用户意指B是“rm -rf /cat”,但写错了。 但基于文本,D是正确的。 选项B是“rm -rf /catC”,这不对。 所以我会说D。 在我的回答中,解释为什么。 回答结构: - 解释递归删除非空目录的命令。 - 指出正确选项。 然后,相关问题。 相关问题应该基于用户的问题和我的回答,关于文件操作、命令等。 例如: 1. 递归删除目录时,使用 `rm -rf` 和 `rm -r` 有什么区别? 2. 在Linux中,如何安全地删除目录以避免误操作? 3. 如果目录包含只文件,`rm -rf` 能成功删除吗? 4. 除了 `rm`,还有哪些命令可以删除非空目录? 等等。 现在,写回答。</think>### 递归删除非空目录 `/cat` 的方法详解 在 Linux/Unix 系统中,递归删除非空目录需要使用能同时删除目录及其内容的命令。选项分析如下: - **A. `del /cat/*`**:`del` 是 Windows 命令,在 Linux/Unix 中无效,且仅能删除文件(不处理子目录或目录本身)。 - **B. `rm -rf /catC`**:路径错误(`/catC` 与目标目录 `/cat` 不匹配),无法正确删除指定目录。 - **C. `rm -rf /cat/*`**:仅删除 `/cat` 目录下的所有文件和子目录,但会保留空目录 `/cat` 本身,不符合“删除目录”的要求。 - **D. `rm -rf /cat/`**:正确选项。`rm` 是 Linux/Unix 删除命令,`-r`(递归)删除子目录和内容,`-f`(强制)忽略提示。末尾的 `/` 不影响行为,能完整删除目录 `/cat` 及其所有内容。 **正确命令示例**: ```bash rm -rf /cat/ # 递归强制删除目录 /cat 及其全部内容 ``` **注意事项**: - 使用 `rm -rf` 需谨慎,误操作可能导致数据丢失。 - 如果 `/cat` 是符号链接,`rm -rf /cat/` 会删除链接指向的目录内容(而非链接本身),但问题中指定为物理目录,不影响结果。 **答案:D**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值