實用Linux命令集錦(一)

來源:互聯網
上載者:User

標籤:blog   http   ar   io   color   os   使用   sp   for   

top命令

監控系統的運行狀態,並且可以按照cpu、記憶體、執行時間進行排序。

第一行中,03:30:22是目前時間,up 39 min是系統啟動並執行運行了多長時間,1 user指出了當前有幾個使用者登入到系統,load average指的是系統負載,這後面的三個值分別是1分鐘,5分鐘,15分鐘的系統負載平均值。

如果僅僅需要第一行中的資訊,可以使用uptime命令。

第二行中,Task指出了當前系統有多少個進程,以及各種狀態的進程統計資訊。

第三行是%Cpu(s),代表了CPU佔用比例,其中:

  • us 使用者模式(user mode)
  • sy 系統模式(system mode)
  • ni 優先值(low priority user mode(nice))
  • id 空閑CPU百分比(idle task)
  • wa 等待輸入輸出的CPU事件百分比(I/O waiting)
  • hi servicing IRQs
  • si servicing soft IRQs
  • st steal (time given to other DomU instances)

ni是優先值(nice value),也就是任務的優先值。優先值為負數,則說明任務有更高的優先順序,正數值說明任務有更低的優先順序,該值為0意味著進程都優先順序沒有調整。

最後兩行為記憶體資訊,前者Mem為實體記憶體佔用資訊,後者Swap為交換分區佔用資訊。

使用-M參數可以更加友好的顯示記憶體佔用資訊。預設是以kb展示的,看起來比較費勁,使用-M之後會根據數值大小,以G/M為單位展示。

最下面是進程的資訊地區:

  • PID 進程的PID
  • USER 使用者名稱,任務屬主
  • PR 任務的優先順序
  • NI 優先值
  • VIRT 虛擬映像(kb),任務當前使用的虛擬記憶體數量
  • RES 常駐實體記憶體佔用量,RES=CODE+DATA
  • SHR 共用記憶體大小(kb)
  • S 進程狀態(D-不可中斷的睡眠,R-運行,S-睡眠,T-停止,Z-殭屍進程)
  • %CPU CPU使用量
  • %MEM 記憶體使用量量
  • TIME+ CPU時間,百分之一
  • COMMAND 程式名稱

參考linux top命令詳解

pgrep/pkill 命令

根據名稱或者其它屬性查詢(發送訊號)進程資訊。

pgrep命令根據提供的條件查詢進程的pid,查詢條件是and方式的,對於同一個選項,使用『,』分隔可以按照or方式查詢。

pgrep -u root sshd   # 查詢進程名為sshd,並且屬主是root的進程pgrep -u root,daemon # 查詢屬主是root或者daemon的進程

pkill 使用與pgrep類似,不過它不是用來查詢進程pid,而是給進程發送訊號,預設會發送 SIGTERM訊號。

例如:

$ pgrep -u root named # 尋找named進程的pid$ pkill -HUP syslogd  # 告訴syslogd重新讀取設定檔

要查看有哪些訊號可用,可以使用kill -l列出所有的訊號以及其數值。

except命令
  • send 發送一個字串給進程。
  • expect 等待來自進程返回的字串。
  • spawn 開始一個命令。
實現控制台SSH直接登陸Linux伺服器
#!/usr/bin/expectset timeout 20set ip "IP地址"set user "使用者名稱"set password "密碼"spawn ssh "$user\@$ip"expect "[email protected]$ip‘s password:"send "$password\r"interact

參考 6 Expect Script Examples to Expect the Unexpected (With Hello World)

pstack命令

pstack是一個shell指令碼,用於列印正在啟動並執行進程的棧跟蹤資訊,它實際上是gstack的一個連結。

該命令只需要提供一個參數,進程的pid即可。

$ sudo pstack $(pgrep -uroot php-fpm)[sudo] password for guanyy:#0  0x000000380d8e86f3 in __epoll_wait_nocancel () from /lib64/libc.so.6#1  0x00000000007ec4a4 in fpm_event_epoll_wait ()#2  0x00000000007e1517 in fpm_event_loop ()#3  0x00000000007dc887 in fpm_run ()#4  0x00000000007e3bd8 in main ()
strace命令

strace命令用於跟蹤系統調用和訊號。主要用於診斷,偵錯工具,使用該命令能夠列印出進程執行的系統調用資訊。

找出應用程式啟動時讀取的設定檔
$ strace php 2>&1 | grep php.iniopen("/usr/local/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)open("/usr/local/lib/php.ini", O_RDONLY) = 4lstat64("/usr/local/lib/php.ini", {st_mode=S_IFLNK|0777, st_size=27, ...}) = 0readlink("/usr/local/lib/php.ini", "/usr/local/Zend/etc/php.ini", 4096) = 27lstat64("/usr/local/Zend/etc/php.ini", {st_mode=S_IFREG|0664, st_size=40971, ...}) = 0

這裡的2>&1 是將標準錯誤輸出重新導向到標準輸出。

尋找為什麼程式沒有開啟指定檔案
$ strace -e open,access 2>&1 |grep your-filename

-e參數指定了一個限定運算式用於指定要跟蹤的事件和如何跟蹤它們。

[qualifier=][!]value1[,value2]...

這裡的qualifier可選值為: trace, abbrev, verbose, raw, signal, read, write。預設的qualifiertrace

查看進程正在執行什麼操作
[email protected]:~# strace -p 15427Process 15427 attached - interrupt to quitfutex(0x402f4900, FUTEX_WAIT, 2, NULL Process 15427 detached

-p指定了strace跟蹤的進程的pid,這樣就避免了每次執行strace時需要重啟程式。

查看進程的哪些操作比較耗時
[email protected]:~# strace -c -p 11084Process 11084 attached - interrupt to quitProcess 11084 detached% time     seconds  usecs/call     calls    errors syscall------ ----------- ----------- --------- --------- ---------------- 94.59    0.001014          48        21           select  2.89    0.000031           1        21           getppid  2.52    0.000027           1        21           time------ ----------- ----------- --------- --------- ----------------100.00    0.001072                    63           total

-c參數用於統計進程做了哪些系統調用,調用的時間統計等,並對這些資訊做一個匯總顯示。

查看為什麼xxx無法串連到伺服器
$ strace -e poll,select,connect,recvfrom,sendto nc www.news.com 80sendto(3, "\\24\\0\\0\\0\\26\\0\\1\\3\\255\\373NH\\0\\0\\0\\0\\0\\0\\0\\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)...

參考5 simple ways to troubleshoot using Strace

nc命令

該命令用於建立任意的TCP/UDP串連或者是監聽串連。

建立一個基本的C/S模型(檔案遠程複製)

在Server1上,使用nc命令建立一個服務端:

server1 $ nc -l 1234

在Server2上,使用nc作為用戶端串連到server1

server2 $ nc server1的IP地址 1234

這樣就建立起一個簡單的C/S串連,在server2中輸入任何內容,在server1都可以接受到(同步顯示)。

上面的例子可以改造實現檔案遠程發送

server1 $ nc -l 1234 > filename.out

在server2上

server2 $ nc server1的IP地址 1234 < filename.in

-l 指定了nc應該作為server端監聽指定的連接埠

類比HTTP請求
# echo -n "GET / HTTP/1.0\r\n\r\n" | nc aicode.cc 80HTTP/1.1 400 Bad RequestServer: nginx/1.6.2Date: Tue, 16 Dec 2014 08:09:35 GMTContent-Type: text/htmlContent-Length: 172Connection: close<html><head><title>400 Bad Request</title></head><body bgcolor="white"><center><h1>400 Bad Request</h1></center><hr><center>nginx/1.6.2</center></body></html>
連接埠掃描

連接埠掃描的作用還是比較大的,使用nc可以方便的進行連接埠掃描。

# nc -z letv.com 1-100Connection to letv.com 22 port [tcp/ssh] succeeded!Connection to letv.com 80 port [tcp/http] succeeded!

這裡的1-100指定了掃描的連接埠範圍,-z參數告訴nc命令只報告開放的連接埠。

預設nc命令發送的是tcp請求,通過指定參數-u可以發送udp請求。

目錄傳輸

下面例子中,將server2的phpredis-master目錄拷貝到server1。

server1:

# nc -l 1234|tar zxvf -

server2:

# tar zcvf - phpredis-master|nc server1的IP地址 1234

參考Linux nc命令詳解

pstree命令

該命令用於顯示進程樹,以樹的形式顯示正在啟動並執行進程,樹的根節點是指定的pid(忽略則為init進程)。

[[email protected] ~]# pstree -p $(pgrep -uroot php-fpm)php-fpm(5445)─┬─php-fpm(5446)              ├─php-fpm(5447)              ├─php-fpm(5448)              ├─php-fpm(7540)              ├─php-fpm(21639)              └─php-fpm(24727)
ss命令

ss命令用於顯示socket的統計資訊。

顯示socket的匯總資訊

-s選項用於顯示匯總資訊。

# ss -sTotal: 247 (kernel 290)TCP:   214 (estab 68, closed 130, orphaned 0, synrecv 0, timewait 130/0), ports 135Transport Total     IP        IPv6*     290       -         -RAW   0         0         0UDP   11        7         4TCP   84        81        3INET      95        88        7FRAG      0         0         0
查看所有開啟的網路連接埠

-l選項用於列出當前正在監聽的socket。

# ss -lState      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   LISTEN     0      128             127.0.0.1:smux                     *:*       LISTEN     0      128             127.0.0.1:9000                     *:*       LISTEN     0      50                      *:3306                     *:*       LISTEN     0      1024                   :::11211                   :::*

使用ss -pl可以查看使用網路連接埠的進程名稱,這裡的-p選項用於顯示進程資訊。

# ss -plState      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   LISTEN     0      128             127.0.0.1:smux                     *:*        users:(("snmpd",1256,8))LISTEN     0      50                      *:3306                     *:*        users:(("mysqld",17651,10))LISTEN     0      1024                   :::11211                   :::*        users:(("memcached",1849,34))LISTEN     0      1024                    *:11211                    *:*        users:(("memcached",1849,33))LISTEN     0      511             127.0.0.1:6379                     *:*        users:(("redis-server",1403,4))

使用ss -pl|grep 連接埠號碼查看連接埠被那個進程佔用。

顯示所有的TCP/UDP Socket

參數-a(--all)用於顯示所有的socket,-t指的是TCP, -u是UDP, -w是RAW, -x是UNIX。

# ss -t -a# ss -u -a# ss -w -a# ss -x -a

參考ss: Display Linux TCP / UDP Network and Socket Information

w/who命令

w命令用於查看當前哪些使用者登入到系統和他們正在做什麼,who命令僅用於查看哪些使用者登入系統。

# w 15:39:08 up 126 days, 22:35,  3 users,  load average: 0.02, 0.05, 0.02USER     TTY      FROM              [email protected]   IDLE   JCPU   PCPU WHATroot     pts/0    10.58.92.228     13:29    1:35m  0.03s  0.03s -bashroot     pts/1    10.58.93.56      10:32    5:06m  0.00s  0.00s -bashroot     pts/4    10.58.88.20      12:29    0.00s  0.20s  0.00s w# whoroot     pts/0        2014-12-18 13:29 (10.58.92.228)root     pts/1        2014-12-18 10:32 (10.58.93.56)root     pts/4        2014-12-18 12:29 (10.58.88.20)
iostat

報告CPU的統計資訊,裝置、分區、網路檔案系統(NFS)的I/O統計資訊。

# iostatLinux 2.6.32-903.279.9.1.el6.x86_64 (localhost)     2014年12月18日 _x86_64_    (2 CPU)avg-cpu:  %user   %nice %system %iowait  %steal   %idle           0.35    0.00    0.34    0.42    0.15   98.74Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtnvda               4.01         0.35        56.76    3866731  622586087dm-0              3.29         0.09        26.33     989378  288796192dm-1              3.45         0.05        27.60     554922  302727584dm-2              0.32         0.21         2.83    2296845   31060799

這裡對幾個效能指標進行解釋:

  • tps 每秒發送的I/O請求數
  • Blk_read/s 每秒讀取的block數
  • Blk_wrtn/s 每秒寫入的block數
  • Blk_read 讀取的block數
  • Blk_wrtn 寫入的block數

通過指定-d參數可以設定自動按照指定時間間隔顯示統計資訊。例如,下列命令每隔2s顯示一次。

$ iostat -d 2
iptraf 命令:即時網路統計

互動IP網路即時監控工具,圖形化介面,比較方便。

# iptraf

介面如下:

參考20 Linux System Monitoring Tools Every SysAdmin Should Know

實用Linux命令集錦(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.