rmdir命令只能删除空目录,非空目录需用rm -rf强制删除。
rm -rf中-r表示递归删除子目录,-f表示强制不提示,组合使用会直接删除指定路径下的所有内容,危险性极高。
误操作如
rm -rf /会删除根目录导致系统崩溃。
家目录(如
/home/user)是用户的私人文件夹,用~快速访问。
禁用root用户远程登录需修改
/etc/ssh/sshd_config,设置PermitRootLogin no并重启SSH服务,同时建议配置sudo权限的普通用户作为管理账户,避免系统锁定风险。
操作前务必确认路径,防止误删关键数据。
rmdir —— 真的只能删空目录
1.1 结论
是的,rmdir 只能删除空目录,目录里但凡有一个文件或子目录(包括隐藏文件),就会报错。
1.2 验证
bash
# 创建空目录 mkdir empty_dir rmdir empty_dir # ✅ 成功,没任何提示 # 创建非空目录 mkdir not_empty touch not_empty/a.txt rmdir not_empty # ❌ 报错:rmdir: failed to remove 'not_empty': Directory not empty
1.3 那非空目录怎么删?
bash
# 方法1:rm -rf(最常用)
rm -rf not_empty # 强制删除,里面不管有多少东西全删光
# 方法2:先清空,再 rmdir(不推荐,太麻烦)
rm not_empty/* && rmdir not_empty
1.4 rmdir 的实际用处
说实话,工作中几乎不用 rmdir,因为大家图方便都是 rm -rf 一把梭。
唯一有用场景:写脚本时判断一个目录是不是空的。
bash
# 如果是空目录就删掉
rmdir some_dir 2>/dev/null && echo "删除了空目录"
rm -rf中的 -rf是什么意思
-rf 是两个参数的合写,拆开看就很好记:
一、拆解
| 参数 | 全称 | 含义 |
|---|---|---|
-r | recursive | 递归(把目录里的子目录、文件全翻出来) |
-f | force | 强制(不询问、不报错) |
所以 rm -rf = 递归 + 强制删除
二、对比演示
2.1 不加参数删目录(会报错)
bash
rm test_dir/ # rm: cannot remove 'test_dir/': Is a directory # rm 默认只能删文件,不能删目录
2.2 只加 -r(递归删,但会挨个问)
bash
rm -r test_dir/ # rm: descend into directory 'test_dir'? y # rm: remove regular file 'test_dir/a.txt'? y # rm: remove regular file 'test_dir/b.txt'? y # rm: remove directory 'test_dir'? y # 每删一个都要按 y,烦死
2.3 加 -rf(安静地全部删光)
bash
rm -rf test_dir/ # 没有任何提示,直接删完
三、-f 强制的作用
| 场景 | 不加 -f | 加 -f |
|---|---|---|
| 文件不存在 | 报错:No such file or directory | 静默,不报错 |
| 只读文件 | 询问:remove write-protected file? | 直接删,不问 |
| 删除目录 | 需要 -r,且挨个问 | -rf 组合,安静删 |
四、记忆技巧
r = 递归(Recursive)钻进去
f = 强制(Force)不废话
合起来 = 钻进去全部删光,不问不报错
前端类比:rm -rf 相当于 localStorage.clear(),一键清空,没有确认弹窗。
五、⚠️ 危险警告
rm -rf 是 Linux 里最危险的命令,因为:
-
不回收站
-
不确认
-
删了就没了
bash
# 著名惨案:误删根目录
rm -rf / # 系统没了
rm -rf / home # 手滑多打空格,删了根目录
安全习惯:
bash
# 删除前先看一眼
ls -la 要删的目录
# 或者用交互模式
rm -ri 要删的目录 # i = interactive,会问你
# 绝对不要用 root 用户执行 rm -rf,除非你确定自己在干什么
总结一句话
-r 让它能删目录,-f 让它不废话不报错 → 合起来就是"静默递归核弹"
rf只删当前路径下的文件吧,还有加不加-有区别吗
一、rm -rf 删的是哪里的文件?
结论:rm -rf 后面跟什么路径,就删什么路径
| 写法 | 删除范围 |
|---|---|
rm -rf file.txt | 删当前目录下的 file.txt |
rm -rf /home/hadoop/test/ | 删 /home/hadoop/test/ 整个目录 |
rm -rf * | 删当前目录下的所有文件和目录 |
rm -rf ./* | 同上,显式写法 |
rm -rf / | 删整个系统(灾难) |
验证
bash
# 当前目录结构
/home/hadoop/
├── a.txt
└── subdir/
└── b.txt
# 当前在 /home/hadoop
cd /home/hadoop
# 只删当前目录下的 a.txt
rm -rf a.txt # a.txt 没了,subdir 还在
# 删 subdir 目录(不管在哪)
rm -rf /home/hadoop/subdir # 用绝对路径,也能删
记忆:rm -rf 只认路径,不认"当前目录"还是"其他目录"。你不写路径,它就默认删当前目录下的东西。
二、加不加 - 有区别吗?
结论:区别巨大!加 - 是"参数/选项",不加 - 就是普通的文件名/目录名
2.1 加 - 的含义
bash
rm -rf test/ # -r 和 -f 是参数,告诉 rm 怎么删
-
以
-开头的叫选项(option)或参数(flag) -
作用是修改命令的行为
-
位置可以放在命令后面、文件前面
2.2 不加 - 的含义
bash
rm rf test/ # 这会删三个东西:rf 和 test/
-
没加
-的rf会被当作要删除的文件名 -
系统会去找名叫
rf的文件并删掉
2.3 实战验证
bash
# 创建测试文件 touch rf touch test.txt # 错误写法:没加 - rm rf test.txt # 这会删除文件 "rf" 和 "test.txt"(把 rf 当文件名了) # 正确写法:加 - rm -rf test.txt # -r 和 -f 是参数,test.txt 是要删的文件
2.4 特殊情况:要删的文件名本身以 - 开头
bash
# 创建了一个奇怪文件叫 -rf
touch -- -rf # -- 告诉命令"后面的东西不是参数"
# 正常删除会报错
rm -rf # 报错:rm: missing operand
rm -rf -rf # 还是报错,第一个 -rf 被当参数了
# 正确删除方法
rm -- -rf # -- 表示"选项结束",后面的是文件名
# 或者
rm ./-rf # 用路径告诉系统这是文件
三、加 - 与不加 - 对比表
| 写法 | 含义 | 例子 |
|---|---|---|
-r | 参数(递归) | rm -r dir/ |
-f | 参数(强制) | rm -f file.txt |
rf | 文件名(叫"rf"的文件) | rm rf → 删文件 rf |
-rf | 两个参数合写 | rm -rf dir/ |
常见的参数写法规则
bash
# 1. 分开写 rm -r -f dir/ # 2. 合并写(最常用) rm -rf dir/ # 3. 放在文件后面也可以(但不推荐) rm dir/ -rf # 等价于 rm -rf dir/ # 4. -- 表示"后面不是参数" rm -- -rf # 删文件名叫 -rf
四、记忆技巧
-开头的是给命令看的指令(参数)
没有-的是给命令删的文件名
--是"别分析了,后面就是文件名"
前端类比:
javascript
// rm -rf 相当于
rm.execute({ recursive: true, force: true }, 'target')
// 不加 - 的 rf 相当于
rm.execute('rf', 'target') // 试图删一个叫 rf 的文件
五、总结一句话
| 问题 | 答案 |
|---|---|
rm -rf 只删当前目录? | ❌ 删你指定的路径,不指定就默认当前目录 |
加不加 - 有区别吗? | ✅ 天壤之别:加 - 是参数,不加是文件名 |
安全提示:敲 rm -rf 之前,先 ls 看一眼要删什么,特别是用 * 通配符的时候!
# 著名惨案:误删根目录
rm -rf / # 系统没了
rm -rf / home # 手滑多打空格,删了根目录
为什么第二个也是删全部
你抓到了一个非常关键的细节!这确实是无数程序员手滑踩过的大坑。
第二个之所以也是删全部,根本原因在于:空格在命令行里是“分隔符”。
让我们来拆解一下这个灾难现场:
1. 你心里想的是什么?
你本来想删除 home 这个目录:
bash
rm -rf /home
2. 你手滑打成了什么?
你不小心在 / 后面多打了一个空格:
bash
rm -rf / home
3. 系统是怎么理解这个命令的?
rm 命令不看“人类语义”,它只看空格分隔出来的参数。
对于 rm -rf / home,系统是这样拆解的:
-
参数1:
-rf(选项:强制递归) -
参数2:
/(告诉系统:从根目录开始删) -
参数3:
home(告诉系统:删完根目录后,再删当前目录下叫 home 的文件/目录)
4. 为什么删光了?
因为 / 是万恶之源。
当你给了 rm -rf 后面加上 /,它的意思是:“递归强制删除根目录下的所有内容”。一旦这个指令发出去,操作系统会立刻开始销毁自己,后面的 home 根本没有机会被执行,因为系统在执行到 home 之前就已经崩溃或者把所有文件删光了。
5. 前端类比(秒懂版)
这就像你写了一个 JavaScript 函数:
javascript
// 你本想删除数组里的 'home' 这一项
// rm -rf /home
// 结果你手滑写成了:
// rm -rf / home
function rm_rf(path) {
if (path === '/') {
// 卧槽,你传了 '/'
// 于是它执行了:
delete_all_files_on_hard_drive(); // 把整个硬盘删光!
return; // 函数直接结束,下面的代码不跑了
}
delete(path); // 正常删除 home 的逻辑根本跑不到这里
}
总结:血泪教训
-
rm -rf / home= “把根目录/删了,顺便把home也删了” -
因为
/是最高优先级的目标,删完/系统就没了,所以必死无疑。
程序员保命三连:
-
禁用 root 用户:日常用普通用户,权限不够就删不了
/。 -
用相对路径:在
/home/hadoop目录下,直接写rm -rf test/,而不是rm -rf /home/hadoop/test。 -
养成好习惯:输入
rm -rf /或者rm -rf /*之前,深呼吸三秒,确认自己没有手抖。
rm -rf ~/ 其中的 ~/是什么意思
~/ 是当前用户家目录的快捷写法。
一、拆解说明
| 符号 | 含义 | 在你电脑上代表 |
|---|---|---|
~ | 当前用户的家目录 | /home/mumu |
/ | 路径分隔符 | 表示家目录下面 |
~/ | 家目录本身(以及里面的所有内容) | /home/mumu/ |
二、实际效果
bash
rm -rf ~/
这条命令的意思是:删除你当前用户家目录下的所有文件和文件夹。
在 WSL Ubuntu 上执行,会删掉:
/home/mumu/
├── bigdata/ ← 你的学习项目
├── .bashrc ← 个人配置
├── .ssh/ ← SSH 密钥
├── .cursor-server/ ← Cursor 配置
└── ... (所有东西)
三、~ 的各种用法
| 写法 | 含义 | 示例 |
|---|---|---|
~ | 自己的家目录 | cd ~ → 回到 /home/mumu |
~/ | 家目录下的内容 | ls ~/ → 列出家目录所有文件 |
~/bigdata | 家目录下的 bigdata 文件夹 | cd ~/bigdata |
~/.bashrc | 家目录下的 .bashrc 文件 | vim ~/.bashrc |
~用户名 | 其他用户的家目录 | ls ~hadoop → 看 hadoop 的家目录 |
四、为什么 rm -rf ~/ 非常危险?
| 危险等级 | 说明 |
|---|---|
| ⚠️ 极度危险 | 会删除你所有个人文件、配置、代码、密钥 |
对比其他危险命令:
| 命令 | 后果 |
|---|---|
rm -rf ~/ | 删除当前用户的所有个人数据 |
rm -rf / | 删除整个系统(需要 sudo) |
rm -rf ~ | 同上(~ 和 ~/ 效果一样) |
rm -rf . | 删除当前目录及子目录 |
五、安全使用建议
删除前先预览
# 想看自己家目录下有什么
ls -la ~/
# 想看家目录下 bigdata 文件夹有多大
du -sh ~/bigdata
更安全的删除方式
# 1. 先进入家目录,看清楚再删
cd ~
ls -la
# 确认无误后,删除指定目录
rm -rf bigdata/ # 只删 bigdata,不删其他
# 2. 使用交互模式(会挨个问你)
rm -ri ~/some_dir/
设置别名防止手滑
# 在 ~/.bashrc 中添加
alias rm='rm -i' # 让 rm 默认变成交互模式
# 生效
source ~/.bashrc
六、你之前的问题上下文
回顾你之前问的 rm -rf / home 和 rm -rf ~/:
| 命令 | 后果 |
|---|---|
rm -rf / home | 删根目录 + 删 home(极危) |
rm -rf ~/ | 删你所有个人数据(很危) |
rm -rf / | 删整个系统(核弹级,需要 sudo) |
总结一句话
~/= 你的家目录(/home/mumu),rm -rf ~/会删掉你所有个人文件、代码、配置。
在 WSL 里跑这条命令,你的学习环境和配置就全没了。
如果rm -rf后面什么(me)也没有,或仅有空格,执行后是什么
这个问题问得很有安全意识!答案是:什么都不会发生,命令会报错。
一、rm -rf 后面什么都不跟
bash
rm -rf
结果:
text
rm: missing operand Try 'rm --help' for more information.
解释:operand 就是操作对象。rm 命令要求必须告诉它"要删什么",没给就报错退出。
二、rm -rf 后面只有空格
bash
rm -rf # 注意:-f 后面有空格
结果:同上,报错 missing operand
解释:空格只是分隔符,rm 读取参数时会自动跳过空白,所以结果等同于什么都没写。
三、特殊情况:rm -rf "" 或 rm -rf ''
bash
rm -rf "" # 空字符串作为参数
结果:
text
rm: cannot remove '': No such file or directory
解释:空字符串是一个合法的"文件名"(虽然不存在),rm 会尝试删除它,然后报找不到。
四、对比总结表
| 命令 | 结果 | 危险程度 |
|---|---|---|
rm -rf | ❌ 报错:missing operand | 安全(没删任何东西) |
rm -rf (有空格) | ❌ 同上 | 安全 |
rm -rf "" | ❌ 报错:文件不存在 | 安全 |
rm -rf / | 💀 删光整个系统 | 核弹级 |
rm -rf * | ⚠️ 删当前目录所有内容 | 危险 |
rm -rf ./* | ⚠️ 同上 | 危险 |
五、为什么不会误删?
rm -rf 的设计要求必须指定目标,这个限制本身就是一道安全防线。
bash
# 可以理解为 rm 在问: "你要删什么?我没收到参数,不执行。"
前端类比:
javascript
// rm -rf 相当于
function rm_rf(target) {
if (target === undefined) {
throw new Error('missing operand'); // 必须传参数
}
deleteAll(target);
}
rm_rf(); // 报错,不执行
rm_rf('/'); // 💀 炸了
六、真正危险的写法
| 写法 | 解释 |
|---|---|
rm -rf / | 根目录,系统毁灭 |
rm -rf /* | 根目录下所有文件 |
rm -rf . | 当前目录及子目录全删(. 表示当前目录) |
rm -rf .. | 父目录全删 |
rm -rf ~ | 用户家目录全删 |
rm -rf $empty_var | 变量为空时变成 rm -rf,会报错(但如果是 rm -rf /$empty_var 就炸了) |
变量陷阱示例:
bash
#!/bin/bash
DIR="" # 变量为空
rm -rf /$DIR # 实际执行了 rm -rf / 💀💀💀
总结一句话
rm -rf后面不跟路径 = 报错不执行,这是它的安全机制。真正的危险是跟了/、*或者空变量。
养成习惯:删东西之前先 ls 看一眼,确认了再删。
用户家目录是什么意思
用户家目录 = 用户的"私人房间"
家目录是每个用户在 Linux 系统中自己的专属文件夹,用来存放个人文件、配置、程序等。
一、直观理解
| 概念 | 类比 |
|---|---|
| 家目录 | 你的卧室(只有你能随便进) |
根目录 / | 整栋楼(所有人共用) |
| 其他用户的家目录 | 邻居的房间(你不能随便进) |
二、具体位置
| 用户 | 家目录路径 | 说明 |
|---|---|---|
| root(超级管理员) | /root | 在根目录下 |
| 普通用户(如 hadoop) | /home/hadoop | 在 /home 下 |
| 普通用户(如 oracle) | /home/oracle | 同上 |
| 你刚创建的用户(如 zhangsan) | /home/zhangsan | 同上 |
bash
# 家目录结构示例 / ├── home/ │ ├── hadoop/ ← hadoop 的家目录 │ ├── oracle/ ← oracle 的家目录 │ └── zhangsan/ ← zhangsan 的家目录 ├── root/ ← root 的家目录(不在 /home 下) ├── etc/ ├── var/ └── ...
三、如何快速进入/表示家目录
| 写法 | 含义 | 示例 |
|---|---|---|
cd ~ | 波浪号代表家目录 | cd ~ → 回到自己家 |
cd | 直接 cd 不加路径 | cd → 也回自己家 |
cd ~/test | 进家目录下的 test 文件夹 | cd ~/test |
$HOME | 环境变量,也是家目录 | cd $HOME |
~hadoop | 代表 hadoop 用户的家目录 | ls ~hadoop |
验证:
bash
# 当前登录用户是 hadoop echo $HOME # 输出:/home/hadoop cd ~ pwd # 输出:/home/hadoop
四、家目录的特点
| 特点 | 说明 |
|---|---|
| 私人专属 | 普通用户默认只能读写自己的家目录 |
| 登录即进 | SSH 登录后,默认就在自己的家目录 |
| 波浪号简写 | ~ 代表自己的家目录 |
| 权限隔离 | drwx------(700),默认只有自己能进去 |
| 存放个人配置 | .bashrc、.ssh/、.profile 等配置文件都在这里 |
bash
# 查看家目录权限 ls -ld /home/hadoop # 输出:drwx------ 3 hadoop hadoop 4096 日期 /home/hadoop # ↑ 只有 hadoop 自己能读写执行
五、常用操作
bash
# 1. 回到家目录 cd ~ # 或 cd # 2. 在家目录下创建文件夹 mkdir ~/myworkspace # 3. 查看家目录下的所有文件(包括隐藏文件) ls -la ~ # 4. 查看家目录占用空间 du -sh ~ # 5. 去别人的家目录(需要有权限) cd /home/oracle # 一般进不去,权限不够 sudo cd /root # 需要 root 权限
六、前端类比
| Linux | 前端类比 |
|---|---|
家目录 ~ | 用户个人文件夹(C:\Users\你的名字\) |
/home/hadoop | C:\Users\hadoop\ |
cd ~ | 点击"此电脑 → 用户 → hadoop" |
~/.bashrc | C:\Users\hadoop\.bashrc(配置文件) |
Windows 对比:
-
Linux 家目录:
/home/用户名 -
Windows 家目录:
C:\Users\用户名
七、面试/考试常考
bash
# 问:以下命令分别会进哪个目录? cd ~ # 当前用户的家目录 cd ~/data # 当前用户家目录下的 data 文件夹 cd ~root # root 用户的家目录(/root) cd # 当前用户的家目录(等价于 cd ~) cd $HOME # 也是家目录($HOME 环境变量)
总结一句话
家目录 = 用户在 Linux 系统中的私人文件夹,路径是
/home/用户名(root 除外),用~快速回到自己家。
你现在登录的是 hadoop 用户,所以你的家目录是 /home/hadoop,输入 cd ~ 就能回去!
怎么禁用root用户
“禁用 root 用户”在 Linux 系统里,通常不是指删除它(删不掉,删了系统会崩),而是禁止它从远程登录。
核心方法如下,操作时请确保自己有一个能使用 sudo 的普通用户。
🛡️ 核心操作:禁止 Root 远程登录
这是服务器安全的第一步,防止黑客用 Root 密码暴力破解。
-
编辑配置文件
使用普通用户登录,执行以下命令打开 SSH 配置文件:bash
sudo vi /etc/ssh/sshd_config
-
修改参数
找到PermitRootLogin这行,如果没有就自己加上,将值改为no:ini
PermitRootLogin no
-
重启服务生效
bash
sudo systemctl restart sshd
注意:如果
sshd_config里写的是PermitRootLogin prohibit-password,那是“允许密钥登录但禁止密码登录”,比直接no稍微方便一点,但最严格的是改成no。
🔐 进阶加固:限制 su 命令
即使禁止了远程登录,如果你的普通用户密码泄露,对方登录后输入 su - 并输入 Root 密码,还是能提权。
可以限制只有特定组的成员才能切换到 Root:
-
编辑 PAM 配置文件:
bash
sudo vi /etc/pam.d/su
-
找到
#auth required pam_wheel.so use_uid这一行,去掉开头的#注释:ini
auth required pam_wheel.so use_uid
-
保存文件后,只有
wheel组的成员才能使用su -切换到 Root。bash
# 将当前用户加入 wheel 组 sudo usermod -aG wheel $USER
退出终端重新登录后,组权限才会生效。
⚠️ 操作前必读
-
保留一个“逃生舱”
在关闭 Root 登录前,务必确保有一个普通用户可以正常使用sudo提权。如果普通用户没配好,一旦退出 Root 终端,你就再也进不去系统了。 -
慎用
passwd -l root
这是锁定 Root 密码的命令。在没有sudo用户且单用户模式也没开的情况下执行,系统就直接“变砖”了。不建议初学者使用。 -
理解“禁用”的边界
这些操作主要限制的是 SSH 远程登录 和su切换。如果人坐在物理机前,或者能通过 IPMI 等带外管理进入,依然可以操作。

1万+

被折叠的 条评论
为什么被折叠?



