Skip to main content

常用命令行快捷键速查

文本编辑工具之神VIM

vi Visual editor,文本编辑器,是 Linux 必备工具之一,功能强大,学习曲线较陡峭,学习难度大 vim VIsual editor iMproved ,和 vi 使用方法一致,但功能更为强大,不是必备软件

三种主要模式和转换

三种常见模式: 命令或普通(Normal)模式: 默认模式,可以实现移动光标,剪切/粘贴文本 插入(Insert)或编辑模式: 用于修改文本 扩展命令(extended command )或命令(末)行模式: 保存,退出等 命令模式 —> 插入模式
插入模式 --- ESC-----> 命令模式 命令模式 ---- : ----> 扩展命令模式 扩展命令模式 ----ESC,enter----> 命令模式

扩展命令模式

:进入Ex模式 ,创建一个命令提示符: 处于底部的屏幕左侧

地址定界格式

格式
地址定界后跟一个编辑命令

查找并替换

要查找的内容: 可使用基本正则表达式模式 替换为的内容: 不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&“引用前面查找时查 找到的整个内容
查找替换中的分隔符/可替换为其它字符,如: #,@ 例子:

定制vim模板

命令模式

命令模式,又称为Normal模式,功能强大,只是此模式输入指令并在屏幕上显示,所以需要记忆大量 的快捷按键才能更好的使用 1.退出VIM
2.光标跳转 字符间跳转
单词间跳转
当前页跳转:
行首行尾跳转:
行间移动:
句间移动:
段落间移动:
命令模式翻屏操作
3.字符编辑
4.替换命令(replace)
5.删除命令(delete)
6.复制命令(yank)
7.粘贴命令(paste)
8.改变命令(change) 命令 c 删除后切换成插入模式
9.查找
10.撤消更改
11.高级用法 <start position><command><end position> 常见Command: y 复制、d 删除、gU 变大写、gu 变小写 范例:
范例: 粘贴“wang”100次

可视化模式

在末行有”— VISUAL — “指示,表示在可视化模式 允许选择的文本块 v 面向字符,— VISUAL — V 面向整行,— VISUAL LINE — ctrl-v 面向块,— VISUAL BLOCK — 可视化键可用于与移动键结合使用 w ) } 箭头等 突出显示的文字可被删除,复制,变更,过滤,搜索,替换等 范例: 在文件指定行的行首插入#
范例: 在指定的块位置插入相同的内容

多文件模式

多窗口模式

多文件分割

单文件窗口分割

帮助

文本常见处理工具

基础文本输出工具 echo

echo 用于将文本或变量内容输出到标准输出(屏幕或重定向到文件)。

基本语法:

常用选项 支持的转义序列(仅在 -e 时生效)

文件内容查看命令

查看文本文件内容

cat
cat 可以查看文本内容 格式:
常见选项
范例:
nl
显示行号,相当于cat -b
tac
逆向显示文本内容
rev
将同一行的内容逆向显示

查看非文本文件内容

范例: hexdump

分页查看文件内容

more
可以实现分页查看文件,可以配合管道实现输出信息的分页 格式
选项: -d: 显示翻页及退出提示 按h键输出帮助菜单
less
less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器 查看时有用的命令包括:
范例:
范例:

显示文本前面或后面的行内容

head
可以显示文件或标准输入的前面行 格式:
选项:
范例:
tail
tail 和head 相反,查看文件或标准输入的倒数行 格式:
常用选项:
范例:
范例:
head和tail总结
image-20250701191750455 范例: 显示第6行

按列抽取文本cut

cut 命令可以提取文本文件或STDIN数据的指定列 格式
常用选项
范例:
范例: 取分区利用率

合并多个文件paste

格式
常用选项:
范例:
范例: 批量修改密码

分析文本的工具

文本数据统计: wc 整理文本: sort 比较文件: diff和patch

收集文本统计数据 wc

wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数 可以对文件或STDIN中的数据统计 常用选项
范例:
范例: 单词文件

文本排序 sort

