[转帖]Linux运维比较常用的一些脚本

linux,比较,常用,一些,脚本 · 浏览次数 : 0

小编点评

归纳总结以上内容,生成内容时需要带简单的排版 1. **排版简介** a. 概述项目目的 b. 介绍项目关键技术 c. 介绍项目核心功能 2. **排版重要步骤** a. 排版步骤顺序 b. 每一步详细说明 c. 每一步重要步骤的排版顺序 3. **排版重要技术** a. 排版技术关键 b. 每技术详细说明 c. 每技术重要步骤的排版顺序 4. **排版重要案例** a. 排版案例详细说明 b. 案例对技术的关键帮助 c. 案例对项目核心功能的关键帮助 5. **排版重要脚本** a. 排版脚本目标 b. 每脚本详细说明 c. 每脚本重要步骤的排版顺序 6. **排版重要文件** a. 排版文件目标 b. 每文件详细说明 c. 每文件重要步骤的排版顺序 7. **排版总结** a. 排版内容总结 b. 排版内容对项目的关键帮助 c. 排版内容对用户的重要帮助

正文

目录

一、根据PID过滤进程所有信息

二、根据进程名过滤进程信息

三、根据用户名查询该用户的相关信息

四、加固系统的一些配置

五:实现磁盘分区的

六、使用一整块硬盘创建逻辑卷

七、将一块硬盘分区,然后分区设置为虚拟卷


一、根据PID过滤进程所有信息

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-10
  4. # Function: 根据用户输入的PID,过滤出该PID所有的信息
  5. read -p "请输入要查询的PID: " P
  6. n=`ps -aux| awk '$2~/^'$P'$/{print $11}'|wc -l`
  7. if [ $n -eq 0 ];then
  8. echo "该PID不存在!!"
  9. exit
  10. fi
  11. echo "--------------------------------"
  12. echo "进程PID: $P"
  13. echo "进程命令:`ps -aux| awk '$2~/^'$P'$/{print $11}'`"
  14. echo "进程所属用户: `ps -aux| awk '$2~/^'$P'$/{print $1}'`"
  15. echo "CPU占用率:`ps -aux| awk '$2~/^'$P'$/{print $3}'`%"
  16. echo "内存占用率:`ps -aux| awk '$2~/^'$P'$/{print $4}'`%"
  17. echo "进程开始运行的时刻:`ps -aux| awk '$2~/^'$P'$/{print $9}'`"
  18. echo "进程运行的时间:`ps -aux| awk '$2~/^'$P'$/{print $10}'`"
  19. echo "进程状态:`ps -aux| awk '$2~/^'$P'$/{print $8}'`"
  20. echo "进程虚拟内存:`ps -aux| awk '$2~/^'$P'$/{print $5}'`"
  21. echo "进程共享内存:`ps -aux| awk '$2~/^'$P'$/{print $6}'`"
  22. echo "--------------------------------"

二、根据进程名过滤进程信息

会显示出该进程名包含的所有线程

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-10
  4. # Function: 根据输入的程序的名字过滤出所对应的PID,并显示出详细信息,如果有几个PID,则全部显示
  5. read -p "请输入要查询的进程名:" NAME
  6. N=`ps -aux | grep $NAME | grep -v grep | wc -l` ##统计进程总数
  7. if [ $N -le 0 ];then
  8. echo "该进程名没有运行!"
  9. fi
  10. i=1
  11. while [ $N -gt 0 ]
  12. do
  13. echo "进程PID: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $2}'`"
  14. echo "进程命令:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
  15. echo "进程所属用户: `ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $1}'`"
  16. echo "CPU占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $3}'`%"
  17. echo "内存占用率:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $4}'`%"
  18. echo "进程开始运行的时刻:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $9}'`"
  19. echo "进程运行的时间:` ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'`"
  20. echo "进程状态:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}'`"
  21. echo "进程虚拟内存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}'`"
  22. echo "进程共享内存:`ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}'`"
  23. echo "***************************************************************"
  24. let N-- i++
  25. done

