Linux实用运维脚本分享
来源:一口Linux发布时间:2022-06-13866浏览
询问 AI
#查看僵尸进程ps-al | gawk '{print $2,$4}' | grep Z# 匹配电子邮件的地址catindex.html | egrep -o "[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}" > ans.txt#匹配http URLcatindex.html | egrep -o "http://[A-Za-z0-9.]+\.[a-zA-Z]{2,3}" > ans.txt#纯文本形式下载网页lynx-dump www.baidu.com > plain.txt#只打印HTTP头部信息,无须远程下载文件curl--head www.baidu.com#使用POST提交数据curl-d "param2=nickwolfe¶m2=12345" http://www.linuxidc.com/login.cgi#显示分组途经的网关traceroutewww.baidu.com#列出系统中的开放端口以及运行在端口上的服务lsof-i#nc命令建立socket连接#设置监听 nc -l 5555#连接到套接字 nc 192.0.0.1 5555#快速文件传输#接收端 nc -l 5555 > destination_filename#发送端 nc 192.0.0.1 5555 < source_filename#找出指定目录最大的n个文件du-ak target_dir | sort -nrk 1 | head -n 4# du中a为递归,k为kb;sort中n为数字,r为降序,k指定列#向终端中的所有登陆用户发送广播信息catmessage.txt | wall#创建新的screen窗口screen#打印所有的.txt和.pdf文件find. \( -name "*.txt" -o -name "*.pdf" \) -print# -exec command {} \;是连用的,所有符合的都会放置在{}中,去执行command#将文件分割成多个大小为10kb的文件split-b 10k data.file#打印两个文件的交集commA.txt B.txt -3 | sed 's/^\t//'#sed移除空白行sed'/^$/d' file
mysql备份
#!/bin/bashset-eUSER="backup"PASSWORD="backup"# 数据库数据目录 #DATA_DIR="/data/mysql"BIN_INDEX=$DATA_DIR"/mysql-bin.index"# 备份目录 #BACKUP_DIR="/data/backup/mysql"BACKUP_LOG="/var/log/mysql/backup.log"DATE=`date +"%Y%m%d"`TIME=`date +"%Y%m%d%H"`LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`DELETE_BINLOG_TIME="7 day"INCREMENT_INTERVAL="3 hour"note() {printf"[$LOG_TIME] note: $*\n">>$BACKUP_LOG;}warning() {printf"[$LOG_TIME] warning: $*\n">>$BACKUP_LOG;}error() {printf"[$LOG_TIME] error: $*\n">>$BACKUP_LOG;exit1;}full_backup() {localdbs=`ls -l$DATA_DIR| grep"^d"| awk -F" "'{print $9}'`fordbin$dbsdolocalbackup_dir=$BACKUP_DIR"/full/"$dblocalfilename=$db"."$DATElocalbackup_file=$backup_dir"/"$filename".sql"if[ ! -d$backup_dir]thenmkdir -p$backup_dir|| { error"创建数据库$db全量备份目录$backup_dir失败";continue; }note"数据库$db全量备份目录$backup_dir不存在,创建完成";finote"full backup$dbstart ..."mysqldump --user=${USER}--password=${PASSWORD}--flush-logs --skip-lock-tables --quick$db>$backup_file|| { warning"数据库$db备份失败";continue; }cd$backup_dirtar -cPzf$filename".tar.gz"$filename".sql"rm -f$backup_filechown -fR mysql:mysql$backup_dirnote"数据库$db备份成功";note"full backup$dbend."done}increment_backup() {localStartTime=`date"-d$INCREMENT_INTERVALago"+"%Y-%m-%d %H:%M:%S"`localDELETE_BINLOG_END_TIME=`date"-d$DELETE_BINLOG_TIMEago"+"%Y-%m-%d %H:%M:%S"`localdbs=`ls -l$DATA_DIR| grep"^d"| awk -F" "'{print $9}'`mysql -u$USER-p$PASSWORD-e"purge master logs before '$DELETE_BINLOG_END_TIME'"&& note"delete$DELETE_BINLOG_TIMEdays before log";filename=`cat$BIN_INDEX| awk -F"/"'{print $2}'`foriin$filenamedofordbin$dbsdolocalbackup_dir=$BACKUP_DIR"/increment/"$dblocalfilename=$db"."$TIMElocalbackup_file=$backup_dir"/"$filename".sql"if[ ! -d$backup_dir]thenmkdir -p$backup_dir|| { error"创建数据库$db增量备份目录$backup_dir失败";continue; }note"数据库$db增量备份目录$backup_dir不存在,创建完成";finote"increment backup$dbform time$StartTimestart ..."mysqlbinlog -d$db--start-datetime="$StartTime"$DATA_DIR/$i>>$backup_file|| { warning"数据库$db备份失败";continue; }note"increment backup$dbend."donedonefordbin$dbsdolocalbackup_dir=$BACKUP_DIR"/increment/"$dblocalfilename=$db"."$TIMElocalbackup_file=$backup_dir"/"$filename".sql"cd$backup_dirtar -cPzf$filename".tar.gz"$filename".sql"rm -f$backup_filenote"数据库$db备份成功";done}case"$1"infull)full_backup;;increment)increment_backup;;*)exit2;;esacexit1
目录备份
#!/bin/bash### 时间DATE=$(date'+%Y-%m-%d_%H_%M_%S')# 备份目录BACKUPDIR="/home/backups"# 需要备份的目录SORFILE=/opt# 目标文件名DESFILE=/home/backups/$SORFILE.$(date'+%Y-%m-%d_%H_%M_%S').zip[ ! -d$BACKUPDIR] && mkdir -p$BACKUPDIRcd$BACKUPDIRecho"start backup$SORFILE..."sleep 3#echo "$DESFILE"#tar cvf $DESFILE $SORFILE#gzip -f .zip $DESFILEzip -r$DESFILE$SORFILE&>/dev/nullif["$?"=="0"]thenecho$(date +%Y-%m-%d)" zip sucess">>backup.logelseecho$(date +%Y-%m-%d)" zip failed">>backup.logexit0fi# 删除3天前的备份find$BACKUPDIR-typef -ctime +3 | xargs rm -rf
PING查询
#!/bin/bash#用途:根据网络配置对网络地址192.168.0进行修改,检查是否是活动状态#{start..end}shell扩展生成一组地址foripin192.168.0.{1..255}do(ping$ip-c 2 &> /dev/null# > 标准输出重定向,和1>一致# 2>&1 将标准错误输出 重定向 到标准输出# &>file 将标准输出和标准错误输出都重定向到文件filename中if[ $? -eq 0 ];thenecho$ipis alivefi)&donewait#并行ping,加速
磁盘IO检查
##iostat是查看磁盘活动统计情况##显示所有设备负载情况 r/s: 每秒完成的读 I/O 设备次数。即 rio/s;w/s: 每秒完成的写 I/O 设备次数。即 wio/s等iostat##每隔2秒刷新磁盘IO信息,并且每次显示3次iostat2 3#显示某个磁盘的IO信息iostat-d sda1##显示tty和cpu信息iostat-t##以M为单位显示磁盘IO信息iostat-m##查看TPS和吞吐量信息 kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;iostat-d -k 1 1#查看设备使用率(%util)、响应时间(await)iostat-d -x -k 1 1#查看CPU状态iostat-c 1 3#统计进程(pid)的stat,进程的stat自然包括进程的IO状况pidstat#只显示IOpidstat-d 1#-d IO 信息,-r 缺页及内存信息-u CPU使用率-t 以线程为统计单位1 1秒统计一次pidstat-u -r -d -t 1#文件级IO分析,查看当前文件由哪些进程打开lsofls/proc/pid/fd#利用 sar 报告磁盘 I/O 信息DEV 正在监视的块设备 tps 每秒钟物理设备的 I/O 传输总量 rd_sec/s 每秒从设备读取的扇区数量 wr_sec/s 每秒向设备写入的扇区数量 avgrq-sz I/O 请求的平均扇区数#avgqu-sz I/O 请求的平均队列长度 await I/O 请求的平均等待时间,单位为毫秒 svctm I/O 请求的平均服务时间,单位为毫秒 %util I/O 请求所占用的时间的百分比,即设备利用率sar-pd 10 3#iotop top的io版iotop#查看页面缓存信息 其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加 一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。cat/proc/meminfo#查看有多少个pdflush进程 Linux 用pdflush进程把数据从缓存页写入硬盘#pdflush的行为受/proc/sys/vm中的参数的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个(更多个)线程。如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题cat/proc/sys/vm/nr_pdflush_threads#查看I/O 调度器#调度算法#noop anticipatory deadline [cfq]#deadline : deadline 算法保证对既定的IO请求以最小的延迟时间。#anticipatory:有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。对数据库应用很糟糕,而对于Web Server等则会表现不错。#cfq: 对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。#noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。cat/sys/block/[disk]/queue/scheduler#改变IO调度器$echo deadline > /sys/block/sdX/queue/scheduler#提高调度器请求队列的$echo 4096 > /sys/block/sdX/queue/nr_requests
性能相关
#查看当前系统loaduptime#查看系统状态和每个进程的系统资源使用状况top#可视化显示CPU的使用状况htop#查看每个CPU的负载信息mpstat-P ALL 1#每隔1秒查看磁盘IO的统计信息iostat-xkdz 1#每隔一秒查看虚拟内存的使用信息vmstat1#查看内存使用统计信息free#查看网络使用信息nicstat-z 1#类似vmstat的显示优化的工具dstat1#查看系统活动状态,比如系统分页统计,块设备IO统计等sar#网络连接状态查看netstat-s#进程资源使用信息查看pidstat1pidstat-d 1#查看某个进程的系统调用信息 -p后面是进程id,-tttT 进程系统后的系统调用时间strace-tttT -p 12670#统计IO设备输入输出的系统调用信息strace-c dd if=/dev/zero of=/dev/null bs=512 count=1024k#tcpdump 查看网络数据包tcpdump-nr /tmp/out.tcpdump#块设备的读写事件信息统计btrace/dev/sdb#iotop查看某个进程的IO操作统计信息iotop-bod5#slabtop 查看内核 slab内存分配器的使用信息slabtop-sc#系统参数设置sysctl-a#系统性能指标统计信息perfstat gzip file1#系统cpu活动状态查看perfrecord -a -g -F 997 sleep 10
进程相关
## processes 进程管理##ps查看当前系统执行的线程列表,进行瞬间状态,不是连续状态,连续状态需要使用top名称查看 更多常用参数请使用 man ps查看ps##显示所有进程详细信息ps aux##-u 显示某个用户的进程列表ps -f -u www-data## -C 通过名字或者命令搜索进程ps -C apache2## --sort 根据进程cpu使用率降序排列,查看前5个进程 -pcpu表示降序 pcpu升序ps aux --sort=-pcpu | head -5##-f 用树结构显示进程的层次关系,父子进程情况下ps -f --forest -C apache2##显示一个父进程的所有子进程ps -o pid,uname,comm -C apache2ps --ppid 2359##显示一个进程的所有线程 -L 参数ps -p 3150 -L##显示进程的执行时间 -o参数ps -e -o pid,comm,etime##watch命令可以用来实时捕捉ps显示进程watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'##jobs 查看后台运行的进程 jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息jobs##查看后台运营的进程号jobs -p##查看现在被终止或者退出的进程号jobs -n##kill命令 终止一个前台进程可以使用Ctrl+C键 kill 通过top或者ps获取进程id号 kill [-s 信号 | -p ] [ -a ] 进程号 ...##发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。关闭进程号12的进程kill 12##等同于在前台运行PID为123的进程时按下Ctrl+C键kill -2 123##如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程kill -9 123##列出所有信号名称##HUP 1 终端断线##INT 2 中断(同 Ctrl + C)##QUIT 3 退出(同 Ctrl + \)##TERM 15 终止##KILL 9 强制终止##CONT 18 继续(与STOP相反, fg/bg命令)##STOP 19 暂停(同 Ctrl + Z)kill -l##得到指定信号的数值kill -l KILL##杀死指定用户所有进程kill -u peidalinuxkill -9 $(ps -ef | grep peidalinux)##将后台中的命令调至前台继续运行 将进程123调至前台执行fg 123##将一个在后台暂停的命令,变成继续执行bg 123##该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思 下面输出被重定向到myout.file文件中nohup command > myout.file 2>&1 &##at:计划任务,在特定的时间执行某项工作,在特定的时间执行一次。## 格式:at HH:MM YYYY-MM-DD //HH(小时):MM(分钟) YYYY(年)-MM(月份)-DD(日)##HH[am pm]+D(天) days //HH(小时)[am(上午)pm(下午)]+days(天)at 12:00(时间) //at命令设定12:00执行一项操作#at>useradd aaa //在at命令里设定添加用户aaa#ctrl+d //退出at命令#tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一个用户aaa##计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务。atq##启动计划任务后,如果不想启动设定好的计划任务可以使用atrm命令删除。atrm 1 //删除计划任务1##pstree命令:列出当前的进程,以及它们的树状结构 格式:pstree [选项] [pid|user]pstree##nice命令:改变程序执行的优先权等级 应用程序优先权值的范围从-20~19,数字越小,优先权就越高。一般情况下,普通应用程序的优先权值(CPU使用权值)都是0,如果让常用程序拥有较高的优先权等级,自然启动和运行速度都会快些。需要注意的是普通用户只能在0~19之间调整应用程序的优先权值,只有超级用户有权调整更高的优先权值(从-20~19)。nice [-n <优先等级>][--help][--version][命令]nice -n 5 ls##sleep命令:使进程暂停执行一段时间date;sleep 1m;date##renice命令 renice命令允许用户修改一个正在运行进程的优先权。利用renice命令可以在命令执行时调整其优先权。##其中,参数number与nice命令的number意义相同。(1) 用户只能对自己所有的进程使用renice命令。(2) root用户可以在任何进程上使用renice命令。(3) 只有root用户才能提高进程的优先权renice -5 -p 5200 #PID为5200的进程nice设为-5##pmap命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息 #pmap PIDpmap 20367
javadump.sh
#!/bin/shDUMP_PIDS=`ps --no-heading -C java -f --width 1000 |awk'{print $2}'`if[ -z"$DUMP_PIDS"];thenecho"The server$HOST_NAMEis not started!"exit1;fiDUMP_ROOT=~/dumpif[ ! -d$DUMP_ROOT];thenmkdir$DUMP_ROOTfiDUMP_DATE=`date +%Y%m%d%H%M%S`DUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATEif[ ! -d$DUMP_DIR];thenmkdir$DUMP_DIRfiforPIDin$DUMP_PIDS;do#Full thread dump 用来查线程占用,死锁等问题$JAVA_HOME/bin/jstack$PID>$DUMP_DIR/jstack-$PID.dump 2>&1echo-e".\c"#打印出一个给定的Java进程、Java core文件或远程Debug服务器的Java配置信息,具体包括Java系统属性和JVM命令行参数。$JAVA_HOME/bin/jinfo$PID>$DUMP_DIR/jinfo-$PID.dump 2>&1echo-e".\c"#jstat能够动态打印jvm(Java Virtual Machine Statistics Monitoring Tool)的相关统计信息。如young gc执行的次数、full gc执行的次数,各个内存分区的空间大小和可使用量等信息。$JAVA_HOME/bin/jstat -gcutil$PID>$DUMP_DIR/jstat-gcutil-$PID.dump 2>&1echo-e".\c"$JAVA_HOME/bin/jstat -gccapacity$PID>$DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1echo-e".\c"#未指定选项时,jmap打印共享对象的映射。对每个目标VM加载的共享对象,其起始地址、映射大小及共享对象文件的完整路径将被打印出来,$JAVA_HOME/bin/jmap$PID>$DUMP_DIR/jmap-$PID.dump 2>&1echo-e".\c"#-heap打印堆情况的概要信息,包括堆配置,各堆空间的容量、已使用和空闲情况$JAVA_HOME/bin/jmap -heap$PID>$DUMP_DIR/jmap-heap-$PID.dump 2>&1echo-e".\c"#-dump将jvm的堆中内存信息输出到一个文件中,然后可以通过eclipse memory analyzer进行分析#注意:这个jmap使用的时候jvm是处在假死状态的,只能在服务瘫痪的时候为了解决问题来使用,否则会造成服务中断。$JAVA_HOME/bin/jmap -dump:format=b,file=$DUMP_DIR/jmap-dump-$PID.dump$PID2>&1echo-e".\c"#显示被进程打开的文件信息if[ -r /usr/sbin/lsof ];then/usr/sbin/lsof -p$PID>$DUMP_DIR/lsof-$PID.dumpecho-e".\c"fidone#主要负责收集、汇报与存储系统运行信息的。if[ -r /usr/bin/sar ];then/usr/bin/sar >$DUMP_DIR/sar.dumpecho-e".\c"fi#主要负责收集、汇报与存储系统运行信息的。if[ -r /usr/bin/uptime ];then/usr/bin/uptime >$DUMP_DIR/uptime.dumpecho-e".\c"fi#内存查看if[ -r /usr/bin/free ];then/usr/bin/free -t >$DUMP_DIR/free.dumpecho-e".\c"fi#可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。if[ -r /usr/bin/vmstat ];then/usr/bin/vmstat >$DUMP_DIR/vmstat.dumpecho-e".\c"fi#报告与CPU相关的一些统计信息if[ -r /usr/bin/mpstat ];then/usr/bin/mpstat >$DUMP_DIR/mpstat.dumpecho-e".\c"fi#报告与IO相关的一些统计信息if[ -r /usr/bin/iostat ];then/usr/bin/iostat >$DUMP_DIR/iostat.dumpecho-e".\c"fi#报告与网络相关的一些统计信息if[ -r /bin/netstat ];then/bin/netstat >$DUMP_DIR/netstat.dumpecho-e".\c"fiecho"OK!"
常用工具安装
#!/usr/bin/env bash# ---------------------------------------------------------------------------------# 控制台颜色BLACK="\033[1;30m"RED="\033[1;31m"GREEN="\033[1;32m"YELLOW="\033[1;33m"BLUE="\033[1;34m"PURPLE="\033[1;35m"CYAN="\033[1;36m"RESET="$(tput sgr0)"# ---------------------------------------------------------------------------------printf"${BLUE}\n"cat << EOF#################################################################################### 安装常用命令工具# 命令工具清单如下:# 核心工具:df、du、chkconfig# 网络工具:ifconfig、netstat、route、iptables# IP工具:ip、ss、ping、tracepath、traceroute# DNS工具:dig、host、nslookup、whois# 端口工具:lsof、nc、telnet# 下载工具:curl、wget# 编辑工具:emacs、vim# 流量工具:iftop、nethogs# 抓包工具:tcpdump# 压缩工具:unzip、zip# 版本控制工具:git、subversion####################################################################################EOFprintf"${RESET}\n"printf"\n${GREEN}>>>>>>>>> 安装常用命令工具开始${RESET}\n"# 核心工具printf"\n${CYAN}>>>> install coreutils(df、du)${RESET}\n"yum install -y coreutilsprintf"\n${CYAN}>>>> install chkconfig${RESET}\n"yum install -y chkconfig# 网络工具printf"\n${CYAN}>>>> install net-tools(ifconfig、netstat、route)${RESET}\n"yum install -y net-toolsprintf"\n${CYAN}>>>> install iptables${RESET}\n"yum install -y iptables# IP工具printf"\n${CYAN}>>>> install iputils(ping、tracepath)${RESET}\n"yum install -y iputilsprintf"\n${CYAN}>>>> install traceroute${RESET}\n"yum install -y tracerouteprintf"\n${CYAN}>>>> install iproute(ip、ss)${RESET}\n"yum install -y iproute# 端口工具printf"\n${CYAN}>>>> install lsof${RESET}\n"yum install -y lsofprintf"\n${CYAN}>>>> install nc${RESET}\n"yum install -y ncprintf"\n${CYAN}>>>> install netstat${RESET}\n"yum install -y netstat# DNS工具printf"\n${CYAN}>>>> install bind-utils(dig、host、nslookup)${RESET}\n"yum install -ybind-utilsprintf"\n${CYAN}>>>> install whois${RESET}\n"yum install -y whois# 下载工具printf"\n${CYAN}>>>> install curl${RESET}\n"yum install -y curlprintf"\n${CYAN}>>>> install wget${RESET}\n"yum install -y wget# 编辑工具printf"\n${CYAN}>>>> install emacs${RESET}\n"yum install -y emacsprintf"\n${CYAN}>>>> install vim${RESET}\n"yum install -y vim# 流量工具printf"\n${CYAN}>>>> install iftop${RESET}\n"yum install -y iftopprintf"\n${CYAN}>>>> install nethogs${RESET}\n"yum install -y nethogs# 抓包工具printf"\n${CYAN}>>>> install tcpdump${RESET}\n"yum install -y tcpdump# 压缩工具printf"\n${CYAN}>>>> install unzip${RESET}\n"yum install -y unzip# 版本控制工具printf"\n${CYAN}>>>> install git${RESET}\n"yum install -y gitprintf"\n${CYAN}>>>> install subversion${RESET}\n"yum install -y subversionprintf"\n${GREEN}<<<<<<<< 安装常用命令工具结束${RESET}\n"
常用lib库安装
#!/usr/bin/env bash# ---------------------------------------------------------------------------------# 控制台颜色BLACK="\033[1;30m"RED="\033[1;31m"GREEN="\033[1;32m"YELLOW="\033[1;33m"BLUE="\033[1;34m"PURPLE="\033[1;35m"CYAN="\033[1;36m"RESET="$(tput sgr0)"# ---------------------------------------------------------------------------------printf"${BLUE}\n"cat << EOF#################################################################################### 安装常见 lib# 如果不知道命令在哪个 lib,可以使用 yum search xxx 来查找# lib 清单如下:# gcc gcc-c++ kernel-devel libtool# openssl openssl-devel# zlib zlib-devel# pcre###################################################################################EOFprintf"${RESET}\n"printf"\n${GREEN}>>>>>>>>> 安装常见 lib 开始${RESET}\n"printf"\n${CYAN}>>>> install gcc gcc-c++ kernel-devel libtool${RESET}\n"yum -y install make gcc gcc-c++ kernel-devel libtoolprintf"\n${CYAN}>>>> install openssl openssl-devel${RESET}\n"yum -y install make openssl openssl-develprintf"\n${CYAN}>>>> install zlib zlib-devel${RESET}\n"yum -y install make zlib zlib-develprintf"\n${CYAN}>>>> install pcre${RESET}\n"yum -y install pcreprintf"\n${GREEN}<<<<<<<< 安装常见 lib 结束${RESET}\n"
系统检查脚本
#!/usr/bin/env bash############################################################################### console colorC_RESET="$(tput sgr0)"C_BLACK="\033[1;30m"C_RED="\033[1;31m"C_GREEN="\033[1;32m"C_YELLOW="\033[1;33m"C_BLUE="\033[1;34m"C_PURPLE="\033[1;35m"C_CYAN="\033[1;36m"C_WHITE="\033[1;37m"##############################################################################printf"${C_PURPLE}"cat << EOF#################################################################################### 系统信息检查脚本###################################################################################EOFprintf"${C_RESET}"[[ $(id -u) -gt 0 ]] &&echo"请用root用户执行此脚本!"&&exit1sysversion=$(rpm -q centos-release | cut -d- -f3)double_line="==============================================================="line="----------------------------------------------"# 打印头部信息printHeadInfo() {cat << EOF+---------------------------------------------------------------------------------+| 欢迎使用 【系统信息检查脚本】 |+---------------------------------------------------------------------------------+EOF}# 打印尾部信息printFootInfo() {cat << EOF+---------------------------------------------------------------------------------+| 脚本执行结束,感谢使用!|+---------------------------------------------------------------------------------+EOF}options=("获取系统信息""获取服务信息""获取CPU信息""获取系统网络信息""获取系统内存信息""获取系统磁盘信息""获取CPU/内存占用TOP10""获取系统用户信息""输出所有信息""退出")printMenu() {printf"${C_BLUE}"printf"主菜单:\n"foriin"${!options[@]}";doindex=`expr${i}+ 1`val=`expr${index}% 2`printf"\t(%02d) %-30s""${index}""${options[$i]}"if[[${val}-eq 0 ]];thenprintf"\n"fidoneprintf"${C_BLUE}请输入需要执行的指令:\n"printf"${C_RESET}"}# 获取系统信息get_systatus_info() {sys_os=$(uname -o)sys_release=$(cat /etc/redhat-release)sys_kernel=$(uname -r)sys_hostname=$(hostname)sys_selinux=$(getenforce)sys_lang=$(echo$LANG)sys_lastreboot=$(who -b | awk'{print $3,$4}')sys_runtime=$(uptime | awk'{print $3,$4}'| cut -d, -f1)sys_time=$(date)sys_load=$(uptime | cut -d: -f5)cat << EOF【系统信息】系统:${sys_os}发行版本:${sys_release}系统内核:${sys_kernel}主机名:${sys_hostname}selinux状态:${sys_selinux}系统语言:${sys_lang}系统当前时间:${sys_time}系统最后重启时间:${sys_lastreboot}系统运行时间:${sys_runtime}系统负载:${sys_load}EOF}# 获取CPU信息get_cpu_info() {Physical_CPUs=$(grep"physical id"/proc/cpuinfo | sort | uniq | wc -l)Virt_CPUs=$(grep"processor"/proc/cpuinfo | wc -l)CPU_Kernels=$(grep"cores"/proc/cpuinfo | uniq | awk -F': ''{print $2}')CPU_Type=$(grep"model name"/proc/cpuinfo | awk -F': ''{print $2}'| sort | uniq)CPU_Arch=$(uname -m)cat << EOF【CPU信息】物理CPU个数:$Physical_CPUs逻辑CPU个数:$Virt_CPUs每CPU核心数:$CPU_KernelsCPU型号:$CPU_TypeCPU架构:$CPU_ArchEOF}# 获取服务信息get_service_info() {port_listen=$(netstat -lntup | grep -v"Active Internet")kernel_config=$(sysctl -p 2> /dev/null)if[[${sysversion}-gt 6 ]];thenservice_config=$(systemctl list-unit-files --type=service --state=enabled | grep"enabled")run_service=$(systemctl list-units --type=service --state=running | grep".service")elseservice_config=$(/sbin/chkconfig | grep -E":on|:启用"| column -t)run_service=$(/sbin/service --status-all | grep -E"running")ficat << EOF【服务信息】${service_config}${line}运行的服务:${run_service}${line}监听端口:${port_listen}${line}内核参考配置:${kernel_config}EOF}# 获取系统内存信息get_mem_info() {check_mem=$(free -m)MemTotal=$(grep MemTotal /proc/meminfo | awk'{print $2}')#KBMemFree=$(grep MemFree /proc/meminfo | awk'{print $2}')#KBletMemUsed=MemTotal-MemFreeMemPercent=$(awk"BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")report_MemTotal="$((MemTotal/1024))""MB"#内存总容量(MB)report_MemFree="$((MemFree/1024))""MB"#内存剩余(MB)report_MemUsedPercent=$(free | sed -n'2p'| gawk'x = int(( $3 / $2 ) * 100) {print x}'| sed's/$/%/')cat << EOF【内存信息】内存总容量(MB):${report_MemTotal}内存剩余量(MB):${report_MemFree}内存使用率:${report_MemUsedPercent}EOF}# 获取系统网络信息get_net_info() {pri_ipadd=$(ip addr | awk'/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')pub_ipadd=$(curl ifconfig.me -s)gateway=$(ip route | grep default | awk'{print $3}')mac_info=$(ip link | egrep -v"lo"| grep link | awk'{print $2}')dns_config=$(egrep -v"^$|^#"/etc/resolv.conf)route_info=$(route -n)cat << EOF【网络信息】系统公网地址:${pub_ipadd}系统私网地址:${pri_ipadd}网关地址:${gateway}MAC地址:${mac_info}路由信息:${route_info}DNS 信息:${dns_config}EOF}# 获取系统磁盘信息get_disk_info() {disk_info=$(fdisk -l | grep"Disk /dev"| cut -d, -f1)disk_use=$(df -hTP | awk'$2!="tmpfs"{print}')disk_percent=$(free | sed -n'2p'| gawk'x = int(( $3 / $2 ) * 100) {print x}'| sed's/$/%/')disk_inode=$(df -hiP | awk'$1!="tmpfs"{print}')cat << EOF【磁盘信息】${disk_info}磁盘使用:${disk_use}磁盘使用百分比:${disk_percent}inode信息:${disk_inode}EOF}# 获取系统用户信息get_sys_user() {login_user=$(awk -F:'{if ($NF=="/bin/bash") print $0}'/etc/passwd)ssh_config=$(egrep -v"^#|^$"/etc/ssh/sshd_config)sudo_config=$(egrep -v"^#|^$"/etc/sudoers | grep -v"^Defaults")host_config=$(egrep -v"^#|^$"/etc/hosts)crond_config=$(forcronuserin/var/spool/cron/*;dols${cronuser}2> /dev/null | cut -d/ -f5; egrep -v"^$|^#"${cronuser}2> /dev/null;echo"";done)cat << EOF【用户信息】系统登录用户:${login_user}${line}ssh 配置信息:${ssh_config}${line}sudo 配置用户:${sudo_config}${line}定时任务配置:${crond_config}${line}hosts 信息:${host_config}EOF}# 获取CPU/内存占用TOP10get_process_top_info() {top_title=$(top -b n1 | head -7 | tail -1)cpu_top10=$(top -b n1 | head -17 | tail -11)mem_top10=$(top -b n1 | head -17 | tail -10 | sort -k10 -r)cat << EOF【TOP10】CPU占用TOP10:${cpu_top10}内存占用TOP10:${top_title}${mem_top10}EOF}show_dead_process() {printf"僵尸进程:\n"ps -al | gawk'{print $2,$4}'| grep Z}get_all_info() {get_systatus_infoecho${double_line}get_service_infoecho${double_line}get_cpu_infoecho${double_line}get_net_infoecho${double_line}get_mem_infoecho${double_line}get_disk_infoecho${double_line}get_process_top_infoecho${double_line}get_sys_user}main() {while[[ 1 ]]doprintMenureadoptionlocalindex=$[${option}- 1 ]case${options[${index}]}in"获取系统信息")get_systatus_info ;;"获取服务信息")get_service_info ;;"获取CPU信息")get_cpu_info ;;"获取系统网络信息")get_net_info ;;"获取系统内存信息")get_mem_info ;;"获取系统磁盘信息")get_disk_info ;;"获取CPU/内存占用TOP10")get_process_top_info ;;"获取系统用户信息")get_sys_user ;;"输出所有信息")get_all_info > sys.logprintf"${C_GREEN}信息已经输出到 sys.log 中。${C_RESET}\n\n";;"退出")exit;;*)clearecho"抱歉,不支持此选项";;esacdone}######################################## MAIN ########################################printHeadInfomainprintFootInfoprintf"${C_RESET}"
sed进阶
#!/bin/bash#多个空格只保留一个#sed '/./,/^$/!d' test#删除开头的空白行#sed '/./,$!d' test#删除结尾的空白行sed'{:start/^\n*$/{$d; N; b start}}'test#删除html标签#有问题#s/<.*>//g#sed 's/<[^>]*>//g' test1#sed 's/<[^>]*>//g;/^$/d' test1#and符号,代表替换命令中的匹配模式,不管预定义模式是什么文本,都可以用and符号替换,and符号会提取匹配替换命令中指定替换模式中的所有字符串echo"The cat sleeps in his hat"| sed's/.at/"&"/g'#替换单独的单词echo"The System Administrator manual"| sed's/\(System\) Administrator/\1 user/'#在长数字中插入逗号echo"1234567"| sed'{:start; s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/; t start}'#给文件中的行编号sed'='test| sed'N; s/\n/ /'
针对应届生和转行的朋友,彭老师从头制作了开发板,

并录制了基于Linux的物联网综合实战课程,通过项目讲解Linux、多进程、多线程、单片机、zigbee、Web服务器、视频流服务器、摄像头、html、css、javascript、数据库sqlite等知识点。
新闻来源:一口Linux,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
