适用读者:有 C++/Qt 基础(熟悉
QDir/QFile),手边有一台云服务器(示例环境:Alibaba Cloud Linux,2 核 / 2G / 40G 系统盘)。 主线:每条命令都在真实服务器上跑过,边用边理解。
1. 根目录里都有什么
ls / 看到的目录(Alibaba Cloud Linux 实测):
bin dev home lib64 media opt root sbin swapfile tmp var
boot etc lib lost+found mnt proc run srv sys usr
这些目录不是平级无关的文件夹,而是各司其职(FHS 标准约定):
| 目录 | 放什么 | 类比 Windows |
|---|---|---|
/etc | 系统与服务配置文件 | C:\Windows\System32 配置 |
/usr | 系统软件与库(最大) | C:\Program Files |
/var | 经常变化的数据:日志、缓存 | C:\ProgramData 日志 |
/home | 普通用户的家目录 | C:\Users\ |
/root | root 用户的家目录(不在 /home 里) | — |
/tmp | 临时文件,重启可能清空 | %TEMP% |
/opt | 第三方大软件 | D:\Software |
/boot | 启动引导文件 | — |
/proc /sys /dev /run | 内存虚拟文件系统,不在磁盘上 | — |
lost+found | ext4 文件系统 fsck 修复碎片(有它说明 / 是 ext4) | 磁盘扫描碎片 |
swapfile | 交换文件(小内存机器用文件代替交换分区) | 虚拟内存 pagefile.sys |
💡
/proc里的数字目录就是进程 PID——内核把进程信息伪装成文件给你看,cat /proc/cpuinfo就是读 CPU 信息。
2. 目录 ≠ 分区:磁盘与挂载
核心要点:Linux 只有一棵目录树,
/是唯一顶点;磁盘分区是「外设」,用挂载的方式插到树的某个目录上。目录在哪个分区,取决于挂载配置。
2.1 两条查询命令
lsblk # 树状列出所有块设备和挂载点
df -h / # 直接看 / 在哪个设备上、用量多少
2.2 实测:云主机的磁盘布局
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk ← 一块 40G 虚拟云盘
├─vda1 253:1 0 2M 0 part ← BIOS 引导分区(不挂载)
├─vda2 253:2 0 200M 0 part /boot/efi ← EFI 启动分区
└─vda3 253:3 0 39.8G 0 part / ← 根分区,承载整棵目录树
设备名解读:
- vd = virtio disk(KVM 虚拟化云主机的虚拟盘;物理机一般是
sda) - a = 第一块盘;
vda1/vda2/vda3= 该盘的第 1/2/3 分区
df -h 输出解读:
Filesystem Size Used Avail Use% Mounted on
/dev/vda3 40G 8.1G 30G 22% / ← 已用 8.1G,剩 30G
部署服务、拉镜像前先 df -h 看一眼空间。
2.3 与 Windows 的本质区别
| Windows | Linux | |
|---|---|---|
| 结构 | 一个分区 = 一个盘符,C:\ D:\ 平行多棵树 | 只有一棵树 / |
| 分区地位 | 树本身 | 树上挂的「零件」,挂载点 = 挂到哪个目录 |
| 找到分区 | 看盘符 | lsblk / df -h |
💡 关键顿悟:
/像QTreeWidget的树,分区是 item,mount就是把 item insert 到某个节点下。目录 ≠ 分区——/etc/usr全在vda3上,只是普通文件夹;/boot/efi才是独立分区挂上来的。
3. 基础导航:ls / cd / pwd
| 命令 | 作用 | 备注 |
|---|---|---|
ls | 列出当前目录内容 | ls -l 详细信息,ls -R 递归 |
cd 路径 | 切换目录 | 不带参数 = 回家 |
cd .. | 上一级 | 在 / 下原地不动(顶点无父目录) |
pwd | 显示当前绝对路径 | 迷路了就敲它 |
提示符本身就是信息面板:
[ root @ <你的主机名> ~ ] #
↑ ↑ ↑ ↑
用户名 主机名 当前目录 # = root;普通用户是 $
路径:绝对 vs 相对
| 写法 | 含义 | 实测 |
|---|---|---|
cd /root | 绝对路径,从根出发 | 任何位置都有效 |
cd root/ | 相对路径,从当前位置出发 | 只在 / 下有效 |
cd ~ / cd | 回当前用户家目录 | root 是 /root |
💡 关键顿悟:
~不是固定的/root,而是「当前用户的家」——换普通用户登录,~就是/home/用户名。写脚本、配服务时一律用绝对路径,因为脚本运行时的工作目录不确定。验证实验:在
/root下cd ..到/,再ls看到全部根目录——家目录也只是根下的普通目录,没有神秘之处。
4. 文件操作五件套
| 命令 | 作用 | Qt 类比 |
|---|---|---|
mkdir 目录名 | 新建目录 | QDir().mkdir() |
mkdir -p a/b/c | 一次建多层,父目录自动补 | — |
touch 文件 | 新建空文件 / 更新时间戳 | QFile 打开不写 |
cp 源 目标 | 复制(目录要 -r) | 拷贝构造 |
mv 源 目标 | 移动;同目录 = 重命名 | QDir::rename() |
rm 文件 | 删除(目录要 -r) | QFile::remove() |
⚠️ Linux 的 rm 没有回收站:无确认提示、无 Ctrl+Z。带 -rf 前先 pwd 确认自己在哪。
查看文件内容:
| 命令 | 场景 |
|---|---|
cat 文件 | 小文件一次性全看 |
less 文件 | 大文件分屏(空格翻页,q 退出) |
head -n 20 / tail -n 20 | 只看头 / 尾 20 行 |
tail -f 日志 | 实时滚动看日志——部署服务后最常用 |
💡 关键顿悟:Linux 选项设计很统一——
-r几乎总是「递归对目录整体操作」(cp -rrm -r),-p总是「缺什么补什么」(mkdir -p)。记住规律,新命令的选项能猜出大半。
5. 权限:10 个字符管住整个系统
5.1 权限串怎么读
ls -l 输出的第一列:
- rwx r-x r-x
↑ ↑↑↑ ↑↑↑ ↑↑↑
│ │ │ └── 第 3 组:其他人(others)
│ │ └─────── 第 2 组:同组(group)
│ └──────────── 第 1 组:属主(owner)
└── 文件类型:- 文件 / d 目录 / l 软链接(占位,不是权限)
- 第 1 位是类型占位,后 9 位三三分组,顺序固定:属主 → 组 → 其他人,组内固定
r w x r=读(4)w=写(2)x=执行(1);-表示该权限没有
5.2 数字表示法
每组按 4/2/1 加总:
| 数字 | 权限串 | 含义 | 典型用途 |
|---|---|---|---|
755 | rwxr-xr-x | 自己全权,别人可读可进 | 目录、可执行程序 |
644 | rw-r--r-- | 自己读写,别人只读 | 普通文件(touch 新建的默认) |
600 | rw------- | 只有自己能读写 | 私钥、密码文件 |
5.3 目录的 x 有特殊含义
- 对文件,
x= 可执行 - 对目录,
x= 可进入(cd);没有x进不去,没有r则进得去但ls不了
5.4 两个必会命令
chmod 755 server.conf # 改权限(数字法)
chown root:root server.conf # 改属主:属组
实测:touch 新建文件是 -rw-r--r--(644),chmod 755 后变 -rwxr-xr-x(755),三组各多了 x。
💡 关键顿悟:权限挂在文件上,不挂在用户手上——同一文件,属主、组、路人看到的权限可以完全不同。9 个 bit 管住整个系统的访问控制,比 Windows ACL 简洁。后端部署时「服务起不来」,权限不对是排错第一嫌疑人,
ls -l是第一诊断工具。
6. 实战:搭一个部署工作目录
后续 C++ 项目部署可以统一用这个结构:
cd ~
mkdir -p workspace/logs workspace/bin workspace/conf
touch workspace/conf/server.conf
ls -R workspace
workspace/
├── bin/ ← 放编译好的可执行文件
├── conf/ ← 配置文件(server.conf)
└── logs/ ← 运行日志
7. 小结:这一篇该掌握什么
- 能说出
/etc/usr/var/home/root/proc各放什么 - 知道目录 ≠ 分区,会用
lsblk和df -h查分区与挂载点 - 能读懂自己服务器上的三分区布局(vda1 BIOS / vda2 EFI / vda3 根)
- 熟练用
lscdpwd导航,分得清绝对 / 相对路径 - 会
mkdir -ptouchcpmvrm,知道rm无回收站 - 能逐字符读权限串,会算 755/644/600,会用
chmod - 搭好
~/workspace这套部署目录结构
后续方向
chown与服务部署的关系(为什么要给服务用户改属主)- 用户与用户组(
useradd/su/sudo) tail -f看日志实战(把自己部署的服务跑起来之后)- 用
g+++ CMake 在服务器上编译部署自己的项目
豫公网安备41108202000982号