linux shell编程 根据端口获取进程pid 直接用命令netstat -anp |grep 端口号 在shell中如何获取PID?
netstat/lsof
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
-a 显示一个所有的有效连接信息列表(包括已建立的连接,也包括监听连接请求的那些连接)
-n 显示所有已建立的有效连接
-t tcp协议
-u udp协议
-l 查询正在监听的程序
-p 显示正在使用socket的程序识别码和程序名称
例如:netstat -ntupl|grep processname
如何只查询tomcat的连接?
netstat -na|grep ESTAB |grep 80 |wc-l
netstat -na|grep ESTAB |grep 8080 |wc-l
常用端口介绍:
端口:21
服务:FTP服务器所开放的端口,用于上传、下载。
端口: 22
服务:ssh
端口: 80
服务:HTTP 用于网页浏览
端口:389
服务:LDAP ILS 轻型目录访问协议和NetMeetingInternet Locator Server
端口:443
服务:网页浏览端口 能提供加密和通过安全端口传输的另一种HTTP
端口:8080
服务:代理端口
打开终端,执行如下命令,查看各进程占用端口情况:
# ps -ef|wc -l //查看后台运行的进程总数
# ps -fu csvn //查看csvn进程
# netstat -lntp //查看开启了哪些端口
# netstat -r //本选项可以显示关于路由表的信息
# netstat -a //本选项显示一个所有的有效连接信息列表
# netstat -an|grep 8080
# netstat -na|grep -i listen //可以看到目前系统侦听的端口号
# netstat -antup //查看已建立的连接进程,所占用的端口。
netstat -anp|grep1487
lsof -i:1487
查看哪些进程打开了指定端口1487
关闭端口实际上是关闭其对应的服务,比如80端口是HTTPD 关闭80端口可以通过关闭httpd服务来实现
每个端口都有一个守护进程,kill掉这个守护进程就可以了
主机的端口分为监听端口与随机可用的高级端口
监听端口:监听端口就是主机开启了哪些服务,这个服务会在linux系统里启用一个端口来监听客户端的请求
随机可用的高级端口:
linux要向某个主机请求服务时,linux主机需要启用一个端口来对外连接linux会随机去用一个未被使用且端口号大于1024的端口进行连接
只有root用户可以开启1-1024端口表明拥有root权限
netstat-n 显示连接状态
netstat-tl 显示当前正在监听的服务名称
linux是一个列出当前系统打开文件的工具,在linux环境下,任何事物都以文件的形式存在。
lsof输出信息 即可显示系统打开的文件默认显示所有进程打开的所有文件
lsof filename 显示打开指定文件的所有进程
lsof -c string 显示command列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof -i 显示符合条件的进程情况
lsof -d 显示指定文件描述符的进程
lsof -a 标示两个参数都必须满足时才显示结果
例如: lsof-i:1487
查看所属root用户进程所打开的文件类型为txt的文件:
lsof -a -u root -d txt
lsof使用实例
1.查找使用文件系统
卸载文件系统时,如果文件系统中有任何打开的文件,就会出错。可以通过lsof可以找出那些进程在使用当前卸载的文件系统
# lsof /GTES11/
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 4208 root cwd DIR 3,1 40962 /GTES11/
vim 4230 root cwd DIR 3,1 40962 /GTES11/
2.恢复删除的文件
当linux计算机受到入侵时,常见的情况是日志文件被删除,管理错误也会导致意外删除重要的文件。
当进程打开了某个文件时,只要该进程保持打开该文件时,即使删除,依然存在于磁盘上。这意味着,进程并不知道文件已被删除,在/proc目录下,其中包含了反映内核和进程树的各种文件。
当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问文件,可以通过lsof从/proc目录下恢复该文件
使用lsof来查看当前是否有进程打开/var/logmessages文件
# lsof |grep /var/log/messages syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted) 从/proc/1283/fd/2
对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用
你说的是 windows 的批处理吗?
@echo off&setlocal EnableDelayedExpansion
set Port=
set Dstport=139
}
for /F "usebackq skip=4 tokens=2,5" %%a in (`"netstat -ano -p tcp"`) do (
for /F "tokens=2 delims=:" %%k in ("%%a") do (
set Port=%%k
)
echo !Port! %%b >>portandpid.txt
)
for /F "tokens=2 delims=:" %%c in ("%1") do (
set Port=%%c
)
for /F "tokens=1,2 delims= " %%d in (portandpid.txt) do (
echo %%d
echo %Dstport%
if %%d == %Dstport% taskkill /f /pid %%e
)
del portandpid.txt
set Port=
set Dstport=
goto :eof
以上代码可以实现。
把 139 替换成你想要杀掉的端口。
如果是要监听的服务端口,我觉得用 l 参数比较好。
然后如下三种方式请参考。
netstat -nlp | grep -w 端口号 | sed -r 's#.* (.*)/.*#\1#'
netstat -nlp | sed -nr '/端口号/s#.* (.*)/.*#\1#p'
netstat -nlp | awk -F'[ /]*' '/端口号/{print $(NF-2)}'
netstat -anp|grep 3306|awk '{printf $7}'|cut -d/ -f1
-anp 中的p 不就是PID了
柘昭澳拉: 如果是要监听的服务端口,我觉得用 l 参数比较好. 然后如下三种方式请参考. netstat -nlp | grep -w 端口号 | sed -r 's#.* (.*)/.*#\1#' netstat -nlp | sed -nr '/端口号/s#.* (.*)/.*#\1#p' netstat -nlp | awk -F'[ /]*' '/端口号/{print $(NF-2)}'
定远县13810318726: linux shell 编程 - ?
柘昭澳拉: (1)编写shell程序fileback:#!/bin/sh DIRNAME=`ls /root | grep bak` if [ -z "$DIRNAME" ] ; then mkdir /root/bak cd /root/bak fi YY=`date +%y` MM=`date +%m` DD=`date +%d` BACKETC=$YY$MM$DD_etc.tar.gz tar zcvf $BACKETC /etc echo "...
定远县13810318726: linux环境下shell脚本编写 - ?
柘昭澳拉: 假设.out文件在/home目录下: 1.在命令行窗口下直接敲 /home/.out 回车就运行了. 2.shell脚本的话,如下: #!/bin/bash /home/.out =========================================== 要求不高的话,可以看《linux就该这么学》或者《鸟哥linux私房菜》中专门讲shell脚本的那章,很快能入门. 系统一些的学法,可以看《linux命令行和shell脚本编程宝典》,里面关于基础的、高级的用法都有讲到,很完整. =========================================== 不知道我对你问题的理解对不对头.:)
定远县13810318726: linux如何在终端里输入shell脚本 - ?
柘昭澳拉: 一般以#!/bin/sh开头(不是必须要写,但一定要单独一行),指定执行这个脚本的shell程序(也可以用#!/bin/zsh或其他),然后就是堆命令了. Linux的shell脚本支持很多功能,加上Linux高度模块化的命令,完全可以用shell脚本写出复杂的程...
定远县13810318726: linux中如何编写shell脚本? - ?
柘昭澳拉: 用VIM在终端中 vim shell.sh 回车然后写脚本,.保存然后./shell.sh运行或者bash空格shell.sh 运行...
定远县13810318726: 到底怎么在Linux里编写c程序啊? - ?
柘昭澳拉: 在linux下通常使用gedit或vim直接编写.c程序,然后通过gcc指令编译.以Ubuntu系统为例,详细过程如下: 1、进入桌面Temp文件夹 2、右键新建空白文件 3、将文件命名为hello.c 4、进入hello.c,开始编写代码(默认gedit为编辑器) ...
定远县13810318726: linux下如何编写shell脚本 - 2012 - ?
柘昭澳拉: 我对shell脚本的认识,除了执行过同事写的shell 脚本外,其他一无所知,为了让自己强大,我决定自己研究shell脚本,也许在你看来很简答,没必要说这么多废话,但是我希望在我的技术blog里记录下来每次的学习的动机,与思想过程,并且我...
定远县13810318726: linux中的shell编程是什么,是在终端运行的吗?
柘昭澳拉: 是的,shell编程就是编写终端命令执行脚本
定远县13810318726: 在linux操作系统中的终端下.编写一个shell脚本,输出所有尾数是5的三位数 - ?
柘昭澳拉: 有3个变量 i j ki=1 i=i++ i<=9;j=1 j=j++ <=9 ;k=100*i+10*j+5;echo k这个只是大概思想,我也不太熟悉shell,准备学linux,希望能...
定远县13810318726: Linux 简单Shell脚本编程 - ?
柘昭澳拉: #! /bin/bash echo "Please input file name:" read filename if [ -e ${filename} ] then file ${filename} else echo "No such file or directory..." fi(自行确认一下空格阿,也许空格不对)