linux中lsof命令 linux的ls命令( 二 )


2、使用netstat 命令
大家一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口 。但是netstat -an 的确提供了这种功能 。所以有问题了一定要想到先去查找man手册,不过说实话,某些man手册写得让中国人看不懂 , 那没有办法了,就googe或者 baidu一下吧 。
执行man netstat命令,你会发现netstat 提供了'-p'的选项,这个选项的功能是告诉你哪个程序占用了该端口,但是她提供的.形式比较古怪是以pid/process_name提供的 。pid当然 是进程id了 , process_name是进程的命令,中间以'/'号分隔 。
和上面的原因一样,我们只查找listen的端口,netstat 给我们提供了-l的选项,这个选项不是默认的选项 。
下面以1521端口来看怎么查找到该程序,我们使用下面的命令:netstat -lnp|awk 'BEGIN{prt=":1521$"}{if ($4 ~ prt) print $0}'在这里使用awk来匹配第4个字段的模式是为了避免误判 。
Linux 命令神器:lsof lsof是系统管理/安全的管理工具 。将这个工具称之为lsof真实名副其实 , 因为它是指“列出打开文件(lists openfiles)” 。而有一点要切记 , 在Unix中一切(包括网络套接口)都是文件 。
有趣的是 , lsof也是有着最多开关的Linux/Unix命令之一 。它有那么多的开关,它有许多选项支持使用-和+前缀 。
正如你所见,lsof有着实在是令人惊讶的选项数量 。你可以使用它来获得你系统上设备的信息,你能通过它了解到指定的用户在指定的地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接 。
对于我,lsof替代了netstat和ps的全部工作 。它可以带来那些工具所能带来的一切,而且要比那些工具多得多 。那么,让我们来看看它的一些基本能力吧:
理解一些关于lsof如何工作的关键性东西是很重要的 。最重要的是,当你给它传递选项时,默认行为是对结果进行“或”运算 。因此 , 如果你正是用-i来拉出一个端口列表 , 同时又用-p来拉出一个进程列表,那么默认情况下你会获得两者的结果 。
下面的一些其它东西需要牢记:
正如我所说的,我主要将lsof用于获取关于系统怎么和网络交互的信息 。这里提供了关于此信息的一些主题:
有些人喜欢用netstat来获取网络连接,但是我更喜欢使用lsof来进行此项工作 。结果以对我来说很直观的方式呈现 , 我仅仅只需改变我的语法,就可以通过同样的命令来获取更多信息 。
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
你也可以通过在-i后提供对应的协议来仅仅显示TCP或者UDP连接信息 。
或者,你也可以通过端口搜索,这对于要找出什么阻止了另外一个应用绑定到指定端口实在是太棒了 。
这对于你在检查是否开放连接到网络中或互联网上某个指定主机的连接时十分有用 。
你也可以组合主机与端口的显示信息 。
找出正等候连接的端口 。
你也可以grep “LISTEN”来完成该任务 。
你也可以显示任何已经连接的连接 。
你也可以通过grep搜索“ESTABLISHED”来完成该任务 。
你也可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等 。
可以消灭指定用户运行的所有东西,这真不错 。
可以查看指定程序或进程由什么启动,这通常会很有用,而你可以使用lsof通过名称或进程ID过滤来完成这个任务 。下面列出了一些选项:
通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等 。