linux2
https://sites.google.com/a/chromium.org/chromedriver/home
http://go.microsoft.com/fwlink/?LinkId=619687
11.1 ls 功能:列出目录内容 常用选项: -a 显示所有文件,包括隐藏的 -l 长格式列出信息 -i 显示文件 inode 号 -t 按修改时间排序 -r 按修改时间倒序排序 -h 打印易读大小单位 示例: 11.2 echo 功能:打印一行 常用选项: -n 不加换行符 -e 解释转义符 示例: 解释换行符: 11.3 printf 功能:格式化打印数据。默认打印字符串不换行。 格式:printf format [arguments] Format 描述 %s 一个字符串 %d,%i 一个小数 %f 一个浮点数 %.ns 输出字符串,n 是输出几个字符 %m.nf 输出浮点数,m 是输出整数位数,n 是输出的小数位数 %x 不带正负号的十六进制,使用 a 至 f 表示 10 到 15 %X 不带正负号的十六进制,使用 A 至 F 表示 10 至 15 %% 输出单个% %-5s 左对齐,对参数每个字段左对齐,宽度为 5 %-4.2f 左对齐,宽度为 4,保留两位小数 %5s 右对齐,不加横线表示右对齐 一些常用的空白符: \n 换行 \r 回车 \t 水平制表符 示例: 11.4 cat 功能:连接文件和标准输出打印 常用选项: -b 显示非空行行号 -n 显示所有行行号 -T 显示 tab,用^I 表示 -E 显示以$结尾 示例: 11.5 tac 功能:连接文件和倒序打印文件 常用选项: 示例: 倒序打印每一行: 11.6 rev 功能:反向打印每一行 常用选项: 示例: 11.7 wc 功能:统计文件行数、字节、字符数 常用选项: -c 打印文件字节数,一个英文字母 1 字节,一个汉字占 2-4 字节(根据编码) -m 打印文件字符数,一个汉字占 2 个字符 -l 打印多少行 -L 打印最长行的长度,也可以统计字符串长度 示例: 11.8 cp 功能:复制文件或目录 常用选项: -a 归档 -b 目标文件存在创建备份,备份文件是文件名跟~ -f 强制复制文件或目录 -r 递归复制目录 -p 保留原有文件或目录属性 -i 覆盖文件之前先询问用户 -u 当源文件比目的文件修改时间新时才复制 -v 显示复制信息 示例: 11.9 mkdir 功能:创建目录 常用选项: -p 递归创建目录 -v 显示创建过程 示例: 11.10 mv 功能:移动文件或重命名 常用选项: -b 目标文件存在创建备份,备份文件是"文件名后跟~" -u 当源文件比目的文件修改时间新时才移动 -v 显示移动信息 示例: 11.11 rename 功能:重命名文件,支持通配符 常用选项: 示例:批量命名文件 11.12 dirname 功能:去除路径的最后一个名字 常用选项: 示例: 11.13 basename 功能:打印路径的最后一个名字 常用选项: -a 支持多个参数 -s 删除后面的后缀 示例: 11.14 du 功能:估算文件磁盘空间使用 常用选项: -h 易读格式显示(K,M,G) -b 单位 bytes 显示 -k 单位 KB 显示 -m 单位 MB 显示 -s 只显示总大小 --max-depth=<目录层数>,超过层数的目录忽略 --exclude=file 排除文件或目录 --time 显示大小和创建时间 示例: 11.15 cut 功能:选取文件的每一行数据 常用选项: -b 选中第几个字符 -c 选中多少个字符 -d 指定分隔符分字段,默认是空格 -f 显示选中字段 示例: 11.16 tr 功能:替换或删除字符 格式:Usage: tr [OPTION]... SET1 [SET2] 常用选项: -c 替换 SET1 没有 SET2 的字符 -d 删除 SET1 中字符 -s 压缩 SET1 中重复的字符 -t 将 SET1 用 SET2 转换,默认 示例: 11.17 stat 功能:显示文件或文件的系统状态 常用选项: -Z 显示 selinux 安全上下文 -f 显示文件系统状态 -c 指定格式输出内容 -t 以简洁的形式打印 示例: 11.18 seq 功能:打印序列化数字 常用选项: -f 使用 printf 样式格式 -s 指定换行符,默认是\n -w 等宽,用 0 填充 示例: 11.19 shuf 功能:生成随机序列 常用选项: -i 输出数字范围 -o 结果写入文件 示例: 输出范围随机数: 11.20 sort 功能:排序文本,默认对整列有效 常用选项: -f 忽略字母大小写 -M 根据月份比较,比如 JAN、DEC -h 根据易读的单位大小比较,比如 2K、1G -g 按照常规数值排序 -n 根据字符串数值比较 -r 倒序排序 -k 位置 1,位置 2 根据关键字排序,在从第位置 1 开始,位置 2 结束 -t 指定分隔符 -u 去重重复行 -o 将结果写入文件 示例: 11.21 uniq 功能:去除重复行,只会统计相邻的 常用选项: -c 打印出现的次数 -d 只打印重复行 -u 只打印不重复行 -D 只打印重复行,并且把所有重复行打印出来 -f N 比较时跳过前 N 列 -i 忽略大小写 -s N 比较时跳过前 N 个字符 -w N 对每行第 N 个字符以后内容不做比较 示例: 测试文本如下: # cat file abc cde xyz cde xyz abd 去重复行: # sort file |uniq abc abd cde xyz 打印每行重复次数: # sort file |uniq -c 1 abc 1 abd 2 cde 2 xyz 打印不重复行: # sort file |uniq -u abc abd 打印重复行: # sort file |uniq -d cde xyz 打印重复行并统计出现次数: # sort file |uniq -d -c 2 cde 2 xyz 根据前几个字符去重: # sort file |uniq -w 2 abc cde xyz 11.22 tee 功能:从标准输入读取写到标准输出和文件 常用选项: -a 追加到文件 示例: 11.23 join 功能:连接两个文件 常用选项: -i 忽略大小写 -o 按照指定文件栏位显示 -t 使用字符作为输入和输出字段分隔符 示例: 11.24 paste 功能:合并文件 常用选项: -d 指定分隔符,默认是 tab 键分隔 -s 将文件内容平行合并,默认 tab 键分隔 示例: 11.25 head 功能:输出文件的前几行 常用选项: -c 打印前多少 K,M -n 打印前多少行 示例: 11.26 tail 功能:输出文件的后几行 常用选项: -c 打印后多少 K,M -f 实时读文件,随着文件输出附加输出 -n 输出最后几行 --pid 与-f 一起使用,表示 pid 死掉后结束 -s 与-f 一起使用,表示休眠多少秒输出 示例: 11.27 find 功能:目录层次结构中搜索文件 格式:find path -option actions 常用选项: -name 文件名,支持(‘*’, ‘?’) -type 文件类型,d 目录,f 常规文件等 -perm 符合权限的文件,比如 755 -atime -/+n 在 n 天以内/过去 n 天被访问过 -ctime -/+n 在 n 天以内/过去 n 天被修改过 -amin -/+n 在 n 天以内/过去 n 分钟被访问过 -cmin -/+n 在 n 天以内/过去 n 分钟被修改过 -size -/+n 文件大小小于/大于,b、k、M、G -maxdepth levels 目录层次显示的最大深度 -regex pattern 文件名匹配正则表达式模式 -inum 通过 inode 编号查找文件 动作: -detele 删除文件 -exec command {} \; 执行命令,花括号代表当前文件 -ls 列出当前文件,ls -dils 格式 -print 完整的文件名并添加一个回车换行符 -print0 打印完整的文件名并不添加一个回车换行符 -printf format 打印格式 其他字符: ! 取反 -or/-o 逻辑或 -and 逻辑和 示例: 11.28 xargs 功能:从标准输入执行命令 常用选项: -a file 从指定文件读取数据作为标准输入 -0 处理包含空格的文件名,print0 -d delimiter 分隔符,默认是空格分隔显示 -i 标准输入的结果以{}代替 -I 标准输入的结果以指定的名字代替 -t 显示执行命令 -p 交互式提示是否执行命令 -n 最大命令行参数 --show-limits 查看系统命令行长度限制 示例: 11.29 nl 功能:打印文件行号 常用选项: -b <a|t> 指定行号显示方式,a 表示所有行都打印行号,b 表示空行不显示行号,默认是 a -n <ln|rn|rz> 行号显示方法,ln 左对齐,rn 右对齐,rz 右边显示,左边空白用 0 填充。 -w 行号栏位在左边占用的宽度 示例: 11.30 date 功能:打印或设置系统日期和时间 常用选项: -d string 显示指定字符串所描述的时间,而非当前时间 -f datefile 从日期文件中按行读入时间描述 -I 输出 ISO 8601 格式的日期和时间 -r 显示文件的最后修改时间 -R 输出 RFC 2822 格式的日期和时间 -s string 设置时间所描述的字符串 -u 打印或设置 UTC 时间 控制输出格式: %% 一个文字的 % %a 当前 locale 的星期名缩写(例如: 日,代表星期日) %A 当前 locale 的星期名全称 (如:星期日) %b 当前 locale 的月名缩写 (如:一,代表一月) %B 当前 locale 的月名全称 (如:一月) %c 当前 locale 的日期和时间 (如:2005 年 3 月 3 日 星期四 23:05:25) %C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) %d 按月计的日期(例如:01) %D 按月计的日期;等于%m/%d/%y %e 按月计的日期,添加空格,等于%_d %F 完整日期格式,等价于 %Y-%m-%d %g ISO-8601 格式年份的最后两位 (参见%G) %G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用 %h 等于%b %H 小时(00-23) %I 小时(00-12) %j 按年计的日期(001-366) %k 时(0-23) %l 时(1-12) %m 月份(01-12) %M 分(00-59) %n 换行 %N 纳秒(000000000-999999999) %p 当前 locale 下的"上午"或者"下午",未知时输出为空 %P 与%p 类似,但是输出小写字母 %r 当前 locale 下的 12 小时时钟时间 (如:11:11:04 下午) %R 24 小时时间的时和分,等价于 %H:%M %s 自 UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 %S 秒(00-60) %t 输出制表符 Tab %T 时间,等于%H:%M:%S %u 星期,1 代表星期一 %U 一年中的第几周,以周日为每星期第一天(00-53) %V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53) %w 一星期中的第几日(0-6),0 代表周一 %W 一年中的第几周,以周一为每星期第一天(00-53) %x 当前 locale 下的日期描述 (如:12/31/99) %X 当前 locale 下的时间描述 (如:23:13:48) %y 年份最后两位数位 (00-99) %Y 年份 示例: 11.31 wget 功能:非交互式网络下载,类似于 HTTP 客户端 常用选项: -b, --background 后台运行 日志记录和输入文件: -o, --output-file=FILE 日志写到文件 -a, --append-output=FILE 日志追加到文件 -d, --debug 打印 debug 信息,会包含头信息 -q, --quiet 退出,不输出 -i, --input-file=FILE 从文件中读取 URL 下载 下载选项: -t, --tries=NUMBER 设置链接重试次数 -O, --output-document=FILE 写入内容到文件 -nc, --no-clobber 跳过下载现有的文件 -c, --continue 断点续传 --progress=TYPE 设置进度条(dot 和 bar) -S, --server-response 打印服务器响应头信息 --spider 不下载任何内容 -T, --timeout=SECONDS 设置相应超时时间(还有--dns-timeout、--connect-timeout 和 --read-timeout) -w, --wait=SECONDS 两次重试间隔等待时间 --bind-address=ADDRESS 设置绑定地址 --limit-rate=RATE 限制下载速度 --user=USER 设置 ftp 和 http 用户名 --password=PASS 设置 ftp 和 http 密码 目录: -P, --directory-prefix=PREFIX 保存文件目录 HTTP 选项: --http-user=USER 设置 http 用户名 --http-password=PASS 设置 http 密码 --proxy-user=USER 设置代理用户名 --proxy-password=PASS 设置代理密码 --referer=URL 设置 Referer --save-headers 保存头到文件 --default-page=NAME 改变默认页面名字,默认 index.html -U,--user-agent=AGENT 设置客户端信息 --no-http-keep-alive 禁用 HTTP keep-alive(长连接) --load-cookies=FILE 从文件加载 cookies --save-cookies=FILE 保存 cookies 到文件 --post-data=STRING 使用 POST 方法,发送数据 FTP 选项: --ftp-user=USER 设置 ftp 用户名 --ftp-password=PASS 设置 ftp 密码 --no-passive-ftp 禁用被动传输模式 递归下载: -r, --recursive 指定递归下载 -l, --level=NUMBER 最大递归深度 -A, --accept=LIST 逗号分隔下载的扩展列表 -R, --reject=LIST 逗号分隔不被下载的扩展列表 -D, --domains=LIST 逗号分隔被下载域的列表 --exclude-domains=LIST 排除不被下载域的列表 示例: # wget -t 3 -c http://nginx.org/download/nginx-1.11.7.tar.gz -P down 不下载任何内容,判断 URL 是否可以访问: # wget --spider http://nginx.org/download/nginx-1.11.7.tar.gz 下载内容写到文件: # wget http://www.baidu.com/index.html -O index.html 从文件中读取 URL 下载: # wget -i url.list 下载 ftp 文件: # wget --ftp-user=admin --ftp-password=admin ftp://192.168.1.10/ISO/CentOS-6.5-i386- minimal.iso 伪装客户端,指定 user-agent 和 referer 下载: # wget -U "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --referer "http://nginx.org/en/download.html" http://nginx.org/download/nginx-1.11.7.tar.gz 查看 HTTP 头信息: # wget -S http://nginx.org/download/nginx-1.11.7.tar.gz # wget --debug http://nginx.org/download/nginx-1.11.7.tar.gz 11.32 curl 功能:发送数据到 URL,类似于 HTTP 客户端 常用选项: -k, --insecure 允许 HTTPS 连接网站 -C, --continue-at 断点续传 -b, --cookie STRING/FILE 从文件中读取 cookie -c, --cookie-jar 把 cookie 保存到文件 -d, --data 使用 POST 方式发送数据 --data-urlencode POST 的数据 URL 编码 -F, --form 指定 POST 数据的表单 -D, --dump-header 保存头信息到文件 --ftp-pasv 指定 FTP 连接模式 PASV/EPSV -P, --ftp-port 指定 FTP 端口 -L, --location 遵循 URL 重定向,默认不处理 -l, --list-only 指列出 FTP 目录名 -H, --header 自定义头信息发送给服务器 -I, --head 查看 HTTP 头信息 -o, --output FILE 输出到文件 -#, --progress-bar 显示 bar 进度条 -x, --proxy [PROTOCOL://]HOST[:PORT] 使用代理 -U, --proxy-user USER[:PASSWORD] 代理用户名和密码 -e, --referer 指定引用地址 referer -O, --remote-name 使用远程服务器上名字写到本地 --connect-timeout 连接超时时间,单位秒 --retry NUM 连接重试次数 --retry-delay 两次重试间隔等待时间 -s, --silent 静默模式,不输出任何内容 -Y, --speed-limit 限制下载速率 -u, --user USER[:PASSWORD] 指定 http 和 ftp 用户名和密码 -T, --upload-file 上传文件 -A, --user-agent 指定客户端信息 示例: 11.33 scp 功能:基于 SSH 的安全远程服务器文件拷贝 常用选项: -i 指定私钥文件 -l 限制速率,单位 Kb/s,1024Kb=1Mb -P 指定远程主机 SSH 端口 -p 保存修改时间、访问时间和权限 -r 递归拷贝目录 -o SSH 选项,有以下几个比较常用的: ConnectionAttempts=NUM 连接失败后重试次数 ConnectTimeout=SEC 连接超时时间 StrictHostKeyChecking=no 自动拉去主机 key 文件 PasswordAuthentication=no 禁止密码认证 示例: 11.34 rsync 功能:远程或本地文件同步工具 常用选项: -v 显示复制信息 -q 不输出错误信息 -c 跳过基础效验,不判断修改时间和大小 -a 归档模式,等效-rlptgoD,保留权限、属组等 -r 递归目录 -l 拷贝软连接 -z 压缩传输数据 -e 指定远程 shell,比如 ssh、rsh --progress 进度条,等同-P --bwlimit=KB/s 限制速率,0 为没有限制 --delete 删除那些 DST 中 SRC 没有的文件 --exclude=PATTERN 排除匹配的文件或目录 --exclude-from=FILE 从文件中读取要排除的文件或目录 --password-file=FILE 从文件读取远程主机密码 --port=PORT 监听端口 示例: 11.35 nohup 功能:运行程序,忽略挂起信号 示例: 11.36 iconv 功能:将文件内容字符集转成其他字符集 常用选项: -l 列出所有已知的字符集 -f 原始文本编码 -t 输出编码 -o 输出到文件 -s 关闭警告 示例: 11.37 uname 功能:输出系统信息 常用选项: -a 输出以下所有信息 -s 输出内核名称 -n 输出主机名 -r 输出内核发行版 -v 输出内核版本 -m 输出主机的硬件架构名称 -p 输出处理器类型或"unknown" -i 输出硬件平台或"unknown -o 输出操作系统名称 示例: 11.38 sshpass 功能:非交互 SSH 登录(需要安装) 常用选项: -f 从文件中获取密码 -d 用文件描述符数字获取密码 -p 指定 SSH 密码 -e 密码作为环境变量传递,变量名是 SSHPASS 示例: 11.39 tar 功能:归档目录或文件 常用选项: -c 创建新归档 -d 比较归档和文件系统的差异 -r 追加文件到归档 -t 存档的内容列表 -x 提取归档所有文件 -C 改变解压目录 -f 使用归档文件或设备归档 -j bzip2 压缩 -z gzip 压缩 -v 输出处理过程 示例: 11.40 logger 功能:系统日志的 shell 命令行接口 常用选项: -i 每行记录进程 ID -f 指定输出日志到文件 -p 设置记录的优先级 -t 添加标签 示例: 11.41 netstat 功能:打印网络连接、路由表、接口统计信息、伪装连接和多播成员 常用选项: -r 显示路由表 -i 显示接口表 -n 不解析名字 -p 显示程序名 PID/Program -l 显示监听的 socket -a 显示所有 socket -o 显示计时器 -Z 显示上下文 -t 只显示 tcp 连接 -u 只显示 udp 连接 -s 显示每个协议统计信息 示例: 11.42 ss 功能:比 netstat 更强大的 socket 查看工具 格式:ss [options] [ FILTER ] 常用选项: -n 不解析名字 -a 显示所有 socket -l 显示所有监听的 socket -o 显示计时器 -e 显示 socket 详细信息 -m 显示 socket 内存使用 -p 显示进程使用的 socket -i 显示内部 TCP 信息 -s 显示 socket 使用汇总 -4 只显示 IPV4 的 socket -0 显示包 socket -t 只显示 TCP socket -u 只显示 UDP socket -d 只显示 DCCP socket -w 只显示 RAW socket -x 只显示 Unix 域 socket -f FAMILY 只显示 socket 族类型( unix, inet, inet6, link, netlink) -A 查询 socket {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY] -D 将原始的 TCP socket 转储到文件 -F 从文件中读取过滤信息 过滤: -o state 显示 TCP 连接状态信息 示例: 11.43 lsof 功能:列出打开的文件 常用选项: -i [i] 监听的网络地址,如果没有指定,默认列出所有。 [i]来自[46][protocol][@hostname|hostaddr][:service|port] -U 列出 Unix 域 socket 文件 -p 指定 PID -u 指定用户名或 UID 所有打开的文件 +D 递归搜索 示例: 11.44 ps 功能:报告当前进程的快照 常用选项: -a 显示所有进程 -u 选择有效的用户 ID 或名称 -x 显示无控制终端的进程 -e 显示所有进程 -f 全格式 -r 只显示运行的进程 -T 这个终端的所有进程 -p 指定进程 ID --sort 对某列排序 -m 线程 -L 格式化代码列表 -o 用户自定义格式 CODE NORMAL HEADER %C pcpu %CPU %G group GROUP %P ppid PPID %U user USER %a args COMMAND %c comm COMMAND %g rgroup RGROUP %n nice NI %p pid PID %r pgid PGID %t etime ELAPSED %u ruser RUSER %x time TIME %y tty TTY %z vsz VSZ 示例: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER 进程所有者 PID 进程 ID %CPU 占用 CPU 时间 %MEM 物理内存 VSZ 虚拟内存大小(kb) RSS 驻留集内存页数量(kb) TTY 终端 STAT 进程状态;R 运行,S 休眠,D 不可中断,T 停止,Z 僵尸,N 表示普通优先级更低的优先级 START 进程启动时间 TIME 使用 CPU 总时间 COMMAND 命令名称和参数 11.45 top 功能:动态显示活动的进程和系统资源利用率 常用选项: -d 信息刷新时间间隔 -p 只监控指定的进程 PID -i 只显示正在使用 CPU 的进程 -H 显示线程 -u 只查看指定用户名的进程 -b 将输出编排成易处理格式,适合输出到文件处理 -n 指定最大循环刷新数 交互命令: f 添加或删除显示的指标 c 显示完整命令 P 按 CPU 使用百分比排序 M 按驻留内存大小排序 T 按进程使用 CPU 时间排序 1 显示每个 CPU 核心使用率 k 终止一个进程 示例: 第一行:当前系统时间,系统运行了多长时间(9 天 22 小时 16 分钟),CPU 负载:1 分钟、5 分钟、 15 分钟 第二行:系统总共 178 个进程,3 个 CPU 正在处理,175 在休眠等待处理,0 个停止,0 个僵尸进程 第三行:us 用户空间使用 CPU 时间 0.3%,sy 内核空间使用 CPU 时间 0.3%,ni 系统调整进程优先级 使用 CPU 时间 0.0%,id 空闲 CPU 时间 99.3%,wa 等待 I/O 响应 CPU 时间 0.0%,hi 硬中断,si 软中 断。 第四行和第五行:物理内存与交换分区使用率 第六行: PID 进程 ID USER 进程所有者 PR 进程优先级 NI 负值表示高优先级,正值表示低优先级 VIRT 进程启动后使用虚拟内存总量(KB),VIRT=SWAP+RES RES 实际物理内存使用大小(KB),RES=CODE+DATA SHR 共享内存大小(KB),可能与其他进程共享的内存;计算进程使用物理内存大小:RES-SHR S 进程状态;R 运行,S 休眠,D 不可中断,T 停止,Z 僵尸 %CPU 上次更新到现在的 CPU 时间占用百分比 %MEM 使用物理内存百分比 TIME+ 使用 CPU 总时间 COMMAND 命令名称和参数 11.46 free 功能:查看内存使用率 常用选项: -b bytes 显示 -k KB 显示 -m M 显示 -g G 显示 -h 易读单位显示 -s 每几秒重复打印 -c 重复打印几次退出 示例: 11.47 df 功能:查看文件系统的磁盘空间使用情况 常用选项: -a 包含虚拟文件系统 -h 可易读单位显示 -i 显示 inode 信息而非块使用量 -k 1K 块的数量 -t 只显示指定文件系统为指定类型的信息 -T 显示文件系统类型 示例: 11.48 vmstat 功能:报告虚拟内存、swap、io、上下文和 CPU 统计信息。 分析了这些文件: /proc/meminfo /proc/stat /proc/*/stat 常用选项: -a 打印活跃和不活跃的内存页 -d 打印硬盘统计信息 -D 打印硬盘表 -p 打印硬盘分区统计信息 -s 打印虚拟内存表 -m 打印内存分配(slab)信息 -t 添加时间戳到输出 -S 显示单位,默认 k、KB、m、M,大写是*1024 示例: r:CPU 正在运行的进程数 b:在等待 I/O 的进程数 swpd:已经使用的交换内存(kb) free:空闲的物理内存(kb) buff:已经使用的缓冲区内存(kb);一般对设备数据缓存,写入到磁盘的数据。 cache:已经使用的缓冲区内存(kb);一般对文件数据缓存,从磁盘读取的数据。 si:从磁盘交换到内存的交换页数量(kb/s) so:从内存交换到磁盘的交换页数据(kb/s) bi:块设备接收的块数量(kb/s) bo:块设备发送的块数量(kb/s) in:每秒 CPU 中断次数 cs:每秒 CPU 上下文切换次数 us:用户进程使用 CPU 时间(%) sy:系统进程使用 CPU 时间(%) id:CPU 空闲时间(%) wa:等待 I/O 响应所消耗的 CPU 时间(%) st:从虚拟设备中获得的时间(%) 11.49 iostat 功能:报告 CPU 利用率和磁盘 I/O 用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ] 常用选项: -c 显示 CPU 使用率 -d 只显示磁盘使用率 -k 单位 KB/s 代替 Block/s -m 单位 MB/s 代替 Block/s -N 显示所有映射设备名字 -t 打印报告时间 -x 显示扩展统计信息 示例: 11.50 sar 功能:查看系统资源综合方面利用率 常用选项: -u, CPU -r, memory -b, disk -n DEV, NIC traffic -q, systemload -b, TPS(Transaction Per Second,每秒事务处理量) -o, output to file 示例: 11.51 dstat 功能:查看系统资源综合方面利用率(需要安装) 常用选项: -c cpu 统计 -d 磁盘统计 -m 内存统计 -n 网络统计 -s swap 统计 -l 负载统计 --tcp tcp 状态统计 --udp udp 状态统计 --socket socket 数量统计 -t 输出时间 --output 写入 csv 文件 插件: --list 支持的插件 --top-bio-adv 详细显示 I/O 进程写入 block 量,包括 pid、r、w 和 cpu --top-io-adv 进程写入磁盘总量 --top-cpu 占用 CPU 进程 --top-cpu-adv 查看最高 CPU 进程 --top-mem 内存进程 示例: 11.52 ip 功能:查看/操作路由表、设备、路由策略和隧道 格式:ip [ OPTIONS ] OBJECT { COMMAND | help } 常用选项: -b, -batch <FILENAME> 从文件或标准输入读取命令并调用他们,第一次失败将终止 -force 批量模式有错误不终止,如果有错误则状态返回非 0 -s, -statistics 输出更多的统计信息 -l, -loops <COUNT> 指定最大的循环数 操作对象(OBEJECT): address 网络设备地址 12tp 以太网 IP 隧道 link 配置网络设备 maddress 多播地址 monitor 动态监控网络连接 mroute 多播路由缓存条目 mrule 角色在多播路由策略数据库 neighbour 管理 ARP 或 NDISC 缓存条目 netns 管理网络命名空间 ntable 管理 neighbour 缓存操作 route 路由表 rule 角色在路由策略数据库 tpc_metrics/tcpmetrics 管理 TCP 指标 tunnel IP 隧道 tuntap 管理 TUN/TAP 设备 xfrm 管理 IPSec 策略 可通过 ip OBEJECT help 再查看对象的操作方法。 示例: 11.53 nc 功能:TCP 和 UDP 连接和监听 常用选项: -i interval 指定间隔时间发送和接受行文本 -l 监听模式,管理传入的连接 -n 不解析域名 -p 指定本地源端口 -s 指定本地源 IP 地址 -u 使用 udp 协议,默认是 tcp -v 执行过程输出 -w timeout 连接超时时间 -x proxy_address[:port] 请求连接主机使用代理地址和端口 -z 指定扫描监听端口,不发送任何数据 示例: 11.54 time 功能:执行脚本时间 常用选项: 示例: 11.55 eval 功能:执行参数作为 shell 命令 示例: 11.56 ssh 功能:SSH 客户端 常用选项: -p 指定远程主机端口 -i 指定认证文件 -L [bind_address:]port:host:hostport -R [bind_address:]port:host:hostport] -D [bind_address:]port -o SSH 选项,有以下几个比较常用的: ConnectionAttempts=NUM 连接失败后重试次数 ConnectTimeout=SEC 连接超时时间 StrictHostKeyChecking=no 自动拉去主机 key 文件 PasswordAuthentication=no 禁止密码认证 示例: SSH 还提供了一个非常有用的功能,就是端口转发,能帮你解决一些无法建立的连接。 1)本地端口转发 应用场景 1:A 不能访问 C,B 能访问 A 和 C,实现通过 B 能让 A 访问 C 在主机 A 执行: # ssh -L 2222:主机 C:22 主机 B # ssh -L [绑定地址:]本地端口:主机 C:C 端口 主机 B 将 SSH 绑定本地端口 2222,本地 2222 端口数据转发主机 B,主机 B 的所有数据转发到主机 C 的 22 端 口;这样一来,只要在主机 A ssh -p 2222 localhost,就等于连上了主机 C 的 22 端口。 应用场景 2:一台 Squid 代理服务器,限制了本机可以清理缓存,但是我想从远程服务器清理 在远程服务器执行: # ssh -L 31280:localhost:3128 SquidHost 在远程服务器上执行清理命令到本机 31280 端口,31280 收到的数据加密转发到 SquidHost 的 SSH Server 上,SSH Client 解密收到的数据并转发到监听的 3128 端口上,最后将 Squid 返回的数据原路 返回。 2)远程端口转发 应用场景 1:A 不能访问 C,B 能访问 A 和 C,但 A 不能访问 B,比如 A 在外网,B 在内网 在主机 B 执行: # ssh -R 2222:主机 C:22 主机 A 将 SSH 绑定本机 2222 端口,与主机 A 建立 SSH 通道,当主机 A 访问本地 2222 端口,就等于访问主机 B 的 2222 端口,主机 B 的 2222 端口把数据转发到主机 C 的 22 端口。 应用常见 2:公司有一台内网服务器,还有一台云主机不能 SSH 直接连接这台公司内网服务器,但内 网服务器可以 SSH 连接云主机 在公司内网服务器执行: # ssh -R 2222:localhost:22 云主机 将云主机上的 2222 端口数据转发到内网服务器 SSH Client 上,SSH Client 解密收到的数据并转发 到监听的 22 端口上,最后再将返回的数据原路返回。 3)动态端口转发(不限定端口,全权代理) 应用场景:FQ访问国外网站 如果是 MAC 系统直接在终端执行:ssh -D 2222 国外云主机 如果是 Windows 系统可借助 putty 工具实现,在 putty 里面端口转发->本地端口转发属性里面添加 一个本地端口,并勾选 SOCKS4/5 动态转发,连接即可。 将 SSH 绑定本机 8080 端口,SSH 就会创建一个 SOCKS 代理服务,直接在浏览器上设置代理本机 127.0.0.1 的 8080 端口即可,当浏览器访问国外网站时,本地代理把请求转发到国外云主机的 SSH Server,SSH 解密并转发给指定的网站。 注意:再 Linux 终端执行 ssh 绑定命令后,默认会进入一个新的 shell,只要这个 shell 不退出,此 端口转发就一直有效。如果要想放到后台执行就加-Nf 两个选项,-N 是不执行命令,-f 后台执行, 这样就转入后台运行,就可以在本地 shell 执行操作了,如果想关闭后台就 kill 这个进程。 参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 11.57 iptables 常见几种类型防火墙? 包过滤防火墙:包过滤是 IP 层实现,包过滤根据数据包的源 IP、目的 IP、协议类型 (TCP/UDP/ICMP)、源端口、目的端口等包头信息及数据包传输方向灯信息来判断是否允许数据包 通过。 应用层防火墙:也称为应用层代理防火墙,基于应用层协议的信息流检测,可以拦截某应用程序的 所有封包,提取包内容进行分析。有效防止 SQL 注入或者 XSS(跨站脚本攻击)之类的恶意代码。 状态检测防火墙:结合包过滤和应用层防火墙优点,基于连接状态检测机制,将属于同一连接的所 有包作为一个整体的数据流看待,构成连接状态表(通信信息,应用程序信息等),通过规则表与 状态表共同配合,对表中的各个连接状态判断。 iptables 是 Linux 下的配置防火墙的工具,用于配置 Linux 内核集成的 IP 信息包过滤系统,使增 删改查信息包过滤表中的规则更加简单。 iptables 分为四表五链,表是链的容器,链是规则的容器,规则指定动作。 四表: filter 用于包过滤 nat 网络地址转发 mangle 对特定数据包修改 raw 不做数据包链接跟踪 五链: INPUT 本机数据包入口 OUTPUT 本机数据包出口 FORWARD 经过本机转发的数据包 PREROUTING 防火墙之前,修改目的地址(DNAT) POSTROUTING 防火墙之后,修改源地址(SNAT) 表中的链: 表 链 filter INPUT、OUTPUT 和 FORWARD nat PREROUTING、POSTROUTING 和 OUTPUT mangle PREROUTING、POSTROUTING、INPUT、OUTPUT 和 FORWARD raw PREROUTING 和 OUTPUT 命令格式:iptables [-t table] 命令 [chain] 匹配条件 动作 命令 描述 -A,append 追加一条规则 -I,insert 插入一条规则,默认链头,后跟编号,指定第几条 -D,delete 删除一条规则 -F,flush 清空规则 -L,list 列出规则 -P,policy 设置链缺省规则 -m,module 模块,比如 state、multiport 匹配条件 描述 -i 入口网卡 -o 出口网卡 -s 源地址 -d 目的地址 -p 协议类型 --sport 源端口 --dport 目的端口 动作 描述 ACCEPT 允许数据包通过 DROP 丢弃数据包不做处理 REJECT 拒绝数据包,并返回报错信息 SNAT 一般用于 nat 表的 POSTROUTING 链,进行源地址转换 DNAT 一般用于 nat 表的 PREROUTING 链,进行目的地址转换 MASQUERADE 动态源地址转换,动态 IP 时使用 模块 描述 state 包状态,有四个:NEW、RELATED、ESTABLISHED 和 INVALID mac 源 MAC 地址 limit 包速率限制 multiport 多端口,以逗号分隔 iprange 端口范围,以逗号分隔 示例:常用的规则配置方法 iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT # 删除这条规则 # 允许多个 TCP 端口访问 iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许 192.168.1.0 段 IP 访问 iptables -A INPUT -s 192.168.1.10 -j DROP # 对 1.10 数据包丢弃 iptables -A INPUT -i eth0 -p icmp -j DROP # eth0 网卡 ICMP 数据包丢弃,也就是禁 ping # 允许来自 lo 接口,如果没有这条规则,将不能通过 127.0.0.1 访问本地服务 iptables -A INPUT -i lo -j ACCEPT # 限制并发连接数,超过 30 个拒绝 iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j REJECT # 限制每个 IP 每秒并发连接数最大 3 个 iptables -I INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # iptables 服务器作为网关时,内网访问公网 iptables –t nat -A POSTROUTING -s [内网 IP 或网段] -j SNAT --to [公网 IP] # 访问 iptables 公网 IP 端口,转发到内网服务器端口 iptables –t nat -A PREROUTING -d [对外 IP] -p tcp --dport [对外端口] -j DNAT --to [内 网 IP:内网端口] # 本地 80 端口转发到本地 8080 端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 # 允许已建立及该链接相关联的数据包通过 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ASDL 拨号上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o pppo -j MASQUERADE # 设置 INPUT 链缺省操作丢弃所有数据包,只要不符合规则的数据包都丢弃。注意要在最后设置, 以免把自己关在外面! iptables -P INPUT DROP