2010年3月9日 星期二

Linux 常用指令

xargs : 將前一個指令結果當成下一個指令參數輸入
find -iname "*.tmp" | xargs rm
ls /etc/ldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}


[網路]
#netstat 指令
-t : tcp
-t : udp
-n : 用數字顯示port、host、user names
-a : listening 和 non-listening 都顯示
-l : 只顯示 listening 的資料

例如:
$ netstat -antp

#ss 指令
-n:用數字顯示(不解析為服務名稱)
-r:嘗試用名稱顯示 address/ports (解析為名稱)
-a:顯示 listening sockets 與 non-listening sockets.(若為 TCP 表示 established connections)
-l:只顯示 listening sockets
-o:顯示 timer 訊息
-e:顯示更詳細的訊息
-m:記憶體使用狀況
-p:顯示使用 socket 的 process
-i:內部的 TCP 訊息
-s:summary  statistics.摘要統計
-4:只顯示 IP4 sockets
-6:只顯示 IP6 sockets
-t:顯示 TCP sockets
-u:顯示 UDP sockets
-d:顯示 DCCP sockets
-w:顯示 RAW sockets
-x:顯示 Unix domain sockets

例如:
$ ss -ntl
State    Recv-Q    Send-Q    Local Address:Port    Peer Address:Port
LISTEN     0         128                 *:80                 *:*
#註:LISTEN 狀態下的 Send-Q,表示listen backlog(somaxconn),跟 netstat 的 Send-Q 意思不同

$ ss -ant
State      Recv-Q Send-Q Local Address:Port          Peer Address:Port
LISTEN     0      128    127.0.0.1:6379                 *:*
LISTEN     0      128    127.0.0.1:11211                *:*
LISTEN     0      128          *:80                     *:*
LISTEN     0      128          *:443                    *:*
ESTAB      0      260    192.168.56.102:443           192.168.56.1:64768
TIME-WAIT  0      0      127.0.0.1:46542              127.0.0.1:6379
TIME-WAIT  0      0      127.0.0.1:11211              127.0.0.1:37448

#ip 指令(管理 routing、devices、policy routing、tunnels)
#查看版本
$ ip -V

[ip-address - protocol address management]
$ man ip address
#顯示IP資訊
$ ip a
$ ip addr
#只顯示ipv4 IP資訊
$ ip -4 a
#只顯示ipv6 IP資訊
$ ip -6 a
#新增IP設定
$ ip addr add 192.168.56.111/24 dev enp0s8
#新增IP設定加別名
$ ip addr add 192.168.56.111/24 dev enp0s8 label enp0s8:xyz
#刪除IP設定
$ ip addr del 192.168.56.111/24 dev enp0s8 label enp0s8:xyz

[ip-route - routing table management]
$ man ip route
#顯示routing table資訊
$ ip r
$ ip ro
$ ip route
#新增default route
$ ip route add default via 192.168.1.1 dev eth0

[ip-rule - routing policy database management]
$ man ip rule
#顯示 Routing Policy Database (RPDB)資訊
$ ip ru
$ ip rule

#預設,有3個路由表。Routing Policy Database (RPDB)
$ ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default
#0、32766、32767是優先級別,數字越小越高
#local、main、default 是路由表名稱

# 查 table ID
$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep


#顯示路由表資訊時,沒指定table,預設是顯示main這個table
#以下顯示相同的內容
$ ip ro
$ ip ro show table main
$ ip ro show table 254
參考:

[硬體]
#CPU 資訊
cat /proc/cpuinfo

#CPU 核心數
cat /proc/cpuinfo | grep "model name" | wc -l

#CPU 型號
dmidecode -t processor | grep "Version:"

#記憶體資訊
cat /proc/meminfo

#記憶體容量
cat /proc/meminfo | grep "Total"

#安裝幾條記憶體、記憶體安裝情況
dmidecode -t memory | grep "Size:"


[資源使用]
#查看網路使用狀態,每兩秒更新一次
sar -n DEV 2

#查看記憶體使用狀態,每兩秒更新一次
sar -r 2

#查看 CPU 使用狀態,每兩秒更新一次
sar -u 2,每兩秒更新一次

#查看硬碟使用狀態,每兩秒更新一次
sar -d 2

#查看硬碟、CPU使用狀態,每兩秒更新一次,-k,容量單位 KB(Kilobyte)
iostat -k 2

#查看硬碟使用狀態,每兩秒更新一次,-d 只顯示硬碟資料
iostat -d -k 2

#每間隔 1 秒,顯示一次 extended statistics,共顯示 3 次
iostat -x 1 3

#查看虛擬記憶體使用狀態,每3秒更新一次
vmstat -n 3

#即時的顯示核心slab快取資訊,透過/proc/slabinfo
slabtop
參考:
linux性能分析工具sar,iostat,vmstat
Linux的IO性能监控工具iostat详解
linux wa%过高,iostat查看io状况


[效能]
#測試硬碟讀取速度
hdparm -t /dev/sda

#測試硬碟寫入速度(會產生tmp.dd檔,執行完可刪除tmp.dd檔)
time sh -c "dd if=/dev/zero of=tmp.dd bs=1000k count=100; sync"
參考:
Linux 查看硬碟讀取寫入速度


[其他]
#找出底下第一層子資料夾佔的容量
$ du -h --max-depth=1
#找出底下第一層子資料夾佔的容量,-x:跳過不同檔案系統的目錄,例如掛載(mount)的目錄
$ du -h -x --max-depth=1

#ls指令,檔案時間顯示到秒,或更小的時間單位
$ ls -la --time-style=full-iso
$ ls -la --full-time

#查作業系統資訊、核心版本
$ uname -mrs
Linux 3.10.0-229.20.1.el7.x86_64 x86_64

#TCP連接儲存hash表
$ dmesg | grep "TCP established hash table"
[    0.127665] TCP established hash table entries: 65536 (order: 7, 524288 bytes)

#TCP端口綁定hash表
$ dmesg | grep "TCP bind hash table"
[    0.127771] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes)

#計算雜湊值(hash)
$ md5sum 檔案
$ sha1sum 檔案
$ sha256sum 檔案


[shell 環境變數、變數的scope作用範圍]
例如登入後,進入bash命令列模式下,即產生了一個"當下程序"
用$ bash [bash sript文字檔] 或 $./[可執行的bas hsript文字檔],都在"當下程序"產生了另一個子程序
#設定變數(只對當下程序有效)
$ AA=123
#輸出變數
$ echo $AA
#變數設定成環境變數(只對當下程序和子程序有效)
$ export AA
#輸出PATH環境變數
$ echo $PATH
#用 export 附加路徑到$PATH環境變數(只對當下程序和子程序有效)
$ export PATH=${PATH}:/sbin
參考:What scopes can shell variables have? - Unix & Linux Stack Exchange [They are scoped by process]

沒有留言:

張貼留言