Linux下日常用到的一些命令

Quick Start

命令帮助

1
2
man 命令
命令 --help

查看大文件

1
find / -type f -size +1G -print0 | xargs -0 du -h | sort -nr                           #查找所有大于1G的文件,显示大小并排序

批量修改文件后缀名

1
find ./ -name "*.log" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.log ./{}.txt      #将当前目录的所有log文件修改为txt文件

找出两个目录相同的值并删除,可用awk,grep,comm命令实现

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
ls /lyl/openstack1 > tmp1.txt
ls /lyl/openstack2 > tmp2.txt
awk 'NR==FNR{a[$0]}NR>FNR{if($1 in a) print $0}' tmp1.txt tmp2.txt > tmp3.txt #找出两个目录相同的值
awk 'NR==FNR{a[$0]}NR>FNR{if(!($1 in a)) print $0}' tmp1.txt tmp2.txt > tmp4.txt #找出两个目录不同的值
cat tmp3.txt | while read line
do
echo $line
rm -rf /lyl/openstack2/$line
done
rm -rf tmp*.txt

查看大文件的内容

1
tail -n 100 test.log           #查看日志倒数100行的内容,文件较大是可用此命令

查看配置文件未被注释内容

1
2
3
cat /etc/cinder/cinder.conf|grep -v "^#"|grep -v "^$"
sed '/^#/d' cinder.conf
sed -i 's/^/#/' cinder.conf #注释文件所有内容

编辑文件

1
vim 文件名 +100                #打开文件并来到第100行

touch命令

1
touch 文件名                   #创建新的空文件

查看java运行的实例

1
jps

pwdx,查看程序执行路径

1
pwdx $pid

解压一个war包,例如Hudson.war

1
jar -xvf Hudson.war  #解压Hudson.war到当前目录

将一个文件夹下的所有内容添加到压缩文件

