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

  1. 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 显示头部
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