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 empty1.3 那非空目录怎么删bash# 方法1rm -rf最常用 rm -rf not_empty # 强制删除里面不管有多少东西全删光 # 方法2先清空再 rmdir不推荐太麻烦 rm not_empty/* rmdir not_empty1.4rmdir的实际用处说实话工作中几乎不用rmdir因为大家图方便都是rm -rf一把梭。唯一有用场景写脚本时判断一个目录是不是空的。bash# 如果是空目录就删掉 rmdir some_dir 2/dev/null echo 删除了空目录rm -rf中的 -rf是什么意思-rf是两个参数的合写拆开看就很好记一、拆解参数全称含义-rrecursive递归把目录里的子目录、文件全翻出来-fforce强制不询问、不报错所以rm -rf 递归 强制删除二、对比演示2.1 不加参数删目录会报错bashrm test_dir/ # rm: cannot remove test_dir/: Is a directory # rm 默认只能删文件不能删目录2.2 只加-r递归删但会挨个问bashrm -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安静地全部删光bashrm -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.txtrm -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 加-的含义bashrm -rf test/ # -r 和 -f 是参数告诉 rm 怎么删以-开头的叫选项option或参数flag作用是修改命令的行为位置可以放在命令后面、文件前面2.2 不加-的含义bashrm 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.txtrf文件名叫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这个目录bashrm -rf /home2. 你手滑打成了什么你不小心在/后面多打了一个空格bashrm -rf / home3.系统是怎么理解这个命令的rm命令不看“人类语义”它只看空格分隔出来的参数。对于rm -rf / home系统是这样拆解的参数1-rf(选项强制递归)参数2/(告诉系统从根目录开始删)参数3home(告诉系统删完根目录后再删当前目录下叫 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后面什么(me)也没有或仅有空格执行后是什么这个问题问得很有安全意识答案是什么都不会发生命令会报错。一、rm -rf后面什么都不跟bashrm -rf结果textrm: missing operand Try rm --help for more information.解释operand就是操作对象。rm命令要求必须告诉它要删什么没给就报错退出。二、rm -rf后面只有空格bashrm -rf # 注意-f 后面有空格结果同上报错missing operand解释空格只是分隔符rm读取参数时会自动跳过空白所以结果等同于什么都没写。三、特殊情况rm -rf 或rm -rf bashrm -rf # 空字符串作为参数结果textrm: 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/hadoopC:\Users\hadoop\cd ~点击此电脑 → 用户 → hadoop~/.bashrcC:\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 配置文件bashsudo vi /etc/ssh/sshd_config修改参数找到PermitRootLogin这行如果没有就自己加上将值改为noiniPermitRootLogin no重启服务生效bashsudo systemctl restart sshd注意如果sshd_config里写的是PermitRootLogin prohibit-password那是“允许密钥登录但禁止密码登录”比直接no稍微方便一点但最严格的是改成no。 进阶加固限制su命令即使禁止了远程登录如果你的普通用户密码泄露对方登录后输入su -并输入 Root 密码还是能提权。可以限制只有特定组的成员才能切换到 Root编辑 PAM 配置文件bashsudo vi /etc/pam.d/su找到#auth required pam_wheel.so use_uid这一行去掉开头的#注释iniauth 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 等带外管理进入依然可以操作。