1
zip -r 文件名.zip ./*

解压zip文件到当前目录

1
unzip 文件名.zip

安装rpm包,可以用rpm或者yum

1
2
rpm -ivh rpm包    
yum install rpm包

卸载rpm包

1
2
rpm --nodeps -e rpm包
yum -y remove rpm包

nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端

1
2
nohup 命令 &                   #缺省重定向输出到nohup.out
nohup 命令 > 文件.log 2>&1 & #指定输出到文件

网卡流量相关

1
2
cat /proc/net/dev #查看网卡流量
grep ens32 /proc/net/dev |awk '{print $1}' #得出网卡ens32的第1个参数数值

apache对web进行压力测试ab

1
./ab -n1000 -c100 http://192.168.229.71/mycluster/testCluster.jsp  #n为请求数,c为并发数

arpd命令是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。

1
2
arpd -b /var/tmp/arpd.db       #指定数据库文件,启动arpd进程
arpd -l -b /var/tmp/arpd.db #查看结果

nstat命令和rtacct命令是一个简单的监视内核的SNMP计数器和网络接口状态的实用工具。

1
2
nstat
rtacct

suse查看版本

1
2
3
4
lsb_release -a         #查看系统版本
cat /etc/SUSE-release #查看系统版本
uname -a #查看系统信息
uname -r #查看内核版本

suse 11防火墙相关

1
2
3
SuSEfirewall2 status       #查看防火墙状态
SuSEfirewall2 satrt #开启防火墙
SuSEfirewall2 stop #关闭防火墙

ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

1
2
3
4
5
ss -t -a  #显示tcp连接
ss -u -a #显示udp连接
ss -s #显示 Sockets 摘要
ss -l #列出所有打开的网络连接端口
ss -pl #查看进程使用的socket

ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。

1
2
3
ip -s link list     #显示更加详细的网络设备运行状态
ip route list #显示核心路由表
ip neigh list #显示邻居表

dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。

1
dig www.baidu.com   #例如查询百度

ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。

1
2
ssh root@192.168.229.70               #以root用户登录服务器
ssh root@192.168.229.70 df -h #以root用户远程执行命令df -h

traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。

1
traceroute www.baidu.com     #追踪本地到百度服务器的路由

tracepath命令用来追踪并显示报文到达目的主机所经过的路由信息,与traceroute类似。

1
tracepath www.baidu.com      #追踪本地到百度服务器的路由

route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由

1
route -n          #查看当前路由

More info: route

nslookup命令是常用域名查询工具,就是查DNS信息用的命令。

1
nslookup www.baidu.com

arping命令是用于发送arp请求到一个相邻主机的工具

1
arping www.baidu.com

arp命令用于操作主机的arp缓冲区,它可以显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。

1
arp -v       #查询arp缓冲区中指定主机的arp条目

ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。

More info: ifconfig

ifdown命令用于禁用指定的网络接口。

1
ifdown eth0        #禁用eth0

split命令可以将一个大文件切割成很多个小文件,有时需要将文件切割成更小的片段,比如为提高可读性,生成日志等。

1
2
3
4
5
6
7
8
9
选项
-b:指定大小切割。
-C:与-b参数类似,但切割时尽量维持每行的完整性。
-d:使用数字作为后缀。
-l:以行数数大小切割。
split -b 100M test.log #分割test.log文件,每100M为一个文件,默认文件名为xaa,xab.....
split -C 100M test.log #分割test.log文件,每100M为一个文件,默认文件名为xaa,xab.....
split -d -C 100M test.log test.log #分割test.log文件,每100M为一个文件,文件名为test.log1,testlog2.......
split -d -l 100000 test.log test.log #分割test.log文件,每100000行为一个文件,文件名为test.log1,testlog2.......

tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。

More info: tcpdump

ethtool命令用于获取以太网卡的配置信息,或者修改这些配置。这个命令比较复杂,功能特别多。

More info: ethtool

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

More info: iptables

netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

More info: netstat

ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。

More info: ssh-keygen

curl命令是一个利用URL规则在命令行下工作的文件传输工具。

More info: curl

mail命令是命令行的电子邮件发送和接收工具。操作的界面不像elm或pine那么容易使用,但功能非常完整。

More info: mail

lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。

1
2
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more   #查看所有进程打开的文件句柄数量,第一列为句柄数量(从大到小排列),第二列为进程号
lsof -p $pid | wc -l #查看进程打开的文件数

More info: lsof

wc -l命令可用于统计命令输出的行数

1
db2 list applications|wc -l          #输出数据库应用的连接数

uniq用于报告或忽略文件中的重复行,一般与sort命令结合使用。

1
uniq test.txt         #删除相邻重复出现的行

More info: uniq

sort用于排序

1
2
3
4
5
6
7
8
9
sort -k1 test.txt       #指定第一列排序
sort test.txt #排序,让文件重复的行相邻
sort test.txt | uniq #排序去重
sort -u test.txt #排序去重
sort test.txt | uniq -c #排序去重,统计重复次数
awk -F / '{print $3}' test.txt|sort|uniq -c #网址文件,查找重复出现的域名
cut -d / -f3 test.txt|sort|uniq -c
awk -F / '{print $3}' test.txt|sort -r|uniq -c #网址文件,查找重复出现的域名,倒序
cut -d / -f3 test.txt|sort -r|uniq -c

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
awk 'BEGIN{ commands } pattern{ commands } END{ commands }'   #awk工作原理,BEGIN,pattern,END可省略
echo -e "A line 1\nA line 2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" }'
#输出为:
Start
A line 1
A line 2
End

echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }' #输出为:v1 v2 v3
echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1"="var2"="var3; }' #输出为:v1=v2=v3
echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3} #NF表示字段数,在执行过程中对应于当前的字段数;NR 表示记录数,在执行过程中对应于当前的行号
#输出为:
Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

awk '{print $1}' 文件名 #输出文件每一行的第一个字段
awk '{print $1,$2}' 文件名 #输出文件每一行的第一个和第二个字段
awk 'END{ print NR }' 文件名 #统计文件的行数
echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}' #使用print $NF可以打印出一行中的最后一个字段,使用$(NF-1)则是打印倒数第二个字段,其他以此类推;两行输出分别为f3和f5
echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}' #两行输出分别为f2和f4
seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'
#seq 5为取数1-5,输出为:
总和:
1+
2+
3+
4+
5+
等于
15

VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }' #借助-v选项,可以将外部值(并非来自stdin)传递给awk,输出为10000
var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2 #另一种传递外部变量方法,输出为aaa bbb
awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}' #逻辑判断,输出为0 1,即一假一真
awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}' #判断是否a匹配正则表达式,匹配输出ok,否则没有输出,输出为ok;~和~!分别为匹配和不匹配正则表达式
awk 'BEGIN{a=11;if(a >= 9){print "ok";}}' #判断a是否大于等于9,输出为ok
awk 'BEGIN{a="b";print a=="b"?"ok":"err";}' #?:为C条件表达式,判断a是否等于b,等于输出ok,否则输出err
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}' #in表示数组中是否存在某键值,返回值为0,假
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}' #返回值为1,真
cat test.txt #每一行的内容分别为a,b,c,d,e
awk 'NR%2==1{next}{print NR,$0;}' test.txt #两行的输出分别为2 b,4 d
cat test.txt
内容为:
web01[192.168.2.100]
httpd ok
tomcat ok
sendmail ok
web02[192.168.2.101]
httpd ok
postfix ok
web03[192.168.2.102]
mysqld ok
httpd ok
脚本:
awk '/^web/{T=$0;next;}{print T":"$0;}' test.txt
输出为:
web01[192.168.2.100]: httpd ok
web01[192.168.2.100]: tomcat ok
web01[192.168.2.100]: sendmail ok
web02[192.168.2.101]: httpd ok
web02[192.168.2.101]: postfix ok
web03[192.168.2.102]: mysqld ok
web03[192.168.2.102]: httpd ok

echo | awk '{printf("hello word!n") > "datafile"}' #将结果输出到一个文件
awk -F: '{ print $NF }' /etc/passwd #将/etc/passwd中每一行的最后一个字段输出
awk 'BEGIN{ FS=":" } { print $NF }' /etc/passwd
awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}' #length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度,4 4
awk 'BEGIN{info="it is a test";split(info,tA," ");print asort(tA);}' #asort对数组进行排序,返回数组长度。4
awk 'BEGIN{info="it is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}' #输出数组内容(无序)
awk 'BEGIN{info="it is a test";tlen=split(info,tA," ");for(k=1;k<=tlen;k++){print k,tA[k];}}' #输出数组内容(有序)
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";if( "c" in tB){print "ok";};for(k in tB){print k,tB[k];}}' #判断键值是否存在
awk 'BEGIN{tB["a"]="a1";tB["b"]="b1";delete tB["a"];for(k in tB){print k,tB[k];}}' #删除键值
awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' #OFMT设置输出数据格式是保留3位小数。sin取正弦,exp取幂,log取自然对数,int取整数
awk 'BEGIN{srand();fr=int(100*rand());print fr;}' #获得随机数,rand返回0-1中的任意值
awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' #在 info中查找满足正则表达式,/[0-9]+/ 用””替换,并且替换后的值,赋值给info
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}' #在info中查找test,找到返回ok,否则返回no found
awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' #从第4个字符开始,截取10个长度字符串
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' #以close方法打开外部文件
awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' #以getline方法逐行读取外部文件
awk 'BEGIN{b=system("df -h");print b;}' #以system方法调用外部应用程序,b是返回值,返回执行结果
awk 'BEGIN{a=systime();print strftime("%c",a);}' #获取系统当前的时间
awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}' #建立指定时间
ps -ef|grep -v grep|grep java|awk '{print $2}'|xargs kill -9 #杀掉所有java进程
awk '{print $1}' access.log |sort|uniq -c|sort -rn|head -10 #Nginx日志访问IP统计
awk '{S[$1]++}END{for(k in S) print S[k],k}' access.log|sort -rn |head -10 #Nginx日志访问IP统计
awk '/^tcp/ {S[$NF]++}END{for(k in S) print S[k],k}' netstat.log |sort -nr|head #tcp网络连接状态排序
awk '/^tcp/ {print $NF}' netstat.log|sort|uniq -c|sort -nr|head #tcp网络连接状态排序
awk '{print $7"\t" $10}' access_log|awk '{S[$1]+=$2;S1[$1]+=1}END{for(i in S) print S[i],S1[i],i}'|sort -rn|head -10 #流量暴涨时查看文件总访问大小(前10),访问次数,路径
awk '{array_num[$7]++;array_size[$7]+=$10}END{for(x in array_num){print array_size[x],array_num[x],x}}' access_20190102.log |sort -rn -k1|head -10 #流量暴涨时查看文件总访问大小(前10),访问次数,路径

More info: awk

ln命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用”-s”选项。

1
2
3
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c #将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/liu下的文件a2.c,在执行ln命令之前,目录/usr/liu中不存在a2.c文件。执行ln之后,在/usr/liu目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化。
ln -s /usr/mengqc/mub1 /usr/liu/abc #在目录/usr/liu下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1,执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/liu/abc的文件中。

More info: ln

dd命令用于复制文件并对原文件的内容进行转换和格式化处理。

1
dd if=/dev/zero of=sun.txt bs=1M count=1          #if和of分别代表输入和输出文件,如不指定,默认为从stdin中读取输入,将stdout作为默认输出,bs 代表字节为单位的块大小,count代表被复制的块数。

stat命令用于显示文件的状态信息,stat命令的输出信息比ls命令的输出信息要更详细。

1
stat -c %s test.txt            #查看文件的大小

More info: stat

uptime命令能够打印系统总共运行了多长时间和系统的平均负载。

1
2
uptime -V    #显示uptime命令版本信息
uptime #信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

time命令用于统计给定命令所花费的总时间。

1
time 命令    #输出的信息分别显示了该命令所花费的real时间、user时间和sys时间

at命令用于在指定时间执行命令(进入at命令行后,按ctrl+d可保存)。

More info: at

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似。

1
2
3
4
5
6
crontab -e            #编辑该用户的计时器任务
编辑的内容示例:
SHELL=/bin/bash
*/10 19-21 * * * /usr/local/workspace/jiance.sh >> /usr/local/workspace/jiance.txt
# 从晚上7点到9点每隔10分钟执行一次,并将执行结果写到文本文件
crontab -l #查看该用户的计时器任务

