当前位置:   article > 正文

Linux 实用运维sh脚本分享

Linux 实用运维sh脚本分享

  1. #查看僵尸进程
  2. ps -al | gawk '{print $2,$4}' | grep Z
  3. # 匹配电子邮件的地址
  4. cat index.html | egrep -o "[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}" > ans.txt
  5. #匹配http URL
  6. cat index.html | egrep -o "http://[A-Za-z0-9.]+\.[a-zA-Z]{2,3}" > ans.txt
  7. #纯文本形式下载网页
  8. lynx -dump www.baidu.com > plain.txt
  9. #只打印HTTP头部信息,无须远程下载文件
  10. curl --head www.baidu.com
  11. #使用POST提交数据
  12. curl -d "param2=nickwolfe¶m2=12345" http://www.linuxidc.com/login.cgi
  13. #显示分组途经的网关
  14. traceroute www.baidu.com
  15. #列出系统中的开放端口以及运行在端口上的服务
  16. lsof -i
  17. #nc命令建立socket连接
  18. #设置监听 nc -l 5555
  19. #连接到套接字 nc 192.0.0.1 5555
  20. #快速文件传输
  21. #接收端 nc -l 5555 > destination_filename
  22. #发送端 nc 192.0.0.1 5555 < source_filename
  23. #找出指定目录最大的n个文件
  24. du -ak target_dir | sort -nrk 1 | head -n 4
  25. # du中a为递归,k为kb;sort中n为数字,r为降序,k指定列
  26. #向终端中的所有登陆用户发送广播信息
  27. cat message.txt | wall
  28. #创建新的screen窗口
  29. screen
  30. #打印所有的.txt和.pdf文件
  31. find . \( -name "*.txt" -o -name "*.pdf" \) -print
  32. # -exec command {} \;是连用的,所有符合的都会放置在{}中,去执行command
  33. #将文件分割成多个大小为10kb的文件
  34. split -b 10k data.file
  35. #打印两个文件的交集
  36. comm A.txt B.txt -3 | sed 's/^\t//'
  37. #sed移除空白行
  38. sed '/^$/d' file

