目录
三、一个特殊但重要的格式:命令 --help 和 man 命令
(1)内部与外部命令
在Linux里,“内部命令”和“外部命令”这个区分,其实不是Linux内核定的,而是由你使用的“命令行解释器”(Shell,最常见的是bash)来定义的。
打个比方:Shell就像一个大管家。 内部命令是管家随身携带的“万能钥匙”,随时能用,速度极快。 外部命令是放在仓库(硬盘)里的“专用工具”,要用的时候管家得跑去仓库取出来,再拿回来用。
一、内部命令(Shell内置命令)
定义:这些命令的代码直接写在Shell(如bash)的程序内部。Shell一启动,它们就“常住内存”了。
特点:
-
速度极快:不需要去硬盘找文件,直接在内存里执行。
-
不占用独立进程:直接在当前的Shell进程中运行,不会产生新的子进程(相当于管家自己动手)。
-
无法用
which找到路径:因为它们根本不在硬盘上。
最常用的内部命令举例:
| 命令 | 作用 |
|---|---|
cd | 切换目录 |
pwd | 显示当前路径 |
echo | 在屏幕上输出文本 |
exit | 退出当前Shell |
kill(部分) | 发送信号(部分Shell内置了简化版) |
type | (重点) 用来判断一个命令是内部还是外部 |
read | 读取用户输入 |
alias | 设置命令别名 |
注意:
echo和kill既是内部命令,也有对应的外部版本(在/bin/echo和/bin/kill)。但Shell会优先使用内部版本,除非你强制指定外部路径。
二、外部命令(独立可执行程序)
定义:这些命令是存储在硬盘上的独立文件(通常是二进制程序或脚本),位于 /bin、/usr/bin、/sbin 等目录下。
特点:
-
需要读取硬盘:每次执行时,Shell需要去
PATH环境变量定义的目录里找到这个文件,然后加载到内存运行。 -
会创建新进程:Shell会“分叉”出一个新的子进程去执行它,执行完再销毁(相当于管家派个小工去仓库拿工具干活)。
-
有明确的路径:可以用
which或whereis看到它在硬盘上的具体位置。
最常用的外部命令举例:
| 命令 | 作用 | 通常路径 |
|---|---|---|
ls | 列出文件 | /usr/bin/ls |
cp | 复制文件 | /usr/bin/cp |
rm | 删除文件 | /usr/bin/rm |
grep | 文本搜索 | /usr/bin/grep |
vim | 文本编辑器 | /usr/bin/vim |
top | 查看系统状态 | /usr/bin/top |
python3 | Python解释器 | /usr/bin/python3 |
三、怎么快速区分它们?
别靠猜,用 type 这个内部命令来查,一查一个准。
在终端里敲:type 命令名
示例 1:查 cd
[root@localhost ~]# type cd cd is a shell builtin
看到 shell builtin,说明它是内部命令。
示例 2:查 ls
[root@localhost ~]# type ls ls is aliased to `ls --color=auto'
这里显示它是“别名”。如果你想看它的真实身份,加上 -a 参数:
[root@localhost ~]# type -a ls ls is aliased to `ls --color=auto' ls is /usr/bin/ls
第二行 ls is /usr/bin/ls,说明它本质上是个外部命令。
示例 3:查 which
[root@localhost ~]# type which which is /usr/bin/which
说明 which 本身是个外部命令(它在 /usr/bin/which)。
四、区分这两个概念的实际用处
-
写Shell脚本时的性能:如果循环里大量调用外部命令(如
ls、grep),每调用一次就要创建一次进程,非常消耗CPU。这种情况下,尽量用内部命令(如read、字符串处理功能)替代,脚本运行会快得多。 -
系统救援环境:如果你不小心删除了
/usr/bin/下的文件(比如删掉了ls),你可能会慌。但只要你还记得内部命令(如cd、echo、pwd),你就能在纯命令模式下用echo来查看环境变量,或用type来排查,依然能操作系统。 -
理解命令来源:当你在网上看到一个命令时,如果不知道它是自带功能还是需要额外安装软件,用
type一看就知道:如果是外部命令,路径在/usr/bin/,那可能是系统自带的;如果路径在/usr/local/bin/,那通常是你手动编译安装的。
五、对比总结表
| 对比维度 | 内部命令 (Builtin) | 外部命令 (External) |
|---|---|---|
| 存储位置 | 在Shell程序内部(内存) | 在硬盘上(/bin, /usr/bin等) |
| 执行速度 | 极快(无需读取硬盘) | 较慢(需要读取硬盘,创建进程) |
| 进程开销 | 无(在当前进程运行) | 有(会fork出子进程) |
| 是否可查路径 | 查不到(which查不出) | 可以(which、whereis都可查) |
| 判断命令 | type 命令 显示 shell builtin | type 命令 显示 是/usr/bin/... |
| 典型例子 | cd, pwd, echo, read | ls, cp, rm, grep, vim |
(2)命令格式
Linux命令的标准格式非常统一,可以用一个通用公式来概括:
命令名 [选项] [参数]
一、三个组成部分
1. 命令名(Command)—— 你要“干什么”
这是必须写的,代表你想执行的操作,比如 ls(列出)、cd(切换)、rm(删除)。 注意:Linux是严格区分大小写的!ls 和 LS 是完全不同的东西(LS通常不存在)。
2. 选项(Options)—— 怎么干(调节行为)
选项用来微调命令的“动作方式”,通常以 - 或 -- 开头。
-
短选项(单杠):一个减号加一个字母,比如
-l、-a、-h。 -
长选项(双杠):两个减号加一个单词,比如
--help、--all、--human-readable。
示例:
ls -l(以长格式列出),ls --help(查看帮助)。进阶窍门:短选项可以合并。比如
ls -l -a -h可以写成ls -lah(把字母攒在一起,省事)。但长选项不能合并,必须单独写,比如--all --human-readable。
3. 参数(Arguments)—— 对谁干(操作对象)
参数是命令作用的对象,通常是文件名、目录路径、用户名、IP地址等。
-
有些命令不需要参数(默认操作当前环境),比如
pwd、top。 -
有些命令必须带参数,比如
cd后面必须跟一个目录,否则它不知道该去哪。 -
有些命令可以带多个参数,比如复制命令:
cp 源文件 目标文件(这里就有两个参数)。
二、命令格式的“黄金法则”
为了让写出的命令“一次就通”,请记住这四条铁律:
-
顺序通常固定:标准顺序是
命令 -> 选项 -> 参数。虽然有些命令(如grep、find)顺序略微灵活,但按这个顺序写,99%的情况都不会错。 -
空格隔开:命令、选项、参数之间必须用空格隔开。千万不能连在一起写(比如
ls-l是错的,必须ls -l)。 -
大小写敏感:
-r和-R在Linux里是两码事(-r通常是递归倒序,-R是递归全部),写错了命令会报错。 -
选项可以放在参数后面吗? 可以,但容易混淆。为了养成好习惯,强烈建议统一把选项放在参数前面。例如:
ls -l /home(好习惯),而不是ls /home -l(虽然也能跑,但不规范)。
三、一个特殊但重要的格式:命令 --help 和 man 命令
如果看到一个新命令,不知道怎么给它配选项和参数,记住这个万能格式:
-
命令 --help:快速显示简短的用法说明,适合应急。例如ls --help。 -
man 命令:显示完整的“用户手册”(Manual),内容非常详细,是最高权威。按q退出,按/后输入关键词搜索。
看完帮助后,会发现它们的格式描述里有个“套路”,比如:
ls [OPTION]... [FILE]...
-
[]方括号表示可选项(可以写,也可以不写)。 -
...省略号表示可以写多个(比如可以接多个文件名)。 -
没有方括号的,就是必须写的参数。
四、典型例子
| 命令实例 | 拆解分析 |
|---|---|
ls -l /home | 命令ls,选项-l(长格式),参数/home(目标目录) |
cp -r dir1 dir2 | 命令cp,选项-r(递归复制),参数1dir1(源),参数2dir2(目标) |
grep -i "error" /var/log/messages | 命令grep,选项-i(忽略大小写),参数1"error"(搜索词),参数2/var/log/messages(目标文件) |
rm -rf /tmp/cache/ | 命令rm,选项-rf(组合:强制+递归),参数/tmp/cache/(要删除的目录) |
五、进阶细节
-
选项的“值”:有些选项后面必须跟一个值。比如
useradd -u 1001 用户名(-u选项后面必须跟一个数字ID)。这种写法叫“带参数的选项”。 -
参数里的空格怎么办? 如果你的文件名或路径里带有空格(比如
My Documents),必须用双引号或单引号括起来,否则Linux会把空格当成分隔符,导致命令出错。正确写法:ls "My Documents"。 -
--的妙用:有时你操作的文件名以-开头(比如文件名叫-f),直接写rm -f会被误认为是选项。这时候加两个横杠--表示“结束选项解析”,后面全是参数。例如:rm -- -f(意思是删除名为-f的文件)。
六、总结
Linux命令就像跟系统说话:先喊名字(命令),再说怎么干(选项),最后说要干谁(参数)。
(3)基础命令
模块一:日常高频基础操作
| 命令 | 核心用法 | 备注 |
|---|---|---|
ls | ls -lah(列出所有文件,含隐藏文件,大小易读,详细权限) | 最常用 |
cd | cd /etc、cd ..、cd ~ | 切换目录 |
pwd | pwd | 看自己身在何处 |
mkdir | mkdir -p a/b/c | 递归创建多级目录 |
cp | cp -r 源目录 目标目录 | 复制文件夹 |
mv | mv 旧名 新名 | 移动或改名 |
rm | rm -rf 目录/文件 | 慎用!强制递归删除 |
touch | touch file.txt | 新建空文件或更新修改时间 |
ln | ln -s 源文件 软链接名 | 创建软链接(快捷方式) |
模块二:文本查看与“三剑客”处理
| 命令 | 核心用法 | 备注 |
|---|---|---|
cat | cat file.txt | 查看小文件 |
less | less 大日志.log | 分页查看(按 / 搜索,按 q 退出) |
head / tail | tail -f 日志.log | -f 实时追踪日志(排障神技) |
grep | grep -r "404" /var/log/ | 在文件内容里搜索关键词(-r 递归) |
wc | wc -l file.txt | 统计文件有多少行 |
sort | sort file.txt | uniq -c | 排序后去重,并统计重复次数 |
cut | cut -d: -f1 /etc/passwd | 按冒号分割,取第一列(截取用户名) |
sed | sed -i 's/旧/新/g' file.txt | 文件内批量替换文本(极常用) |
awk | awk '{print $1, $3}' log.txt | 按空格分割,取第1和第3列(高级文本提取) |
模块三:systemd 服务管理
注:CentOS 7 以后都用这个管理服务,代替了以前旧的 service 命令。
| 命令 | 核心用法 | 备注 |
|---|---|---|
systemctl | systemctl status nginx | 查看服务运行状态(看是否启动了) |
systemctl start/stop/restart nginx | 启动/停止/重启服务 | |
systemctl enable/disable nginx | 设置开机自启/取消自启 | |
systemctl reload nginx | 平滑重载配置(不中断服务) | |
journalctl | journalctl -u nginx -f | 查看某个系统服务的详细日志(排障首选) |
模块四:网络排查与下载
| 命令 | 核心用法 | 备注 |
|---|---|---|
ip | ip addr 或 ip a | 查看所有网卡的 IP 地址(替代废弃的 ifconfig) |
ping | ping -c 4 baidu.com | 测试网络是否能连通外网 |
ss | ss -tuln | 查看系统当前开放的端口(如 80、443、22) |
lsof | lsof -i :8080 | 查端口被谁占了(神器!看 8080 端口被哪个进程占用) |
curl | curl -I http://localhost | 测试本地 Web 服务是否正常响应(-I 只显示响应头) |
wget | wget http://xxx.com/file.iso | 下载文件 |
traceroute | traceroute baidu.com | 追踪数据包经过的路由节点(排查网络故障) |
nslookup | nslookup baidu.com | 查询域名的 IP 解析记录(看 DNS 生效没) |
模块五:进程与资源监控
| 命令 | 核心用法 | 备注 |
|---|---|---|
top | top(按 1 看每个核心,按 q 退出) | 实时看 CPU/内存占用 |
htop | htop | 比 top 更好看(需要单独安装) |
ps | ps aux | grep nginx | 查看指定进程是否存在,及其 PID 号 |
kill | kill -9 PID号 | 强制杀死卡死的进程 |
free | free -h | 查看物理内存和 Swap 交换分区使用情况 |
uptime | uptime | 看系统开机多久,以及 1/5/15 分钟的平均负载 |
dmesg | dmesg | tail -20 | 查看系统内核级别的报错日志(排查硬件死机问题) |
模块六:磁盘与文件系统
| 命令 | 核心用法 | 备注 |
|---|---|---|
df | df -h | 查看各分区还剩多少空间 |
df -i | 看 inode 是否耗尽(有时磁盘有空间,但文件数满了就写不了,全靠这个查) | |
du | du -sh * | 查看当前目录下每个子文件夹的大小 |
lsblk | lsblk | 看磁盘分区结构树(哪些盘对应哪个分区) |
mount | mount /dev/sdb1 /mnt | 挂载新硬盘到指定目录 |
fdisk | fdisk -l | 列出系统所有硬盘的分区表信息 |
模块七:权限、用户与提权
| 命令 | 核心用法 | 备注 |
|---|---|---|
chmod | chmod 755 脚本.sh | 给脚本加执行权限(数字法) |
chown | chown 用户名:组名 文件 | 修改文件的所有者和所属组 |
whoami | whoami | 看当前是谁 |
sudo | sudo 命令 | 临时以管理员身份执行一条命令 |
su | su - 用户名 | 切换用户(切换到 root 时需输入密码) |
useradd | useradd -m -s /bin/bash 新用户 | 新建一个用户并指定家目录和 Shell |
passwd | passwd 用户名 | 修改指定用户的登录密码 |
usermod | usermod -aG wheel 用户名 | 把用户加入管理员组(赋予 sudo 权限) |
模块八:压缩打包与软件管理
| 命令 | 核心用法 | 备注 |
|---|---|---|
tar | 打包:tar -czvf 包名.tar.gz 目录/ 解压:tar -xzvf 包名.tar.gz | -c 创建,-x 解压,-z gzip,-v 显示过程,-f 文件名 |
zip | zip -r 包名.zip 目录/ | 和 Windows 通用的压缩格式 |
unzip | unzip 包名.zip | 解压 zip 包 |
dnf/yum | sudo dnf install 软件名 | CentOS/Rocky 安装软件 |
sudo dnf remove 软件名 | 卸载软件 | |
apt | sudo apt install 软件名 | Ubuntu/Debian 安装软件 |
模块九:终端小技巧与辅助命令
| 命令/快捷键 | 作用 | 备注 |
|---|---|---|
clear / Ctrl + L | 清空屏幕(别敲错,Ctrl+L 最快) | 必记 |
reset | 重置整个终端(当界面乱码、光标乱跳时,敲这个瞬间恢复) | 神器 |
history | 看之前敲过的所有命令 | 配合 !100 可直接执行第 100 条命令 |
!! | 再次执行上一条命令 | 省事 |
alias | alias ll='ls -l' | 给长命令起别名(临时生效,想永久需要写进 ~/.bashrc) |
export | export PATH=$PATH:/my/bin | 把某个路径加入系统可执行程序搜索路径 |
watch | watch -n 2 free -h | 每隔 2 秒自动刷一次命令结果(监控神器) |
man / --help | man ls 或 ls --help | 一切命令的终极老师 |
模块十:实操小作业
如果你现在有一台装好的CentOS/Rocky,可以按顺序敲一遍这组“热身”命令:
pwd # 看你在哪 mkdir test_lab # 建个练习文件夹 cd test_lab # 进去 touch hello.txt # 建个空文件 echo "Hello Linux" > hello.txt # 往里面写一行字 cat hello.txt # 看看写进去没 cp hello.txt hello2.txt # 复制一份 ls -l # 看两个文件的详细信息 rm hello2.txt # 删掉副本 cd .. # 退出去 rmdir test_lab # 删掉空目录(如果里面没东西的话)
(4)特殊符号
一、路径与目录快捷符号
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
/ | 斜杠 | 根目录(所有文件的起点),也是路径分隔符 | cd /(回到根目录) |
~ | 波浪号 | 当前用户的家目录 | cd ~(回自己的家) |
. | 点 | 当前目录 | ./start.sh(运行当前目录下的脚本) |
.. | 两点 | 上一级目录(父目录) | cd ..(退回上一级) |
- | 减号 | 上一次所在的目录(来回切换神器) | cd -(秒回上一个目录) |
二、通配符
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
\* | 星号 | 代表任意多个字符(0个也可以) | ls *.log(列出所有以.log结尾的文件) |
? | 问号 | 代表任意一个字符(且必须有) | ls file?.txt(匹配 file1.txt, fileA.txt,不匹配 file10.txt) |
[ ] | 方括号 | 代表括号内任意一个字符 | ls file[0-9].txt(匹配 file0.txt 到 file9.txt) |
三、数据流控制符号
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
| | 管道符 | 把左边命令的输出,作为右边命令的输入(最核心!) | cat log.txt | grep "error"(在日志里搜error) |
> | 覆盖重定向 | 把输出结果写入文件,覆盖原内容 | echo "hello" > file.txt(把hello写进文件) |
>> | 追加重定向 | 把输出结果追加到文件末尾,不覆盖 | echo "world" >> file.txt(追加到末尾) |
< | 输入重定向 | 从文件读取内容,作为命令的输入 | sort < file.txt(从file读取内容并排序) |
2> | 错误重定向 | 只把报错信息(stderr)写入文件 | cmd 2> error.log(把报错单独存起来) |
&> | 全重定向 | 把正常输出和报错信息都写入文件 | cmd &> all.log(所有输出都存起来) |
四、命令连接与后台执行符号
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
; | 分号 | 不管前一条命令是否成功,都按顺序执行下一条 | cd /tmp; ls(先切目录,再列文件) |
&& | 逻辑与 | 前一条命令执行成功,才执行后一条(防误操作) | mkdir newdir && cd newdir(创建成功才进去) |
|| | 逻辑或 | 前一条命令执行失败,才执行后一条 | command || echo "执行失败"(失败了就报警) |
& | 后台运行 | 让命令在后台运行,不占用当前终端 | ./long_script.sh &(把耗时的任务扔后台) |
五、引号与转义符
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
' | 单引号 | 强引用:括起来的内容,原样输出,不解析变量和特殊符号 | echo '$HOME' ➜ 输出 $HOME(不是家目录路径) |
" | 双引号 | 弱引用:括起来的内容,解析变量和命令,但保留空格 | echo "我的家是 $HOME" ➜ 输出“我的家是 /home/user” |
| 反引号 | 命令替换:执行里面的命令,把结果替换到当前位置(旧写法) | echo "今天是 $(date)"(现代标准写法用 $()) | |
\ | 反斜杠 | 转义符:让后面的特殊符号失去特殊含义,变成普通字符 | echo \* ➜ 输出 *(而不是把*当成通配符) |
六、脚本与变量专用符号
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
$ | 美元符 | 取变量的值 | echo $PATH(查看环境变量PATH的值) |
${} | 花括号 | 明确变量边界(防止变量名和后面的字母黏连) | echo ${HOME}dir ➜ 输出 /home/userdir |
$? | 特殊变量 | 上一条命令的退出状态码(0表示成功,非0表示失败) | command; echo $?(检查刚才的命令跑成功没) |
$# | 特殊变量 | 传递给脚本的参数个数 | 在脚本里用 $# 判断是否传够了参数 |
$0 | 特殊变量 | 脚本本身的文件名 | 在脚本里打印当前脚本的名字 |
$\* | 特殊变量 | 所有参数列表(当成一个字符串) | 在脚本中引用所有传入的参数 |
# | 井号 | 注释符:该行 # 后面的所有内容都不执行 | # 这是一行注释(脚本里写说明用) |
七、两个“隐藏功能”符号
| 符号 | 名称 | 含义与用法 | 示例 |
|---|---|---|---|
!! | 双感叹号 | 执行上一条命令(省事神器) | 忘了加 sudo?敲 sudo !! 即可用root权限重跑上一条命令 |
!$ | 叹号+美元 | 代表上一条命令的最后一个参数 | mkdir project ➜ 再敲 cd !$ 就等于 cd project |
八、EOF
EOF(End Of File,文件结束标记):在Linux中主要作为输入结束信号(在交互式终端按 Ctrl+D 组合键,告知系统“我输入完了”)和脚本多行定界符(用 <<EOF ... EOF 包裹多行内容,整体传递给前方命令)。注意:在空白命令行连按两次 Ctrl+D 会直接退出当前终端会话,需谨慎使用。
示例:
cat > /tmp/config.txt <<EOF server_name myweb.com; listen 80; root /var/www/html; EOF
说明:把 EOF 之间的三行内容,一次性写入 /tmp/config.txt 文件。开始和结尾的 EOF 必须单独成行且完全一致。
(5)目录命令
一、导航与查看
| 命令 | 作用 | 常用搭配/示例 |
|---|---|---|
pwd | 打印当前所在目录的绝对路径 | pwd ➜ 输出 /home/user |
cd | 切换目录 | cd /etc(去etc目录)、cd ..(回上一级)、cd ~或cd(回用户家目录) |
cd - | 切换回上一次所在的目录(来回切换神器) | cd - |
ls | 列出目录内容 | ls -lah(最常用组合:显示所有隐藏文件、易读大小、详细权限) |
二、创建与删除目录
| 命令 | 作用 | 常用搭配/示例 |
|---|---|---|
mkdir | 新建空目录 | mkdir myfolder |
mkdir -p | 递归创建多级目录(父目录不存在时自动创建) | mkdir -p a/b/c/d |
rmdir | 删除空目录(目录非空会报错) | rmdir myfolder |
rm -r | 删除非空目录(递归删除,慎用) | rm -r myfolder |
rm -rf | 强制、递归、无提示删除目录(高危操作!) | rm -rf myfolder/ |
三、复制与移动目录
| 命令 | 作用 | 常用搭配/示例 |
|---|---|---|
cp -r | 递归复制整个目录(必须加 -r) | cp -r 源目录 目标目录 |
mv | 移动目录,或重命名目录 | mv old_dir new_dir(改名)、mv dir /tmp/(移动位置) |
四、查看目录占用的空间大小
| 命令 | 作用 | 常用搭配/示例 |
|---|---|---|
du -sh | 查看指定目录的总大小(易读格式) | du -sh /home |
du -h --max-depth=1 | 查看当前目录下所有子目录各自的大小 | du -h --max-depth=1 |
五、查找目录的位置
| 命令 | 作用 | 常用搭配/示例 |
|---|---|---|
find | 从根目录开始查找指定名称的目录 | find / -type d -name "nginx"(全盘找名为nginx的目录) |
六、核心避坑提醒
-
千万慎用
rm -rf /:这是“从根目录开始强制递归删除”的意思,一旦执行,整个系统所有文件全部消失,且没有任何确认提示。 -
目录名带有空格时:必须用双引号括起来,否则会被当成多个参数。例如:
cd "My Projects",而不是cd My Projects。 -
.和..的含义:.代表“当前目录”,..代表“上一级目录”(父目录)。这两个在复制和相对路径中极其常用。
(6)目录结构

