每天练习50个shell

1、统计日志每天IP访问量前十

awk ‘{print $1}‘ 1.log | sort -n | uniq -c | sort -n

解释:
(1)awk 命令在分段方面比较有优势,这里的{print $1}将第一段打印出来,awk可以用-F指定分隔符,如果不指定分隔符,默认就以空白字符(比如空格、tab等),本题中,IP地址就是第一段。
(2)sort 命令就是排序,-n选项表示以数字的形式排序。如果不加-n,则以ASCII排序,本题的IP地址用数字的形式排序更易区分。
(3)uniq 命令用来去重复,一个文本如果有多行内容是一模一样的,就使用uniq命令将相同的内容删除,只保留一行。-c选项作用是计算重复的行数。所以,uniq -c 的作用正好就统计了ip的访问量。不过,要注意,uniq去重要在排序之后进行。
(4)最后的sort -n意思是按访问量大小来排序,请求量越大的ip排在越后面。如果加一个-r选项,sort -nr,就是倒序排序。
或者

awk ‘{sum[$1]+=1};END{for(a in sum)print(sum[a],a)}‘ 1.log | sort -nr|head -n 5

解释:
这条命令中$1 就表示日志中的IP地址,用IP地址作为数组的下标,每发现一个相同的IP地址,就统计数量加1;当awk遍历日志文件1.log 完毕,再循环输出数组 sum 的结果,要注意数组的下标是 ip地址。
后面的 head -n 5 是为了输出出现访问次数最高的5个访问ip地址。

2.计算linux系统所有进程占用内存大小和
top或者ps可以获取每个进程大内存使用大小。获得大小之后,通过一个循环计算他们的和了。

grep Pss /proc/[0-9]*/smaps | awk ‘{sum+=$2};END{print sum}‘

(1)grep 命令可以遍历目录里的文件,然后将符合匹配字符的行抓取出来;
(2)awk 命令遍历grep 输出的结果,统计进程使用内存的和。
(3)在 /proc 目录下,有很多和进程有关的数据,读者可以自己去研究一下。
需要注意的是,全部进程占用的内存并不等于 free 命令所显示的 “used memory”,因为“used memory”不仅包含了进程所占用的内存,还包含cache/buffer以及kernel动态分配的内存等等

3.批量修改.txt文件未.txt.bak,并打包所有的.bak文件为123.tar.gz,然后再批量还原文件名。

#用到的命令:
find / -maxdepth 1 -type f -name "*.txt" > /tmp/file.txt
#循环逐行读取/tmp/file.txt文件修改文件名为txt.bak
while read line;
do
mv $line $line.bak
done</tmp/file.txt
#压缩打包
d=‘data +%Y%m%d%H%M%S‘
mkdir /tmp/123$d
for f in ‘cat /tmp/file.txt‘
do
cp $f.bak /tmp/123
$d
done
cd /tmp
tar czf 123.tar.gz ./123_$d
for f in ‘cat /tmp/file.txt‘;
do
mv $f.bak $f
done

(1)如果只是遍历目录,找出某种文件,然后修改一下文件名,其实一条命令就可以搞定:

find /usr/local/sbin/work -type f -name "*.txt" -print0 | xargs -d ‘\0‘ mv {} {}.bak

要注意,find 命令的查找路径需要使用绝对路径,不要用相对路径。如果用 xargs 命令接在后面,则用 -print0 选项,将某些包含空格的特殊文件名,也包含在内,不会处理错误。

(2)脚本中的 while 循环这种方式其实也是很常见的,将结果临时保存在一个文件中,然后再通过while 循环读取处理。
(3)大家看到脚本中多次使用 /tmp/file.txt 这个文件了吧。将 .txt 结尾的文件保存到一个文件中,这种办法就恨到地解决了我们在习题分析中提出的第3个问题啦。
(4)我的所有.txt 结尾的文件都在 /usr/local/src/sbin/work 目录。
? 如果你没有 .txt 结尾的文件,可以用下面的命令生成一堆,用来做实验:

for i in seq 30;do touch $i.txt;done

4.检测端口服务
判断本机的80端口是否开启着。

检测脚本:
cat check_80.sh

#!/bin/bashbr/>ma="[email protected]"
if netstat -lntp | grep -q ‘:80‘
then
exit 0
fi
/usr/local/apache2.4/bin/apachectl restart >/dev/null 2>/dev/null
python /usr/local/sbin/work/mail.py $ma "port_80" "prot 80 down"

n=‘pgrep -l httpd | wc -l‘
echo $n
if [$n -eq 0];then
/usr/local/apache2.4/bin/apachectl start 2>/tmp/http.error
fi

if [-s /tmp/http.error]
then
python /usr/local/sbin/work/mail.py $ma "apache_restart_wrong" "‘cat /tmp/http.error‘"
fi

每天练习50个shell

原文地址:http://blog.51cto.com/13120271/2317352

时间: 2024-10-13 23:24:51

每天练习50个shell的相关文章

13.6-全栈Java笔记:打飞机游戏实战项目|Shell|speed|launchFrame

炮弹类设计 通过炮弹类的设计,我们可以更深入了解构造器的用法以及容器的用法.同时,可能还需要读者稍微回忆一下初中数学曾学过的三角函数,这样更能理解炮弹飞行路径的计算原理. 当然,如果忘记这些知识了也没关系,毕竟在实际开发中很少涉及数学原理性的内容. 炮弹类基本设计 炮弹类我们用实心的黄色椭圆实现,不再加载新的图片.当然,大家课下可以自行找一些炮弹图片亦可. 我们的逻辑是在窗口固定位置(200,200)处生成炮弹,炮弹方向是随机的,并且遇到边界会反弹.  [示例1]Shell类 cn.sxt.ga

在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错

运行环境:Hadoop-2.5.0+Hbase-0.98.6 问题描述: 15/06/11 15:35:50 ERROR Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.     at org.apache.hadoop

centos mysql 实战 第七节课

mysql常见错误排查 1. client工具mysqlsqlyogmysqldump(mysqlbinlog) 2. mysql binlog 介绍 mysql 命令 mysql command not found 环境变量 echo $PATH 用绝对路径来调用/usr/local/mysql/bin/mysql ===============================================啊铭去除环境变量\cp = /bin/cp\cp 2.txt eee/# cd eee

MongoDB日常保养

它引入了程序来进行维护管理工具 MongoDB的日常维护包含使用配置文件,设置訪问控制.Shell交互,系统监控和管理,数据库日常备份和恢复 启动和停止MongoDB 启动后能够通过数据库的IP加port号訪问Web形式数据库. 配置文件 通过使用拂去配置文件的方式启动数据库实例.在bin目录下创建并编辑mongodb.config(名字能够任意) 事例加上 dbpath =/data/db/ 启动时加上 --f 參数,而且指向配置文件就可以. 使用Daemon方式启动 为什么我们使用Daemo

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries

在已经搭建好的集群环境Centos6.6+Hadoop2.7+Hbase0.98+Spark1.3.1下,在Win7系统Intellij开发工具中调试Spark读取Hbase.运行直接报错: ? 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 15/06/11 15:35:50 ERROR Shell: Failed to locate the winutils binary in the

SWT中的布局之-----FormLayout(表格式布局)

1.使用marginWidth,marginHeight设置边距 这两个属性用来设置容器的左边距和上边距(单位:像素).下面给出一个具体的实例: 1 public class FormLayout1 { 2 public static void main(String[] args) { 3 final Display display = Display.getDefault(); 4 final Shell shell = new Shell(); 5 shell.setSize(327, 2

iptable--防火墙设置

1. filter   2. nat 3. Mangle 常用表的流程只有filter和nat,简化如下: =========================================================================== 命令参数详解 table表--->chain 链--->rule 规则 policy [[email protected] ~]# iptables --help iptables v1.4.7 Usage: iptables -[ACD

Ubuntu下Caffe框架安装(仅仅Caffe框架安装)

步骤一. 从github上下载(克隆)安装包 1.1 在你要安装的路径下 clone 此处我直接安装到home目录,执行: 1 ~$ cd ~ 2 :~$ git clone https://github.com/BVLC/caffe.git #开始clone 2 ~$ git clone https://github.com/BVLC/caffe.git 等待下载结束,下载结束后在你的home路径下会存在,caffe文件夹.接下来进入caffe并开始配置caffe,配置如下 1 sudo cp

python_OS 模块

os模块 用于提供系统级别的操作 1 os.getcwd() 2 # 获取当前工作目录,即当前python脚本工作的目录路径 3 4 os.chdir("dirname") 5 # 改变当前脚本工作目录:相当于shell下cd 6 7 os.curdir 8 # 返回当前目录: ('.') 9 10 os.pardir 11 # 获取当前目录的父目录字符串名:('..') 12 13 os.makedirs('dirname1/dirname2') 14 # 可生成多层递归目录 15