1、总结通配符,管道,重定向,并且结合示例,添加注释信息

通配符

通配符是 Shell 自带的语法(不是某个命令的参数),用于模糊匹配文件名或目录名,实现批量操作文件 / 目录,比如批量查找、批量删除、批量复制等,只匹配文件名,不匹配文件内容。

通配符的类型

  • 文件通配符
  • 最常用通配符
  • 次常用通配符
  • 特殊通配符
  • 其他的通配符
文件通配符:
作用范围:仅匹配文件名、目录名,不匹配文件内容;
匹配原则:无匹配结果时,会原样保留通配符字符(比如当前目录无.txt文件,执行ls *.txt会输出*.txt);
通用场景:所有能接「文件路径 / 文件名」的命令都支持(ls/mv/cp/rm/cat/find等)。
最常用通配符:
* 匹配零个或多个字符,但不匹配 "." 开头的文件,
{a..z} 表示 a-z 范围的所有内容
核心前提:通配符只匹配【文件名 / 目录名】,不匹配文件内容,是 Shell 自带语法,所有命令通用
所有示例均在当前目录执行,默认当前目录有文件
常用通配符:

准备工作

#创建.txt、.log、.sh、.conf文件
[root@192 0110]# touch t{1..4}.txt
[root@192 0110]# touch t{1..4}.log
[root@192 0110]# touch t{1..4}.sh
[root@192 0110]# touch t{1..4}.conf
[root@192 0110]# touch a{1..4}.conf
[root@192 0110]# touch a{1..4}.txt
[root@192 0110]# touch c{1..4}.txt
[root@192 0110]# touch b{1..4}.txt
[root@192 0110]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 1月  10 16:15 a1.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a1.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a2.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a2.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a3.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a3.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a4.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c4.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t1.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t1.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t2.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t2.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t3.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t3.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t4.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t4.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.txt

匹配 0个/任意多个 任意字符(最常用)

# ==================== 1. * 星号:匹配 0个/任意多个 任意字符(最常用) ====================
ls -l *.txt      # 匹配所有以 .txt 结尾的文件 → 结果:t{1..4}.txt、a{1..4}.txt b{1..4}.txt、c{1..4}.txt
[root@192 0110]# ls -l *.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c4.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.txt
ls -l a*         # 匹配所有以 a 开头的文件 → 结果:a{1..4}.txt、a{1..4}.conf
[root@192 0110]# ls -l a*
-rw-r--r--. 1 root root 0 1月  10 16:15 a1.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a1.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a2.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a2.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a3.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a3.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a4.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a4.txt
ls -l *log       # 匹配所有以 log 结尾的文件 → 结果:t{1..4}.log
[root@192 0110]# ls -l *.log
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.log
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.log
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.log
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.log
ls -l *.*        # 匹配所有包含 . 的文件 → 匹配当前目录所有带后缀的文件
[root@192 0110]# ls -l *.*
-rw-r--r--. 1 root root 0 1月  10 16:15 a1.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a1.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a2.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a2.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a3.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a3.txt
-rw-r--r--. 1 root root 0 1月  10 16:15 a4.conf
-rw-r--r--. 1 root root 0 1月  10 16:16 a4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c4.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t1.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t1.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t2.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t2.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t3.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t3.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.txt
-rw-r--r--. 1 root root 0 1月  10 16:12 t4.conf
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.log
-rw-r--r--. 1 root root 0 1月  10 16:12 t4.sh
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.txt

匹配 恰好1个 任意字符

# ==================== 2. ? 问号:匹配 恰好1个 任意字符 ====================
ls a?.txt     # 匹配:a开头 + 1个任意字符 + .txt → 结果:a.txt(无其他匹配项)
没有创建a.txt文件,输出就不展示了。
ls ??.log     # 匹配:2个任意字符 + .log → 结果:a{1..4}.txt、b{1..4}.txt、c{1..4}.txt、t{1..4}.txt
[root@192 0110]# ls -l ??.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 a4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 b4.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c1.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c2.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c3.txt
-rw-r--r--. 1 root root 0 1月  10 16:16 c4.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t1.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t2.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t3.txt
-rw-r--r--. 1 root root 0 1月  10 16:11 t4.txt
ls ?.txt      # 匹配:1个任意字符 + .txt → 结果:1.txt a.txt
没有创建1个任意字文件,输出就不展示了

