linux常用命令小结

常用命令

sort命令

sort命令将输入的文件内容按照规则排序,然后输出结果

用法: sort 选项]...[文件].
  或:soェt[选项]... -- files0-from=F 
串联排序所有指定文件并将结果写到标准输出。
-b, ignore- leading- blanks  忽略前导的空白区域
-n, numeric-sort             根据字符串数值比较
-r, reverse                  逆序输出排序结果
-u, unique  配合-c,严格校验排序;不配合-c,则只输出一次排序结果
-t, --fied- separator=分隔符 使用指定的分隔符代替非空格到空格的转换 
-k,-key=位置1 [t,位置2]  在位置1开始一个key,在位置2终止(默认为行尾)
sort -n sort.txt对文件安数字排序
sort -nr sort.txt从大到小排序
sort -u sort.txt去重排序
sort -n -t "." -k 4 ip.txt按IP末尾排序

uniq命令

uniq命令可以输出或者忽略文件中的重复行,常与sort排序结合使用

用法:uniq[选项]...[文件]
从输入文件或者标准输入中筛选相邻的匹配行并写入到输出文件或标准输出。
不附加任何选项时匹配行将在首次出现处被合并。
 -c, count    在每行前加上表示相应行目出现次数的前缀编号
 -d, repeated 只输出重复的行
 -u, unique   只显示出现过一次的行,注意了,uniq的只出现过一次,是针对-c统计之后的结果
uniq luffy.txt去重(只去连续的重复)
sort -n luffy.txt | uniq排序后去重
sort -n luffy.txt | uniq -c排序后去重 并统计次数
sort -n luffy.txt | uniq -d -c排序后去重 并统计重复的行
sort -n luffy.txt | uniq -c -u显示只出现一次的行

wc命令

Wc命令用于统计文件的行数、单词、字节数

-c,-- bytes  打印字节数
-m,-- chars  打印字符数
-1,--1ines   打印行数
-L,--max-1ine- length打印最长行的长度 
-w,-- words  打印单词数
wc -l luffty.txt文件的行数
wc -w打印单词数
wc -m
wc -L打印最长行的长度

tr命令

tr命令从标准输入中替換、缩减或删除字符,将结果写入到标准输出

用法: tr[选项]...SET1[SET2]
从标准输入中替換、缩减和/或删除字符,并将结果写到标准输出。

字符集1:指定要转换或刪除的原字符集。

当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。

但执行删除操作时,不需要参数“字符集2

字符集2:指定要转换成的目标字符集。

-c或 complement:取代所有不属于第一字符集的字符;
-d或 delete:删除所有属于第一字符集的字符;
-s或 --squeeze-repeats:把连续重复的字符以单独一个字符表示; 
-t或 --truncate-set1:先删除第一字符集较第二字符集多出的字符。
echo "my name is lf" | tr '[a-z]' '[A-Z]'小写改大写
cho "my name is lf and i am 999years" | tr -d 'a-z'删除字母
tr 'a' A' < alex.txt将文件中的a 替换为A
echo “iiiii am lllllfffffff” | tr -s ‘ialf’把连续重复的字符以单独一个字符表示;

Find命令 xargs 精讲

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。
并且将查找到的子目录和文件全部进行显示。

find 查找目录和文件, 语法:
 find 路径 一命令参数 [输出形式]

