当前位置: 首页 > news >正文

电子商务网站建设试卷及答案贵阳做网络平台的公司

电子商务网站建设试卷及答案,贵阳做网络平台的公司,新能源课件网站开发新能源,龙海网站开发目录目录 11. 前言 52. 脚本类工具 52.1. 双引号和单引号 52.2. 环境变量和变量 52.3. sed命令-字符串文本操作 62.4. sed和awk使用外部变量 62.5. awk 应用 62.5.1. awk给外部变量赋值 62.5.2. awk 多字符串分割 72.6. 日期操作 72.7. 设置shell模式 82.8. 设置shell提示 82.9…目录目录 11. 前言 52. 脚本类工具 52.1. 双引号和单引号 52.2. 环境变量和变量 52.3. sed命令-字符串文本操作 62.4. sed和awk使用外部变量 62.5. awk 应用 62.5.1. awk给外部变量赋值 62.5.2. awk 多字符串分割 72.6. 日期操作 72.7. 设置shell模式 82.8. 设置shell提示 82.9. 浮点计算 92.10. 变量指定默认值 92.11. 确认是否继续 92.12. 取当前脚本文件路径 92.13. 动态变量 102.14. 字符串操作 102.14.1. 删除前尾空格 102.14.2. 大小写转换 102.14.3. 不区分大小写比较 102.14.4. 取字符串长度 112.14.5. 遍历字符串的每一个字符 112.14.6. 判断字符串是否为数字 112.14.7. 计算空格数 122.14.8. 换行符转成空格 122.14.9. 删除首尾空格 122.15. eval应用 122.16. grep应用 122.16.1. 或关系 122.16.2. 与关系 132.17. ps应用 132.17.1. 查看指定进程名的进程ID 132.17.2. 查看指定进程名的进程ID和完整命令行 132.17.3. 查看指定进程ID的CPU以下几种都可以“-o”后跟结果输出格式format 142.17.4. 查看指定进程ID的内存 142.17.5. 同时查看指定进程ID的内存百分比和CPU百分比 142.17.6. 查看指定进程ID的CPU百分比和虚拟内存vsz单位为kb 142.17.7. 查看指定进程ID的虚拟内存和物理内存rss单位为kb 142.18. awk应用 142.18.1. 一或多个空格分隔 142.18.2. 取得IP和端口号 152.18.3. 取指定网卡上的IP地址 152.19. 日志滚动工具logrotate 153. 设备类工具 163.1. 查看网卡型号 163.2. dmidecode查看所有硬件信息工具 163.3. lscpu查看cpu工具 163.4. lspci查看主板工具 163.5. lsscsi查看SCSI卡工具 164. 系统类工具 164.1. 查看时区 164.2. 查看是否开启了SeLinux 174.3. umask命令 174.4. 修改命令行提示符 174.5. 修改登录欢迎或提示语 184.6. 查看产品ID 184.7. 命令systemctl 184.8. 命令journalctl 184.9. 重启服务 194.10. sar系统综合工具 194.11. vmstat系统级内存监测工具 204.12. iostat系统级磁盘IO监测工具 204.13. iotop进程级磁盘IO监测工具 214.14. top和htop 214.15. 定时查看CPU 214.16. 查看系统中断 214.17. 查看网卡中断 214.18. 查看中断亲和性 214.19. lsof 214.20. fuser 224.21. free查看内存工具 234.22. screen、byobu和tmux分屏工具 234.23. dtach 234.24. slabtop查看内核slab缓存工具 234.25. dmesg检测和控制内核环缓冲工具 234.26. dstat可取代vmstat/iostat/netstat/ifstat的工具 234.27. MultiTail类似tail的同时监控多个文档工具 244.28. Monitorix系统和网络监控工具 244.29. collectl全能性能监控工具 244.30. percona工具包 254.31. 修改用户密码 254.32. 设置core文件 255. 磁盘类工具 265.1. fio-磁盘IOPS测试工具 265.2. sysbench 275.3. sfdisk分区工具 285.4. fdisk分区工具 285.5. cfdisk分区工具 285.6. parted分区工具 285.7. gparted分区工具 285.8. SCSI工具 285.9. RAID工具 285.10. hdparm磁盘性能测试工具 295.11. mount挂载磁盘工具 295.12. mkfs创建文件系统工具 295.13. df查看磁盘容量工具 295.14. du统计目录和文件大小工具 296. 进程类工具 296.1. top命令 296.2. 获取进程的线程数 296.3. pwdx命令-查看工作目录 296.4. pidof命令-查看进程ID 296.5. nice和ionice优先级调整工具 306.6. pstack查看调用栈工具 306.7. 查看可执行程序和共享库工具 306.8. ps命令 306.9. 按CPU使用率排序 316.10. 按内存使用率排序 316.11. pmap和查看进程内存映射 317. 性能类工具 347.1. valgrind和qcachegrind内存分析工具 347.2. perf性能分析工具 347.3. 压力测试工具ab、tsung、siege 358. 网络类工具 358.1. netstat和ss命令 358.2. ifconfig和ip命令 358.3. ifdown和ifup 368.4. tcpdump网络抓包工具 368.5. ifstat网络流量实时查看工具 388.6. iptraf实时IP局域网监控 388.7. iftop网络带宽监控 388.8. nethogs网络带宽监控 388.9. slurm查看网络流量工具 398.10. Arpwatch以太网活动监控器 398.11. Suricata网络安全监控 398.12. Nagios网络/服务器监控 398.13. socat多功能的网络工具 398.14. mtr网络连通性判断工具 398.15. 查看网卡统计 398.16. 查看网卡RingBuffer大小 398.17. sar查看网络流量 398.18. tcpcopy引流 399. 开发类工具 409.1. 查找符号所在库 409.2. 添加预先加载共享库 4010. /proc文件系统 4010.1. /proc/meminfo 4010.2. /proc/cpuinfo 4010.3. /proc/PID和/proc/PID/maps 4010.4. /proc/irq/ 4110.5. /proc/net 4110.6. /proc/sys/fs 4110.7. /proc/sys/net 4110.8. /proc/sys/vm 4111. 其它 4211.1. 切换用户执行 4211.2. hwclock命令 4211.3. history命令 4211.4. shell中函数继承问题 4311.5. 查看Linux各发行版本方法 4311.6. 取IP地址命令 4311.7. 清除系统缓存 4311.8. 查看TCP数据 4411.9. 查看UDP数据 4411.10. 查看socket缓冲区默认大小 4411.11. 查看socket缓冲区最大大小 4411.12. 找出CPU占用最高的线程 4411.13. Linux上查找造成IO高负载的进程 4411.14. iptables简单应用 4511.15. 配置DNS客户端方法 4711.16. crontab使用环境变量 4812. 几种修改Linux主机名的方法 4812.1. 临时修改主机名 4912.2. 永久修改主机名 4912.3. 区别 5013. process_monitor.sh进程监控重启工具 5014. 远程批量操作工具 5114.1. 批量执行命令工具mooon_ssh 5114.2. 批量上传文件工具mooon_upload 5214.3. 使用示例 5215. iptables入门 54 前言本文是个大杂烩内容为日常点滴的日积月累持续更新当中可关注博客https://blog.csdn.net/Aquester或http://aquester.blog.chinaunix.net查看最新版本。文中的内容可帮忙开发提升分析和定位各类问题比如找出导致IO负载高的进程等以及一些简单的运维工作等。脚本类工具双引号和单引号单引号内的内容不会被展开双引号内的内容会被展开。实践如下~ A123~ B1$A~ B2$A~ echo $A123~ echo $B1123~ echo $B2$A 但如果单引号外有双引号则规则同双引号如~ B3$A~ echo $B3123环境变量和变量在终端分别执行“MOOON_LOG_LEVELdebug”和“export MOOON_LOG_LEVELdebug” 上述两者有何不同了区别在于前者只对当前进程有效而后者环境变量可以被子进程继承也就是对子进程也有作用。另外环境变量总是键值对所以值不能是一个shell数组。数组bash等中的概念而环境变量是Linux等系统中的概念。sed命令-字符串文本操作如需直接修改文件方式替换只需sed后带参数“-i”。 单引号替换特殊字符需要使用反斜线”\”进行转义sed s/原字符串/替换字符串/ 如果想删除换行符则要这样做因为sed默认会加换行符sed :a;N;s/\n//g;ta filename 双引号替换如要替换的包含了“/”则可使用“|”做分隔符sed s/原字符串包含/替换字符串包含/ 问号替换sed s?原字符串?替换字符串? 同时多个替换不同替换间使用分号分开。sed和awk使用外部变量xMMsed s/AB/$x/g filename或sed s/AB/$x/g filename sed s/$val// filename awk { print $x } filename a2;b3;awk -v A$a -v B$b BEGIN{printf(%d,%d\n,A,B);}awk 应用awk给外部变量赋值假设将值存在文件t中文件t内容如下只有一行a b c 需要将a、b和c分别赋给外部变量x、y和z则脚本可写成如下eval $(awk { printf(x%s\ny%s\nz%s,$1,$2,$3); } ./t)echo $xecho $yecho $z 请注意printf函数中的换行符\n是必须的起关键作用的是eval命令它在很多场景有特别的用处。稍复杂点的示例对一个表求记录数和某字段汇总将结果分别赋值给Shell变量a和beval $(mysql -srN -h127.0.0.1 -P3306 -uroot -p12345678 test -eSELECT COUNT(1),SUM(f_money) FROM t_test where f_time2019-07-18 00:00:00 and f_time2019-07-18 23:59:59 | awk {printf(a%s\nb%s\n,$1,$2);})echo $aecho $bawk 多字符串分割多字符串分割用单引号不要用“[]”但多个直接仍然用竖号分隔需要转义的也仍然用斜杠“\”但注意需要两个斜杠“\\”因为斜杠本身也需要转义。 示例两个多字符串分割符分别为“[CDATA[[”和“]]”。echo xmlappid![CDATA[20230214114000]]/appid\nerrcode![CDATA[3002981]]/errcode\nerrmsg![CDATA[系统错误]]/errmsg\n/xml|awk -F\\[CDATA\\[|\\]\\] {printf(%s|%s\n,$4,$6);}日期操作当前日期以下几种格式均可date %Y-%m-%ddate %Y-%m-%ddate %Y-%m-%d 前一天date %Y-%m-%d -d -1 daysdate %Y-%m-%d -d -1 days date %Y-%m-%d -d last day 前一个月date %Y-%m-%d -d 1 month agodate %Y-%m-%d -d last month # 如果只取前一月份date %Y-%m -d 1 month agodate %Y-%m-01 -d 1 month ago 前一年date %Y-%m-%d -d 1 year agodate %Y-%m-%d -d last year # 如果只取前一年份date %Y -d 1 year agodate %Y-01-01 -d 1 year ago 指定日期的下一个月date %Y-%m-01 -d 2021-05-01 next month设置shell模式默认的shell是“emacs”模式如果是一长串的命令需要修改其中小部分在命令模式下效率会很低这个时候可以切换到vi模式$ set -o vi 不带参数执行“set -o”可列出所有支持的模式$ set -o 切换回“emacs”模式$ set -o emacs设置shell提示Linux的shell提示由环境变量PS1控制$ echo $PS1[\u\h \w]\$ 常用参数\H完整的主机名\h主机的第一个名字\w完整的工作目录\W仅父目录\u当前用户名\$提示符一般约定root的为“#”普通用户的为“$” 除此之外还可设置字体和背景色颜色格式为“\[\e[F;Bm\]”。其中“F”为Font之意用于指定字体颜色“B”为Background之意用于指定背景颜色。浮点计算使用bcscale指定小数点位数$ a2;b3;echo scale2; $a / $b | bc.66 $ a2;b3;echo scale2; $a / $b | bc -l.66 使用awk$ a2;b3;awk BEGIN{printf(%.2f\n,$a/$b);}0.67变量指定默认值REDIS_CLI${REDIS_CLI:-redis-cli}确认是否继续echo -en Confirm to continue? [yes/no]read -r -p inputif test $input ! yes; then exit 1fi “yes”和“no”带上醒目的黄颜色echo -en Confirm to continue? [\033[1;33myes\033[m/\033[1;33mno\033[m]read -r -p inputif test $input ! yes; then exit 1fi取当前脚本文件路径FILEPATH$(readlink -f $0) # 脚本文件完整路径包括目录和文件名BASEDIR$(dirname $FILEPATH) # 本脚本文件所在目录SHELLDIR$(cd $BASEDIR/..pwdcd -/dev/null) # 上一级目录动态变量A12021A22022i1A$(eval echo $A${i})i2A$(eval echo $A${i})字符串操作删除前尾空格line是一个前尾有空格的字符串line 123 echo A${line}Blineecho $line | xargsecho A${line}B大小写转换参考来源BASH官方https://www.gnu.org/software/bash/manual/bash.html 转换为小写BASH-4.0开始支持打开bash.html后搜索“,,”AaBcecho $AA${A,,}echo $A 转换为大写BASH-4.0开始支持打开bash.html后搜索“^^”AaBcecho $AA${A^^}echo $A不区分大小写比较BASH可如下操作A1abA2Abshopt -s nocasematch[[ $A1 $A2 ]];echo $?shopt -u nocasematch 注意这里不能使用“test $A1 $A2;”而只能使用语法“[[ $A1 $A2 ]];”。从BASH-4.0开始也可采用如下语法A1abA2Abtest ${A1,,} ${A2,,};echo $? 下面这样也可以A1abA2Ab[[ ${A1,,} ${A2,,} ]];echo $?取字符串长度~ strabcdef~ strlen${#str}~ echo $strlen6遍历字符串的每一个字符顺序遍历字符串的每一个字符“${str:$i:1}”中的数字1表示取几个字符~ strabcdef~ strlen${#str}~ echo $strlen6~ for ((i0; i$strlen; i)) do echo ${str:$i:1}; done abcdef判断字符串是否为数字使用expr判断expr的返回值返回值为0表示是数字str1123abcstr2123000$(expr $str1 0 /dev/null 21)echo $?$(expr $str2 0 /dev/null 21)echo $?计算空格数echo $str | tr -cd | wc -c换行符转成空格echo $str | tr \n 删除首尾空格echo $str | xargseval应用如果变量名是动态的这个时候就得用上eval命令$ C0012$ C1345$ C2678$ i0$ j1$ k2 $ echo \$C$i-\$C$j-\$C$k # 没加eval时$C0-$C1-$C2 $ eval echo \$C$i-\$C$j-\$C$k # 加上eval时这句也可写成eval echo \\$C$i-\$C$j-\$C$k\012-345-678 命令“eval”的作用是再解析还可以嵌套多层“eval”。grep应用或关系匹配结果包含“abc”或“xyz”的行ps aux|grep -E abc|xyz 使用双引号也可以一般建议尽量用单引号因为双引号存在被Shell解释的问题一些字符需转义ps aux|grep -E abc|xyz 如果使用“-e”则这样书写ps aux|grep -e abc -e xyz 对于“-e”单引号也可以ps aux|grep -e abc -e xyz 下列这样也可以ps aux|grep abc\|xyz 使用egrep也可以ps aux|egrep abc|xyz 使用fgrep也可以ps aux|fgrep -eabc -exyzps aux|fgrep -e abc -e xyzps aux|fgrep -e abc -e xyz 或关系总结其中“egrep”等同“grep -E”而“fgrep”等同“grep -F”grep PATTERN1\|PATTERN2 FILEgrep -E PATTERN1|PATTERN2 FILEgrep -e PATTERN1 -e PATTERN2 FILEfgrep -e PATTERN1 -e PATTERN2 FILEegrep PATTERN1|PATTERN2 FILE 与关系匹配结果包含“abc”并且包含“xyz”的行ps aux|grep abc.*xyzps应用查看指定进程名的进程IDps -C redis-server -o pid查看指定进程名的进程ID和完整命令行ps -C redis-server -o pid -o comm查看指定进程ID的CPU以下几种都可以“-o”后跟结果输出格式formatps --pid$PID -o %cpups -p $PID -o %cpups -p $PID -o pcpups -q $PID -o %CPU 如果不想结果中包含输出头Header则可加上“h”修饰如ps h -p 18374 -o pcpu查看指定进程ID的内存ps h -p 18374 -o %memps h -p 18374 -o pmem同时查看指定进程ID的内存百分比和CPU百分比ps h -p 18374 -o pcpu,pmemps h -p 18374 -o pcpu -o pmem查看指定进程ID的CPU百分比和虚拟内存vsz单位为kbps h -p 18374 -o pcpu -o vszps h -p 18374 -o pcpu -o vsize查看指定进程ID的虚拟内存和物理内存rss单位为kbps h -p 18374 -o vsz,rssps h -p 18374 -o vsz -o rssizeawk应用一或多个空格分隔多个需要加上星号“*”或加号“”修饰。echo 1-2--3---4|awk -F-* { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); }echo 1-2--3---4|awk -F[-]* { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); }echo 1-2--3---4|awk -F[-]* { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); } echo 1-2--3---4|awk -F- { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); }echo 1-2--3---4|awk -F[-] { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); }echo 1-2--3---4|awk -F[-] { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); } 注意不能是echo 1-2--3---4|awk -F[-].* { print $1,$2,$3,$4 } 还可如下方式书写1表示一个echo 1-2--3---4|awk -F-{1,} { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); }echo 1-2--3---4|awk -F[-]{1,} { printf(A:%s,B:%s,C:%s,D:%s\n, $1,$2,$3,$4); } 取得IP和端口号node127.0.0.1:2019eval $(echo $node | awk -F[\ \:,\;\t] { printf(ip%s\nport%s\n,$1,$2); })echo $ipecho $port取指定网卡上的IP地址ethXeth1echo $ethXipnetstat -ie|awk -F[ :] BEGIN{ok0;} {if (match($0, $ethX)) ok1; if ((1ok) match($0,inet)) { ok0; if (7NF) printf(%s\n,$3); else printf(%s\n,$4); } }echo $ip日志滚动工具logrotateLinux系统自带的日志滚动工具logrotate由两部分组成一是命令行工具logrotate二是后台服务rsyslogd。使用rsyslogd只需简单的配置即可实现日志滚动。rsyslogd的配置文件为/etc/logrotate.conf但一般不建议直接修改logrotate.conf而是在目录/etc/logrotate.d下新增文件的方式。logrotate.conf会include所有logrotate.d目录下的文件语法是一致的区别是logrotate.conf定义了默认的配置而logrotate.d目录下为专有配置。下列为redis的配置示例# 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{ rotate 2 minsize 100M nocompress missingok create 0664 redis redis notifempty} 常用配置项说明rotate指定日志文件备份数如果值为0表示不备份minsize表示日志文件达到多大才滚动nocompress表示是否压缩备份的日志文件missingok如果日志丢失不报错继续滚动下一个日志notifempty日志文件为空时不进行轮转默认值为ifemptycreate指定创建新日志文件的属性logrotate是以root运行的如果目标日志文件非root运行则这个一定要指定好设备类工具查看网卡型号lspci | grep -i ethernetdmidecode查看所有硬件信息工具lscpu查看cpu工具lspci查看主板工具使用示例lspci -vvvlspci -vvv -tlsscsi查看SCSI卡工具系统类工具查看时区$ date %Z %zCST 0800 # timedatectl | grep Time zone Time zone: Asia/Shanghai (CST, 0800)查看是否开启了SeLinuxSeLinux 是 Security-Enhanced Linux 的缩写即安全增强型 LinuxLinux 的一个安全子系统内核 2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块主要作用是最大限度地减小系统中服务进程可访问的资源最小权限原则。 /usr/sbin/sestatusSELinux status: disabledumask命令用来设置文件和目录的默认权限即使用touch等创建文件或者使用mkdir 创建目录时的默认权限。默认值一般是“0002”如$ umask0022 “0022”中的第一个“0”表示为八进制值“022”对应的二进制值为“000 010 010”数字“1”为屏蔽意思即屏蔽对应的权限权限顺序为“RWX”即读、写和执行。取反后为“111 101 101”即八进制值755因此“umask 0022”等同于“chmod 0755”。根据掩码值求文件默认权限跟“6”减即可比如“0022”对应的为“0644”“6”对应的二进制值为“110”即可读写无可执行。根据掩码值求目录默认权限跟“7”减即可比如“0022”对应的为“0755”“7”对应的二进制值为“111”即可读写且可执行。为文件和“6”相减而目录和“7”相减因为一般文件默认不需要可执行权限。如果指定参数“-S”则表示使用可读的字母表示权限如“umask urwx”其中u表示用户自己g表示用户组o表示其它。对于文件可执行权限掩码总是无效的即值总是为0即使指定为1。修改命令行提示符环境变量PS1控制命令行提示符常见内置符号\u当前用户名\h主机名即hostname\w当前工作目录修改登录欢迎或提示语在文件/etc/motd中编辑欢迎或提示语即可motd为“message of today”的缩写。如果是在Linux主机上直接登录则对应文件/etc/issue。查看产品ID象Kubernetes要求每个节点的产品IDproduct_uuid亦即Linux的UUID唯一cat /sys/class/dmi/id/product_uuid命令systemctl下面只列出了systemctl的部分用法。 系统管理systemctl poweroff # 关机systemctl reboot # 重启systemctl rescue # 进入单用户模式systemd-analyze # 查看系统启动时间loginctl list-users # 列出当前登录用户loginctl user-status root # 查看用户root的状态 查看系统状态systemctl status 管理单元如启动MySQL这要求在目录/lib/systemd/system下存在文件mysql.servicesystemctl status mysql.service 查看单元依赖比如查看crond的依赖systemctl list-dependencies crond.service 又比如查看sshd的依赖systemctl list-dependencies sshd.service命令journalctl在systemd出现之前Linux系统及各应用的日志都是分别管理的systemd开始统一管理了所有Unit的启动日志这样可以只用一个journalctl命令查看所有内核和应用的日志下面只列出了journalctl命令的小部分用法。 查看日志journalctl # 查看所有日志包括内核和应用日志journalctl -k # 仅查看内核日志journalctl -k -o json # 以JSON格式输出日志journalctl -k -o json --no-pager # 不按页输出一次性全输出默认按页输出journalctl -b # 查看系统本次启动日志等效于“journalctl -b 0”journalctl -b -1 # 查看系统上一次启动日志journalctl --disk-usage # 查看日志占用的磁盘大小journalctl 查看指定时间日志journalctl --since 10 min agojournalctl --since2019-11-22 19:50:22journalctl --since yesterdayjournalctl --since 2019-11-20 --until 2019-11-21 10:00 查看指定进程日志journalctl _PIDpidof crond 查看指定用户日志journalctl _UIDid -r -u root --since today重启服务不同发行版的Linux重启服务可能有些区别这里以CentOS为例重启crontab服务方式一service crond restart方式二systemctl restart crond 其中service为老的重启服务方式而systemctl是新的重启服务方式。service是一个脚本而systemctl是一个可执行程序。sar系统综合工具全称“System Activity Reporter”即系统活动情况报告最为全面的系统性能分析工具之一也可用来查看网络流量。vmstat系统级内存监测工具$ vmstatprocs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 1397364 3553340 775800 22420964 0 0 0 41 0 0 6 10 84 0 0iostat系统级磁盘IO监测工具$ iostatLinux 3.10.1-1-XXX-0041 (UN) 2018年12月12日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 6.13 0.01 10.00 0.02 0.00 83.84 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsdb 0.11 0.11 3.66 3818251 131342429sda 6.06 1.54 158.24 55370852 5672335360dm-0 0.00 0.03 0.02 1126394 833860dm-5 0.00 0.00 0.00 45657 5116dm-6 0.00 0.00 0.00 45657 5116dm-1 0.00 0.00 0.00 45658 5110dm-2 0.00 0.00 0.00 45658 5116dm-3 0.00 0.00 0.00 46478 5216dm-4 0.00 0.00 0.00 43486 3369dm-7 0.00 0.00 0.00 43269 3361 参数“-m”指定刷新频率单位为秒。查看tps每秒I/O次数iostat -d -m 2单位MB刷新间隔2秒iostat -d -k 2单位KB查看扩展数据iostat -x -m 2刷新间隔2秒查看设备使用率和响应时间iostat -d -x -k 2 3刷新间隔2秒一共循环3次 iostat输出指标说明指标说明%util每秒用于I/O操作的时间百分比100%表示饱和80%表示有20%的磁盘空间时间标示了磁盘繁忙程度。tps每秒I/O次数await平均每次设备I/O操作的等待时间单位毫秒svctm平均每次设备I/O操作的服务时间单位毫秒值大小和磁盘性能有关。如果值和await接近表示几乎无I/O等待。如果await远大于svctm表示I/O队列等待过长。avgrq-sz平均每次设备I/O操作的数据大小扇区avgqu-sz平均I/O队列长度值越小越好wMB/s每秒写入的M字节数rMB/s每秒读取的M字节数r/s每秒完成的读I/O设备次数w/s每秒完成的写I/O设备次数rsec/s每秒读扇区数wsec/s每秒写扇区数rrqm/s每秒合并的读I/OVFS将请求发给FS时FS会对读取相同块Block的请求进行合并。wrqm/s每秒合并的写I/Oiotop进程级磁盘IO监测工具top和htophtop为top的加强版本。定时查看CPUmpstat -P ALL 1mpstat -I SUM 1 示例每秒显示一次mpstat -P ALL 1查看系统中断cat /proc/interrupts查看网卡中断grep eth1 /proc/interrupts |awk {print $NF}查看中断亲和性cat /proc/irq/74/smp_affinity # 以中断74为例lsof全称“List Open Files”可用来查看进程打开了哪些文件也可用来查看一个文件被哪些进程打开了或者一个端口是哪个进程打开的等。 查看端口被谁占用lsof -i:port如lsof -i:80 显示开启文件abc.txt的进程lsof abc.txt 显示abc进程现在打开的文件lsof -c abc 显示目录下被进程开启的文件lsof d /usr/local/ 显示使用fd为4的进程lsof -d 4 以UID列出打开的文件lsof -u username 看进程号为12的进程打开了哪些文件lsof -p 12 反复执行刷新频率为2秒lsof -i:10888 -r 2 ls r 死循环执行直到没有结果如已没有程序占用端口号10888。fuser和lsof有些类似的功能可查看文件、文件系统或套接字被哪些进程打开了。使用示例查看持有端口2019的进程fuser -v -n tcp 2019 杀掉所有打开文件/tmp/test的进程fuser -m -k /tmp/testfuser -m -k -i /tmp/test 查看文件/tmp/test被哪些进程打开了 fuser -um /tmp/testfree查看内存工具screen、byobu和tmux分屏工具dtach用来模拟screen的detach的功能的小工具http://dtach.sourceforge.net/。slabtop查看内核slab缓存工具dmesg检测和控制内核环缓冲工具dstat可取代vmstat/iostat/netstat/ifstat的工具示例1$ dstatYou did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int csw 4 6 89 0 0 0| 746B 118k| 0 0 | 0 18B| 850 5461 8 9 82 0 0 0| 0 92k| 111k 71k| 0 0 |6888 15k 17 39 44 0 0 0| 0 96k| 107k 62k| 0 0 |7392 19k 2 3 94 0 0 0| 0 484k| 124k 171k| 0 0 |6855 13k 示例2# dstat -l -m -r -c --top-io --top-mem --top-cpu---load-avg--- ------memory-usage----- --io/total- ----total-cpu-usage---- ----most-expensive---- --most-expensive- -most-expensive- 1m 5m 15m | used buff cach free| read writ|usr sys idl wai hiq siq| i/o process | memory process | cpu process0.14 0.14 0.14|2710M 407M 6067M 117G|0.01 3.34 | 0 0 100 0 0 0|process_mon 960k 639B|redis-server 412M|report_proxy 0.00.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 100 0 0 0|redis-serve 13k 9360B|redis-server 412M|report_proxy 0.10.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 99 0 0 0|process_mon2027k 1986B|redis-server 412M|report_proxy 0.00.13 0.14 0.14|2710M 407M 6067M 117G| 0 0 | 0 0 100 0 0 0|sap1002 30k 624B|redis-server 412M|report_proxy 0.10.13 0.14 0.14|2710M 407M 6067M 117G| 0 9.00 | 0 0 99 0 0 0|process_mon2024k 1986B|redis-server 412M|report_proxy 0.10.13 0.14 0.14|2715M 407M 6067M 117G| 0 28.0 | 0 1 99 0 0 0|redis-serve 38k 4339k|redis-server 412M|report_proxy 0.10.68 0.25 0.18|2723M 407M 6067M 117G| 0 5.00 | 1 1 98 0 0 0|crond 13M 180k|redis-server 412M|report_proxy 0.1MultiTail类似tail的同时监控多个文档工具Monitorix系统和网络监控工具collectl全能性能监控工具可以交互式地运行或作为一个守护进程或同时二者兼备地运行可替代ps、top、iotop和vmstat等可以作为一个服务来监控远程机或者整个服务器集群。可使用yum或apt-get安装官网http://collectl.sourceforge.net/。 示例1collectl #--------CPU-------------------Disks----------------------Network----------#cpu sys inter ctxsw KBRead Reads KBWrit Writes netKBi pkt-in netKBo pkt-out 37 37 382 188 0 0 27144 254 45 68 3 21 25 25 366 180 20 4 31280 296 0 1 0 0 25 25 368 183 0 0 31720 275 2 20 0 1 示例2collectl -sjmf -oT # -------Int-------------------Memory-----------------NFS Totals------#Time Cpu0 Cpu1 Cpu2 Cpu3 Free Buff Cach Inac Slab Map Reads Writes Meta Comm08:36:52 1001 66 0 0 2G 201M 609M 363M 219M 106M 0 0 5 008:36:53 999 1657 0 0 2G 201M 1G 918M 252M 106M 0 12622 0 208:36:54 1001 7488 0 0 1G 201M 1G 1G 286M 106M 0 20147 0 2 示例3collectl -sn --verbose -oT # NETWORK SUMMARY (/sec)# KBIn PktIn SizeIn MultI CmpI ErrIn KBOut PktOut SizeO CmpO ErrOut08:46:35 3255 41000 81 0 0 0 112015 78837 1454 0 008:46:36 0 9 70 0 0 0 29 25 1174 0 008:46:37 0 2 70 0 0 0 0 2 134 0 0 示例4collectl -sJ -oTm # Int Cpu0 Cpu1 Cpu2 Cpu3 Type Device(s)08:52:32.002 225 0 4 0 0 IO-APIC-level ioc008:52:32.002 000 1000 0 0 0 IO-APIC-edge timer08:52:32.002 014 0 0 18 0 IO-APIC-edge ide008:52:32.002 090 0 0 0 15461 IO-APIC-level eth1percona工具包简称PTPercona Toolkit可用来监控MySQL、MongoDB等。查询程序执行聚合的GDB堆栈跟踪先进性堆栈跟踪然后将跟踪信息汇总pt-pmp -p pid 格式化explain出来的执行计划按照tree方式输出方便阅读pt-visual-explain 从log文件中读取插叙语句并用explain分析他们是如何利用索引完成分析之后会生成一份关于索引没有被查询使用过的报告pt-index-usage修改用户密码注意如果用户密码过期则它的Crontab也将失效。 查看用户test密码有效期chage -l test 修改用户test的密码永不过期chage -M -1 test 修改用户密码echo test:123456|chpasswd设置core文件执行命令“ulimit -c”查看是否打开了 core值 0 表示关闭不会生成 core 文件。设置/proc/sys/kernel/core_uses_pid 为0 表示 core 文件名统一命名为 core设置为 1 表示将进程 ID 作为 core 文件名的后缀。通过设置/proc/sys/kernel/core_pattern 控制core 文件的存放位置和文件名格式%p进程ID%u当前UID%g当前GID%s产生core 的信号%t产生core 的时间戳%h主机名%e进程名 如果需要Linux 系统重启后生效则还应当修改文件 /etc/sysctl.conf对应的配置项分别为kernel.core_uses_pid 和 kernel.core_pattern如kernel.core_pattern/home/smart/corefile/core-%e-%p kernel.core_uses_pid0磁盘类工具fio-磁盘IOPS测试工具磁盘IOPS测试工具。MAN手册https://linux.die.net/man/1/fio源代码http://freshmeat.sourceforge.net/projects/fio/。 随机写IOPS4K为单位fio -filename/dev/sdb -direct1 -iodepth 16 -thread -rwrandwrite -ioenginelibaio -bs4k -size2G -numjobs1 -runtime100 -group_reporting -nametest 随机读IOPS4K为单位fio -filename/dev/sdb -direct1 -iodepth 16 -thread -rwrandread -ioenginelibaio -bs4k -size2G -numjobs1 -runtime100 -group_reporting -nametest 顺序写IOPS4K为单位fio -filename/dev/sdb -direct1 -iodepth 16 -thread -rwwrite -ioenginelibaio -bs4k -size2G -numjobs1 -runtime100 -group_reporting -nametest 顺序读IOPS4K为单位fio -filename/dev/sdb -direct1 -iodepth 16 -thread -rwread -ioenginelibaio -bs4k -size2G -numjobs1 -runtime100 -group_reporting -nametest 主要参数说明参数名参数说明filename测试文件名称通常选择需要测试盘的data目录direct直接操作磁盘绕过系统Bufferrw取值randwrite 测试随机写randread 测试随机读randrw 测试随机读写write 测试顺序写read 测试顺序读bs单次I/O操作的块大小假如bs值为4krw值为write表示每次4k顺序写文件rwmixwrite在混合读写的模式下写占的百分比如“--rwmixwrite20”表示写占20%size测试的文件大小numjobs测试线程数ioengine使用的I/O引擎支持以下几种sync基于read、write、fseekpsync基于pread、pwritevsync基于readv、writevlibaioLinux内核异步I/Oposixaio基于Posix标准的异步I/Oaoi_read、aoi_writesolarisaio基于Solaris原生异步I/Owindowsaio基于Windows原生异步I/Ommap基于mmap、memcpygroup_reporting指标显示结果汇总每个进程的信息runtime测试时长单位秒nrfiles进程生成的文件数zero_buffers用0初始化系统Bufferlockmem限定多少内存用于测试如--lockmem1gsysbench下载地址https://github.com/akopytov/sysbench/releases。一个开源的、模块化的、跨平台的多线程性能测试工具可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。示例测试fsync是否为实时fsyncsysbench --testfileio --file-fsync-freq1 --file-num1 --file-total-size16384 --file-test-moderndwr preparesysbench --testfileio --file-fsync-freq1 --file-num1 --file-total-size16384 --file-test-moderndwr run 运行时如果遇到警告“Did you forget to run the prepare step”则表示需要先执行“prepare”。 Python脚本测试#!/usr/bin/python# time python fsync.pyimport os, sys, mmap # Open a filefd os.open( testfile, os.O_RDWR|os.O_CREAT|os.O_DIRECT )m mmap.mmap(-1, 512)for i in range (1,1000): os.lseek(fd,os.SEEK_SET,0) m[1] 1 os.write(fd, m) os.fsync(fd)# Close opened fileos.close( fd )sfdisk分区工具示例列出所有分区# sfdisk -lfdisk分区工具示例列出所有分区# fdisk -lcfdisk分区工具具有互动式操作界面的磁盘分区工具参数-P表示显示分区表的内容附加参数“s”会依照磁区的顺序显示相关信息。parted分区工具一个由GNU开发的功能强大的磁盘分区和分区大小调整工具。gparted分区工具parted的图形化版本。SCSI工具dmesg |grep SCSIlsscsiRAID工具dmesg |grep -i raid查看软RAIDcat /proc/mdstathdparm磁盘性能测试工具测试磁盘缓存读性能使用示例hdparm -t /dev/sda或hdparm -Tt /dev/sda。mount挂载磁盘工具文件/etc/fstab的内容和mount输出是一致的。mkfs创建文件系统工具挂载一块磁盘之前需要先创建好文件系统。df查看磁盘容量工具du统计目录和文件大小工具进程类工具top命令只观察指定进程top -p PID观察一次即退出top -p PID -n 1获取进程的线程数以进程ID值为2021为例两种方法ps -p 2021 -L h|wc -lawk -F[\ :]. {if (match($1,Threads)) print $2} /proc/2021/statuspwdx命令-查看工作目录根据进程ID查看指定进程的当前工作目录注意不是程序文件所在目录格式pwdx pid如pwdx 1。pidof命令-查看进程ID根据进程名查看进程的ID格式pidof 进程名如pidof init。nice和ionice优先级调整工具nice是进程的CPU优先级查看和调整工具ionice是进程的IO优先级查看和调整工具。pstack查看调用栈工具根据进程ID查看指定进程调用栈的工具格式pstack pid。查看可执行程序和共享库工具objdumpnm 经常用来查看共享库是否包含了某个符号ldd 查看依赖关系工具strings 列出符号strip 删除符号表工具Readelfps命令“ps”为“Process Snapshot”的缩写使用频繁的用来查看当前进程的快照工具数据来源于虚拟文件“/proc”如果输出结果的用户名太长则会用数字型的用户ID替代。ps支持三种风格的命令行参数UNIX 必须以“-”打头可以分组BSD 不能以“-”打头也可以分组GNU 以两个“-”打头\ 三种风格可以混合使用但可能有冲突三种风格有些名称相同但含义不同。以查看系统中所有进程为例标准语法ps -ef或ps -eF等BSD语法ps aux或ps ax 查看进程树标准语法ps -ejHBSD语法ps axjf 查看线程标准语法ps -eLfBSD语法ps axms 查看root运行的所有进程ps -U root -u root u。以指定格式查看ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,commps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,commps -Ao pid,tt,user,fname,tmout,f,wchan 只显示进程ID为42的进程名ps -q 42 -o comm。只syslogd的进程IDps -C syslogd -o pid。“ps -ef”和“ps -Af”相同原因是“-e”和“-A”作用相同。如果不想显示标题头指定“--no-heading”即可。按CPU使用率排序显示CPU使用率最高的前5个进程ps -Ao pcpu,comm,pid,user,uid,tty --sort-pcpu | head -n 6 说明-A 表示显示所有进程pcpu CPU使用率真comm 进程名不包含路径pid 进程IDuser 用户名--sort 指定按什么排序 显示CPU使用率最低的前5个进程ps -Ao pcpu,comm,pid,user,uid,tty --sortpcpu | head -n 6 注意这里是“-pcpu”不是“pcpu”前者按高到低排后者从低到高排顺序刚好相反。“pcpu”可用“%cpu”替代效果完全相同。如果按物理内存排序用“rss”替代“pcpu”按虚拟内存排用“vsz”替代“pcpu”即可。按内存使用率排序显示物理内存占用最高的前5个进程ps -Ao rss,pcpu,comm,pid,user,uid,tty --sort-rss| head -n 6 显示物理内存占用最低的前5个进程ps -Ao rss,pcpu,comm,pid,user,uid,tty --sortrss| head -n 6pmap和查看进程内存映射借助pmap即可查看指定进程的查看进程的内存映像信息。示例[rootcentos ~]# pmap -xp 20442334: /usr/local/redis/bin/redis-server 0.0.0.0:6380 Address Kbytes RSS Dirty Mode Mapping0000000000400000 1556 696 0 r-x-- /usr/local/redis-5.0.3/bin/redis-server0000000000785000 8 8 4 r---- /usr/local/redis-5.0.3/bin/redis-server0000000000787000 24 24 24 rw--- /usr/local/redis-5.0.3/bin/redis-server000000000078d000 2200 132 132 rw--- [ anon ]000000000159b000 132 56 56 rw--- [ anon ]00007f9ed36d4000 4 0 0 ----- [ anon ]00007f9ed36d5000 8192 12 12 rw--- [ anon ]00007f9ed3ed5000 4 0 0 ----- [ anon ]00007f9ed3ed6000 8192 12 12 rw--- [ anon ]00007f9ed46d6000 4 0 0 ----- [ anon ]00007f9ed46d7000 8192 12 12 rw--- [ anon ]00007f9ed4ed7000 103588 0 0 r---- /usr/lib/locale/locale-archive00007f9edb400000 8192 868 868 rw--- [ anon ]00007f9edbcd3000 1756 520 0 r-x-- /usr/lib64/libc-2.17.so00007f9edbe8a000 2044 0 0 ----- /usr/lib64/libc-2.17.so00007f9edc089000 16 16 16 r---- /usr/lib64/libc-2.17.so00007f9edc08d000 8 8 8 rw--- /usr/lib64/libc-2.17.so00007f9edc08f000 20 12 12 rw--- [ anon ]00007f9edc094000 92 68 0 r-x-- /usr/lib64/libpthread-2.17.so00007f9edc0ab000 2044 0 0 ----- /usr/lib64/libpthread-2.17.so00007f9edc2aa000 4 4 4 r---- /usr/lib64/libpthread-2.17.so00007f9edc2ab000 4 4 4 rw--- /usr/lib64/libpthread-2.17.so00007f9edc2ac000 16 4 4 rw--- [ anon ]00007f9edc2b0000 28 4 0 r-x-- /usr/lib64/librt-2.17.so00007f9edc2b7000 2044 0 0 ----- /usr/lib64/librt-2.17.so00007f9edc4b6000 4 4 4 r---- /usr/lib64/librt-2.17.so00007f9edc4b7000 4 4 4 rw--- /usr/lib64/librt-2.17.so00007f9edc4b8000 8 4 0 r-x-- /usr/lib64/libdl-2.17.so00007f9edc4ba000 2048 0 0 ----- /usr/lib64/libdl-2.17.so00007f9edc6ba000 4 4 4 r---- /usr/lib64/libdl-2.17.so00007f9edc6bb000 4 4 4 rw--- /usr/lib64/libdl-2.17.so00007f9edc6bc000 1024 8 0 r-x-- /usr/lib64/libm-2.17.so00007f9edc7bc000 2048 0 0 ----- /usr/lib64/libm-2.17.so00007f9edc9bc000 4 4 4 r---- /usr/lib64/libm-2.17.so00007f9edc9bd000 4 4 4 rw--- /usr/lib64/libm-2.17.so00007f9edc9be000 128 36 0 r-x-- /usr/lib64/ld-2.17.so00007f9edcbcf000 20 20 20 rw--- [ anon ]00007f9edcbdc000 4 4 4 rw--- [ anon ]00007f9edcbdd000 4 4 4 r---- /usr/lib64/ld-2.17.so00007f9edcbde000 4 4 4 rw--- /usr/lib64/ld-2.17.so00007f9edcbdf000 4 4 4 rw--- [ anon ]00007fffc7af3000 132 16 16 rw--- [ stack ]00007fffc7b1f000 8 4 0 r-x-- [ anon ]ffffffffff600000 4 0 0 r-x-- [ anon ]---------------- ------- ------- ------- total kB 153824 2588 1244 除了使用pmap还可如下方式[rootcentos ~]# cat /proc/2334/maps00400000-00585000 r-xp 00000000 fd:01 287120 /usr/local/redis-5.0.3/bin/redis-server00785000-00787000 r--p 00185000 fd:01 287120 /usr/local/redis-5.0.3/bin/redis-server00787000-0078d000 rw-p 00187000 fd:01 287120 /usr/local/redis-5.0.3/bin/redis-server0078d000-009b3000 rw-p 00000000 00:00 0 0159b000-015bc000 rw-p 00000000 00:00 0 [heap]7f9ed36d4000-7f9ed36d5000 ---p 00000000 00:00 0 7f9ed36d5000-7f9ed3ed5000 rw-p 00000000 00:00 0 [stack:2343]7f9ed3ed5000-7f9ed3ed6000 ---p 00000000 00:00 0 7f9ed3ed6000-7f9ed46d6000 rw-p 00000000 00:00 0 [stack:2342]7f9ed46d6000-7f9ed46d7000 ---p 00000000 00:00 0 7f9ed46d7000-7f9ed4ed7000 rw-p 00000000 00:00 0 [stack:2341]7f9ed4ed7000-7f9edb400000 r--p 00000000 fd:01 125493 /usr/lib/locale/locale-archive7f9edb400000-7f9edbc00000 rw-p 00000000 00:00 0 7f9edbcd3000-7f9edbe8a000 r-xp 00000000 fd:01 98905 /usr/lib64/libc-2.17.so7f9edbe8a000-7f9edc089000 ---p 001b7000 fd:01 98905 /usr/lib64/libc-2.17.so7f9edc089000-7f9edc08d000 r--p 001b6000 fd:01 98905 /usr/lib64/libc-2.17.so7f9edc08d000-7f9edc08f000 rw-p 001ba000 fd:01 98905 /usr/lib64/libc-2.17.so7f9edc08f000-7f9edc094000 rw-p 00000000 00:00 0 7f9edc094000-7f9edc0ab000 r-xp 00000000 fd:01 98931 /usr/lib64/libpthread-2.17.so7f9edc0ab000-7f9edc2aa000 ---p 00017000 fd:01 98931 /usr/lib64/libpthread-2.17.so7f9edc2aa000-7f9edc2ab000 r--p 00016000 fd:01 98931 /usr/lib64/libpthread-2.17.so7f9edc2ab000-7f9edc2ac000 rw-p 00017000 fd:01 98931 /usr/lib64/libpthread-2.17.so7f9edc2ac000-7f9edc2b0000 rw-p 00000000 00:00 0 7f9edc2b0000-7f9edc2b7000 r-xp 00000000 fd:01 98935 /usr/lib64/librt-2.17.so7f9edc2b7000-7f9edc4b6000 ---p 00007000 fd:01 98935 /usr/lib64/librt-2.17.so7f9edc4b6000-7f9edc4b7000 r--p 00006000 fd:01 98935 /usr/lib64/librt-2.17.so7f9edc4b7000-7f9edc4b8000 rw-p 00007000 fd:01 98935 /usr/lib64/librt-2.17.so7f9edc4b8000-7f9edc4ba000 r-xp 00000000 fd:01 98911 /usr/lib64/libdl-2.17.so7f9edc4ba000-7f9edc6ba000 ---p 00002000 fd:01 98911 /usr/lib64/libdl-2.17.so7f9edc6ba000-7f9edc6bb000 r--p 00002000 fd:01 98911 /usr/lib64/libdl-2.17.so7f9edc6bb000-7f9edc6bc000 rw-p 00003000 fd:01 98911 /usr/lib64/libdl-2.17.so7f9edc6bc000-7f9edc7bc000 r-xp 00000000 fd:01 98913 /usr/lib64/libm-2.17.so7f9edc7bc000-7f9edc9bc000 ---p 00100000 fd:01 98913 /usr/lib64/libm-2.17.so7f9edc9bc000-7f9edc9bd000 r--p 00100000 fd:01 98913 /usr/lib64/libm-2.17.so7f9edc9bd000-7f9edc9be000 rw-p 00101000 fd:01 98913 /usr/lib64/libm-2.17.so7f9edc9be000-7f9edc9de000 r-xp 00000000 fd:01 98898 /usr/lib64/ld-2.17.so7f9edcbcf000-7f9edcbd4000 rw-p 00000000 00:00 0 7f9edcbdc000-7f9edcbdd000 rw-p 00000000 00:00 0 7f9edcbdd000-7f9edcbde000 r--p 0001f000 fd:01 98898 /usr/lib64/ld-2.17.so7f9edcbde000-7f9edcbdf000 rw-p 00020000 fd:01 98898 /usr/lib64/ld-2.17.so7f9edcbdf000-7f9edcbe0000 rw-p 00000000 00:00 0 7fffc7af3000-7fffc7b14000 rw-p 00000000 00:00 0 [stack]7fffc7b1f000-7fffc7b21000 r-xp 00000000 00:00 0 [vdso]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 性能类工具valgrind和qcachegrind内存分析工具开源的内存分析和性能分析工具。qcachegrind是一个valgrind辅助工具可视化方式查看valgrind性能分析结果。perf性能分析工具Linux自带的功能强大的性能分析工具可结合火焰图。使用方式如perf top -p pid。自带了生成SVG格式的图形化工具timechart也可结合FlameGraph生成火焰图。。记录进程一段时间性能统计信息perf record -p pid -g -e event -o logfileperf report -i logfile压力测试工具ab、tsung、siege网络类工具netstat和ss命令ss是一个可以替代netstat的网络连接查看工具(socket statistics)。 示例1查看TCP监听netstat -lpnt 示例1查看TCP连接netstat -lpna ss 显示符合指定条件的网络连接# ss -ntp sport :1114 src 10.12.5.3State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 10.12.5.3:1114 9.5.67.5:60913 users:((query_serv,pid69587,fd61)) netstat 和 ss 在指定参数“-p”时可能并没显示进程名源码文件https://github.com/ecki/net-tools/blob/master/netstat.c。ifconfig和ip命令ip是一个可以替代ifconfig和route等的网络管理工具为iproute2套件中的一员而ifconfig是net-tools中已被废弃使用的一个命令许多年前就已经没有维护了。 示例1设置一个IPip addr add 192.168.31.13/24 dev eth1 示例2查看设置的IP是否生效ip addr show eth1 示例3删除IPip addr del 192.168.31.13/24 dev eth1 示例4查看路由表ip route showifdown和ifupifdown和ifup实际是基于ifconfig的Shell脚本可用ifdown禁用指定网卡如“ifdown eth1”而ifup则相反用于启用指定网卡。tcpdump网络抓包工具参数“-s”指定显示多少字节的包内容-x表示仅以十六进制输出-X表示同时以十六进制和文本方式输出-e表示输出链接级别的头-w指定结果写入文件。 显示包的内容tcpdump -i eth1 -n -vv -x -e -s 600 # 仅二进制tcpdump -i eth1 -n -vv -X -e -s 600 # 二进制和文本 抓包保存到文件供Wireshark分析tcpdump -i eth1 -n -vv -X -e -s 600 -w x.cap 抓取192.168.31.1的80端口的包tcpdump -i eth1 host 192.168.31.1 and port 80 抓取目标IP为192.168.31.1和目标端口为80端口的包tcpdump -i eth1 dst host 192.168.31.1 and dst port 80 监听指定网卡tcpdump -i eth1 监听指定UDP端口tcpdump udp port 10888 监听指定TCP端口tcpdump tcp port 80 监听A和B或A和C间的通讯tcpdump host A and \(B or C \)# tcpdump host 127.0.0.1 and \(127.0.0.1 or 110.240.110.18 \) 监听A的所有通讯但不包括A和B的tcpdump ip A and not B 监听A发出的所有包tcpdump -i eth1 src host A 监听所有发送到B的包tcpdump -i eth1 dst host B 监听A收到或发出的所有http包tcpdump tcp port 80 and host A 列出tcpdump能够监听的网卡tcpdump -D 监听所有网卡要求2.2或更高版本内核tcpdump -i any 详细显示捕获的信息tcpdump -v 更详细可以使用“tcpdump -vv”和“tcpdump -vvv”。 以十六进制和ASCII方式打印包除了连接层头tcpdump -v -X 以十六进制和ASCII方式打印包包括连接层头tcpdump -v -XX 限制捕获100个包tcpdump -c 100 将记录写入文件tcpdump -w filename.log 使用IP代替域名tcpdump -n 捕获每个包的100字节而不是默认的68字节tcpdump -s 500 如果要捕获所有字节则为tcpdump -s 0。 捕获所有广播或多播包tcpdump -n broadcast or multicast 捕获所有icmp和arp包tcpdump -v icmp or arp 捕获arp包tcpdump -v arp 捕获目标地址是192.168.0.1端口是80或443的包tcpdump -n dst host 192.168.0.1 and (dst port 80 or dst port 443) 捕获目标端口号在1-1023间的UDP包tcpdump -n udp dst portrange 1-1023 捕获目标端口号为23的包tcpdump dst port 23 捕获目标网络为192.168.1.0/24的包tcpdump -n dst net 192.168.1.0/24 捕获源网络为192.168.1.0/24的包tcpdump -n src net 192.168.1.0/24ifstat网络流量实时查看工具$ ifstat#kernelInterface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate RX Errs/Drop TX Errs/Drop RX Over/Rate TX Coll/Ratelo 8546 0 8546 0 11845K 0 11845K 0 0 0 0 0 0 0 0 0eth1 93020 0 41717 0 8867K 0 5969K 0 0 0 0 0 0 0 0 0iptraf实时IP局域网监控iftop网络带宽监控按对端IP查看网络流量。nethogs网络带宽监控按进程查看网络流量https://github.com/raboof/nethogs/releases。slurm查看网络流量工具Arpwatch以太网活动监控器Suricata网络安全监控Nagios网络/服务器监控socat多功能的网络工具全称“Socket CAT”为netcat的加强版。mtr网络连通性判断工具集成了traceroute和ping。查看网卡统计ethtool -S eth1查看网卡RingBuffer大小ethtool -g eth1sar查看网络流量sar -n DEV 1 # 流量信息sar -n EDEV 1 # 错误信息sar -u 2 5 # 每2秒报告CPU使用率共显示5行次sar -I 14 -o int14.file 2 10 每2秒报告14号中断共显示10行次结果写入文件int14.filesar -f /var/log/sa/sa16 显示内存和网络统计结果写入文件/var/log/sa/sa16sar -A 显示所有统计tcpcopy引流可使用tcpcopy工具将线上环境的流量引入到测试环境中以将机器10.24.110.21的5000端口流量引流到机器10.23.25.11的5000端口为例线上机器10.24.110.21tcpcopy -x 4077-10.23.25.11:5000 -s 10.23.25.12 -c 192.168.100.x -n 1 测试机器10.23.25.11route add -net 192.168.100.0 netmask 255.255.255.0 gw 10.23.25.12 辅助机器10.23.25.12intercept -i eth1 -F tcp and src port 5000 因为TCP连接是有回包的所以需要辅助机器帮助接收回包一般是直接丢弃掉。开发类工具查找符号所在库以查找符号“__libc_csu_init”所在库为例filesls /lib64/*.a;for file in $files; do echo $file; nm $file | grep __libc_csu_init; done添加预先加载共享库只需将需要预先加载的库添加到文件/etc/ld.so.preload即可一行一个文件如# cat /etc/ld.so.preload/lib64/libonion.so/proc文件系统有关/proc的内容很庞大系统监控需要从这里读取大量数据这里逐步记录一些常用到的。/proc/meminfo内存大小和使用信息。/proc/cpuinfoCPU个数和频率等CPU信息。/proc/PID和/proc/PID/maps进程的各种信息其中PID为进程ID假设进程ID为2019则路径为“/proc/2019”。一个进程所创建和打开的文件描述符全在/proc/PID/fd下以Linux的init进程为例# ls /proc/1/fd0 1 10 11 12 13 14 15 16 17 2 20 21 22 24 25 26 27 28 29 3 30 31 32 33 34 37 38 39 4 5 6 7 8 9 包括进程的命令行参数等均可以这个目录下得到“cat /proc/PID/maps”可查看进程的内存映射。/proc/irq//proc/irq/该目录下存放的是以IRQ号命名的目录如/proc/irq/40/表示中断号为40的相关信息。/proc/irq/[irq_num]/smp_affinity该文件存放的是CPU位掩码十六进制修改该文件中的值可以改变CPU和某中断的亲和性。/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网络相关/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_memory free 命令看到的内存可能很小而 buff/cache 可能很大这个时候并不表示物理内存不够用可通过修改 drop_caches 来释放buff/cachebuff/cache 的作是页缓存。其它切换用户执行使用场景使用root创建好用户然后切换到该用户执行比如安装crontab监控。有两种方式使用“su”命令示例su - zhangsan -c whoamisu - zhangsan -c ps 使用“runuser”命令示例# runuser -u zhangsan whoami# runuser -u zhangsan pshwclock命令如果发现启动时系统日志文件/var/log/messages中的初始启动时间不对可能是因为/etc/adjtime设置问题比如# cat /etc/adjtime0.000000 1574671762 0.0000001574671762LOCAL 可将LOCAL改成UTC解决时间问题# cat /etc/adjtime0.000000 1574671762 0.0000001574671762UTC 可通过执行命令“hwclock --systohc --utc”设置如需改回LOCAL执行“hwclock --systohc --localtime”即可。history命令一般/etc/profile文件中定义了history最多可显示的历史记录数控制变量名为HISTSIZE。如果只是想history过滤某些命令可通过设置变量HISTIGNORE来实现比如export HISTIGNORE*mooon_ssh*:*mooon_upload*:*mooon_download* 如果全局设置可写入文件/etc/profile不过一般不建议修改/etc/profile而改为在目录/etc/profile.d下新建一个文件方式。shell中函数继承问题我们知道变量是会被子进程继承的可以直接使用。有些情况下可能需要继承函数以方便透明使用方法非常简单使用“export -f”注意参数“-f”它表示函数的意思不带参数的export只针对变量。function ifprop(){ echo :$1$2}export -f ifprop 也可以使用“typeset -fx”替代“export -f”。查看Linux各发行版本方法基本上各发行版本均在/etc目录下有个后缀为“-release”的文件该文件即存储了发行版本的版本号信息如SuSEcat /etc/SuSE-release Slackwarecat /etc/slackware-version Redhatcat /etc/redhat-release取IP地址命令netstat -ie|awk /broadcast/{print $2}netstat -ie|awk -F [ :] /cast/{print $4}netstat -ie|awk -F [ :] /cast/{print $3}清除系统缓存echo 3 /proc/sys/vm/drop_caches 测试请参见http://blog.chinaunix.net/uid-20682147-id-4209165.html。查看TCP数据cat /proc/net/tcp查看UDP数据cat /proc/net/udp查看socket缓冲区默认大小cat /proc/sys/net/core/rmem_default查看socket缓冲区最大大小cat /proc/sys/net/core/rmem_max找出CPU占用最高的线程ps -mp 20693 -o THREAD,tid,time | sort -rnLinux上查找造成IO高负载的进程方法1使用iotop工具这是一个python脚本工具使用方法如iotop -o 方法2使用工具dmesg使用dmesg之前需要先开启内核的IO监控echo 1 /proc/sys/vm/block_dump或sysctl vm.block_dump1 然后可以使用如下命令查看IO最重的前10个进程dmesg |awk -F: {print $1}|sort|uniq -c|sort -rn|head -n 10 方法3使用命令“iostat -x 1“确定哪个设备IO负载高# iostat -x 1 3avg-cpu: %user %nice %system %iowait %steal %idle 1.06 0.00 0.99 1.09 0.00 97.85 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %utilsda 0.49 17.29 1.74 6.75 23.47 200.18 11.73 100.09 26.33 0.10 12.25 5.73 4.87 找“await”值最大的设备Device如上的结果即为sda。然后使用mount找到sda挂载点再使用fuser命令查看哪些进程在访问如# fuser -vm /dataiptables简单应用iptables命令操作只对当前登录有效如果需重启后也有效可将操作放到/etc/rc.d/boot.local中如/sbin/iptables -F/sbin/iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT/sbin/iptables -A INPUT -i eth0 -p tcp -j DROP/sbin/iptables -A INPUT -i eth0 -p udp -j DROP iptables是一个链的方式从前往后判断如果前面的规则成立就不会往后继续所以要注意顺序每行对应一条规则。参数“-A”是Append意思也就是追加参数“-I”是Insert意思也就是插入参数“-F”是Flush意思表示清除即删除掉已有规则也就是清空。 查看已有的规则执行命令iptables -L -n 带行号显示结果DEL操作需要指定行号# iptables -L -n --line-numberChain INPUT (policy ACCEPT)num target prot opt source destination1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4432 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4433 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4434 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:805 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4436 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80007 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:4438 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:809 DROP tcp -- 0.0.0.0/0 0.0.0.0/010 DROP udp -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT)num target prot opt source destination Chain OUTPUT (policy ACCEPT)num target prot opt source destination 从上可以看到iptables有三种规则链ChainINPUT 用于指定输入规则比如外部是可以访问本机的80端口OUTPUT 用于指定输出规则比如本机是否可以访问外部的80端口FORWARD 用于指定端口转发规则相当于rinetd功能比如将8080端口的数据转到到80端口。 参数“-I”和参数“-A”需要指定链Chain名其中“-I”的链名后还需要指定第几条行规则。可通过“-D”参数删除规则有两种删除方式一是匹配模式二是指定第几条行。也可以通过“-R”参数修改已有规则另外“-L”参数后也可以跟链Chain名表示只列出指定链的所有规则。“-j”参数后跟的是动作即满足规则时执行的操作可以为ACCEPT、DROP、REJECT和REDIRECT等。 在iptables的INPUT链的第一行插入一条规则可访问其它机器的80端口iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 在iptables的INPUT链尾追加一条规则可访问其它机器的80端口iptables -A INPUT -p tcp --sport 80 -j ACCEPT 如果要让其它机器可以访问本机的80端口则为iptables -A INPUT -p tcp --dport 80 -j ACCEPT 插入前# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 插入# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 插入后# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 追加前# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 追加# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 追加后ACCEPT将不能生效# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 删除INPUT的第3条即第3行执行“iptables -L INPUT --line-numbers”显示行号规则iptables -D INPUT 3配置DNS客户端方法配置DNS客户端的方法非常简单需要修改两个文件修改/etc/resolv.conf在这个文件里增加DNS服务器的IP地址格式为nameserver DNS服务器IP地址如nameserver 192.168.1.46 可以有多行nameserver如nameserver 192.168.1.46nameserver 219.133.38.2nameserver 219.133.38.3 修改/etc/nsswitch.conf在这个文件中增加如下内容即可hosts: files dnsnetworks: files dns 现在即可ping域名了如ping www.hadoopor.com。当然在ping之前要保证该机器是可以正常连接到DNS服务器的DNS服务器的默认端口号为53可以通过telnet命令来测试是否能够连接到DNS服务器如telnet 192.168.1.46 53。crontab使用环境变量有两种方式在crontab中定义变量直接在crontab中定义变量A123* * * * * echo $A /tmp/a.txt 注意在定义变量时不能使用$引用其它变量如下面的做法错误A123B$A 在/etc/environment中定义变量此文件定义变量的格式为NAMEVALUE 同crontab也不能使用$引用其它变量。操作系统在登录时使用的第一个文件是/etc/environment文件/etc/environment文件包含指定所有进程的基本环境的变量。千万注意不要有“PATH$PATH:/usr/local/jdk/bin”这样的用法这将导致系统无法启动。小技巧想保持多台机器的crontab一致但变量值不完全相同这个时候可以考虑将变量配置在/etc/environment中这样crontab就可以相同了。如机器1A123 机器2A456 两者的crontab配置* * * * * echo $A /x.txt 一般不建议直接修改/etc/environment而可采取在目录/etc/profile.d下新增一个.sh文件方式替代。但如果想crontab中生效则只能修改/etc/environment经测试/etc/profile.d方式不起作用。另外注意在/etc/environment设置的变量在shell中并不生效但对crontab有效。几种修改Linux主机名的方法在安装一些系统时需要修改hostname比如安装Hadoop时需要修改主机名而且主机名不能包含下划线。实际上主机名分三种命令hostnamectl或hostnamectl status可查看三种主机名“pretty”主机名UTF8格式的主机名这个仅供阅读长度无限制“static”主机名日常所称的主机名traditional hostname。最多为64个字符仅可包含“.”、“_”、“-”、“a-z”、“A-Z”和“0-9”这些字符并且不能以“.”打头和结尾也不能两个“.”连续“transient”主机名内核维护的动态主机名初始化为“static”主机名默认为localhost。也为hadoop要求的主机名它的约束规则同“static”主机名。如果存在“static”主机名且不是“localhost”那么将忽略“transient”主机名。“transient”主机名可被DHCP和mDNS修改。 当三种主机名相同时“hostnamectl status”只会显示“static”主机名三种主机名的设置方法hostnamectl --pretty set-hostname NAMEhostnamectl --static set-hostname NAMEhostnamectl --transient set-hostname NAME hostnamectl修改的主机名在系统重启之前会一直有效而hostname只对当次有效。如果不指定参数则一次设置三种主机名hostnamectl set-hostname NAME临时修改主机名命令hostname不但可以查看主机名还可以用它来修改主机名格式为hostname 新主机名。在修改之前9.4.149.11对应的主机名为hadoop_10202而9.4.149.6对应的主机名为hadoop_10203。两者的主机名均带有下划线因此需要修改。为求简单仅将原下划线去掉hostname hadoop10202hostname hadoop10203 经过上述修改后类似于修改环境变量只临时有效还需要修改相应的系统配置文件以永久有效。永久修改主机名不同的Linux发行版本对应的系统配置文件可能不同SuSE 10.1是/etc/HOSTNAME# cat /etc/HOSTNAMEhadoop_10202 将文件中的“hadoop_10202”改成“hadoop10202”。有些Linux发行版本对应的可能是/etc/hostname文件有些如CentOS和RedHat同时有/etc/hostname和/etc/sysconfig/network两个文件修改/etc/hostname即可。需注意/etc/sysconfig/network的格式和/etc/hostname、/etc/HOSTNAME不同为HOSTNAME主机名 修改之后需要重启网卡以使修改生效执行命令/etc/rc.d/boot.localnet start不同系统命令会有差异这是SuSE上的方法其它一些可能为/etc/init.d/network restart或service network restart等再次使用hostname查看会发现主机名变了。上述方法如果不能永久有效则可使用hostnamectl修改来修改永久有效。如果还是不行则可重启系统以使永久有效。 可以通过以下多种方法查看主机名hostname命令也可以用来修改主机名但当次仅当次会话有效hostnamectl命令也可以用来修改主机名系统重启前一直有效cat /proc/sys/kernel/hostnamecat /etc/hostname或cat /etc/sysconfig/network永久性的修改需要重启sysctl kernel.hostname也可以用来修改主机名但仅重启之前有效 批量修改/etc/hostname工具其它可参照https://github.com/eyjian/libmooon/blob/master/shell/set_hostname.sh区别方法效果hostname当次登录临时有效新登录或重新登录后无效hostnamectl系统重启之前一直有效重启后无效/etc/hostname只有在系统重启后才有效process_monitor.sh进程监控重启工具使用process_monitor.sh监控进程当进程挂掉后能够在两三秒内将进程重拉起并且支持同一程序以不同参数启动多个实例和不同用户以相同参数启动多个实例。下载https://github.com/eyjian/libmooon/blob/master/shell/process_monitor.sh。一般建议将process_monitor.sh放在/usr/local/bin目录下并设置好可执行权限放在crontab中运行。 示例1:监控redis进程* * * * * /usr/local/bin/process_monitor.sh /data/redis/bin/redis-server 6379 /data/redis/bin/redis-server /data/redis/conf/redis-6379.conf* * * * * /usr/local/bin/process_monitor.sh /data/redis/bin/redis-server 6380 /data/redis/bin/redis-server /data/redis/conf/redis-6380.conf 示例2:监控zookeeper进程* * * * * /usr/local/bin/process_monitor.sh /usr/local/jdk/bin/java -Dzookeeper /data/zookeeper/bin/zkServer.sh start process_monitor.sh启动后会在/tmp目录下创建以“/process_monitor-”打头的日志文件假设root用户运行process_monitor.sh则日志全路径为/tmp/process_monitor-root.log。远程批量操作工具远程批量工具包含批量命令工具mooon_ssh批量上传文件工具mooon_upload批量下载文件工具mooon_download。 可执行二进制包下载地址https://github.com/eyjian/libmooon/releases 源代码包下载地址https://github.com/eyjian/libmooon/archive/master.zip 批量工具除由三个工具组成外还分两个版本C版本GO版本 当前C版本比较成熟GO版本相当简略但C版本依赖C运行时库不同环境需要特定编译而GO版本可不依赖C和C运行时库所以不需编译即可应用到广泛的Linux环境。 使用简单直接执行命令即会提示用法如C版本$ mooon_sshparameter[-c]s value not set usage:-h[]: Connect to the remote machines on the given hosts separated by comma, can be replaced by environment variable H, example: -h192.168.1.10,192.168.1.11-P[36000/10,65535]: Specifies the port to connect to on the remote machines, can be replaced by environment variable PORT-u[]: Specifies the user to log in as on the remote machines, can be replaced by environment variable U-p[]: The password to use when connecting to the remote machines, can be replaced by environment variable P-t[60/1,65535]: The number of seconds before connection timeout-c[]: The command is executed on the remote machines, example: -cgrep ERROR /tmp/*.log-v[1/0,2]: Verbosity, how much troubleshooting info to print批量执行命令工具mooon_ssh参数名默认值说明-u无用户名参数可用环境变量U替代-p无密码参数可用环境变量P替代-h无IP列表参数可用环境变量H替代-P22可修改源码编译为常用端口号SSH端口参数可用环境变量PORT替代-c无在远程机器上执行的命令建议单引号方式指定值除非要执行的命令本身已经包含了单引号有冲突。使用双引号时要注意转义否则会被本地shell解释-v1工具输出的详细度-thr1线程数当线程数大于2时并发执行如果值为0表示线程数和IP数相同批量上传文件工具mooon_upload参数名默认值说明-u无用户名参数可用环境变量U替代-p无密码参数可用环境变量P替代-h无IP列表参数可用环境变量H替代-P22可修改源码编译为常用端口号SSH端口参数可用环境变量PORT替代-s无以逗号分隔的需要上传的本地文件列表可以带相对或绝对目录-d无文件上传到远程机器的目录只能为单个目录-thr1线程数当线程数大于2时并发执行如果值为0表示线程数和IP数相同使用示例使用示例1上传/etc/hostsmooon_upload -s/etc/hosts -d/etc 使用示例2检查/etc/profile文件是否一致mooon_ssh -cmd5sum /etc/hosts 使用示例3批量查看crontabmooon_ssh -ccrontab -l 使用示例4批量清空crontabmooon_ssh -crm -f /tmp/crontab.empty;touch /tmp/crontab.emptymooon_ssh -ccrontab /tmp/crontab.emtpy 使用示例5批量更新crontabmooon_ssh -ccrontab /tmp/crontab.online 使用示例6取远端机器IP因为awk用单引号所以参数“-c”的值不能使用单引号所以内容需要转义相对其它来说要复杂点mooon_ssh -cnetstat -ie | awk -F[\\ :] BEGIN{ok0;}{if (match(\$0, \eth1\)) ok1; if ((1ok) match(\$0,\inet\)) { ok0; if (7NF) printf(\%s\\n\,\$3); else printf(\%s\\n\,\$4);} } 不同的环境IP在“netstat -ie”输出中的位置稍有不同所以awk中加了“7NF”判断但仍不一定适用于所有的环境。需要转义的字符包含双引号、美元符和斜杠。 使用示例7批量查看kafka进程环境变量方式$ export H192.168.31.9,192.168.31.10,192.168.31.11,192.168.31.12,192.168.31.13$ export Ukafka$ export P123456 $ mooon_ssh -c/usr/local/jdk/bin/jps -m[192.168.31.15]50928 Kafka /data/kafka/config/server.properties125735 Jps -m[192.168.31.15] SUCCESS [192.168.31.16]147842 Jps -m174902 Kafka /data/kafka/config/server.properties[192.168.31.16] SUCCESS [192.168.31.17]51409 Kafka /data/kafka/config/server.properties178771 Jps -m[192.168.31.17] SUCCESS [192.168.31.18]73568 Jps -m62314 Kafka /data/kafka/config/server.properties[192.168.31.18] SUCCESS [192.168.31.19]123908 Jps -m182845 Kafka /data/kafka/config/server.properties[192.168.31.19] SUCCESS [192.168.31.15 SUCCESS] 0 seconds[192.168.31.16 SUCCESS] 0 seconds[192.168.31.17 SUCCESS] 0 seconds[192.168.31.18 SUCCESS] 0 seconds[192.168.31.19 SUCCESS] 0 secondsSUCCESS: 5, FAILURE: 0 使用示例8批量停止kafka进程参数方式$ mooon_ssh -c/data/kafka/bin/kafka-server-stop.sh -ukafka -p123456 -h192.168.31.15,192.168.31.16,192.168.31.17,192.168.31.18,192.168.31.19[192.168.31.15]No kafka server to stopcommand return 1 [192.168.31.16]No kafka server to stopcommand return 1 [192.168.31.17]No kafka server to stopcommand return 1 [192.168.31.18]No kafka server to stopcommand return 1 [192.168.31.19]No kafka server to stopcommand return 1 [192.168.31.15 FAILURE] 0 seconds[192.168.31.16 FAILURE] 0 seconds[192.168.31.17 FAILURE] 0 seconds[192.168.31.18 FAILURE] 0 seconds[192.168.31.19 FAILURE] 0 secondsSUCCESS: 0, FAILURE: 5iptables入门可修改/etc/rc.d/boot.local让iptables操作在系统重启后也生效如/sbin/iptables -F/sbin/iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT/sbin/iptables -A INPUT -i eth0 -p tcp -j DROP/sbin/iptables -A INPUT -i eth0 -p udp -j DROP iptables是一个链的方式从前往后判断如果前面的规则成立就不会往后继续所以要注意顺序一般每行对应一条规则。-A是Append意思也就是追加-I是Insert意思也就是插入-F表示清除即删除掉已有规则也就是清空 查看已有的规则执行命令iptables -L -n # 或 iptables -L -n --line-numbers 如参数-L为list意思-n表示以数字方式显示IP和端口不指定-n则显示为名称如http即80端口# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:443ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination 从可以看到iptables有三种规则链Chain即INPUT、OUTPUT和FORWARD。INPUT 用于指定输入规则比如外部是可以访问本机的80端口OUTPUT 用于指定输出规则比如本机是否可以访问外部的80端口FORWARD 用于指定端口转发规则相当于rinetd功能比如将8080端口的数据转到到80端口 -I和-A需要指定链Chain名其中-I的链名后还需要指定第几条行规则。可通过-D参数删除规则有两种删除方式一是匹配模式二是指定第几条行。也可以通过-R参数修改已有规则另外-L参数后也可以跟链Chain名表示只列出指定链的所有规则。-j参数后跟的是动作即满足规则时执行的操作可以为ACCEPT、DROP、REJECT和REDIRECT等。在iptables的INPUT链的第一行插入一条规则可访问其它机器的80端口iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 在iptables的INPUT链尾追加一条规则可访问其它机器的80端口iptables -A INPUT -p tcp --sport 80 -j ACCEPT 在iptables的INPUT链的最前插入一条规则# iptables -I INPUT -s 10.125.32.45 -j DROP # 等同 iptables -I INPUT 1 -s 10.125.32.45 -j DROP# iptables -L INPUT --line-numbersChain INPUT (policy ACCEPT)num target prot opt source destination 1 DROP all -- 10.125.32.45 anywhere 2 DROP all -- 10.125.32.44 anywhere 如果要让其它机器可以访问本机的80端口则为iptables -A INPUT -p tcp --dport 80 -j ACCEPT 插入前# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 插入# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 插入后# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 追加前# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 追加# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT 追加后ACCEPT将不能生效# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destination DROP tcp -- 0.0.0.0/0 0.0.0.0/0 DROP udp -- 0.0.0.0/0 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80 删除INPUT的第3条即第3行执行“iptables -L INPUT --line-numbers”显示行号注意行号从1开始而不是从0开始规则iptables -D INPUT 3 示例1允许指定 IP 访问指定端口IP 白名单# 允许 IP 访问本地的端口 PORT iptables -A INPUT -s IP -p tcp --dport PORT -j ACCEPT 示例2禁止所有对端口 PORT 的访问如同示例1一块使用则需在示例1之后# 禁止外部访问本地的端口 PORTiptables -A INPUT -s 0.0.0.0/0 -p tcp --dport PORT -j DROP
http://www.hkea.cn/news/14310080/