把整理过的文本显示在STDOUT,不改变原始文件 格式:
常用选项
范例
范例: 统计分区利用率
面试题: 有两个文件,a.txt与b.txt ,合并两个文件,并输出时确保每个数字也唯一

去重 uniq

uniq命令从输入中删除前后相接的重复的行 格式:
常见选项:
uniq常和sort 命令一起配合使用: 范例:
计数
范例: 统计日志访问量最多的请求
范例: 并发连接最多的远程主机IP
范例: 取两个文件的相同和不同的行

比较文件

diff
diff 命令比较两个文件之间的区别
范例:
patch
patch 复制在其它文件中进行的改变(要谨慎使用)
范例:
vimdif
相当于 vim -d

cmp

范例: 查看二进制文件的不同
练习 1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出用户UID最大值的用户名、UID及shell类型
4、查出/tmp的权限,以数字方式显示
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

字符转换与删除工具 tr

字符转换与删除工具 tr tr(translate)命令用于从标准输入中替换、压缩或删除字符,并将结果输出到标准输出。

基本语法:

正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符) 不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配 符功能是用来处理文件名,而正则表达式是处理文本内容中字符 正则表达式被很多程序和开发语言所广泛支持: vim, less,grep,sed,awk, nginx,mysql 等 正则表达式分两类: 基本正则表达式: BRE Basic Regular Expressions 扩展正则表达式: ERE Extended Regular Expressions 正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块,如: PCRE(Perl Compatible Regular Expressions) 正则表达式的元字符分类: 字符匹配、匹配次数、位置锚定、分组 帮助: man 7 regex

基本正则表达式元字符

字符匹配

范例:

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数
范例:
范例:
范例: 匹配正负数
范例: ip地址

位置锚定

位置锚定可以用于定位出现的位置
范例
范例: 排除掉空行和#开头的行

分组其他

分组
分组: () 将多个字符捆绑在一起,当作一个整体处理,如: (root)+ 后向引用: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名 方式为: \1, \2, \3, … \1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符 注意: \0 表示正则表达式匹配的所有字符 示例:
注意: 后向引用 引用前面的分组括号中的模式所匹配字符,而非模式本身
或者
或者: \| 示例:
范例: 排除空行和#开头的行

正则表达式练习

1、显示/proc/meminfo文件中以大小s开头的行(要求: 使用两种方法)
2、显示/etc/passwd文件中不以/bin/bash结尾的行
3、显示用户rpc默认的shell程序
4、找出/etc/passwd中的两位或三位数
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
7、显示CentOS7上所有UID小于1000以内的用户名和UID
8、添加用户、bash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序 数值排序的话一定要加sort -n

扩展正则表达式元字符

字符匹配

次数匹配

分组其他

范例:

扩展正则表达式练习

1、显示三个用户root、mage、wang的UID和默认shell
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
4、使用egrep取出上面路径的目录名
5、统计last命令中以root登录的每个主机IP地址登录次数
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
7、显示ifconfig命令结果中所有IPv4地址
8、将此字符串: welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面

文本处理三剑客

grep

grep: Global search REgular expression and Print out the line 作用: 文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行 模式: 由正则表达式字符及文本字符所编写的过滤条件 格式
常见选项:
范例: 包含root关键字的行
显示cpu核心数
范例: 取两个文件的相同行
范例: 分区利用率最大的值
范例: 哪个IP和当前主机连接数最多的前三位
范例: 连接状态的统计
范例: 去除注释行和空行
范例:中间匹配两个任意字符
范例
范例:
范例:
范例
范例: 过滤掉文件的注释(包括#号的行)和空行
范例: 面试题,算出所有人的年龄总和

sed

sed 工作原理

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器 image-20250702192154231 Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

sed 基本用法

格式
常用选项:
script **格式: **
**地址格式: **
**命令: **
查找替代
范例
范例: 取基名和目录名
范例: 将非#开头的行加#
范例: 将#开头的行删除#
范例: 显示前十行

sed高级用用法

sed 中除了模式空间,还另外还支持保持空间(Hold Space),利用此空间,可以将模式空间中的数据,临时保存至保持空间,从而后续接着处理,实现更为强大的功能。 常见的高级命令
范例:
范例: 打印偶数行
练习: 1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
3、在centos6系统/root/install.log每一行行首增加#号
4、在/etc/fstab文件中不以#开头的行的行首增加#号
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名
6、利用sed 取出ifconfig命令中本机的IPv4地址
7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)
9、将文本文件的n和n+1行合并为一行,n为奇数行

