linux常用命令

为Linux系统是在Internet上起源和发展的,它与生俱来拥有强大的网络功能和丰富的网络应用软件,尤其是TCP/IP网络协议的实现尤为成熟。Linux的网络命令比较多,其中一些命令像ping、ftp、telnet、route、netstat等在其它操作系统上也能看到,但也有一些Unix/Linux系统独有的命令,如ifconfig、finger、mail等。Linux网络操作命令的一个特点是,命令参数选项和功能很多,一个命令往往还可以实现其它命令的功能。 

    ifconfig 

    1.作用
    ifconfig用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,使用权限是超级用户。 

    2.格式
    ifconfig -interface [options] address 

    3.主要参数 

<ccid_nobr>
<ccid_code>-interface:指定的网络接口名,如eth0和eth1。
up:激活指定的网络接口卡。
down:关闭指定的网络接口。
broadcast address:设置接口的广播地址。
pointopoint:启用点对点方式。
address:设置指定接口设备的IP地址。
netmask address:设置接口的子网掩码。


    4.应用说明
    ifconfig是用来设置和配置网卡的命令行工具。为了手工配置网络,这是一个必须掌握的命令。使用该命令的好处是无须重新启动机器。要赋给eth0接口IP地址207.164.186.2,并且马上激活它,使用下面命令:
    #fconfig eth0 210.34.6.89 netmask 255.255.255.128 broadcast 210.34.6.127 

     该命令的作用是设置网卡eth0的IP地址、网络掩码和网络的本地广播地址。若运行不带任何参数的ifconfig命令,这个命令将显示机器所有激活接口的信息。带有“-a”参数的命令则显示所有接口的信息,包括没有激活的接口。注意,用ifconfig命令配置的网络设备参数,机器重新启动以后将会丢失。
    如果要暂停某个网络接口的工作,可以使用down参数:
#ifconfig eth0 down 

    ip 

    1.作用
    ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig、route等,使用权限为超级用户。几乎所有的Linux发行版本都支持该命令。 

    2.格式
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]] 

    3.主要参数
    OPTIONS是修改ip行为或改变其输出的选项。所有的选项都是以-字符开头,分为长、短两种形式。目前,ip支持如表1所示选项。 

    OBJECT是要管理者获取信息的对象。目前ip认识的对象见表2所示。 

    表1 ip支持的选项 

<ccid_nobr>
-V,-Version 打印ip的版本并退出。
-s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或多次,则输出的信息将更为详尽。
-f,-family 这个选项后面接协议种类,包括inet、inet6或link,强调使用的协议种类。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或any。link比较特殊,它表示不涉及任何网络协议。
-4 是-family inet的简写。
-6 是-family inet6的简写。
-0 是-family link的简写。
-o,-oneline 对每行记录都使用单行输出,回行用字符代替。如果需要使用wc、grep等工具处理ip的输出,则会用到这个选项。
-r,-resolve 查询域名解析系统,用获得的主机名代替主机IP地址


 

    COMMAND 设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或list)。有些对象不支持这些操作,或者有其它的一些命令。对于所有的对象,用户可以使用help命令获得帮助。这个命令会列出这个对象支持的命令和参数的语法。如果没有指定对象的操作命令,ip会使用默认的命令。一般情况下,默认命令是list,如果对象不能列出,就会执行help命令。 

    ARGUMENTS 是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0。我们将在后面的详细介绍每个命令的使用,命令的默认参数将使用default标出。 

    4.应用实例
    添加IP地址192.168.2.2/24到eth0网卡上:
    #ip addr add 192.168.1.1/24 dev eth0 

    丢弃源地址属于192.168.2.0/24网络的所有数据报:
    #ip rule add from 192.168.2.0/24 prio 32777 reject 

    ping 

    1.作用
    ping检测主机网络接口状态,使用权限是所有用户。 

    2.格式
    ping [-dfnqrRv][-c][-i][-I][-l][-p][-s][-t] IP地址 

    3.主要参数 