参数说明: 路径:告诉find在哪儿去找你要的东西,
参数解释
pathname要查找拢的路径
options选项
-maxdepth<目录层级>:设置最大目录层级;
-indepth<目录层级>:设置最小目录层级
-atime按照文件访问 accesse的时间查找,单位是天
-ctime按照文件的改变 change状态来查找文件,单位是天
-mtime根据文件修改 modify时间查找文件最常用
name按照文件名字查找,支持*?通配符
group按照文件的所属组查找
perm按照文件的权限查找
size ncwbkmg按照文件的大小为n个由后缀決定的数据块。
其中后缀为
b:代表512位元组的区块(如果用户没有指定后缀,则默认为b)
c:表示字节数
k:表示 kilo bytes(1024字节) 字(2字节)
M:兆字节(1048576字节)
G:千兆字节(1073741824字节)
-type查找某一类型的文件b-块设备文件。
d-目录。
c-字符设备文件。
p-管道文件。
1-符号链接文件。
f-普通文件。
s- socket文件
user按照文件属主来查找文件。
-path配合- prune参数排除指定目录
Actions模块
-prune使find命令不在指定的目录寻找
-delete刪除找出的文件
-exec或-ok对匹配的文件执行相应 shell命令
-print将匹配的结果标准输出
OPERATORS
取反
-a -o取交集、并集,作用类似&&和
find / -name "*.c"全局搜索.c结尾的文件
find /opt -name "*.c"在/opt 下寻找 .c 文件
find /opt -maxdepth 1 -name "*.c"在/opt 下一级目录 寻找 .c 文件
touch {1..10}lf.txt创建多个文件
find . -name "[0-9]*"找开头0-9的文件
mkdir {0..10}lf创建连续的文件夹
find . -type f -name "[0-9]*"只找文件
find . -type d -name "[0-9]*"只找文件夹
find . -type d -name "[0-9]*" -delete只找文件夹并删除
find . -type f -name "[0-9]*" -delete只找文件并删除
find . -atime -2查找两天前的访问文件
find -atime 22天时被访问的文件
find -atime +2超过2天内被访问的文件
find . -maxdepth 2 ! -type d取反操作
find . -type f -size +200M超过200M的文件
find . -path "./text" -prune -o -name "*.txt" -print排除./text文件搜寻

xargs命令

xargs又称管道命令, 构造参数等
是给命令传递参数的一个过滤器,也是组合多个命令的一个工具它把一个数据流分割为一些足够小的块,以方 便过滤器和命令进行处理。
简单的说就是把其他命令的给它的数据,传递给它后面的命令作为参数

-d 为输入指定一个定制的分割符,默认分隔符是空格 
-i 用{}代替传递的数据
-I string用 string来代替传递的数据-n[数字]设置每次传递几行数据
-n 选项限制单个命令行的参数个数 
-t 显示执行详情
-p 交互模式
-P n允许的最大线程数量为n
-s [大小] 设置传递参数的最大字节数(小于131072字节)
-x 大于 -s 设置的最大长度结東 xargs命令执行
-0, --null 项用null分隔,而不是空白,禁用引号和反斜杠处理
xargs < lf.txt多行变一行
xargs -n 2 < lf.txt每行最多2个
echo "aasd, dwfam,ffef" | xargs -d ","去,
echo "aasd, dwfam,ffef" | xargs -d "," -n 2去, 每行最多2个
find . -name "*.txt" | xargs -i mv {} alltxt/将当前文件所有的txt移动到alltxt文件
find -name "*.txt" | xargs -I alltxt mv alltxt ../将搜寻到的文件命名为alltxt 并移动到上级目录

tar gzip zip命令

语法:
tar(选项)(参数)

