修改文件权限--- 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 = 4
  • w = 2
  • x = 1

组合示例:

  • rwx = 4+2+1 = 7
  • rw- = 4+2+0 = 6
  • r-x = 4+0+1 = 5
  • --- = 0

所以:

  • chmod 755 file → 所有者 rwx,组和其他人 rx
  • chmod 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 安全风险!任何人可读写 600640
忘记给脚本加 x 权限 Permission denied chmod +x script.sh
对目录不设 x 权限 无法进入该目录 目录必须有 x 才能 cd 进去(没有 x,即使有 r 也无法 lscd!)

📊 常用权限速查表

文件类型 推荐权限 说明
普通文件(如 .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) 在普通模式下按 iao 输入/编辑文本 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" 字样?
  1. 输入 /fail 查找
  2. 执行 :set hlsearch 开启高亮(很多系统默认已开启)
  3. n/N 跳转

Q4:dd 和 x 有什么区别?

dd 删除整行x 删除光标所在的一个字符


✅ vim 技巧总结

场景 推荐操作
查看日志 vim log.txtG/ERRORn
修改配置 vim config.ini/port→回车 → i → 改 → Esc:wq
写测试脚本 vim test.shi → 输入内容 → Esc:wqchmod +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 xxxyum 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 源(扩展软件库)

很多工具(如 htopjq)不在默认源中,需先装 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

💡 dnfyum 的下一代,命令基本兼容。在较新系统中 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 updateyum 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     # 永久关闭自启(谨慎!)
相关推荐
烛阴2 小时前
从零开始掌握C#核心:变量与数据类型
前端·c#
han_2 小时前
前端高频面试题之Vuex篇
前端·vue.js·面试
qq_415216253 小时前
vue3搭建项目yarn+vue3+webpack+less+element-plus
前端·webpack·less
天天向上10243 小时前
VueUse的使用
前端·vue.js·vscode
猪猪拆迁队4 小时前
前端图形引擎架构设计:双引擎架构设计
前端·后端·架构
宋辰月4 小时前
学习react第三天
前端·学习·react.js
bug总结4 小时前
更新原生小程序封装(新增缓存订阅)完美解决
前端·缓存·小程序
5335ld5 小时前
后端给的post 方法但是要求传表单数据格式(没有{})
开发语言·前端·javascript·vue.js·ecmascript
二川bro5 小时前
第33节:程序化生成与无限地形算法
前端·算法·3d·threejs