三、根据用户名查询该用户的相关信息

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-12
  4. # Function:根据用户名查询该用户的所有信息
  5. read -p "请输入要查询的用户名:" A
  6. echo "------------------------------"
  7. n=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}' | wc -l`
  8. if [ $n -eq 0 ];then
  9. echo "该用户不存在"
  10. echo "------------------------------"
  11. else
  12. echo "该用户的用户名:$A"
  13. echo "该用户的UID:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $3}'`"
  14. echo "该用户的组为:`id $A | awk {'print $3'}`"
  15. echo "该用户的GID为:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $4}'`"
  16. echo "该用户的家目录为:`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $6}'`"
  17. Login=`cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $7}'`
  18. if [ $Login == "/bin/bash" ];then
  19. echo "该用户有登录系统的权限!!"
  20. echo "------------------------------"
  21. elif [ $Login == "/sbin/nologin" ];then
  22. echo "该用户没有登录系统的权限!!"
  23. echo "------------------------------"
  24. fi
  25. fi

四、加固系统的一些配置

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-11
  4. # Function:对账户的密码的一些加固
  5. read -p "设置密码最多可多少天不修改:" A
  6. read -p "设置密码修改之间最小的天数:" B
  7. read -p "设置密码最短的长度:" C
  8. read -p "设置密码失效前多少天通知用户:" D
  9. sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS '$A'' /etc/login.defs
  10. sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS '$B'' /etc/login.defs
  11. sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN '$C'' /etc/login.defs
  12. sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE '$D'' /etc/login.defs
  13. echo "已对密码进行加固,新用户不得和旧密码相同,且新密码必须同时包含数字、小写字母,大写字母!!"
  14. sed -i '/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth
  15. echo "已对密码进行加固,如果输入错误密码超过3次,则锁定账户!!"
  16. n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
  17. if [ $n -eq 0 ];then
  18. sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshd
  19. fi
  20. echo "已设置禁止root用户远程登录!!"
  21. sed -i '/PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config
  22. read -p "设置历史命令保存条数:" E
  23. read -p "设置账户自动注销时间:" F
  24. sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
  25. sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile
  26. echo "已设置只允许wheel组的用户可以使用su命令切换到root用户!"
  27. sed -i '/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ' /etc/pam.d/su
  28. n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
  29. if [ $n -eq 0 ];then
  30. echo SU_WHEEL_ONLY yes >> /etc/login.defs
  31. fi
  32. echo "即将对系统中的账户进行检查...."
  33. echo "系统中有登录权限的用户有:"
  34. awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
  35. echo "********************************************"
  36. echo "系统中UID=0的用户有:"
  37. awk -F: '($3=="0"){print $1}' /etc/passwd
  38. echo "********************************************"
  39. N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
  40. echo "系统中空密码用户有:$N"
  41. if [ $N -eq 0 ];then
  42. echo "恭喜你,系统中无空密码用户!!"
  43. echo "********************************************"
  44. else
  45. i=1
  46. while [ $N -gt 0 ]
  47. do
  48. None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
  49. echo "------------------------"
  50. echo $None
  51. echo "必须为空用户设置密码!!"
  52. passwd $None
  53. let N--
  54. done
  55. M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
  56. if [ $M -eq 0 ];then
  57. echo "恭喜,系统中已经没有空密码用户了!"
  58. else
  59. echo "系统中还存在空密码用户:$M"
  60. fi
  61. fi
  62. echo "即将对系统中重要文件进行锁定,锁定后将无法添加删除用户和组"
  63. read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" i
  64. case $i in
  65. [Y,y])
  66. chattr +i /etc/passwd
  67. chattr +i /etc/shadow
  68. chattr +i /etc/group
  69. chattr +i /etc/gshadow
  70. echo "锁定成功!"
  71. ;;
  72. [N,n])
  73. chattr -i /etc/passwd
  74. chattr -i /etc/shadow
  75. chattr -i /etc/group
  76. chattr -i /etc/gshadow
  77. echo "取消锁定成功!!"
  78. ;;
  79. *)
  80. echo "请输入Y/y or N/n"
  81. esac