Linux 的目录是一棵倒置的树,所有文件和目录都从根目录 / 开始。理解这棵树的“骨架”,你就知道系统文件都放在哪了。
一、根目录与用户目录(最常打交道)
| 目录 | 作用 | 给你的提醒 |
|---|---|---|
/ | 根目录,所有文件和目录的绝对起点 | 整个树的最顶部 |
/home/ | 普通用户的家目录,存放用户私人文件 | 你日常写文档、存代码的地方 |
/root/ | 超级管理员(root)的家目录 | 普通用户进不去,只有 root 能访问 |
/tmp/ | 临时文件目录,系统重启后自动清空 | 临时存文件可以放这里,重启就没了 |
二、系统配置与程序(系统核心)
| 目录 | 作用 | 给你的提醒 |
|---|---|---|
/etc/ | 系统配置文件目录,存放几乎所有软件的配置(如网络、用户密码) | 不要乱删,改错配置可能导致系统无法启动 |
/bin/ | 系统基础命令(如 ls、cp、mv、rm) | 正常用户都能执行 |
/sbin/ | 系统管理命令(如 fdisk、mount) | 只有 root 或 sudo 权限才能执行 |
/usr/ | 存放用户安装的软件和库(相当于 Windows 的 Program Files) | 里面还有 /usr/bin/、/usr/local/ |
/usr/local/ | 管理员手动编译安装的软件通常放在这里 | 自己下载源码编译装软件,一般选这里 |
三、动态数据与设备(系统运行时)
| 目录 | 作用 | 给你的提醒 |
|---|---|---|
/var/ | 存放经常变化的文件,如日志(/var/log/)、缓存、数据库文件 | 排障时看 /var/log/messages 或 /var/log/nginx/ |
/dev/ | 设备文件目录(如硬盘 /dev/sda、鼠标、键盘) | Linux 中“一切皆文件”,硬件在这里映射为文件 |
/proc/ | 虚拟文件系统,存放当前系统的内核与进程信息(如 CPU、内存状态) | 如 /proc/cpuinfo 和 /proc/meminfo |
/sys/ | 类似 /proc,存放系统硬件设备的详细信息 | 通常在排查驱动时查看 |
/boot/ | 存放Linux 内核和启动加载器(grub)相关文件 | 系统启动时依赖这里,不要删改 |
四、挂载点与可选软件(扩展功能)
| 目录 | 作用 | 给你的提醒 |
|---|---|---|
/mnt/ | 临时挂载点,管理员临时挂载硬盘或 U 盘时用 | 比如 mount /dev/sdb1 /mnt |
/media/ | 可插拔设备挂载点,插上 U 盘或光驱时自动挂载在这里 | 现在很多 Linux 也自动挂载到 /run/media/ |
/opt/ | 第三方大型商业软件的安装目录 | 比如你安装 Oracle、谷歌 Chrome 可能会放这里 |
五、必须记住的 3 条“黄金法则”
-
绝对路径 vs 相对路径:
-
绝对路径:从
/开始写(如/etc/nginx/nginx.conf),在哪敲都一样。 -
相对路径:从当前目录开始(如
cd ../或cd logs/),必须知道你现在在哪。
-
-
不要乱动
/etc、/boot和/root:这些是系统命脉,改错了系统可能直接起不来。日常操作都在/home/你的用户名下即可。 -
区分
usr和var:/usr/放“装好的软件和库”(基本不自动变),/var/放“每天疯狂增长的日志和缓存”(经常变,注意空间)。
(7)目录管理
一、目录的创建与删除策略
| 操作 | 命令及核心参数 | 行为管理建议 |
|---|---|---|
| 创建 | mkdir -p 路径 | 养成随手加 -p 的习惯,即使父目录不存在也能自动创建,避免报错 |
| 删除 | rm -rf 目录 | 注意:删除目录时尽量避免用 rm -rf /(危险) 想删非空目录时,先确认该目录没有重要数据,再用 rm -rf |
| 移动/重命名 | mv 源目录 目标目录 | 如果目标目录已存在,mv 会把源目录移进去; 如果目标路径不存在,mv 会直接改名。记住:mv 操作是瞬间完成的,不用担心断电损坏目录 |
二、目录的权限与归属管理
注:目录的权限和文件不同。目录的
r代表“能看(用ls列出)”,w代表“能在里面新建/删除文件”,x代表“能进入(用cd进去)”。没有x权限,就算你有r也进不去!
| 命令 | 用途 | 常见目录配置举例 |
|---|---|---|
chmod 755 目录 | 给目录赋予权限(所有者能看/进/改,其他人能看能进但不能改) | Web根目录(如 /var/www/html)常用的权限 |
chmod 750 目录 | 给目录赋予权限(所有者全权,同组人能看能进,其他人全禁) | 公司内部共享目录常用 |
chown 用户:组 目录 | 修改目录的所有者和所属组 | 比如把 /home/project 的所有者改为 devuser |
chgrp -R 组名 目录 | 递归修改目录及内部所有子目录的组 | 加上 -R 能递归把所有子目录都改成这个组 |
setfacl | 高级权限(ACL):给特定的某个用户单独设置该目录的权限 | 例如:setfacl -m u:tom:rx /project(只给 tom 用户读和执行权限,不给其他人) |
getfacl | 查看目录上设定的 ACL 权限 | 配合 setfacl 使用 |
三、目录的空间监控与容量管理
| 命令 | 作用 | 监控指标 |
|---|---|---|
df -h | 查看各个分区的总容量与可用空间 | 重点监控根目录 / 的使用率,超过 85% 就要警惕 |
du -sh * | 查看当前目录下每个子目录占用的实际大小 | 用来快速定位是哪个目录“吃掉了”硬盘空间 |
df -i | 查看 inode(索引节点)使用情况 | 核心技能:当磁盘还有空间,但系统提示“磁盘已满”时,99% 是因为 inode 耗尽(小文件太多占满了编号),看 df -i 可以排查出来 |
lsattr 目录 | 查看目录的特殊隐藏属性 | 如 chattr +i /etc/resolv.conf(设为不可变,连 root 也不能改) |
四、目录的高级防护与维护
| 工具/命令 | 作用 | 用法场景 |
|---|---|---|
chattr +i | 给目录加不可变属性(Immutable) | 即使你是 root,也没法删除、重命名、修改这个目录里的文件。防黑客篡改或自己手滑的神技。 |
lsattr | 查看目录上是否被加了特殊属性 | 如果发现 lsattr 输出中有 i,说明被锁了。解除用 chattr -i。 |
rsync -av | 目录的增量同步/备份 | 高效备份工具,只传输有变动的文件,常用于目录灾难恢复。例如:rsync -av /home/ /backup/home/ |
mount --bind | 目录绑定挂载 | 把 A 目录的内容直接“镜像”到 B 目录,两边变动实时同步。常用于在一个盘空间不够时,把某个目录(如 /var/log)映射到另一个盘的目录下。 |
五、目录硬链接与软链接的区别
| 类型 | 软链接(Soft / Symbolic) | 硬链接(Hard) |
|---|---|---|
| 命令 | ln -s 源目录 软链接名 | ln 源目录 硬链接名(注意:目录通常不允许硬链接,ln -d 需要特殊权限,一般不用) |
| 特点 | 相当于 Windows 快捷方式,指向源目录的路径 | 相当于给源目录的 inode 起了一个“第二个名字” |
| 删除影响 | 删除源目录,软链接失效(变红) | 删除源目录,硬链接仍然可用,指向原数据 |
| 跨分区 | 可以跨分区创建 | 不能跨分区 |
实战场景:常把
/var/log/nginx里的日志目录,用软链接ln -s /data/logs/nginx /var/log/nginx链接到独立的/data大硬盘分区上,解决日志撑爆根分区的问题。
六、目录管理的 3 条“铁律”
-
绝对不要裸删根目录:
rm -rf /是终极毁灭指令;如果只想删除当前目录下的所有内容,应该用rm -rf \*或者rm -rf ./\*,相对安全一点(但也需慎重)。 -
写脚本时,操作目录前先检查:比如写定时清理日志脚本时,先判断目录是否存在,且路径是否正确(
if [ -d "/var/log/nginx" ]; then...),防止因路径写错误删了系统目录。 -
规划目录时“分而治之”:生产环境中,强烈建议把
/home(用户数据)、/var(日志/数据库)、/tmp(临时文件)单独划分独立分区。这样即使某个目录空间被占满,也不会拖垮整个系统。

1006

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