匹配 括号内任意1个字符(精准匹配)

# ==================== 3. [] 中括号:匹配 括号内任意1个字符(精准匹配) ====================
准备工作
[root@192 0110]# touch {a..e}.txt
[root@192 0110]# touch w{a..e}.txt
[root@192 0110]# touch {1..4}.txt
[root@192 0110]# touch a{a..e}.txt
[root@192 0110]# touch a{a..e}.log
ls [1a].txt   # 匹配:文件名是「1或a」+ .txt → 结果:1.txt a.txt
[root@192 0110]# ls -l [1a].txt
-rw-r--r--. 1 root root 0 1月  10 16:35 1.txt
-rw-r--r--. 1 root root 0 1月  10 16:32 a.txt
ls a[b1].log  # 匹配:a开头 + 「b或1」 + .log → 结果:ab.log
[root@192 0110]# ls -l a[b1].log
-rw-r--r--. 1 root root 0 1月  10 16:37 ab.log
ls [0-9].*    # 匹配:单个数字开头的任意文件 → 结果:{1..4}1.txt(0-9 表示数字范围)
[root@192 0110]# ls -l [0-9].*
-rw-r--r--. 1 root root 0 1月  10 16:35 1.txt
-rw-r--r--. 1 root root 0 1月  10 16:35 2.txt
-rw-r--r--. 1 root root 0 1月  10 16:35 3.txt
-rw-r--r--. 1 root root 0 1月  10 16:35 4.txt
ls [a-z]*.txt # 匹配:小写字母开头 + 任意字符 + .txt → 结果:如下(a-z 小写字母范围)
[root@192 0110]# ls [a-z]*.txt
a1.txt  a3.txt  aa.txt  ac.txt  ae.txt  b1.txt  b3.txt  b.txt   c2.txt  c4.txt  d.txt  t1.txt  t3.txt  wa.txt  wc.txt  we.txt  a2.txt  a4.txt  ab.txt  ad.txt  a.txt   b2.txt  b4.txt  c1.txt  c3.txt  c.txt   e.txt  t2.txt  t4.txt  wb.txt  wd.txt

匹配 括号内以外的任意1个字符

# ==================== 4. [!] 反向匹配:匹配 括号内以外的任意1个字符 ====================
ls [!a]*.txt  # 匹配:不是a开头的 .txt 文件 → 结果:不是a开头的所有文件
[root@192 0110]# ls [!a]*.txt
1.txt  3.txt   b1.txt  b3.txt  b.txt   c2.txt  c4.txt  d.txt  t1.txt  t3.txt  wa.txt  wc.txt  we.txt 2.txt   4.txt   b2.txt  b4.txt  c1.txt  c3.txt  c.txt   e.txt  t2.txt  t4.txt  wb.txt  wd.txt
ls [!.]*      # 匹配:文件名中不包含 . 的文件(无后缀文件),当前目录无则无结果
[root@192 0110]# ls [!.]* 
1.txt  a1.conf  a3.conf  aa.log  ac.log  ae.log  b2.txt  c1.txt  c.txt    t1.log   t2.log  t3.log   t4.log  wb.txt  2.txt  a1.txt   a3.txt   aa.txt  ac.txt  ae.txt  b3.txt  c2.txt  d.txt    t1.sh   t2.sh  t3.sh  t4.sh   wc.txt 3.txt  a2.conf  a4.conf  ab.log  ad.log  a.txt   b4.txt  c3.txt  e.txt    t1.txt   t2.txt   t3.txt   t4.txt  wd.txt 4.txt  a2.txt  a4.txt   ab.txt  ad.txt  b1.txt  b.txt   c4.txt  t1.conf  t2.conf  t3.conf  t4.conf  wa.txt  we.txt
ls [0-9!].log # 匹配:不是数字开头的 .log 文件 → 结果:没创建ab.log文件
次常用通配符
? 即隐藏文件匹配任何单个字符,一个汉字也算一个字符
~ 当前用户家目录
[0-9] 匹配数字范围
[a-Z] 相当于a-z + A-Z 范围的一个字母
[^a-z] 匹配列表中的所有字符以外的字符
其他的通配符
~qwe 用户qwe家目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[sswang] 匹配列表中的任何的一个字符
[^sswang] 匹配列表中的所有字符以外的字符
[^a-z] 匹配列表中的所有字符以外的字符
. | ~+ 当前工作目录
~- 前一个工作目录
特殊通配符

批量创建目录

[root@192 ~]# mkdir /f/fir{1..7} -p
[root@192 ~]# ls -l /f
总用量 0
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir1
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir2
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir3
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir4
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir5
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir6
drwxr-xr-x. 2 root root 6 1月  10 16:49 fir7

批量创建文件

[root@192 ~]#  touch /f/fir1/{a..f}.txt
[root@192 ~]# ls -l /f/fir1/
总用量 0
-rw-r--r--. 1 root root 0 1月  10 16:51 a.txt
-rw-r--r--. 1 root root 0 1月  10 16:51 b.txt
-rw-r--r--. 1 root root 0 1月  10 16:51 c.txt
-rw-r--r--. 1 root root 0 1月  10 16:51 d.txt
-rw-r--r--. 1 root root 0 1月  10 16:51 e.txt
-rw-r--r--. 1 root root 0 1月  10 16:51 f.txt

查看范围目录

[root@192 ~]#  ls /f/fir[1-3]
/f/fir1:
a.txt  b.txt  c.txt  d.txt  e.txt  f.txt

/f/fir2:

/f/fir3:
备注:该命令是列出/f/fir路径下的fir1-3所有的目录和文件

查看范围文件

[root@192 ~]#  ls /f/fir1/{e..j}.txt
ls: 无法访问'/f/fir1/g.txt': 没有那个文件或目录
ls: 无法访问'/f/fir1/h.txt': 没有那个文件或目录
ls: 无法访问'/f/fir1/i.txt': 没有那个文件或目录
ls: 无法访问'/f/fir1/j.txt': 没有那个文件或目录
/f/fir1/e.txt  /f/fir1/f.txt
备注:列出/f/fir1路径下e-j下所有的.txt文件

管道符

管道符 是 Linux 命令行串联多命令、实现数据接力处理的核心工具,也是提升命令行效率的关键,和通配符、重定向并称 Shell 三大神器

使用格式

命令1 | 命令2
 管道符左侧命令1 执行后的结果,传递给管道符右侧的命令2使用

实践

#查看当前系统中的全局变量SHELL
[root@192 qwe]# env | grep SHELL
SHELL=/bin/bash
# 从日志中过滤出 404 错误的请求 
cat access.log | grep "404"
(# 注释:cat 读取日志内容 → 管道传递给 grep → 筛选出包含 404 的错误请求行)
# 场景:统计日志中 200 状态码的请求,并存入 success.log
cat access.log | grep " 200 " | wc -l > success.log
# 注释:
# 1. grep " 200 ":筛选出状态码为 200 的成功请求(加空格避免匹配到 2000 等)
# 2. wc -l:统计符合条件的行数(即成功请求次数)
# 3. > success.log:将统计结果写入文件,屏幕无输出

重定向

符号

覆盖式重定向:
 > 表示将符号左侧的内容,以覆盖的方式输入到右侧文件中
 < 表示将符号右侧的内容,以覆盖的方式输入到左侧文件或命令中
追加式重定向:
 >> 表示将符号左侧的内容,以追加的方式输入到右侧文件的末尾行中
 << 表示将符号右侧的内容,以追加的方式输入到左侧文件的末尾行中

实践1 覆盖式重定向

查看文件内容
[root@rocky9 ~]# cat file.txt
nihao
使用重定向符号给文件中增加内容
[root@rocky9 ~]# echo "file1.txt" > file.txt
注释:将file1.txt内容覆盖到file1.txt文件中
再次查看文件内容
[root@rocky9 ~]# cat file.txt
file1.txt
查看文件内容数量
[root@rocky9 ~]# wc -l < file.txt
1

实践2 追加式重定向

查看文件内容
[root@rocky9 ~]# cat file.txt 
file1.txt
使用重定向符号给文件中增加内容
[root@rocky9 ~]# echo "file2.txt" >> file.txt 
再次查看文件内容
[root@rocky9 ~]# cat file.txt 
file1.txt
file2.tx

总结

通配符负责批量选文件 → 管道符负责多命令接力处理数据 → 重定向负责保存最终结果或屏蔽输出。

工具 核心功能 连接对象
通配符 模糊匹配文件名 命令 ↔ 文件名
管道符 串联命令传递数据流 命令 ↔ 命令
重定向 改变输入输出方向 命令 ↔ 文件 / 设备

2、总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息

linux用户和用户组核心知识点+操作命令

Linux 是多用户多任务操作系统,并且多用户可以同时登录系统,用户和用户组管理是系统权限控制的基础。

核心逻辑是:每个用户属于至少一个用户组,权限按「用户自身权限 + 所属组权限 + 其他用户权限」三层管控。

用户

登录系统、执行命令、访问文件的身份标识,每个用户有唯一的 UID(用户 ID)

用户分类

  • 管理员 权限最大
  • 普通用户 需要管理员分配权限

区分管理员和普通用户

# 管理员
$ 普通用户
id—查看用户信息
查看当前登录用户
[root@rocky8 ~]# id
用户uid=0(root) 主组gid=0(root) 当前用户所属的所有用户组=0(root)
查看指定用户信息
[root@rocky8 ~]# id opadm
uid=1000(opadm) gid=1000(opadm) 组=1000(opadm),10(wheel)
useradd —创建新用户
创建用户默认会添加一个组
[root@rocky8 ~]# useradd hello
[root@rocky8 ~]# id hello
uid=1003(hello) gid=1004(hello) 组=1004(hello)
[root@rocky8 ~]# getent gshadow hello
hello:!::
[root@rocky8 ~]# ll /home/
总用量 4
drwx------   3 hello    hello      78 1月   8 17:03 hello
usermod —— 修改已有用户属性
# 1. 先确认soute组是否存在,不存在则先创建
grep soute /etc/group  # 查询组是否存在
groupadd soute        # 不存在则创建该组(root权限执行)
# 2. 查询原始组信息
id qwe
# 3. 核心操作:修改qwe的主组为soute(必须root权限执行)
usermod -g soute qwe
# 4. 验证修改结果
[root@192 0110]# id qwe
uid=1000(qwe) gid=1001(soute) 组=1001(soute)
# 锁定用户(禁止登录)
usermod -L testuser
# -L:Lock,锁定后无法登录
# 解锁用户
usermod -U testuser
# -U:Unlock,解锁
useradd—删除用户
# 只删除用户,保留家目录
userdel opadm
# 彻底删除用户(含家目录和邮件)
userdel -r opadm
# -r:删除用户的同时删除家目录 /home/opadm
[root@192 0110]# cd /home/
[root@192 home]# ll
总用量 0
drwx------. 3 opadm opadm 92 1月  10 20:00 opadm
drwx------. 3 qwe   qwe   92 1月   9 20:55 qwe
[root@192 home]# userdel -r opadm
[root@192 home]# ll
总用量 0
drwx------. 3 qwe qwe 92 1月   9 20:55 qwe
passwd —设置 / 修改用户密码
# 修改当前登录用户的密码
passwd
# 修改指定用户的密码(需root权限)
passwd opadm
# 执行后按提示输入新密码,密码无回显
# 锁定密码(等价于 usermod -L)
passwd -l opadm
# 解锁密码(等价于 usermod -U)
passwd -u opadm
su—切换用户身份
# 切换到 root 用户(需要输入 root 密码)
su - root
# -:表示切换后加载目标用户的环境变量(推荐加 -)

# 切换到普通用户
su - opadm
# 以 root 权限执行单个命令(需配置 sudoers)
sudo ls /root
# 执行后输入当前用户的密码,无需 root 密码

# 切换到 root 并执行命令(无需输入密码,需配置)
sudo -i
# -i:模拟 root 登录,加载 root 环境

用户组

对多个用户进行统一权限管理,每个组有唯一的 GID(组 ID)

uid范围 类型 说明
0 管理员 拥有系统最高权限,可执行任意操作
1-999 系统用户 用于运行系统服务,默认无法登录
1000+ 普通用户 管理员创建的日常使用用户,权限受限制

分类

  • 主组:用户创建时默认加入的组,一个用户只能有一个主组,默认组名和用户名相同
  • 附加组:用户额外加入的组,一个用户可以加入多个附加组

核心配置文件

所有用户和组的信息都保存在以下文本文件中,直接修改文件和执行命令效果一致

配置文件 作用 关键字段说明
/etc/passwd 保存所有用户信息 用户名:密码占位符:UID:GID:用户描述:家目录:登录Shell
/etc/shadow 保存用户密码(加密存储) 用户名:加密密码:最后修改时间:最小修改间隔:有效期…
/etc/group 保存所有用户组信息 组名:组密码占位符:GID:组内用户列表(附加组)
/etc/gshadow 保存组密码(很少用) 组管理员密码、组密码等
groupadd—创建用户组
创建用户组
[root@rocky8 ~]# groupadd group
查看用户组
[root@rocky8 ~]# getent group group
group:x:1003:
指定用户组创建用户
创建用户组
[root@rocky8 ~]# groupadd -g 10000 group2
# -g:指定 GID,需确保未被占用
创建用户
[root@rocky8 ~]# useradd -g 10000 user2
查看用户创建效果
[root@rocky8 ~]# id user2
uid=1004(user2) gid=10000(group2) 组=10000(group2)
指定id创建用户组
指定id创建用户组
[root@rocky8 ~]# groupadd group5 -g 10000
查看用户组
[root@rocky8 ~]# getent group group5
group5:x:10000:
创建系统用户组
创建系统用户组
[root@rocky8 ~]# groupadd -r sroup
查看系统用户组
root@rocky8 ~]# getent group sroup
sroup:x:972:
groupadd—修改用户组属性
创建用户组
[root@rocky8 ~]# groupadd group5 -g 10000
[root@rocky8 ~]# getent group group5
group5:x:10000:
修改用户组的属性
[root@rocky8 ~]# groupmod -g 20010 group5
[root@rocky8 ~]# getent group group5
group5:x:20010:
修改用户组名字
[root@rocky8 ~]# groupmod -n group8 group5
[root@rocky8 ~]# getent group group5
[root@rocky8 ~]# getent group group8
group8:x:20010:
groupdel—删除用户组
删除指定用户组 - 只能一个一个的删
[root@rocky8 ~]#  groupdel -f group8
[root@rocky8 ~]#  groupdel -f group3
在用户存在的前提下,删除用户组
在用户存在的前提下,删除用户组
[root@rocky8 ~]# groupdel -f group2
[root@rocky9 ~]# id user2
用户id=1004(user2) 组id=10000 组=10000
结果显示:
 强制删除用户组之后,显示该组名的地方,只能显示该组ID,如果此时新建与组ID相同的新组,则被删除
的组的数

总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释

对文件来讲,系统中的用户,分属于三类不同的角色,分别是属主,属组,其它用户;

而每个角色用户,对该文件的权限,也分三种,分别是读,写,执行;

文件用户属性

四种角色:

角色 字符表示
属主:所有者 u
属组:属于哪个组 g
其它用户:不是所有者,也不在属组中的用户 o
所有人,包括属主属组和其它用户 a

文件操作权限

三种权限:

权限 字符表示 八进制数字表示
读权限 r 4
写权限 w 2
执行权限 x 1

赋值写法

在命令中的字符 备注
+ 增加某些权限
- 减少某些权限
= 只保留某些权限,覆盖写法

操作实践

chown—属性操作

准备工作

创建相关文件
[root@rocky8 0108]# mkdir open{1..4}
[root@rocky8 0108]# touch toker{1..4}.txt
查看文件权限
[root@rocky8 0108]# ll
总用量 0
drwxr-xr-x 2 root root 6 1月   8 20:23 open1
drwxr-xr-x 2 root root 6 1月   8 20:23 open2
drwxr-xr-x 2 root root 6 1月   8 20:23 open3
drwxr-xr-x 2 root root 6 1月   8 20:23 open4
-rw-r--r-- 1 root root 0 1月   8 20:25 toker1.txt
-rw-r--r-- 1 root root 0 1月   8 20:25 toker2.txt
-rw-r--r-- 1 root root 0 1月   8 20:25 toker3.txt
-rw-r--r-- 1 root root 0 1月   8 20:25 toker4.txt
结果显示:
 默认创建的文件权限是 644,也就是所,谁都可以读去文件内容
 默认创建的目录权限是 755,也就是说,谁都可以进入目录查看