五:实现磁盘分区的

只支持分配主分区和标准的linux文件系统(ext4/xfs)的分区

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-13
  4. # Function:对硬盘进行分区,得到一个标准的linux文件系统(ext4/xfs)的主分区
  5. cat /proc/partitions > old
  6. read -p "请输入你要分区的硬盘(写绝对路径,如:/dev/sda):" A
  7. if [ -e $A ];then
  8. echo "true"
  9. else
  10. echo "该设备不存在!!"
  11. exit
  12. fi
  13. read -p "请输入你要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):" B
  14. read -p "请输入分区数字,范围1-4,默认从1开始,默认按回车即可:" C
  15. read -p "请输入扇区起始表号,默认按回车即可:" D
  16. read -p "请输入你要分区的分区大小(格式:如 +5G ):" E
  17. fdisk $A << EOF
  18. n
  19. p
  20. $C
  21. $D
  22. $E
  23. w
  24. EOF
  25. echo "一个标准的linux文件系统的分区已经建立好!!"
  26. partprobe $A
  27. echo "-------------------------------"
  28. cat /proc/partitions
  29. cat /proc/partitions > new
  30. F=`diff new old | grep "<" | awk '{print $5}'`
  31. echo "-------------------------------"
  32. echo $F
  33. echo "你想对新分区设定什么类型的文件系统?有以下选项:"
  34. echo "A:ext4文件系统"
  35. echo "B:xfs文件系统"
  36. read -p "请输入你的选择:" G
  37. case $G in
  38. a|A)
  39. mkfs.ext4 /dev/$F
  40. echo "该分区将被挂载在 "/mnt/$F" 下"
  41. m=`ls /mnt/|grep $F | wc -l`
  42. if [ $m -eq 0 ];then
  43. mkdir /mnt/$F
  44. fi
  45. n=`cat /etc/fstab | grep /dev/$F| wc -l`
  46. if [ $n -eq 0 ];then
  47. echo "/dev/$F /mnt/$F ext4 defaults 0 0" >> /etc/fstab
  48. else
  49. sed -i '/^\/dev\/$F/c\/dev/$F /mnt/$F ext4 defaults 0 0' /etc/fstab
  50. fi
  51. mount -a
  52. df -Th
  53. ;;
  54. b|B)
  55. mkfs.xfs -f /dev/$F
  56. echo "该分区将被挂载在 "/mnt/$F" 下"
  57. m=`ls /mnt/|grep $F | wc -l`
  58. if [ $m -eq 0 ];then
  59. mkdir /mnt/$F
  60. fi
  61. n=`cat /etc/fstab | grep /dev/$F | wc -l`
  62. if [ $n -eq 0 ];then
  63. echo "/dev/$F /mnt/$F xfs defaults 0 0" >> /etc/fstab
  64. else
  65. sed -i '/^\/dev\/$F/c\/dev/$F /mnt/$F xfs defaults 0 0' /etc/fstab
  66. fi
  67. mount -a
  68. df -Th
  69. ;;
  70. *)
  71. echo "你的输入有误!!"
  72. esac

