shell 工具
sort
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
常用选项:
-r:降序
-u:去掉重复行
-n:以数值排序
-t:指定分隔符
-k:指定分隔符后,按指定列数进行排序
-f:忽略大小写排序
-c:检查文件是否排序。如果乱序,返回1且输出第一个乱序行的相关信息
-C:检查文件是否排序。如果乱序,返回1
uniq
去掉相邻行之间的重复行,常与sort搭配使用
-d:只显示文件中重复的行
-u:只显示文件中不重复的行
-c:在输出的每行行首。加上本行在文本中出现的次数
paste
该命令主要用来将多个文件的内容合并。paste将按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本。
常用选项:
-d:指定域分隔符
-s:将文件置为一整行
-:若命令行参数中有n个-,则输出时每行包含n个结果
cut
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
-d:指定域分隔符
-f:输出当前与分隔符下的指定列
-b:以字节为单位进行分割
-c:以字符为单位进行分割
xargs
一:对文件进行格式化输出,将文件的多行输入转成单行输出
二:将格式化后的字符串作为命令行参数传递给其他命令
xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次。
grep
按照关键字或者正则表达式进行行过滤
常用选项:
-E:使用扩展正则
-v:不显示匹配到的内容
-q:安静模式,不打印出结果。匹配到,返回0;没匹配到返回1
-r/R:递归地对当前目录下所有文件内容进行匹配
sed
sed是一种流编辑器。每次处理时读入一行,存入临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区中的内容。处理完成后,把缓冲区中的内容送往屏幕,接着处理下一行,直至文件末尾。文件内容不会改变。
常见的基本使用:
/pattern/p: 打印匹配pattern的行
/pattern/s/pattern1/pattern2/: 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
基本命令
p命令:使用p命令需要注意,sed是把待处理文件的内容连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行 要想只输出处理结果,应加上-n选项,这种用法相当于grep命令。
d命令:删除
g命令:将匹配pattern的每一个结果作用于pattern2的处理方式
高级命令
sed不仅有模式空间,还有保持空间。模式空间:可以想成工程里面的流水线,数据直接在它上面进行处理。
保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。
g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G: 将hold space中的内容append到pattern space\n后
h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H:将pattern space中的内容append到hold space\n后
d: 删除pattern中的所有行,并读入下一新行到pattern中
D: 删除multiline pattern中的第一行,不读入下一行
x:交换保持空间和模式空间的内容
N:将下一行添加到pattern space中
n:读取下一行到pattern space
eg:计算1到100的和
seq 100 | sed ':a;N;s/\n/+/g;{$!ba}' | bc
特殊符号
&:已匹配字符串标记&,可以表示匹配pattern1之后的所有字符
子串匹配标记\1,\2…\n
$:表示最后一行
选项
-i:sed默认不改变文件内容,使用该选项则会改变文件内容
-n:使用p命令需要注意,sed是把待处理文件的内容连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行 要想只输出处理结果,应加上-n选项,这种用法相当于grep命令。
awk
awk不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符
是换行,缺省的列分隔符是连续的空格和Tab。
如果想定制分隔符,常用的方法是使用 -F 选项
与sed一样,awk在“/patern/”中使用正则表达式。
使用print命令输出符合正则表达式的结果行。
0代表整条记录(行),
0
代
表
整
条
记
录
(
行
)
,
1,
2,
2
,
3… 表示指定的域(列)。
还可以使用printf进行输出。printf 命令在使用上,与在C语言中一模一样。
BEGIN 和 END
BEGIN和END,是awk中两个极具特色的表达式,可以用他们做文本处理之前的准备工作,之后的收尾工具,极具实
用价值,基本格式如下:
BEGIN{} /REG/{} END{}
BEGIN{} condition{} END{}
任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部
的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
统计文本中,成绩及格的人数,这里awk中的变量,语法的使用要格外注意。全部类C!
FS定制输入域分隔符,OFS定制输出域分隔符
awk脚本
awk脚本的执行需要awk解释器单的支持。
[ly@localhost shell_test]$ cat count.awk
#!/usr/bin/awk -f
BEGIN{
great=0
good=0
nomal=0
bad=0
}
{
if ($2 >= 85)
{
great++;
}
else if($2>= 75)
good++;
else if($2 >= 60)
nomal++;
else
bad++;
}
END{
printf("great:%s\n", great);
printf("good:%s\n", good);
printf("nomal:%s\n", nomal);
printf("bad:%s\n", bad);
}
find
find pathname -options [-print -exec -ok …]
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。 其中 print0 我们之前已经见过面了。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {} \;,注意{}和\; 之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
常见选项
-name: 按照文件名查找文件。
-perm: 按照文件权限来查找文件。
-prune: 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-
prune将被find命令忽略。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-user: 按照文件属主来查找文件。
-group: 按照文件所属的组来查找文件。
-nogroup: 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
-nouser: 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
-newer file1 ! -newer file2: 查找更改时间比文件file1新但比文件file2旧的文件
-type: 查找某一类型的文件
eg:查找系统中所有,大于2048字节小于4096字节的文件,并使用对符合条件的文件进行 ls -l 输出.
find / -size +2048c -size -4096c -exec ls -l {} \; | more
其它重要工具
free
查看内存使用情况
df
查看磁盘使用情况
iostat
分析io压力
netstat
查看端口占用
top
实时动态地查看系统的整体运行情况
arp
显示arp缓冲区中的所有条目、删除指定的条目或者添加静态的ip地址与MAC地址对应关系。
route
查看路由表