-A或--catenate:新增文件到以存在的备份文件;
-B:设置区块大小
-c或 --create:建立新的备份文件;
-C<目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d:记录文件的差别;
-X或--extract或 --get:从备份文件中还原文件; 
-t或--list:列出备份文件的内容
-z或--gz1ip或 --unzip:通过gzip指令处理备份文件;
-Z或--compress或-- uncompress:通过 compress指令处理备份文件; 
-f<备份文件>或ーーfile=<备份文件>:指定备份文件; 
-v或 --verbose:显示指令执行过程; r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件 
-j:支持bz1p2解压文件; 显示操作过程
-L:文件系统边界设置
-k:保留原有文件不覆盖; 
-m:保留文件不被覆盖
tar -cvf all.tar ./*将当前目录的内容打包到all.tar 其中:v显示过程
tar -xvf ./all.tar ./将当前的all.tar解压
tar -czvf all.tar.gz ./*将当前目录打包并压缩z
tar -xzvf ../all.tar.gz ./解压到当前目录
tar -ztvf all.tar.gz列出压缩文件的内容
tar -zxvf all.tar.gz ./lf.txt解压其中一项
tar -xzvf ../all.tar.gz - C ./qwe解压到指定目录
tar -zxvf ./all.tar.gz --exclude lf.txt解压时排除

gzip 压缩文件夹

zip 压缩 unzip解压缩

正则表达

由一类特殊字符及文本字符所编写的模式,其中有些符不表示其字面意义,而是用于表示控制或通配的功能;

基本正则表达式:BRE

扩展正则表达式:ERE

正则表达式的意义

  • 处理大量的字串

  • 处理文本

通过特殊符号的辅助,可以让inux管理员快速过滤、替換、处理所需要的字符串、文本,让工作高效。

通常 Linux运维工作,都是面临大量带有字符串的内容,如

  • 配置文件
  • 程序代码
  • 命令输出结果
  • 日志文件

且此类字符串内容,我们常会有特定的需要,查找出符合工作需要的特定的字符串,因此正则表达式就出现

  • 正则表达式是一套规则和方法
  • 正则工作时以单位进行,一次处理一行
  • 正则表达式化繁为简,提高工作效率
  • linux仅受三剑客(sed、awk、grep)支持,其他命令无法使用

正则表达式应用非常广泛,应用在如 Python、Java、Perl等, Linux下普通命令无法使用正则表达式的,只能 使用三剑客 。
通配符是大部分普通命令都支持的,用于查找文件或目录,而正则表达式是通过三剑客命令在文件(数据流)中过滤内容的

Linux三剑客

文本处理工具,均支持正则表达式引擎

  • grep:文本过滤工具,(模式: pattern)工具
  • sed: stream editor,流编辑器;文本编辑工具
  • awk: Linux的文本报告生成器(格式化文本), Linux上是gawk

正则表达式的分类

Linux三剑客主要分两类
・基本正则表达式(BRE、 basic regular expression)
BRE对应元字符有^$.[]*
・扩展正则表达式(ERE、 extended regular expression)
ERE在在BRE基础上,増加上(){}?+|等字符

基本正则表达式BRE集合
  • 匹配字符
  • 匹配次数
  • 位置锚定
^尖角号,用于模式的最左侧,如"^ oldboy",匹配以 oldboy单词开头的行
$美元符,用于模式的最右侧,如" oldboys",表示以 oldboy单词结尾的行
^$组合符,表示空行
.匹配任意一个且只有一个字符,不能匹配空行
\转义字符,让特殊含义的字符,现出原形,还原本意,例如.代表小数点
*匹配前一个字符(连续出现)0次或1次以上,重复0次代表空,即匹配所有内容
.*组合符,匹配所有内容
^.*组合符,匹配任意多个字符开头的内容
.*$匹配以任意多个字符结尾的内容
[abc]匹配[]集合内的任意一个字符,a或b或c,可以写[a-c]
[^abc]匹配除了へ后面的任意字符,a或b或c,^表示对abl的取反

扩展正则表达式ERE集合

扩展正则必须用grep -E才能生效

字符作用
+匹配前一个字符1次或多次
[:/]+匹配括号内的":“或者”/"字符1次或多次
?匹配前一个字符0次或1次
\表示或者,同时过滤多个字符串
()分组过滤,被括起来的内容表示一个整体
a{n,m}匹配前一个字符最少n次,最多m次
a{n,}匹配前一个字符最少n次
a{n}匹配前一个字符正好n次
a{,m}匹配前一个字符最多m次

grep

作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行

模式:由正则表达式的元字符及文本字符所编写出的过滤条件;

语法:
grep [options] [pattern] file 
命令     参数    匹配模式  文件数据
						-i: ignorecase,忽略字符的大小写
						-0:仅显示匹配到的字符串本身;
						-v,invert- match:显示不能被模式匹配到的行
						-E:支持使用扩展的正则表达式元字符;
						-q,-- quiet,- silent:静默模式,即不输出任何信息;

grep命令是 Linux系统中最重要的命令之一,功能是从文本文件管道数据流中筛选匹配的行和数据, 如果再配合正则表达式,功能十分强大,是 Linux运维人员必备的命令
grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

参数选项解释说明
-v排除匹配结果
-n显示匹配行与行号
-i不区分大小写
-c只统计匹配的行数
-E使用 egrep命令
--color = auto为grep过潓结果添加颜色
-w只匹配过滤的单词
-o只输出匹配的内容
案例解释
grep "root" pwd.txt -n在文本中找到root所在行 并显示行号
grep "root" pwd.txt -n -i在文本中不区分大小写找到root所在行 并显示行号
grep "root" pwd.txt -c统计匹配结果的行
grep '^$' list.c -n寻找空行
grep '^$' list.c -n -v寻找非空行
grep '^#' list.c -n寻找以#开头的行
grep '^#' list.c -v | grep '^$' -v -n寻找非#开头的和非空的行
grep -n -i ';$' list.c寻找到以;结尾的行
grep '.s' list.c -n寻找带s的行``
grep '[A-Z]' list.c -n寻找大写内容
grep '[A-Z0-9]' list.c -n寻找大写以及数字
grep -E 'int{1,2}' list.c -o匹配前一个int字符最少n次,最多m次

sed

注意sed和awk使用单引号,双引号有特殊解释
sed是 Stream Editor(字符流编辑器)的缩写,简称流编辑器。
sed是操作、过滤和转換文本内容的强大工具。
常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤 指定字符串)、取行(取出指定行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zoPiDRfF-1620385273066)(图/截屏2021-04-11 上午10.58.32.png)]

语法:
		sed [选项] [sed内置命令字符] [输入文件]
选项解释
-n取消默认sed的输出, 常与sed内置命令p一起用
-i直接将修改结果写入文件,不用-i,sed修改的是内存数据
-e多次编辑,不需要管道符了
-r支持正则扩展

sed的 内置命令字符用于对文件进行不同的操作功能, 如对文件增删改查
sed常用内置命令字符:

sed的内置命令字符解释
aappend,对文本追加,在指定行后面添加一行/多行文本
dDelete,删除匹配行
iinsert,表示插入文本,在指定行前添加一行/多行文本
pPrint,打印匹配行的内容,通常p与-n一起用
s/正则/替换内容/g匹配正则内容,然后替換内容(支持正则),结尾g代表全局匹配

sed匹配范围

范围解释
空地址全文处理
单地址指定文件某一行
/pattern/被模式匹配到的每一行
范围区间10,20十到ニ十行,10,+5第10行向下5行,/ pattern1/,/ pattern2/
步长12,表示1、3、5、7、9行,22两个步长,表示2、4、6、8、10、偶数行
示例解释
sed "2,3p" list.c -n打印2,3行
sed "2,+3p" list.c -n打印2向下三行
sed /File/p list.c -n打印与File有关的行
sed /File/d list.c删除有File的行
sed /File/d list.c -i在文件内部删除有File的行
sed '5, $d' list.c -i在文件内部删除第5行的所有内容
sed "s/My/I/g" list.c在全局中将My替换为I
sed "2a My linux is good."在第二行追加My linux is good.
sed -e "s/I/My/g" -e "s/123/345/g" list.c同时修改
sed "4i My linux is good."在第4行之前插入
sed "a -----------" list.c每一行后加入---------------
ifconfig eth0 | sed '2p' -n | sed "s/^.*addr://" | sed "s/Bcast.*$//"掐头去尾

awk文本格式化

更适合编辑、处理匹配到的文本内容

awk语法:
		awk [option] 'pattern [action]' file...
		awk    参数    '条件动作'          文件

Action指的是动作,awk擅长文本格式化,且输出格式化后的结果,因此最常用的动作就是printprintf

我们执行的命令是``awk’{print $2}’,没有使用参数和模式,$2`表示输出文本的第二列信息

avk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符
awk是按行处理文件,一行处理完毕,处理下一行,根据用户指定的分割符去工作,没有指定则默认空格.

指定了分隔符后,awk把每一行切割后的数据对应到內置变量

awk内置变量

内置变量解释
$n指定分隔符后,当前记录的第n个字段
$0完整的输入记录
FS字段分隔符,默认是空格
NF分割后,当前行一共有多少个字段
NR当前记录数,行数
更多内置变量可以man手册查看man awk
案例解释
awk '{print $1,$4,$5} lf.txt'打印多列
awk '{print $1 "\t" $4 "\t" $5} lf.txt'打印多列 制表符对齐
awk '{print "第一列:" $1 ,"第二列:" $2} lf.txt'自定义输出
awk 'NR==5{print $0}' lf.txt打印第五行内容
awk 'NR==5,NR==6{print $0}' lf.txt打印第五六行内容
awk '{print NR $0}' lf.txt打印行号
awk 'NR==5,NR==6{print NR $0}' lf.txt行号 行位
awk '{print $1,$(NF-1)}' lf.txt第一列 倒数第二页

awk分隔符

awk的分隔符有两种

  • 输入分隔符,awk默认是空格,空白字符,英文是 E field separator,变量名是FS

  • 输出分隔符, output field separator,简称OFS

FS输入分隔符

awk逐行处理文本的时候,以输入分割符为准,把文本切成多个片段,默认符号是空格
当我们处理特殊文件,没有空格的时候,可以自由指定分隔符特点

案例解释
awk -F ":" '{print $1}' lf.txt1⃣️
awk -v FS=":" '{print $1}' lf.txt同上
awk -F ":" -v OFS="===" '{print $1,$NF} lf.txt'修改默认
awk -F ":" -v OFS="\t" '{print $1,$NF} lf.txt'

awk变量

awk参数

参数解释
-F指定分割字段符
-v定义或修改一个awk内部的变量
-f从脚本文件中读取awk命令

对于awk而言,变量分为

  • 内置变量
  • 自定义变量
内置变量解释
FS输入字段分隔符,默认为空白字符
OFS输出字段分隔符,默认为空白字符
RS输入记录分隔符(输入换行符),指定输入时的换行符
ORS输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NFNF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR行号,当前处理的文本行的行号。
FNR各文件分别计数的行号
FILENAME当前文件名
ARGC命令行参数的个数
ARGV数组,保存的是命令行所给定的各参数

awk格式化

前面我们接触到的awk的输出功能,是{ print}的功能,只能对文本简单的输出,并不能美化或者修改格式

printf格式化输出. 能够对文本格式化输出 同C的用法一样

awk模式 pattern

awk是按行处理文本,刚才讲解了 print动作,现在讲解特殊的 pattern: BEGIN和END

  • BEGINA模式是处理丈本之前需要执行的操作
  • END模式是处理完所有行之后执行的操作

awk 'NR<4{print $0}' lf.txt 满足条件打印

pattern有关系运算符

小结

  • 空模式,没有指定任何的模式(条件),因此每一行都执行了对应的动作,空模式会匹配文档的每 行,每一行都满足了(空模式)
  • 关系运算符模式,awk默认执行打印输出动作
  • BEGIN/END模式(条件设置)


练习

案例实现
找出有关root的行grep "root" /etc/passwd
找出有关root的行 以root开头grep "^root" /etc/passwd
匹配以root开头的行 或者以liufeng开头的行grep -E "^(root|liufeng)" /etc/passwd
过滤出bin开头的行 并显示行号grep "^bin" /etc/passwd -n
过滤出除了root的行grep "^root" -v /etc/passwd
统计liufeng用户出现的次数grep "liufeng" -c /etc/passwd
显示不以/bin/bash结尾的行grep -v "/bin/bash$" /etc/passwd
找出文件中的两位数或三位数grep -E "\<[0-9]{2,3}\>" /etc/passwd
找出文件中所有函数名grep -E "[a-zA-Z]+\(\)" /etc/init.d/functions
案例实现
将root替换为liufengsed 's/root/liufeng/' passwd
将全部的root替换为liufengsed 's/root/liufeng/g' passwd
仅仅打印替换的内容sed 's/root/liufeng/gp' passwd -n
将前10行b开头的打印sed -n '1,10p' passwd
删除4行后面所有行sed '5,$d' passwd
删除root到ftp的行sed '/^root/,/^ftp/d' passwd
删除注释行和空白行sed -e '/^#/d' -e '/^$/d' liufeng.txt
给文件的前三行添加@ 符号sed -r '1,3s/(^.)/@\1/' liufeng.txt
取出ip地址ifconfig eth0 | sed '2p' -n | sed 's/^.*addr://' | sed 's/Bcast.*//'
示例实现
打印普通用户和家目录awk -F ':' '$3>=1000{print $1 , $(NF-1)}' /etc/passwd
前5行添加#号awk 'NR<6{print "#" $0}' /etc/passwd
``
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值