基础命令三
1.系统性能
1.查看内存使用
freevmstatsar -rps
2.查看网络使用情况
sar -n DEVifconfig: RX / TXcat /proc/net/devnicstatnetstat -i: RX-ERR / TX-ERR
3.系统相关利用率
uptime: 获取主机运行时间和查询Linux系统负载等信息.
w: 显示当前登录用户数
ps aux | grep ksoftirqd: 查看进程ksoftirqd的使用信息
常用统计过去一分钟,过去五分钟,过去十五分钟的负载命令
# uptime | awk '{print $(NF-2)}'
# uptime | awk '{print $(NF-1)}'
# uptime | awk '{print $(NF)}'
2. 日志查看
1.cat
-n或--number:由 1 开始对所有输出的行数编号.-b或--number-nonblank:和 -n 相似,只不过对于空白行不编号.-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行.-v或--show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外.-E或--show-ends: 在每行结束处显示 $.-T或--show-tabs: 将 TAB 字符显示为 ^I.-e: 等价于 -vE.-A,--show-all:等价于 -vET.-e:等价于"-vE"选项-t:等价于"-vT"选项
2.more
-num一次显示的行数-d提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔' 声-l取消遇见特殊字元 ^L(送纸字元)时会暂停的功能-f计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)-p不以卷动的方式显示每一页,而是先清除屏幕后再显示内容-c跟 -p 相似,不同的是先显示内容再清除其他旧资料-s当遇到有连续两行以上的空白行,就代换为一行的空白行-u不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)+/pattern在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示+num从第 num 行开始显示fileNames欲显示内容的文档,可为复数个数
3.less
-b<缓冲区大小> 设置缓冲区的大小-e当文件显示结束后,自动离开-f强迫打开特殊文件,例如外围设备代号、目录和二进制文件-g只标志最后搜索的关键词-i忽略搜索时的大小写-m显示类似more命令的百分比-N显示每行的行号-o<文件名> 将less 输出的内容在指定文件中保存起来-Q不使用警告音-s显示连续空行为一行-S行过长时间将超出部分舍弃-x<数字> 将"tab"键显示为规定的数字空格/字符串:向下搜索"字符串"的功能?字符串:向上搜索"字符串"的功能n:重复前一个搜索(与 / 或 ? 有关)N:反向重复前一个搜索(与 / 或 ? 有关)b向后翻一页d向后翻半页h显示帮助界面Q退出less 命令u向前滚动半页y向前滚动一行空格键滚动一页回车键滚动一行[pagedown]: 向下翻动一页[pageup]: 向上翻动一页
4.vi/vim 常用的几个命令:
i切换到输入模式,以输入字符.x删除当前光标所在处的字符.:切换到底线命令模式,以在最底一行输入命令.o: 在当前行之后插入一行O: 在当前行之前插入一行ctrl+f: 向下滚动一屏ctrl+b: 向上滚动一屏u: 撤销U: 撤销对整个行的操作Ctrl+r: 重做,即该撤销的撤销x: 删除当前字符dd: 删除当前行10d: 上传从当前行开始的10行yy: 复制当前行p:在当前光标后粘贴,如果之前使用了yy命令来复制一行, 那么在当前行的下一行进行粘贴
输入模式: 在命令模式下按下i就进入了输入模式
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
ENTER: 回车键,换行BACK SPACE: 退格键,删除光标前一个字符DEL: 删除键,删除光标后一个字符- 方向键: 在文本中移动光标
HOME/END: 移动光标到行首/行尾Page Up/Page Down: 上/下翻页Insert: 切换光标为输入/替换模式,光标将变成竖线/下划线ESC: 退出输入模式,切换到命令模式
底线命令模式:在命令模式下按下:(英文冒号)就进入了底线命令模式
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多. 在底线命令模式中,基本的命令有(已经省略了冒号):
q退出程序w保存文件set number: 显示行号0: 移动到行首$: 移动到行尾/text: 查找text, 按 n 键查找下一个,按 N 键查找前一个- '?test': 查找text, 返现查找, 按 n 键查找下一个,按 N 键查找前一个
- '%s/old/new/g': 将old替换成new, 替换当前行的所有匹配
按ESC键可随时退出底线命令模式.
3.文本编辑
3.1 sed命令

