Linux命令汇总
Linux命令汇总
用户类型
-
root用户
超级用户,也成为管理员,权限最大;
对系统损害几乎有无限的能力,非必要,不登录root。
-
普通用户
权限有限,造成损害的能力比较有限。
tty命令
tty查看当前所在终端
示例:
root@ubuntu2204:~# tty
/dev/pts/0
shell命令
shell显示当前使用的
示例:
root@ubuntu2204:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
[root@rocy8-1 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
永久设置PS登录的效果
我们可以将PS1的值保存到一个文件里面,从而实现永久设定的效果
[root@rocky9 ~]# echo "PS1='\[\e[1;35m\][\u@\h \W]\\$\[\e[0m\] '" >> .bashrc
[root@rocky9 ~]# source .bashrc
然后再开启一个新的终端,就可以看到 命令提示行自动变成我们期望的颜色了。
hostname命令
hostname主机名
修改hostname 需要root权限;主机名不支持使用下划线,但支持横线,可使用字母,横线或数字组合
示例:
#临时生效,将主机名修改为NAME
hostname NAME
#永久生效,将主机名修改为NAME
hostnamectl set-hostname NAME
区分管理员和普通用户
# 管理员
$ 普通用户
echo $PS1 #查看当前命令提示符
[\u@\h \W]\$
shell中可执行的两类命令
内部命令:由shell自带的,而且通过某命令形式提供,用户登录后自动加载并常驻内存中
外部命令:在文件系统路径下有对应的可执行程序文件,当执行命令时才从磁盘加载至内存中,执行完毕后从内存中删除
内部命令:
root@ubuntu2204:~# type echo
echo is a shell builtin
外部命令:
root@ubuntu2204:~# type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
#查看path
[root@rokcy8 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
CPU
查看cpu
lscpu 命令可以查看cpu信息
cat /proc/cpuinfo也可看查看到
free命令
示例:
[root@ubuntu2204 ~]# free
total used free shared buff/cache available
Mem: 1989528 353580 844332 1328 791616 1479600
Swap: 2097148 0 2097148
备注:
total #系统总的可用物理内存大小
used #已被使用的物理内存大小
free #还有多少物理内存可用
shared #被共享使用的物理内存大小
buff/cache #被 buffer 和 cache 使用的物理内存大小
available #还可以被 应用程序 使用的物理内存大小
lsblk和df命令
lsblk分区
df -h查看磁盘大小
示例:
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 2G 0 lvm [SWAP]
└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 1024M 0 rom
查看系统架构
arch 查看系统架构
[root@ubuntu2204 ~]# arch
x86_64
查看内核版本
示例:
[root@rocky8 ~]# uname -r
4.18.0-372.9.1.el8.x86_64
[root@ubuntu2204 ~]# uname -r
5.15.0-25-generic
查看操作系统发行版本
[root@centos8 ~]#cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[root@centos8 ~]#cat /etc/os-release
查看 OS 版本
[root@centos8 ~]#lsb_release -is
CentOS
日期和时间
date 显示和设置系统时间
示例:
#显示当前时区时间
[root@ubuntu2204 ~]# date
Mon May 8 02:21:33 AM UTC 2023
#显示时区信息
[root@ubuntu2204 ~]# date -R
Mon, 08 May 2023 02:21:40 +0000
#修改日期 + 时间 (将系统时间设置为 2025-12-25 14:30:00)
date -s "2025-12-25 14:30:00"
#只修改时间(日期默认不变)
date -s "16:45:00"
#只修改日期(时间默认不变)
date -s "2025-12-26"
timedatectl 查看时间与时区状态或验证时区是否生效
#系统中列出全球所有可用时区的命令
timedatectl list-timezones
#修改时区为亚洲上海
[root@ubuntu2204 ~]# timedatectl set-timezone Asia/Shanghai
日历
cal 日历
#查看2026年1月
[root@rocky8 ~]# cal 1 2026
一月 2026
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
关机和重启
关机:
halt
poweroff
init 0
shutdown -h now
# 10分钟后关机
sudo shutdown -h +10
# 晚上20:00准时关机
sudo shutdown -h 20:00
# 关机前给所有用户发送提示信息
sudo shutdown -h +5 "系统将在5分钟后关机,请保存工作!"
#计划变更,需要取消已设置的定时关机任务
sudo shutdown -c
重启:
reboot
init 6
shutdown -r now
# 立即重启(核心用法)
sudo shutdown -r now
# 定时重启:5分钟后重启
sudo shutdown -r +5
# 定时重启:指定具体时间重启
sudo shutdown -r 18:00
# 取消已计划的重启(如上述5分钟后重启的任务)
sudo shutdown -c
用户登录信息查看命令
whoami:显示当前登录有效用户
who:系统当前所有的登录会话
w:系统当前所有的登录会话及所做的操作
#显示当前用户的用户名
whoami
#显示当前用户的用户名 终端 登录时间 来源IP
who am i
#显示当前已登录的用户信息。
who [选项]... [ 文件 | 参数1 参数2 ]
备注:
who #列出在当前主机上所有登录用户
who -u | --users #列出当前主机上所有用户的空闲时间 . 表示最近一分钟还是活跃状态 old 表示用户己经空闲超过24小时
who -s | --short #列出在当前主机上所有登录用户,等同于who
who -q | --count #登录用户统计
who -b | --boot #上次系统启动时间
who -a | --all #多选项组合
who -m #who am i
示例:
w
19:19:03 up 28 min, 2 users, load average: 0.04, 0.05, 0.11
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.31.236 18:40 2.00s 0.09s 0.00s w
jose tty2 tty2 18:41 38:45 24.98s 0.04s
/usr/libexec/gsd-disk-utility-notify
文本编辑
vim vi nano
文件模式介绍
| 模式名称 | 核心作用 | 切换方式 |
|---|---|---|
| 普通模式 | 移动光标、复制、粘贴、删除、撤销等快捷操作 | vim 启动默认进入;其他模式按 Esc 键返回 |
| 插入模式 | 输入 / 编辑文本内容(类似记事本) | 普通模式下按 i/a/o/I/A/O 等键切换 |
| 命令模式 | 保存文件、退出编辑器、查找替换、设置格式等 | 普通模式下按 :///? 键切换 |
命令解释
| 命令 | 作用说明 |
|---|---|
| :q | 退出 Vim(仅适用于文件未修改的场景) |
| :q! | 强制退出 Vim,不保存任何修改(丢弃所有变更) |
| :wq | 保存修改并退出 Vim(等同于 :x) |
| :wq! | 强制保存退出,跳过部分校验 |
| :w | 保存修改但不退出 Vim(可继续编辑) |
| :w filename | 另存为指定文件(不退出,原文件不变) |
h |
光标向左移动 1 个字符(等同于 ← 键) |
j |
光标向下移动 1 行(等同于 ↓ 键) |
k |
光标向上移动 1 行(等同于 ↑ 键) |
l |
光标向右移动 1 个字符(等同于 → 键) |
0 |
光标跳转到当前行的行首 |
$ |
光标跳转到当前行的行尾 |
gg |
光标跳转到文件的第一行首 |
G |
光标跳转到文件的最后一行首 |
nG |
光标跳转到第 n 行(示例:10G 跳转到第 10 行) |
Ctrl+f |
向下翻页(等同于 PageDown 键) |
Ctrl+b |
向上翻页(等同于 PageUp 键) |
yy |
复制当前整行内容 |
nyy |
复制从当前行开始的 n 行内容(示例:3yy 复制 3 行) |
y$ |
复制从光标位置到当前行尾的内容 |
y0 |
复制从光标位置到当前行首的内容 |
p |
将复制的内容粘贴到光标下方 / 右侧 |
P |
将复制的内容粘贴到光标上方 / 左侧 |
dd |
删除(剪切)当前整行内容 |
ndd |
删除(剪切)从当前行开始的 n 行内容(示例:5dd 删除 5 行) |
d$ |
删除从光标位置到当前行尾的内容 |
d0 |
删除从光标位置到当前行首的内容 |
插入模式
i |
在光标当前位置前插入文本(最常用) |
|---|---|
a |
在光标当前位置后插入文本 |
o |
在光标当前行下方新建一行,并进入插入模式 |
I |
直接跳转到当前行行首,并进入插入模式 |
A |
直接跳转到当前行行尾,并进入插入模式 |
O |
在光标当前行上方新建一行,并进入插入模式 |
echo命令
echo 输出内容
示例:
#默认换行
[root@ubuntu2204 ~]# echo hello
hello
#不换行
[root@ubuntu2204 ~]# echo -n hello
hello[root@ubuntu2204 ~]#
#把hello打印到指定文件
echo hello > /etc/tun.txt
#把hello打印到指定文件不覆盖
echo hello >> /etc/tun.txt
#输出变量
[root@ubuntu2204 ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[root@ubuntu2204 ~]# echo {000..20..2}
000 002 004 006 008 010 012 014 016 018 020
history历史行命令
#常用选项
-c #清空命令历史
-d offset #删除历史中指定的第offset个命令
n #显示最近的n条历史
-a #追加本次会话新执行的命令历史列表至历史文件
-r #读历史文件附加到历史列表
-w #保存历史列表到指定的历史文件
-n #读历史文件中未读过的行到历史列表
-p #展开历史参数成多行,但不存在历史列表中
-s #展开历史参数成一行,附加在历史列表后
help帮助
示例:
[root@ubuntu2204 ~]# ls --help
Usage: ls [OPTION]... [FILE]...
文件系统目录结构

常见的文件系统目录功能
/boot #引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin #所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin #管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
/lib #启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64 #专用于x86_64系统上的辅助共享库文件存放位置
/etc #配置文件目录
/home/USERNAME #普通用户家目录
/root #管理员的家目录
/media #便携式移动设备挂载点
/mnt #临时文件系统挂载点
/dev #设备文件及特殊文件存储位置, b:block device,随机访问,c:character
device,线性访问
/opt #第三方应用程序的安装位置
/srv #系统上运行的服务用到的数据
/tmp #临时文件存储位置
/usr #universal shared, read-only data
/usr/bin #保证系统拥有完整功能而提供的应用程序
/usr/sbin #同上
/usr/lib #32位使用
/usr/lib64 #只存在64位系统
/usr/include #C程序的头文件(header files)
/usr/share #结构化独立的数据,例如doc, man等
/var #variable data files,可变数据目录
/var/cache #应用程序缓存数据目录
/var/lib #应用程序状态信息数据
/var/local #专用于为/usr/local下的应用程序存储可变数据
/var/lock #锁文件
/var/log #日志目录及文件
/var/opt #专用于为/opt下的应用程序存储可变数据
/var/run #运行中的进程相关数据,通常用于存储进程pid文件
/var/spool #应用程序数据池
/var/tmp #保存系统两次重启之间产生的临时数据
/proc #用于输出内核与进程信息相关的虚拟文件系统
/sys #用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux #security enhanced Linux,selinux相关的安全策略等信息的存储位置
Linux下的文件系统类型
| 文件类型 | 标识符 |
|---|---|
| 普通文件 | - |
| 目录文件 | d |
| 符号链接文件 | l |
| 块设备文件 | b |
| 字符设备文件 | c |
| 管道文件 | p |
| 套接字文件 | s |
linux系统中的文件类型颜色标识
| 文件类型 | 颜色 |
|---|---|
| 普通文件 | 白色 |
| 目录文件 | 蓝色 |
| 符号链接文件 | 浅蓝色 |
| 块设备文件 | 黄色 |
| 字符设备文件 | 黄色 |
| 管道文件 | 青黄色 |
| 套接字文件 | 粉红色 |
| 图片文件 | 粉红色 |
| 压缩文件 | 红色 |
| 其他文件 | 灰色 |
文件操作命令
pwd #显示当前绝对路径
#常用选项
-P #显示真实物理路径
#走相对路径,从当前目录出发
示例:
[root@ubuntu2204 apt]# pwd
/etc/apt
[root@ubuntu2204 apt]# ls
apt.conf.d keyrings sources.list sources.list.d
auth.conf.d preferences.d sources.list.curtin.old trusted.gpg.d
[root@ubuntu2204 apt]# cd apt.conf.d/
cd #更改目录
. #当前目录
.. #返回上一级
ls #列出目录内容
#常用选项
-l #显示额外的信息
-a #包含隐藏文件
-X #按文件后缀排序
cat #查看文件内容
touch #创建空文件
#将abc 时间设置为7月8日9时10分
[root@ubuntu2204 ~]# touch -t 07080910 abc
cp #复制
#常用选项
-i #如果目标文件己存在,则提示是否覆盖
-n #如果目标文件己存在,则跳过此文件复制
-R #递归复制,可用于目录的复制
-a #保留所有属性 相当于 dpR 选项组合
-s #不复制文件,而是创建链接
-p #同时复制访问时间,修改时间,权限等属性,
mv #移动和重命名文件
#常用选项
-b #如果目标存在,则先备份
-n #如果目标文件己存在,则跳过此文件移动
-i #如果目标文件己存在,则提示是否覆盖
-u #当源文件比目标文件新时,才执行移动操作
-v #显示移动过程
rm 删除文件和目录
#常用选项
-i #删除前确认
-f #不确认直接删除
-r #递归删除
-d #删除空目录
--no-preserve-root #强删根目录
tree 显示目录树
#常用选项
-a #显示所有,包括隐藏目录和文件
-d #只显示目录
-f #显示所有内容的完整路径
mkdir 创建目录
#常用选项
-m #目录权限属性
-p #如果要创建的目录父级目录不存在,则一起创建,是递归的意思
-v #显示创建过程
查看分区inode
df -i
tr
硬链接
硬链接:硬链接的作用是允许一个文件拥有多个有效的路径名
软连接
软连接:软链接是建立一个独立的文件,这个文件的指向的是目标的文件名。
创建硬链接
ln 源文件 目标文件
创建符号链接
ln -s 源文件 目标文件
示例:
#正确
[root@ubuntu2204 ~]# ln -sv /root/abc /boot/abc.link2
'/boot/abc.link2' -> '/root/abc'
[root@ubuntu2204 ~]# ll /boot/abc.link2
lrwxrwxrwx 1 root root 9 Jul 12 15:10 /boot/abc.link2 -> /root/abc
对目录进行软连接实践
[root@rocky9 link]# ln -s dir1 soft_dir1
[root@rocky9 link]# ln -s dir1 soft_dir1-1
[root@rocky9 link]# ln -s soft_dir1 soft_soft_dir1
[root@rocky9 link]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 24 10:30 dir1
drwxr-xr-x. 2 root root 6 9月 24 10:30 dir2
-rw-r--r--. 4 root root 0 9月 24 10:29 file1
-rw-r--r--. 1 root root 0 9月 24 10:29 file2
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_file1
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_file1-1
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_hard_file1
lrwxrwxrwx. 1 root root 4 9月 24 10:37 soft_dir1 -> dir1
lrwxrwxrwx. 1 root root 4 9月 24 10:37 soft_dir1-1 -> dir1
lrwxrwxrwx. 1 root root 9 9月 24 10:37 soft_soft_dir1 -> soft_dir1
对文件进行软连接实践
[root@rocky9 link]# ln -s file2 soft_file2
[root@rocky9 link]# ln -s file2 soft_file2-2
[root@rocky9 link]# ln -s soft_file2 soft_soft_file2
[root@rocky9 link]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 24 10:30 dir1
drwxr-xr-x. 2 root root 6 9月 24 10:30 dir2
-rw-r--r--. 4 root root 0 9月 24 10:29 file1
-rw-r--r--. 1 root root 0 9月 24 10:29 file2
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_file1
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_file1-1
-rw-r--r--. 4 root root 0 9月 24 10:29 hard_hard_file1
lrwxrwxrwx. 1 root root 4 9月 24 10:37 soft_dir1 -> dir1
lrwxrwxrwx. 1 root root 4 9月 24 10:37 soft_dir1-1 -> dir1
lrwxrwxrwx. 1 root root 5 9月 24 10:38 soft_file2 -> file2
lrwxrwxrwx. 1 root root 5 9月 24 10:38 soft_file2-2 -> file2
lrwxrwxrwx. 1 root root 9 9月 24 10:37 soft_soft_dir1 -> soft_dir1
lrwxrwxrwx. 1 root root 10 9月 24 10:39 soft_soft_file2 -> soft_file2
软连接删除实践
[root@rocky9 link]# rm -rf soft_file2 soft_dir1
[root@rocky9 link]# cat soft_file2-2
cat: soft_file2-2: 没有那个文件或目录
删除软连接文件的 原始文件 -- 链接文件会变红
[root@ubuntu2204 0509]# ll
total 0
drwxr-xr-x 2 root root 48 Jul 12 15:17 dir1
lrwxrwxrwx 1 root root 5 Jul 12 15:18 dir1.link -> dir1/
#这样是删除链接指向的目录
[root@ubuntu2204 0509]# rm -rf dir1.link/
#这样是删除链接文件
[root@ubuntu2204 0509]# rm -rf dir1.link
硬链接和软连接区别总结
| 选项 | 硬链接 | 软连接 |
|---|---|---|
| 本质 | 本质是同一个文件 | 本质不是同一个文件 |
| 跨设备 | 不支持 | 支持 |
| inode | 相同 | 不同 |
| 链接数 | 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 | 创建或删除,链接数不会变化 |
| 文件夹 | 不支持 | 支持 |
| 相对路径 | 原始文件相对路径是相对于当前工作目录 | 原始文件相对路径是相对于链接文件 |
| 删除源文件 | 是链接数减一,但链接文件的访问不受影响 | 链接文件将无法访问 |
| 文件类型 | 和源文件相同 | 链接文件,和源文件无关 |
用户和权限管理
用户:Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是互相隔离的
用户组:Linux中可以将一个或多个用户加入用户组中,组就是包含0个或多个用户的集合,用户组是通过Group ID(GID) 来唯一标识的
用户和组的关系
- 一个用户至少有一个组,也可以有多个组;
- 一个组至少有0个用户,也可以有多个用户;
- 用户的主要组(primary group):又称私有组,一个用户必须属于且只有一个主组,创建用户时,默认会创建与其同名的组作为主组;
- 用户的附加组(supplementary group):又称辅助组,一个用户可以属于0个或多个附加组;
- 使用组,可以对用户进行批量管理,比如对一个组授权,则该组下所有的用户能能继承这个组的权限
程序:一个程序或一个命令,本质上也是一个可执行的二进制文件或一个可执行的脚本文件;
在服务器上有很多文件,只有那些特定的,可以被执行的二进制文件,才能被称为程序;
进程:运行中的程序,就是进程;
用户和组
用户和组的配置文件
- /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其相关属性
| 配置文件 | 作用 | 关键字段说明 |
|---|---|---|
| /etc/passwd | 保存所有用户信息 | 用户名:密码占位符:UID:GID:用户描述:家目录:登录Shell |
| /etc/shadow | 保存用户密码(加密存储) | 用户名:加密密码:最后修改时间:最小修改间隔:有效期... |
| /etc/group | 保存所有用户组信息 | 组名:组密码占位符:GID:组内用户列表(附加组) |
| /etc/gshadow | 保存组密码(很少用) | 组管理员密码、组密码等 |
groupadd—创建用户组
[root@rocky8 ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2594 12月 26 16:21 /etc/passwd
[root@rocky8 ~]# ll /etc/shadow
----------. 1 root root 1577 12月 26 16:21 /etc/shadow
[root@rocky8 ~]# ll /etc/group
-rw-r--r-- 1 root root 1030 1月 2 18:03 /etc/group
[root@rocky8 ~]# ll /etc/gshadow
---------- 1 root root 828 1月 2 18:03 /etc/gshadow
结果显示:
shadow 只有 root 才有读和写权限,这样就保证了密码文件的安全性
passwd和group 文件每个用户都有读权限
passwd
查看用户及其属性信息
[root@rocky8 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@rocky8 ~]# cat /etc/passwd
opadm:x:1000:1000:opadm:/home/opadm:/bin/bash
从passwd文件中获取某一个用户信息
[root@rocky8 ~]# getent passwd opadm
opadm:x:1000:1000:opadm:/home/opadm:/bin/bash
注意:每一列都是以 : 为分隔符
shadow
[root@rocky8 ~]# cat /etc/shadow
root:$6$YiDYOFywV6Y6otTE$19DuEI5rAv0.hOuDBDEda3MsweS8HW64oeRalBh7q84HSQGHJ4jb95dBpkXYg8kg6/1fS4LsbX1NCFe2KpJ3o1::0:99999:7:::
用户组管理
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相同的新组,则被删除组的数
用户管理
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,解锁
userdel—删除用户
# 只删除用户,保留家目录
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 环境
文件权限管理
对文件来讲,系统中的用户,分属于三类不同的角色,分别是属主,属组,其它用户;
而每个角色用户,对该文件的权限,也分三种,分别是读,写,执行;

文件用户属性
四种角色:
| 角色 | 字符表示 |
|---|---|
| 属主:所有者 | u |
| 属组:属于哪个组 | g |
| 其它用户:不是所有者,也不在属组中的用户 | o |
| 所有人,包括属主属组和其它用户 | a |
文件操作权限
三种权限:
| 权限 | 字符表示 | 八进制数字表示 |
|---|---|---|
| 读权限 | r | 4 |
| 写权限 | w | 2 |
| 执行权限 | x | 1 |
赋值写法
| 在命令中的字符 | 备注 |
|---|---|
| + | 增加某些权限 |
| - | 减少某些权限 |
| = | 只保留某些权限,覆盖写法 |
常见写法:
u+r #属主加读权限
g-x #属组去掉执行权限
ug=rx #属主属组权限改为读和执行
o= #other用户无任何权限
a=rwx #所有用户都有读写执行权限
u+r,g-x #同时指定
属性操作(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,也就是说,谁都可以进入目录查看
chown
更改文件用户属性
只修改所有者属性
[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
cut命令
cut 命令可以提取文本文件或STDIN数据的指定列
以:为分隔符,获取1,3,4,7 行内容
[root@rocky8 ~]# head -n5 /etc/passwd | cut -d: -f1,3-4,7
root:0:0:/bin/bash
bin:1:1:/sbin/nologin
daemon:2:2:/sbin/nologin
adm:3:4:/sbin/nologin
lp:4:7:/sbin/nologin
tr命令
tr命令实现 字符转换、替换、删除
演示:
[root@rocky8 ~]# tr '[0-9]' '@' < test1.txt
root:x:@:@:root:/root:/bin/bash
bin:x:@:@:bin:/bin:/sbin/nologin
daemon:x:@:@:daemon:/sbin:/sbin/nologin
adm:x:@:@:adm:/var/adm:/sbin/nologin
lp:x:@:@:lp:/var/spool/lpd:/sbin/nologin
sort命令
sort命令,实现信息排序
-r :降序排列,默认是升序
-n :以数字排序,默认是按字符排序
文件内容
[root@rocky8 0108]# cat toker1.txt
1
5
7
d
t
o
9
2
t
4
内容倒序
[root@rocky8 0108]# sort -r toker1.txt
t
t
o
d
9
7
5
4
2
1
内容升序
[root@rocky8 0108]# sort -n toker1.txt
d
o
t
t
1
2
4
5
7
9
uniq
uniq命令 实现连续信息的去重动作
文件内容
[root@rocky8 0108]# cat uniq.txt
AA
aa
aa
cc
cc
EE
ee
SS
ss
去重演示
[root@rocky8 0108]# uniq uniq.txt
AA
aa
cc
EE
ee
SS
ss
find查找
根据文件名
指定文件名查找
root@ubuntu24:find# find -name test-a.log
./test-a.log
指定文件名,忽略大小写
root@ubuntu24:find# find -iname test-a.log
./test-a.log
./test-A.log
查看当前目录下的所有目录文件
root@ubuntu24:find# find -type d
压缩
zip
zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息
分别来自于 zip 和 unzip 包;对应的文件是 .zip 后缀
zip 命令用于创建 .zip 压缩包。
压缩单个文件
zip [选项] [压缩包名称].zip [要压缩的文件或目录...]
zip archive.zip document.txt
压缩整个目录
zip -r project_backup.zip my_project
创建加密的压缩包
zip -re secret_files.zip private_notes/
解压
unzip [选项] [压缩包名称].zip
解压到指定目录
unzip project_backup.zip -d /tmp/restore
查看压缩包文件内容
root@ubuntu22:~/zip# unzip -l hosts.zip
tar
tar命令本身主要用于打包文件和目录,而压缩功能通常是通过与外部压缩工具(如 gzip, bzip2, xz)结合实现的。
压缩
tar -czvf [压缩包名称].tar.gz [要压缩的文件或目录]
tar -czvf docs.tar.gz /home/user/documents
解压
tar -xzvf [压缩包名称].tar.gz
tar -xzvf docs.tar.gz
-C 解压文件到指定目录下
tar -xzvf [压缩包名称].tar.gz -C /usr/local
分页查看文件内容
more
more 可以实现分页查看文件,可以配合管道实现输出信息的分页
命令选项
空格键 #翻页
回车键 #下一行
!cmd #执行命令
h #显示帮助
:f #显示文件名和当前行号
= #显示行号
less
less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
#常用选项
-e #显示完成后自动退出
-N #显示行号
-s #压缩连续空行
-S #不换行显示较长的内容
显示文本前面或后面的行内容
head
head可以显示文件或标准输入的前面行
#常用选项
-c #指定获取前N字节
-n #指定获取前N行,N如果为负数,表示从文件头取到倒数第N前
-N #同上
-q #不输出文件名
-v #输出文件名
-z #以NULL字符而非换行符作为行尾分隔符
示例:
[root@ubuntu2204 ~]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
[root@ubuntu2204 ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
tail
tail 和 head 相反,查看文件或标准输入的倒数行
#常用选项
-c #指定获取后N字节
-n#指定获取后N行,如果写成+N,表示从第N行开始到文件结束
-N #同上
-f #跟踪显示文件fd新追加的内容,常用日志监控,当删除再新建同名文件,将无法继续跟踪
示例:
[root@ubuntu2204 ~]# cat /data/f1.txt
1
2
3
4
5
6
7
8
9
10
[root@ubuntu2204 ~]# tail -n 3 /data/f1.txt
8
9
10
[root@ubuntu2204 ~]# tail -n +3 /data/f1.txt
3
4
5
6
7
8
9
10
[root@ubuntu2204 ~]# tail -3 /var/log/syslog
May 10 08:25:52 ubuntu2204 systemd[1]: Starting Cleanup of Temporary
Directories...
May 10 08:25:52 ubuntu2204 systemd[1]: systemd-tmpfiles-clean.service:
Deactivated successfully.
May 10 08:25:52 ubuntu2204 systemd[1]: Finished Cleanup of Temporary
Directories.
head + tail 的总和实践 -- 获取指定行内容
获取第6行的内容
[root@rocky9 ~]# head -n6 /etc/passwd | tail -n1
sync:x:5:0:sync:/sbin:/bin/sync
获取倒数第6行的内容
[root@rocky9 ~]# tail -n6 /etc/passwd | head -n1
sswang2:x:1025:1025::/home/sswang2:/bin/bash
文本三剑客
grep
grep 负责从数据源中检索对应的字符串,主打查找 / 过滤文本内容(按行匹配)
示例:
#标准输入
[root@ubuntu2204 ~]# grep hello
123hello456
123hello456
#管道
[root@ubuntu2204 ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
#取前三行
[root@ubuntu2204 ~]# grep -m 3 bin /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
#显示行号
[root@ubuntu2204 ~]# grep -n bash /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
32:mage:x:1000:1000:mage:/home/mage:/bin/bash
34:jose:x:1001:1001::/home/jose:/bin/bash
35:tom:x:1002:1002::/home/tom:/bin/bash
36:jerry:x:1003:1003::/home/jerry:/bin/bash
sed
以行为单位编辑文本(替换、删除、新增、修改),无需打开文件,适合批量处理文本。
sed 处理流程:读取一行 → 按规则处理 → 输出结果 → 处理下一行(默认不修改原文件)。
准备工作
[root@rocky8 ~]# cat sed.txt
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed7 sed8 sed9
案例1 打印信息
默认打印信息
[root@rocky8 ~]# sed '2p' sed.txt
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed4 sed5 sed6 # 这一行才是操作的内容,其他的都是缓存区自动输出
nihao sed7 sed8 sed9
打印第2行,不输出缓存区默认的其他信息
[root@rocky8 ~]# sed -n '2p' sed.txt
nihao sed4 sed5 sed6
打印第1,3行,不输出缓存区默认的其他信息
[root@rocky8 ~]# sed -n '1p;3p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9
打印网卡信息
[root@rocky8 ~]# ifconfig eth0 | sed -n '2p'
inet 10.0.0.12 netmask 255.255.255.0 broadcast 10.0.0.255
打印磁盘信息
[root@rocky9 ~]# df | sed -n '/^\/dev\/sd/p'
/dev/sda2 19911680 2772988 17138692 14% /
/dev/sda1 1038336 145380 892956 15% /boot
案例2 匹配内容打印
打印包含sed4的行
[root@rocky9 ~]# sed -n '/sed4/p' sed.txt
nihao sed4 sed5 sed6
打印奇数行
[root@rocky9 ~]# sed -n '1~2p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9
打印偶数行
[root@rocky9 ~]# sed -n '0~2p' sed.txt
nihao sed4 sed5 sed6
案例3 取反
取反显示
[root@rocky9 ~]# sed -n '2!p' sed.txt
nihao sed1 sed2 sed3
nihao sed7 sed8 sed9
查看内容属于第几行
[root@rocky9 ~]# sed -n '/sed4/=' sed.txt
2
sed替换
案例1 替换每行首个匹配内容
格式:sed -i 's#原内容#替换后内容#' 文件名
替换首每行的第1个sed为SED
[root@rocky8 ~]# sed -i 's#sed#SED#' sed.txt
[root@rocky8 ~]# cat sed.txt
nihao SED1 sed2 sed3
nihao SED4 sed5 sed6
nihao SED7 sed8 sed9
案例2 替换全部匹配内容
格式:sed -i 's#原内容#替换后内容#g' 文件名
替换全部sed为des
[root@rocky8 ~]# sed -i 's#sed#SED#g' sed.txt
[root@rocky8 ~]# cat sed.txt
nihao SED1 SED2 SED3
nihao SED4 SED5 SED6
nihao SED7 SED8 SED9
关于全部替换还有另外一种命令叫直接转换 y
[root@rocky8 ~]# sed 'y/SED/sed/' sed.txt
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed7 sed8 sed9
案例3 指定行号替换首个匹配内容
格式:sed -i '行号s#原内容#替换后内容#' 文件名
替换第2行的首个SED为sed
[root@rocky9 ~]# sed -i '2s#SED#sed#' sed.txt
[root@rocky9 ~]# cat sed.txt
nihao SED1 SED2 SED3
nihao sed4 SED5 SED6
nihao SED7 SED8 SED9
案例4 首行指定列号替换匹配内容
格式:sed -i 's#原内容#替换后内容#列号' 文件名
替换每行的第2个SED为sed
[root@rocky9 ~]# sed -i 's#SED#sed#2' sed.txt
[root@rocky9 ~]# cat sed.txt
nihao SED1 sed2 SED3
nihao sed4 SED5 sed6
nihao SED7 sed8 SED9
案例5 指定行号列号匹配内容
格式:sed -i '行号s#原内容#替换后内容#列号' 文件名
替换第3行的第2个SED为sed
[root@rocky9 ~]# sed -i '3s#SED#sed#2' sed.txt
[root@rocky9 ~]# cat sed.txt
nihao SED sed2 SED3
nihao sed4 SED5 sed6
nihao SED7 sed8 sed9
sed增加操作
格式:
sed -i '行号a\增加的内容' 文件名
案例 基于行号实践
指定行号增加内容
[root@rocky9 ~]# sed -i '2a\zengjia-2' sed.txt
[root@rocky9 ~]# cat sed.txt
nihao SED sed2 SED3
nihao sed4 SED5 sed6
zengjia-2
nihao SED7 sed8 sed9
指定1~3每行都增加内容
[root@rocky9 ~]# sed -i '1,3a\tongshi-2' sed.txt
[root@rocky9 ~]# cat sed.txt
nihao SED sed2 SED3
tongshi-2
nihao sed4 SED5 sed6
tongshi-2
zengjia-2
tongshi-2
nihao SED7 sed8 sed9
插入实践
sed -i '行号i\增加的内容' 文件名
案例
指定行号增加内容
[root@rocky9 ~]# sed -i '1i\insert-1' sed.txt
[root@rocky9 ~]# cat sed.txt
insert-1
nihao SED sed2 SED3
tongshi-2
nihao sed4 SED5 sed6
tongshi-2
zengjia-2
tongshi-2
nihao SED7 sed8 sed9
指定1~3每行都增加内容
[root@rocky9 ~]# sed -i '1,3i\insert-2' sed.txt
[root@rocky9 ~]# cat sed.txt
insert-2
insert-1
insert-2
nihao SED sed2 SED3
insert-2
tongshi-2
nihao sed4 SED5 sed6
tongshi-2
zengjia-2
tongshi-2
nihao SED7 sed8 sed9
删除替换
作用:
指定行号删除
格式:
sed -i '行号d' 文件名
注意:
如果删除多行,可以在行号位置多写几个行号,彼此间使用逗号隔开,例如
sed -i '1,3d' 文件名
基于行号实践
删除第4行内容
[root@rocky9 ~]# sed -i '4d' sed.txt
[root@rocky9 ~]# cat sed.txt
insert-2
insert-1
insert-2
insert-2
tongshi-2
nihao sed4 SED5 sed6
tongshi-2
zengjia-2
tongshi-2
nihao SED7 sed8 sed9
删除多行(1-6行)内容
[root@rocky9 ~]# sed -i '1,6d' sed.txt
[root@rocky9 ~]# cat sed.txt
tongshi-2
zengjia-2
tongshi-2
nihao SED7 sed8 sed9
替换实践
语法
作用:
指定行号进行整行替换
格式:
sed -i '行号c\内容' 文件名
案例
替换第3行内容
[root@rocky9 ~]# sed -i '3c\tihuan-1' sed.txt
[root@rocky9 ~]# cat sed.txt
tongshi-2
zengjia-2
2.3.1.4 sed其他实践[扩展]
2.3.1.4.1 加载保存
2.3.1.4.1.1 加载实践
基本语法
实践1-基于行号实践
tihuan-1
nihao SED7 sed8 sed9
指定1~3行都替换成一行内容
[root@rocky9 ~]# sed -i '1,3c\tihuan-3' sed.txt
[root@rocky9 ~]# cat sed.txt
tihuan-3
nihao SED7 sed8 sed9
保存实践
语法
作用:
指定行号保存到其他位置
格式:
sed -i '行号w 文件名' 文件名
案例 基于行号实践
保存第3行内容
[root@rocky9 ~]# sed -i '2w sed_test' sed.txt
[root@rocky9 ~]# cat sed_test
nihao SED7 sed8 sed9
指定2~4行内容保存到一个文件中
[root@rocky9 ~]# sed -i '1,4w sed_test' sed.txt
[root@rocky9 ~]# cat sed_test
tihuan-3
nihao SED7 sed8 sed9
1p
3p
AWK
主打分析 / 处理文本数据(按列处理,支持复杂逻辑)
字段提取:提取一个文本中的一列数据并打印输出,它提供了相关的内置变量。
$0 表示整行文本
$1 表示文本行中的第一个数据字段
$2 表示文本行中的第二个数据字段
$N 表示文本行中的第N个数据字段
$NF 表示文本行中的最后一个数据字段
NR 代表行的行号,在动作外部表示特定行
注意:
如果打印多列信息,需要使用逗号隔开,否则是内容合并
准备工作
[root@rocky8 ~]# cat awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6
nihao awk7 awk8 awk9
打印列信息
打印第1列的内容
[root@rocky8 ~]# awk '{print $1}' awk.txt
nihao
nihao
nihao
打印第3列内容
[root@rocky8 ~]# awk '{print $3}' awk.txt
awk2
awk5
awk8
打印最后一列信息
[root@rocky8~]# awk '{print $NF}' awk.txt
awk3
awk6
awk9
打印所有内容
[root@rocky8 ~]# awk '{print $0}' awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6
nihao awk7 awk8 awk9
打印多列信息
打印第3,8列内容
[root@rocky9 ~]# awk '{print $1,$3}' awk.txt
nihao awk2
nihao awk5
nihao awk8
打印信息时候,合并信息
[root@rocky9 ~]# awk '{print $1$3}' awk.txt
nihaoawk2
nihaoawk5
nihaoawk8
使用\t实现内容的分割,需要用""扩住
[root@rocky9 ~]# awk '{print $1"\t"$3}' awk.txt
nihao awk2
nihao awk5
nihao awk8
行号信息输出
打印每列的行号信息
[root@rocky9 ~]# awk '{print NR,$0}' awk.txt
1 nihao awk1 awk2 awk3
2 nihao awk4 awk5 awk6
3 nihao awk7 awk8 awk9
按照行号打印对应列的内容
[root@rocky9 ~]# awk '{print NR, $NR}' awk.txt
1 nihao
2 awk4
3 awk8

浙公网安备 33010602011771号