<ccid_nobr>
<ccid_code>-d:使用Socket的SO_DEBUG功能。
-c:设置完成要求回应的次数。
-f:极限检测。
-i:指定收发信息的间隔秒数。
-I:网络界面使用指定的网络界面送出数据包。
-l:前置载入,设置在送出要求信息之前,先行发出的数据包。
-n:只输出数值。
-p:设置填满数据包的范本样式。
-q:不显示指令执行过程,开头和结尾的相关信息除外。
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。
-R:记录路由过程。
-s:设置数据包的大小。
-t:设置存活数值TTL的大小。
-v:详细显示指令的执行过程。


    ping 命令是使用最多的网络指令,通常我们使用它检测网络是否连通,它使用ICMP协议。但是有时会有这样的情况,我们可以浏览器查看一个网页,但是却无法 ping通,这是因为一些网站处于安全考虑安装了防火墙。另外,也可以在自己计算机上试一试,通过下面的方法使系统对ping没有反应:
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
netstat 

    1.作用
    检查整个Linux网络状态。 

    2.格式
    netstat [-acCeFghilMnNoprstuvVwx][-A][--ip] 

    3.主要参数 

<ccid_nobr>
<ccid_code>-a--all:显示所有连线中的Socket。
-A:列出该网络类型连线中的IP相关地址和网络类型。
-c--continuous:持续列出网络状态。
-C--cache:显示路由器配置的快取信息。
-e--extend:显示网络其它相关信息。
-F--fib:显示FIB。
-g--groups:显示多重广播功能群组组员名单。
-h--help:在线帮助。
-i--interfaces:显示网络界面信息表单。
-l--listening:显示监控中的服务器的Socket。
-M--masquerade:显示伪装的网络连线。
-n--numeric:直接使用IP地址,而不通过域名服务器。
-N--netlink--symbolic:显示网络硬件外围设备的符号连接名称。
-o--timers:显示计时器。
-p--programs:显示正在使用Socket的程序识别码和程序名称。
-r--route:显示Routing Table。
-s--statistice:显示网络工作信息统计表。
-t--tcp:显示TCP传输协议的连线状况。
-u--udp:显示UDP传输协议的连线状况。
-v--verbose:显示指令执行过程。
-V--version:显示版本信息。
-w--raw:显示RAW传输协议的连线状况。
-x--unix:和指定“-A unix”参数相同。
--ip--inet:和指定“-A inet”参数相同。


    4.应用实例
    netstat 主要用于Linux察看自身的网络状况,如开启的端口、在为哪些用户服务,以及服务的状态等。此外,它还显示系统路由表、网络接口状态等。可以说,它是一个综合性的网络状态的察看工具。在默认情况下,netstat只显示已建立连接的端口。如果要显示处于监听状态的所有端口,使用-a参数即可: 

<ccid_nobr>
<ccid_code>#netstat -a
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32768 *:* LISTEN
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:32770 *:* LISTEN
tcp 0 0 *:868 *:* LISTEN
tcp 0 0 *:617 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:10000 *:* LISTEN
tcp 0 0 *:http *:* LISTEN
......


    上面显示出,这台主机同时提供HTTP、FTP、NFS、MySQL等服务。 

    telnet 

    1.作用
    telnet表示开启终端机阶段作业,并登入远端主机。telnet是一个Linux命令,同时也是一个协议(远程登陆协议)。 

    2.格式
    telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][主机名称IP地址<通信端口>] 

    3.主要参数 

<ccid_nobr>
<ccid_code>-8:允许使用8位字符资料,包括输入与输出。
-a:尝试自动登入远端系统。
-b:使用别名指定远端主机名称。
-c:不读取用户专属目录里的.telnetrc文件。
-d:启动排错模式。
-e:设置脱离字符。
-E:滤除脱离字符。
-f:此参数的效果和指定“-F”参数相同。
-F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K:不自动登入远端主机。
-l:指定要登入远端主机的用户名称。
-L:允许输出8位字符资料。
-n:指定文件记录相关信息。
-r:使用类似rlogin指令的用户界面。
-S:服务类型,设置telnet连线所需的IP TOS信息。
-x:假设主机有支持数据加密的功能,就使用它。
-X:关闭指定的认证形态。


    4.应用说明
     用户使用telnet命令可以进行远程登录,并在远程计算机之间进行通信。用户通过网络在远程计算机上登录,就像登录到本地机上执行命令一样。为了通过 telnet登录到远程计算机上,必须知道远程机上的合法用户名和口令。虽然有些系统确实为远程用户提供登录功能,但出于对安全的考虑,要限制来宾的操作权限,因此,这种情况下能使用的功能是很少的。 

    telnet只为普通终端提供终端仿真,而不支持X-Window等图形环境。当允许远程用户登录时,系统通常把这些用户放在一个受限制的Shell中,以防系统被怀有恶意的或不小心的用户破坏。用户还可以使用telnet从远程站点登录到自己的计算机上,检查电子邮件、编辑文件和运行程序,就像在本地登录一样。 

    ftp 

    1.作用
    ftp命令进行远程文件传输。FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身,所以ftp既是协议又是一个命令。 

    2.格式
    ftp [-dignv][主机名称IP地址] 

    3.主要参数 