更改文件用户属性
只修改所有者属性
[root@rocky8 0108]# chown opadm toker1.txt 
同时修改所有者和归属组的属性
[root@rocky8 0108]# chown opadm. toker2.txt 
[root@rocky8 0108]# chown opadm: toker3.txt 
查看效果
[root@rocky8 0108]# ll *.txt
-rw-r--r-- 1 opadm root  0 1月   8 20:25 toker1.txt
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker2.txt
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker3.txt
-rw-r--r-- 1 root  root  0 1月   8 20:25 toker4.txt
仅修改文件的归属组的属性
[root@rocky8 0108]# chown .opadm toker1.txt 
[root@rocky8 0108]# ll toker1.txt 
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker1.txt

批量修改文件属性信息

[root@rocky8 ~]# chown -R opadm 0108/
[root@rocky8 ~]# cd 0108/
[root@rocky8 0108]# ll
总用量 0
drwxr-xr-x 2 opadm root  6 1月   8 20:23 open1
drwxr-xr-x 2 opadm root  6 1月   8 20:23 open2
drwxr-xr-x 2 opadm root  6 1月   8 20:23 open3
drwxr-xr-x 2 opadm root  6 1月   8 20:23 open4
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker1.txt
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker2.txt
-rw-r--r-- 1 opadm opadm 0 1月   8 20:25 toker3.txt
-rw-r--r-- 1 opadm root  0 1月   8 20:25 toker4.txt
chgrp 命令可以只修改文件的属组

归属组信息设置

[root@rocky8 ~]# chgrp -R qwe 0108/
[root@rocky8 ~]# ll 0108/
总用量 0
drwxr-xr-x 2 opadm qwe 6 1月   8 20:23 open1
drwxr-xr-x 2 opadm qwe 6 1月   8 20:23 open2
drwxr-xr-x 2 opadm qwe 6 1月   8 20:23 open3
drwxr-xr-x 2 opadm qwe 6 1月   8 20:23 open4
-rw-r--r-- 1 opadm qwe 0 1月   8 20:25 toker1.txt
-rw-r--r-- 1 opadm qwe 0 1月   8 20:25 toker2.txt
-rw-r--r-- 1 opadm qwe 0 1月   8 20:25 toker3.txt
-rw-r--r-- 1 opadm qwe 0 1月   8 20:25 toker4.txt
chmod —命令可以修改文件的操作权限

权限的增删

操作示例:
    u+r # 属主加读权限
    g-x # 属组去掉执行权限
    ug=rx # 属主属组权限改为读和执行
    o=  #用户无任何权限
    a=rwx # 所有用户都有读写执行权限
    u+r,g-x # 同时指定

