运维工作常用的shell命令
#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 [n] 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 " 33[41m A 33[0m" 输出红背景的A
A
[root@desktop12 Desktop]# echo -e " 33[31m A 33[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
- Havex:以工控设备为狩猎目标的恶意软件
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 浅谈php安全
- 在统一的分析平台上构建复杂的数据管道
- 隐藏在注册表的恶意软件 – Poweliks
- 数千万WordPress和Drupal站点存在DDoS风险
- 利用基因突变和K均值预测地区种群
- 缓冲区溢出攻击初学者手册(更新版)
- 在Python机器学习中如何索引、切片和重塑NumPy数组
- HelloWorld,我的第一趟旅程出发点
- Android OpenGL开发实践 - GLSurfaceView对摄像头数据的再处理
- 走进科学:对七夕“超级病毒”XX神器的逆向分析
- 机器学习 - 朴素贝叶斯分类器的意见和文本挖掘
- 认知指纹:颠覆性的身份认证技术
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mysql5中Packet for query is too large (3396053 > 1048576),数据量太大解决方案
- 关于 servlet 的这个问题,你能答对吗?
- MYSQL数据优化常用配置参数
- Hadoop分块存储解析及还原分块存储的文件
- ValueError: too many values to unpack (expected 2)
- VMware15更新后克隆Centos7发现网卡起不来了
- 基于SSH的医院在线挂号
- Linux-远程拷贝(scp命令)
- Kettle使用JavaScript代码处理数据
- Hadoop入门---(wordcount)统计单词出现的次数
- JS去除字符串的空格
- insertionSoft(插入排序) 2.1-1 And 重写insertionSoft 2.1-2
- Swagger-Springboot-mybatis-mysql
- Python+java+websocket+SpringMVC实时监控数据库中的表
- 基于Java图形界面的IPV4与网址的地址解析器