常用的shell命令
shell中的文件名置换
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。
正则表达式
一般用于grep sed awk中。
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n \ { n \ } 只用来匹配前面p a t t e r n出现次数。n为次数
p a t t e r n \ { n,\ } m 只含义同上,但次数最少为n
p a t t e r n \ { n,m \ } 只含义同上,但p a t t e r n出现次数在n与m之间
注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]
grep
grep [选项]基本正则表达式[文件]
grep '^$' myfile 查询空行
awk
如果要格式化报文或从一个大的文本文件中抽取数据包,那么a w k可以完成这些任务
awk脚本基本结构
awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
awk '{if($4~/brown/) print }' grade.txt 如果f i e l d - 4包含b r o w n,打印它
awk '$4 ~ /brown/' grade.txt 如果f i e l d - 4包含b r o w n,打印它(省略if,省略 print 默认打印整行)
内置变量
A R G C 命令行参数个数
A R G V 命令行参数排列
E N V I R O N 支持队列中系统环境变量的使用
FILENAME a w k浏览的文件名
F N R 浏览文件的记录数
F S 设置输入域分隔符,等价于命令行- F选项
N F 浏览记录的域个数
N R 已读的记录数
O F S 输出域分隔符
O R S 输出记录分隔符
R S 控制记录分隔符

内置的字符串函数
···
g s u b ( r, s ) 在整个$ 0中用s替代r
g s u b ( r, s , t ) 在整个t中用s替代r
i n d e x ( s , t ) 返回s中字符串t的第一位置
l e n g t h ( s ) 返回s长度
m a t c h ( s , r ) 测试s是否包含匹配r的字符串
s p l i t ( s , a , f s ) 在f s上将s分成序列a
s p r i n t ( f m t , e x p ) 返回经f m t格式化后的e x p
s u b ( r, s ) 用$ 0中最左边最长的子串代替s
s u b s t r ( s , p ) 返回字符串s中从p开始的后缀部分
s u b s t r ( s , p , n ) 返回字符串s中从p开始长度为n的后缀部分
···
awk printf

% c A S C I I字符
% d 整数
% e 浮点数,科学记数法
% f 浮点数,例如(1 2 3 . 4 4)
% g a w k决定使用哪种浮点数转换e或者f
% o 八进制数
% s 字符串
% x 十六进制数
sed
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
sed 's/book/books/' file
-n选项和p命令一起使用表示只打印那些发生替换的行:
sed -n 's/test/TEST/p' file
删除空白行: sed '/^$/d' file
删除文件最后一行: sed '$d' file
删除文件中所有开头是test的行: sed '/^test/'d file
sort
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
-u 删除所有复制行。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
uniq和sort -n的区别
sort -n 是去除所有重复行,uniq知会删除不断重复出现的行(结果中仍然可能存在重复的数据)。
nohup
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用
n o h u p命令
nohup command &
标准输入输出
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
$ cleanup >cleanup.out 2>&1
在上面的例子中,我们将cleanup 脚本的输出重定向到>cleanup.out文件中,而且其错误也被重定向到相同的文件中。
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入 //?这个“-”代表什么意思
find命令
find . -name "*.txt" -print 按名字查找
find . -name "[a-z][a-z][0--9][0--9].txt" -print 查找文件名以两个小写字母开头,跟着是两个数字,最后是* . t x t的文件
find / -mtime -5 -print 按照修改时间查找 -5代表5天以内, +5 代表5天以前
find . -newer new.file 查找比某个文件新的文件。
find . -type d 查找所有的目录
find . ! -type d 查找非目录文件
find . -size +1000000c 查找长度大于1M字节的文件
find logs -type f -mtime +5 -exec rm {} \; 使用exec执行shell指令
nl
显示文件行号
printf
格式化文本
%[- +]m.nx
-为从行首算起的起始位置
m表示域的宽度而n表示域的最大宽度
s:字符串。
c:字符。
d:数字。
x:1 6进制数。
o:1 0进制数。
SZX1000366880:~ # printf "0x%x\n" 1200
0x4b0
script
记录操作过程
scrpit mycmd.log
strings
查看二进制文件中的文本
strings file
uname
显示当前操作系统相关信息
wait processid
等待进程结束
wc
统计字符数、行数、单词数
wc -c
wc -l
wc -w
whereis
显示二进制文件及其在线手册的路径
whoami /who
当前登录名
basename
从路径中分离文件名
dirname
从路径中分离出文件名之外的部分
cat file1 file2 > file3
合并2个文件
diff
比较两个文件
dircmp
比较两个文件夹
file filename
确定文件类型
fuser -u /dev/sdb1
显示所有访问设备的进程
···
fuser -k file 杀掉所有访问文件的进程
···

浙公网安备 33010602011771号