bash command in practice

实用命令

  • 网卡绑定IP
    ifconfig eth0:1 192.168.1.99 netmask 255.255.255.0

  • 设置DNS和网关
    echo "nameserver 202.16.53.68" >> /etc/resolv.conf
    route add default gw 192.168.1.1

  • 查询空行
    grep ^$ file1

  • 打印1-3行
    sed -n '1,3p' file1

  • 删除空目录
    find /data -type d -empty -exec rm -rf {};

  • 删除空文件
    find /data -type f -size 0c -exec rm -rf {};
    find /data -type f -size 0c|xargs rm –f

  • 删除五天前文件
    find /data -type f -mtime +5 -exec rm -rf {};

  • 踢出用户
    pkill -kill -t pts/1

  • 查看端口开放情况
    nmap -ps ip

  • 查看网络连接
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

  • 查看库文件
    ldconfig -v

  • 查看网卡驱动版本
    ethtool -i tool

  • tcpdump tcp port 80 host ip

  • 合并文件:
    -- 取出两个文件的并集(重复的行只保留一份)
    cat file1 file2 | sort | uniq
    -- 取出两个文件的交集(只留下同时存在于两个文件中的文件)
    cat file1 file2 | sort | uniq -d
    -- 删除交集,留下其他的行
    cat file1 file2 | sort | uniq –u

  • 打印文本模式运行的服务
    chkconfig --list|awk '$5~/on/{print $1,$5}'

  • 查看进程,按内存从大到小排列
    ps -e -o "%C : %p : %z : %a"|sort -k5 -nr

  • 查看http的并发请求数及其TCP连接状态
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

  • 查看有多少个活动的PHP-cgi进程
    netstat -anp | grep php-cgi | grep ^tcp | wc -l

  • 查看硬件制造商
    dmidecode -s system-product-name

  • 查看线程数
    cat /proc/${pid}/status
    pstree -p ${pid}
    top -p ${pid} 再按H
    top -H
    ps xH
    ps -mp PID

1.查看文件内容
cat check_snmp_time_sync.py |while read line;do echo $line;done while read line;do echo $line;done < ./check_snmp_time_sync.py

2.统计连接数
while :; do tail -n 100 /app/nginx/web.log |cut -d -f 8|sort|uniq -c;sleep 5;done

3.统计代码行数
find . -type f -name "*.sh" |xargs wc -l

4.统计sh文件含有的lst字符串并排列
find . -type f -iname "*.sh"|xargs grep -c "lst"|grep -v ":0$"|sort -t : -k 2 -nr

5.查找并替换内容
find . -type f -print|grep -v ".*\.\(jpg\|JPG\)"|xargs sed -i "s/ab/cd/g"

6.语句

  • if...else:
if [ $? -eq 0 ];
then
echo "successed";
fi
  • for:
for ip in 192.168.1.{1..255};
do
ping ${ip} -w 1 &>/dev/null&&\
echo ${ip} is up;
done

for ip in $(cat iplist);do
scp config/${ip}.conf ${ip}:/home/max
done

socket=$(ps -ef|grep mysql|grep -v grep|grep sock|awk 'BEGIN{FS = "--"}{for (f=1; f <= NF; f+=1) {if ($f ~ /sock/) {print $f}}}'|awk -F'=' '{print $2}'|grep 3306);echo $socket

  • while:
do sleep 1
netstat -lanp|grep 3306|grep ESTABLISHED|\
awk '{print $5}'|awk -F ':' '{print $1}'|sort|uniq|wc -l|\
awk 'BEGIN{a="'$(date +%H:%M:%S)'";}{printf "%s,%d\n",a,$1}' \
>> access_num.log;done

7.查看系统资源
ps aux |head -1 ;ps aux|grep -v PID|sort -rn -k +3|head #查看CPU前十进程
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head #占内存前10的进程