相关文章:

  • 温州网站推广价钱网络舆情监测中心
  • 代做网站公司哪家好人工智能网页设计
  • python做网站快吗成都商报官方网站
  • 广州做网站代理商沂源县建设局网站
  • 宿迁哪家做网站推广中国十大网络公司排名
  • phthon网站开发网站名称 备案
  • 内网建站软件wordpress 添加分享
  • 阿里巴巴吧网站建设大连网站优化方案
  • 坦桑尼亚网站域名后缀做seo排名好的网站
  • 做网站暴利电子商务考研最佳方向
  • 毕节网站怎么做seo青岛免费网站建站模板
  • 怎么查网站是谁建的IT周末做网站违反制度么
  • 网站备案 更改ip企业宣传视频拍摄制作
  • 网站建设公司专业开发北京网站杭州网站商场开发
  • logo是个网站做软件项目需不需要有网站
  • 重庆网站建设项目宜城网站建设网络推广
  • 深圳商城网站建设报价服装设计公司有什么职位
  • 岳阳网站开发网站运营哪家好怎样把自己做的网站发到网上
  • 站长工具seo综合查询问题青岛手机建站公司
  • 网页制作与网站建设思维导图wordpress 代码位置
  • 有网站源码如何搭建自己的网站网站异常传播怎么解除
  • 漫画交流网站怎么做如果制作个人网站
  • 网站推广可采用的方法有哪些介绍一个电影的网站模板下载
  • 湖州网站建设哪家公司好室内设计书籍
  • 做门户网站赚钱吗手机必备软件
  • 网站开发费用周期wordpress 不同国家跳转
  • 苏州园区网站开发旅游网站管理系统php
  • 丹徒网站建设服务网站页面怎样做1920
  • 做正品的汽配网站笑话类网站用什么做
  • 网站集约化建设优点学校网站开发4人小组分工