<ccid_nobr>
<ccid_code>-d:详细显示指令执行过程,便于排错分析程序执行的情形。
-i:关闭互动模式,不询问任何问题。
-g:关闭本地主机文件名称支持特殊字符的扩充特性。
-n:不使用自动登陆。
-v:显示指令执行过程。


    4.应用说明
    ftp 命令是标准的文件传输协议的用户接口,是在TCP/IP网络计算机之间传输文件简单有效的方法,它允许用户传输ASCⅡ文件和二进制文件。为了使用ftp 来传输文件,用户必须知道远程计算机上的合法用户名和口令。这个用户名/口令的组合用来确认ftp会话,并用来确定用户对要传输的文件进行什么样的访问。另外,用户需要知道对其进行ftp会话的计算机名字的IP地址。 

    用户可以通过使用ftp客户程序,连接到另一台计算机上;可以在目录中上下移动、列出目录内容;可以把文件从远程计算机机拷贝到本地机上;还可以把文件从本地机传输到远程系统中。ftp内部命令有72个,下面列出主要几个内部命令: 

<ccid_nobr>
<ccid_code>ls:列出远程机的当前目录。
cd:在远程机上改变工作目录。
lcd:在本地机上改变工作目录。
close:终止当前的ftp会话。
hash:每次传输完数据缓冲区中的数据后就显示一个#号。
get(mget):从远程机传送指定文件到本地机。 
put(mput):从本地机传送指定文件到远程机。
quit:断开与远程机的连接,并退出ftp。


    route 

    1.作用
    route表示手工产生、修改和查看路由表。 

    2.格式
#route [-add][-net|-host] targetaddress [-netmask Nm][dev]If] 
    #route [-delete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If] 

    3.主要参数 

<ccid_nobr>
<ccid_code>-add:增加路由。
-delete:删除路由。
-net:路由到达的是一个网络,而不是一台主机。
-host:路由到达的是一台主机。
-netmask Nm:指定路由的子网掩码。
gw:指定路由的网关。
[dev]If:强迫路由链指定接口。


    4.应用实例 

route命令是用来查看和设置Linux系统的路由信息,以实现与其它网络的通信。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。 

    在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。使用下面命令可以增加一个默认路由:
    route add 0.0.0.0 192.168.1.1 

    rlogin 

    1.作用
    rlogin用来进行远程注册。 

    2.格式
    rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host 

    3.主要参数
    -8:此选项始终允许8位输入数据通道。该选项允许发送格式化的ANSI字符和其它的特殊代码。如果不用这个选项,除非远端的不是终止和启动字符,否则就去掉奇偶校验位。
    -E:停止把任何字符当作转义字符。当和-8选项一起使用时,它提供一个完全的透明连接。
    -K:关闭所有的Kerberos确认。只有与使用Kerberos 确认协议的主机连接时才使用这个选项。
    -L:允许rlogin会话在litout模式中运行。要了解更多信息,请查阅tty联机帮助。
    -d:打开与远程主机进行通信的TCP sockets的socket调试。要了解更多信息,请查阅setsockopt的联机帮助。
    -e:为rlogin会话设置转义字符,默认的转义字符是“~”。
    -k:请求rlogin获得在指定区域内远程主机的Kerberos许可,而不是获得由krb_realmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。
    -x:为所有通过rlogin会话传送的数据打开DES加密。这会影响响应时间和CPU利用率,但是可以提高安全性。 

    4.使用说明
    如果在网络中的不同系统上都有账号,或者可以访问别人在另一个系统上的账号,那么要访问别的系统中的账号,首先就要注册到系统中,接着通过网络远程注册到账号所在的系统中。rlogin可以远程注册到别的系统中,它的参数应是一个系统名。
rcp 

    1.作用
    rcp代表远程文件拷贝,用于计算机之间文件拷贝,使用权限是所有用户。 

    2.格式
    rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file 

    3.主要参数
    -r:递归地把源目录中的所有内容拷贝到目的目录中。要使用这个选项,目的必须是一个目录。
    -p:试图保留源文件的修改时间和模式,忽略umask。
    -k:请求rcp获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。
    -x:为传送的所有数据打开DES加密。 

    finger 

    1.作用
    finger用来查询一台主机上的登录账号的信息,通常会显示用户名、主目录、停滞时间、登录时间、登录Shell等信息,使用权限为所有用户。 

    2.格式
    finger [选项] [使用者] [用户@主机] 

    3.主要参数
    -s:显示用户注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。
    -l:除了用-s选项显示的信息外,还显示用户主目录、登录Shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
    -p:除了不显示.plan文件和.project文件以外,与-l选项相同。 

    4.应用实例
    在计算机上使用finger: 

