Linux之lsof命令 linux命令lsof i

Linux如何查看端口是否被占用 Linux如何查看端口是否被占用?下面为大家推荐两种检测方法,对Linux系统不熟悉的小伙伴可以看看 。
1、使用lsof命令
lsof是一个非常强大的linux工具 , 她被用来查找哪些程序使用了那些文件 。在linux系统下 , 基本上所有的东西都可以被当作文件来用 。socket当然也是一种文件了 。所以lsof可以用来查找谁用了某一个端口 。
具体方法:lsof -i :port_number |grep "(LISTEN)"
-i是用来查找和网络相关的文件,":"号是必须的,它是标志你查找的是一个端口 。port_number就是你要查找的端口号,譬如你要查找是否 有程序占用了oracle的监听端口1521,就可以使用lsof -i :1521 |grep "(LISTEN)" 。如果有程序已经占用了,那么下面打印的第二个字段就是该程序的进程id,第一个字段是进程的名字 。
如果只有losf -i :port_number可能会查到很多应用程序 , 但这些程序实际并没有占用你指定的端口,这些端口只是连接到本机器或者别的机器的该端口 。所以要grep "(LISTEN)“,因为一个端口只可能被一个程序占用的,所以这种方法是可靠的 。
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全名list opened files,也就是列举系统中已经被打开的文件 。我们都知道,linux环境中,任何事物都是文件,
设备是文件,目录是文件,甚至sockets也是文件 。所以 , 用好lsof命令,对日常的linux管理非常有帮助 。
lsof是linux最常用的命令之一,通常的输出格式为:
引用
【Linux之lsof命令 linux命令lsof i】 常见包括如下几个字段:更多的可见manual 。
1、COMMAND
默认以9个字符长度显示的命令名称 。可使用 c参数指定显示的宽度,若 c后跟的参数为零,则显示命令的全名
2、PID:进程的ID号
3、PPID
父进程的IP号,默认不显示 , 当使用-R参数可打开 。
4、PGID
进程组的ID编号,默认也不会显示,当使用-g参数时可打开 。
5、USER
命令的执行UID或系统中登陆的用户名称 。默认显示为用户名,当使用-l参数时,可显示UID 。
6、FD
是文件的File Descriptor number,或者如下的内容:
(这里很难翻译对应的意思 , 保留英文)
引用
文件的File Descriptor number显示模式有:
引用
7、TYPE
引用
IPv4 IPv4的包;
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;
DIR 目录
LINK 链接文件
详情请看manual中更多的注释 。
8、DEVICE
使用character special、block special表示的设备号
9、SIZE
文件的大小,如果不能用大小表示的,会留空 。使用-s参数控制 。
10、NODE
本地文件的node码,或者协议,如TCP等
11、NAME
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等
常用示例:
1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程
2.知道22端口现在运行什么程序
3.显示init进程现在打开的文件
6.依照文件夹/home/oracle来搜寻 , 但不会打开子目录,用来显示目录下被进程开启的文件
显示内容太多了,不显示了
lsof -n 不将IP转换为hostname , 缺省是不加上-n参数
关注:
进程调试命令:truss、strace和ltrace
进程无法启动,软件运行速度突然变慢 , 程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,而这些问题都可以通过使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症" 。
Linux 命令神器:lsof lsof是系统管理/安全的管理工具 。将这个工具称之为lsof真实名副其实Linux之lsof命令,因为它是指“列出打开文件(lists openfiles)” 。而有一点要切记,在Unix中一切(包括网络套接口)都是文件 。
有趣的是 , lsof也是有着最多开关的Linux/Unix命令之一 。它有那么多的开关 , 它有许多选项支持使用-和 前缀 。
正如你所见 , lsof有着实在是令人惊讶的选项数量 。你可以使用它来获得你系统上设备的信息 , 你能通过它Linux之lsof命令了解到指定的用户在指定的地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接 。
对于我,lsof替代了netstat和ps的全部工作 。它可以带来那些工具所能带来的一切,而且要比那些工具多得多 。那么,让我们来看看它的一些基本能力吧Linux之lsof命令:
理解一些关于lsof如何工作的关键性东西是很重要的 。最重要的是,当你给它传递选项时,默认行为是对结果进行“或”运算 。因此,如果你正是用-i来拉出一个端口列表,同时又用-p来拉出一个进程列表,那么默认情况下你会获得两者的结果 。
下面的一些其它东西需要牢记Linux之lsof命令:
正如我所说的,我主要将lsof用于获取关于系统怎么和网络交互的信息 。这里提供了关于此信息的一些主题:
有些人喜欢用netstat来获取网络连接,但是我更喜欢使用lsof来进行此项工作 。结果以对我来说很直观的方式呈现,我仅仅只需改变我的语法 , 就可以通过同样的命令来获取更多信息 。
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
你也可以通过在-i后提供对应的协议来仅仅显示TCP或者UDP连接信息 。
或者 , 你也可以通过端口搜索 , 这对于要找出什么阻止了另外一个应用绑定到指定端口实在是太棒了 。
这对于你在检查是否开放连接到网络中或互联网上某个指定主机的连接时十分有用 。
你也可以组合主机与端口的显示信息 。
找出正等候连接的端口 。
你也可以grep “LISTEN”来完成该任务 。
你也可以显示任何已经连接的连接 。
你也可以通过grep搜索“ESTABLISHED”来完成该任务 。
你也可以获取各种用户的信息,以及它们在系统上正干着的事情,包括它们的网络活动、对文件的操作等 。
可以消灭指定用户运行的所有东西,这真不错 。
可以查看指定程序或进程由什么启动,这通常会很有用,而你可以使用lsof通过名称或进程ID过滤来完成这个任务 。下面列出了一些选项:
通过查看指定文件或目录,你可以看到系统上所有正与其交互的资源——包括用户、进程等 。
与tcpdump类似,当你开始组合查询时,它就显示了它强大的功能 。
这通常(当不总是)表示某个攻击者正尝试通过删除文件入口来隐藏文件内容 。
本入门教程只是管窥了lsof功能的一斑,要查看完整参考 , 运行man lsof命令或查看在线版本 。
我总结一下lsof指令的用法:
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsofd /usr/local/ 显示目录下被进程开启的文件
lsofD /usr/local/ 同上 , 但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
r , lsof会一直执行,直到没有档案被显示
linux lsof命令详解lsof命令用于查看你进程打开的文件、打开文件的进程、进程打开的端口 。找回/恢复删除的文件 。是十分方便的系统监视工具Linux之lsof命令,因为lsof命令需要访问核心内存和各种文件Linux之lsof命令,所以需要root用户执行 。
在Linux环境下,任何事物都以文件的形式存在 , 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件 。所以如传输控制协议和用户数据协议套接字等,系统在后台都为该应用程序分配Linux之lsof命令了一个文件描述符,无论这个文件的本质如何 , 该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口 。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的 。
语法:
losf (选项)
选项:
-a 列出打开文件存在的进程;
-c进程名 列出指定进程所打开的文件;
-g 列出GID号进程详情;
-d文件名 列出占用该文件号的进程;
d目录 列出目录下被打开的文件;
D目录 递归列出目录下被打开的文件;
-n目录 列出使用NFS的文件;
-i条件 列出符合条件的进程 。
linux 常见命令 lsof,ps,ln...[TOC]
可以列出被进程所打开的文件的信息 。被打开的文件可以是
1.普通的文件
2.目录抽象为特殊文件
3.网络文件系统的文件 , 抽象为文件
4.字符设备文件在linux抽象为文件
5.(函数)共享库
6.管道,命名管道
7.符号链接
8.底层的socket字流,网络socket,unix域名socket
9.在linux里面,很多东西都抽象为文件,提供了统一的访问接口
属性第一个字符:
rwx=0x111,二进制表示
列出所有进程
-ef f:father
ps –el ,
e:every :显示所有进程信息,等价于A
a:all:显示除了当前终端进程外的其他进程
l: long 长格式显示进程信息 。
linux 线程状态:
ps工具标识进程的5种状态码:
chmod 对象/- 模式
对象:u(user),g(group),o(other),a(all)
模式:r,w,x
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象 。
软件不关闭情况下更新:写入同名不同inode的文件,下次启动由于老的inode已经丢失,操作系统回收原来的Block 。
综上 , 总结一下软链接和硬链接的区别:
参考: 阮一峰的网络日志:理解inode
Ctrl z 暂停进程执行
uname -m 显示机器的处理器架构(2)
uname -r 显示正在使用的内核版本
jobs: 查看后台任务
fgjobNum: 将后台任务调到前台
未完,不定期更新中...
关于Linux之lsof命令和linux命令lsof i的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读