awk

awk 工作原理和基本用法说明

awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自 由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK 有多种版本:
  • AWK: 原先来源于 AT & T 实验室的的AWK
  • NAWK: New awk,AT & T 实验室的AWK的升级版
  • GAWK: 即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容
gawk: 模式扫描和处理语言,可以实现下面功能
  • 文本处理
  • 输出格式化的文本报表
  • 执行算数运算
  • 执行字符串操作
格式:
说明: program通常是被放在单引号中,并可以由三种部分组成
  • BEGIN语句块
  • 模式匹配的通用语句块
  • END语句块
常见选项:
  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
  • -v var=value 变量赋值
**Program格式: **
pattern: 决定动作语句何时触发及触发事件,比如: BEGIN,END,正则表达式等 action statements: 对数据进行处理,放在内指明,常见: print, printf awk 工作过程 Snipaste_2025-07-03_14-23-42 第一步: 执行BEGIN{action;… }语句块中的语句 第二步: 从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。 第三步: 当读至输入流末尾时,执行END{action;…}语句块 BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中 END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块 pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行,即打印每一个读取到的行,awk读取的每一行都会执行该语句块 分割符、域和记录
  • 由分隔符分隔的字段(列column,域field)标记1,1,2…n称为域标识,n称为域标识,0为所有域,注意: 和shell中变量$符含义不同
  • 文件的每一行称为记录record
  • 如果省略action,则默认执行 print $0 的操作
常用的action分类
  • output statements: print,printf
  • Expressions: 算术,比较表达式等
  • Compound statements: 组合语句
  • Control statements: if, while等
  • input statements
awk控制语句

动作 print

格式:
说明:
  • 逗号分隔符
  • 输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
  • 如省略item,相当于print $0
  • 固定字符符需要用” ” 引起来,而变量和数字不需要
范例:
面题: 取出网站访问量最大的前3个IP
面试题: 取出分区利用率
范例:取nginx的访问日志的中IP和时间
面试题: 取 ifconfig 输出结果中的IP地址
面试题: 文件host_list.log 如下格式,请提取”.magedu.com”前面的主机名部分并写入到回到该文件中

awk变量

awk中的变量分为: 内置和自定义变量
常见的内置变量
FS: 输入字段分隔符,默认为空白字符,功能相当于 -F 范例:
OFS: 输出字段分隔符,默认为空白字符 范例:
RS: 输入记录record分隔符,指定输入时的换行符
ORS: 输出记录分隔符,输出时用指定符号代替换行符
NF: 字段数量
面试题: 连接数最多的前3个IP
范例: 每十分钟检查将连接数超过100个以上的IP放入黑名单拒绝访问
eg
eg NR: 记录的编号
范例: 取ifconfig输出结果中的IP地址
范例:
FNR: 各文件分别计数,记录的编号
FILENAME: 当前文件名
ARGC: 命令行参数的个数
ARGV: 数组,保存的是命令行所给定的各参数,每一个参数: ARGV[0],…
自定义变量
自定义变量是区分字符大小写的,使用下面方式进行赋值

动作 printf

printf 可以实现格式化输出
说明:
  • 必须指定FORMAT
  • 不会自动换行,需要显式给出换行控制符 \n
  • FORMAT中需要分别为后面每个item指定格式符
格式符: 与item一一对应
修饰符
范例:

操作符

算术操作符:
字符串操作符: 没有符号的操作符,字符串连接 赋值操作符:
eg
比较操作符:
eg
范例: 取奇,偶数行
模式匹配符:
范例:
逻辑操作符:
范例: !取反
范例:
条件表达式(三目表达式)
eg
范例:

模式PATTERN

PATTERN:根据pattern条件,过滤匹配的行,再做处理
  • 如果未指定: 空模式,匹配每一行
范例:
  • /regular expression/: 仅处理能够模式匹配到的行,需要用/ /括起来
范例:
  • relational expression: 关系表达式,结果为“真”才会被处理 真: 结果为非0值,非空字符串 假: 结果为空字符串或0值
eg
eg
范例:
eg
  • line ranges: 行范围
不支持直接用行号,但可以使用变量NR间接指定行号 /pat1/,/pat2/ 不支持直接给出数字格式 范例:
  • BEGIN/END模式
eg

条件判断 if-else

使用场景: 对awk取得的整行或某个字段做条件判断 范例:
范例:

条件判断 switch

循环 while

条件“真”,进入循环;条件“假”,退出循环 使用场景:
  • 对一行内的多个字段逐一类似处理时使用
  • 对数组中的各元素逐一处理时使用
范例:
示例:

循环 do-while

意义: 无论真假,至少执行一次循环体 do-while循环 语法: do {statement;…}while(condition) 意义: 无论真假,至少执行一次循环体 范例:

循环 for

语法
常见语法
特殊用法: 能够遍历数组中的元素
范例:
面试题: 文件abc,txt只有一行数字,计算其总和
范例:
性能比较
范例: 取出字符串中的数字

continue break

continue 中断本次循环 break 中断整个循环 格式:
eg

next

next 可以提前结束对本行处理而直接进入下一行处理(awk自身循环) 范例:

数组

awk的数组为关联数组 格式
范例:
index-expression
  • 利用数组,实现 k/v 功能
  • 可使用任意字符串;字符串要使用双引号括起来
  • 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值初始化为“空串”
  • 若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历
范例:
eg去重
范例: 判断数组索引是否存在
若要遍历数组中的每个元素,要使用 for 循环
注意: var 会遍历array的每个索引 范例: 遍历数组
范例: 显示主机的连接状态出现的次数
eg
范例: 封掉查看访问日志中连接次数超过1000次的IP
范例: 多维数组
eg

awk 函数

awk 的函数分为内置和自定义函数
常见内置函数
数值处理
eg
字符串处理:
范例: 统计用户名的长度
eg
范例:
eg
可以awk中调用shell命令
空格是awk中的字符串连接符,如果system中需要使用awk中的变量可以使用空格分隔,或者说除了awk的变量外其他一律用""引用起来
时间函数
eg
自定义函数
自定义函数格式:
范例:

awk 脚本

将awk程序写成脚本,直接调用或执行 范例:
eg
向awk脚本传递参数 格式:
注意:
  • 上面格式变量在BEGIN过程中不可用。直到首行输入完成以后,变量才可用
  • 可以通过-v 参数,让awk在执行BEGIN之前得到变量的值
  • 命令行中每一个指定的变量都需要一个-v参数
范例:
范例: 检查出最近一小时内访问nginx服务次数超过3次的客户端IP
练习 1、文件host_list.log 如下格式,请提取”.magedu.com”前面的主机名部分并写入到回到该文件中
参考答案:
2、统计/etc/fstab文件中每个文件系统类型出现的次数
3、统计/etc/fstab文件中每个单词出现的次数 参考答案
4、提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字 参考答案
5、文件random.txt记录共5000个随机的整数,存储的格式100,50,35,89…请取出其中最大和最小的整 参考答案
6、解决Dos攻击生产案例: 监控当某个IP并发连接数超过100时,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为: iptables -A INPUT -s IP -j REJECT 参考答案
7、将以下文件内容中FQDN取出并根据其进行计数从高到低排序
8、将以下文本文件awktest.txt中 以inode列为标记,对inode列相同的counts列进行累加,并且统计出同一inode中,beginnumber列中的最小值和endnumber列中的最大值
输出的结果格式为:
答案