六、使用一整块硬盘创建逻辑卷

  1. #!/bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-12
  4. # Function:使用一整块硬盘创建LVM逻辑卷
  5. read -p "请输入你要做成逻辑卷的硬盘(写绝对路径,如:/dev/sda):" path
  6. if [ -e $path ];then
  7. echo "true"
  8. else
  9. echo "该设备不存在!!"
  10. exit
  11. fi
  12. pvcreate $path
  13. echo "该硬盘已做成物理卷!"
  14. vgcreate myvg $path
  15. echo "该物理卷已加入卷组 myvg 中"
  16. vgs
  17. free=`vgs| awk '$1~/myvg/{print}'|awk '{print $6}'`
  18. echo "该物理卷剩余的空间大小为:$free "
  19. read -p "请输入你要创建逻辑卷的大小(如:1G):" repy2
  20. lvcreate -L $repy2 -n mylv myvg
  21. echo "已成功创建逻辑卷mylv"
  22. echo "------------------------"
  23. lvs
  24. echo "------------------------"
  25. echo "你想对新分区设定什么类型的文件系统?有以下选项:"
  26. echo "A:ext4文件系统"
  27. echo "B:xfs文件系统"
  28. read -p "请输入你的选择:" repy3
  29. case $repy3 in
  30. a|A)
  31. mkfs.ext4 /dev/myvg/mylv
  32. echo "该分区将被挂载在 "/mnt/mylv" 下"
  33. m=`ls /mnt/|grep mylv | wc -l`
  34. if [ $m -eq 0 ];then
  35. mkdir /mnt/mylv
  36. fi
  37. echo "/dev/myvg/mylv /mnt/mylv ext4 defaults 0 0" >> /etc/fstab
  38. mount -a
  39. df -Th
  40. ;;
  41. b|B)
  42. mkfs.xfs -f /dev/myvg/mylv
  43. echo "该分区将被挂载在 "/mnt/mylv" 下"
  44. m=`ls /mnt/|grep mylv | wc -l`
  45. if [ $m -eq 0 ];then
  46. mkdir /mnt/mylv
  47. fi
  48. echo "/dev/myvg/mylv /mnt/mylv xfs defaults 0 0" >> /etc/fstab
  49. mount -a
  50. df -Th
  51. ;;
  52. *)
  53. echo "你的输入有误!!"
  54. esac

七、将一块硬盘分区,然后分区设置为虚拟卷

  1. #! /bin/bash
  2. # Author:谢公子
  3. # Date:2018-10-13
  4. # Function:新建一个分区,并做成逻辑卷
  5. cat /proc/partitions > old
  6. read -p "请输入你要分区的硬盘(写绝对路径,如:/dev/sda):" A
  7. if [ -e $A ];then
  8. echo "true"
  9. else
  10. echo "该设备不存在!!"
  11. exit
  12. fi
  13. read -p "请输入你要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):" B
  14. read -p "请输入分区数字,范围1-4,默认从1开始,默认按回车即可:" C
  15. read -p "请输入扇区起始表号,默认按回车即可:" D
  16. read -p "请输入你要分区的分区大小(格式:如 +5G ):" E
  17. read -p "请输入你要划分为逻辑卷的分区盘符(默认回车即可):" Z
  18. fdisk $A << EOF
  19. n
  20. p
  21. $C
  22. $D
  23. $E
  24. t
  25. $Z
  26. 8e
  27. p
  28. w
  29. EOF
  30. echo "一个标准LVM的分区已经建立好!!"
  31. partprobe $A
  32. echo "-------------------------------"
  33. cat /proc/partitions
  34. cat /proc/partitions > new
  35. F=`diff new old | grep "<" | awk '{print $5}'`
  36. echo "-------------------------------"
  37. echo $F
  38. pvcreate /dev/$F
  39. echo "该硬盘已做成物理卷!"
  40. n=`vgs | grep myvg |wc -l`
  41. if [ $n -eq 0 ];then
  42. vgcreate myvg /dev/$F
  43. echo "该物理卷已加入卷组myvg中"
  44. else
  45. vgextend myvg /dev/$F
  46. echo "该物理卷已加入卷组myvg中"
  47. vgs
  48. free=`vgs| awk '$1~/myvg/{print}'|awk '{print $7}'`
  49. echo "该卷组剩余的空间大小为:$free "
  50. lvs
  51. exit
  52. fi
  53. vgs
  54. free=`vgs| awk '$1~/myvg/{print}'|awk '{print $6}'`
  55. echo "该卷组剩余的空间大小为:$free "
  56. read -p "请输入你要创建逻辑卷的大小(如:1G):" repy2
  57. lvcreate -L $repy2 -n mylv myvg
  58. echo "已成功创建逻辑卷mylv"
  59. echo "------------------------"
  60. lvs
  61. echo "------------------------"
  62. echo "你想对新分区设定什么类型的文件系统?有以下选项:"
  63. echo "A:ext4文件系统"
  64. echo "B:xfs文件系统"
  65. read -p "请输入你的选择:" G
  66. case $G in
  67. a|A)
  68. mkfs.ext4 /dev/myvg/mylv
  69. echo "该分区将被挂载在 "/mnt/$F" 下"
  70. m=`ls /mnt/|grep $F | wc -l`
  71. if [ $m -eq 0 ];then
  72. mkdir /mnt/$F
  73. fi
  74. echo "/dev/myvg/mylv /mnt/$F ext4 defaults 0 0" >> /etc/fstab
  75. mount -a
  76. df -Th
  77. ;;
  78. b|B)
  79. mkfs.xfs -f /dev/myvg/mylv
  80. echo "该分区将被挂载在 "/mnt/$F" 下"
  81. m=`ls /mnt/|grep $F | wc -l`
  82. if [ $m -eq 0 ];then
  83. mkdir /mnt/$F
  84. fi
  85. echo "/dev/myvg/mylv /mnt/$F xfs defaults 0 0" >> /etc/fstab
  86. mount -a
  87. df -Th
  88. ;;
  89. *)
  90. echo "你的输入有误!!"
  91. esac