<ccid_nobr>
<ccid_code>[root@localhost root]# Finger
Login Name Tty Idle Login Time Office Office Phone
root root tty1 2 Dec 15 11
root root pts/0 1 Dec 15 11
root root *pts/1 Dec 15 11


    5.应用说明
    如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程的支持。 

    mail 

    1.作用
    mail作用是发送电子邮件,使用权限是所有用户。此外,mail还是一个电子邮件程序。 

    2.格式 

<ccid_nobr>
<ccid_code>mail [-s subject] [-c address] [-b address] 
mail -f [mailbox]mail [-u user]


    3.主要参数 

<ccid_nobr>
<ccid_code>-b address:表示输出信息的匿名收信人地址清单。 
-c address:表示输出信息的抄送()收信人地址清单。 
-f [mailbox]:从收件箱者指定邮箱读取邮件。
-s subject:指定输出信息的主体行。
[-u user]:端口指定优化的收件箱读取邮件。


    nslookup 

    1.作用
    nslookup命令的功能是查询一台机器的IP地址和其对应的域名。使用权限所有用户。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。 

    2.格式
    nslookup [IP地址/域名] 

    3.应用实例
    (1)在本地计算机上使用nslookup命令 

<ccid_nobr>
<ccid_code>$ nslookup
Default Server: name.cao.com.cn
Address: 192.168.1.9
>


    在符号“>”后面输入要查询的IP地址域名,并回车即可。如果要退出该命令,输入“exit”,并回车即可。 

    (2)使用nslookup命令测试named
    输入下面命令:
    nslookup 

    然后就进入交换式nslookup环境。如果named正常启动,则nslookup会显示当前DNS服务器的地址和域名,否则表示named没能正常启动。 

    下面简单介绍一些基本的DNS诊断。 
    ◆ 检查正向DNS解析,在nslookup提示符下输入带域名的主机名,如hp712.my.com,nslookup应能显示该主机名对应的IP地址。如果只输入hp712,nslookup会根据/etc/resolv.conf的定义,自动添加my.com域名,并回答对应的IP地址。 
    ◆检查反向DNS解析,在nslookup提示符下输入某个IP地址,如192.22.33.20,nslookup应能回答该IP地址所对应的主机名。 
    ◆检查MX邮件地址记录在nslookup提示符下输入: 
    set q=mx 

    然后输入某个域名,输入my.com和mail.my.com,nslookup应能够回答对应的邮件服务器地址,即support.my.com和support2.my.com。 

    动手练习 

    1.危险的网络命令
     互联网的发展使安全成为一个不能忽视的问题,finger、ftp、rcp和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,嗅探器可以非常容易地截获这些口令和数据。而且,这些服务程序的安全验证方式也是有弱点的,很容易受到“中间服务器”方式的攻击。这里笔者把一些不安全的命令根据危险等级列出,见表3所示。 



     现在ftp、telnet可以被SSH命令代替绑定在端口22上,其连接采用协商方式,使用RSA加密。身份鉴别完成之后,后面的所有流量都使用IDEA 进行加密。SSH(Secure Shell)程序可以通过网络登录到远程主机,并执行命令。rcp、rlogin等远程调用命令也逐渐被VNC软件代替。 

    2.在一张网卡上绑定多个IP地址
    在Linux下,可以使用ifconfig方便地绑定多个IP地址到一张网卡。例如,eth0接口的原有IP地址为192.168.0 .254,可以执行下面命令: 

