1、显示/etc/passwd 文件中以bash结尾的行。
cat /etc/passwd | grepbash$
2、显示/etc/passwd文件中的两们或三位数(例如:99,100)
grep -n '\b[[:digit:]]\{2,3\}\b' /etc/passwd
3、查看硬盘的使用情况
df -hl
4、查看cpu的使用使用情况
ps aux
5、查看access.log中访问量最多的ip.
awk '{print $1}' access.log | uniq -c | sort -k 1 -n -r | head -n 1
6、要开机启动a.sh脚本时
vim /etc/rc.local
a.sh
7、TCP/IP
netstat -nap | grep SYN_RECV
8、新加环境变量
#export PATH=/usr/local/abc/bin/xyz
9、写一个脚本3天前修改过的带有“.log”的文件并册除。
#find / -name "*.log" -mtime +3 -exec rm -rf {} \;
10、判断一个文件/test是否在,如果不在请新建文件。
vim abc.sh
#!/bin/bash
if [ ! -f "/test" ];then
mkdir /test
fi
grep 学习
1、显示所有包含San的行
#grep 'San' datafile
2、显示所有以J开始的人名所在的行
#grep '^J' datafile
3、显示所有不包括834的行,就是过滤掉它
#grep -v "834" datafile
4、显示所有生日在December的行
#grep -n --color '\:12\/' datefile
5、找出电话是0140结束
#grep --color -n '\-0140\:' datafile
sed命令大练习
1、修改一个文件中有jim的全部写成大写
#sed -e 's/^jim/JIM/' datafile
2、删除头三行
#sed -n '1,3d' datafile
3、显示以vinhv开头并且打印出电话
#awk -F ":" '/^vinhv/{print $2}' datafile
4、显示以vinhv开头的并且打印了姓名,电话,街道
#awk -F ":" '/^vinhv/{print $1,$4}'
5、显示以D开头的姓名,并打印出收入
#awk -F ":" '/^D/{print $1,$5}' datafile
6、打印出姓名以F、K开头的姓名,列印出姓名
#awk -F ":" '/^[Fk]/{print $1}' datafile
7、打印出姓名是4个字符的人名
awk -F ":" '{print $1}' datefile | awk '(length($1)==4){print $1}'
8、用awk 来统计438的区号
#awk -F ":" '{print $2}' datefile | awk -F ":" '/^438/{print $1}'
9、grep 学习基础
grep [option] patter
grep -n --color 'oo*' a.txt
grep --color '^root' a.txt 以行首
grep --color '\<root' a.txt 有词root的行。
grep --color 'bash$' a.txt 以bash结尾
grep --color 'l..a' a.txt 中间任意
grep --color '^[arb]' a.txt
grep -v '^#' a.txt
10、sed 学习
sed -n '1,2p' a.txt
sed -n '1,2d' a.txt
sed -n 's/[a-z]o/[a-z]md/s' a.txt
sed -n '1,3p' a.txt > d.txt
sed -n '1,3d' a.txt >e.txt
sed -e '^$' a.txt
sed -e '/^g[a-z]*/d' a.txt
sed -e 's/ab/m/' a.txt
sed -e '1,20s/^#/^$/' a.txt
sed -e '/gad/d' a.txt
sed -e '/gad/!d' a.txt 删除所有非gad开头的行
sed -e 's/..//' a.txt
sed -e 's/....$//' a.txt 删除每行的后四个字符
sed -e '/gdm/w e.sh' a.txt 将有gdm的行写入e.sh
10、awk的基本用法,awk三个人名组合,报告工具。nawk
gawk linux上的使用。
which awk
ls -l /bin/awk
awk [OPTION] 'program' FILE1 FILE2…
program:PATTERN{ACTION STATEMENT} //program由语句组成,各语句之间使用;隔开,整个program要用单引号引起来
awk [options] 'program' file1 file2
program:正则表达
关系式
OPTION:选项
awk 常见模式
1、正则表达
2、expression ~匹配,!~不匹配
3、range:格式为part1,part2
4、BEGIN\END;特殊模式后边不要加文件。
5、EMPTY:匹配任意输入行
OFS指输出定位
awk 内置变量有:
RS:输入文本信息使用的抽换符
NR:指同时处理两个文件时,从绝对数据算起,如第一个文件是1行,第二个文件是两行,那行NF就是3行。
awk:支持自义变量。
awk -v test="hello,world" 'BEGIN{print test}'
FNR:是两个文件各算各的,统计不会合在一起。
awk -F: '{print $1,$2}' /etc/passwd
awk -v 指定变量
awk -v test="hello,world" '{print test}'
awk 'BEGIN{test="hello,world";print test}'
awk '{print $0}'
awk 'BEGIN{OFS="#"}{print $1,$2}'
awk 'BEGIN{OFS="#"}{print $1,"abc",$2}'
awk '{print NF}' a.txt
awk '{printf "%-10s,%-10s\n",$1,$3}' a.txt 向右偏移10个字符
awk 的基本运算
awk -F: '/^roo./{print $1,$4}' 打印以roo开头的第1,4项。
找出所有shell中不属于bash的用户
awk -F: '$7~bash"$"{print $1,$7}' /etc/passwd
awk -F: '/^r/,/^m/{print $1,$7}' /etc/passwd
awk -F: 'BEGIN{print "user"."id","shell"}{printf "%-10s%-10s%-20s",$1,$3,$7}' /etc/passwd
常见action
条件判断
awk -F: '{if ($1=="root")printf "%-20s\n",$1 " is admin";else printf "%-20s\n",$1 " is common"}' /etc/passwd
awk -F: -v sum=0 '{if($3>=400) sum++}END{print sum}' /etc/passwd
while循环
awk -F: '{i=1;while (i<=NF){if ($i>=4 i++)print $i }}' /etc/passwd
for循环
awk -F: '{for(i=1;i<=NF;i++){if(length($i)>=4) print $i }}' /etc/passwd
case语句
printf format取值,不会换行。
%c ASCCI
数组
数组可以不是数字;
数组是从1开始的;
netstat -nat | awk '/^tcp/{state[$NF]++}END{for (A in state){print A,state[A]}}'
查看nginx访问web最多的IP
awk '{count[$1]++}END{for(c in count){print c,count[c]}}' /var/log/httpd/access_log | sort -k2 -nr
awk '{count[$1]++}END{for(c in count){printf "%-20s %-20s\n", c,count[c]}}' /var/log/httpd/access_log | sort -k2 -nr
条件判断
selector?if-true-exp:if-false-exp(如果真取前,如果假取后)
练习:
1、获取网址eth1的信息
ifconfig eth1 | sed -n '2p'|awk -F: '{print $2,$4}'|awk -F " " '{print $1,$3}'
2、写一个脚本,检测cups是否在运行。
#!/bin/bash
if ( service cups status );then
echo "cups service is running";
else
echo "service is not running";
fi