当前位置: 首页 > Linux

运维工具箱总结

时间:2023-04-06 23:08:27 Linux

概述本文主要收集了个人工作以来收集整理的一些Linux运维工具,用于排查、定位和处理各种问题,包括分析网络连接、查找占用内存高的进程等etc.Shell脚本工具双引号和单引号单引号是强引号,会忽略所有被引号字符的特殊处理,被引号字符原样使用;双引号是弱引号,会对一些被引用的字符进行特殊处理,包括以下几种情况:$加上变量名可以得到变量的值,例如:$PWD反引号和$()括起来的字符会被当作执行后替换原字符的命令,例如echo"$(echohelloworld)"需要用到字符($"\)时必须进行转义,即前面要加上;script返回完整路径,包括文件名:FILEPATH="$(readlink-f$0)"获取脚本所在目录的路径:BASEDIR="$(dirname$(readlink-f$0))"环境variable设置变量,只对当前进程有效:ENV=debug设置环境变量,可以被子进程继承:exportENV=debugSed&awk-stringliteralmanipulationreplacetext:sed's/originalstring/replacestring/'sed和awk使用外部变量:x=MMsed's/AB/'$x'/g'filenameorsed's/AB/'"$x"'/g'filenamesed's/'"$val"'//'文件名awk'{print"'$x'"}'文件名a=2;b=3;awk-vA=$a-vB=$b'BEGIN{printf("%d,%d\n",A,B);}'浮点数计算使用bc:$a=2;b=3;echo"scale=2;$a/$b"|bc.66$a=2;b=3;echo"scale=2;$a/$b"|bc-l.66使用awk:$a=2;b=3;awk'BEGIN{printf("%.2f\n","'$a'"/"'$b'");}'0.67字符串操作删除前导空格:line="123"echo"A${line}B"line=`echo"$line"|xargs`echo"A${line}B"大小写转换:A="aBc"echo$AA="${A,,}"echo$A#转为小写A="aBc"echo$AA="${A^^}"echo$A#转为大写-敏感比较:A1="ab"A2="Ab"shopt-snocasematch[["$A1"="$A2"]];回声$?shopt-unocasematch#或以下A1="ab"A2="Ab"test"${A1,,}"="${A2,,}";echo$?#或以下A1="ab"A2="Ab"[["${A1,,}"="${A2,,}"]];echo$?取字符串的长度:~>str="abcdef"~>strlen=${#str}~>echo$strlen6遍历字符串的每个字符:~>str="abcdef"~>strlen=${#str}~>echo$strlen6~>for((i=0;i<$strlen;++i))doecho${str:$i:1};doneabcdef判断字符串是否为数字:str1="123abc"str2="123000"$(expr$str1+0>/dev/null2>&1)echo$?$(expr$str2+0>/dev/null2>&1)echo$?搜索操作searchorrelation:psaux|grep-E'abc|xyz'searchandrelation:psaux|grep"abc.*xyz"#orpsaux|grep“abc”|grep"xyz"查找进程以查看所有正在运行的进程:psaux列出所有正在运行的进程,包括完整的命令字符串:psauxww搜索与字符串匹配的进程:psaux|grepSTRING附加完整格式列出当前用户的所有进程:ps--user$(id-u)-F以树形式列出当前用户的所有进程:ps--user$(id-u)f获取进程的父节点PID:ps-oppid=-ppidawkgetIP和端口号:node="127.0.0.1:2019"eval$(echo"$node"|awk-F[\\:,\;\t]+'{printf("ip=%s\nport=%s\n",$1,$2);}')echo$ipecho$port获取指定网卡上的IP地址:ethX=eth1echo$ethXip=`netstat-ie|awk-F'[:]+''BEGIN{ok=0;}{if(match($0,"'$ethX'"))ok=1;如果((1ok)&&匹配($0,"inet")){ok=0;如果(7NF)printf("%s\n",$3);否则printf("%s\n",$4);}}'`echo$iplogrotationlogrotateLinux系统自带的日志轮转工具logrotate由两部分组成:一是命令行工具logrotate,二是后台服务rsyslogd使用rsyslogd,只需要简单的配置实现日志轮转rsyslogd的配置文件是/etc/logrotate.conf,但是一般不建议直接修改logrotate.conf,而是在目录/etc/logrotate.d下添加文件的方式。logrotate.conf会包含logrotate.d目录下的所有文件,语法一致,不同的是logrotate.conf定义了默认配置,而logrotate.d目录是专有配置。下面是配置日志轮转的demo:#cat/etc/logrotate.d/redis/usr/local/redis/log/redis-6379.log/usr/local/redis/log/redis-6380.log/usr/local/redis/log/redis-6381.log{rotate2minsize100Mnocompressmissingokcreate0664redisredisnotifempty}设备工具查看网卡型号:lspci|grep-iethernet查看所有硬件信息:dmidecode查看CPU:lscpu查看主板:lscpi查看SCSI卡:lsscsi系统工具systemctl系统管理关机:systemctlpoweroff重启:systemctlreboot进入单用户模式:systemctlrescue查看系统启动时间:systemd-analyze列出当前登录用户:loginctllist-users查看用户根状态:loginctluser-statusroot查看系统状态:systemctlstatus单元管理:查看服务单元:systemctlstatusmysql.service查看单元依赖:systemctllist-dependenciescrond.servicejournalctl在systemd出现之前,linux系统和各个应用的日志是分开管理的,systemd已经开始统一管理所有Unit的启动日志,让你只用一个就可以查看所有内核和应用的日志journalctl命令查看日志:查看所有日志(包括内核和应用日志):journalctl只查看内核日志,以JSON格式输出,不分页输出:journalctl-k-ojson--no-pager查看系统启动log:journalctl-b查看日志占用的磁盘大小:jourctl--disk-usage查看指定时间的日志:journalctl--since"10minago"journalctl--since="2019-11-2219:50:22"journalctl--sinceyesterdayjournalctl--since"2019-11-20"--until"2019-11-2110:00"查看指定进程日志:journalctl_PID=`pidofcrond`查看指定用户日志:journalctl_UID=`id-r-uroot`--sincetoday重启服务Linux不同发行版,重启方式可能不同,以Nginx为例:servicenginxrestartsysctmctlrestartnginxwhereservice是旧的重启服务模式,而systemctl是新的重启服务模式。service是一个脚本,systemctl是一个可执行程序。活动报告,最全面的系统性能分析工具之一,也可用于查看网络流量vmstat-系统级内存监控工具,报告有关进程、内存、分页、块IO、陷阱、磁盘和CPU活动的信息。显示虚拟内存统计:vmstat每2秒显示5次报告:vmstat25iostat-系统级磁盘IO监控工具显示自系统启动以来的CPU和磁盘统计报告:iostat显示CPU和磁盘统计报告,单位换算为兆字Section:iostat-m显示设备“sda”的磁盘名称的扩展磁盘统计信息:iostat-xNsdaiotop-进程级磁盘IO监控工具mpstat-报告CPU统计信息每2秒显示一次CPU统计信息:mpstat2in2seconds时间间隔,一个接一个地显示来自给定处理器的5个报告:mpstat-P025查看系统中断cat/proc/interrupts查看网卡中断grepeth0/proc/interrupts|awk'{print$NF}'查看中断affinitycat/proc/irq/74/smp_affinity#以中断74为例lsof-列出打开的文件和对应的进程查找打开本地端口的进程:lsof-i:PORT查找打开给定文件的进程:lsof/path/to/file只输出进程号(PID):lsof-t/path/to/file列出指定用户打开的文件:lsof-uusername列出指定命令或进程打开的文件:lsof-cprocess_or_command_name列出打开给定其PID,按特定进程的文件:lsof-pPID列出目录中的打开文件:lsof+Dpath/to/directory查找侦听本地TCP端口的进程:lsof-iTCP:port-sTCP:LISTENfuser-Display当前使用文件或套接字的进程ID查看持有TCP2019端口的进程:fuser-v-ntcp2019杀死所有打开文件/tmp/test的进程:fuser-m-k/tmp/test查看文件/tmp/test被那些进程打开:fuser-um/tmp/testfree-在系统屏幕中显示空闲和已用内存,byobu和tmux-分屏工具dmesg-将内核信息写入标准输出multitail-同时监控多文件进程的工具工具pwdx类似于tail-type打印进程的工作目录pidof——查看进程IDnice和ionice优先级调整工具nice是进程CPU优先级查看和调整工具,ionice是进程IO优先级查看和调整工具pstack——查看调用栈性能工具valgrind和qcachegrind内存分析Tool一个开源的内存分析和性能分析工具。qcachegrind是一个valgrind辅助工具,可以直观的查看valgrind性能分析结果。perf-Linux性能分析工具Linux自带一个强大的性能分析工具,可以结合火焰图使用。用法如:perftop-ppid。自带生成SVG格式的时间图图形化工具,也可以结合FlameGraph生成火焰图。记录一段时间的进程性能统计:perfrecord-ppid-g-eevent-ologfileperfreport-ilogfileab,tsung,siege-压力测试工具网络工具netstat和ssss是一个网络连接查看工具,可以替代netstat(套接字统计信息)。查看TCP监控:netstat-lpnt查看TCP连接:netstat-lpnaifconfigandipsetanIP:ipaddradd192.168.31.13/24deveth1查看设置的IP是否生效:ipaddrshoweth1deleteIP:ipaddrdel192.168。0.121/24deveth1查看路由表:iprouteshowtcpdump-网络流量监控列出可用网络接口:tcpdump-D捕获特定接口流量:tcpdump-ieth0捕获所有TCP流量并在控制台中显示内容(ASCII):tcpdump-Atcp捕获来自或流向主机的流量:tcpdumphostwww.example.com捕获来自特定接口、源、目标和目标端口的流量:tcpdump-ieth0src192.168.1.1anddst192.168.1.2anddstport80捕获网络流量:tcpdumpnet192.168.1.0/24抓取除端口22以外的所有流量并保存到文件中:tcpdump-wdumpfile.pcapnotport22从文件中读取流量数据:tcpdump-rdumpfile.pcapiftop-网络带宽监控socat-the多功能网络工具全称SocketCAT,是netcat的增强版/proc文件系统/proc/meminfo:内存大小和使用信息/proc/cpuinfo:CPU数量和频率等信息/proc/pidand/proc/PID/maps:进程的各种信息,其中PID为进程ID,假设进程ID为2019,路径为“/proc/2019”。一个进程创建和打开的文件描述符都在/proc/PID/fd下。以Linux的init进程为例:ls/proc/1/fd011011121314151617220212224252627282933031323334373839456789/proc/irq/proc/irq/:该目录存放以IRQ号命名的目录,如/proc/irq/40/表示中断号40的相关信息/proc/irq/[irq_num]/smp_affinity:这个文件存放的是CPU位掩码(十六进制),修改这个文件中的值可以改变CPU和某个中断的Affinity/proc/irq/[irq_num]/smp_affinity_list:这个文件存放的是CPU列表(十进制),注意CPU核心数用从0开始的数字表示,比如cpu0和cpu1等/proc/net/proc/net/dev:统计网卡流量/proc/net/sockstat:SOCKET的各种状态/proc/sys/fs文件系统相关/proc/sys/fs/file-max/proc/sys/fs/file-nr/proc/sys/fs/inode-nr/proc/sys/net:Network-related/proc/sys/net/core/somaxconn控制TCP监听队列的大小/proc/sys/net/ipv4/tcp_fin_timeout控制FIN_WAIT_2状态的超时时间/proc/sys/net/ipv4/tcp_keepalive_intvl/proc/sys/vm:内存相关/proc/sys/vm/drop_caches/proc/sys/vm/overcommit_memoryMISChistory-查看Linux发行版的命令行历史记录cat/etc/*-release获取机器IP地址netstat-ie|awk/broadcast/'{print$2}'netstat-ie|awk-F'[:]+'/cast/'{print$4}'netstat-ie|awk-F'[:]+'/cast/'{print$3}'清除系统缓存echo3>/proc/sys/vm/drop_caches查看TCP数据cat/proc/net/tcp查看UDP数据cat/proc/net/udp查看套接字缓冲区默认大小cat/proc/sys/net/core/rmem_default查看套接字缓冲区的最大大小cat/proc/sys/net/core/rmem_max找出CPU使用率最高的线程ps-mp20693-oTHREAD,tid,time|sort-rn找出导致高IO负载的进程,使用iotop,使用工具dmesg:需要先开启内核IO监控:echo1>/proc/sys/vm/block_dumporsysctlvm.block_dump=1使用以下命令查看top10高IO负载进程:dmesg|awk-F:'{print$1}'|sort|uniq-c|sort-rn|head-n10使用iostat-x1识别高IO进程:#iostat-x13avg-cpu:%user%nice%system%iowait%steal%idle1.060.000.991.090.0097.85设备:rrqm/swrqm/sr/sw/srsec/swsec/srkB/swkB/savgrq-szavgqu-szawaitsvctm%utilsda0.4917.291.746.7523.47200.1811.73100.0926.330.1012.255.734.87配置DNS客户端需要修改两个文件:修改/etc/resolv.conf:添加DNS的IP地址server,格式为:nameserverDNS服务器IP地址,可以有多行nameserver修改/etc/nsswitch.conf:添加如下内容:hosts:filesdnsnetworks:filesdnsmodifyhostname临时修改:hostnameNEW_HOST永久修改:不同的Linux版本,对应的系统配置文件可能不同,有的对应/etc/hostname,配置修改为:HOSTNAME=hostname,修改完成后需要重启网卡:/etc/rc.d/boot.localnet启动或服务网络重启