常用命令
基本操作
- mv, rm, cp, mkdir, cd, pwd, find
文本处理
- grep, sed, awk, diff, vim, less, more, cat, sort, uniq, expr
文本压缩
- tar, bzip2, gzip, unzip, unrar
日常运维
- shutdown, mount, chown, chmod, su, password, service
系统状态
- ps, top, free, df, inconfig, uname, ping, netstat
工作常用
- export, xargs, date, whereis, which, locate, scp, ssh, wget, mysql
常用工具
grep: 在一个或多个文件中 搜索文本,并把匹配的文本打印(标准输出、管道、重定向文件),默认BREs; egrep和grep相同,只是默认EREs
grep [-options] <pattern> <filename/dirpath>
[-options]主要参数:
-c: 统计搜索字符串的次数
-i: 忽略大小写
-n: 输出对应行号
-v: 反向搜索,搜索不匹配的文本
-r 递归目录进行查找
--color=auto: 将找到的关键字显示颜色
-E: 使用扩展正则表达式EREs
-P: 使用扩展正则表达式PREs
-o: 只输出文件中匹配的部分
-l: 列出内容匹配的文件名称
-L: 列出内容不匹配的文件名称
-d: 指定要查找的是目录而非文件
-b: 显示匹配内容和之后的内容
-a: 不要忽略二进制数据
示例;
grep -r '#define.*SIGINT' /usr/
xargs: 给其他命令传递参数的过滤器,用于组合多个命令(多行变单行),单行变多行; argument分隔符是空格, xargs默认界定符是回车
xargs [-options] [command]
[-options]主要参数:
-0 #当stdin含有特殊字符时,将其当做一般字符
-a filename #从文件中读入作为stdin
-E pause_flag #当xargs分析到pause_flag(以空格分隔的单词)时,在这停止
-p #每次询问是否执行
-n num #按num列显示命令(argument分隔符)
-L num #num行显示为一行(xargs分隔符)
-s num #命令行最好字符数,指xargs后面那个命令的最大命令行数
-x #exit的意思,主要配合-s使用
-d delim #定义分隔符(xargs--argument)
-I {} #指定一个替换字符串{}
示例:
cat stdio.h | xargs -n 5
ls std* | xargs -n 1 -I {} cp {} ./Downloads/
cat stdio.h | xargs -L 1 -I {} echo 'cherrying:' {}
多行输出单行:
cat stdio.h | xargs
与find结合应用:
find . -name 'std*' | xargs tar -czvf std.tar.gz
find: 在目录中 递归 搜索文件,并把匹配的文件打印(标准输出、管道、重定向....), 只能用通配符 * ? 不支持正则表达式,想用正则表达式加 -regex 选项
find <dirpath> [-options] [-print] [-exec, -ok, | xargs , | grep] [command {} \;] 注:有执行命令{}要用 \; 结尾
[-options]主要参数:(-a:逻辑与, -o:逻辑或)
-name 'filename' #查找名为filename的文件,支持通配符 * ?
-perm 0777 #按执行权限查找
-user username #按所属用户查找
-group groupname #按所属组查找
-type d/l/f/b/c/p #按类型查找目录、链接文件、普通文件、块设备、字符设备、管道文件
-maxdepth num #遍历查找的深度
-size n #查找尺寸为(大于小于等于)n字节的文件
-path dirpath -prune #忽略目录
示例;
find . -name 'signal.h' -o -name 'stdio.h'
find . -size 1k -type f -maxdepth 3
[-print]有无的区别:
有 -print 会输出 find 的结果 和 command {} \; 的结果
find . -type d -print -exec echo > a.txt {} \;
没有 -print 只输出 command {} \; 的结果, 不会输出 find 的结果
find . -type d -exec echo > a.txt {} \;
-exec: 对 find 的结果执行 command {} \; 命令(直接执行,不询问)
find . -size +1b -name 'std*' -exec cat {} \;
-ok: 对 find 的结果执行 command {} \; 命令(每次询问是否执行)
find . -size -2k -ok ls -l {} \;
sed:对文本文件进行 --- 查找、替换、删除、增加等操作(按行处理)默认使用 BREs, 加 -r 使用 EREs
sed [-options] '[range] operation' <filename>
[-options]主要参数:
-n #忽略执行过程,只输出结果
-i[suffix] #在源文件上执行操作,输出会覆盖原文件(危险),加参数 会备份 原文件
-r #使用扩展正则表达式
-e #直接在列模式上执行sed操作(最常用)
-f #直接将 sed 的动作写在一个档案内
[range]范围:
n #选择第n行
n,m(n,+m) #第n到m行(n到(n+m)行)
1~2 #奇数行
2~2 #偶数行
n,$ #第n行到文件尾
/^str/ #字符串str开头的行
/^str/,/strend/ #以str开头到strend之间的数据
operation操作:
p #打印输出结果(通常可和 -n 一起用)
a #在匹配范围 后面新增字符串
i #在匹配范围 前面增加字符串
c #对匹配范围 进行修改
d #对匹配范围 进行删除
s #替换匹配内容
示例:
( 注:符号 & 是匹配到的内容的引用)
sed -i.bak '2,3 c cherrying' ./hosts.tst
sed -n '/^127/ s/^.*$/[&]/g p' ./hosts.tst
awk: 对文本文件进行 --- 查找、替换、删除、增加等操作(按列处理); 默认使用 EREs
awk [-options] '[range] operaton' finename
语法结构:awk [-options] '\
[BEGIN{}]\ #开头部分可选,可用来设置一些参数,输出头信息
[Pattern]\ #正则匹配可选,匹配内容范围
Action\ #主要部分: 按行处理,统计打印
[END{}]\ #结尾部分可选,输出汇总信息
' filename
[-options]主要参数:
-F delim #指定分隔符delim
-v var=value #给一个用户定义的变量赋值
[range]范围: 同sed
peration操作:
$1, $2, $3......表示 第1列,第2列,第3列.......
格式化输出:
awk -F ':' '{printf "%-8s %-10s\n",$2,$4}' /etc/passwd
设置变量:
awk -F ':' -v a=1 -v b=s '{print $3,$3+a,$3b}' /etc/passwd
内置变量
FS: BEGIN块中的FS就是内部变量,可以直接指定或者输出,甚至可以指定多个分隔符同时起作用
OFS: 指定输出内容分隔符
NF 列数: 过滤一些列数不满足条件的内容
NR 行号: 输出行数
RS: 记录分隔标志
ORS: 指定记录输出的分隔标志
FILENAME: 当前处理的文件名称,在一次处理多个文件时非常有用
示例:
awk 'BEGIN{FS=":";OFS="-"}{printf $1, $2, $3} file
数学运算:+-*/%
字符串操作:
split(input-string, output-array, separator)
substr(input-string, location, length)
netstat: TCP/IP监控工具
-a: (all)显示所有选项默认不显示listen相关
-t: (tcp)仅显示tcp相关选项
-u: (udp)仅显示udp相关选项
-n: 拒绝显示别名,能显示数字的全部转换成数字
-l: 仅列出有在监听(listen)服务状态
-p: 显示建立在相关链接的程序名
-r: 显示路由信息
-e: 显示扩展信息,如UID等
-s: 按各个协议进行统计
-c: 每隔一个固定时间,执行该netstat命令
示例:
netstat -nat | grep "127.0.0.1:*" | awk '{printf $2}'
expr: 求表达式变量的值
四则运算
- 运算符左右都有空格,如果没有空格表示是字符串连接
- 使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
- 对于四则运算,最好用$[]或者$(())代替expr,效率更高,而且运算符两边不用空格
字符串操作
- 返回字符串长度:(expr length 字符串)
expr length "hello world"
- 返回 String1 中包含 String2 中任意字符的第一个位置:( expr String1 String2)
expr index "abc" "b"
- 提取字符串的子串:(expr substr 字符串 起始位置 终点位置)
expr substr "this is a test" 3 5