Linux基本应用-管道命令的使用
[if !supportLists]Ø[endif]【课程目的】
1.了解命令行中使用KaliLinux命令的特点
2.掌握管道命令的使用
3.结合Shell脚本熟悉管道的使用
【实现场景】
1. VMware
Workstation虚拟机
2. KaliLinux操作系统
【课程原理】
管道基础命令
ps
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令.
使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
ps为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;
如果想对进程时间监控,应该用top工具。
如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
使用示例:
root@kali:~# ps aux|grep ./update_stock
root20300.00.1128881600 pts/0S+06:380:00 grep ./update_stock
ps aux输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT STARTTIME COMMAND
格式说明:
USER:进程拥有者
PID: pid
%CPU:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码(minordevice number of tty)
STAT:该行程的状态,linux的进程有5种状态:
D不可中断uninterruptible sleep (usually IO)
R运行runnable(on run queue)
S中断sleeping
T停止traced orstopped
Z僵死a defunct
(”zombie”) process
注:其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
START:行程开始时间
TIME:执行的时间
COMMAND:所执行的指令
[if !supportLists]2)[endif]Grep
grep (global search
regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
格式:
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串'filename
选项与参数:
-a:将binary文件以text文件的方式搜寻数据
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-n:顺便输出行号
-v:反向选择,亦即显示出没有'搜寻字符串'内容的那一行!
--color=auto:可以将找到的关键词部分加上颜色的显示喔!
使用示例:
root@kali:~#cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
root@kali:~# ifconfig
netstat
Netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态连接,多播成员等等。
参数:
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n拒绝显示别名,能显示数字的全部转化成数字。
-l仅列出有在Listen (监听)的服務状态
-p显示建立相关链接的程序名
-r显示路由信息,路由表
-e显示扩展信息,例如uid等
-s按各个协议进行统计
-c每隔一个固定时间,执行该netstat命令。
awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk是AWK的GNU版本。
awk其名称得自于它的创始人Alfred Aho、Peter Weinberger和Brian Kernighan姓氏的首个字母。实际上AWK的确拥有自己的语言:AWK程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
格式:
awk'{print $1}' {filenames}
参数:
RGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行-F选项
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符
sort
格式:
sort -t '' -k1 fileNmae
参数:
-kn这里n为数字从1开始依次增加代表排序的位置
[if !supportLists]6)[endif]dmesg
kernel会将开机信息存储在ring
buffer中。若是开机时来不及查看信息,开机信息亦保存在/var/log目录中,名称为dmesg的文件里。
格式:
dmesg [-cn][-s <缓冲区大小>]
参数:
-c显示信息后,清除ring buffer中的内容。
-s<缓冲区大小>预设置为8196,刚好等于ring
buffer的大小。
-n设置记录信息的层级。
find
查找文件
find ./ -type f
查找目录
find ./ -type d
查找名字为test的文件或目录
find ./ -name test
查找名字符合正则表达式的文件,注意前面的‘.*’(查找的文件带有目录)
find ./ -regex .*so.*\.gz
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)
find ./ -type d -print-exec ls {} \;
查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)
find ./ -type d -ok ls {}\;
查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)
find ./ -type d -exec ls{} +
查找文件名匹配*.c的文件
find ./ -name \*.c
打印test文件名后,打印test文件的内容
find ./ -name test -print-exec cat {} \;
不打印test文件名,只打印test文件的内容
find ./ -name test -execcat {} \;
查找文件更新日时在距现在时刻二天以内的文件
find ./ -mtime -2
查找文件更新日时在距现在时刻二天以上的文件
find ./ -mtime +2
查找文件更新日时在距现在时刻一天以上二天以内的文件
find ./ -mtime 2
查找文件更新日时在距现在时刻二分以内的文件
find ./ -mmin -2
查找文件更新日时在距现在时刻二分以上的文件
find ./ -mmin +2
查找文件更新日时在距现在时刻一分以上二分以内的文件
find ./ -mmin 2
查找文件更新时间比文件abc的内容更新时间新的文件
find ./ -newer abc
查找文件访问时间比文件abc的内容更新时间新的文件
find ./ -anewer abc
查找空文件或空目录
find ./ -empty
查找空文件并删除
find ./ -empty -type f-print -delete
查找权限为644的文件或目录(需完全符合)
find ./ -perm 664
查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
find ./ -perm -664
查找用户有写权限或者组用户有写权限的文件或目录
find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w
查找所有者权限有读权限的目录或文件
find ./ -perm -u=r
查找用户组权限有读权限的目录或文件
find ./ -perm -g=r
查找其它用户权限有读权限的目录或文件
find ./ -perm -o=r
查找所有者为lzj的文件或目录
find ./ -user lzj
查找组名为gname的文件或目录
find ./ -group gname
查找文件的用户ID不存在的文件
find ./ -nouser
查找文件的组ID不存在的文件
find ./ -nogroup
查找有执行权限但没有可读权限的文件
find ./ -executable \!-readable
查找文件size小于10个字节的文件或目录
find ./ -size -10c
查找文件size等于10个字节的文件或目录
find ./ -size 10c
查找文件size大于10个字节的文件或目录
find ./ -size +10c
查找文件size小于10k的文件或目录
find ./ -size -10k
查找文件size小于10M的文件或目录
find ./ -size -10M
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
格式:
whereis [-bmsu] [BMS目录名-f ]文件名
功能:
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
参数:
-b定位可执行文件。
-m定位帮助文件。
-s定位源代码文件。
-u搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B指定搜索可执行文件的路径。
-M指定搜索帮助文件的路径。
-S指定搜索源代码文件的路径。
实例:
实例1:将和**文件相关的文件都查找出来
命令:
whereis svn
输出:
[root@localhost ~]#whereis tomcat
tomcat:
[root@localhost ~]#whereis svn
svn: /usr/bin/svn/usr/local/svn /usr/share/man/man1/svn.1.gz
说明:
tomcat没安装,找不出来,svn安装找出了很多相关文件
[if !supportLists]9)[endif]>这个会覆盖掉原来的数据
[if !supportLists]10)[endif]>>逐行增加数据
[if !supportLists]二、[endif]Shell脚本【案例】
#! /bin/bash
for ip in `seq 100`
do
Ping192.168.1.$ip –c 1 | grep ttl | awk ‘{print $4}’ | awk –F:‘{print $1}’
done