網(wǎng)絡(luò)篇
ping
-
ping -c 3 -q -s 65500 -t 255 -i 0.1 -f www.baidu.com
-
-c:指定ping的次數(shù) -
-q:只重結(jié)果不重過程 -
-s: 默認(rèn)情況下,ping命令是以64字節(jié)大小的數(shù)據(jù)包來測試網(wǎng)絡(luò)聯(lián)通性的,如需要改變默認(rèn)數(shù)據(jù)包的大小,則可以使用參數(shù)-s選項(xiàng)。 -
-t: 指定ping的TTL -
-i: 指定ping的時(shí)間間隔 -
-f: 以盡可能快的速度來發(fā)送數(shù)據(jù)包
-
DNS
DNS即Domain Name System,負(fù)責(zé)著整個(gè)互聯(lián)網(wǎng)中“域名—IP地址”的管理和解析工作。
DNS緩存,每個(gè)DNS服務(wù)器都有一個(gè)高速緩存區(qū),里面存放“域名-IP”映射關(guān)系,緩存會(huì)設(shè)置期限,所以如果DNS服務(wù)器是從緩存中提取解析數(shù)據(jù)返回給用戶的,會(huì)在返回內(nèi)容中給出“Non-authoritative answer”的字樣。
安裝 bind-utils軟件包,里面包括 host dig nslookup等命令
/etc/resolv.conf存放dns服務(wù)器地址-
DNS協(xié)議五元組:DNS是用來做域名和資源轉(zhuǎn)換的,而IP地址只是資源中的一種而已。資源是一個(gè)五元組{ DomainName、TimeToLive、Class、Type、Value }
- DomainName(域名):指我們要查詢的那個(gè)域名。
- TimeToLive(生存期限):表示此域名在各DNS服務(wù)器緩存中應(yīng)保存的時(shí)長。
- Class(類別):通常為IN,即Internet。另外還有CH(Chaos)和HS(Hesiod)兩類,但目前幾乎已經(jīng)被淘汰了。
- Type(類型):指出這條記錄的類型,包括8種,即SOA、A、MX、NS、CNAME、PTR、HINFO和TXT。
- Value(值):針對不同類型,會(huì)有不同的值。
-
DNS的八種類型
- SOA: Start Of Authority,表示授權(quán)開始,可以獲得針對一個(gè)域名的最基本信息,包括Mail:管理員郵箱地址、Minimum:外部DNS服務(wù)器如果要緩存本DNS服務(wù)器的授權(quán)數(shù)據(jù)保存時(shí)限等。
- A: IP地址
- MX: Mail eXchanger,當(dāng)前域名對應(yīng)的郵箱服務(wù)器
- NS: Name Server,給定域名下包含的DNS服務(wù)器信息
- CNAME: 別名
- PTR: 從IP地址查詢其對應(yīng)的域名的映射關(guān)系
- HINFO: 包含CPU和OS等信息
- TXT: 文本信息,標(biāo)識有關(guān)此域名的一些信息
nslookup
<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 18px; white-space: pre-wrap; display: block; padding: 18px; margin: 0px 0px 10px; line-height: 30px; color: rgb(51, 51, 51); word-break: normal; word-wrap: break-word; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); border-radius: 3px; overflow: scroll;">
$ nslookup www.baidu.com//本次解析使用的DNS服務(wù)器的具體IP地址和端口Server: 223.5.5.5Address: 223.5.5.5#53Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.121Name: www.a.shifen.comAddress: 61.135.169.125
</pre>
- nslookup - 8.8.8.8 更改dns服務(wù)器地址,默認(rèn)取
/etc/resolv.conf中第一條記錄 - nslookup -type=soa 更改查詢的類型。
dig
dig: Domain Information Groper,它是一個(gè)DNS查詢工具,比nslookup更加強(qiáng)大。
- dig @dnsserver name querytype
- -f: 用-f選項(xiàng)實(shí)現(xiàn)從一個(gè)文件里讀取內(nèi)容批量查詢。
- -t: 設(shè)置查詢類型
- -q: 顯示設(shè)置要查詢的域名,提高命令的可讀性
- -x: 逆向查詢
-
dig +tcp @8.8.8.8 www.baidu.com: 采用TCP協(xié)議來進(jìn)行DNS通信 -
dig +trace roclinux.cn: 跟蹤dig全過程 -
dig +short www.baidu.com: 精簡dig輸出
iproute
net-tools軟件包是Linux平臺(tái)中非常老牌的工具包,包括arp、ifconfig、netstat、route等命令,普遍集成于各類Linux發(fā)行版中,但是Linux內(nèi)核2.2版本對網(wǎng)絡(luò)子系統(tǒng)進(jìn)行了全面的重構(gòu)后,net-tools工具集有些力不從心,iproute2做為后浪有將前浪拍在沙灘上的趨勢。
ss
ss是 Socket Statistics的縮寫,可以獲取socket統(tǒng)計(jì)信息。ss能夠顯示更多更詳細(xì)的有關(guān)網(wǎng)絡(luò)連接狀態(tài)的信息,而且比netstat更快速、更高效。
-
ss一些常用的選項(xiàng)
-
ss -s: 查看當(dāng)前服務(wù)器的網(wǎng)絡(luò)連接統(tǒng)計(jì) -
ss -l: 查看所有打開的網(wǎng)絡(luò)端口 -
ss -a: 查看所有的socket連接-ta:表示只查看TCP sockets
-
ip
ip是用來管理網(wǎng)絡(luò)設(shè)備和路由的強(qiáng)大命令。
-
ip addr show展示網(wǎng)絡(luò)接口信息 -
ip addr add 192.168.1.111/24 dev p1p2為網(wǎng)絡(luò)接口添加一個(gè)IP地址 -
ip addr del 192.168.1.111/24 dev p1p2針對一個(gè)網(wǎng)絡(luò)接口刪除其IP地址 -
ip route show查看路由表 -
ip route add 192.168.2.0/24 via 192.168.1.254增加一條路由規(guī)則 -
ip neigh show查看本服務(wù)器的ARP列表 -
ip命令匯總表
image
tcpdump
tcpdump -i eth0 -nn -X ‘port 53’ -c 1
-i選項(xiàng):即interface,用來指定網(wǎng)絡(luò)接口
-nn選項(xiàng):意思是當(dāng)tcpdump遇到協(xié)議號或端口號時(shí),不要將這些數(shù)字轉(zhuǎn)換成對應(yīng)的協(xié)議名稱或端口名稱。
-X選項(xiàng):告訴tcpdump命令,需要把協(xié)議頭和包內(nèi)容都原原本本地顯示出來。tcpdump會(huì)同時(shí)以16進(jìn)制和ASCII的形式顯示
-c選項(xiàng):是Count的含義,這個(gè)選項(xiàng)用來設(shè)置我們希望tcpdump幫我們抓幾個(gè)包。
-e選項(xiàng): 增加以太網(wǎng)幀頭部信息輸出
-l選項(xiàng):讓輸出變?yōu)樾芯彌_,如果不加-l選項(xiàng)的話,那么只有當(dāng)緩沖區(qū)全部占滿時(shí),tcpdump才會(huì)將緩沖區(qū)中的內(nèi)容輸出出來
-t選項(xiàng):輸出時(shí)不打印時(shí)間戳
-v選項(xiàng):輸出更詳細(xì)的信息,在原有輸出內(nèi)容的基礎(chǔ)之上,你還會(huì)看到tos值、ttl值、ID值、總長度、校驗(yàn)值等。
-F選項(xiàng): 指定過濾表達(dá)式所在的文件,
tcpdump -i eth0 -c 1 -t -F filter.txt-w選項(xiàng):將流量保存到文件中
-r選項(xiàng):讀取raw packets文件
-A選項(xiàng):tcpdump只會(huì)顯示ASCII形式的數(shù)據(jù)包內(nèi)容
-
過濾流量
host 指定主機(jī)名或IP地址
net 指定網(wǎng)絡(luò)段
port 指定端口
portwange 指定端口范圍
src(source) dst(destination) 過濾表達(dá)式中沒有明確指出某個(gè)IP是src還是dst的話,那么默認(rèn)策略是src或dst都會(huì)匹配到。
-
proto[expr:size]語法
- proto就是protocol的縮寫,表示這里要指定的是某種協(xié)議的名稱,比如ip、tcp、icmp、udp等。
- proto[expr:size]中,expr用來指定數(shù)據(jù)報(bào)偏移量,表示從某個(gè)協(xié)議的數(shù)據(jù)報(bào)的第多少位開始提取內(nèi)容,默認(rèn)的起始位置是0。而size表示從偏移量的位置開始提取多少個(gè)字節(jié)
- 提取了特定內(nèi)容之后,我們就需要設(shè)置我們的過濾條件了。我們可用的“比較操作符”包括:>、<、>=、<=、=和!=,共6個(gè)。
- 要想提取TCP協(xié)議的SYN、ACK和FIN字段 語法如下
tcp[tcpflags] & tcp-syn; tcp[tcpflags] & tcp-ack; tcp[tcpflags] & tcp-fin; -
tcpdump 'ip[2:2] > 576'打印IP包長度超過576字節(jié)的網(wǎng)絡(luò)包。
nc
命令nc,全名netcat, 能勝任跟TCP/UDP相關(guān)的一切操作,可以打開TCP連接、發(fā)送UDP包、監(jiān)聽端口,端口掃描等等。
-
聊天
- 在A機(jī)器上執(zhí)行
nc -l 12345 - 在B機(jī)器上
nc 116.255.245.207(A的IP地址) 12345
- 在A機(jī)器上執(zhí)行
-
端口掃描
nc -z -v -n -w 2 127.0.0.1 20-23- -z選項(xiàng):一旦建立連接后馬上斷開,而不發(fā)送和接收任何數(shù)據(jù)。
- -v選項(xiàng):打印詳細(xì)輸出信息。
- -n選項(xiàng):直接使用IP地址,而不使用域名服務(wù)器來查詢其域名。
- -w選項(xiàng):設(shè)置連接的超時(shí)時(shí)間,單位為秒。
- -u選項(xiàng):使用UDP建立連接。上面命令無此設(shè)置,則表示使用TCP建立連接。
-
傳輸文件
- 文件發(fā)送端啟動(dòng)監(jiān)聽端口,準(zhǔn)備好文件
nc -v -l 12345 < book_out.txt - 文件的接收端接收服務(wù)端的數(shù)據(jù),并重定向到文件中
nc -v -n 116.255.245.207 12345 > book_in.txt
- 文件發(fā)送端啟動(dòng)監(jiān)聽端口,準(zhǔn)備好文件
ssh-copy-id
一個(gè)腳本方便從A機(jī)器建立到B機(jī)器的ssh信任關(guān)系。
rsync
用于源端和目的端文件、文件夾的實(shí)時(shí)同步
wget
命令行下的網(wǎng)絡(luò)下載工具,支持HTTP、HTTPS、FTP協(xié)議的下載。
進(jìn)程和性能篇
uptime
uptime命令,有兩大功能:一個(gè)是查看機(jī)器的開機(jī)時(shí)長,另一個(gè)是查看CPU負(fù)載情況。
<pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 18px; white-space: pre-wrap; display: block; padding: 18px; margin: 0px 0px 10px; line-height: 30px; color: rgb(51, 51, 51); word-break: normal; word-wrap: break-word; background-color: rgb(247, 247, 249); border: 1px solid rgb(225, 225, 232); border-radius: 3px; overflow: scroll;">
$ uptime22:36:58 up 11:12, 1 user, load average: 0.00, 0.00, 0.00系統(tǒng)當(dāng)前時(shí)間 主機(jī)已運(yùn)行時(shí)間 用戶**連接**數(shù) 最近1、5、15分鐘的系統(tǒng)平均負(fù)載+ **系統(tǒng)平均負(fù)載:** 運(yùn)行隊(duì)列中的平均進(jìn)程數(shù),一般的經(jīng)驗(yàn)來看,單核負(fù)載在0.7以下是安全的,超過0.7就需要進(jìn)行優(yōu)化了。+ **/proc/loadavg**文件中也記載了系統(tǒng)平均負(fù)載信息。
</pre>
free
- buffers是塊設(shè)備I/O相關(guān)的緩存頁,數(shù)據(jù)先寫到buffer中,再再后臺(tái)慢慢寫入設(shè)備。
- cached是普通文件相關(guān)的緩存頁,從硬盤讀取數(shù)據(jù)內(nèi)容先暫存到cache里,減少從底盤讀數(shù)據(jù)的次數(shù)。
SWAP空間
SWAP(交換分區(qū))和Windows中的虛擬內(nèi)存都是將一部分硬盤空間虛擬成內(nèi)存,來緩解內(nèi)存使用緊張的問題。
- 當(dāng)Linux系統(tǒng)發(fā)現(xiàn)物理內(nèi)存使用量不足時(shí)就會(huì)選擇內(nèi)存中較長時(shí)間沒有被訪問和更新的內(nèi)存數(shù)據(jù),將這些內(nèi)存數(shù)據(jù)臨時(shí)寫到SWAP中,并釋放內(nèi)存中相應(yīng)的空間
- 等到某個(gè)程序要使用SWAP中的數(shù)據(jù)時(shí),系統(tǒng)會(huì)再次從SWAP中讀取之前保存的數(shù)據(jù),并寫回到物理內(nèi)存中。
- 對于服務(wù)器來說,SWAP建議設(shè)置為內(nèi)存的1~2.5倍之間的數(shù)值,可以防止內(nèi)存耗盡的窘境。
- 如何定義內(nèi)存不足?
cat /proc/sys/vm/swappiness中的參數(shù)會(huì)來輔助控制“內(nèi)存不足”的界限。
image
vmstat
- vmstat輸出的第一行數(shù)字,是自服務(wù)器啟動(dòng)至今的各項(xiàng)指標(biāo)的平均值,而非最新狀態(tài)值,從第二行開始的,才能反映服務(wù)器當(dāng)前最新狀態(tài)。
- 如果cache的數(shù)值較大,則說明系統(tǒng)緩存了較多的磁盤數(shù)據(jù),利于磁盤I/O性能的提升。
- si和so則是讀寫SWAP的量,這兩個(gè)值如果長期大于0,則表示系統(tǒng)需要經(jīng)常讀寫交換分區(qū),這會(huì)很消耗CPU資源和磁盤I/O性能。
- 如果free的數(shù)值很低,甚至接近0了,也不一定就是系統(tǒng)內(nèi)存快耗盡了。要同時(shí)看buff和cache的量,大部分情況是buff和cache占用了很多內(nèi)存資源,而當(dāng)系統(tǒng)真正需要內(nèi)存時(shí),buff和cache是可以隨時(shí)被系統(tǒng)征調(diào)回來的。
- 如果發(fā)現(xiàn)bi和bo的值很大,則說明系統(tǒng)正在進(jìn)行大量的磁盤讀寫操作。
- 如果us的數(shù)值經(jīng)常大于50%,則說明用戶進(jìn)程所占用的CPU時(shí)間較多
- 而sy是內(nèi)核所消耗的CPU時(shí)間,這個(gè)數(shù)值不應(yīng)該很高。如果很高,則一定是系統(tǒng)哪里出了問題。
- 如果wa較高,則說明CPU總是在等待I/O操作。這表明磁盤已經(jīng)成為主要瓶頸
- r表示的是正在運(yùn)行隊(duì)列中的任務(wù)數(shù),如果這個(gè)數(shù)值總是超過服務(wù)器的CPU核數(shù),則說明CPU已經(jīng)成為性能瓶頸
mpstat
- mpstat,全稱是multiprocessor statistics,擅長多處理器的統(tǒng)計(jì)工作。
top
通過top,我們可以了解到服務(wù)器的CPU負(fù)載情況、內(nèi)存狀態(tài)、SWAP使用狀況,以及詳盡的進(jìn)程級運(yùn)行狀態(tài),可謂應(yīng)有盡有。
進(jìn)程數(shù)據(jù)
- VIRT(Virtal Memory)中文為虛擬內(nèi)存。一個(gè)進(jìn)程,無論是通過malloc/calloc系列函數(shù)申請的內(nèi)存,還是堆/棧所占用的內(nèi)存,抑或是全局變量等所占用的內(nèi)存,都屬于VIRT范疇。所以VIRT是進(jìn)程所占用內(nèi)存的最大集。 + RES(Resident Memory),中文叫作常駐內(nèi)存。在malloc申請了物理內(nèi)存空間之后,并非會(huì)立即使用到這塊物理內(nèi)存,所以,系統(tǒng)會(huì)在進(jìn)程真正要使用到這塊物理內(nèi)存時(shí),才正式將物理內(nèi)存分配給這個(gè)進(jìn)程。所以,RES表示的是一個(gè)進(jìn)程真正在使用的物理內(nèi)存的大小,而非申請的物理內(nèi)存的大小。
iostat
iostat -d -k 1 3- -d選項(xiàng):只顯示磁盤的使用狀態(tài)
- -k選項(xiàng):使用KB作為單位
- 1: 采樣時(shí)間,1s
- 3: 采樣次數(shù),3次
- iostat輸出的第一組數(shù)據(jù)表示從系統(tǒng)啟動(dòng)到本命令執(zhí)行期間的統(tǒng)計(jì)結(jié)果
- -x選項(xiàng)展示了更多的磁盤統(tǒng)計(jì)數(shù)據(jù)
pidof
- 查詢一個(gè)運(yùn)行程序的PID
pidof sshd - -x選項(xiàng):找出Shell腳本的PID
- -s選項(xiàng): 只輸出一個(gè)PID
sar
將系統(tǒng)性能指標(biāo)信息按時(shí)間間隔數(shù)據(jù)到文件中。
lsof
lsof,即list open files 用來查看進(jìn)程打開的文件、目錄和套接字等一系列信息。
-
lsof filename: 通過文件名來定位打開該文件的進(jìn)程 -
lsof -d N:根據(jù)文件描述符定位進(jìn)程 -
lsof -p PID:查詢進(jìn)程打開了哪些文件 -
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]:查看哪些程序占用端口
fuser
fuser和lsof功能對比
ps
查看服務(wù)器上有哪些進(jìn)程,屬于哪些用戶,消耗了多少CPU資源,占了多少內(nèi)存
- a:顯示各終端上的所有進(jìn)程
- u:展示進(jìn)程所屬的用戶名
- x: 對于沒有關(guān)聯(lián)到終端上的進(jìn)程也展示出來
kill
-
kill [選項(xiàng)] [進(jìn)程號]向進(jìn)程發(fā)送特定信號 - kill -l 查看kill可以發(fā)出哪些信號
nohup
要想讓運(yùn)行的命令不因用戶注銷、網(wǎng)絡(luò)斷開等因素而中斷,有兩個(gè)基本思路:
- 讓進(jìn)程對SIGHUP信號免疫。免疫宗的成員有nohup和disown。
- 讓進(jìn)程在新的會(huì)話中運(yùn)行。會(huì)話宗的成員有setid和screen。
系統(tǒng)管理篇
uname
uname -a 展示系統(tǒng)信息
用戶ID和用戶組
- 實(shí)際用戶,英文術(shù)語叫作real user id,就是登錄Shell的那個(gè)時(shí)刻所使用的用戶ID。用who am i所展示出來的就是“實(shí)際用戶”。
- 登錄進(jìn)Shell之后,使用su或su-切換到的用戶ID,叫作有效用戶。用whoami所展示出來的就是“有效用戶”。
service
service [服務(wù)名] [start/stop/restart/status]-
/etc/init.d目錄下的這些文件就是可以通過service命令掌控的服務(wù)。 - service只是一個(gè)腳本,它所做的只是把用戶的操控動(dòng)作(start/stop/restart/status)傳遞給/etc/init.d中相應(yīng)的命令而已。
chkconfig
/etc/init.d/中包含所有可用的服務(wù);
/etc/rc.d/中設(shè)置有7個(gè)文件夾,以rcN.d形式命名,分別對應(yīng)7個(gè)運(yùn)行等級;
每一個(gè)rcN.d文件夾中的文件全部是軟鏈形式,分別鏈接到/etc/init.d/中的服務(wù)上,也就表明了當(dāng)前的運(yùn)行等級對應(yīng)著哪些服務(wù);
-
rcN.d中的軟鏈文件命名規(guī)則;
- K+整數(shù)+服務(wù)名;
- S+整數(shù)+服務(wù)名。
- 以K開頭的軟鏈文件,表示要關(guān)閉對應(yīng)的服務(wù)。以S開頭的軟鏈文件,表示要啟動(dòng)對應(yīng)的服務(wù)。
lsmod
可以實(shí)現(xiàn)把某些功能代碼封裝成模塊動(dòng)態(tài)地裝載到內(nèi)核中,當(dāng)內(nèi)核需要用到這個(gè)功能時(shí)再讀取使用。