<ccid_nobr>
<ccid_code>ifconfig eth0:0 192.168.0.253 netmask 255.255.255.0 
ifconfig eth0:1 192.168.0.252 netmask 255.255.255.0 
......


    3.修改网卡MAC地址
    首先必须关闭网卡设备,命令如下:
    /sbin/ifconfig eth0 down 

    修改MAC地址,命令如下:
    /sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE 

    重新启用网卡:
    /sbin/ifconfig eht0 up 

    这样网卡的MAC地址就更改完成了。每张网卡的MAC地址是惟一,但不是不能修改的,只要保证在网络中的MAC地址的惟一性就可以了。 

    4.初步部署IPv6
    IPv4 技术在网络发展中起到了巨大的作用,不过随着时间的流逝它无论在网络地址的提供、服务质量、安全性等方面都越来越力不从心,IPv6呼之欲出。Linux 是所有操作系统中最先支持IPv6的,一般Linux基于2.4内核的Linux发行版本都可以直接使用IPv6,不过主要发行版本没有加载IPv6模块,可以使用命令手工加载,需要超级用户的权限。 

    (1)加载IPv6模块
    使用命令检测,其中inet6 addr: fe80::5054:abff:fe34:5b09/64,就是eth0网卡的IPv6地址。 

<ccid_nobr>
<ccid_code># modprobe IPv6
#ifconfig 
eth0 Link encap:Ethernet HWaddr 52:54:AB:34:5B:09
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::5054:abff:fe34:5b09/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:1360 (1.3 Kb)
Interrupt:5 Base address:0xec00


    (2)使用ping命令检测网卡的IPv6地址是否有效
    #ping6 -I eth0 -c 2 fe80::200:e8ff:fea0:2586 

    和IPv4不一样,使用ping6命令时必须指定一个网卡界面,否则系统不知道将数据包发送到哪个网络设备。I表示Interface、eth0是第一个网卡,-c表示回路,2表示ping6操作两次。结果见图1所示。 


图1 IPv6网络下的ping6命令


    (3)使用ip命令在IPv6下为eth0增加一个IP地址
    #ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0 

    使用ifconfig命令,查看网卡是否出现第二个IPv6地址。 

    Linux网络的主要优点是能够实现资源和信息的共享,并且用户可以远程访问信息。Linux提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户进行网络设定、检查网络状况、登录到远程计算机上、传输文件和执行远程命令等。 

    上面介绍了Linux中比较重要的网络命令,其实Linux还有许多命令需要学习。Linux网络操作命令的一个特点就是命令参数选项很多,并不要求全部记住,关键在于理解命令的主要用途和学会使用帮助信息。
 
 
 
 
 
 
 
 
 
 
 
 

查看占用cpu最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

或者top (然后按下M,注意这里是大写)

查看占用内存最高的进程

ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

或者top (然后按下P,注意这里是大写)

该命令组合实际上是下面两句命令:

ps aux|head -1
ps aux|grep -v PID|sort -rn -k +3|head

其中第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)。
接下来的grep -v PID是将ps aux命令得到的标题去掉,即grep不包含PID这三个字母组合的行,再将其中结果使用sort排序。
sort -rn -k +3该命令中的-rn的r表示是结果倒序排列,n为以数值大小排序,而-k +3则是针对第3列的内容进行排序,再使用head命令获取默认前10行数据。(其中的|表示管道操作)

补充:内容解释

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

