Linux常用shell操作指令

1.查询文件内tab

适用于yaml校验(制表符)

grep  $'\t' 文件名

2.计算shell运行时间

date相减

startTime=`date +%Y%m%d-%H:%M:%S`
startTime_s=`date +%s`

endTime=`date +%Y%m%d-%H:%M:%S`
endTime_s=`date +%s`

sumTime=$[ $endTime_s - $startTime_s ]

echo "$startTime ---> $endTime" "Total:$sumTime seconds"

time

time sh xxx.sh
# 会返回3个时间数据
# real 该命令的总耗时, 包括user和sys及io等待, 时间片切换等待等等
# user 该命令在用户模式下的CPU耗时,也就是内核外的CPU耗时,不含IO等待这些时间
# sys  该命令在内核中的CPU耗时,不含IO,时间片切换耗时.

3.防火墙开放端口

#开放端口(7777)
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 7777 -j ACCEPT
#保存
/etc/rc.d/init.d/iptables save
#重载
service iptables restart
firewall-cmd --zone=public --add-port=7777/tcp --permanent
#重新载入
firewall-cmd --reload

4.关闭selinux

setenforce 0
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config

5.开启tcp端口监听

(测试网络连通性)

python -m SimpleHTTPServer 9099

6.文件切割

split -d -b 100m enterprise.log  enterprise-

7.磁盘占用异常排查

#查找
du -m --max-depth=1 |sort -gr

lsof |grep delete

#删除
lsof |grep delete|awk '{print $2}'|xargs -n1 kill -9

8.查看tcp连接状态

netstat -na|awk '/^tcp/ {++S[$NF]} END {for(i in S) print i,S[i]}'

9.打包iso

mkisofs -o ./package.iso -J -R -A -V -v package

10.创建大文件

创建

fallocate -l 10G test4

撤销

fallocate -d test4

11.磁盘监控脚本

系统版本:CentOS7

脚本/usr/bin/disk-monitor.sh内容如下:

#!/bin/bash
LOCAL_HOST=192.168.1.3
RECEIVE_LIST="aaa@xxx.com"
CC_LIST="bbb@xxx.com,ccc@xxx.com,ddd@xxx.com"

MOUNT_NODE_COUNT=`df -h|wc -l`

echo "挂载节点数为:${MOUNT_NODE_COUNT}"

while [[ ${MOUNT_NODE_COUNT} -ne 1 ]];
do
  FILE_SYSTEM=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $1}'`
  MOUNT_NODE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $6}'`
  PART_FREE_SPACE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $4}'`
  UTILIZATION_RATE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $5}'`
  UTILIZATION_RATE_VALUE=`echo ${UTILIZATION_RATE}|sed 's/.$//'`
  # echo "文件系统:`echo ${FILE_SYSTEM}`,挂在节点:`echo "$MOUNT_NODE"`,分区磁盘使用率为:`echo ${UTILIZATION_RATE}`, 剩余磁盘空间:`echo ${PART_FREE_SPACE}`"
  if [[  ${UTILIZATION_RATE_VALUE} -gt 95 ]]; then
     MAIL_CONTENT="[当前地址]:${LOCAL_HOST}
[文件系统]:`echo ${FILE_SYSTEM}`
[挂在节点]:`echo "$MOUNT_NODE"`
[分区磁盘使用率]:`echo ${UTILIZATION_RATE}`

已达告警阈值,请及时清理!!!"
     echo ${MAIL_CONTENT}
     echo "${MAIL_CONTENT}" | mail -s "磁盘剩余空间告警" -c ${CC_LIST} ${RECEIVE_LIST} &> /dev/null
  fi
  let MOUNT_NODE_COUNT--
done

安装mailx

yum install -y mailx

配置mailx,/etc/mail.rc追加以下内容

set from=aaa@xxx.com
set smtp=smtp.xxx.com:587
set smtp-auth-user=aaa
set smtp-auth-password=******
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

配置定时任务

cat >> /etc/crontab <<EOF
0 */1 * * * root /usr/bin/disk-monitor.sh
EOF

12.ssl生成脚本

#!/bin/bash

# 域名
export domain=www.example.com

# IP地址(可选)
export address=192.168.1.11

# 国家
export contryName=CN

# 省/州/邦
export stateName=Liaoning

# 地方/城市名
export locationName=Shenyang

# 组织/公司名称
export organizationName=example

# 组织/公司部门名称
export sectionName=develop

echo "Getting Certificate Authority..."
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=$contryName/ST=$stateName/L=$locationName/O=$organizationNaem/OU=$sectionName/CN=$domain" \
  -key ca.key \
  -out ca.crt

echo "Create your own Private Key..."
openssl genrsa -out $domain.key 4096

echo "Generate a Certificate Signing Request..."
openssl req -sha512 -new \
  -subj "/C=$contryName/ST=$stateName/L=$locationName/O=$organizationNaem/OU=$sectionName/CN=$domain" \
  -key $domain.key \
  -out $domain.csr

echo "Generate the certificate of your registry host..."
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=$domain
DNS.2=hostname
IP.1=$address
EOF

openssl x509 -req -sha512 -days 3650 \
  -extfile v3.ext \
  -CA ca.crt -CAkey ca.key -CAcreateserial \
  -in $domain.csr \
  -out $domain.crt

echo "Convert server $domain.crt to $domain.cert..."
openssl x509 -inform PEM -in $domain.crt -out $domain.cert

echo "merge the intermediate certificate with your own certificate to create a certificate bundle..."
cp $domain.crt /etc/pki/ca-trust/source/anchors/$domain.crt
update-ca-trust

echo "successful..."

13.批量修改文件格式 

批量修改为unix

for file in `find hack/lib -name *.sh`
do
vi +':w ++ff=unix' +':q' ${file}
done

14.查看内存占用前n

查看内存占用前3进程

$ ps aux --sort -rss |grep -v PID | head -3

15.nginx日志解析 

  1. 提取nginx访问前x的IP地址

第一个sort进行ip地址排序,sort -nr对数量排序

$ cat /var/log/nginx/access.log|awk '{print $1}'|sort|uniq -c|sort -nr
    396 10.30.2.169
     67 192.168.129.64
     34 192.168.129.176
      6 10.9.48.129
  1. 提取nginx日志中状态码数量
$ cat /var/log/nginx/access.log|awk '{print $9}'|sort|uniq -c|sort -rn
    529 200
      6 302
      5 401
      4 502
      4 400
      4 304
      2 499
      1 201
      1 101

 16.查看哪个进程占用的SWAP分区比较多?

在日常管理中,我们经常会遇到swap分区使用比较多,那么导致是那些进程使用的呢,其实我们可以通过/proc/pid/下的smaps来获得。使用下面的命令可以列出所有进程占用的swap分区的大小,方便我们分析问题。

for i in $(cd /proc;ls | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head

获取到占用swap分区比较多的PID,然后就可以通过PID获取到进程的相关信息了。

ps aux | grep ${pid}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值