您的位置:首页 > 运维架构 > Shell

运维工作常用的shell命令

2015-01-22 00:00 246 查看
Author by :Andy-xu
Blog:my.oschina.net/xxbAndy/blog

#seq 1 100 //1到100排序
#seq 1 3 100 //1到100排序,间隔为3

shell中的变量设置规则:
1.变量与变量的内容用"="链接;
2.等号两边不能直接接空格
3.变量只能是英文字母与数字(必须以字母开头)
4、变量内容若有空格符可以使用双引号或者单引号将变量结合起来(注意:双引号中的特殊字符$,可以保持原有特性,单引号的特殊字符仅作为一般字符)
#awk -F '{print $"$i"}'
5.若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量(自定义变量转变成环境变量)
注意:子进程会继承父进程的(使用bash或sh切换到子shell)
#export name 加载name环境变量
6.shell内置的环境变量的含义:
$? 返回上一个进程的返回值
$$ 返回当前运行进程的PID
$! 后台进行的最后一个进程的PID

7.查看进程的方式:
#ps -aux / #top /#pstree /#netstat -antlp
8.杀死进程
#kill /#pkill / #killall
9.通过程序查找进程的PID
#pgrep -l http 显示程序的名字和进程PID(-o显示起始进程PID;-n显示终止进程PID)
10.进程的调度:
#nohup 退出系统后可以继续运行某个程序。(可以启动一个要运行几天甚至几周的进程)
#renice 通过修改进程的优先值,调度进程的发生
#at,crontab 通过定时处理相关的程序调度
#kill 中断一个后台进程进行相应的调度

####################################3系统全面查看工具:###############################################
11.linux下查看网络流量的命令:
#sar -n DEV 1 4 (查看网络接口,每一秒查看一次,查找4次) #sysstat包(sar系统活动情况报告)
-n 选项提供6个不同的开关:DEV|EDEV|NFS|NFSD|SOCK|ALL
DEV:显示网络接口信息
EDEV:显示关于网络错误的统计数据
NFS:统计活动NFS客户端
NFSD:统计NFS服务器端
SOCK:统计套接字
ALL:统计所有
rxpck/s:每秒钟接收的数据包
txpck/s:每秒钟发送的数据包
rxkb/s:每秒钟接收的字节数
txkb/s:每秒钟发送的字节数
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包
[root@node2 ~]# sar -n DEV 2 2
Linux 2.6.32-431.el6.x86_64 (node2.example.com) 09/26/2014 _x86_64_ (1 CPU)
10:24:51 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10:24:53 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:24:53 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:24:53 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10:24:55 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:24:55 AM eth0 0.50 0.50 0.03 0.19 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 0.25 0.25 0.01 0.09 0.00 0.00 0.00

sar的详细用法:
sar [options] [-A] [-o file] t

t 为采样间隔,n为采样次数,默认为1;
-o file 表示将命令结果以二进制文件存储在文件中
options表示命令选项:
-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-c:输出进程统计信息,每秒创建的进程数
##############################################################################################

12.网络数据采集分析工具:tcpdump
#tcpdump -i eth0 监视指定网络接口的数据包
#tcpdump host IP 指定固定IP 进行获取相应的数据包
#tcpdump host 10.0.0.1 and \ (ip1 or ip2\) 截获10.0.1主机和ip1或ip2的通信
#tcpdump -i eth0 src host name 截获主机name发送的所有数据
#tcpdump -i eth0 dst host name 监视所有送到主机name的数据包
#tcpdump tcp port 23 host ip1 截取主机IP1接受或发出的telnet包
注意:好像还有ifstat,nload,iptraf等工具可以使用

13.查看网络连接状况:
#w (查看链接到本机的)
#netstat -ant (查看本机连接)

查看/boot使用率 (可以使用这个统计磁盘使用率,并进行报警)
#df -T | grep /boot | awk '{print $6}' |awk -F % '{print $1}'
#df -T | grep /boot | awk '{print $6}' |cut -d% -f 1

批量替换
[root@desktop51 Desktop]# sed -i "s/xx/co/g" /root/lines

[root@desktop51 ~]# grep ich /usr/share/mime/packages/freedesktop.org.xml | sed 's/[ ]*//g' > /root/xx 这个是替换所有的空格g表示全文
[root@desktop51 ~]# grep ich /usr/share/mime/packages/freedesktop.org.xml | sed 's/[ ]*//' > /root/lines 这个呢只是替换行前面的空格

root@desktop51 ~]# du --exclude=*.iso /var/ftp/pub/ -sh 统计pub目录里不包含.iso的文件并统计大小

find使用详解:

-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">

-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存

-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件

find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件

[root@desktop51 Desktop]# find -type f -exec du {} \; | sort -nr | head -3
600 ./RH135/RH135-13 安装和管理软件.pdf
536 ./RH135/RH135-12 管理SELINUX.pdf
452 ./RH135/RH135-5 网络配置和排错.pdf

-n
是显示升序

3.查找一个文件出现频率最高的是个词
cat words.txt | sort | uniq -c | sort -k1,1nr | head -10
  主要考察对sort、uniq命令的使用,相关解释如下,命令及参数的详细说明请自行通过man查看,简单介绍下以上指令各部分的功能:

sort: 对单词进行排序

uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数

sort -k1,1nr: 按照第一个字段,数值排序,且为逆序

head -10: 取前10行数据

[root@desktop51 ~]# cat .bash_history | sort | uniq -c | sort -k1,1nr |head -3
173 ls
25 cd ..
22 mail

找出用户和id 最后5个
[root@desktop51 ~]# awk -F: '{print $1":"$3}' /etc/passwd | tail -5
postgres:26
jboss:496
rhevm:109
vdsm:36
test:501
[root@desktop51 ~]# awk -F: '{print $1"\t" $3}' /etc/passwd | tail -5
postgres 26
jboss 496
rhevm 109
vdsm 36
test 501

[root@desktop51 ~]# df -h | grep / | head -1 | awk '{print $5}'
60%
[root@desktop51 ~]# df -h | grep /$ 以/结尾的
/dev/sda2 73G 42G 28G 60% /
[root@desktop51 ~]# df -h | grep /$ | awk '{print $5}' | awk -F% '{if ($1>50) {print "根分区使用大于50%"} else {print "根分区使用小于50%"}}'
根分区使用大于50%
[root@desktop51 ~]# df -h | grep /#
[root@desktop51 ~]# df -h | grep /$
/dev/sda2 73G 42G 28G 60% /
[root@desktop51 ~]#
4.
[root@desktop51 ~]# uptime | cut -d, -f1 | awk '{print $3}' | awk -F: '{print " 系统运行了"$1"小时"$2"分钟"}'
系统运行了2小时58分钟

#cat /var/log/secure | awk '/Failed/{print $(NF-3)}' 打印倒数第四个
注意:这样统计的是每个ip的访问次数,记住有些ip可能多次访问,因此需要进行整理数据
#sort |uniq -c 进行排序,并且统计ip的个数

5.
[root@desktop51 ~]# netstat -antlp | grep LISTEN
tcp 0 0 0.0.0.0:50725 0.0.0.0:* LISTEN 1873/rpc.statd
tcp 0 0 127.0.0.1:5900 0.0.0.0:* LISTEN 11790/qemu-kvm
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1715/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2502/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2137/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1926/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2247/master
[root@desktop51 ~]# netstat -antlp | grep LISTEN | awk '{print $NF}'
1873/rpc.statd
11790/qemu-kvm
1715/rpcbind 在awk中$NF表示最后一列? -F指定分割符默认空格
2502/dnsmasq
2137/sshd
1926/cupsd
2247/master

输出只监听的进程和pid
[root@desktop51 ~]# netstat -antlp | grep LISTEN | awk '{print $NF}' | sort -u | awk -F/ '{print $2 "("$1")"}'
qemu-kvm(11790)
rpcbind(1715)
rpc.statd(1873)
cupsd(1926)
sshd(2137)
master(2247)
dnsmasq(2502)

只输出设备的ip和netmask
[root@desktop51 ~]# ifconfig | grep inet | awk '{print $2":"$4}' | awk -F: '{print $2 "/"$4}'
192.168.0.51/255.255.255.0
127.0.0.1/
192.168.122.1/255.255.255.0
akw语言用-F指定分割符,默认不写表示的是空格

30-31是字体颜色
40-41是背景颜色
[root@desktop12 Desktop]# echo -e "\033[41m A \033[0m" 输出红背景的A
A
[root@desktop12 Desktop]# echo -e "\033[31m A \033[0m" 输出红字体A
A

#echo $RANDOM|md5sum | cut -c 1-8 加密字符串8个(一般可以作为用户密码)

使用 ip 的ping测试,可以将在线和线下的输出直接>>到一个文件日志里面。在执行ip测试脚本的时候直接使用后台进行执行。

解决ddos攻击生产案例脚本:
#!/bin/bash
for a in `netstat -antlp | grep ES |awk '{print $5}'|cut -d: -f1 | uniq -c | sort -r |awk '$1 > 100 {print$2}'`
do
iptables -A INPUT -s $a -j DROP
done

mysql多实例启动脚本:(启动和关闭命令已知)使用函数,case,if
#!/bin/bash
function start(){
mysqld_safe --default-file=/data/3306/my.cnf &
}
function stop(){
mysqladmin -u root -pxxbandy -S /data/3306/mysql.sock shutdown
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
exit 3
;;
esac

变量赋值 变量=值
乘法 expr 3 \* 5
var1=3
expr $var1 \* 10
赋值乘法
var2=`expr $var1 \* 3` //注意前提是var1有值
echo $var2 显示var2的值为9
a=10 b=3 c=9
expr $a + $b + $c //输出a+b+c的值
d=`expr $a + $b + $c` //将计算结果赋值给d
echo $d

打印星星:
#/bin/bash
for i in `seq 1 23`
do
spaceNumber=`expr 20 + $i`
for j in `seq 1 $spaceNumber`
do
echo -n ' '
done

startNumber=`expr 48 - 2 \* $i - 1`
for k in `seq 1 $startNumber`
do
echo -n '*'
done
echo
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: