• Linux常用shell操作指令


    1.查询文件内tab

    适用于yaml校验(制表符)

    grep  $'\t' 文件名

    2.计算shell运行时间

    date相减

    1. startTime=`date +%Y%m%d-%H:%M:%S`
    2. startTime_s=`date +%s`
    3. endTime=`date +%Y%m%d-%H:%M:%S`
    4. endTime_s=`date +%s`
    5. sumTime=$[ $endTime_s - $startTime_s ]
    6. echo "$startTime ---> $endTime" "Total:$sumTime seconds"

    time

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

    3.防火墙开放端口

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

    4.关闭selinux

    1. setenforce 0
    2. 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.磁盘占用异常排查

    1. #查找
    2. du -m --max-depth=1 |sort -gr
    3. lsof |grep delete
    4. #删除
    5. 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内容如下:

    1. #!/bin/bash
    2. LOCAL_HOST=192.168.1.3
    3. RECEIVE_LIST="aaa@xxx.com"
    4. CC_LIST="bbb@xxx.com,ccc@xxx.com,ddd@xxx.com"
    5. MOUNT_NODE_COUNT=`df -h|wc -l`
    6. echo "挂载节点数为:${MOUNT_NODE_COUNT}"
    7. while [[ ${MOUNT_NODE_COUNT} -ne 1 ]];
    8. do
    9. FILE_SYSTEM=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $1}'`
    10. MOUNT_NODE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $6}'`
    11. PART_FREE_SPACE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $4}'`
    12. UTILIZATION_RATE=`df -h |sed -n "$MOUNT_NODE_COUNT p"|awk '{print $5}'`
    13. UTILIZATION_RATE_VALUE=`echo ${UTILIZATION_RATE}|sed 's/.$//'`
    14. # echo "文件系统:`echo ${FILE_SYSTEM}`,挂在节点:`echo "$MOUNT_NODE"`,分区磁盘使用率为:`echo ${UTILIZATION_RATE}`, 剩余磁盘空间:`echo ${PART_FREE_SPACE}`"
    15. if [[ ${UTILIZATION_RATE_VALUE} -gt 95 ]]; then
    16. MAIL_CONTENT="[当前地址]:${LOCAL_HOST}
    17. [文件系统]:`echo ${FILE_SYSTEM}`
    18. [挂在节点]:`echo "$MOUNT_NODE"`
    19. [分区磁盘使用率]:`echo ${UTILIZATION_RATE}`
    20. 已达告警阈值,请及时清理!!!"
    21. echo ${MAIL_CONTENT}
    22. echo "${MAIL_CONTENT}" | mail -s "磁盘剩余空间告警" -c ${CC_LIST} ${RECEIVE_LIST} &> /dev/null
    23. fi
    24. let MOUNT_NODE_COUNT--
    25. done

    安装mailx

    yum install -y mailx
    

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

    1. set from=aaa@xxx.com
    2. set smtp=smtp.xxx.com:587
    3. set smtp-auth-user=aaa
    4. set smtp-auth-password=******
    5. set smtp-auth=login
    6. set smtp-use-starttls
    7. set ssl-verify=ignore
    8. set nss-config-dir=/etc/pki/nssdb/

    配置定时任务

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

    12.ssl生成脚本

    1. #!/bin/bash
    2. # 域名
    3. export domain=www.example.com
    4. # IP地址(可选)
    5. export address=192.168.1.11
    6. # 国家
    7. export contryName=CN
    8. # 省//
    9. export stateName=Liaoning
    10. # 地方/城市名
    11. export locationName=Shenyang
    12. # 组织/公司名称
    13. export organizationName=example
    14. # 组织/公司部门名称
    15. export sectionName=develop
    16. echo "Getting Certificate Authority..."
    17. openssl genrsa -out ca.key 4096
    18. openssl req -x509 -new -nodes -sha512 -days 3650 \
    19. -subj "/C=$contryName/ST=$stateName/L=$locationName/O=$organizationNaem/OU=$sectionName/CN=$domain" \
    20. -key ca.key \
    21. -out ca.crt
    22. echo "Create your own Private Key..."
    23. openssl genrsa -out $domain.key 4096
    24. echo "Generate a Certificate Signing Request..."
    25. openssl req -sha512 -new \
    26. -subj "/C=$contryName/ST=$stateName/L=$locationName/O=$organizationNaem/OU=$sectionName/CN=$domain" \
    27. -key $domain.key \
    28. -out $domain.csr
    29. echo "Generate the certificate of your registry host..."
    30. cat > v3.ext <<-EOF
    31. authorityKeyIdentifier=keyid,issuer
    32. basicConstraints=CA:FALSE
    33. keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    34. extendedKeyUsage = serverAuth
    35. subjectAltName = @alt_names
    36. [alt_names]
    37. DNS.1=$domain
    38. DNS.2=hostname
    39. IP.1=$address
    40. EOF
    41. openssl x509 -req -sha512 -days 3650 \
    42. -extfile v3.ext \
    43. -CA ca.crt -CAkey ca.key -CAcreateserial \
    44. -in $domain.csr \
    45. -out $domain.crt
    46. echo "Convert server $domain.crt to $domain.cert..."
    47. openssl x509 -inform PEM -in $domain.crt -out $domain.cert
    48. echo "merge the intermediate certificate with your own certificate to create a certificate bundle..."
    49. cp $domain.crt /etc/pki/ca-trust/source/anchors/$domain.crt
    50. update-ca-trust
    51. echo "successful..."

    13.批量修改文件格式 

    批量修改为unix

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

    14.查看内存占用前n

    查看内存占用前3进程

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

    15.nginx日志解析 

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

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

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

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

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

    1. 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
    2. 获取到占用swap分区比较多的PID,然后就可以通过PID获取到进程的相关信息了。
    3. ps aux | grep ${pid}
  • 相关阅读:
    Linux内存泄露案例分析和内存管理分享
    软考高级:DNS欺骗相关知识和例题
    【block作为函数参数的应用案例之一 Objective-C语言】
    帝国cms如何隐藏指定信息不在列表页显示
    Web前端HTML样式 CSS选择器
    微信小程序开发常见问题解答
    pycharm一直没显示运行步骤,只是出现waiting for process detach
    Rust trait、动态派发和向上转型
    Python配置OpenCV
    每日刷题记录 (二十)
  • 原文地址:https://blog.csdn.net/zfw_666666/article/details/126667656