掌握Linux基础指令是每位开发者、运维工程师和系统管理员的必修课。本文将系统梳理Linux核心指令与权限管理机制,不仅涵盖常用命令的基本用法,更深入解析其底层原理与实战技巧。通过本文的学习,你将建立起完整的Linux操作知识体系,为后续的系统编程、服务器管理等高级技能打下坚实基础。
目录
- 一、Linux操作系统全景认知
-
- [1.1 发展历史脉络](#1.1 发展历史脉络)
- [1.2 开源精神:GPL许可证](#1.2 开源精神:GPL许可证)
- [1.3 企业级应用现状(2025年数据更新)](#1.3 企业级应用现状(2025年数据更新))
- [1.4 主流发行版选型指南](#1.4 主流发行版选型指南)
- 二、核心概念深度解析
-
- [2.1 操作系统的定位](#2.1 操作系统的定位)
- [2.2 Linux目录结构哲学](#2.2 Linux目录结构哲学)
- [2.3 路径的精髓:绝对 vs 相对](#2.3 路径的精髓:绝对 vs 相对)
- 三、基础指令精讲与实战
-
- [3.1 文件与目录操作指令](#3.1 文件与目录操作指令)
-
- `ls`:列表的瑞士军刀
- `touch`:创建与时间管理
- `mkdir`:目录创建的艺术
- [`rmdir` vs `rm`:删除的抉择](#
rmdirvsrm:删除的抉择)
- [3.2 文件内容查看指令](#3.2 文件内容查看指令)
-
- `cat`:小文件神器
- [`more` vs `less`:分页查看器对比](#
morevsless:分页查看器对比) - `head`/`tail`:首尾截取
- [3.3 文件操作指令](#3.3 文件操作指令)
- [3.4 信息查询指令](#3.4 信息查询指令)
- [3.5 系统信息指令](#3.5 系统信息指令)
- 四、压缩与归档
-
- [4.1 `zip/unzip`:跨平台压缩](#4.1
zip/unzip:跨平台压缩) - [4.2 `tar`:Linux标准归档](#4.2
tar:Linux标准归档)
- [4.1 `zip/unzip`:跨平台压缩](#4.1
- 五、Linux权限体系详解
-
- [5.1 用户身份模型](#5.1 用户身份模型)
- [5.2 权限三元组](#5.2 权限三元组)
- [5.3 权限表示法](#5.3 权限表示法)
- [5.4 权限修改命令](#5.4 权限修改命令)
- [5.5 权限掩码umask](#5.5 权限掩码umask)
- [5.6 目录权限的陷阱与真相](#5.6 目录权限的陷阱与真相)
- [5.7 粘滞位(Sticky Bit):/tmp的解决方案](#5.7 粘滞位(Sticky Bit):/tmp的解决方案)
- 六、Shell进阶技巧
-
- [6.1 命令别名(alias)](#6.1 命令别名(alias))
- [6.2 进程控制快捷键](#6.2 进程控制快捷键)
- [6.3 文件传输:`rzsz`](#6.3 文件传输:
rzsz)
- 七、实战:综合场景演练
- 八、总结与最佳实践
一、Linux操作系统全景认知
1.1 发展历史脉络
UNIX的演进(1968-1993)
- 1968年:Multics项目启动,首次提出多任务、文件管理等核心概念
- 1969-1970年:Ken Thompson与Dennis Ritchie在贝尔实验室开发出UNIX V1,运行在PDP-7小型机上
- 1972年:贝尔实验室开始商业授权,加州大学伯克利分校获得源码并开发出BSD版本
- 1980年代:出现两大分支------AT&T System V与BSD 4.2,分别侧重商业应用与科研领域
- 1993年:Novell收购UNIX业务,随后SUN将System V融入Solaris,形成统一标准
Linux的诞生(1991)
- 1991年10月5日:Linus Torvalds在comp.os.minix新闻组发布Linux 0.02版本
- 关键特性:兼容UNIX系统调用、支持GNU工具链(bash、gcc)
- 命名由来:"Linux is not Unix"的递归缩写,内核与GNU工具结合形成完整操作系统
1.2 开源精神:GPL许可证
Linux采用GNU通用公共许可证(GPL),其核心原则是:
- 自由使用:任何人可无限制运行软件
- 源码开放:必须提供源代码
- 衍生作品必须开源:基于GPL代码的修改再发布时,必须保持GPL许可
这一机制催生了庞大的开源生态,使得Linux成为协作开发的典范。
1.3 企业级应用现状(2025年数据更新)
| 领域 | 市场份额 | 典型应用场景 |
|---|---|---|
| 服务器领域 | 75%+ | 政府、金融、电信、云计算平台 |
| 桌面领域 | 稳步增长 | 中标麒麟、深度Linux、Ubuntu(开发环境) |
| 移动嵌入式 | 85%+ | Android(基于Linux内核)、路由器、IoT设备 |
| 云计算/大数据 | 86% | Kubernetes、Docker、Hadoop等基础设施 |
1.4 主流发行版选型指南
bash
# Debian系(稳定、适合服务器)
Debian → Ubuntu(桌面/云) → Kali(安全渗透)
# RedHat系(企业级支持)
RHEL(商业) → CentOS(社区版,已转向Stream) → Fedora(前沿技术测试)
# 独立发行版
SUSE(欧洲市场)、Arch Linux(滚动更新,高级用户)
选型建议:
- 新手入门:Ubuntu LTS
- 企业服务器:RHEL/CentOS Stream
- 安全测试:Kali Linux
- 学习源码:LFS(Linux From Scratch)
二、核心概念深度解析
2.1 操作系统的定位
Linux作为内核(Kernel) ,通过Shell与用户交互:
用户层
↓ 指令输入
Shell(命令解释器:bash/zsh)
↓ 翻译为系统调用
Linux内核(进程管理、内存管理、文件系统、驱动管理)
↓ 操作
底层硬件(CPU、内存、磁盘、网卡)
为什么不能直接使用内核?
- 内核接口复杂,直接使用需要汇编/C语言编程
- Shell提供人性化接口,支持脚本自动化
- 类比:内核是发动机,Shell是方向盘和仪表盘
2.2 Linux目录结构哲学
Linux采用 单一根目录树 设计,所有文件都从/开始:
/
├── bin/ # 基础用户命令(ls, cat)
├── sbin/ # 系统管理命令(fdisk, iptables)
├── usr/ # 用户应用程序默认目录
│ ├── bin/ # 次要用户命令
│ └── local/ # 用户自行编译的软件
├── etc/ # 配置文件(passwd, shadow)
├── var/ # 经常变化的文件(日志、缓存)
├── home/ # 普通用户家目录
├── root/ # root用户家目录
├── dev/ # 设备文件(/dev/sda, /dev/null)
├── proc/ # 进程与内核信息(虚拟文件系统)
├── sys/ # 系统设备信息(虚拟文件系统)
├── tmp/ # 临时文件(重启后清空)
├── lib/ # 共享库文件(.so)
├── boot/ # 内核与引导文件
└── mnt/ # 临时挂载点
设计优势:路径唯一性保证快速定位,统一标准便于跨发行版管理。
2.3 路径的精髓:绝对 vs 相对
| 类型 | 特点 | 示例 | 适用场景 |
|---|---|---|---|
| 绝对路径 | 从/开始,不依赖当前位置 |
/home/user/project/main.c |
配置文件、服务脚本、cron任务 |
| 相对路径 | 基于当前目录./或父目录../ |
../include/header.h |
命令行操作、编译命令 |
实战技巧:
bash
# 快速切换技巧
cd ~ # 返回当前用户家目录
cd - # 返回上次所在目录(在两个目录间快速切换)
cd # 无参数时等同于cd ~
三、基础指令精讲与实战
3.1 文件与目录操作指令
ls:列表的瑞士军刀
语法 :ls [选项] [目录或文件]
核心选项矩阵:
| 选项 | 全称 | 功能 | 示例 |
|---|---|---|---|
-a |
all | 显示隐藏文件(以.开头) |
ls -a |
-l |
long | 长格式显示(权限、大小、时间) | ls -l |
-h |
human-readable | 人类可读大小(K, M, G) | ls -lh |
-d |
directory | 显示目录本身而非内容 | ls -ld /etc |
-i |
inode | 显示inode号 | ls -i |
-R |
recursive | 递归列出子目录 | ls -R /var/log |
-t |
time | 按修改时间排序(新→旧) | ls -lt |
-r |
reverse | 反向排序 | ls -ltr(旧→新) |
-F |
classify | 附加类型标识(/:目录, *:可执行) |
ls -F |
长格式输出解析:
bash
$ ls -l
drwxr-xr-x 3 root root 4096 Jan 15 10:30 projects
-rw-r--r-- 1 user group 856 Jan 15 09:15 config.txt
[文件类型][权限] [硬链接数] [属主] [属组] [大小] [修改日期] [名称]
文件类型标识:
d:目录-:普通文件l:符号链接b:块设备(磁盘)c:字符设备(终端)p:命名管道s:套接字
touch:创建与时间管理
功能:创建空文件或更新文件时间戳
时间戳类型 (通过stat查看):
- Access:最后访问时间(读取文件内容)
- Modify:最后修改时间(文件内容变更)
- Change:状态改变时间(权限、属主等元数据变更)
bash
# 创建文件
touch newfile.txt
# 批量创建(配合花括号扩展)
touch file{1..10}.txt # 创建file1.txt到file10.txt
# 指定时间戳(用于备份恢复场景)
touch -t 202312311200 file.txt # 设置为2023年12月31日12:00
mkdir:目录创建的艺术
关键选项:
-p/--parents:自动创建父目录(幂等操作,脚本必备)
bash
# 失败案例:父目录不存在
mkdir a/b/c # 失败:a不存在
# 正确做法
mkdir -p a/b/c # 自动创建a和a/b
# 实战:按日期创建日志目录
mkdir -p /var/log/app/{2023,2024}/{01..12}/{01..31}
rmdir vs rm:删除的抉择
| 命令 | 功能 | 限制 | 安全性 |
|---|---|---|---|
rmdir |
删除空目录 | 仅空目录,非空则失败 | 较高(防止误删) |
rm |
删除文件/目录 | 无限制(谨慎使用) | 需配合-i或-f |
rm安全使用规范:
bash
# 危险操作!
rm -rf / # 传说中的"删库跑路",绝对禁止!
# 安全实践
rm -i file.txt # 交互式确认
rm -rf dir/ # 强制删除非空目录(确认路径无误!)
rm -v *.log # 显示删除过程(verbose)
# 回收站机制(建议别名)
alias rm='mv --target-directory=$HOME/.trash'
3.2 文件内容查看指令
cat:小文件神器
适用场景:文件大小 < 屏幕高度(通常 < 50行)
bash
# 基础查看
cat file.txt
# 显示行号
cat -n file.txt # 所有行编号
cat -b file.txt # 非空行编号(适合代码)
# 压缩空行
cat -s file.txt # 多个空行合并为单个(日志清洗)
# 合并文件
cat part1.txt part2.txt > merged.txt
more vs less:分页查看器对比
| 特性 | more |
less |
|---|---|---|
| 翻页方向 | 仅向下(Enter/Space) | 双向(PageUp/↓, j/k, g/G) |
| 搜索功能 | 基础(/pattern) |
高级(支持正则,可高亮) |
| 加载方式 | 全文加载 | 按需加载(大文件友好) |
| 退出后 | 保留在屏幕 | 清屏(可配置) |
| 当前行提示 | 百分比 | 行号 |
| 实时更新 | 不支持 | 支持(F键跟踪日志) |
less实战技巧:
bash
less -N file.txt # 显示行号
less -S file.txt # 截断长行(不换行)
/pattern # 向下搜索
?pattern # 向上搜索
n/N # 重复/反向搜索
g/G # 跳转到文件首/尾
F # 实时追踪(类似tail -f)
q # 退出
head/tail:首尾截取
bash
# 默认10行
head file.txt # 前10行
tail file.txt # 后10行
# 指定行数
head -n 20 file.txt # 前20行
tail -n 50 file.txt # 后50行
# 动态追踪
tail -f /var/log/nginx/access.log # 实时查看日志
tail -F file.log # -F会retry,文件删除重建后仍追踪
# 组合技巧:查看第[180,200]行
head -200 file.txt | tail -21
*管道|原理:
head输出200行到标准输出|将标准输出作为tail的标准输入tail取最后21行(包含第180-200行)
3.3 文件操作指令
cp:复制详解
语法 :cp [选项] 源... 目标
关键模式:
- 文件→文件 :
cp a.txt b.txt(若b.txt存在则覆盖) - 文件→目录 :
cp a.txt dir/(保留原名) - 多文件→目录 :
cp a.txt b.txt dir/(批量复制) - 目录→目录 :
cp -r dir1/ dir2/(递归复制)
安全选项:
bash
cp -i file.txt backup/ # 覆盖前询问(interactive)
cp -u file.txt backup/ # 仅复制更新文件(update)
cp -a dir/ backup/ # 保留所有属性(archive)
cp -v *.txt backup/ # 显示详细过程
mv:移动与重命名
本质:同一操作,目标为目录即移动,目标为文件即重命名
bash
# 重命名
mv oldname.txt newname.txt
# 批量重命名(利用子shell)
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done
# 安全移动
mv -i source.txt target.txt # 覆盖确认
mv -t target/ file1 file2 # 目标目录前置(适合脚本)
3.4 信息查询指令
man:手册页系统
章节划分:
1. 普通用户命令(ls, cp)
2. 系统调用(open, read, fork)
3. 库函数(printf, malloc)
4. 特殊文件(/dev/sda)
5. 配置文件格式(/etc/passwd)
6. 游戏
7. 杂项(环境变量、规范)
8. 管理员命令(ifconfig, iptables)
9. 内核例程
使用技巧:
bash
man ls # 默认从第1章开始
man 2 open # 强制查看第2章系统调用
man -a printf # 显示所有章节(依次退出)
man -k socket # 关键词搜索(apropos)
man man # 查看man自身手册
find:强大的文件搜索
性能警告 :大文件系统搜索可能耗时数分钟,建议配合-name或-type缩小范围
bash
# 按名称查找(支持通配符)
find /path -name "*.log" # 精确匹配
find /path -iname "pattern" # 忽略大小写
find /path -name "file[0-9].txt" # 正则匹配
# 按类型查找
find /path -type f -name "*.sh" # f:文件, d:目录, l:链接
# 按时间查找
find /path -mtime -7 # 7天内修改
find /path -atime +30 # 30天未访问
# 执行操作(高风险!)
find /tmp -name "*.tmp" -delete # 直接删除
find /var/log -name "*.old" -exec rm -i {} \; # 交互式删除
grep:文本搜索利器
本质:正则表达式引擎
bash
# 基础搜索
grep "error" app.log
# 常用选项组合
grep -i "failed" /var/log/auth.log # 忽略大小写
grep -n "timeout" app.log # 显示行号
grep -v "DEBUG" app.log # 反向匹配(排除)
grep -E "ERROR|FATAL" app.log # 扩展正则(或)
# 递归搜索
grep -r "TODO" src/ # 递归查找源码
grep -rl "deprecated" /usr/include/ # 仅显示文件名
# 管道组合(日志分析)
cat /var/log/nginx/access.log | grep "404" | wc -l # 统计404错误数
3.5 系统信息指令
date:时间操作
时间戳原理:Unix时间戳是从1970-01-01 00:00:00 UTC开始的秒数,解决跨时区问题
bash
# 格式化输出(常用格式)
date +"%Y-%m-%d %H:%M:%S" # 2023-01-15 14:30:25
date +"%F %T" # 同上,%F=%Y-%m-%d, %T=%H:%M:%S
date +"%s" # 获取时间戳(秒)
date -d "@1673800000" # 时间戳转日期
# 设置时间(需root权限)
date -s "2023-01-15 12:00:00"
uname:系统识别
bash
uname -a # 全部信息(内核名、主机名、版本、架构)
uname -r # 仅内核版本
uname -m # 机器硬件名称(x86_64)
lsb_release -a # 发行版信息(需安装lsb-release包)
四、压缩与归档
4.1 zip/unzip:跨平台压缩
特点:Windows/Linux通用,但压缩率低于tar.gz
bash
# 压缩文件
zip archive.zip file1.txt file2.txt
# 压缩目录(必须加-r)
zip -r project.zip project/
# 解压到指定目录
unzip project.zip -d /opt/
unzip -l project.zip # 查看内容列表不解压
4.2 tar:Linux标准归档
参数速查表:
| 参数 | 含义 | 使用场景 |
|---|---|---|
-c |
create,创建归档 | 备份时 |
-x |
extract,解压 | 恢复时 |
-t |
list,查看内容 | 检查归档 |
-z |
gzip压缩/解压 | .tar.gz |
-j |
bzip2压缩/解压 | .tar.bz2 |
-J |
xz压缩/解压 | .tar.xz(压缩率最高) |
-v |
verbose,显示过程 | 调试用 |
-f |
file,指定文件名 | 必须放在最后 |
-C |
change,解压到目录 | 指定目标路径 |
-p |
preserve,保留权限 | 备份系统文件 |
典型示例:
bash
# 打包并压缩
tar -czvf backup.tar.gz /etc/nginx /var/www
tar -cjvf backup.tar.bz2 /data/
# 解压
tar -xzvf backup.tar.gz # 自动识别gzip
tar -xjvf backup.tar.bz2 -C /restore/ # 解压到指定目录
# 查看内容
tar -ztvf backup.tar.gz # 查看gzip压缩包内容
# 解压单个文件
tar -zxvf backup.tar.gz etc/nginx/nginx.conf
# 打包排除目录
tar -czvf home.tar.gz --exclude="*.tmp" /home/user
五、Linux权限体系详解
5.1 用户身份模型
bash
# 查看当前身份
whoami # 用户名
id # 详细UID/GID信息
# 切换用户
su - root # 切换root(需密码)
su user # 切换普通用户
sudo command # 以root权限执行(需配置sudoers)
提示符意义:
user@host:~$:普通用户($)root@host:~#:超级用户(#)
5.2 权限三元组
权限主体
- u(User):文件所有者(Owner)
- g(Group):所属组(Group)
- o(Others):其他用户(Other)
- a(All):所有人(u+g+o)
权限类型
- r (Read):读权限
- 文件:查看内容
- 目录:列出文件列表(
ls)
- w (Write):写权限
- 文件:修改内容
- 目录:创建/删除/重命名文件(关键:删除文件需要目录的w权限)
- x (Execute):执行权限
- 文件:作为程序执行(
./script.sh) - 目录:进入目录(
cd)
- 文件:作为程序执行(
5.3 权限表示法
字符表示法
rwxr-xr-x
││││││││
│││││││└─ other:只读
││││││└── other:无写权限
│││││└─── other:可执行
││││└──── group:只读
│││└───── group:无写
││└────── group:可执行
│└─────── user:只读
└──────── user:可写
八进制数值表示法
| 字符 | 数值 | 二进制 | 含义 |
|---|---|---|---|
--- |
0 | 000 | 无权限 |
--x |
1 | 001 | 执行 |
-w- |
2 | 010 | 写 |
-wx |
3 | 011 | 写+执行 |
r-- |
4 | 100 | 读 |
r-x |
5 | 101 | 读+执行 |
rw- |
6 | 110 | 读+写 |
rwx |
7 | 111 | 全部权限 |
常用组合:
644(rw-r--r--):普通文件默认值755(rwxr-xr-x):可执行文件/目录700(rwx------):私有文件600(rw-------):敏感配置文件
5.4 权限修改命令
chmod:修改权限
字符模式:
bash
chmod u+x script.sh # 用户添加执行权限
chmod g-w file.txt # 组移除写权限
chmod o=r-- config.ini # 其他用户只读
chmod a+x binary # 所有人添加执行
chmod u=rwx,g=rx,o=r file # 一次性设置
八进制模式:
bash
chmod 644 document.txt # rw-r--r--
chmod 755 /usr/local/bin/app # rwxr-xr-x
chmod -R 700 /data/private # 递归目录权限
chown:修改所有者
bash
chown user:group file # 同时修改用户和组
chown -R nginx:www-data /var/www/html # 递归修改网站目录
chown root:root /etc/passwd # 系统文件归属修复
chgrp:修改所属组
bash
chgrp developers project/ # 变更组为developers
chgrp -R sshd /etc/ssh # SSH配置目录组变更
5.5 权限掩码umask
工作原理:
实际权限 = 默认权限 & ~umask
默认权限:
- 文件:0666(rw-rw-rw-)
- 目录:0777(rwxrwxrwx)
umask值(普通用户默认0002):
- 0022 → 文件:0644(rw-r--r--),目录:0755(rwxr-xr-x)
- 0002 → 文件:0664(rw-rw-r--),目录:0775(rwxrwxr-x)
操作示例:
bash
umask # 查看当前掩码(0002)
umask 022 # 设置为022(更严格)
umask 077 # 私人模式(仅自己可读写)
5.6 目录权限的陷阱与真相
关键发现 :能否删除文件取决于父目录的写权限,而非文件自身权限!
bash
# 场景复现
[root@server ~]# mkdir /public && chmod 777 /public
[root@server ~]# touch /public/root_file.txt && chmod 600 /public/root_file.txt
[root@server ~]# su - normal_user
[normal_user@server ~]$ rm /public/root_file.txt
# 成功删除!尽管文件是600权限!
# 原理分析
# 删除操作=修改目录内容(移除条目),需要目录的w权限
目录权限矩阵:
| r | w | x | 效果 |
|---|---|---|---|
| ✓ | ✓ | ✓ | 完整控制(ls, cd, touch, rm) |
| ✓ | ✗ | ✓ | 只读访问(ls, cd, 不能修改) |
| ✗ | ✓ | ✓ | 可进入和操作,但无法列出(需提前知道文件名) |
| ✓ | ✓ | ✗ | 悲剧:可读写目录列表但无法进入(无实际用途) |
可参考阅读:
【Linux权限机制深入理解】为何没有目录写权限仍能修改文件权限?
从实验出发深入理解Linux目录权限:r、w、x分别控制什么?能否进入目录到底由谁决定?
5.7 粘滞位(Sticky Bit):/tmp的解决方案
问题 :在公共写目录(如/tmp)中,用户可删除他人文件
解决方案:
bash
chmod +t /public # 添加粘滞位(权限显示为rwxrwxrwt)
粘滞位规则 :
目录设有粘滞位后,文件只能被以下用户删除:
- 超级用户(root)
- 目录所有者
- 文件所有者
应用场景:
/tmp:临时文件目录- 多用户协作目录(如项目管理)
六、Shell进阶技巧
6.1 命令别名(alias)
作用:简化复杂命令,提升效率
bash
# 临时别名(当前终端有效)
alias ll='ls -alF'
alias gs='git status'
alias df='df -h'
# 永久别名(写入~/.bashrc)
echo "alias ll='ls -alF'" >> ~/.bashrc
source ~/.bashrc
# 查看别名
alias | grep ls
最佳实践别名集:
bash
# 文件操作
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# 安全删除
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 目录导航
alias ..='cd ..'
alias ...='cd ../..'
alias -- -='cd -' # 返回上次目录
# 日志查看
alias tailf='tail -f'
6.2 进程控制快捷键
| 快捷键 | 功能 | 说明 |
|---|---|---|
Tab |
命令/路径补全 | 双击显示所有匹配项 |
Ctrl + C |
发送SIGINT,终止前台进程 | 中断失控程序 |
Ctrl + D |
EOF信号,退出终端 | 也可用于退出交互式程序(python, bc) |
Ctrl + Z |
发送SIGTSTP,挂起进程 | 配合bg/fg使用 |
Ctrl + L |
清屏 | 等价于clear命令 |
Ctrl + R |
搜索历史命令 | 输入关键词自动匹配 |
6.3 文件传输:rzsz
安装与使用:
bash
# CentOS/RHEL
sudo yum install -y lrzsz
# Ubuntu/Debian
sudo apt install -y lrzsz
# XShell中操作
rz # 从Windows上传文件(弹出选择框)
sz file.txt # 从Linux下载文件到Windows
限制:仅支持XShell/SecureCRT等终端,不支持SSH原生终端。
七、实战:综合场景演练
场景1:日志分析与监控
bash
# 1. 创建测试日志
cnt=0; while [ $cnt -le 10000 ]; do echo "$(date +%T) - Request $cnt - $(($RANDOM%500+200))"; let cnt++; done > app.log
# 2. 实时监控错误
tail -f app.log | grep "500"
# 3. 分析成功请求
grep "200" app.log | wc -l
# 4. 提取时间窗口[1000,1500]行
head -1500 app.log | tail -501
场景2:权限修复脚本
bash
#!/bin/bash
# fix_permission.sh - 修复Web目录权限
WEB_DIR="/var/www/html"
WWW_USER="www-data"
# 设置目录权限:755
find "$WEB_DIR" -type d -exec chmod 755 {} \;
# 设置文件权限:644
find "$WEB_DIR" -type f -exec chmod 644 {} \;
# 设置上传目录可写
chmod 775 "$WEB_DIR/uploads"
# 设置粘滞位(多用户环境)
chmod +t "$WEB_DIR/shared"
# 修正所有者
chown -R "$WWW_USER:$WWW_USER" "$WEB_DIR"
场景3:备份策略
bash
#!/bin/bash
# backup.sh - 每日增量备份
BACKUP_DIR="/backup/$(date +%Y%m%d)"
LOG_FILE="/var/log/backup.log"
# 创建目录
mkdir -p "$BACKUP_DIR"
# 打包配置文件
tar -czvf "$BACKUP_DIR/config.tar.gz" /etc/nginx /etc/mysql
# 打包日志(排除access.log)
tar -czvf "$BACKUP_DIR/logs.tar.gz" --exclude="*access.log" /var/log/
# 记录备份信息
echo "[$(date)] Backup completed to $BACKUP_DIR" >> "$LOG_FILE"
# 删除7天前的备份
find /backup -type d -mtime +7 -exec rm -rf {} \;
八、总结与最佳实践
核心知识点回顾
- 文件系统:一切皆文件,单根树形结构
- 权限体系:UGO模型 + rwx权限 + umask掩码
- 命令组合 :管道
|与重定向>,>>是Shell强大之源 - 安全意识 :使用
-i交互模式,慎用rm -rf - 性能考量 :
find大文件系统耗时,less优于more处理大日志
新手避坑指南
| 坑点 | 现象 | 解决方案 |
|---|---|---|
| 权限不足 | Permission denied | 检查ls -l,使用sudo或chmod |
| 命令不存在 | command not found | 检查PATH,安装软件包 |
| 文件被占用 | Text file busy | 关闭进程或lsof查看占用者 |
| 删除不恢复 | 无回收站 | 使用-i或配置别名alias rm='rm -i' |
| 路径含空格 | 参数解析错误 | 用引号包裹"file name"或转义file\ name |
免责声明 :
本文指令基于CentOS / Ubuntu等主流发行版测试,不同系统版本、Shell环境及配置可能导致行为差异。
执行rm、chmod、chown等高危操作前,请务必确认命令参数 、备份关键数据 ,并建议在测试环境验证 。
生产环境操作需遵循企业变更流程,作者不对误操作引发的数据丢失、系统故障或权限问题承担责任 。
sudo命令使用需谨慎,错误授权可能导致提权风险。
封面图来源于网络,如有侵权,请联系删除!