iostat

    iostat 命令详细地显示了存储子系统方面的情况。你通常用iostat来监控存储子系统总体上运行状况如何,并且在用户注意到服务器运行缓慢之前提早发现输入/输出缓慢的问题。相信我,你应该在用户发现这些问题之前先发现这些问题!

    meminfo和free

    meminfo为你详细显示了内存方面的情况。你通常可以使用另一个程序,比如cat和grep,来访问meminfo的信息。比如说,cat /proc/meminfo为你详细显示了服务器的内存在任何一个时间的使用情况。

    如果想快速了解内存的概要信息,可以使用free命令。简而言之,free为你提供了概要信息;meminfo为你提供了详细信息。

    mpsta

    mpstat命令可以报告多处理器服务器上每个可用处理器的活动情况。如今,由于多核处理器,这个命令适用于几乎所有服务器。mpstat还可以报告所有服务器上的处理器的平均活动情况。它让你能够按照系统或按照处理器来显示总的处理器统计信息。这个概要信息可以在潜在的应用程序问题惹毛用户之前提醒你注意。

    netstat

    netstat与ps一样,也是Linux管理员每天都使用的Linux工具。它显示了与网络有关的大量信息,比如套接口使用情况、路由、接口、协议、网络统计信息及更多信息。最常用的一些选项如下:

    -a 显示套接口的所有信息

    -r 显示路由信息

    -i 显示网络接口的统计信息

    -s 显示网络协议的统计信息

    nmon

    nmon是Nigel's Monitor的简称,这款广受欢迎的开源工具用来监控Linux系统的性能。nmon可以监控多个子系统的性能信息,比如处理器使用率、内存使用率、运行队列的信息、磁盘输入/输出统计信息、网络输入/输出统计信息、内存分页活动和进程衡量指标。然后,你可以通过curses"图形化"界面,查看 nmon的实时系统衡量结果。

    想运行nmon,你可以从外壳来启动该工具。一旦启动,只要输入单键命令,就可以选择要监控的子系统。比如说,想获得处理器、内存和磁盘等方面的统计信息,只要分别输入c、m和d.也可以使用带-f标志的nmon,将性能统计信息保存到CSV文件中,以便日后分析。

    就日常的服务器监控而言,我觉得nmon是我的Linux系统管理工具包中最有用的一个程序。

    pmap

    pmap命令用来报告服务器的进程所使用的内存量。你可以用这个工具来确定服务器上哪些进程被分配了内存、这些进程中有谁在大量使用内存。

    ps和pstree

    ps和pstree这两个命令是Linux系统管理员的两个得力助手。它们都能以列表的形式显示所有目前在运行的进程。ps可以告诉你服务器的程序在使用多少的内存和处理器时间。pstree显示的信息比较少,但着重表明了哪些进程是其他进程的子进程。掌握了这些信息,你就能发现失控的进程,然后用 Linux"不留活口"的kill命令,来终止这些进程。

    sar

    sar程序好比是系统监控工具领域的瑞士军刀。sar命令实际上由三个程序组成:显示数据的sar、收集数据的sa1以及保存数据的sa2.一旦安装完毕,sar就能生成详细的概要信息,显示处理器使用率、内存分页活动、网络输入/输出和传输方面的统计信息、进程创建活动以及磁盘设备活动。sar和 nmon的一大区别在于,前者更适合长期监控系统,我觉得nmon则比较适合帮助我快速查看服务器的运行状况。

    strace

    strace 经常被认为是程序员的调试工具,但它的功用不仅仅用来调试。它可以截获和记录进程调用系统的情况。因而,它是一个实用的诊断、教学和调试工具。比如说,你可以使用strace来查出某个程序在启动时实际上使用哪个配置文件。

    不过strace的确有一个缺陷。它在检查某个进程时,该进程的性能会一落千丈。因而,只有在我已经有极其充分的理由认为某个程序引起问题的情况下,才使用strace.

    tcpdump

    tcpdump是一个简单而可靠的网络监控实用工具。其基本的协议分析功能让你能够粗略查看网络上的情况。不过想真正深入分析网络方面的情况,你应该使用Wireshark(下面有介绍)。

    top

    top命令显示了活动进程方面的情况。默认情况下,它显示了服务器上运行的最消耗处理器的任务,而且每5秒钟就刷新一次列表。你还可以按多个标准对进程进行分类,比如PID(进程ID);年限,最新的列在最前面;时间,按累计时间;以及驻留内存使用情况和自启动以来一直使用处理器的总时间。我觉得它提供了一种快速而简易的方法,便于查看有没有进程开始即将失控、带来问题。

    uptime

    uptime可用来查看某台服务器运行了多久、有多少个用户登录上去。它还显示了服务器平均负载的概要信息。负载的最佳值是1或更小,这意味着每个进程可以立即访问处理器、不存在处理器周期丢失的情况。

    vmstat

    大体上来说,你可以使用vmstat来监控虚拟内存方面的情况。Linux不断使用虚拟内存,以获得最佳的存储性能。

    如果你的应用程序在占用过多的内存,你就会遇到频繁被换出内存(page-out)的情况——即程序从内存进入到系统硬驱上的交换空间。你的服务器可能会进入到这个阶段:花在管理内存分页上的时间比花在运行应用程序上的时间还多——这种情况被称为抖动(thrashing)。当你的电脑抖动时,性能就一落千丈。Vmstat可以显示平均的数据或实际样本,可以帮助你发觉大量耗用内存的程序和进程,以免它们导致服务器运行起来如同蜗牛缓行。

    Wireshark

    Wireshark之前名为Ethereal(而且现在仍经常这么叫),是tcpdump的同类工具,不过它更为高级,拥有先进得多的协议分析和报告功能。Wireshark既有GUI界面,又有外壳界面。如果你从事专业级的网络管理工作,只能使用ethereal.而如果你在使用 Wireshark/ethereal,我强烈建议阅读Chris Sander所着的《实用数据包分析》(Practical Packet Analysis),该书深入浅出地介绍了如何最充分地利用这款实用程序。

系统 
# uname -a # 查看内核/操作系统/CPU信息 
# head -n 1 /etc/issue # 查看操作系统版本 
# cat /proc/cpuinfo # 查看CPU信息 
# hostname # 查看计算机名 
# lspci -tv # 列出所有PCI设备 
# lsusb -tv # 列出所有USB设备 
# lsmod # 列出加载的内核模块 
# env # 查看环境变量 
资源 
# free -m # 查看内存使用量和交换区使用量 
# df -h # 查看各分区使用情况 
# du -sh # 查看指定目录的大小 
# grep MemTotal /proc/meminfo # 查看内存总量 
# grep MemFree /proc/meminfo # 查看空闲内存量 
# uptime # 查看系统运行时间、用户数、负载 
# cat /proc/loadavg # 查看系统负载 
磁盘和分区 
# mount | column -t # 查看挂接的分区状态 
# fdisk -l # 查看所有分区 
# swapon -s # 查看所有交换分区 
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备) 
# dmesg | grep IDE # 查看启动时IDE设备检测状况 
网络 
# ifconfig # 查看所有网络接口的属性 
# iptables -L # 查看防火墙设置 
# route -n # 查看路由表 
# netstat -lntp # 查看所有监听端口 
# netstat -antp # 查看所有已经建立的连接 
# netstat -s # 查看网络统计信息 
进程 
# ps -ef # 查看所有进程 
# top # 实时显示进程状态 
用户 
# w # 查看活动用户 
# id # 查看指定用户信息 
# last # 查看用户登录日志 
# cut -d: -f1 /etc/passwd # 查看系统所有用户 
# cut -d: -f1 /etc/group # 查看系统所有组 
# crontab -l # 查看当前用户的计划任务 
服务 
# chkconfig -list # 列出所有系统服务 
# chkconfig -list | grep on # 列出所有启动的系统服务 
程序 
# rpm -qa # 查看所有安装的软件包

我们使用top命令来查看CPU使用状况。

top不会产生输出,屏幕内容保持不变。它刷新屏幕以显示新信息。因此,如果您只执行top并保持屏幕一直开启,则屏幕始终显示最新信息。退出top的命令为q,或者按下Ctrl-C.



top - 17:03:45 up 58 days,  4:01,  1 user,  load average: 0.00, 0.02, 0.00 
Tasks: 172 total,  1 running, 171 sleeping,  0 stopped,  0 zombie
Cpu(s):  0.2% us,  0.1% sy,  0.0% ni, 99.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:  4037036k total,  4007280k used,    29756k free,    93384k buffers
Swap:  8385888k total,    71536k used,  8314352k free,  3068240k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                              
27167 oracle    16  0 2011m 490m 483m S    1 12.4  0:46.93 oracle                                                                
27175 oracle    15  0 2011m 517m 510m S    1 13.1  0:49.78 oracle                                                                
5003 oracle    15  0 2021m  33m  29m S    0  0.9  3:56.10 oracle                                                                
    1 root      16  0  4756  552  460 S    0  0.0  0:09.31 init                                                                  
    2 root      RT  0    0    0    0 S    0  0.0  0:00.47 migration/0                                                            
  ...............................



第一行(top):

top - 17:03:45 up 58 days,  4:01,  1 user,  load average: 0.00, 0.02, 0.00 
    “17:03:45”为系统当前时刻;
    “58 days,  4:01”为系统启动后到现在的运作时间;
    “1 user”为当前登录到系统的用户,更确切的说是登录到用户的终端数--同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
    “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU将比较吃力的负载当前系统所包含的进程;

第二行(Tasks):
    “172 total”为当前系统进程总数;
    “1 running”为当前运行中的进程数;
    “171 sleeping”为当前处于等待状态中的进程数;
    “0 stoped”为被停止的系统进程数;
    “0 zombie”为僵死的进程数;

第三行(Cpus):
  显示CPU利用率的详细信息,如果有多个CPU,屏幕将在每行显示一个CPU的信息。



第四行(Mem):
  显示可用的和已利用的内存



第五行(Swap):
    表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

  其余的显示内容以表格格式显示进程。下面对各列进行解释:

列描述

PID            进程的进程ID

USER          运行该进程的用户

PRI          进程的优先级

NI            nice值:该值越高,任务的优先级越低

SIZE          该进程使用的内存(代码+数据+堆栈)

RSS          该进程使用的物理内存

SHARE        该进程使用的共享内存

STAT  该进程的状态,用代码显示。一些主要的状态代码包括:
R— 正在运行
S— 正在休眠
Z— 迟滞
T— 已停止

