按照时间生成文件‘2019.09.08.log' 将每天磁盘使用装填写入到对应日期的文件
df -h > $(date +%F)_log
统计Nginx日志中每个IP的访问量有多少,日志如下:
awk '{ips[$i]+=$11} END {for (i in ips) print i,ips[i]/1024/1024}' log.txt
计算Linux系统所有进程占用内存大小的和
# ps aux 第六列
pa aux|awk '{print $6}'|grep -v "RSS"
#!/usr/bin/bash
num=$(ps aux|awk '{print $6}'|grep -v "RSS")
sum=0
for i in $num
do
sum=$(($sum+$i))
done
echo "总值为$(( $sum/1024 )) M"
将文件.txt 改名为 txt.bak, 打包bak文件为123.tar.gz , 然后批量还原文件名字,删除bak
#!/usr/bin/bash
files=$(find /backup -type f -name "*.txt")
for file in $files
do
mv $file ${file}.bak
done
echo "改名成功"
# 打包
tar czf /backup/123.tar.gz $(find -type f -name "*.bak")
echo "压缩成功"
bakfiles=$(find -type f -name "*.bak")
for bak in $bakfiles
do
mv $bak ${bak%.*}
done
echo "还原成功"
把一个文本文档中前五行中白喊字母的行删除掉,同时把6到10行中的全部字母删除掉
sed -i "s#[a-Z]##g" aa.txt
linux 系统中是否有自定义用户,一共几个?
1. 查看/etc/passwd
2. 提取UID 和 /bin/bash
3. 判断UID 大于1000, 并且shell 为/bin/bash
#!/usr/bin/bash
i=0
while read line
do
user_uid=$(echo $line|awk -F ":" '{print $3}')
user_shell=$(echo $line|awk -F ":" '{print $NF}')
if [ $user_uid -ge 1000 -a $user_shell == "/bin/bash" ];then
let i++
fi
echo $user_uid, $user_shell
done
按单词出行频率降序排序
ss=the solid project procides a number of resources toassist users design,implement and supor squid installations. Please browsethe documentations and support sections for more infomation
方法一
# 按单词降序排序
$ss | sed 's#[.,]# #g'|xargs -n1|sort|uniq -c|sort -nr
# 按字母降序排序
$ss|sed 's#[.,]# #g'|grep -o '[a-Z]'|sort|uniq -c|sort -nr
方法二 awk
$ss|sed 's#[.,]# #g'|xargs -n1|awk '{code[$1]++} END {for (i in code) print code[i],j}'|sort -nr
$ss|grep -o '[a-Z]'|awk '{code[$1]++} END {for (i in code) print code[i],i}'|sort -nr
判断10.0.0.0/24 网络里,当前在线用户的IP 有哪些
#!/usr/bin/bash
for i in {1..254}
do
# 使用并发的方式
{
ip=10.0.0.$i
ping -W1 -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is ok" >>ip.txt
fi
} &
done
wait && cat ip.txt
正则表达式
# 特定字符
[[:space:]] 空格
[[:digit:]] [0-9]
[[:lower:]] [a-z]
[[:upper:]] [A-Z]
[[:alpha:]] [a-Z]
# 使用grep 取IP地址
ifconfig|grep 'inet'|egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
# 使用grep 取出 http1.0 http1.1
head -2 aa.log|grep -o 'HTTP/(1|2)\.(1|0)'|sort|uniq -c
# grep -v 排除
grep -vn '^$' 过滤空行
# 使用grep 排除配置文件中的空行和#开头的行
grep "^$" /etc/nginx/nginx.conf
egrep -v "(^$|^#|.*#)" /etc/nginx/nginx.conf
# 使用grep筛选出所有开启过的内容(所有都以字母开头)
egrep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
sed 文本处理
sed是一个流搬机器,非交互式的编辑器,一次处理一行内容。把当前处理的行存储在临时缓冲区中,用sed命令处理缓冲区中的内容,处理完后,送往拼命。
# sed支持增,删,改
# sed 命令格式 sed [option] 'command' files
# 选项参数
-e 允许多项编辑
-n 取消默认的输出
-i 直接修改对应文件
-r 支持扩展元字符
# sed 命令参数
a 在当前行后添加一行或多行
c 在当前行进行替换修改
d 在当前行进行删除
i 在当前行之前插入文本
p 打印匹配的行或指定行
n 读入下一输入行,从下一条命令进行处理 ! 对所选行以外的所有行应用命令
1. sed 的打印命令 p
sed -n '2p' passwd # 打印第二行
sed -n '$p' passwd # 打印最后一行
2. 追加命令 a
# 在37行添加一条记录, \t tab需要转义
sed -ri '37a \\t listen 8080;' nginx.conf
# vim nginx.conf +37 光标直接跳到37行
3. sed修改的命令
# 指定某行内容进行替换
sed -i '7c selinxu=disabled' /etc/selinux/config # 第七行全部替换
# 正则匹配内容进行替换
sed -i '/^selinux=/c selinux=disable' /etc/selinux/config
# 非交互式修改指定的配置文件
sed -ri '/userdns/c Userdnd no' /etc/ssh/sshd_config
4. sed 的删除命令 d
sed '3d' passwd
sed '3{d}' passwd
sed '3,$d' passwd
sed '$d' passwd
sed /mail/d passwd # 正则匹配删除
4. sed 获取下一行命令 n
sed '/root/{n;d}' passwd # 匹配root行,找到下一行进行删除
5. 方向选择命令
sed -r '3!d' /etc/hosts #除了第三行都删除
sed 匹配替换
s 替换命令标志 g行内全局替换 i忽略替换大小写
# 替换每行中出现的一个root
sed 's/root/alice/' passwd
# 替换以root 开头的行
sed 's/^root/alice/' passwd
# 查找匹配的行,添加内容
sed -r 's/[0-9][0-9]$/& .5/' passwd
# 匹配包含root行进行替换
sed -r 's/root/alice/g' passwd
# 匹配包含root的行进行替换,忽略大小写
sed -r 's/root/alice/gi' passwd
# 后向引用, Roo替换成Roo-alice
sed -r 's#(Roo)#\1-alice#g' passwd
# sed 提取ip
ifconfig eth0|sed -rn '2s#(^.*inet) (.*) (net.*$)#\2 #gp'
# 替换建议使用# , 不需要转义
sed 's#/ect/test/123#/dev/null#g' 1.txt
# 删除所有字母
sed 's#[a-z]##g' a.txt