命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
选项[options]
-e<script>或--expression=<script>: 以选项中的指定的script来处理输入的文本文件-f<script文件>或--file=<script文件>: 以选项中指定的script文件来处理输入的文本文件-h或--help: 显示帮助-n或--quiet或——silent: 仅显示script处理后的结果-V或--version: 显示版本信息
sed命令
a\在当前行下面插入文本i\在当前行上面插入文本c\把选定的行改为新的文本d删除,删除选择的行D删除模板块的第一行s替换指定字符h拷贝模板块的内容到内存中的缓冲区H追加模板块的内容到内存中的缓冲区g获得内存缓冲区的内容,并替代当前模板块中的文本G获得内存缓冲区的内容,并追加到当前模板块文本的后面l列表不能打印字符的清单n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码p打印模板块的行P(大写)打印模板块的第一行q退出Sedblable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾rfile 从file中读行tlabel if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾Tlabel 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾wfile 写并追加模板块到file末尾Wfile 写并追加模板块的第一行到file末尾!表示后面的命令对所有没有被选定的行发生作用=打印当前行号码#把注释扩展到下一个换行符以前
sed替换标记
g表示行内全面替换p表示打印行w表示把行写入一个文件x表示互换模板块中的文本和缓冲区中的文本y表示把一个字符翻译为另外的字符(但是不用于正则表达式)\1子串匹配标记&已匹配字符串标记
sed元字符集
^匹配行开始,如:/^sed/匹配所有以sed开头的行$匹配行结束,如:/sed$/匹配所有以sed结尾的行.匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d*匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行[]匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed[^]匹配一个不在指定范围内的字符,如:/A-RT-Zed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行\(..\)匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers&保存搜索字符用来替换其他字符,如s/love/&/,love这成love\<匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行\>匹配单词的结束,如/love>/匹配包含以love结尾的单词的行x\{m\}重复字符x,m次,如:/0{5}/匹配包含5个0的行x\{m,\}重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行x\{m,n\}重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行
用法实例
# 替换
sed 's/book/books/' file
# -n选项和p命令一起使用表示只打印那些发生替换的行
sed -n 's/test/TEST/p' file
# 直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books, 后缀 /g 标记会替换每一行中的所有匹配
sed -i 's/book/books/g' file
# 删除空白行
sed '/^$/d' file
# 删除文件的第2行到末尾所有行
sed '2,$d' file
范围替换文本(,)
sed '/test/,/west/s/$/aaa bbb/' file
# 奇偶行打印
sed -n 'p;n' test.txt #奇数行
sed -n 'n;p' test.txt #偶数行
3.2 awk命令
语法形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
命令选项
F fs: fs指定输入分隔符,fs可以是字符串或正则表达式,如 -F :-v var=value: 赋值一个用户定义变量,将外部变量传递给awk-f scripfile: 从脚本文件中读取awk命令-m[fr] val: 对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目.这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用
awk脚本是由模式和操作组成的 模式
- /正则表达式/: 使用通配符的扩展集
- 关系表达式: 使用运算符进行操作,可以是字符串或数字的比较测试
- 模式匹配表达式: 用运算符
~(匹配)和~!(不匹配) - BEGIN语句块、pattern语句块、END语句块
操作: 操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内
- 变量或数组赋值
- 输出命令
- 内置函数
- 控制流语句
awk脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
一个awk脚本通常由:
- BEGIN语句块: 在awk开始从输入流中读取行之前被执行,是一个可选的语句块
- 能够使用模式匹配的通用语句块: 是可选的.如果没有提供pattern语句块,则默认执行
{ print } - END语句块: 在awk从输入流中读取完所有的行之后即被执行
任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中
内置变量(预定义变量)
$n当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段$0这个变量包含执行过程中当前行的文本内容- [N]
ARGC命令行参数的数目 - [G]
ARGIND命令行中当前文件的位置(从0开始算) - [N]
ARGV包含命令行参数的数组 - [G]
CONVFMT数字转换格式(默认值为%.6g) - [P]
ENVIRON环境变量关联数组 - [N]
ERRNO最后一个系统错误的描述 - [G]
FIELDWIDTHS字段宽度列表(用空格键分隔) - [A]
FILENAME当前输入文件的名 - [P]
FNR同NR,但相对于当前文件 - [A]
FS字段分隔符(默认是任何空格) - [G]
IGNORECASE如果为真,则进行忽略大小写的匹配 - [A]
NF表示字段数,在执行过程中对应于当前的字段数 - [A]
NR表示记录数,在执行过程中对应于当前的行号 - [A]
OFMT数字的输出格式(默认值是%.6g) - [A]
OFS输出字段分隔符(默认值是一个空格) - [A]
ORS输出记录分隔符(默认值是一个换行符) - [A]
RS记录分隔符(默认是一个换行符) - [N]
RSTART由match函数所匹配的字符串的第一个位置 - [N]
RLENGTH由match函数所匹配的字符串的长度 - [N]
SUBSEP数组下标分隔符(默认值是34)
说明:[A]``[N]``[P]``[G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
运算与判断
| 运算符 | 描述 |
|---|---|
| 算术运算符 | -- |
+ - |
加,减 |
* / & |
乘,除与求余 |
+ - ! |
一元加,减和逻辑非 |
^ *** |
求幂 |
++ -- |
增加或减少,作为前缀或后缀 |
| 赋值运算符 | |
| = += -= = /= %= ^= *= | 赋值语句 |
| 逻辑运算符 | |
| || | 逻辑或 |
&& |
逻辑与 |
| 正则运算符 | |
~ ~! |
匹配正则表达式和不匹配正则表达式 |
| 关系运算符 | |
| < <= > >= != == | 关系运算符 |
| 其它运算符 | |
$ |
字段引用 |
| 空格 | 字符串连接符 |
?: |
C条件表达式 |
in |
数组中是否存在某键值 |
字符串函数
| 格式 | 描述 |
|---|---|
| gsub(Ere,Repl,[ In ]) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行 |
| sub(Ere,Repl,[ In ]) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值sub 函数返回替换的数量出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换如果未指定 In 参数,缺省值是整个记录($0 记录变量) |
| index(String1,String2) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号如果 String2 参数不在 String1 参数中出现,则返回 0(零) |
| length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)如果未给出 String 参数,则返回整个记录的长度($0 记录变量) |
| blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)如果未给出 String 参数,则返回整个记录的长度($0 记录变量) |
| substr(String,M,[ N ]) | 返回具有 N 参数指定的字符数量子串子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始M 参数指定为将 String 参数中的第一个字符作为编号 1如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度 |
| match(String,Ere) | 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)RSTART 特殊变量设置为返回值RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一) |
| split(String,A,[Ere]) | 将 String 参数指定的参数分割为数组元素 A[1],A[2], ... ,A[n],并返回 n 变量的值此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建 |
| tolower(String) | 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义 |
| toupper(String) | 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义 |
| sprintf(Format,Expr,Expr,...) | 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串 |
格式化字符串输出(sprintf使用)
| 格式 | 描述 |
|---|---|
| %d | 十进制有符号整数 |
| %u | 十进制无符号整数 |
| %f | 浮点数 |
| %s | 字符串 |
| %c | 单个字符 |
| %p | 指针的值 |
| %e | 指数形式的浮点数 |
| %x | %X 无符号以十六进制表示的整数 |
| %o | 无符号以八进制表示的整数 |
| %g | 自动选择合适的表示法 |
时间函数
| 格式 | 描述 |
|---|---|
| 函数名 | 说明 |
| mktime( YYYY MM dd HH MM ss[ DST]) | 生成时间格式 |
| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串 |
| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 |
strftime日期和时间格式说明符
| 格式 | 描述 |
|---|---|
| %a | 星期几的缩写(Sun) |
| %A | 星期几的完整写法(Sunday) |
| %b | 月名的缩写(Oct) |
| %B | 月名的完整写法(October) |
| %c | 本地日期和时间 |
| %d | 十进制日期 |
| %D | 日期 08/20/99 |
| %e | 日期,如果只有一位会补上一个空格 |
| %H | 用十进制表示24小时格式的小时 |
| %I | 用十进制表示12小时格式的小时 |
| %j | 从1月1日起一年中的第几天 |
| %m | 十进制表示的月份 |
| %M | 十进制表示的分钟 |
| %p | 12小时表示法(AM/PM) |
| %S | 十进制表示的秒 |
| %U | 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) |
| %w | 十进制表示的星期几(星期天是0) |
| %W | 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) |
| %x | 重新设置本地日期(08/20/99) |
| %X | 重新设置本地时间(12:00:00) |
| %y | 两位数字表示的年(99) |
| %Y | 当前月份 |
| %Z | 时区(PDT) |
| %% | 百分号(%) |
使用实例
# 打印出一行中的最后一个字段
awk '{print $NF}' filename
# 统计文件中的行数
awk 'END{ print NR }' filename