系统开启的服务
好了,现在假设您已经知道了 daemons 的启动档案放置的目录,也知道了服务与 port 的对应,那么要如何查询目前系统上面已经启动了的服务呢?不要再打混了!已经学过了 ps 与 top 应该要会应用才对耶!呵呵!没错,可以使用 ps 与 top 来找寻已经启动了的服务的程序与他的 PID 呢!不过,我们怎么知道该服务启动的 port 是哪一个?呵呵!好问题!可以直接使用 netstat 这个网络状态观察指令来检查我们的 port 呢!甚至他也可以帮我们找到该 port 的程序呢( PID )!好了,那么我们就来试看看这个指令的用法吧!
- netstat
- netstat -a | more
netstat -an | more
- Proto:指的是封包或者是通讯协议啦! tcp , udp 是常见的呦!
- Local Address:本地端的 IP 与 Port 号,如果 /etc/services 存在对应服务名称,就以服务名称显示;
- Foreign Address :监听哪一个地区与 port ;
- state:状态列就很多啦!基本的有:
- LISTEN :亦即监听状态中的 port !
- ESTABLISHED:已建立联机的联机情况
- TIME_WAIT:该联机在目前已经是等待的状态了!随时有可能会断线呦!
[root @test /root]# netstat [-r] [-i interface]
[root @test /root]# netstat [-antulp]
参数说明:
-r :显示出 route 的意思;
-i :显示出 interface 的内容,跟 ifconfig 类似啦!
-a :显示出目前所有的网络联机状态!
-n :预设情况中,显示出的 host 会以 host name 来显现,若为 n 则可以使 port 与 host 都以数字显示
-t :仅显示 tcp 封包的联机行为
-u :仅显示 udp 的封包联机状态
-l :仅显示 LISTEN 的内容
-p :同时显示此一联机的 PID 喔!(注意:只有 root 才能行使此功能!)
范例:
[root @test /root]# netstat -r <==嘿嘿!显示出目前的路由表!
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
140.116.141.253 * 255.255.255.255 UH 40 0 0 ppp0
192.168.1.0 * 255.255.255.0 U 40 0 0 eth0
192.168.0.0 * 255.255.255.0 U 40 0 0 eth0
127.0.0.0 * 255.0.0.0 U 40 0 0 lo
default 140.116.141.253 0.0.0.0 UG 40 0 0 ppp0[root @test /root]# netstat -i eth0 <==看看底下显示出的内容,是否跟 ifconfig eth0 类似呀!?
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 077199373 0 0 169616342 0 0 0 BMRU
lo 16436 0 1130485 0 0 0 1130485 0 0 0 LRU[root @test /root]# netstat -an <==显示所有的联机状态,并且以数字型态显示
[root @test /root]# netstat -tul<==显示 LISTEN 的及 tcp 与 udp 的联机状态,如下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:pop3 *:* LISTEN
tcp 0 0 *:http *:* LISTEN
tcp 0 0 *:ftp *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:smtp *:* LISTEN
udp 0 0 *:netbios-ns *:*
注意:上面的 LISTEN 表示该 port 是已经在 监听 网络服务啦!而左边的 tcp 指的是 tcp 封包![root @test /root]# netstat -anp | more<==这个指令很常下达!请记得呦!
netstat 可是很了不起的指令,一定要学会的!尤其他可以让我们了解目前的你的主机的联机状态!与开启的 port 有哪些!所以一定得学会才行呀!如果你分别下达:
一定会发现有点奇怪?怎么有的 port 会以服务名称(例如上面例子里的 pop3 ...)有的会以 port 号码来显示呢!?嘿嘿!那就是 /etc/services 以及 -n 这个参数的用途啦!你可以发现的是,如果 netstat -a 时,显示出来的 port 号码在 /etc/services 存在对应的服务名称的时候,那么预设他就会显示出该服务名称啦!但是若在 /etc/services 找不到档案的话,那么自然就还是以 port 号码来显示的!那么加上了 -n 参数后,不论如何,他都会以 port 及 IP 来显示啦!
另外,那个 -p 也很有用呦!尤其是在一些莫名其妙的联机出现时,可以用 netstat –anp | more查到 PID ,然后再以我们之前谈到的 系统资源管理 部分,利用 kill 来杀掉该 PID 的程序! 此外,使用 netstat –tlp 也可以得到目前在 LISTEN 的 port 的服务名称,嘿嘿!那样就可以知道该 port 是那个程序来启动的!很便利ㄋㄟ?
善用 netstat 可以查得相当多的网络信息!尤其在关闭本机的 port 时!假设我要将 ftp 关闭掉,那么要使用 ntsysv, chkconfig 以及看一下 /etc/rc.d/rc.local 里头的设定啰!请注意,这个时候仅是将『 开机预设启动关闭』而已,并没有实际关闭目前的服务,假设您发现 ftp 还在启动的项目,你要将他关闭,那么就必须:
- 使用 ntsysv 或 chkconfig 将 wu-ftpd 前面的符号关闭掉;
- 跳出之后,以 /etc/rc.d/init.d/xinet restart 或者是 service xinet restart 来重新启动 xinet 这个服务;
- 再以 netstat -a | more 看一下 ftp 是否还在 LISTEN 呢?
这样才能关闭呢!同理可证啰!要关闭 sshd 怎么关?!嘿嘿!自己测试看看啰!( 注意:事实上,在 Linux 系统中,要『开或关某个 port 』,就是需要『启动或关闭某个服务』啦!因此,你可以找出某个 port 对应的服务,程序对应的服务,进而启动或关闭他,那么那个经由该服务而启动的 port ,自然就会关掉了!)