mysql备份

  1. #!/bin/bash
  2. set -e
  3. USER="backup"
  4. PASSWORD="backup"
  5. # 数据库数据目录 #
  6. DATA_DIR="/data/mysql"
  7. BIN_INDEX=$DATA_DIR"/mysql-bin.index"
  8. # 备份目录 #
  9. BACKUP_DIR="/data/backup/mysql"
  10. BACKUP_LOG="/var/log/mysql/backup.log"
  11. DATE=`date +"%Y%m%d"`
  12. TIME=`date +"%Y%m%d%H"`
  13. LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`
  14. DELETE_BINLOG_TIME="7 day"
  15. INCREMENT_INTERVAL="3 hour"
  16. note() {
  17. printf "[$LOG_TIME] note: $*\n" >> $BACKUP_LOG;
  18. }
  19. warning() {
  20. printf "[$LOG_TIME] warning: $*\n" >> $BACKUP_LOG;
  21. }
  22. error() {
  23. printf "[$LOG_TIME] error: $*\n" >> $BACKUP_LOG;
  24. exit 1;
  25. }
  26. full_backup() {
  27. local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
  28. for db in $dbs
  29. do
  30. local backup_dir=$BACKUP_DIR"/full/"$db
  31. local filename=$db"."$DATE
  32. local backup_file=$backup_dir"/"$filename".sql"
  33. if [ ! -d $backup_dir ]
  34. then
  35. mkdir -p $backup_dir || { error "创建数据库 $db 全量备份目录 $backup_dir 失败"; continue; }
  36. note "数据库 $db 全量备份目录 $backup_dir 不存在,创建完成";
  37. fi
  38. note "full backup $db start ..."
  39. mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "数据库 $db 备份失败"; continue; }
  40. cd $backup_dir
  41. tar -cPzf $filename".tar.gz" $filename".sql"
  42. rm -f $backup_file
  43. chown -fR mysql:mysql $backup_dir
  44. note "数据库 $db 备份成功";
  45. note "full backup $db end."
  46. done
  47. }
  48. increment_backup() {
  49. local StartTime=`date "-d $INCREMENT_INTERVAL ago" +"%Y-%m-%d %H:%M:%S"`
  50. local DELETE_BINLOG_END_TIME=`date "-d $DELETE_BINLOG_TIME ago" +"%Y-%m-%d %H:%M:%S"`
  51. local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
  52. mysql -u$USER -p$PASSWORD -e "purge master logs before '$DELETE_BINLOG_END_TIME'" && note "delete $DELETE_BINLOG_TIME days before log";
  53. filename=`cat $BIN_INDEX | awk -F "/" '{print $2}'`
  54. for i in $filename
  55. do
  56. for db in $dbs
  57. do
  58. local backup_dir=$BACKUP_DIR"/increment/"$db
  59. local filename=$db"."$TIME
  60. local backup_file=$backup_dir"/"$filename".sql"
  61. if [ ! -d $backup_dir ]
  62. then
  63. mkdir -p $backup_dir || { error "创建数据库 $db 增量备份目录 $backup_dir 失败"; continue; }
  64. note "数据库 $db 增量备份目录 $backup_dir 不存在,创建完成";
  65. fi
  66. note "increment backup $db form time $StartTime start ..."
  67. mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "数据库 $db 备份失败"; continue; }
  68. note "increment backup $db end."
  69. done
  70. done
  71. for db in $dbs
  72. do
  73. local backup_dir=$BACKUP_DIR"/increment/"$db
  74. local filename=$db"."$TIME
  75. local backup_file=$backup_dir"/"$filename".sql"
  76. cd $backup_dir
  77. tar -cPzf $filename".tar.gz" $filename".sql"
  78. rm -f $backup_file
  79. note "数据库 $db 备份成功";
  80. done
  81. }
  82. case "$1" in
  83. full)
  84. full_backup
  85. ;;
  86. increment)
  87. increment_backup
  88. ;;
  89. *)
  90. exit 2
  91. ;;
  92. esac
  93. exit 1

目录备份

PING查询

  1. #!/bin/bash
  2. #用途:根据网络配置对网络地址192.168.0进行修改,检查是否是活动状态
  3. #{start..end}shell扩展生成一组地址
  4. for ip in 192.168.0.{1..255}
  5. do
  6. (
  7. ping $ip -c 2 &> /dev/null
  8. # > 标准输出重定向,和1>一致
  9. # 2>&1 将标准错误输出 重定向 到标准输出
  10. # &>file 将标准输出和标准错误输出都重定向到文件filename中
  11. if [ $? -eq 0 ];then
  12. echo $ip is alive
  13. fi
  14. )&
  15. done
  16. wait
  17. #并行ping,加速

磁盘IO检查

  1. ##iostat是查看磁盘活动统计情况
  2. ##显示所有设备负载情况 r/s: 每秒完成的读 I/O 设备次数。即 rio/s;w/s: 每秒完成的写 I/O 设备次数。即 wio/s等
  3. iostat
  4. ##每隔2秒刷新磁盘IO信息,并且每次显示3次
  5. iostat 2 3
  6. #显示某个磁盘的IO信息
  7. iostat -d sda1
  8. ##显示tty和cpu信息
  9. iostat -t
  10. ##以M为单位显示磁盘IO信息
  11. iostat -m
  12. ##查看TPS和吞吐量信息 kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;
  13. iostat -d -k 1 1
  14. #查看设备使用率(%util)、响应时间(await)
  15. iostat -d -x -k 1 1
  16. #查看CPU状态
  17. iostat -c 1 3
  18. #统计进程(pid)的stat,进程的stat自然包括进程的IO状况
  19. pidstat
  20. #只显示IO
  21. pidstat -d 1
  22. #-d IO 信息,-r 缺页及内存信息-u CPU使用率-t 以线程为统计单位1 1秒统计一次
  23. pidstat -u -r -d -t 1
  24. #文件级IO分析,查看当前文件由哪些进程打开
  25. lsof
  26. ls /proc/pid/fd
  27. #利用 sar 报告磁盘 I/O 信息DEV 正在监视的块设备 tps 每秒钟物理设备的 I/O 传输总量 rd_sec/s 每秒从设备读取的扇区数量 wr_sec/s 每秒向设备写入的扇区数量 avgrq-sz I/O 请求的平均扇区数
  28. #avgqu-sz I/O 请求的平均队列长度 await I/O 请求的平均等待时间,单位为毫秒 svctm I/O 请求的平均服务时间,单位为毫秒 %util I/O 请求所占用的时间的百分比,即设备利用率
  29. sar -pd 10 3
  30. #iotop top的io版
  31. iotop
  32. #查看页面缓存信息 其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加 一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。
  33. cat /proc/meminfo
  34. #查看有多少个pdflush进程 Linux 用pdflush进程把数据从缓存页写入硬盘
  35. #pdflush的行为受/proc/sys/vm中的参数的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题
  36. cat /proc/sys/vm/nr_pdflush_threads
  37. #查看I/O 调度器
  38. #调度算法
  39. #noop anticipatory deadline [cfq]
  40. #deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。
  41. #anticipatory:有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。对数据库应用很糟糕,而对于Web Server等则会表现不错。
  42. #cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。
  43. #noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。
  44. cat /sys/block/[disk]/queue/scheduler
  45. #改变IO调度器
  46. $ echo deadline > /sys/block/sdX/queue/scheduler
  47. #提高调度器请求队列的
  48. $ echo 4096 > /sys/block/sdX/queue/nr_requests

​​​​​​​

性能相关​​​​​​​

  1. #查看当前系统load
  2. uptime
  3. #查看系统状态和每个进程的系统资源使用状况
  4. top
  5. #可视化显示CPU的使用状况
  6. htop
  7. #查看每个CPU的负载信息
  8. mpstat -P ALL 1
  9. #每隔1秒查看磁盘IO的统计信息
  10. iostat -xkdz 1
  11. #每隔一秒查看虚拟内存的使用信息
  12. vmstat 1
  13. #查看内存使用统计信息
  14. free
  15. #查看网络使用信息
  16. nicstat -z 1
  17. #类似vmstat的显示优化的工具
  18. dstat 1
  19. #查看系统活动状态,比如系统分页统计,块设备IO统计等
  20. sar
  21. #网络连接状态查看
  22. netstat -s
  23. #进程资源使用信息查看
  24. pidstat 1
  25. pidstat -d 1
  26. #查看某个进程的系统调用信息 -p后面是进程id,-tttT 进程系统后的系统调用时间
  27. strace -tttT -p 12670
  28. #统计IO设备输入输出的系统调用信息
  29. strace -c dd if=/dev/zero of=/dev/null bs=512 count=1024k
  30. #tcpdump 查看网络数据包
  31. tcpdump -nr /tmp/out.tcpdump
  32. #块设备的读写事件信息统计
  33. btrace /dev/sdb
  34. #iotop查看某个进程的IO操作统计信息
  35. iotop -bod5
  36. #slabtop 查看内核 slab内存分配器的使用信息
  37. slabtop -sc
  38. #系统参数设置
  39. sysctl -a
  40. #系统性能指标统计信息
  41. perf stat gzip file1
  42. #系统cpu活动状态查看
  43. perf record -a -g -F 997 sleep 10

进程相关

  1. ## processes 进程管理
  2. ##ps查看当前系统执行的线程列表,进行瞬间状态,不是连续状态,连续状态需要使用top名称查看 更多常用参数请使用 man ps查看
  3. ps
  4. ##显示所有进程详细信息
  5. ps aux
  6. ##-u 显示某个用户的进程列表
  7. ps -f -u www-data
  8. ## -C 通过名字或者命令搜索进程
  9. ps -C apache2
  10. ## --sort 根据进程cpu使用率降序排列,查看前5个进程 -pcpu表示降序 pcpu升序
  11. ps aux --sort=-pcpu | head -5
  12. ##-f 用树结构显示进程的层次关系,父子进程情况下
  13. ps -f --forest -C apache2
  14. ##显示一个父进程的所有子进程
  15. ps -o pid,uname,comm -C apache2
  16. ps --ppid 2359
  17. ##显示一个进程的所有线程 -L 参数
  18. ps -p 3150 -L
  19. ##显示进程的执行时间 -o参数
  20. ps -e -o pid,comm,etime
  21. ##watch命令可以用来实时捕捉ps显示进程
  22. watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
  23. ##jobs 查看后台运行的进程 jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息
  24. jobs
  25. ##查看后台运营的进程号
  26. jobs -p
  27. ##查看现在被终止或者退出的进程号
  28. jobs -n
  29. ##kill命令 终止一个前台进程可以使用Ctrl+C键 kill 通过top或者ps获取进程id号 kill [-s 信号 | -p ] [ -a ] 进程号 ...
  30. ##发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。关闭进程号12的进程
  31. kill 12
  32. ##等同于在前台运行PID为123的进程时按下Ctrl+C键
  33. kill -2 123
  34. ##如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程
  35. kill -9 123
  36. ##列出所有信号名称
  37. ##HUP 1 终端断线
  38. ##INT 2 中断(同 Ctrl + C)
  39. ##QUIT 3 退出(同 Ctrl + \)
  40. ##TERM 15 终止
  41. ##KILL 9 强制终止
  42. ##CONT 18 继续(与STOP相反, fg/bg命令)
  43. ##STOP 19 暂停(同 Ctrl + Z)
  44. kill -l
  45. ##得到指定信号的数值
  46. kill -l KILL
  47. ##杀死指定用户所有进程
  48. kill -u peidalinux
  49. kill -9 $(ps -ef | grep peidalinux)
  50. ##将后台中的命令调至前台继续运行 将进程123调至前台执行
  51. fg 123
  52. ##将一个在后台暂停的命令,变成继续执行
  53. bg 123
  54. ##该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思 下面输出被重定向到myout.file文件中
  55. nohup command > myout.file 2>&1 &
  56. ##at:计划任务,在特定的时间执行某项工作,在特定的时间执行一次。
  57. ## 格式:at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日)
  58. ##HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天)
  59. at 12:00(时间) //at命令设定12:00执行一项操作
  60. #at>useradd aaa //在at命令里设定添加用户aaa
  61. #ctrl+d //退出at命令
  62. #tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一个用户aaa
  63. ##计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。
  64. atq
  65. ##启动计划任务后,如果不想启动设定好的计划任务可以使用atrm命令删除。
  66. atrm 1 //删除计划任务1
  67. ##pstree命令:列出当前的进程,以及它们的树状结构 格式:pstree [选项] [pid|user]
  68. pstree
  69. ##nice命令:改变程序执行的优先权等级 应用程序优先权值的范围从-20~19,数字越小,优先权就越高。一般情况下,普通应用程序的优先权值(CPU使用权值)都是0,如果让常用程序拥有较高的优先权等级,自然启动和运行速度都会快些。需要注意的是普通用户只能在0~19之间调整应用程序的优先权值,只有超级用户有权调整更高的优先权值(从-20~19)。
  70. nice [-n <优先等级>][--help][--version][命令]
  71. nice -n 5 ls
  72. ##sleep命令:使进程暂停执行一段时间
  73. date;sleep 1m;date
  74. ##renice命令 renice命令允许用户修改一个正在运行进程的优先权。利用renice命令可以在命令执行时调整其优先权。
  75. ##其中,参数number与nice命令的number意义相同。(1) 用户只能对自己所有的进程使用renice命令。(2) root用户可以在任何进程上使用renice命令。(3) 只有root用户才能提高进程的优先权
  76. renice -5 -p 5200 #PID为5200的进程nice设为-5
  77. ##pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息 #pmap PID
  78. pmap 20367

javadump.sh​​​​​​​

  1. #!/bin/sh
  2. DUMP_PIDS=`ps --no-heading -C java -f --width 1000 |awk '{print $2}'`
  3. if [ -z "$DUMP_PIDS" ]; then
  4. echo "The server $HOST_NAME is not started!"
  5. exit 1;
  6. fi
  7. DUMP_ROOT=~/dump
  8. if [ ! -d $DUMP_ROOT ]; then
  9. mkdir $DUMP_ROOT
  10. fi
  11. DUMP_DATE=`date +%Y%m%d%H%M%S`
  12. DUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATE
  13. if [ ! -d $DUMP_DIR ]; then
  14. mkdir $DUMP_DIR
  15. fi
  16. for PID in $DUMP_PIDS ; do
  17. #Full thread dump 用来查线程占用,死锁等问题
  18. $JAVA_HOME/bin/jstack $PID > $DUMP_DIR/jstack-$PID.dump 2>&1
  19. echo -e ".\c"
  20. #打印出一个给定的Java进程、Java core文件或远程Debug服务器的Java配置信息,具体包括Java系统属性和JVM命令行参数。
  21. $JAVA_HOME/bin/jinfo $PID > $DUMP_DIR/jinfo-$PID.dump 2>&1
  22. echo -e ".\c"
  23. #jstat能够动态打印jvm(Java Virtual Machine Statistics Monitoring Tool)的相关统计信息。如young gc执行的次数、full gc执行的次数,各个内存分区的空间大小和可使用量等信息。
  24. $JAVA_HOME/bin/jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil-$PID.dump 2>&1
  25. echo -e ".\c"
  26. $JAVA_HOME/bin/jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1
  27. echo -e ".\c"
  28. #未指定选项时,jmap打印共享对象的映射。对每个目标VM加载的共享对象,其起始地址、映射大小及共享对象文件的完整路径将被打印出来,
  29. $JAVA_HOME/bin/jmap $PID > $DUMP_DIR/jmap-$PID.dump 2>&1
  30. echo -e ".\c"
  31. #-heap打印堆情况的概要信息,包括堆配置,各堆空间的容量、已使用和空闲情况
  32. $JAVA_HOME/bin/jmap -heap $PID > $DUMP_DIR/jmap-heap-$PID.dump 2>&1
  33. echo -e ".\c"
  34. #-dump将jvm的堆中内存信息输出到一个文件中,然后可以通过eclipse memory analyzer进行分析
  35. #注意:这个jmap使用的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使用,否则会造成服务中断。
  36. $JAVA_HOME/bin/jmap -dump:format=b,file=$DUMP_DIR/jmap-dump-$PID.dump $PID 2>&1
  37. echo -e ".\c"
  38. #显示被进程打开的文件信息
  39. if [ -r /usr/sbin/lsof ]; then
  40. /usr/sbin/lsof -p $PID > $DUMP_DIR/lsof-$PID.dump
  41. echo -e ".\c"
  42. fi
  43. done
  44. #主要负责收集、汇报与存储系统运行信息的。
  45. if [ -r /usr/bin/sar ]; then
  46. /usr/bin/sar > $DUMP_DIR/sar.dump
  47. echo -e ".\c"
  48. fi
  49. #主要负责收集、汇报与存储系统运行信息的。
  50. if [ -r /usr/bin/uptime ]; then
  51. /usr/bin/uptime > $DUMP_DIR/uptime.dump
  52. echo -e ".\c"
  53. fi
  54. #内存查看
  55. if [ -r /usr/bin/free ]; then
  56. /usr/bin/free -t > $DUMP_DIR/free.dump
  57. echo -e ".\c"
  58. fi
  59. #可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
  60. if [ -r /usr/bin/vmstat ]; then
  61. /usr/bin/vmstat > $DUMP_DIR/vmstat.dump
  62. echo -e ".\c"
  63. fi
  64. #报告与CPU相关的一些统计信息
  65. if [ -r /usr/bin/mpstat ]; then
  66. /usr/bin/mpstat > $DUMP_DIR/mpstat.dump
  67. echo -e ".\c"
  68. fi
  69. #报告与IO相关的一些统计信息
  70. if [ -r /usr/bin/iostat ]; then
  71. /usr/bin/iostat > $DUMP_DIR/iostat.dump
  72. echo -e ".\c"
  73. fi
  74. #报告与网络相关的一些统计信息
  75. if [ -r /bin/netstat ]; then
  76. /bin/netstat > $DUMP_DIR/netstat.dump
  77. echo -e ".\c"
  78. fi
  79. echo "OK!"

常用工具安装​​​​​​​

  1. #!/usr/bin/env bash
  2. # ---------------------------------------------------------------------------------
  3. # 控制台颜色
  4. BLACK="\033[1;30m"
  5. RED="\033[1;31m"
  6. GREEN="\033[1;32m"
  7. YELLOW="\033[1;33m"
  8. BLUE="\033[1;34m"
  9. PURPLE="\033[1;35m"
  10. CYAN="\033[1;36m"
  11. RESET="$(tput sgr0)"
  12. # ---------------------------------------------------------------------------------
  13. printf "${BLUE}\n"
  14. cat << EOF
  15. ###################################################################################
  16. # 安装常用命令工具
  17. # 命令工具清单如下:
  18. # 核心工具:df、du、chkconfig
  19. # 网络工具:ifconfig、netstat、route、iptables
  20. # IP工具:ip、ss、ping、tracepath、traceroute
  21. # DNS工具:dig、host、nslookup、whois
  22. # 端口工具:lsof、nc、telnet
  23. # 下载工具:curl、wget
  24. # 编辑工具:emacs、vim
  25. # 流量工具:iftop、nethogs
  26. # 抓包工具:tcpdump
  27. # 压缩工具:unzip、zip
  28. # 版本控制工具:git、subversion
  29. #
  30. ###################################################################################
  31. EOF
  32. printf "${RESET}\n"
  33. printf "\n${GREEN}>>>>>>>>> 安装常用命令工具开始${RESET}\n"
  34. # 核心工具
  35. printf "\n${CYAN}>>>> install coreutils(df、du)${RESET}\n"
  36. yum install -y coreutils
  37. printf "\n${CYAN}>>>> install chkconfig${RESET}\n"
  38. yum install -y chkconfig
  39. # 网络工具
  40. printf "\n${CYAN}>>>> install net-tools(ifconfig、netstat、route)${RESET}\n"
  41. yum install -y net-tools
  42. printf "\n${CYAN}>>>> install iptables${RESET}\n"
  43. yum install -y iptables
  44. # IP工具
  45. printf "\n${CYAN}>>>> install iputils(ping、tracepath)${RESET}\n"
  46. yum install -y iputils
  47. printf "\n${CYAN}>>>> install traceroute${RESET}\n"
  48. yum install -y traceroute
  49. printf "\n${CYAN}>>>> install iproute(ip、ss)${RESET}\n"
  50. yum install -y iproute
  51. # 端口工具
  52. printf "\n${CYAN}>>>> install lsof${RESET}\n"
  53. yum install -y lsof
  54. printf "\n${CYAN}>>>> install nc${RESET}\n"
  55. yum install -y nc
  56. printf "\n${CYAN}>>>> install netstat${RESET}\n"
  57. yum install -y netstat
  58. # DNS工具
  59. printf "\n${CYAN}>>>> install bind-utils(dig、host、nslookup)${RESET}\n"
  60. yum install -y bind-utils
  61. printf "\n${CYAN}>>>> install whois${RESET}\n"
  62. yum install -y whois
  63. # 下载工具
  64. printf "\n${CYAN}>>>> install curl${RESET}\n"
  65. yum install -y curl
  66. printf "\n${CYAN}>>>> install wget${RESET}\n"
  67. yum install -y wget
  68. # 编辑工具
  69. printf "\n${CYAN}>>>> install emacs${RESET}\n"
  70. yum install -y emacs
  71. printf "\n${CYAN}>>>> install vim${RESET}\n"
  72. yum install -y vim
  73. # 流量工具
  74. printf "\n${CYAN}>>>> install iftop${RESET}\n"
  75. yum install -y iftop
  76. printf "\n${CYAN}>>>> install nethogs${RESET}\n"
  77. yum install -y nethogs
  78. # 抓包工具
  79. printf "\n${CYAN}>>>> install tcpdump${RESET}\n"
  80. yum install -y tcpdump
  81. # 压缩工具
  82. printf "\n${CYAN}>>>> install unzip${RESET}\n"
  83. yum install -y unzip
  84. # 版本控制工具
  85. printf "\n${CYAN}>>>> install git${RESET}\n"
  86. yum install -y git
  87. printf "\n${CYAN}>>>> install subversion${RESET}\n"
  88. yum install -y subversion
  89. printf "\n${GREEN}<<<<<<<< 安装常用命令工具结束${RESET}\n"

常用lib库安装​​​​​​​

  1. #!/usr/bin/env bash
  2. # ---------------------------------------------------------------------------------
  3. # 控制台颜色
  4. BLACK="\033[1;30m"
  5. RED="\033[1;31m"
  6. GREEN="\033[1;32m"
  7. YELLOW="\033[1;33m"
  8. BLUE="\033[1;34m"
  9. PURPLE="\033[1;35m"
  10. CYAN="\033[1;36m"
  11. RESET="$(tput sgr0)"
  12. # ---------------------------------------------------------------------------------
  13. printf "${BLUE}\n"
  14. cat << EOF
  15. ###################################################################################
  16. # 安装常见 lib
  17. # 如果不知道命令在哪个 lib,可以使用 yum search xxx 来查找
  18. # lib 清单如下:
  19. # gcc gcc-c++ kernel-devel libtool
  20. # openssl openssl-devel
  21. # zlib zlib-devel
  22. # pcre
  23. ###################################################################################
  24. EOF
  25. printf "${RESET}\n"
  26. printf "\n${GREEN}>>>>>>>>> 安装常见 lib 开始${RESET}\n"
  27. printf "\n${CYAN}>>>> install gcc gcc-c++ kernel-devel libtool${RESET}\n"
  28. yum -y install make gcc gcc-c++ kernel-devel libtool
  29. printf "\n${CYAN}>>>> install openssl openssl-devel${RESET}\n"
  30. yum -y install make openssl openssl-devel
  31. printf "\n${CYAN}>>>> install zlib zlib-devel${RESET}\n"
  32. yum -y install make zlib zlib-devel
  33. printf "\n${CYAN}>>>> install pcre${RESET}\n"
  34. yum -y install pcre
  35. printf "\n${GREEN}<<<<<<<< 安装常见 lib 结束${RESET}\n"

系统检查脚本​​​​​​​

  1. #!/usr/bin/env bash
  2. ##############################################################################
  3. # console color
  4. C_RESET="$(tput sgr0)"
  5. C_BLACK="\033[1;30m"
  6. C_RED="\033[1;31m"
  7. C_GREEN="\033[1;32m"
  8. C_YELLOW="\033[1;33m"
  9. C_BLUE="\033[1;34m"
  10. C_PURPLE="\033[1;35m"
  11. C_CYAN="\033[1;36m"
  12. C_WHITE="\033[1;37m"
  13. ##############################################################################
  14. printf "${C_PURPLE}"
  15. cat << EOF
  16. ###################################################################################
  17. # 系统信息检查脚本
  18. ###################################################################################
  19. EOF
  20. printf "${C_RESET}"
  21. [[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1
  22. sysversion=$(rpm -q centos-release | cut -d- -f3)
  23. double_line="==============================================================="
  24. line="----------------------------------------------"
  25. # 打印头部信息
  26. printHeadInfo() {
  27. cat << EOF
  28. +---------------------------------------------------------------------------------+
  29. | 欢迎使用 【系统信息检查脚本】 |
  30. +---------------------------------------------------------------------------------+
  31. EOF
  32. }
  33. # 打印尾部信息
  34. printFootInfo() {
  35. cat << EOF
  36. +---------------------------------------------------------------------------------+
  37. | 脚本执行结束,感谢使用!|
  38. +---------------------------------------------------------------------------------+
  39. EOF
  40. }
  41. options=( "获取系统信息" "获取服务信息" "获取CPU信息" "获取系统网络信息" "获取系统内存信息" "获取系统磁盘信息" "获取CPU/内存占用TOP10" "获取系统用户信息" "输出所有信息" "退出" )
  42. printMenu() {
  43. printf "${C_BLUE}"
  44. printf "主菜单:\n"
  45. for i in "${!options[@]}"; do
  46. index=`expr ${i} + 1`
  47. val=`expr ${index} % 2`
  48. printf "\t(%02d) %-30s" "${index}" "${options[$i]}"
  49. if [[ ${val} -eq 0 ]]; then
  50. printf "\n"
  51. fi
  52. done
  53. printf "${C_BLUE}请输入需要执行的指令:\n"
  54. printf "${C_RESET}"
  55. }
  56. # 获取系统信息
  57. get_systatus_info() {
  58. sys_os=$(uname -o)
  59. sys_release=$(cat /etc/redhat-release)
  60. sys_kernel=$(uname -r)
  61. sys_hostname=$(hostname)
  62. sys_selinux=$(getenforce)
  63. sys_lang=$(echo $LANG)
  64. sys_lastreboot=$(who -b | awk '{print $3,$4}')
  65. sys_runtime=$(uptime | awk '{print $3,$4}' | cut -d, -f1)
  66. sys_time=$(date)
  67. sys_load=$(uptime | cut -d: -f5)
  68. cat << EOF
  69. 【系统信息】
  70. 系统: ${sys_os}
  71. 发行版本: ${sys_release}
  72. 系统内核: ${sys_kernel}
  73. 主机名: ${sys_hostname}
  74. selinux状态: ${sys_selinux}
  75. 系统语言: ${sys_lang}
  76. 系统当前时间: ${sys_time}
  77. 系统最后重启时间: ${sys_lastreboot}
  78. 系统运行时间: ${sys_runtime}
  79. 系统负载: ${sys_load}
  80. EOF
  81. }
  82. # 获取CPU信息
  83. get_cpu_info() {
  84. Physical_CPUs=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
  85. Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
  86. CPU_Kernels=$(grep "cores" /proc/cpuinfo | uniq | awk -F ': ' '{print $2}')
  87. CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
  88. CPU_Arch=$(uname -m)
  89. cat << EOF
  90. 【CPU信息】
  91. 物理CPU个数:$Physical_CPUs
  92. 逻辑CPU个数:$Virt_CPUs
  93. 每CPU核心数:$CPU_Kernels
  94. CPU型号:$CPU_Type
  95. CPU架构:$CPU_Arch
  96. EOF
  97. }
  98. # 获取服务信息
  99. get_service_info() {
  100. port_listen=$(netstat -lntup | grep -v "Active Internet")
  101. kernel_config=$(sysctl -p 2> /dev/null)
  102. if [[ ${sysversion} -gt 6 ]]; then
  103. service_config=$(systemctl list-unit-files --type=service --state=enabled | grep "enabled")
  104. run_service=$(systemctl list-units --type=service --state=running | grep ".service")
  105. else
  106. service_config=$(/sbin/chkconfig | grep -E ":on|:启用" | column -t)
  107. run_service=$(/sbin/service --status-all | grep -E "running")
  108. fi
  109. cat << EOF
  110. 【服务信息】
  111. ${service_config}
  112. ${line}
  113. 运行的服务:
  114. ${run_service}
  115. ${line}
  116. 监听端口:
  117. ${port_listen}
  118. ${line}
  119. 内核参考配置:
  120. ${kernel_config}
  121. EOF
  122. }
  123. # 获取系统内存信息
  124. get_mem_info() {
  125. check_mem=$(free -m)
  126. MemTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}') #KB
  127. MemFree=$(grep MemFree /proc/meminfo | awk '{print $2}') #KB
  128. let MemUsed=MemTotal-MemFree
  129. MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
  130. report_MemTotal="$((MemTotal/1024))" "MB" #内存总容量(MB)
  131. report_MemFree="$((MemFree/1024))" "MB" #内存剩余(MB)
  132. report_MemUsedPercent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
  133. cat << EOF
  134. 【内存信息】
  135. 内存总容量(MB): ${report_MemTotal}
  136. 内存剩余量(MB):${report_MemFree}
  137. 内存使用率: ${report_MemUsedPercent}
  138. EOF
  139. }
  140. # 获取系统网络信息
  141. get_net_info() {
  142. pri_ipadd=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
  143. pub_ipadd=$(curl ifconfig.me -s)
  144. gateway=$(ip route | grep default | awk '{print $3}')
  145. mac_info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}')
  146. dns_config=$(egrep -v "^$|^#" /etc/resolv.conf)
  147. route_info=$(route -n)
  148. cat << EOF
  149. 【网络信息】
  150. 系统公网地址:${pub_ipadd}
  151. 系统私网地址:${pri_ipadd}
  152. 网关地址:${gateway}
  153. MAC地址:${mac_info}
  154. 路由信息:
  155. ${route_info}
  156. DNS 信息:
  157. ${dns_config}
  158. EOF
  159. }
  160. # 获取系统磁盘信息
  161. get_disk_info() {
  162. disk_info=$(fdisk -l | grep "Disk /dev" | cut -d, -f1)
  163. disk_use=$(df -hTP | awk '$2!="tmpfs"{print}')
  164. disk_percent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
  165. disk_inode=$(df -hiP | awk '$1!="tmpfs"{print}')
  166. cat << EOF
  167. 【磁盘信息】
  168. ${disk_info}
  169. 磁盘使用: ${disk_use}
  170. 磁盘使用百分比: ${disk_percent}
  171. inode信息: ${disk_inode}
  172. EOF
  173. }
  174. # 获取系统用户信息
  175. get_sys_user() {
  176. login_user=$(awk -F: '{if ($NF=="/bin/bash") print $0}' /etc/passwd)
  177. ssh_config=$(egrep -v "^#|^$" /etc/ssh/sshd_config)
  178. sudo_config=$(egrep -v "^#|^$" /etc/sudoers | grep -v "^Defaults")
  179. host_config=$(egrep -v "^#|^$" /etc/hosts)
  180. crond_config=$(for cronuser in /var/spool/cron/*; do
  181. ls ${cronuser} 2> /dev/null | cut -d/ -f5; egrep -v "^$|^#" ${cronuser} 2> /dev/null;
  182. echo "";
  183. done)
  184. cat << EOF
  185. 【用户信息】
  186. 系统登录用户:
  187. ${login_user}
  188. ${line}
  189. ssh 配置信息:
  190. ${ssh_config}
  191. ${line}
  192. sudo 配置用户:
  193. ${sudo_config}
  194. ${line}
  195. 定时任务配置:
  196. ${crond_config}
  197. ${line}
  198. hosts 信息:
  199. ${host_config}
  200. EOF
  201. }
  202. # 获取CPU/内存占用TOP10
  203. get_process_top_info() {
  204. top_title=$(top -b n1 | head -7 | tail -1)
  205. cpu_top10=$(top -b n1 | head -17 | tail -11)
  206. mem_top10=$(top -b n1 | head -17 | tail -10 | sort -k10 -r)
  207. cat << EOF
  208. 【TOP10】
  209. CPU占用TOP10:
  210. ${cpu_top10}
  211. 内存占用TOP10:
  212. ${top_title}
  213. ${mem_top10}
  214. EOF
  215. }
  216. show_dead_process() {
  217. printf "僵尸进程:\n"
  218. ps -al | gawk '{print $2,$4}' | grep Z
  219. }
  220. get_all_info() {
  221. get_systatus_info
  222. echo ${double_line}
  223. get_service_info
  224. echo ${double_line}
  225. get_cpu_info
  226. echo ${double_line}
  227. get_net_info
  228. echo ${double_line}
  229. get_mem_info
  230. echo ${double_line}
  231. get_disk_info
  232. echo ${double_line}
  233. get_process_top_info
  234. echo ${double_line}
  235. get_sys_user
  236. }
  237. main() {
  238. while [[ 1 ]]
  239. do
  240. printMenu
  241. read option
  242. local index=$[ ${option} - 1 ]
  243. case ${options[${index}]} in
  244. "获取系统信息")
  245. get_systatus_info ;;
  246. "获取服务信息")
  247. get_service_info ;;
  248. "获取CPU信息")
  249. get_cpu_info ;;
  250. "获取系统网络信息")
  251. get_net_info ;;
  252. "获取系统内存信息")
  253. get_mem_info ;;
  254. "获取系统磁盘信息")
  255. get_disk_info ;;
  256. "获取CPU/内存占用TOP10")
  257. get_process_top_info ;;
  258. "获取系统用户信息")
  259. get_sys_user ;;
  260. "输出所有信息")
  261. get_all_info > sys.log
  262. printf "${C_GREEN}信息已经输出到 sys.log 中。${C_RESET}\n\n"
  263. ;;
  264. "退出")
  265. exit ;;
  266. *)
  267. clear
  268. echo "抱歉,不支持此选项" ;;
  269. esac
  270. done
  271. }
  272. ######################################## MAIN ########################################
  273. printHeadInfo
  274. main
  275. printFootInfo
  276. printf "${C_RESET}"

​​​​​​​

sed进阶​​​​​​​

  1. #!/bin/bash
  2. #多个空格只保留一个
  3. #sed '/./,/^$/!d' test
  4. #删除开头的空白行
  5. #sed '/./,$!d' test
  6. #删除结尾的空白行
  7. sed '{
  8. :start
  9. /^\n*$/{$d; N; b start}
  10. }' test
  11. #删除html标签
  12. #有问题
  13. #s/<.*>//g
  14. #sed 's/<[^>]*>//g' test1
  15. #sed 's/<[^>]*>//g;/^$/d' test1
  16. #and符号,代表替换命令中的匹配模式,不管预定义模式是什么文本,都可以用and符号替换,and符号会提取匹配替换命令中指定替换模式中的所有字符串
  17. echo "The cat sleeps in his hat" | sed 's/.at/"&"/g'
  18. #替换单独的单词
  19. echo "The System Administrator manual" | sed 's/\(System\) Administrator/\1 user/'
  20. #在长数字中插入逗号
  21. echo "1234567" | sed '{:start; s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/; t start}'
  22. #给文件中的行编号
  23. sed '=' test | sed 'N; s/\n/ /'

开源Linux

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/1020967
推荐阅读
相关标签
  

闽ICP备14008679号