du -sk /* |sort -rn|head #占磁盘最大的前十个文件
find . -type f -exec ls -l -h {} ;|sort -rn -k 5|head -n 5 #前5文件大小

8.查看CPU及硬盘大小

  • 查看CPU型号
    grep 'model name' /proc/cpuinfo|head -1|awk -F":" '{print $2}'
    cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

cat /proc/cpuinfo|grep -E 'vendor_id|model name|cpu MHz|cache size'|sort -n|uniq -c;

  • 查看CPU个数
    grep 'physical id' /proc/cpuinfo|sort -u|wc -l
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

  • 查看逻辑CPU个数
    grep 'processor' /proc/cpuinfo|sort -u|wc -l
    cat /proc/cpuinfo| grep "processor"| wc -l

  • 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep "cpu cores"| uniq

  • 查看硬盘大小
    fdisk -l|grep "Disk /dev/sda"|awk '{print 1}'END'{print sum}'

9.查看系统信息
uname -ar
top -n 1|grep -E 'Tasks|Mem|Swap';
netstat -nltp
cat /proc/net/sockstat

getconf LONG_BIT #查看是否是64位

ifconfig|grep HWaddr|awk '{print 4,$5}' #查看mac
ifconfig|grep inet|grep -v inet6|grep -v 127.0.0.1 #查看IP信息

dmidecode |grep Product

iostat 3 3
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)应该低于5ms,如果大于10ms就比较大了
iostat -d -k 1 10 #查看TPS和吞吐量信息
iostat -c 1 10 #查看cpu状态

10.sed
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

  • 文件5-10行的前面加#号
    sed -i "5,10s/^/#/" host_slow.log

  • 查找 00:10:34至00:10:38的日志内容
    cat server.out.20160114 |sed -n '/2016-01-13 00:10:34/,/2016-01-13 00:10:38/p'

  • sed用法,把空格和tab开头的去除掉
    sed 's/^[ t]//g' #等于 sed 's/^[ \t]//g

11.find
find . type f -name *.log |xargs rm #删除文件
find . type f -name *.sh |xargs -i mv {} /tmp #移动文件

xargs 分批处理前面的查询结果

find . -perm 777|xargs ls -l
find . -mtime -5 #5天内更新的文件
find . -mtime +5 #5天前更改的文件
find ./ -iregex ".*.phd"|xargs rm -rf #根据文件名后缀删除文件

12.grep
grep 'SELINUX=enforcing' /etc/selinux/config 2>&1 >/dev/null && echo PASS || echo FAIL

blkid /dev/sda1|awk -F"=" '{print 2}'

blkid /dev/sda1 | awk -F"=" '{print 1}'|cut -d""" -f2 #查看id
lsblk | grep sda1 #列出块文件

  • egrep:
    egrep "memory_limit|post_max_size|upload_max_filesize"

ps -ef|grep java|egrep -o "[1-9]{4}"|head -n1 #查看java进程

  • 查进程并杀除
    ps -ef|grep "httpd"|grep -v grep|awk '{print $2}'|xargs kill

13.awk

  • 查看指定标签
doc=`grep "DocumentRoot" /etc/httpd/conf.d/vhost-server0.conf | awk '{print $2}' | awk -F\" '{print $2}'`
context=`ls -lZd $documentroot | awk -F: '{print $3}'
  • 查看文件权限
    ls -lh /root/foo.sh |awk '{print $1}'

  • 显示以字母t开头的所有用户信息
    awk '/^t/{print $1}' /etc/passwd

  • 显示uid大于500的用户
    awk -F: '1,$3}' /etc/passwd

  • BEGIN在第一行被读取前执行,END表示在最后一行匹配完再执行

  • 统计各种shell的使用人数
    awk -F: '{shell[$NF]++}END{for (A in shell){print A,shell[A]}}' /etc/passwd

  • 统计各种TCP连接状态的个数
    netstat -ant | awk '/^tcp/{STATE[$NF]++}END{for (s in STATE) print s,STATE[s]}'

  • 统计日志文件中每个IP地址的访问量

awk '{counts[$1]++} END{for(ip in counts) print counts[ip],ip}' /var/log/httpd/access_log

cd /usr/local/nginx/logs
awk '{counts[$1]++} END{for(ip in counts) print counts[ip],ip}' access.log |sort -rn|head -n 30
cat access.log|sort|awk '$NF!~/-/ {print $1"," $NF}'|uniq |awk -F  , '{print $1}'|uniq -c|sort -nr|head -20
  • 截取字段
    dir -l|awk '{print 4,$9}'

  • NR用法

  • 打印第一行和第二项
    free -m | awk 'NR==2 {print $2}'

cat /etc/issue.net|awk 'NR==1 {print}' #打印第二行

14.date
date +%F -d "-3 days" #3天前
date '+%F %r'

15.setfacl
setfacl -R -m u:ljun:rwx /javasoft/ #设置ljun有rwx权限
setfacl -R -m d:u:qhfz:rwx /data2/ResourceCase

16.nmap
nmap -sn 10.192.179.0/24 #查看活跃的主机

17.mount
mount -t cifs -o username=andy,password=andy //172.168.1.10/common /test

18.cat用法

cat> /etc/yum.repos.d/LNMP+zabbix.repo <<'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
EOF

cat << EOF > /tmp/3.txt
> aaaa
> bbbb
> cccc
> dddd
> EOF
  • 创建500M的主分区, \n换行
    echo -e "n\np\n1\n\n+500M\nw\n"|fdisk /dev/sdb &>/dev/null

cat -b #对非空行编号
cat -n #输出所有行的行号

19.ps
ps -A -o stat,ppid,pid,cmd |grep -e "^[Zz]" #查看僵尸进程
ps -A -o stat,ppid,pid,cmd|grep -e "^[Zz]"|awk '{print $2}'|xargs kill -9 #批量删除僵尸进程

ps aux | less
#vsz:进程所占用内存的总大小 以kb为单位
#rss:进程所占用实际物理内存的大小 以kb为单位

lsof -i:80

20.top
平均负载/CPU个数>1 CPU资源饱和
平均负载/CPU个数<1 CPU资源正常
top:
M #按内存大小分
P #按CPU占用分
T #按进程运行时间分

21.set 显示环境变量
sar 5 5 #查看CPU

uniq -c #删除重复值
sort #对单词排序
sort -k1,1nr #按照第一个字段数值排序,逆序

21.iptables

service iptables save  #保存规则到/etc/sysconfig/iptables文件
iptables -L -n --line-number
iptables -vnL
service iptables status 

iptables -L -t nat #查看nat策略
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 8097 -j ACCEPT

-A增加一条规则到最后
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8097 -j ACCEPT

-D删除策略
iptables -D INPUT -p tcp -m state --state NEW -m tcp --dport 8017 -j ACCEPT

22.ifconfig
ifconfig eth0:0 ip2 netmask 255.255.255.0 #临时绑定IP
ip addr add "10.70.72.123/24" dev eth0

23.netstat

netstat -nat|grep -i "80"|wc -l
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'
netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c


netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A,i}' |sort -rn|head -n20

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20

netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more

24.压缩解压缩
tar tvf apache-tomcat-8.0.36.tar.gz #不解压查看压缩文件内容
gzip -c filename >filename.gz #压缩保留源文件
gunzip -c filename.gz > filename #解压保留源文件

25.设置环境变量

echo "export JAVA_HOME=/usr/local/jdk1.8.1_12" >>~/.bashrc
. ~/.bashrc
echo $JAVA_HOME

26.-a和&&的区别
-a 用在[]里:

if [[ -f /root/while.sh -a -f /root/pid.sh ]]
then 
echo exist
fi

&&都可以

ls -F -R /etc/ #显示目录下文件及文件夹

你可能感兴趣的:(bash command in practice)