🚀 一 chmod
🔐 文件详细属性
🛠️ Linux 中使用 ls -l 命令查看文件详细属性时的标准输出
📄 示例:
-rwxr-xr-- 1 alice dev 1024 Nov 1 test.sh
含义:文件 test.sh是一个 可执行的 Shell 脚本,alice 可以编辑、运行它;dev 组成员 可以运行和查看,但不能修改;其他任何人 只能看内容,不能改也不能运行
🔍 逐字段解析
| 字段 | 内容 | 含义说明 |
|---|---|---|
| 1 | -rwxr-xr-- |
文件类型 + 权限(共10个字符) |
| 2 | 1 |
硬链接数(Hard Link Count) |
| 3 | alice |
文件所有者(Owner / User) |
| 4 | dev |
文件所属用户组(Group) |
| 5 | 1024 |
文件大小(单位:字节 Bytes) |
| 6 | Nov 1 |
最后修改时间(Last Modified Time) |
| 7 | test.sh |
文件名 |
✅第1字段:-rwxr-xr--(权限与类型)
这是 10 个字符,分为两部分:
第1位:文件类型
-→ 普通文件(regular file)
其他常见类型:d→ 目录(directory)l→ 软链接(symbolic link)c→ 字符设备(如/dev/tty)b→ 块设备(如硬盘/dev/sda)
✅ 这里是 -,说明 test.sh 是一个普通文件(脚本)。
后9位:权限位(每3位一组,共3组)
在 Linux 中,每个文件都有 3 类用户 的 3 种权限 ,共 3×3 = 9 个权限位:
| 组别 | 字符位置 | 权限字符串 | 含义 |
|---|---|---|---|
| 所有者(User) | 第2~4位 | rwx |
文件所有者(alice):可读、可写、可执行 |
| 所属组(Group) | 第5~7位 | r-x |
同组用户(dev 组成员):可读、不可写、可执行 |
| 其他人(Others) | 第8~10位 | r-- |
其他所有人:只读,不能写,也不能执行 |
🔑 权限字母含义:
r= read(读) → 可查看内容w= write(写) → 可修改/删除内容x= execute(执行) → 对脚本/程序可运行;对目录表示"可进入"
🔐 修改文件权限--- chmod 命令
有两种常用方式修改权限:
✅ 方式1:数字模式(推荐,简洁)
chmod [三位八进制数] 文件名
权限对应数字:
r= 4w= 2x= 1
组合示例:
rwx= 4+2+1 = 7rw-= 4+2+0 = 6r-x= 4+0+1 = 5---= 0
所以:
chmod 755 file→ 所有者 rwx,组和其他人 rxchmod 644 file→ 所有者 rw,组和其他人 r(常见于普通文件)chmod 777 file→ 所有人全能(⚠️ 不安全,慎用)
✅ 方式2:符号模式(灵活,适合微调)
chmod [ugoa][+-=][rwx] 文件名
u:用户(所有者)g:组o:其他人a:所有人(all,等价于 ugo)
操作符:
+:增加权限-:移除权限=:设定权限(覆盖原有)
示例:
chmod u+x script.sh # 给所有者加执行权限
chmod g-w file.txt # 去掉组的写权限
chmod o=r file.txt # 设置其他人只有读权限
chmod a+r file.txt # 所有人都加读权限(等价于 chmod +r)
chmod ug=rw,o=r config.ini # 所有者和组:rw,其他人:r
#批量修复目录下所有脚本权限
#1. 进入测试目录
cd /project/tests/
#2. 给所有 .sh 文件加上执行权限
chmod +x *.sh
#3. 或更精确地:仅给所有者加执行
chmod u+x *.sh
❌ 常见错误 & 注意事项
| 错误操作 | 后果 | 正确做法 |
|---|---|---|
chmod 777 sensitive.conf |
安全风险!任何人可读写 | 用 600 或 640 |
忘记给脚本加 x 权限 |
Permission denied |
chmod +x script.sh |
对目录不设 x 权限 |
无法进入该目录 | 目录必须有 x 才能 cd 进去(没有 x,即使有 r 也无法 ls 或 cd!) |
📊 常用权限速查表
| 文件类型 | 推荐权限 | 说明 |
|---|---|---|
| 普通文件(如 .txt, .conf) | 644 |
所有者可读写,其他人只读 |
| 可执行脚本(.sh, 二进制) | 755 |
所有者可读写执行,其他人可读执行 |
| 私密文件(如 .ssh/id_rsa) | 600 |
仅所有者可读写,其他人无权访问 |
| Web 网站目录 | 755(目录),644(文件) |
保证 Nginx/Apache 能读取 |
| 临时共享文件 | 664 |
所有者和组可读写,其他人只读 |
🧪 三、场景实战
场景1:让测试脚本可执行
# 创建一个测试脚本
echo '#!/bin/bash\necho "Test OK!"' > test.sh
# 查看当前权限(默认可能没有 x)
ls -l test.sh
# -rw-r--r-- 1 user user 30 Nov 1 test.sh
# 添加执行权限(给所有者)
chmod u+x test.sh
# 再次查看
ls -l test.sh
# -rwxr--r-- 1 user user 30 Nov 1 test.sh
# 运行测试
./test.sh # 输出:Test OK!
✅ 成功!
场景2:禁止其他人修改测试配置文件
touch config.test
chmod 640 config.test # 所有者:rw,组:r,其他人:无权限
ls -l config.test
# -rw-r----- 1 user dev 0 Nov 1 config.test
这样,只有你和同组成员能读,其他人完全无法访问,更不能改。
🚀 二. vi/vim
✅ vi/vim 的三种工作模式
| 模式 | 进入方式 | 功能 | 退出方式 |
|---|---|---|---|
| 普通模式(Normal) | 启动 vim 或按 Esc |
移动光标、删除、复制、粘贴等命令操作 | 按 i/a/o 进入插入模式,或 : 进入命令模式 |
| 插入模式(Insert) | 在普通模式下按 i、a、o 等 |
输入/编辑文本 | 按 Esc 回到普通模式 |
| 命令模式(Command) | 在普通模式下按 : |
保存、退出、查找、替换等 | 执行命令后自动回到普通模式 |
💡 新手最容易卡住的地方:不知道当前在什么模式!
✅ 记住:按
Esc总是安全的,可确保回到普通模式。
✅ 1. 打开与退出
vim filename # 打开或创建文件
| 操作 | 命令 | 说明 |
|---|---|---|
| 保存并退出 | :wq 或 :x |
write + quit |
| 强制退出(不保存) | :q! |
quit + force |
| 仅保存不退出 | :w |
write |
| 退出但有修改时拒绝 | :q |
若有未保存内容会报错 |
⚠️ 注意:命令前必须先按
Esc进入普通模式!
✅ 2. 光标移动(普通模式下)
| 按键 | 功能 |
|---|---|
h / j / k / l |
左 / 下 / 上 / 右(vim 标志性操作) |
0(数字零) |
跳到行首 |
$ |
跳到行尾 |
gg |
跳到文件第一行 |
G |
跳到文件最后一行 |
5G |
跳到第 5 行 |
Ctrl + f |
向下翻页 |
Ctrl + b |
向上翻页 |
📌 场景 :快速跳到日志末尾看错误 → 按 G
✅ 3. 查找与定位((普通模式下))
/test " 向下查找关键词 "test"
?error " 向上查找 "error"
n " 跳到下一个匹配项
N " 跳到上一个匹配项
✅ 实战例子:
- 在日志中找
Exception:输入/Exception,在按回车,然后按n循环查看 - 快速定位配置项:
/port查看端口设置:(输入/port,按回车,执行:set hlsearch开启高亮(很多系统默认已开启),用n/N跳转)
✅ 4. 编辑操作(插入 & 修改)((普通模式下))
| 操作 | 按键 | 说明 |
|---|---|---|
| 在光标前插入 | i |
insert |
| 在光标后插入 | a |
append |
| 在下一行插入 | o |
open new line below |
| 删除当前字符 | x |
类似 Delete 键 |
| 删除整行 | dd |
delete line |
| 复制整行 | yy |
yank (copy) line |
| 粘贴 | p |
paste after cursor |
| 撤销 | u |
undo |
| 重做 | Ctrl + r |
redo |
📌 场景:
- 修改配置文件中的 IP:
/ip→回车→i→ 修改 →Esc→:wq - 删除某行错误配置:光标移到该行 →
dd→:wq
✅ 5. 替换(批量修改)
:%s/old/new/g " 全文将 old 替换为 new
:%s/old/new/gc " 替换时逐个确认(c = confirm)
:5,10s/foo/bar/g " 仅替换第5到10行
✅ 应用:
- 批量改测试环境 URL:
:%s/http:\/\/dev/http:\/\/test/g
✅ 6. 显示行号(调试必备!)
:set nu " 显示行号
:set nonu " 取消行号
✅ 强烈建议打开行号!便于定位错误位置(如"第 42 行语法错误")
✅ 7. 只读查看大文件(安全模式)
vim -R logfile.log # 以只读模式打开,防止误改
# 或
view logfile.log # 等价于 vim -R
🔒 日志时推荐使用,避免不小心修改生产日志!
🧩 四、常见问题 & 面试回答
Q1:如何在 vim 中快速跳到文件末尾?
按
G(大写)。如果是看日志,通常配合/ERROR或/Exception使用。
Q2:误操作进入 vim 不知道怎么退出怎么办?
按
Esc确保在普通模式,然后输入:q!强制退出不保存。这是每个 Linux 用户的"救命令"。
Q3:如何在 vim 中查找并高亮所有 "fail" 字样?
- 输入
/fail查找- 执行
:set hlsearch开启高亮(很多系统默认已开启)- 用
n/N跳转
Q4:dd 和 x 有什么区别?
dd删除整行 ;x删除光标所在的一个字符
✅ vim 技巧总结
| 场景 | 推荐操作 |
|---|---|
| 查看日志 | vim log.txt → G → /ERROR → n |
| 修改配置 | vim config.ini → /port→回车 → i → 改 → Esc → :wq |
| 写测试脚本 | vim test.sh → i → 输入内容 → Esc → :wq → chmod +x test.sh |
| 安全查看 | view huge.log(防止误改) |
| 调试脚本 | :set nu 显示行号,快速定位报错行 |
🚀 三. 查看文件内容
1. cat ------ "打印整个文件"
✅ 基本用法:
cat file.txt # 显示 file.txt 的全部内容
cat -n file.txt # 显示行号
cat a.txt > combined.txt # 把内容写入新文件(常用于合并)
2. less ------ "安全地查看大文件"
类似
more,但功能更强(可向前/向后翻页)
✅ 基本用法:
less large.log # 分页查看大文件
🔑 操作快捷键(在 less 界面中):
| 按键 | 功能 |
|---|---|
空格 或 f |
向下翻页 |
b |
向上翻页 |
g |
跳到文件开头 |
G |
跳到文件末尾 |
/keyword |
向下搜索关键词 |
?keyword |
向上搜索关键词 |
n / N |
下一个 / 上一个匹配项 |
q |
退出 |
3. head ------ "看文件开头"
默认显示前 10 行
✅ 基本用法:
head file.txt # 显示前 10 行
head -n 5 file.txt # 显示前 5 行
head -20 file.txt # 同上(-n 可省略)
4. tail ------ "看文件结尾"
默认显示最后 10 行 ------ 日志监控神器!
✅ 基本用法:
tail file.log # 显示最后 10 行
tail -n 20 file.log # 显示最后 20 行
tail -5 file.log # 同上
tail -f /var/log/nginx/access.log #实时跟踪日志更新
#-f = follow(跟随)
#新日志一产生,立即显示在终端
#按 Ctrl+C 退出
🧩 五大命令协作示例
场景:分析 Nginx 访问日志,找出访问最多的 IP
# 1. 看日志格式(前 3 行)
head -3 /var/log/nginx/access.log
# 2. 提取所有 IP(第 1 列),统计出现次数,取 Top 5
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -5
# 3. 如果只想看含 "404" 的请求
grep " 404 " /var/log/nginx/access.log | head
场景:调试 Java 应用崩溃
# 实时监控 app.log 日志文件,并只显示包含 "ERROR" 或 "Exception" 的行。
tail -f app.log | grep -E "ERROR|Exception"
#-E 表示启用扩展正则表达式(Extended Regex),"ERROR|Exception" 中的 | 被解释为 "或" 的意思
🚀 三. yum-软件包管理器
📦 一、什么是 yum?
✅类似于 Windows 的"应用商店"或 Ubuntu 的
apt
- 作用 :Red Hat 系 Linux(如 CentOS、RHEL、Fedora)的 软件包管理器
- 功能 :自动下载、安装、更新、卸载软件,并自动解决依赖关系
✅ 🆚 yum 、 apt , dnf 对比
| 系统 | 包管理器 | 安装命令 |
|---|---|---|
| CentOS / RHEL 7 及以下 | yum |
yum install xxx |
| CentOS 8+ / Rocky / AlmaLinux | dnf(兼容 yum) |
dnf install xxx 或 yum install xxx |
| Ubuntu / Debian | apt |
apt install xxx |
在测试中,先用
cat /etc/os-release确认系统类型!
📦 二、apt 常用命令速查表
✅ 1. 在 Debian(以及 Ubuntu、Linux Mint 等)中,请使用以下命令替代 yum:
| 功能 | Red Hat / CentOS (yum) |
Debian / Ubuntu (apt) |
|---|---|---|
| 更新所有软件/ 更新软件包 | yum update或 yum update 包名 |
apt update/ apt update 包名 |
| 安装软件 | yum install xxx或 yum install -y xxx(-y 自动确认 yes,跳过交互式确认提示) |
apt install xxx/ apt install -y xxx(-y 自动确认 yes,跳过交互式确认提示) |
| 卸载软件 | yum remove xxx |
apt remove xxx |
| 搜索软件 | yum search xxx |
apt search xxx |
| 查看已安装包/ 查看指定已安装包 | yum list installed或 **`yum list installed |
grep 包名`** |
| 升级所有软件(不会删除旧包) | yum upgrade |
apt upgrade |
| 查看软件包信息 | yum info 包名 | apt info 包名 |
| 清理缓存(释放空间 | yum clean all | apt clean all |
| 列出可用仓库 | yum repolist | apt repolist |
| 查找命令所属包 | yum provides 命令或 dnf provides 命令 |
1、先装 apt-file:: apt install apt-file 2. 首次使用未初始化缓存,需要更新 apt-file 的缓存( apt-file 工具自己的 update 子命令,和 apt update 不同!): apt-file update 3. 查询想要的命令 apt-file search /sbin/命令 |
| 安装 EPEL 源(扩展软件库) | sudo yum install -y epel-release或 sudo dnf install -y epel-release |
✅实例:
sudo yum search nginx # 查找 nginx 相关包
sudo yum search telnet # 找 telnet 客户端
sudo yum install -y curl # 安装 curl(-y 自动确认 yes)
sudo yum install -y net-tools # 安装 ifconfig、netstat 等网络工具
sudo yum install -y vim # 安装 vim 编辑器
sudo yum install -y mysql-server # 安装 MySQL 服务
sudo yum remove -y firewalld # 卸载防火墙(测试环境常关闭)
sudo yum update # 更新所有已安装的包(谨慎在生产用)
sudo yum update 包名 # 只更新指定包
sudo yum list installed # 列出所有已安装的软件
sudo yum list installed | grep nginx # 查看是否装了 nginx
rpm -qa | grep java # 也可用 rpm 查询(yum 底层基于 rpm)
sudo yum info 包名 # 查看版本、描述、大小等
sudo yum clean all # 清除下载的软件包缓存
sudo yum makecache # 重建缓存(可选)
sudo yum repolist # 查看当前启用的软件源
yum provides ifconfig #查看ifconfig属于哪个软件包
# 输出:net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
# 安装 EPEL 源
sudo yum install -y epel-release # CentOS 7
sudo yum install -y htop jq tree # 然后就可以安装更多工具
📦 三、 实战场景举例
场景1:服务器没有 ifconfig,如何解决?
# 先搜索
sudo yum search ifconfig
# 输出提示:net-tools 提供 ifconfig
# 安装
sudo yum install -y net-tools
# 验证
ifconfig
场景3:检查 Java 是否安装,若未安装,安装
sudo yum list installed | grep -i java
# 或
java -version # 如果没装会提示命令未找到
若未安装
sudo yum install -y java-1.8.0-openjdk
场景4:安装 EPEL 源(扩展软件库)
很多工具(如 htop、jq)不在默认源中,需先装 EPEL:
# CentOS 7
sudo yum install -y epel-release
# CentOS 8+/Rocky/AlmaLinux
sudo dnf install -y epel-release # 注意:CentOS 8+ 默认用 dnf(yum 的新版)
# 然后就可以安装更多工具
sudo yum install -y htop jq tree
💡
dnf是yum的下一代,命令基本兼容。在较新系统中yum实际是dnf的软链接。
✅ 注意事项
| 问题 | 原因 | 解决方案 |
|---|---|---|
yum: command not found |
系统不是 Red Hat 系(如 Ubuntu) | 改用 apt |
| 安装时报错 "No package xxx available" | 软件包不在默认源中 | 启用 EPEL 源或配置第三方源 |
| 权限不足 | 没有 sudo 权限 | 联系运维或使用 root 用户 |
| 网络不通 | 无法连接 yum 源 | 检查网络、代理或使用本地源 |
🎯 问题
Q1:yum install -y 中的 -y 是什么意思?
A:表示自动回答 "yes",跳过交互式确认提示。在自动化脚本中非常常用。
Q2:如何查看某个命令属于哪个软件包?
A:使用
yum provides:
yum provides ifconfig # 输出:net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
Q3:yum update 和 yum upgrade 有什么区别?
在 yum 中,两者几乎等价。但在某些系统(如 dnf)中,
upgrade不会删除旧包,而update可能会。一般测试用yum update即可。
✅ 总结:yum 命令清单
| | 命令 |
| # 搜索 | yum search xxx |
| # 安装(带 -y) | sudo yum install -y xxx |
| # 卸载 | sudo yum remove -y xxx |
| # 查看是否安装 | yum list installed | grep xxx |
| # 安装 EPEL 源(扩展包) | sudo yum install -y epel-release |
| # 清理缓存 | sudo yum clean a |
|---|
🚀 四. systemd 系统和服务管理器的命令行工具
systemctl 是与 systemd 交互的主要命令行工具,用于 管理系统服务(unit)
一、systemctl:systemd 的命令行接口
| 功能 | 命令 | 说明 |
|---|---|---|
| 查看服务状态 | systemctl status nginx |
显示是否运行、进程ID、最近日志片段 |
| 启动服务 | systemctl start nginx |
立即启动(临时,重启失效) |
| 停止服务 | systemctl stop nginx |
立即停止 |
| 重启服务 | systemctl restart nginx |
先停再启(配置变更后常用) |
| 重载配置 | systemctl reload nginx |
不中断服务,仅重读配置(如 Nginx 支持) |
| 设置开机自启 | systemctl enable nginx |
创建软链接,实现持久化自启 |
| 取消开机自启 | systemctl disable nginx |
删除自启链接 |
| 查看是否开机自启 | systemctl is-enabled nginx |
输出 enabled / disabled |
| 列出所有服务 | systemctl list-units --type=service |
查看所有已加载的服务 |
| 列出失败的服务 | systemctl --failed |
快速定位启动失败的服务 |
🧪 二、实战示例
场景1:快速部署一个 Web 测试服务器,部署完 Nginx 后验证服务
# 安装 nginx
sudo yum install -y nginx
# 启动并设为自启
systemctl start nginx
systemctl enable nginx
# 检查状态
systemctl status nginx
# 测试访问
curl http://localhost
场景2:排查 MySQL 启动失败
systemctl status mysql
# 如果看到 "Failed to start", 可进一步看日志:
journalctl -u mysql -n 50 # 查看该服务最近50行日志
场景3:临时关闭防火墙
systemctl stop firewalld # CentOS/RHEL
# 或
systemctl stop ufw # Ubuntu/Debian
systemctl disable firewalld # 永久关闭自启(谨慎!)
