详解shell脚本(十一)—— 提高与补充
2018-02-23 23:32
246 查看
用cron进行调度
cron利用的是一个叫做cron表的文件,这个文件中存储了需要执行的脚本或命令的调度列表以及执行时间。一个常见的用法是设置在免费时段(一些ISP提供免费使用时间,通常是在午夜),从Internet上进行下载。用户完全不需要在夜里熬红双眼等待下载。只需要编写一个cron条目,然后调度下载即可。你也可以安排当免费时段结束后自动断开Internet连接并关机。
cron表中的每一个条目都由6部分组成,并按照下列顺序排列:
分钟(0-59)
小时(0-23)
天(1-31)
月份(1-12)
工作日(0-6)
命令
如果你希望在某个特定时段执行命令,那么就在对应的时间字段中指定时段,并用逗号分隔(例如要在5分钟和10分钟时运行命令,那就在分钟字段中输入”5,10”)。在分钟字段使用*/5,可以每5分钟运行一次命令。这个技巧可以用在任何时间字段。
要在启动时运行命令,请将下面一行加入crontab:
@reboot command
用logrotate管理日志文件
logrotate的配置目录位于/etc/logrotate.d。如果列出这个目录中的内容,你会发现很多其他的日志文件配置。
create 0600 root root 指定所要创建的归档文件的模式,用户以及用户组
以逆序形式打印行
这个awk脚本非常简单。我们将每一行都存入一个关联数组中,用行号作为数组索引(行号由NR给出),最后由awk执行END语句块。为了得到最后一行的行号,在{ }语句块中使用lno=NR。因此,这个脚本从最后一行一直迭代到第0行,将存储在数组中的各行以逆序方式打印出来。
解析文本中的电子邮件地址和URL
在文件中移除包含某个单词的句子
列出网络上所有的活动主机
计算一个小时内CPU的占用情况
在上面的脚本中,主要的输入源是ps -eo comm,pcpu,其中comm表示命令名(command name),pcpu表示CPU使用率(CUP usage in percent)。该命令输出所有进程名及CPU使用率。每个进程对应一行输出。因为需要监视一小时内CPU的使用情况,所以我们得在一个每次迭代时间为60秒的for循环中不停地用ps -eo comm,pcpu | tail -n +2来获取CPU的使用统计数据,并将这些数据添加到文件 /tmp/cpu_usage.$$ 中。60秒的迭代时间通过sleep 60来提供。这就使得每分钟执行一次ps。tail -n +2用来将 ps 输出中的头部和 COMMAND %CPU剥除。
cpu_usage. 中的 表示当前脚本的进程 ID。假设进程 ID为1345,那么在脚本执行时它会被替换成 /tmp/cpu_usage.1345。因为这是一个临时文件,所以我们把它放在 /tmp中。统计文件在1小时后就准备妥当了,文件中包含了60项,分别对应每分钟的进程状态。然后用awk求出每个进程总的CPU使用情况。我们用了一个关联数组来统计CPU使用情况。其中进程名作为数组索引。最后根据总的CPU使用情况依数值逆序排序,并通过head获得前10项。
cron利用的是一个叫做cron表的文件,这个文件中存储了需要执行的脚本或命令的调度列表以及执行时间。一个常见的用法是设置在免费时段(一些ISP提供免费使用时间,通常是在午夜),从Internet上进行下载。用户完全不需要在夜里熬红双眼等待下载。只需要编写一个cron条目,然后调度下载即可。你也可以安排当免费时段结束后自动断开Internet连接并关机。
#每天每小时第二分钟执行脚本 02 * * * * /home/slynux/test.sh #每天第5,6,7小时执行脚本 00 5,6,7 * * /home/slynux/test.sh #在每周日的每个小时执行脚本 00 */12 * * 0 /home/slynux/script.sh #在每天凌晨2点关闭计算机 00 02 * * * * /sbin/shutdown -h #调度cron作业 crontab -e #输入crontab -e 后,会打开默认的文本编辑器供用户输入cron作业并保存。该cron作业将会在指定的时间被调度执行 #创建一个文本文件,并写入cron作业,将文件名最为参数命令,运行crontab crontab task.cron #在行内(inline)指定cron作业,而无需创建单独的文件。例如: crontab<<EOF 02 * * * * /home/slynux/script.sh EOF
cron表中的每一个条目都由6部分组成,并按照下列顺序排列:
分钟(0-59)
小时(0-23)
天(1-31)
月份(1-12)
工作日(0-6)
命令
如果你希望在某个特定时段执行命令,那么就在对应的时间字段中指定时段,并用逗号分隔(例如要在5分钟和10分钟时运行命令,那就在分钟字段中输入”5,10”)。在分钟字段使用*/5,可以每5分钟运行一次命令。这个技巧可以用在任何时间字段。
要在启动时运行命令,请将下面一行加入crontab:
@reboot command
用logrotate管理日志文件
logrotate的配置目录位于/etc/logrotate.d。如果列出这个目录中的内容,你会发现很多其他的日志文件配置。
#我们可以为自己的日志文件(such as /var/log/program.log)编写一个特定的配置: cat /etc/logrotate.d/program /var/log/program.log { missingok notifempty size 30k compress weekly rotate 5 create 0600 root root } 参数 描述 missingok 如果日志文件丢失,则忽略;然后返回(不对日志文件进行轮替) notifempty 仅当源日志文件非空时才对其进行轮替 size 30k 限制实施轮替的日志文件的大小。可以用1M表示1MB compress 允许用gzip压缩较旧的日志 weekly 指定进行轮替的时间间隔。可以是weekly,yearly或daily rotate 5 这是需要保留的旧日志文件的归档数量。在这里指定的是5,所以这些文件名将会是program.log1gz、program.log2.gz等知道program.log5.gz
create 0600 root root 指定所要创建的归档文件的模式,用户以及用户组
以逆序形式打印行
seq 9 | \ awk '{ lifo[NR]=$0 } END{ for(lno=NR;lno>-1;lno--){ print lifo[lno]; } }'
这个awk脚本非常简单。我们将每一行都存入一个关联数组中,用行号作为数组索引(行号由NR给出),最后由awk执行END语句块。为了得到最后一行的行号,在{ }语句块中使用lno=NR。因此,这个脚本从最后一行一直迭代到第0行,将存储在数组中的各行以逆序方式打印出来。
解析文本中的电子邮件地址和URL
egrep -o '[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}' 1.txt #email egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-Z]{2,3}" 1.txt #URL
在文件中移除包含某个单词的句子
sed 's/ [^.]*mobile phones[^.]\.//g' 1.txt
列出网络上所有的活动主机
#!/bin/bash #desc:根据网络配置对网络地址192.168.0进行修改 for ip in 192.168.0.{1..255}; do ping $ip -c 2 &> /dev/null; if [ $? -eq 0 ]; then echo $ip is alive fi done
计算一个小时内CPU的占用情况
#!/bin/bash SECS=3600 UNIT_TIME=60 #将SECS更改成需要进行监视的总秒数 #UNIT_TIME是取样的时间间隔,单位是秒 STEPS=$(( $SECS / $UNIT_TIME )) echo Watching CPU usage... for((i=0;i<STEPS;i++)) do ps -eocomm,pcpu | tail -n +2 >> /tmp/cpu_usage.$$ sleep $UNIT_TIME done echo echo CPU eaters : cat /tmp/cpu_usage.$$ | \ awk ' { process[$1]+=$2; } END{ for(i in process) { printf("%-20s %s\n",i,process[i]); } }' | sort -nrk 2 | head rm /tmp/cpu_usage.$$
在上面的脚本中,主要的输入源是ps -eo comm,pcpu,其中comm表示命令名(command name),pcpu表示CPU使用率(CUP usage in percent)。该命令输出所有进程名及CPU使用率。每个进程对应一行输出。因为需要监视一小时内CPU的使用情况,所以我们得在一个每次迭代时间为60秒的for循环中不停地用ps -eo comm,pcpu | tail -n +2来获取CPU的使用统计数据,并将这些数据添加到文件 /tmp/cpu_usage.$$ 中。60秒的迭代时间通过sleep 60来提供。这就使得每分钟执行一次ps。tail -n +2用来将 ps 输出中的头部和 COMMAND %CPU剥除。
cpu_usage. 中的 表示当前脚本的进程 ID。假设进程 ID为1345,那么在脚本执行时它会被替换成 /tmp/cpu_usage.1345。因为这是一个临时文件,所以我们把它放在 /tmp中。统计文件在1小时后就准备妥当了,文件中包含了60项,分别对应每分钟的进程状态。然后用awk求出每个进程总的CPU使用情况。我们用了一个关联数组来统计CPU使用情况。其中进程名作为数组索引。最后根据总的CPU使用情况依数值逆序排序,并通过head获得前10项。
相关文章推荐
- Shell 脚本调试技巧详解
- shell脚本中/dev/null 2>&1详解
- shell脚本中常见的一些特殊符号和作用详解
- 利用shell脚本提高效率(切换用户不需要输入密码)
- 详解shell脚本(四)—— 基础进阶
- shell脚本补充
- linux自学_shell脚本if详解
- shell脚本基础4-补充
- Shell 脚本调试技巧详解
- 14-(1,2)shell脚本编程详解_笔记
- Shell脚本之sed详解
- 详解shell脚本(五)——玩转find查找
- 看视频 shell入门视频补充的 shell脚本基本知识(TMD有点乱)
- 利用Shell脚本循环读取文件中每一行的方法详解
- Shell脚本之awk详解
- Shell脚本———— /dev/null 2>&1详解
- Linux常用命令全集 linux_Shell(脚本)编程入门_实例讲解详解
- 用shell脚本防ssh和vsftpd暴力破解的详解讲解
- 详解shell脚本(六)——tr和加密算法
- Shell脚本学习之sed详解