shell脚本注意事项
1)开头加解释器:#!/bin/bash
2)语法缩进,使用四个空格;多加注释说明。
3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。
4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
6)写脚本一定先测试再到生产上。
shell基本命令
(1)ps aux 显示系统全部进程,一行一个 (2)grep “abc” 从标准输入读取字符流,输出包含字符串“abc”的行 (3)grep -v "acb" 从标准输入读取字符流,输出不包含字符串“abc”的行 (4)wc -l 从标准输入读取字符流,输出行数
例如需要检测进程httpd是否存在,操作流程如下: (1)读取系统所有进程 (2)判断包含指定进程名字的信息是否存在 通过管道连接,命令如下:
ps axu | grep "httpd" | grep -v "grep" | wc -l 所有进程-->获取包含“httpd”的行-->删除grep进程信息-->输出最后的行数
通过判断命令的执行结果是否为 0 ,可以知道进程是否存在。
脚本如下:
代码语言:javascript复制#!/bin/sh
while true;do
count=`ps -ef|grep http|grep -v grep`
if [ "$?" != "0" ];then
echo ">>>>no httpd,run it"
service httpd start
else
echo ">>>>httpd is runing..."
fi
sleep 5
done
运维常用脚本命令
在日常工作过程中,经常要对服务器进行一些操作,整理了一些常用的一句话shell命令。
1、查找当前目录下占用为0字节的文件并删除
find ./ -type f -size 0 -exec rm -rf {}; #此命令不要用于对根目录0字节文件的操作
2、将系统进程按内存占用大小排列显示出来
ps -e -o “%C : %p : %z : %a”|sort -k5-nr
3、将系统进程按CPU占用大小排列显示
ps -e -o “%C : %p : %z : %a”|sort -nr
4、匹配某文件中某一行并进行内容替换
sed -i ‘/Root/s/no/yes’/ etc/ssh/sshd_config #先匹配到Root,再将此行no替换为yes
5、显示所有运行级别为3并开机启动的服务
ls /etc/rc3.d/S* |cut -c 15- #rc3.d中S开头即为运行级别3的服务,并用cut截取第15个字符后面的内容
6、取得eth0网卡的IP地址
方法1:ifconfig | grep ‘inet addr:’| grep -v ’127.0.0.1′ | cut -d:-f2 | awk ‘{ print $1}’
方法2:ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-
方法3: ip addr |grep "inet"|awk '{print
7、TCP抓包工具分析80端口数据流
tcpdump -c 10000 -i eth0 -n dst port 80
8、查询昨天的日期
date –date=yesterday
9、删除所有空目录
find /data -type d -empty -exec rm -rf {}; #最好不要在/目录下执行此命令
10、删除5天前的文件
find /data -mtime 5 -type f -exec rm -rf{};
11、强制踢出终端用户
pkill -KILL -t pts/1
12、将来自80端口的请求转发到8080端口
iptables -A PREROUTING -p tcp -m tcp –dport80 -j DNAT –to-destination 127.0.0.1:8080
13、Linux服务器之间传文件
scp ~/test.txtroot@192.168.0.10:/data/ #将个人主目录下test.txt传到远程主机的/data目录下
14、对大文件进行分割
split -l 1000 message.log message #按每个文件1000行来分割
split -b 5m message.log message #按每个文件5M来分割
15、杀掉80端口相关的进程
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh