修改文件权限--- chmod ,vi/vim,yum-软件包管理器,systemctl管理系统服务
🚀 一 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 显示行号,快速定位报错行 |
🚀 三. 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 remove xxx | apt remove xxx |
| 搜索软件 | yum search xxx | apt search xxx |
查看已安装包/ 查看指定已安装包 |
|
|
| 升级所有软件(不会删除旧包) | yum upgrade | apt upgrade |
| 查看软件包信息 | yum info 包名 | apt info 包名 |
| 清理缓存(释放空间 | yum clean all | apt clean all |
| 列出可用仓库 | yum repolist | apt repolist |
| 查找命令所属包 |
| 1、先装 apt install 2. 首次使用未初始化缓存,需要更新
|
| 安装 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/Debiansystemctl disable firewalld # 永久关闭自启(谨慎!)