您还会看到第二个和第三个字符,它们表示:
W— 已换出的进程
N— 正nice值

%CPU          该进程使用的CPU百分比

%MEM          该进程使用的内存百分比

TIME          该进程使用的总CPU时间

CPU          如果这是一个多处理器系统,该列指明正在其上运行进程的CPU的ID。

COMMAND        该进程发出的命令



top运行中可以通过top的内部命令对进程的显示方式进行控制。内部命令如下:

  s -改变画面更新频率
  l -关闭或开启第一部分第一行top信息的表示
  t -关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示
  m -关闭或开启第一部分第四行Mem和第五行Swap信息的表示
  N -以PID的大小的顺序排列表示进程列表

    P -以CPU占用率大小的顺序排列进程列表  

  M -以内存占用率大小的顺序排列进程列表
  h -显示帮助
  n -设置在进程列表所显示进程的数量
  q -退出top

---------------------------------------------------------

动态查看一个进程的内存使用

  1. 1、top命令  
  2. top -d 1 -p pid [,pid ...]  //设置为delay 1s,默认是delay 3s   
  3. 如果想根据内存使用量进行排序,可以shift + m(Sort by memory usage)  

静态查看一个进程的内存使用

  1. 1、pmap命令  
  2. pmap pid  
  3.   
  4. 2、ps命令  
  5. ps aux|grep process_name  
  6.   
  7. 3、查看/proc/process_id/文件夹下的status文件  
  8. Name:   php  
  9. State:  R (running)  
  10. SleepAVG:       0%  
  11. Tgid:   21574  
  12. Pid:    21574  
  13. PPid:   10005  
  14. TracerPid:      0  
  15. Uid:    1000    1000    1000    1000  
  16. Gid:    100     100     100     100  
  17. FDSize: 256  
  18. Groups: 16 100   
  19. VmPeak:   161740 kB  
  20. VmSize:   161740 kB  
  21. VmLck:         0 kB  
  22. VmHWM:    107144 kB  
  23. VmRSS:    107144 kB  
  24. VmData:   106192 kB  
  25. VmStk:        84 kB  
  26. VmExe:      5588 kB  
  27. VmLib:      7884 kB  
  28. VmPTE:       268 kB  
  29. Threads:        1  
  30. SigQ:   0/69632  
  31. SigPnd: 0000000000000000  
  32. ShdPnd: 0000000000000000  
  33. SigBlk: 0000000000000000  
  34. SigIgn: 0000000000001000  
  35. SigCgt: 00000001818040a7  
  36. CapInh: 0000000000000000  
  37. CapPrm: 0000000000000000  
  38. CapEff: 0000000000000000  
  39. Cpus_allowed:   00000000,00000000,00000000,0000000f  
  40. Mems_allowed:   1  
  41.   
  42. 任务虚拟地址空间的大小 VmSize  
  43. 应用程序正在使用的物理内存的大小 VmRSS  
 

 

 

 

 

 

 

 

 

 

 

下面这几个命令组合对于管理RS/6000 AIX系统有帮助: 
(1)显示10个消耗CPU最多的进程: 
# ps aux |head -1 ;ps aux |sort -rn +2 |head –10 
(2)显示10个消耗存储空间最多的进程: 
# ps aux |head -1 ;ps aux |sort -rn +3 |head -10 
(3)按顺序显示系统中受罚的进程: 
#ps -eakl |head -1 ;ps -eakl |sort -rn +5 
(4)按优先级顺序显示系统中的进程: 
#ps -eakl |sort -n +6 |head 
(5)按处理时间为顺序显示系统中的前十个进程: 
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +3 |head –10 
(6)按实际内存使用的多少顺序显示系统中的前十个进程: 
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +6 |head –10 
(7)按换入页面的多少顺序显示系统中的前10个进程: 
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +4 |head -10 

或者使用topas命令,左下角栏:
Name PID CPU% PgSp Owner % Used 1.1
topas 962936 0.3 5.5 saqq NFS (calls/sec) % Free 98.8
sched 4386 0.0 0.4 root ServerV2 0
getty 123094 0.0 0.4 root ClientV2 0 Press:
gil 28974 0.0 0.9 root ServerV3 0 "h" for help
db2fmp 520462 0.0 34.7 db2idep
看cpu列

定位瓶颈的话就不好说了,要看程序的源码了,需要优化

 
原文地址:https://www.cnblogs.com/clphp/p/4919919.html