Linux操作与文件系统基础
Linux操作与文件系统基础
Linux作为服务器运维、后端开发、云计算领域的核心操作系统,其用户管理、权限体系、文件处理、文本解析是从业者的必备底层技能。不同于Windows可视化操作,Linux一切皆文件的设计思想,让文件系统与命令行操作成为核心核心。本文将系统性讲解用户管理、权限体系、Vim编辑器、文本工具、正则表达式、文件检索、压缩打包、sed/awk流处理九大核心知识点,每个模块配套落地实操,且后续案例层层复用前文知识点,贴合企业面试与生产环境实战场景,帮助读者从零掌握Linux基础核心能力。
一、Linux用户管理基础(配置文件+核心命令+实操)
Linux是多用户、多任务的分时操作系统,支持多个用户同时登录系统、独立操作资源。系统通过用户ID、组ID区分不同用户权限,所有用户信息、认证信息、组信息均通过固定配置文件存储,搭配专属命令实现用户的增删改查,是权限管控的基础前提。
1.1 核心用户配置文件深度解读
Linux用户体系的核心配置文件共3个,分别存储用户信息、密码信息、用户组信息,是理解用户管理的核心,所有用户操作命令本质都是修改这三个文件。
1.1.1 /etc/passwd 用户信息配置文件
该文件存储系统所有用户的基本信息,所有用户均可读取,仅root可修改,每行对应一个用户,以冒号分隔7个字段,格式固定:用户名:密码占位符(x):UID:GID:用户备注:家目录:登录Shell。
字段详解:
-
用户名:登录系统的账号名称,唯一标识
-
密码占位符x:早期存储加密密码,现在密码迁移至/etc/shadow,x仅作占位
-
UID:用户ID,系统唯一标识用户,root的UID=0,系统用户UID=1-999,普通用户UID≥1000
-
GID:初始组ID,对应用户默认所属用户组
-
用户备注:用户描述信息,可自定义为空
-
家目录:用户登录后的默认工作目录,普通用户一般在/home/用户名,root为/root
-
登录Shell:用户登录后的命令解释器,默认/bin/bash,禁止登录用户为/sbin/nologin
1.1.2 /etc/shadow 用户密码配置文件
该文件存储用户加密密码及密码有效期信息,仅root用户可读写,普通用户无任何权限,保障密码安全。每行对应一个用户密码信息,9个字段,核心字段为加密密码、密码过期时间。
核心作用:解决早期passwd文件所有人可读导致的密码泄露风险,是Linux密码安全机制的核心文件。
1.1.3 /etc/group 用户组配置文件
存储系统所有用户组信息,每行对应一个组,字段格式:组名:占位符x:GID:附属用户,主要记录组ID和组内附加用户,实现多用户权限统一管理。
1.2 用户与用户组核心操作命令
所有用户操作命令均适配生产环境,区分root与普通用户权限,普通用户仅可修改自身密码,增删改用户必须root权限。
| 命令 | 功能说明 | 常用参数 |
|---|---|---|
| useradd | 创建普通用户 | -m 自动创建家目录;-g 指定初始组;-G 指定附属组;-s 指定登录Shell |
| passwd | 设置/修改用户密码 | 无参数改自身密码;passwd 用户名 修改指定用户密码(root专属) |
| userdel | 删除用户 | -r 彻底删除用户+家目录+邮件文件,避免残留垃圾文件 |
| usermod | 修改用户属性 | -g 修改初始组;-G 修改附属组;-s 修改登录Shell;-L 锁定用户;-U 解锁用户 |
| groupadd | 创建用户组 | -g 指定组ID |
| id | 查看用户UID、GID、所属组 | id 用户名 查看指定用户信息 |
| groupdel | 删除用户组 | -f 强制删除非空用户组(慎用);默认仅删除无用户依附的空组 |
1.3 模块实操:完整用户创建与配置流程
实操目标:创建运维专属用户 ops01,指定初始组为ops,附属组为root,自动创建家目录,禁止过期,验证配置文件变化。
# 1. 创建用户组ops [root@rocky ~ ]# groupadd ops [root@rocky ~ ]# cat /etc/passwd |tail clevis:x:998:997:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/usr/sbin/nologin sssd:x:997:996:User for sssd:/run/sssd:/sbin/nologin libstoragemgmt:x:995:995:daemon account for libstoragemgmt:/:/usr/sbin/nologin systemd-coredump:x:994:994:systemd Core Dumper:/:/usr/sbin/nologin setroubleshoot:x:993:993:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin chrony:x:992:992:chrony system user:/var/lib/chrony:/sbin/nologin tcpdump:x:72:72:tcpdump:/:/usr/sbin/nologin mz:x:1000:1000:mz:/home/mz:/bin/bash ops1:x:1001:1001::/home/ops1:/bin/bash # 2. 创建用户ops1,指定初始组ops,附属组root,自动创建家目录(ubuntu 不会自动创建家目录 需要加-m rocky不加-m自动会创建) [root@ubuntu24-13 ~ ]# useradd ops1 ishere: ~ [root@ubuntu24-13 ~ ]# ls /home/ mz ishere: ~ [root@ubuntu24-13 ~ ]# useradd -m ops2 ishere: ~ [root@ubuntu24-13 ~ ]# ls /home/ mz ops2 ishere: ~ [root@ubuntu24-13 ~ ]# [root@rocky ~ ]# useradd -g ops -G root ops1 [root@rocky ~ ]# id ops1 uid=1001(ops1) gid=1001(ops) groups=1001(ops),0(root) # 3. 设置用户登录密码 [root@rocky ~ ]# passwd ops1 New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: password updated successfully [root@rocky ~ ]# cat /etc/shadow |grep ops1 #查看密码文件 ops1的信息 ops1:$y$j9T$1t.Q20RObPBZ9uNrnib2/0$jGpFmPpmBHbOafVQ0tkr5BAi218iXK9yLXPTNWAuYV2:20624:0:99999:7::: # 4. 查看用户属性,验证UID、GID、所属组 [root@rocky ~ ]# id ops1 uid=1001(ops1) gid=1001(ops) groups=1001(ops),0(root) # 5. 查看passwd文件,确认用户配置 [root@rocky ~ ]# grep ops1 /etc/passwd ops1:x:1001:1001::/home/ops1:/bin/bash # 6. 锁定用户(禁止登录) [root@rocky ~ ]# usermod -L ops1 here: ~ [root@rocky ~ ]# grep ops1 /etc/shadow #禁用密码登录后 加密密码前面会有个! ops1:!$y$j9T$1t.Q20RObPBZ9uNrnib2/0$jGpFmPpmBHbOafVQ0tkr5BAi218iXK9yLXPTNWAuYV2:20624:0:99999:7::: here: ~ [root@rocky ~ ]# su - mz [mz@rocky ~]$ su - ops1 Password: su: Authentication failure # 7. 解锁用户 [root@rocky ~ ]# usermod -U ops1 [root@rocky ~ ]# grep ops1 /etc/shadow ops1:$y$j9T$1t.Q20RObPBZ9uNrnib2/0$jGpFmPpmBHbOafVQ0tkr5BAi218iXK9yLXPTNWAuYV2:20624:0:99999:7::: # 8. 彻底删除用户及数据 [root@rocky ~ ]# userdel -r ops1 here: ~ [root@rocky ~ ]# id ops1 id: ‘ops1’: no such user here: ~ [root@rocky ~ ]# grep ops1 /etc/passwd /etc/shadow /etc/group here: ~ [root@rocky ~ ]# [root@rocky ~ ]# grep ops /etc/group ops:x:1001: #删除用户组 [root@rocky ~ ]# grep ops /etc/group
实操总结:用户创建本质是系统自动修改passwd、shadow、group三个配置文件,所有命令操作均为可视化封装,理解配置文件可快速排查用户登录异常问题。
二、Linux用户与文件权限体系
Linux权限体系是系统安全的核心,严格区分文件所有者、所属组、其他用户三类主体的读、写、执行权限,结合前文用户体系,实现精细化资源管控,是企业面试高频考点。
2.1 权限体系核心原理
Linux一切皆文件,所有文件/目录都拥有9位基础权限,分为三组,每组3位,对应三类用户:
-
所有者权限(u):文件创建者/指定拥有者,优先级最高
-
所属组权限(g):用户组内所有用户的权限
-
其他用户权限(o):非所有者、非所属组的所有系统用户
权限标识与数值对应(核心考点):
-
读权限r(4):文件可查看内容,目录可列出列表
-
写权限w(2):文件可修改删除,目录可新增/删除文件
-
执行权限x(1):文件可运行(脚本/程序),目录可进入切换
常见权限组合:755(rwxr-xr-x)(目录默认权限)、644(rw-r--r--)(文件默认权限)。
2.2 三大权限操作命令详解
2.2.1 chown:修改文件所有者和所属组
核心功能:变更文件的拥有用户、所属组,仅root可执行,普通用户无权限修改文件所有者。
语法:chown [用户]:[组] 文件名
# 仅修改所有者为ops01 [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 root root 0 Jun 20 15:51 test.txt here: ~ [root@rocky ~ ]# chown ops01 test.txt here: ~ [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 root 0 Jun 20 15:51 test.txt # 同时修改所有者为ops01、所属组为ops [root@rocky ~ ]# chown ops01:ops test.txt here: ~ [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 ops 0 Jun 20 15:51 test.txt # 仅修改所属组为IT [root@rocky ~ ]# chown :IT test.txt here: ~ [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 IT 0 Jun 20 15:51 test.txt here: ~ #不使用-R 无法递归修改目录下所有的文件目录 [root@rocky ~ ]# mkdir -p data/test/a here: ~ [root@rocky ~ ]# tree data/ data/ └── test └── a 3 directories, 0 files here: ~ [root@rocky ~ ]# chown ops01:ops data/ here: ~ [root@rocky ~ ]# ll data/ total 0 drwxr-xr-x. 3 root root 15 Jun 20 16:14 test here: ~ [root@rocky ~ ]# ll data/ -d drwxr-xr-x. 3 ops01 ops 18 Jun 20 16:14 data/ here: ~ #递归修改目录下所有文件权限 [root@rocky ~ ]# chown -R ops01:ops data/ here: ~ [root@rocky ~ ]# ll data/ total 0 drwxr-xr-x. 3 ops01 ops 15 Jun 20 16:14 test here: ~ [root@rocky ~ ]# ll data/test/ total 0 drwxr-xr-x. 2 ops01 ops 6 Jun 20 16:14 a here: ~ [root@rocky ~ ]#
2.2.2 chgrp:单独修改文件所属组
核心功能:专属修改文件/目录的所属用户组,可替代chown的组修改功能,语法更简洁。
# 修改test.txt所属组为ops [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 IT 0 Jun 20 15:51 test.txt here: ~ [root@rocky ~ ]# chgrp ops test.txt here: ~ [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 ops 0 Jun 20 15:51 test.txt here: ~ # 递归修改目录所有文件所属组 [root@rocky ~ ]# chgrp -R IT data/ here: ~ [root@rocky ~ ]# ll data/ total 0 drwxr-xr-x. 3 ops01 IT 15 Jun 20 16:14 test here: ~ [root@rocky ~ ]# ll data/test/ total 0 drwxr-xr-x. 2 ops01 IT 6 Jun 20 16:14 a here: ~
2.2.3 chmod:修改文件权限(最常用)
支持符号法和数值法两种修改方式,生产中数值法更高效。
1. 数值法:通过权限数值相加设置,精准可控
# 设置文件权限644(rw-r--r--) [root@rocky ~ ]# chmod 644 test.txt here: ~ [root@rocky ~ ]# ll test.txt -rw-r--r--. 1 ops01 ops 0 Jun 20 15:51 test.txt # 设置目录权限755(rwxr-xr-x) [root@rocky ~ ]# chmod 755 data/ here: ~ [root@rocky ~ ]# ll data/ -d drwxr-xr-x. 3 ops01 IT 18 Jun 20 16:14 data/ here: ~ [root@rocky ~ ]# # 递归修改目录及子文件权限 [root@rocky ~ ]# chmod -R 700 data/ here: ~ [root@rocky ~ ]# ll data/test/ total 0 drwx------. 2 ops01 IT 6 Jun 20 16:14 a here: ~
2. 符号法:按需增减权限,无需计算数值
# 给所有者添加执行权限 here: ~/data/test [root@rocky test ]# ll total 0 d---------. 2 ops01 IT 6 Jun 20 16:14 a here: ~/data/test [root@rocky test ]# chmod u+x a here: ~/data/test [root@rocky test ]# ll total 0 d--x------. 2 ops01 IT 6 Jun 20 16:14 a # 取消其他用户读权限 [root@rocky test ]# ll total 0 drwxrwxrwx. 2 ops01 IT 6 Jun 20 16:14 a here: ~/data/test [root@rocky test ]# chmod o-r a here: ~/data/test [root@rocky test ]# ll total 0 drwxrwx-wx. 2 ops01 IT 6 Jun 20 16:14 a here: ~/data/test # 给所属组添加读写权限 [root@rocky test ]# ll a -d d---------. 2 ops01 IT 6 Jun 20 16:14 a here: ~/data/test [root@rocky test ]# chmod g+rw a here: ~/data/test [root@rocky test ]# ll a -d d---rw----. 2 ops01 IT 6 Jun 20 16:14 a here: ~/data/test
2.3 模块综合实操
实操目标:基于前文创建的ops用户组、ops01用户,完成文件权限精细化配置。
# 1. 创建测试文件与目录 here: ~ [root@rocky ~ ]# mkdir -p /data/ops && touch /data/ops/log.txt # 2. 修改目录所有者为ops01,所属组为ops here: ~ [root@rocky ~ ]# chown -R ops01:ops /data/ # 3. 设置目录/data/ops权限755(所有者可读写执行,其他人只读进入) [root@rocky ~ ]# chmod 755 /data/ops here: ~ [root@rocky ~ ]# ll /data/ total 0 drwxr-xr-x. 2 ops01 ops 21 Jun 20 16:33 ops # 4. 设置日志文件权限644,禁止其他用户修改 [root@rocky ~ ]# chmod 644 /data/ops/log.txt here: ~ [root@rocky ~ ]# ll /data/ops/ total 0 -rw-r--r--. 1 ops01 ops 0 Jun 20 16:33 log.txt here: ~ [root@rocky ~ ]# # 5. 给shell脚本添加执行权限 [root@rocky ~ ]# touch /data/ops/run.sh && chmod u+x /data/ops/run.sh here: ~ [root@rocky ~ ]# ll /data/ops/run.sh -rwxr--r--. 1 root root 0 Jun 20 16:43 /data/ops/run.sh here: ~ [root@rocky ~ ]# # 6. 查看权限配置结果 [root@rocky ~ ]# ls -ld /data/ops/ && ls -l /data/ops drwxr-xr-x. 2 ops01 ops 35 Jun 20 16:43 /data/ops/ total 0 -rw-r--r--. 1 ops01 ops 0 Jun 20 16:33 log.txt -rwxr--r--. 1 root root 0 Jun 20 16:43 run.sh here: ~ [root@rocky ~ ]#
2.4 面试高频考点解析
面试题 1:文件权限600、644、755分别适用于什么场景?
参考答案:600(仅所有者读写)适用于密码、密钥等敏感文件;644(所有者读写,他人只读)适用于普通配置文件、日志文件;755适用于程序目录、脚本目录,保障可访问可执行。
面试题2:为什么目录需要执行权限才能进入?
参考答案:目录的执行权限是进入目录、读取目录内文件inode信息的核心权限,仅有读权限只能查看目录列表,无法cd进入、无法操作目录内文件。
三、Vim编辑器全维度实操(基础+定制+可视化+查找)
Vim是Linux系统默认的终端文本编辑器,无图形界面、轻量化、功能强大,是运维、开发必备工具。区别于普通编辑器,Vim拥有多种工作模式,熟练掌握可大幅提升文件编辑效率,所有系统配置文件、脚本文件均默认用Vim编辑。
3.1 Vim四大核心工作模式
Vim的核心精髓是模式切换,不同模式对应不同操作,新手卡顿大多是模式不熟悉:
-
普通模式(默认):打开文件默认进入,用于光标移动、复制、删除、撤销,不可直接输入文本
-
编辑模式(插入模式):按i/a/o进入,可输入、修改文本,按ESC退回普通模式
-
命令模式:普通模式按:进入,用于保存、退出、查找、替换、权限修改等批量操作
-
可视化模式:普通模式按v/V/Ctrl+v进入,用于批量选中、批量编辑文本
3.2 基础操作命令大全
3.2.1 文件打开与退出
vim 文件名 # 打开/创建文件 :w # 保存文件 :q # 退出文件(无修改) :wq # 保存并退出 :q! # 强制退出(不保存修改) :wq! # 强制保存退出(只读文件,root可用)
3.2.2 普通模式核心操作
光标移动:gg(文件顶部)、G(文件底部)、0(行首)、$(行尾)、h/j/k/l(左右上下)
文本操作:dd(删除整行)、yy(复制整行)、p(粘贴)、u(撤销)、Ctrl+r(恢复撤销)
3.3 Vim属性永久定制方法
默认Vim无行号、无语法高亮、缩进混乱,可通过配置文件永久定制,分为用户级和系统级配置。
-
用户级配置(仅当前用户生效):
~/.vimrc -
系统级配置(所有用户生效,root):
/etc/vim/vimrc
常用定制配置(直接写入.vimrc):
set nu # 显示行号 set syntax=on # 开启语法高亮 set tabstop=4 # Tab键缩进4个字符 set shiftwidth=4 # 自动缩进4字符 set autoindent # 继承上一行缩进 set encoding=utf-8 # 中文不乱码
配置生效:保存退出后,重新打开Vim即可永久生效,无需重复设置。
3.4 可视化模式高阶操作
可视化模式用于批量操作文本,解决单行操作效率低的问题,三大可视化模式:
-
字符可视化(v):选中单个字符/局部文本,用于局部删除、替换
-
行可视化(V):选中整行文本,用于批量复制、删除多行
-
块可视化(Ctrl+v):矩形选中,批量注释、批量删除前缀(运维高频)
高频实操:批量注释多行代码
1. 按Ctrl+v进入块可视化模式 2. 上下光标选中需要注释的行首 3. 按Shift+i进入插入模式 4. 输入注释符# 5. 按ESC,所有选中行自动完成注释
3.5 Vim文件查找与替换技巧
3.5.1 实时查找(命令模式)
:/关键词 # 向下查找关键词 :?关键词 # 向上查找关键词 n # 跳转到下一个匹配结果 N # 跳转到上一个匹配结果 :set ic # 忽略大小写查找 :set noic # 恢复大小写敏感
3.5.2 批量替换(生产高频)
:%s/旧内容/新内容/g # 全文替换所有匹配内容 :1,10s/旧/新/g # 1-10行批量替换 :%s/内容//g # 全文删除指定内容
3.6 综合实操(复用权限知识点)
实操目标:用Vim编辑配置文件,定制编辑器属性,批量修改内容,配置文件权限优化。
# 1. 编辑用户配置文件(复用前文用户管理知识) vim /etc/passwd # 2. 开启行号、忽略大小写查找用户ops01 :set nu && :set ic && :/ops01 # 3. 批量替换文件中root为admin :%s/root/admin/g # 4. 保存退出后,设置配置文件权限600(敏感文件权限) chmod 600 /etc/passwd
四、文本查看与处理工具(功能+场景+面试案例)
Linux提供大量轻量化文本工具,用于日志查看、文本筛选、内容统计,是日常运维、面试高频模块,本章节结合前文Vim、权限知识,搭配真实面试案例落地。
4.1 常用文本工具功能与使用场景
| 命令 | 核心功能 | 适用场景 |
|---|---|---|
| cat | 查看完整文件内容、拼接文件 | 小文件查看、文本合并,禁止查看大文件 |
| less | 分页查看文件,支持上下滚动、查找 | 大日志文件查看(首选),不加载全部内容 |
| head | 查看文件前N行(默认10行) | 查看日志开头、配置文件头部信息 |
| tail | 查看文件后N行,-f实时监控 | 实时监控日志输出(运维核心) |
| wc | 统计行数、单词数、字节数 | 日志行数统计、数据量统计 |
| grep | 文本关键词筛选、匹配查找 | 日志过滤、配置检索、批量匹配 |
4.2 核心命令实操演示
# 1. 查看文件前5行 here: ~ [root@rocky ~ ]# head -n5 /etc/passwd root:x:0:0:Super User:/root:/bin/bash bin:x:1:1:bin:/bin:/usr/sbin/nologin daemon:x:2:2:daemon:/sbin:/usr/sbin/nologin adm:x:3:4:adm:/var/adm:/usr/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/usr/sbin/nologin here: ~ # 2. 实时监控系统日志 [root@rocky ~ ]# tail -f /var/log/messages Jun 20 16:20:12 rocky systemd[1]: dnf-makecache.service: Deactivated successfully. Jun 20 16:20:12 rocky systemd[1]: Finished dnf-makecache.service - dnf makecache. Jun 20 16:20:12 rocky systemd[1]: dnf-makecache.service: Consumed 2.095s CPU time, 64.6M memory peak. Jun 20 16:22:08 rocky systemd[1]: session-11.scope: Deactivated successfully. Jun 20 16:22:08 rocky systemd[1]: session-11.scope: Consumed 1min 55.331s CPU time, 30.7M memory peak. Jun 20 16:22:08 rocky systemd-logind[907]: Session 11 logged out. Waiting for processes to exit. Jun 20 16:22:08 rocky systemd-logind[907]: Removed session 11. Jun 20 17:00:09 rocky systemd[1]: session-3.scope: Deactivated successfully. Jun 20 17:00:09 rocky systemd-logind[907]: Session 3 logged out. Waiting for processes to exit. Jun 20 17:00:09 rocky systemd-logind[907]: Removed session 3. # 3. 统计用户配置文件行数 [root@rocky ~ ]# wc -l /etc/passwd 27 /etc/passwd # 4. 筛选所有root相关用户(复用用户管理知识) here: ~ [root@rocky ~ ]# grep "root" /etc/passwd root:x:0:0:Super User:/root:/bin/bash operator:x:11:0:operator:/root:/usr/sbin/nologin # 5. 分页查看大日志文件 q结束 [root@rocky ~ ]# less /var/log/secure #6.查看文件全文 [root@rocky ~ ]# cat /etc/passwd
4.3 面试真题案例实操
面试题:统计系统中所有可登录普通用户的数量(企业运维高频面试题)
解题思路:
❌ 不可登录:/sbin/nologin、/bin/false(系统服务用户专用)
✅ 可登录:所有合法交互式 Shell(/bin/bash、/bin/sh、/bin/zsh 等)
# 筛选不可登录普通用户并统计数量
[root@rocky ~ ]# grep -vE "nologin|false" /etc/passwd | awk -F: '$3>=1000 {print $1}' | wc -l
2
#{print $1} 和wc -l 可以二选一
grep -vE "nologin|false" /etc/passwd
-
-v:反向匹配、取反,意为 不要匹配到的内容
-
-E 扩展正则,支持 |或
awk -F: '$3>=1000 {print $1}'
-
-F::指定冒号为分隔符 /etc/passwd 文件是冒号分隔的文本,必须手动指定分隔符,否则 awk 默认按空格分割,列会全部错乱。
-
{print $1}:打印第一列内容,即 用户名
wc -l
-
grep 剔除 nologin/false 禁止登录用户(保留所有可登录用户)
grep -vE 过滤禁止登录用户,awk -F: 冒号分隔筛选UID普通用户,wc -l 统计数量,是统计系统可登录普通用户的生产标准答案。
五、正则表达式与扩展正则表达式(原理+实战)
正则表达式是Linux文本处理的核心底层规则,grep、sed、awk、find所有检索匹配功能均依赖正则,分为基础正则(BRE)和扩展正则(ERE),掌握正则才能实现精准文本匹配。
5.1 基础正则表达式(默认支持:grep、sed)
基础正则为系统默认兼容规则,无需特殊参数,核心元字符如下:
-
^:行首匹配,^root 匹配以root开头的行 -
$:行尾匹配,bash$ 匹配以bash结尾的行 -
.:匹配任意单个字符(除换行) -
*:匹配前一个字符0次或多次 -
[]:匹配括号内任意单个字符,[0-9]匹配数字 -
\:转义字符,还原特殊字符本意
5.2 扩展正则表达式(支持:egrep、awk)
扩展正则简化匹配语法,无需大量转义符,新增核心元字符,grep需加-E参数启用:
-
+:匹配前一个字符1次或多次 -
?:匹配前一个字符0次或1次 -
|:或匹配,匹配多个规则其一 -
():分组匹配,整体匹配、反向引用 -
{n}:精准匹配n次,{n,}至少n次,{n,m}n-m次
5.3 正则综合实操(联动前文用户、文本工具)
# 1. 基础正则:筛选以root开头的用户行
here: ~
[root@rocky ~ ]# grep "^root" /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
# 2. 基础正则:筛选以bash结尾的可登录用户
here: ~
[root@rocky ~ ]# grep "bash$" /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
mz:x:1000:1000:mz:/home/mz:/bin/bash
ops01:x:1001:1001::/home/ops01:/bin/bash
# 3. 扩展正则:匹配root或ops用户
[root@rocky ~ ]# grep -E "^root|^ops" /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
ops01:x:1001:1001::/home/ops01:/bin/bash
# 4. 匹配3-6位数字(UID筛选)
[root@rocky ~ ]# grep -E "[0-9]{3,6}" /etc/passwd
# 5. 分组匹配:提取用户名和UID
[root@rocky ~ ]# grep -E "^[a-z0-9]+:x:[0-9]+" /etc/passwd
root:x:0:0:Super User:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/sbin/nologin
daemon:x:2:2:daemon:/sbin:/usr/sbin/nologin
adm:x:3:4:adm:/var/adm:/usr/sbin/nologin
# 6. 打印用户名和UID
[root@rocky ~ ]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
5.4 面试考点:正则匹配日志IP地址
面试题:用正则筛选日志中所有合法IP地址
# 匹配合法IPv4地址
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
六、文件查找工具:locate(非实时)+ find(实时)实战
Linux文件查找分为缓存查找和实时查找,locate速度快但非实时,find精准实时、支持多条件复合查找,是文件检索、日志排查、文件清理的核心工具,全程联动前文权限、正则知识点。
6.1 locate 非实时查找工具
原理:基于系统预生成的文件数据库(/var/lib/mlocate)检索,不遍历磁盘,速度极快,数据库默认每日更新,无法查找新建未收录文件。
核心参数与实操:
# 更新文件数据库(手动刷新,解决新建文件查不到问题) updatedb # 查找所有包含passwd的文件 locate passwd # 忽略大小写查找 locate -i vimrc
适用场景:快速检索系统已有老旧文件,不适合实时文件查找。
6.2 find 实时查找工具(运维核心)
原理:实时遍历磁盘目录,精准查找,支持文件名、权限、所有者、大小、时间、正则多条件筛选,支持后置处理操作。
基础语法:find 查找路径 匹配条件 后置操作
6.2.1 常用匹配条件(联动前文知识点)
# 1. 按文件名查找(支持正则) here: ~ [root@rocky ~ ]# find / -name "*.conf" # 全局查找所有配置文件 /boot/loader/entries/bcadbc27b6a24385b97c3e497af6577d-6.12.0-55.12.1.el10_0.x86_64.conf /boot/loader/entries/bcadbc27b6a24385b97c3e497af6577d-0-rescue.conf /boot/loader/entries/bcadbc27b6a24385b97c3e497af6577d-6.12.0-211.22.1.el10_2.x86_64.conf find: ‘/proc/124108’: No such file or directory /run/tmpfiles.d/static-nodes.conf /run/NetworkManager/no-stub-resolv.conf /run/NetworkManager/resolv.conf [root@rocky ~ ]# find /home/ -name "ops*" # 查找ops开头的用户目录 /home/ops01 # 2. 按用户/组查找(复用用户管理知识) # 查找所有者为ops01的所有文件 [root@rocky ~ ]# find / -user ops01 /home/ops01 /home/ops01/.bash_logout /home/ops01/.bash_profile # 查找所属组为ops的文件 [root@rocky ~ ]# find / -group ops01 /home/ops01 /home/ops01/.bash_logout /home/ops01/.bash_profile /home/ops01/.bashrc # 3. 按权限查找(复用权限体系知识) # 查找权限为644的文件 [root@rocky ~ ]# find / -perm 644 # 查找包含755权限的目录 [root@rocky ~ ]# find / -perm 755 # 4. 按大小、时间查找 # 查找10M以上日志文件 [root@rocky ~ ]# find / -size +10M /boot/vmlinuz-6.12.0-55.12.1.el10_0.x86_64 /boot/initramfs-6.12.0-55.12.1.el10_0.x86_64.img /boot/vmlinuz-0-rescue-bcadbc27b6a24385b97c3e497af6577d /boot/initramfs-0-rescue-bcadbc27b6a24385b97c3e497af6577d.img /boot/initramfs-6.12.0-55.12.1.el10_0.x86_64kdump.img /boot/vmlinuz-6.1 [root@rocky ~ ]# find / -mtime -1 # 查找24小时内修改的文件
6.2.2 后置处理操作
find支持查找后批量处理文件(删除、复制、修改权限),生产使用率极高。
# 查找临时文件并批量删除
[root@rocky ~ ]# find /tmp/ -name "*.tmp" -delete
# 查找644权限文件,批量修改为755
[root@rocky ~ ]# find /data/ -perm 644 -exec chmod 755 {} \;
# 查找ops01用户文件,批量修改所属组
[root@rocky ~ ]# find / -user ops01 -exec chown ops01:ops {} \;
6.3 面试真题:清理系统过期日志
面试题:批量删除/var/log目录下7天前的.log过期日志文件
[root@rocky ~ ]# find /var/log/ -name "*.log" -mtime +7 -delete here: ~
七、文件压缩与打包工具(gzip/xz/zip/tar全解)
Linux压缩打包分为单文件压缩(gzip、xz)和多文件打包压缩(tar、zip),核心用于日志归档、文件备份、传输压缩,生产中tar为必掌握工具,全程联动find文件查找知识点。
7.1 单文件压缩工具(gzip、xz)
特点:仅支持单个文件压缩,不支持打包目录,压缩后默认删除原文件,解压恢复。
7.1.1 gzip 压缩工具
gzip test.txt # 压缩为test.txt.gz,删除原文件 [root@rocky ~ ]# gzip test.txt here: ~ [root@rocky ~ ]# ls anaconda-ks.cfg data passwd test.txt.gz gzip -d test.txt.gz # 解压文件 [root@rocky ~ ]# gzip -d test.txt.gz here: ~ [root@rocky ~ ]# ls anaconda-ks.cfg data passwd test.txt gzip -9 test.txt # 最高压缩比压缩(1-9级,默认6) [root@rocky ~ ]# gzip -9 test.txt
7.1.2 xz 压缩工具
压缩率高于gzip,耗时更长,适合静态大文件归档。
xz test.log # 压缩为test.log.xz xz -d test.log.xz # 解压文件
7.2 通用打包压缩工具(zip、tar)
7.2.1 zip 跨平台压缩
支持Windows/Linux跨平台解压,保留原文件,支持目录打包。
zip test.zip test.txt # 压缩单个文件 [root@rocky ~ ]# zip test.zip test.txt adding: test.txt (stored 0%) here: ~ [root@rocky ~ ]# ll total 12 -rw-------. 1 root root 1071 Jun 6 12:03 anaconda-ks.cfg drwx------. 3 ops01 ops 18 Jun 20 16:14 data -rw-r--r--. 1 root root 1459 Jun 20 16:52 passwd -rw-r--r--. 1 ops01 ops 0 Jun 20 15:51 test.txt -rw-r--r--. 1 root root 166 Jun 20 18:28 test.zip zip -r data.zip /data # 递归压缩目录 [root@rocky ~ ]# zip -r data.zip /data/ adding: data/ (stored 0%) adding: data/ops/ (stored 0%) adding: data/ops/log.txt (stored 0%) adding: data/ops/run.sh (stored 0%) unzip test.zip # 解压文件 [root@rocky ~ ]# unzip test.zip Archive: test.zip replace test.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y extracting: test.txt unzip -d /tmp data.zip # 解压到指定目录 [root@rocky ~ ]# unzip -d /tmp/ data.zip Archive: data.zip creating: /tmp/data/ creating: /tmp/data/ops/ extracting: /tmp/data/ops/log.txt extracting: /tmp/data/ops/run.sh
7.2.2 tar 打包压缩核心工具(生产首选)
仅打包不压缩,结合gzip/xz实现打包+压缩一体化,支持保留原文件、增量打包。
核心参数:c(创建包)、x(解压包)、v(可视化过程)、f(指定文件名)、z(gzip压缩)、J(xz压缩)
# 1. 打包+gzip压缩(最常用) [root@rocky ~ ]# tar zcvf data.tar.gz /data/ tar: Removing leading `/' from member names /data/ /data/ops/ /data/ops/log.txt /data/ops/run.sh # 2. 打包+xz高压缩比压缩 [root@rocky ~ ]# tar -cf log.tar.xz /var/log tar: Removing leading `/' from member names here: ~ [root@rocky ~ ]# ls anaconda-ks.cfg data.tar.gz log.tar.xz test.txt data data.zip passwd test.zip # 3. 解压tar压缩包 [root@rocky ~ ]# ls anaconda-ks.cfg data.tar.gz data.zip log.tar.xz passwd test.txt test.zip here: ~ [root@rocky ~ ]# tar -xf data.tar.gz here: ~ [root@rocky ~ ]# ls anaconda-ks.cfg data.tar.gz log.tar.xz test.txt data data.zip passwd test.zip # 4. 解压到指定目录 [root@rocky ~ ]# tar xf log.tar.xz -C /data/ here: ~ [root@rocky ~ ]# ls /data/ ops var # 5. 仅查看压缩包内容,不解压 [root@rocky ~ ]# tar -tf data.tar.gz data/ data/ops/ data/ops/log.txt data/ops/run.sh
7.3 综合实操(联动find查找+tar打包)
实操目标:查找系统3天内修改的日志文件,批量打包压缩备份
# 查找3天内修改的.log文件,打包压缩备份 [root@rocky ~ ]# tar -cf recent_log.tar.gz $( find /var/log -name "*.log" -mtime -3 ) tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets here: ~
知识点联动:find实时查找、管道传输、tar打包压缩,是生产日志备份标准流程。
八、流编辑器sed全方位解析(选项+地址定界+实操)
sed是Linux行级流编辑器,无交互式、批量处理文本,无需打开文件即可实现增删改查、批量替换,适配大文件处理,效率远超Vim,是日志清洗、配置批量修改的核心工具,依赖前文正则表达式知识点。
8.1 sed核心常用选项
-
-n:静默模式,仅输出匹配行(默认输出所有行) -
-i:直接修改原文件(生产慎用,建议先备份) -
-e:支持多表达式同时处理 -
-r:支持扩展正则表达式
8.2 地址定界规则(精准控制处理行)
地址定界用于指定sed处理哪些行,是精准编辑的核心:
-
无地址:处理文件所有行
-
单数字:处理指定行,如10 处理第10行
-
区间地址:1,10 处理1-10行
-
正则地址:/关键词/ 处理匹配关键词的行
-
特殊地址:$ 处理最后一行
8.3 sed核心编辑命令
| 命令 | 功能 | 实操示例 |
|---|---|---|
| p | 打印匹配行 | sed -n '1,5p' test.txt |
| d | 删除匹配行 | sed '/^#/d' test.txt(删除注释行) |
| s | 字符串替换 | sed 's/old/new/g' test.txt |
| a | 行后追加内容 | sed '1a new line' test.txt |
| i | 行前插入内容 | sed '1i header' test.txt |
8.4 综合实操(联动正则、用户配置文件)
实操目标:批量清理系统配置文件注释行、空行,优化配置文件(面试高频场景)
# 1.打印第1行,-n不输出缓存区默认的其他信息 [root@rocky ~ ]# sed -n "1p" /etc/passwd root:x:0:0:Super User:/root:/bin/bash # 2. 批量替换文件中所有root为admin(全局替换) [root@rocky ~ ]# sed -i "s/root/admin/g" passwd # 3. 在文件末尾追加配置内容 [root@rocky ~ ]# sed -i '$a user config end ' passwd here: ~ [root@rocky ~ ]# tail passwd sssd:x:997:996:User for sssd:/run/sssd:/sbin/nologin libstoragemgmt:x:995:995:daemon account for libstoragemgmt:/:/usr/sbin/nologin systemd-coredump:x:994:994:systemd Core Dumper:/:/usr/sbin/nologin setroubleshoot:x:993:993:SELinux troubleshoot server:/var/lib/setroubleshoot:/usr/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/usr/share/empty.sshd:/usr/sbin/nologin chrony:x:992:992:chrony system user:/var/lib/chrony:/sbin/nologin tcpdump:x:72:72:tcpdump:/:/usr/sbin/nologin mz:x:1000:1000:mz:/home/mz:/bin/bash ops01:x:1001:1001::/home/ops01:/bin/bash user config end # 4. 仅打印匹配ops用户的行(正则地址定界) [root@rocky ~ ]# sed -n '/ops/p' /etc/passwd ops01:x:1001:1001::/home/ops01:/bin/bash
九、文本格式化工具awk(语法+变量+实战+面试)
awk是Linux最强文本分析工具,擅长格式化输出、列处理、数据统计、日志分析,支持编程逻辑,是三剑客中功能最强大的工具,运维面试必考,全程复用前文所有知识点。
9.1 awk基本语法结构
语法:awk [选项] '条件{执行动作}' 文件名
执行流程:逐行读取文件 → 匹配条件 → 执行指定动作,默认以空格/制表符分隔列。
核心选项:-F 指定分隔符(自定义列分隔符)
9.2 awk核心内建变量(必备)
-
$0:整行文本内容 -
$1-$n:第1列到第n列内容 -
NR:当前行号(全局行数) -
NF:当前行的列数 -
FS:自定义输入分隔符 -
OFS:自定义输出分隔符
9.3 高频实战技巧(联动全模块知识点)
# 1. 解析用户配置文件(:分隔符),提取用户名和UID
[root@rocky ~ ]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
# 2. 筛选UID≥1000的普通用户(条件判断)
[root@rocky ~ ]# awk -F: '$3>=1000 {print "普通用户:" $1,"UID:"$3 }' /etc/passwd
普通用户:nobody UID:65534
普通用户:mz UID:1000
普通用户:ops01 UID:1001
# 3. 筛选可登录用户(Shell为/bin/bash)
[root@rocky ~ ]# awk -F: '$7=="/bin/bash" {print $1}' /etc/passwd
root
mz
ops01
# 5. 结合find+awk:统计指定目录文件权限信息
[root@rocky ~ ]# find /data/ -ls |awk '{print $3,$5,$6,$11}'
drwxr-xr-x ops01 ops /data/
drwxr-xr-x ops01 ops /data/ops
-rwxr-xr-x ops01 ops /data/ops/log.txt
-rwxr--r-- root root /data/ops/run.sh
drwxr-xr-x root root /data/var
drwxr-xr-x root root /data/var/log
9.4 面试压轴真题:日志流量统计
面试题:统计访问日志中各IP的访问次数,输出Top2访问IP(运维/后端高频面试题)
# 提取日志IP、统计次数、排序取Top10
[root@rocky ~ ]# awk '{print $1}' access.log |sort |uniq -c|sort -nr | head -2
22 192.168.1.100
13 10.0.0.55
awk '{print $1}' 输出第一行
sort 排序
uniq -c 聚合统计
sort -nr -n 安装数字大小排序 -r降序
head 显示头部
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)