更多脚本:https://www.jb51.net/article/54488.htm

相关文章:应急响应系统之 Linux 主机安全检查

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览9121 人正在系统学习中

与[转帖]Linux运维比较常用的一些脚本相似的内容:

[转帖]Linux运维比较常用的一些脚本

目录 一、根据PID过滤进程所有信息 二、根据进程名过滤进程信息 三、根据用户名查询该用户的相关信息 四、加固系统的一些配置 五:实现磁盘分区的 六、使用一整块硬盘创建逻辑卷 七、将一块硬盘分区,然后分区设置为虚拟卷 一、根据PID过滤进程所有信息 #! /bin/bash# Author:谢公子#

[转帖]Linux 平台使用shc 工具加密shell 脚本

2021-08-03 20:4510030原创Linux 本文链接:https://www.cndba.cn/dave/article/4642 1 shc 工具说明 shell 脚本是常用脚本,运维中经常使用,但有时候在shell 脚本中会包含一些敏感的信息,比如密码或者特殊的参数,此时我们就可以

[转帖]Linux运维常用150个命令

Linux运维常用150个命令 转载自:www.cnblogs.com/bananaaa/p/7774467.html 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用。 help 查看Linux内置命令的帮助,比如cd命令。 文件和目录操

[转帖]Linux内存泄露案例分析和内存管理分享

https://zhuanlan.zhihu.com/p/583922188 一、问题 近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到内存报警的消息,让整个团队都比较紧张,我们团队负

[转帖]Linux 运维工具

Linux系统是目前仅次于Windows系统的一个开源系统,并且拥有比Windows系统更广泛的应用范围,从航天到军事、从科研到金融、从手机到电脑,你能够在任何一个需要操作系统的地方看到Linux的身影。 实际上Linux并不是一个真正的系统,它仅仅是一个有着上万行代码的系统内核,最初版本也只能够在

[转帖] Linux运维必备的13款实用工具

1、查看进程占用带宽情况-Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/downlo

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

[转帖]一个轻量的Linux运维监控脚本

https://zhuanlan.zhihu.com/p/472040635 写在前面 我的需求 嗯,有几台很老的机器,上面部署的几个很老的应用 我需要每周对机器上的一些内存,磁盘,线程,应用和数据库进行巡查监控,输出运维报告 因为是很老的东西,所以不敢随便乱动,怕掉坑里. 每次巡查都是通过通过命令

[转帖]Linux文件分发脚本,只需一条命令将你的文件分发到各个服务器上

https://zhuanlan.zhihu.com/p/438457921 背景 在运维或在日常工作生活中,我们经常会把一个文件拷贝到其它服务器上,或同时分发到多个服务器上,甚至要求目标机将文件放在相同的路径下,方便程序进一步调用。 遇到这种问题,我们通常的做法是使用scp或rsync命令把文件拷

[转帖]Linux句柄调优之nofile、nr_open、file-max

https://www.jianshu.com/p/8fb056e7b9f8 在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决。今天在教某位客户设置最大