More info: crontab URL

ulimit命令用来限制系统用户对shell资源的访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ulimit -a 
输出如下所示:
core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
data seg size (kbytes, -d) unlimited #进程的数据段可以任意大。
scheduling priority (-e) 0
file size (blocks, -f) unlimited #文件可以任意大。
pending signals (-i) 98304 #最多有98304个待处理的信号。
max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB。
max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值。
open files (-n) 1024 #一个任务最多可以同时打开1024的文件。
pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节。
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节。
real-time priority (-r) 0
stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节。
cpu time (seconds, -t) unlimited #进程使用的CPU时间。
max user processes (-u) 98304 #当前用户同时打开的进程(包括线程)的最大个数为98304。
virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
file locks (-x) unlimited #所能锁住的文件的最大个数没有限制。

More info: ulimit

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响,全称为 stream editor可用于增删改查及过滤 取行。

参数:
-i #直接编辑文件
-r #匹配正则表达式

-n #取消默认输出

-e #允许多项编辑

i #插入
a #增加
s #替换
d #删除

p #输出匹配内容

g #全局匹配

r #从文件中读行

正则,三剑客grep,sed,awk都支持:

^w表示以w开头

w$表示以w结尾

.表示任意一个字符

*表示重复零个或多个的前一个重复字符

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
sed -nsed -i 's/hello/HELLO/' datafile                        #在文件datafile上将每一行的第一个hello替换为HELLO   
sed -i 's#hello#HELLO#' datafile
sed -i 's/hello/HELLO/g' datafile #在文件datafile上将每一行的所有hello替换为HELLO
sed -i 's#hello#HELLO#g' datafile