文件权限修改实践

指定文件的其他用户都增加x权限
[root@rocky8 0108]#  chmod o+x toker{1..4}.txt
[root@rocky8 0108]# ll *.txt
-rw-r--r-x 1 opadm qwe 0 1月   8 20:25 toker1.txt
-rw-r--r-x 1 opadm qwe 0 1月   8 20:25 toker2.txt
-rw-r--r-x 1 opadm qwe 0 1月   8 20:25 toker3.txt
-rw-r--r-x 1 opadm qwe 0 1月   8 20:25 toker4.txt
指定文件的 归属主权限+x,属组权限-r
[root@rocky8 0108]# chmod u+x,g-r *.txt
[root@rocky8 0108]# ll *.txt
-rwx---r-x 1 opadm qwe 0 1月   8 20:25 toker1.txt
-rwx---r-x 1 opadm qwe 0 1月   8 20:25 toker2.txt
-rwx---r-x 1 opadm qwe 0 1月   8 20:25 toker3.txt
-rwx---r-x 1 opadm qwe 0 1月   8 20:25 toker4.txt
指定文件的 所有人权限为 rwx
[root@rocky8 0108]# chmod a=rwx *.txt
[root@rocky8 0108]# ll *.txt
-rwxrwxrwx 1 opadm qwe 0 1月   8 20:25 toker1.txt
-rwxrwxrwx 1 opadm qwe 0 1月   8 20:25 toker2.txt
-rwxrwxrwx 1 opadm qwe 0 1月   8 20:25 toker3.txt
-rwxrwxrwx 1 opadm qwe 0 1月   8 20:25 toker4.txt
目录的写权限实践
修改权限后,检测效果
[root@rocky8 0108]# chmod 733 -R open*
[root@rocky8 0108]# ll
总用量 0
drwx-wx-wx 2 opadm qwe 6 1月   8 20:23 open1
drwx-wx-wx 2 opadm qwe 6 1月   8 20:23 open2
drwx-wx-wx 2 opadm qwe 6 1月   8 20:23 open3
drwx-wx-wx 2 opadm qwe 6 1月   8 20:23 open4

4、总结文件时间戳的用法

时间戳的常用操作命令

stat—查看时间戳详细信息

语法

stat [选项] 文件名/目录名
[root@192 dir1]# stat t1.txt 
  文件:t1.txt
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:36981618    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2026-01-10 20:38:57.741727093 +0800
最近更改:2026-01-10 20:38:57.741727093 +0800
最近改动:2026-01-10 20:38:57.741727093 +0800
创建时间:2026-01-10 20:38:57.741727093 +0800
touch — 修改文件时间戳

语法

touch [选项] 文件名
find — 按时间戳筛选文件

语法

find 搜索路径 -type [f/d] -[a/m/c]time [n] -exec 命令 {} \;
参数说明
-type f:普通文件;-type d:目录
-atime n:按访问时间筛选,n 为天数(整数)
n → 恰好 n*24 小时前访问过的文件
+n → 超过 n*24 小时未访问的文件
-n → 过去 n*24 小时内访问过的文件
-mtime n:按修改时间筛选(用法同 -atime)
-ctime n:按状态时间筛选(用法同 -atime)
-exec 命令 {} \;:对筛选出的文件执行指定命令

5、总结find和xargs的用法

find是 Linux 最强的文件查找工具,xargs 是完美搭档的参数传递工具

find

语法

