Linux基本应用-管道命令的使用

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


你可能感兴趣的:(Linux基本应用-管道命令的使用)