#以下操作都在内存中处理,标准化输出到窗口,不会更改原文件
sed '2i dandan' test.txt #在第二行前面加入dandan
sed '2a lyl' test.txt #在第二行后面加入lyl
sed '2i nishizhen\n107 banban' test.txt #加入两行
sed 'd' test.txt #删除文件所有内容
sed '1,+2d' test.txt #删除文件前3行
sed '1,3d' test.txt #删除文件前3行
sed '3d' test.txt #删除文件第三行
sed '1~2d' test.txt #删除文件奇数行,1行开始,每隔两行删除
sed '2~2d' test.txt #删除文件偶数行,2行开始,每隔两行删除
sed '/lyl/,/subhy/d' test.txt #对匹配到从lyl到subhy的行进行删除
sed '/lyl/d' test.txt #删除包含lyl的行
sed '/lyl/,10d' test.txt #删除从lyl开始的10行
sed '/lyl/,$d' test.txt #删除从lyl开始的所有行
sed '/lyl/,+1d' test.txt #删除lyl和后面的一行
sed '1,/subcan/d' test.txt #删除第一行到subcan的行

sed '2c liyunliang' test.txt #替换第二行的内容
sed '2,3c lyl\ntest' test.txt #替换2,3行的内容
sed 's/hello/HELLO/' test.txt #替换每一行的第一个字符hello
sed 's#hello#HELLO#' test.txt
sed '4s#a#A#' test.txt #精确替换,将第四行的第一个a替换为A
sed '4s#a#A#2g' test.txt #从第4行的发现的第2个开始,替换a为A
x=a
y=b
sed "s#$x#$y#" test.txt #变量替换
sed s#$x#$y# test.txt
sed 's#'$x'#'$y'#' test.txt
eval sed 's#$x#$y#' a.txt