find 查找路径 查找条件 动作
# ==========  按【文件名】查找 ==========
find /tmp -name "*.log"        # 查找/tmp下所有.log后缀的文件,区分大小写
find /etc -iname "*.conf"      # 查找/etc下所有.conf后缀的文件,忽略大小写
find . -name "test*"           # 查找当前目录下test开头的所有文件/目录
# ==========  按【文件类型】查找  ==========
# 核心参数:-type 后跟指定类型,区分文件/目录是关键
find /data -type f             # 只查找 普通文件(file)
find /data -type d             # 只查找 目录(directory)
find /data -type l             # 只查找 软链接(link)
find /data -type f -name "*.sh"# 组合:查找/data下所有.sh后缀的普通脚本文件
# ==========  按【文件大小】查找 (高频) ==========
# 语法:-size [±]数值,单位:k(KB)、M(MB)、G(GB)、c(字节)
# + = 大于指定大小,- = 小于指定大小,无符号 = 等于指定大小
find / -type f -size +100M     # 查找系统中大于100MB的文件(清理大文件常用)
find . -type f -size -10k      # 查找当前目录下小于10KB的小文件
find /var -type f -size 50M    # 查找/var下恰好50MB的文件

xargs

从文件中读取内容
[root@rocky9 ~]# xargs -a num.txt
9 8 6 8 4 7 2 1
从文件中读取内容时,指定内容结束符号
[root@rocky9 ~]# xargs -a num.txt -E 4
9 8 6 8
从文件中读取内容时,询问用户是否显示,y显示,其他不显示
[root@rocky9 ~]# xargs -a num.txt -p
echo 9 8 6 8 4 7 2 1 ?...y
9 8 6 8 4 7 2 1
[root@rocky9 ~]# xargs -a num.txt -p
echo 9 8 6 8 4 7 2 1 ?...n
从文件中读取内容时,指定每行显示几个内容
[root@rocky9 ~]# xargs -a num.txt -n4
9 8 6 8
4 7 2 1

6、总结几种压缩工具的使用方法

压缩工具

  • tar 是 打包工具(仅合并文件,不压缩),需结合 gzip/bzip2/xz 实现压缩;
  • gzip/bzip2/xz是 压缩工具(只能压缩单个文件,无法直接压缩目录);
  • zip/unzip 是 打包 + 压缩一体工具(Windows/Linux 通用)
tar
tar命令本身主要用于打包文件和目录,而压缩功能通常是通过与外部压缩工具(如 gzip, bzip2, xz)结合实现的。
# ========== 压缩 ==========
tar -czvf [压缩包名称].tar.gz [要压缩的文件或目录]
[root@192 0110]# tar -czvf dir1.tar.gz dir1
dir1/
dir1/t1.txt
dir1/passwd
[root@192 0110]# ll
总用量 4
drwxr-xr-x. 2 root root   34 1月  10 20:56 dir1
-rw-r--r--. 1 root root 1153 1月  10 20:57 dir1.tar.gz
# ========== 解压 ==========
tar -xzvf [压缩包名称].tar.gz
tar -xzvf docs.tar.gz
-C 解压文件到指定目录下
tar -xzvf [压缩包名称].tar.gz -C /usr/local
gzip
# ========== 压缩 ==========
gzip test.txt          # 压缩test.txt → 生成 test.txt.gz,原文件被删除
gzip -k test.txt       # 压缩后保留原文件(-k:keep,推荐)
gzip -6 test.txt       # 指定压缩级别(1-9,1最快,9压缩比最高,默认6)
gzip -r data_dir       # 递归压缩目录下的所有文件(每个文件生成单独的.gz,不推荐压缩目录)
# ========== 解压 ==========
gunzip test.txt.gz     # 解压 → 生成 test.txt,压缩包被删除
gunzip -k test.txt.gz  # 解压后保留压缩包
gzip -d test.txt.gz    # 等价于 gunzip,-d:decompress
zip/unzip
# ========== 压缩 ==========
zip -r dir4.zip /root/0110/dir4  # -r:递归压缩目录 → data.zip
zip -q dir5.zip dir5   # -q:静默模式(不显示过程)
# ========== 解压 ==========
unzip dir4.zip              # 解压到当前目录
unzip dir4.zip -d /tmp      # 解压到指定目录 /tmp
unzip -l data.zip           # 查看压缩包内容(不解压)
unzip -n data.zip           # 解压时不覆盖已有文件
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