首先使用man命令或—help參數可以看所有命令的幫助,請大家善加利用
例如:
#man cd
#cp --help
另外linux中 > 表示標準輸出重定向到其他地方例如文件:
# ll >a.txt ll命令應該在屏幕顯示的信息寫入文件a.txt
linux中 | 表示管道,管道前的命令輸出作爲管道後的命令輸入
#grep “abc” a.txt | wc –l 在a.txt中查找含abc字符串的行,通過管道給wc 命令計數。
一.常用系統命令
1. Cd 進入目錄 #爲系統提示符
#cd /ITC/test/ 絕對路徑
#cd dns 相對路徑
#cd ../dns 相對路徑
#cd ~/websearch ~可以替代該用戶的home目錄,比如一個用戶的home目錄爲/ITC/aaa 則~/websearch等於/ITC/aaa/websearch
2. pwd 查看當前所在路徑
3. Rm 刪除文件或目錄
#rm a.txt 刪除一個文件
#rm dns –r -r參數表示刪除目錄
#rm * -f -f參數表示不提示是否確定,直接刪除(不包括路徑)
#rm * -rf 全部刪除包括路徑,不提示是否確定
4. Cp 拷貝
#cp a.txt ../dns/ a.txt拷到../dns/下,不改名
#cp a.txt b.txt a.txt拷貝成b.txt
#cp –r dns dnsbak 拷貝目錄dns爲dnsbak
5. Mv 移動
#mv a.txt b.txt a.txt改名爲b.txt
#mv dns dnsbak 目錄dns改名爲dnsbak
#mv a.txt b.txt c.txt dns/ 3個文件移動到dns目錄,源文件移動後刪除。
6. Scp 機器間遠程
#scp a.txt [email protected]:/usr/local
當前路徑的a.txt拷貝到48機器的指定路徑。Root爲拷貝後目標文件的所屬用戶,可以是其他用戶。拷貝時需要輸入48機器的root密碼
#scp [email protected]:/usr/local/a.txt /ITC/test/
將48上指定目錄下的a.txt拷到本機/ITC/test/,從48機器拷貝文件時使用sonic用戶登錄,需要輸入密碼
#scp –r dns [email protected]:/root/
拷貝目錄dns到別的機器上
7. Rsync 機器間拷貝
#rsync a.txt 192.168.1.48::root/usr/local/ --progress 拷貝a.txt到48上,--progress爲顯示進度。
#rsync –r dns 192.168.1.48:root/usr/local/ 拷貝目錄到別的機器上。
Rsync只能用root權限。而且本地和遠程都需要啓動rsync-demon程序。
8. Df 查看當前機器所有磁盤空間
#df 查看磁盤空間並以K爲單位顯示
#df -h 不以K爲單位顯示,自動選擇最合適的單位顯示如M 、G
9.Du 查看目錄佔用磁盤空間
#du –max-depth=1 /ITC 查看邏輯分區/ITC上各目錄的空間佔用情況,設定只顯示一層路徑。
10.Ls 顯示當前路徑下文件和目錄
#ls –al -l用詳細格式顯示,-a顯示隱藏文件
#ls /ITC/test/ 指定顯示路徑
- Su 切換用戶
#su 切換爲root用戶
#su - 切換爲root用戶並使用root用戶的環境配置
#su – test 切換爲test用戶並使用test用戶的環境配置
12.Exit 從切換到的用戶環境退出(回到su之前的用戶)
13.Ssh 登錄到別的機器
#ssh [email protected] 從當前機器登錄到48機器,可以使用其他用戶
- Ifconfig查看當前機器的網絡狀況(主要用於查看內部或外部IP)
- Export 顯示和設置環境變量
#export 顯示當前環境信息
#export WEBSEARCH_CODE_ROOT=/ITC/test/ 設置環境變量
- Rz 從本機向secucrt連接的服務器傳文件(secucrt客戶端可用)
- Sz 從服務器向本機傳文件
#sz a.txt 將a.txt傳到本機,默認存放位置爲secrcrt安裝路徑下的download目錄。
- Sh 運行腳本
#sh start.sh
- Chmod 改變文件權限
#chmod 755 start.sh 給start.sh的擁有用戶讀寫執行權限,給組用戶和其他用戶讀執行權限。
- Chown 改變文件或目錄的用戶和組權限
#chown test:root a.txt a.txt的用戶爲test,組爲root
#chown -R test:test /ITC/test/ 目錄下所有文家和子目錄的用戶和組都是test。
- More 顯示文件,滿一屏暫停,空格繼續顯示下一屏,q退出
#more filename
- Cat 顯示文件,不暫停 加-n 顯示行數
#cat –n filename
- Head 顯示文件開頭10行,加-n 100 顯示開頭100行
#head –n 100 filename
- Tail 顯示文件尾 加-f 持續顯示(文件還在增長)
#tail –f filename
#tail –n 100 filename 顯示文件結尾100行
- Vi 編輯文件
#vi filename
vi編譯器常用命令:
I 進入編輯狀態,屏幕左下顯示 –INSERT—
:/abc 在文章中查找abc串 找到後按N到下一次出現的地方 shift-N到上一次出現的地方
:%s#被替換串#替換串#g 將文章中所有被替換串替換爲替換串。#g參數表示如果一行出現多次被替換串都有替換,否則只替換每行第一次出現的
:50 跳轉到文章第50行
shift-g 到文章末尾
gg 到文章開頭
dd 剪切光標所在行
50dd 從光標所在行向後剪切50行
yy 拷貝光標所在行
50yy 拷貝光標所在行之後50行(含所在行)
p 粘貼
以上剪切粘貼使用的剪貼板爲vi自己維護的,與windows的無關,只在vi中生效。即使用yy拷貝的行只能在vi中用p粘貼,無法用ctrl-v粘貼。
w 存盤
q 退出(如果之前對文件有修改且未保存,則無法用q退出,必須用q!退出)
wq 存盤退出
wq! 強行存盤退出(適用於對只讀文件的修改)
- Ln 創建鏈接命令
#ln –s /ITC/search/ /search 創建軟連接,訪問/ITC/search/目錄等同於訪問/search目錄。
- Nslookup和 host命令 查看指定域名的IP
#nslookup www.sohu.com
#host http://www.sohu.com
- Curl
#curl –v http://www.sohu.com/
#curl –v –A “abcde” http://www.sohu.com/ //使用abced作爲agent
- Wget 抓取網頁保存在當前目錄
#wget http://www.sohu.com/
#wget –I inputfile //依次wget inputfile中的url
#wget –user-agent=AGENT http://www.sohu.com/ //使用IE的agent代替wget agent 抓取。
- telnet 網絡訪問
#telnet www.sohu.com 80 訪問www.sohu.com的80端口
- Cut 切割文件中某列
#cut –f1 a.txt >b.txt 將a.txt中第一列(用\t分隔的列)寫入b.txt
#cut –d” “ –f”1,3,5” a.txt >b.txt -d參數表示用雙引號中的字符代替\t作爲域分隔符,-f參數後的引號內可以寫多個列。
- Uniq 顯示文件中重複(或唯一)的行,需要注意要uniq的文件必須先用sort排序
#uniq filename 顯示該文件所有行,但是重複的行只顯示一次。
#uniq –c filename 功能同上,並且顯示每行重複的次數
#uniq –u filename 只顯示文件中唯一的行(不重複的行)
#uniq –d filename 只顯示文件中出現重複的行
#uniq –f1 filename 忽略第一列,只對第二列及其之後的內容進行uniq。
- Sort 文件排序 加-n參數對行使用自然數大小排序(否則按ascii碼排序)
#sort –n a.txt
#sort –n –v –k2 filename1 filename2 將兩個文件混合排序,對第二列進行自然數排序,按從大到小順序顯示
以/做分隔,從第3個域到第3個域的部分進行排序,-u是排重。
sort -t/ -k3,3 -u filename|more
可以從一批url中,按站點,每個站點得到一條。
- Diff 比較兩個文件的不同之處
#diff a.txt b.txt 比較兩個文件不同之處
- Grep 過濾查找
#grep “aaa” a.txt 查找a.txt中含有”aaa”的行並顯示
#grep –v “aaa” a.txt 查找a.txt中不含”aaa”的行並顯示
- Wc 計算數量
#wc a.txt 計算a.txt中的行數,字符數等
#wc –l a.txt 只計算行數
- Tar 壓縮解壓縮命令
#tar cvf archiev.tar dns/ 將dns目錄壓縮爲archiev.tar文件
#tar zxvf archiev.tar.gz 解壓縮archiev.tar.gz文件
37.Kill 殺死進程命令
#kill 11333 殺死進程號爲11333的進程(無權限的進程無法殺掉)進程號可以通過ps命令得到
#kill –9 11333 強行殺死進程號爲11333的進程(無權限的進程無法殺掉)
#killall dnsserver 殺死所有進程名爲dnsserver的進程(無權限的進程無法殺掉)
#killall –9 dnsserver 強行殺死所有進程名爲dnsserver的進程(無權限的進程無法殺掉)
- source
修改用戶的配置文件.bash_profile .bashrc等文件後,如果不想中斷連接重新ssh登錄,就需要使用source命令使剛改的內容生效:
#source .bash_profile
- Ldconfig(只有root能用)
安裝某些軟件後(如ACE BDB)需要修改/etc/ld.so.conf文件,加入程序使用的動態鏈接庫位置信息。修改文件後使用ldconfig命令使修改生效。
#ldconfig –v
- Pstree
查看當前進程啓動情況,子進程數等,並可查看進程啓動的命令行
#pstree -a
- Unix2dos dos2unix
Dos和unix格式文本轉換。將dos的換行(\r\n)和unix的換行(\n)進行轉換。
#unix2dos a.txt
#dos2unix a.txt
- Useradd (adduser) 新增用戶
常用方法:
#useradd abc 新增用戶abc,默認home目錄爲/home/abc/
#adduser abc 同上
#useradd abc –d /ITC/abc/ 新增用戶abc,指定home目錄/ITC/abc/ (沒有的話會自己建立)
- Userdel 刪除用戶
#userdel abc 刪除用戶abc。(用戶創建的目錄和文件並不會刪除)
#userdel –r abc 刪除用戶abc,用戶home目錄下所有文件自動刪除,/etc/passwd group shadow文件中該用戶信息刪除。
- Passwd修改用戶密碼
#passwd username
不輸入username時是修改root密碼,謹慎!
- 計算md5值的命令 md5sum
#md5sum filename
- dmesg查看系統信息
#dmesg
- Rename 對批量文件改名
#rename abc 123 *abc* 將所有文件名含abc的文件,將其中的字串abc改成123
例如: sssabca.com -> sss123a.com
Sss.abc -> sss.123
二.常用性能監控命令
1.查看進程: ps
參數:
-A all processes
-N negate selection
-a all w/ tty except session leaders
-d all except session leaders
-e all processes
-u by effective user ID
T all processes on this terminal
a all w/ tty, including other users
g all, even group leaders!
r only running processes
x processes w/o controlling ttys
m show threads
常用方法: ps -ax 顯示所有進程 ps -ax|grep processname 可以查看該進程的狀態
ps -aux 顯示所有進程和進程啓動用戶 ps -aux|grep user 可以查看該用戶的啓動進程
2.查看端口情況:netstat
參數:
-r, --route display routing table
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all, --listening display all sockets (default: connected)
常用方法: netstat -nap|grep 7777 查看指定端口7777的情況
netstat -nap 5|grep 7777 查看指定端口7777的情況,每5秒自動刷新
[@65.159 monitor_log]# netstat -nap|grep 1073
接收緩衝
發送緩衝
tcp 0 0 0.0.0.0:58001 0.0.0.0:* LISTEN 1073/webcached
tcp 223 0 10.10.65.159:58001 10.10.63.106:55887 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:58001 10.10.63.106:55886 ESTABLISHED 1073/webcached
tcp 9120 0 10.10.65.159:46514 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46512 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46513 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46511 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 210 10.10.65.159:11459 10.10.97.22:19018 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:11458 10.10.97.22:19018 ESTABLISHED 1073/webcached
webcached進程監聽58001端口,同時去連接query99.2:38598 連接summary97.22:19018
63.106機器有1個壓力程序,開了2個連接,向58001發送請求。
tcp 223 0 10.10.65.159:58001 10.10.63.106:55887 ESTABLISHED 1073/webcached
這一行表示,本機58001端口的tcp接收緩衝區有223字節的數據,說明cache處理不夠及時,有待處理的請求。
tcp 9120 0 10.10.65.159:46514 10.10.99.2:38598 ESTABLISHED 1073/webcached
這一行表示,46514端口(cache用該端口向query發請求和收返回)的tcp接收緩衝區有9120字節的數據,說明cache沒有及時將query返回的數據從緩衝區裏拿出來。
tcp 0 210 10.10.65.159:11459 10.10.97.22:19018 ESTABLISHED 1073/webcached
這一行表示,11459端口(cache用該端口向summary發請求和收返回)的tcp發送緩衝區有210字節的數據,說明summary機器的接收緩衝區已經滿了,cache的請求已經發不過去,都堆積在自己的發送緩衝區了。
3.查看進程佔用系統資源:top
執行top後,"h"進入幫助。
Shift-m 用內存佔用大小排序
4.查看系統資源狀況:vmstat
常用方法:vmstat delay count delay=延遲 count=次數
vmstat 5 100 每5秒打印一次結果,共100次(可以省略次數,一直打印)
5.查看網卡帶寬資源佔用情況:sar iptraf
常用方法:
sar -n DEV 1 100 每隔1秒刷新一次結果,打印100次
結果說明:
時間 設備 接收包/s 發送包/s 接收字節/s 發送字節/s
13時56分49? IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
13時56分50? lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13時56分50? eth0 1.00 1.00 64.00 446.00 0.00 0.00 0.00
13時56分50? eth1 2.00 0.00 128.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 19.81 9.78 29507.01 646.56 0.00 0.00 0.01
Average: eth1 37.11 0.20 2414.21 20.13 0.00 0.00 0.01
可以使用iptraf查看各網卡流量。
Yum install iptraf 可以安裝
6.iostat 磁盤io狀態查看
常用方法:
iostat -x 5 每隔5秒刷新一次
其他命令:
- Ipcs 檢查sharemem.id 檢查共享內存編號
- Ipcrm 刪除共享內存
Ipcrm –M key
- Sysctl 查看並修改系統參數
#sysctl –a 顯示所有系統參數
#sysctl –w 設置參數值
- Od 查看2進制文件
#od –Ax –tx binaryfilename 16進制顯示2進制文件內容
- Watch 定期執行一個命令顯示結果
#watch –n1 tail err.log –n 1
每秒執行一次tail err.log –n 1 命令
三.Shell心得(heart get)
1.打印記錄的某一列。
經常會用到某文件的某一列,用awk命令可以輕鬆實現。
$ awk ‘{print $[列數]}’ [文件名]
2.將文件加入一列相同的值。
$ awk ‘{print “%s[分隔符][值],$1}’ [文件名]
3.將兩個不同文件的兩列合併,用paste命令。
$ paste [文件1] [文件2]
4.匹配:
類似於
$grep [匹配內容] [文件]
用awk實現:
$awk ‘{if ([列數]~/[匹配內容]/) pirnt $0}’ [文件名]
5.替換
類似於vi [文件] :%s#[欲替換]#[替換爲]#g
用awk實現:
$awk ‘gsub (/[匹配內容]/ ,“[替換模式]”) {print $0} ‘ [文件名]
這樣就可以不vi 一個文件,實現替換,在寫shell時十分有用。
也可以替換分隔符,但是要注意轉義:
如文件以“|”爲分隔符,我們想替換成TAB。則:
$awk ‘gsub /\|/ ,”\t” {print $0}’ [文件名]
6.亂序文件
rev filename|sort|rev >temp 將file每行反向輸出,再排序,再反向回來。實際就是按每行最後一個字母排序。但是不能對雙字節(如漢字)文本做
- Sed
替換
Sed –e ‘s/被替換串/替換串’ file
Sed –e ‘s/^../&ok/’ file #將所有行開頭兩個字符之後插入ok &可以代表被匹配上的串
Sed –e ‘s/$/abc/’ file #在所有行最後加上abc
修改文本文件
i\ 在指定行前插入
a\ 在指定行後插入
d 刪除指定行
sed ‘3i\sss’ tmp 在第3行之前插入sss
sed ‘3,$i\sss’ tmp 在第3行到最後一行所有行之前都插入sss
sed ‘/abc/a\sss’ tmp 在匹配上abc的行後都插入sss
7.split
按行分割文件
split –10000 log xlog 將log文件按每10000行分出一個小文件,小文件前綴xlog,後綴是aa、ab……累加
split –10000 –d log xlog 增加-d參數,文件後綴變成數字
8.Iptables
iptables -A INPUT -s 200.200.200.1 -j DROP 將規則“丟棄所有來自指定IP的包”放入接收鏈表(不加-p 參數,默認將tcp udp icmp 都禁止)。
iptables -D INPUT -s 200.200.200.1 -j DROP 把上述規則從鏈表中取消。
iptables -A OUTPUT -d 200.200.200.1 -j DROP
將本機向指定ip發出的包都drop
iptables --list 顯示所有規則。
9.Date
tail queryServer.tiny.log.wf -n20000 | grep `date "-d 1 second ago" "+%H:%M:%S"` | grep QueryItem –c
date "-d 1 second ago" "+%H:%M:%S" 顯示當前時間前一秒。
date +%s seconds since 1970-01-01 00:00:00 UTC
10.tcpdump
tcpdump -Xx -s 4096 dst port 80 查看發給80端口的tcp包內容
tcpdump udp -Xx -s 4096 dst port 12345 查看發給12345端口的udp包內容
tcpdump -Xx -s 4096 src port 1111 查看從1111端口發出去的tcp包內容
11. 查找一個小文件中的url是否存在大文件中的shell
在文件中的shell:
while read URL
do
grep $URL std.log
done < $1;
不在文件中
while read URL
do
TEMP=`grep $URL std.log`
if [ "$TEMP" = "" ] ; then
echo $URL
fi
done < $1