#分组替换
echo My name is lyl,I am a boy.|sed 's#.*is \(.*\),I.*#\1#g' #替换为lyl
echo My name is lyl,I am a boy.|sed 's#^.*is \([a-z].*\),I.*#\1#g' #替换为lyl
echo My name is lyl,I am a boy.|sed -r 's#^.*is ([a-z].*),I.*#\1#g' #替换为lyl
echo My name is lyl,I am a boy.|sed -r 's#(.*) (.*),I.*#\2#g' #替换为lyl
sed -r '1,3s#(.*)#--&--#g' test.txt #&表示替换的内容

批量替换文件名
for i in {1..5};do touch test_${i}_find.jpg;done
ls *.jpg|sed -r 's#(.*)_find.*#mv & \1.jpg#g'|bash #|后加bash,表示执行输出
#开机启动项优化,关闭除了这五个的启动项
chkconfig --list|grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}'|sed -r 's#(.*)#chkconfig \1 off#g'|bash
chkconfig --list|grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}'|sed -r 's#(.*)#chkconfig \1 off#eg' #e表示执行sed模式空间里的内容

查询匹配到的内容并输出
sed -n 'p' test.txt #查询全部内容,取消默认输出
sed -n '2p' test.txt
sed -n '2,3p' test.txt
sed -n '1~2p' test.txt
sed -n '2~2p' test.txt
sed -n '/lyl/p' test.txt
sed -n '/subhy/,/lyl/p' test.txt
sed -n '/subhy,4p' test.txt
sed -n '1,/lyl/p' test.txt

sed 'w output.txt' test.txt #文件另存为output.txt
sed 's#l#Y#g w output.txt' test.txt
sed '1s#l#Y#g w output.txt' test.txt
sed '1s#l#Y#2g w output.txt' test.txt #将第1行从发现的第2个开始将l替换为Y,并另存为output.txt
sed '1s#l#Y#2g;w output.txt' test.txt #;将命令隔开
sed '1s#l#Y#2g#w output.txt' test.txt #只将替换后那一行的内容另存到文件
sed 's#lyl#NB#ig' test.txt #i,表示忽略大小写
sed 's#^#ls -lh #e' test.txt #e表示执行shell命令。在每一行的开头加上ls -lh,并执行命令
echo 101,LYL,nb | sed -r 's#(.*),(.*),(.*)#\L\2,\E\1,\U\3#g' #输出为lyl,101,NB;\L,表示变为小写,\E表示关闭功能,不会改变原来的值,\U表示变为大写
sed '=' test.txt|sed 'N;s#\n# #' #统计行数

sed '3,$d' test.txt|sed 's#10#01#g' #删除第2行以后的内容,并把10替换为01
sed -e '3,$d' -e 's#10#01#g' test.txt
sed -e '3,$d;s#10#01#g' test.txt #一般用这种命令
sed '3,$d;s#10#01#g' test.txt
sed -f test.sed test.txt #test.sed第1行内容为3,$d,第2行内容为s#10#01#g
sed -n '2,4{p;=}' test.txt #特殊符号{}
sed '$r temp.txt' test.txt #合并文件

模式空间:
n 清空当前模式空间,然后读入下一行
sed -n 'n;p' test.txt #只输出偶数行,奇数行遇到n,被清空
sed -n 'n;p' test.txt #只输出奇数行,偶数行遇到n,被清空
N 不清空当前模式空间,然后读入下一行,以\n分隔两行
sed 'N;s#\n#=#' test.txt
保持空间:

sed -n '3!p' test.txt #过滤,非第3行
sed -n '/lyl/!p' test.txt #过滤
sed -n '$=' test.txt #行统计,等同于wc -l < test.txt

More info: sed

grep 即全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

More info: grep

tr命令可以对来自标准输入的字符进行替换、压缩和删除。

More info:tr

history 用于显示指定数目的指令命令

1
2
3
4
5
history -c           #清空当前历史命令

history 100 #查看最近的100条命令

!100 #显示第100条命令并执行

修改历史命令最大保存数目

历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制
1丶修改/etc/profile里HISTSIZE的值为想要保存的条数,保存后source /etc/profile即可生效
2丶如不生效,可重启

More: history

推荐文章