防偽碼:七月七日晴,忽然下起了大雪。
本章節(jié)學(xué)習(xí)一些在編寫 Shell 時(shí)的常用命令或工具,有人說學(xué)習(xí)好 Shell,首先把 Linux 上各種常
見的命令和工具掌握了,這句話說的沒錯(cuò),由于 Shell 本身語言在數(shù)據(jù)結(jié)構(gòu)功能有限,而且 Shell
本身又工作在 Linux 內(nèi)核之上,故此調(diào)用 Linux 上的命令會很方面,所以大多數(shù)情況下我們都是依
靠這些命令來完成腳本中的數(shù)據(jù)處理,通過 Shell 語法結(jié)構(gòu)組織代碼邏輯。不管是學(xué) Linux 好還是
Shell 腳本也好,這些命令都是必須要會的,這些命令多之又多,剛開始一定要先把一些常用的學(xué)
會了,以后再用到其他的再學(xué)習(xí)也不遲,下面是我根據(jù)自身經(jīng)驗(yàn)總結(jié)的一些。
怎么更好的學(xué)習(xí)命令呢?
當(dāng)然查看官方幫助文檔了,可以通過 man cmd、cmd --help、help cmd、info cmd 等查看命令的使
用。
11.1 ls
功能:列出目錄內(nèi)容
常用選項(xiàng):
-a 顯示所有文件,包括隱藏的
-l 長格式列出信息
-i 顯示文件 inode 號
-t 按修改時(shí)間排序
-r 按修改時(shí)間倒序排序
示例:
按修改時(shí)間排序:
# ls -t
按修改時(shí)間倒序排序:
# ls -rt
長格式列出:
# ls -l
查看文件 inode:
# ls -i file
11.2 echo
功能:打印一行
常用選項(xiàng):
-n 不加換行符
-e 解釋轉(zhuǎn)義符
示例:
解釋換行符:
# echo -e "1\n2\n3"
1
2
3
11.3 printf
功能:格式化打印數(shù)據(jù)。默認(rèn)打印字符串不換行。
格式:printf format [arguments]
常用選項(xiàng):
format:
%.ns 輸出字符串,n 是輸出幾個(gè)字符
%ni 輸出整數(shù),n 是輸出幾個(gè)數(shù)字
%m.nf 輸出浮點(diǎn)數(shù),m 是輸出的整數(shù)位數(shù),n 是輸出的小數(shù)位數(shù)
%x 不帶正負(fù)號的十六進(jìn)制值,使用 a 至 f 表示 10 至 15
%X 不帶正負(fù)號的十六進(jìn)制,使用 A 至 F 表示 10 至 15
%% 輸出單個(gè)%
一些常用的空白符:
\n 換行
\r 回車
\t 水平制表符
對齊方式:
%-5s 對參數(shù)每個(gè)字段左對齊,寬度為 5
%-4.2f 左對齊,寬度為 4,保留兩位小數(shù)
不加橫線"-"表示右對齊。
示例:
輸出一個(gè)字符:
# printf "%.1s" abc
a
保留一個(gè)小數(shù)點(diǎn):
# printf "%.1f" 1.333
1.3
輸出換行:
# printf "%.1f\n" 1.333
1.3
格式化輸出:
# printf "user: %s\tpass: %d\n" abc 123
user: abc pass: 1
左對齊寬度 10:
# printf "%-10s %-10s %-10s\n" ID Name Number
ID Name Number
右對齊寬度 10:
# printf "%10s %10s %10s\n" ID Name Number
ID Name Number
每段對齊:
# printf "%10s\n" ID Name Number
ID
Name
Number
# printf "%-10s\n" ID Name Number
ID
Name
Number
11.4 cat
功能:連接文件和標(biāo)準(zhǔn)輸出打印
常用選項(xiàng):
-A 查看所有內(nèi)容
-b 顯示非空行行號
-n 顯示所有行行號
-T 顯示 tab,用^I 表示
-E 顯示以$結(jié)尾
示例:
連接兩個(gè)文件:
# cat a b
# cat << EOF
> 123
> abc
> EOF
123
abc
將 eof 標(biāo)準(zhǔn)輸入作為 cat 標(biāo)準(zhǔn)輸出再寫到 a.txt:
# cat > a.txt << eof
> 123
> abc
> eof
11.5 tac
功能:連接文件和倒序打印文件
常用選項(xiàng):
示例:
倒序打印每一行:
# tac a.txt
11.6 rev
功能:反向打印文件的每一行
常用選項(xiàng):
示例:
# echo "123" |rev
321
11.7 wc
功能:統(tǒng)計(jì)文件行數(shù)、字節(jié)、字符數(shù)
常用選項(xiàng):
-c 打印文件字節(jié)數(shù)
-m 打印文件字符數(shù)
-l 打印多少行
示例:
統(tǒng)計(jì)文件多少行:
wc -l a.txt
11.8 cp
功能:復(fù)制文件或目錄
常用選項(xiàng):
-a 歸檔
-b 目標(biāo)文件存在創(chuàng)建備份,備份文件是文件名跟~
-f 強(qiáng)制復(fù)制文件或目錄
-r 遞歸復(fù)制目錄
-p 保留原有文件或目錄屬性
-i 覆蓋文件之前先詢問用戶
-u 當(dāng)源文件比目的文件修改時(shí)間新時(shí)才復(fù)制
-v 顯示復(fù)制信息
示例:
復(fù)制目錄:
# cp -rf test /opt
11.9 mkdir
功能:創(chuàng)建目錄
常用選項(xiàng):
-p 遞歸創(chuàng)建目錄
-v 顯示創(chuàng)建過程
示例:
創(chuàng)建多級目錄:
# mkdir /opt/test/abc
創(chuàng)建多個(gè)目錄:
# mkdir {install,tmp}
創(chuàng)建連續(xù)目錄:
# mkdir {a..c}
11.10 mv
功能:移動(dòng)文件或重命名
常用選項(xiàng):
-b 目標(biāo)文件存在創(chuàng)建備份,備份文件是文件名跟~
-u 當(dāng)源文件比目的文件修改時(shí)間新時(shí)才移動(dòng)
-v 顯示移動(dòng)信息
示例:
移動(dòng)文件:
# mv a.txt /opt
重命名文件:
# mv a.txt b.txt
1 1 1.11 rename
功能:重命名文件,支持通配符
常用選項(xiàng):
示例:批量命名文件
將 foo1-foo9 替換為 foo01-foo09:
# rename foo foo0 foo?
將以.htm 后綴的文件替換為.html:
# rename .htm .html *.htm
11.12 dirname
功能:去除路徑的最后一個(gè)名字
常用選項(xiàng):
示例:
# dirname /usr/bin/
/usr
# dirname dir1/str
dir1
dir2
# dirname stdio.h
.
11.13 basename
功能:打印路徑的最后一個(gè)名字
常用選項(xiàng):
-a 支持多個(gè)參數(shù)
-s 刪除后面的后綴
示例:
# basename /usr/bin/sort
sort
# basename include/stdio.h .h
stdio
# basename -s .h include/stdio.h
stdio
# basename -a any/str1 any/str2
str1
str2
11.14 du
功能:估算文件磁盤空間使用
常用選項(xiàng):
-b 單位 bytes 顯示
-c 產(chǎn)生一個(gè)總大小
-h 易讀格式顯示(K,M,G)
-k 單位 KB 顯示
-m 單位 MB 顯示
-s 只顯示總大小
--max-depth=<目錄層數(shù)>,超過層數(shù)的目錄忽略
--exclude=file 排除文件或目錄
--time 顯示大小和創(chuàng)建時(shí)間
示例:
查看目錄大?。?/span>
# du -sh /opt
排除目錄某個(gè)文件:
# du -sh --exclude=test /opt
11.15 cut
功能:選取文件的每一行數(shù)據(jù)
常用選項(xiàng):
-b 選中第幾個(gè)字符、
-c 選中多少個(gè)字符
-d 指定分隔符,默認(rèn)是空格
-f 指定顯示選中字段
示例:
打印 b 字符:
# echo "abc" |cut -b "2"
b
截取 abc 字符:
# echo "abcdef" |cut -c 1-3
abc
已冒號分隔,顯示第二個(gè)字段:
# echo "a:b:c" |cut -d: -f2
b
11 .16 tr
功能:替換或刪除字符
格式:Usage: tr [OPTION]... SET1 [SET2]
常用選項(xiàng):
-c 替換 SET1 沒有 SET2 的字符
-d 刪除 SET1 中字符
-s 壓縮 SET1 中重復(fù)的字符
-t 將 SET1 用 SET2 轉(zhuǎn)換,默認(rèn)
示例:
替換 SET1 沒有 SET2 的字符:
# echo -n "aaabbbccc" | tr -c c 1
111111ccc
去重字符:
# echo aaacccddd | tr -s '[a-z]'
acd
刪除字符:
# echo aaabbbccc | tr -d bbb
aaaccc
替換字符:
# echo aaabbbccc | tr '[a-z]' '[A-Z]'
AAABBBCCC
刪除換行符:
# echo -e "a\nb\nc" | tr -d '\n'
abc
11.17 stat
功能:顯示文件或文件系統(tǒng)狀態(tài)
常用選項(xiàng):
-Z 顯示 selinux 安全上下文
-f 顯示文件系統(tǒng)狀態(tài)
-c 指定格式輸出內(nèi)容
-t 以簡潔的形式打印
示例:
顯示文件信息:
# stat file
只顯示文件修改時(shí)間:
# stat -c %y file
11.18 seq
功能:打印序列化數(shù)字
常用選項(xiàng):
-f 使用 printf 樣式格式
-s 指定分隔符,默認(rèn)換行符\n
-w 等寬,用 0 填充
示例:
數(shù)字序列:
# seq 3
1
2
3
帶 0 的數(shù)字序列:
# seq -w 03
01
02
03
范圍數(shù)字序列:
# seq 2 5
2
3
4
5
步長序列:
# seq 1 2 5 # 2 是步長
1
3
5
以冒號分隔序列:
# seq -s "+" 5
1+2+3+4+5
等寬并在數(shù)字前面加字符串:
# seq -f "str%02g" 3 # %g 是默認(rèn)數(shù)字位數(shù),02 是數(shù)字不足 2 位時(shí)用 0 填充。
str01
str02
str03
11.19 shuf
功能:生成隨機(jī)序列
常用選項(xiàng):
-i 輸出數(shù)字范圍
-o 結(jié)果寫入文件
示例:
輸出范圍隨機(jī)數(shù):
# seq 5 |shuf
2
1
5
4
3
# shuf -i 1-5
8
10
7
9
6
5
11.20 sort
功能:排序文本
常用選項(xiàng):
-f 忽略大小寫
-g 一般數(shù)字排序
-M 根據(jù)月份比較排序,比如 JAN、DEC
-h 易讀的大小單位排序,比如 2K、1G
-n 數(shù)字比較排序
-r 倒序排序
-k n,m 根據(jù)關(guān)鍵字排序,從第 n 字段開始,m 字段結(jié)束
-o 將結(jié)果寫入文件
-t 指定分隔符
-u 去重重復(fù)行
默認(rèn)是對整列排序。
示例:
隨機(jī)數(shù)字排序:
# seq 5 |shuf |sort
隨機(jī)字母排序:
# printf "%c\n" {a..f} |shuf |sort
倒序排序:
# seq 5 |shuf |sort -r
分隔后的字段排序:
# cat /etc/passwd |sort -t : -k 3 -n
去重重復(fù)行:
# echo -e "1\n1\n2\n3\n3" |sort -u
大小單位排序:
# du -h |sort -k 1 -h -r
分隔后第一個(gè)字段的第二個(gè)字符排序:
# echo -e "fa:1\neb:2\ncc:3" |sort -t : -k 1.2
tab 作為分隔符:
# sort -t $"\t"
file 文件內(nèi)容:
zhangsan 6 100
lisi 8 80
wangwu 7 90
zhaoliu 9 70
對 file 文件的第二列正序排序,再次基礎(chǔ)再對第三列倒序排序(多列排序):
# sort -k 2,2 -n -k 3,3 -nr file
zhaoliu 9 70
lisi 8 80
wangwu 7 90
zhangsan 6 100
對兩個(gè)文件同時(shí)排序:
# sort file1 file2
11.21 uniq
功能:去除重復(fù)行
常用選項(xiàng):
-c 打印出現(xiàn)的次數(shù),只能統(tǒng)計(jì)相鄰的
-d 只打印重復(fù)行
-u 只打印不重復(fù)行
-D 只打印重復(fù)行,并且把所有重復(fù)行打印出來
-f n 忽略第 n 個(gè)字段
-i 忽略大小寫
-s n 忽略前 N 個(gè)字符
-w 比較不超過前 N 個(gè)字符
示例:
測試文本如下:
# cat file
abc
cde
xyz
cde
xyz
abd
去重復(fù)行:
# sort file |uniq
abc
abd
cde
xyz
打印每行重復(fù)次數(shù):
# sort file |uniq -c
1 abc
1 abd
2 cde
2 xyz
打印不重復(fù)行:
# sort file |uniq -u
abc
abd
打印重復(fù)行:
# sort file |uniq -d
cde
xyz
打印重復(fù)行并統(tǒng)計(jì)出現(xiàn)次數(shù):
# sort file |uniq -d -c
2 cde
2 xyz
根據(jù)前幾個(gè)字符去重:
# sort file |uniq -w 2
abc
cde
xyz
11.22 tee
功能:從標(biāo)準(zhǔn)輸入讀取寫到標(biāo)準(zhǔn)輸出和文件
常用選項(xiàng):
-a 追加到文件
示例:
打印并追加到文件:
# echo 123 |tee -a a.log
11.23 join
功能:連接兩個(gè)文件
常用選項(xiàng):
-a <1 或 2> 除顯示原來輸出的內(nèi)容外,還顯示指定文件中沒有相同的欄位,默認(rèn)不顯示
-i 忽略大小寫
-o 按照指定文件欄位顯示
-t 使用字符作為輸入和輸出字段分隔符
-1 連接文件 1 的指定欄位
-2 連接文件 2 的指定欄位
示例:
將兩個(gè)文件相同字段合并一行,其余不輸出:
# join file1 file2
打印 file1 第一個(gè)列,第 file2 第二列:
# join -o 1.1 2.2 file1 file2
同時(shí)打印 file1 沒有的相同字段:
# join -a1 file1 file2
11.24 paste
功能:合并文件
常用選項(xiàng):
-d 指定分隔符,默認(rèn)是 tab 鍵
-s 將文件內(nèi)容平行,tab 鍵分隔
示例:
兩個(gè)文件合并,以 tab 鍵分隔:
# paste a.txt b.txt
兩個(gè)文件合并,+號分隔:
# paste a.txt b.txt -s -d "+"
文件內(nèi)容平行顯示,tab 鍵分隔:
# paste -s a.txt
11.25 head
功能:輸出文件的前幾行
常用選項(xiàng):
-c 打印前多少 K、bytes
-n 打印前多少行
示例:
打印文件前 50 行:
# head -n 50 file
11.26 tail
功能:輸出文件的后幾行
常用選項(xiàng):
-c 打印前多少 K、bytes
-f 實(shí)時(shí)讀文件,隨著文件輸出附加輸出
-n 輸出最后幾行
--pid 與-f 一起使用,表示 pid 死掉后結(jié)束
-s 與-f 一起使用,表示休眠多少秒輸出
示例:
打印文件后 50 行:
# tail -n 50 file
實(shí)時(shí)輸出新增行:
# tail –f file
11.27 find
功能:搜索文件目錄層次結(jié)構(gòu)
格式:find path -option actions
常用選項(xiàng):
-name 文件名,支持(‘*’, ‘?’, and ‘[]’)
-type 文件類型,d 目錄,f 常規(guī)文件等
-perm 符合權(quán)限的文件,比如 755
-atime -/+n 在 n 天以內(nèi)/過去 n 天被訪問過
-ctime -/+n 在 n 天以內(nèi)/過去 n 天被修改過
-amin -/+n 在 n 天以內(nèi)/過去 n 分鐘被訪問過
-cmin -/+n 在 n 天以內(nèi)/過去 n 分鐘被修改過
-size -/+n 文件大小小于/大于,b、k、M、G
-maxdepth levels 目錄層次顯示的最大深度
-regex pattern 文件名匹配正則表達(dá)式模式
-inum 通過 inode 編號查找文件
動(dòng)作:
-detele 刪除文件
-exec command {} \; 執(zhí)行命令,花括號代表當(dāng)前文件
-ls 列出當(dāng)前文件,ls -dils 格式
-print 完整的文件名并添加一個(gè)回車換行符
-print0 打印完整的文件名并不添加一個(gè)回車換行符
-printf format 打印格式
示例:
查找文件名:
# find / -name "*http*"
查找文件名并且文件類型:
# find /tmp -name core -type f -print
查找文件名并且文件類型刪除:
# find /tmp -depth -name core -type f -delete
查找當(dāng)前目錄常規(guī)文件并查看文件類型:
# find . -type f -exec file '{}' \;
查找文件權(quán)限是 664:
# find . -perm 664
查找大于 1024k 的文件:
# find . -size -1024k
查找 3 天內(nèi)修改的文件:
# find /bin -ctime -3
排除多個(gè)類型的文件:
# find . ! -name "*.sql" ! -name "*.txt"
或條件查找多個(gè)類型的文件:
# find . -name '*.sh' -o -name '*.bak'
# find . -regex ".*\.sh|.*\.bak"
# find . -regex ".*\.\(sh\|bak\)"
并且條件查找文件:
# find . -name "*.sql" -a -size +1024k
只顯示第一級目錄:
# find /etc -type d -maxdepth 1
通過 inode 編號刪除文件:
# rm `find . -inum 671915`
# find . -inum 8651577 -exec rm -i {} \;
11.28 xargs
功能:從標(biāo)準(zhǔn)輸入執(zhí)行命令
常用選項(xiàng):
-a file 從指定文件讀取數(shù)據(jù)作為標(biāo)準(zhǔn)輸入
-0 處理包含空格的文件名,print0
-d delimiter 分隔符,默認(rèn)是空格分隔顯示
-i 標(biāo)準(zhǔn)輸入的結(jié)果以{}代替
-I 標(biāo)準(zhǔn)輸入的結(jié)果以指定的名字代替
-t 顯示執(zhí)行命令
-p 交互式提示是否執(zhí)行命令
-n 最大命令行參數(shù)
--show-limits 查看系統(tǒng)命令行長度限制
示例:
刪除/tmp 下名字是 core 的文件:
# find /tmp -name core -type f -print | xargs /bin/rm -f
# find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
列轉(zhuǎn)行(去除換行符 ):
# cut -d: -f1 < /etc/passwd | sort | xargs echo
行轉(zhuǎn)列:
# echo "1 2 3 4 5" |xargs -n1
最長兩列顯示:
# echo "1 2 3 4 5" |xargs -n2
創(chuàng)建未來十天時(shí)間:
# seq 1 10 |xargs -i date -d "{} days " +%Y-%m-%d
復(fù)制多個(gè)目錄:
# echo dir1 dir2 |xargs -n1 cp a.txt
清空所有日志:
# find ./ -name "*.log" |xargs -i tee {} # echo ""> {} 這樣不行,>把命令中斷了
rm 在刪除大量的文件時(shí),會提示參數(shù)過長,那么可以使用 xargs 刪除:
# ls |xargs rm –rf
或分配刪除 rm [a-n]* -rf # getconf ARG_MAX 獲取系統(tǒng)最大參數(shù)限制
11.29 nl
功能:打印文件行號
常用選項(xiàng):
-b <a|t> 指定行號顯示方式,a 表示所有行都打印行號,b 表示空行不顯示行號,默認(rèn)是 a
-n <ln|rn|rz> 行號顯示方法,ln 左對齊,rn 右對齊,rz 右邊顯示,左邊空白用 0 填充。
-w 行號欄位在左邊占用的寬度
示例:
打印行號,空行不顯示:
# nl a.txt
左對齊打印行號:
# nl -n ln a.txt
行號右移動(dòng)五個(gè)空格:
# nl -w 5 a.txt
11.30 date
功能:打印或設(shè)置系統(tǒng)日期和時(shí)間
常用選項(xiàng):
-d string 顯示時(shí)間所描述的字符串
-f datefile 讀取文件的每一行
-I 輸出 ISO 8601 格式的日期和時(shí)間
-r 顯示文件的最后修改時(shí)間
-R 輸出 RFC 2822 格式的日期和時(shí)間
-s string 設(shè)置時(shí)間所描述的字符串
-u 打印或設(shè)置 UTC 時(shí)間
控制輸出格式:
%n : 下一行
%t : 跳格
%H : 小時(shí)(00..23)
%I : 小時(shí)(01..12)
%k : 小時(shí)(0..23)
%l : 小時(shí)(1..12)
%M : 分鐘(00..59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時(shí)間 (12 小時(shí)制,格式為 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數(shù)
%S : 秒(00..61)
%T : 直接顯示時(shí)間 (24 小時(shí)制)
%X : 相當(dāng)于 %H:%M:%S
%Z : 顯示時(shí)區(qū) %a : 星期幾 (Sun..Sat)
%A : 星期幾 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接顯示日期與時(shí)間
%d : 日 (01..31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第幾周 (00..53) (以 Sunday 為一周的第一天的情形)
%w : 一周中的第幾天 (0..6)
%W : 一年中的第幾周 (00..53) (以 Monday 為一周的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最后兩位數(shù)字 (00.99)
%Y : 完整年份 (0000..9999)
示例:
設(shè)置系統(tǒng)日期和時(shí)間:
# date -s "2016-12-15 00:00:00"
查看當(dāng)前系統(tǒng)時(shí)間戳:
# date +%s
查看當(dāng)前系統(tǒng)時(shí)間:
# date +'%F %T'
把日期和時(shí)間轉(zhuǎn)換成時(shí)間戳:
# date -d "2016-12-15 18:00:00" +%s
把時(shí)間戳轉(zhuǎn)成時(shí)間:
# date -d '@1481842800' '+%F %T'
時(shí)間加減:
顯示前一分鐘:date -d '-1 minute' +'%F %T'
顯示上一周:date -d '-1 week' +'%F %T'
顯示前一天日期:date +%F -d '+1 day'
顯示后一天日期:date +%F -d '-1 day'
顯示上一個(gè)月日期:date +%F -d '+1 month'
顯示下一個(gè)月日期:date +%F -d '-1 month'
顯示上一年日期:date +%F -d '+1 year'
顯示下一年日期:date +%F -d '-1 year'
或
顯示前一天日期:date -d yesterday +%F
顯示后一天日期:date -d tomorrow +%F
天為單位,顯示前一天現(xiàn)在時(shí)間:date -d '1 day ago' +'%F %T'
秒為單位,顯示一小時(shí)前現(xiàn)在時(shí)間:date -d '3600 second ago' +'%F %T'
時(shí)間比較:
NOW_DATE=$(date +'%F %T')
AGO_DATE=$(date -d "2016-12-15 18:00:00" +%s)
[ $NOW_DATE -gt $AGO_DATE ] && echo yes || echo no
11.31 wget
功能:非交互式網(wǎng)絡(luò)下載,類似于 HTTP 客戶端
常用選項(xiàng):
-b, --background 后臺運(yùn)行
日志記錄和輸入文件:
-o, --output-file=FILE 日志寫到文件
-a, --append-output=FILE 日志追加到文件
-d, --debug 打印 debug 信息,會包含頭信息
-q, --quiet 退出,不輸出
-i, --input-file=FILE 從文件中讀取 URL 下載
下載選項(xiàng):
-t, --tries=NUMBER 設(shè)置鏈接重試次數(shù)
-O, --output-document=FILE 寫入內(nèi)容到文件
-nc, --no-clobber 跳過下載現(xiàn)有的文件
-c, --continue 斷點(diǎn)續(xù)傳
--progress=TYPE 設(shè)置進(jìn)度條(dot 和 bar)
-S, --server-response 打印服務(wù)器響應(yīng)頭信息
--spider 不下載任何內(nèi)容
-T, --timeout=SECONDS 設(shè)置相應(yīng)超時(shí)時(shí)間(還有--dns-timeout、--connect-timeout 和
--read-timeout)
-w, --wait=SECONDS 兩次重試間隔等待時(shí)間
--bind-address=ADDRESS 設(shè)置綁定地址
--limit-rate=RATE 限制下載速度
--user=USER 設(shè)置 ftp 和 http 用戶名
--password=PASS 設(shè)置 ftp 和 http 密碼
目錄:
-P, --directory-prefix=PREFIX 保存文件目錄
HTTP 選項(xiàng):
--http-user=USER 設(shè)置 http 用戶名
--http-password=PASS 設(shè)置 http 密碼
--proxy-user=USER 設(shè)置代理用戶名
--proxy-password=PASS 設(shè)置代理密碼
--referer=URL 設(shè)置 Referer
--save-headers 保存頭到文件
--default-page=NAME 改變默認(rèn)頁面名字,默認(rèn) index.html
-U,--user-agent=AGENT 設(shè)置客戶端信息
--no-http-keep-alive 禁用 HTTP keep-alive(長連接)
--load-cookies=FILE 從文件加載 cookies
--save-cookies=FILE 保存 cookies 到文件
--post-data=STRING 使用 POST 方法,發(fā)送數(shù)據(jù)
FTP 選項(xiàng):
--ftp-user=USER 設(shè)置 ftp 用戶名
--ftp-password=PASS 設(shè)置 ftp 密碼
--no-passive-ftp 禁用被動(dòng)傳輸模式
遞歸下載:
-r, --recursive 指定遞歸下載
-l, --level=NUMBER 最大遞歸深度
-A, --accept=LIST 逗號分隔下載的擴(kuò)展列表
-R, --reject=LIST 逗號分隔不被下載的擴(kuò)展列表
-D, --domains=LIST 逗號分隔被下載域的列表
--exclude-domains=LIST 排除不被下載域的列表
示例:
下載單個(gè)文件到當(dāng)前目錄:
# wget http://nginx.org/download/nginx-1.11.7.tar.gz
放到后臺下載:
# wget -b http://nginx.org/download/nginx-1.11.7.tar.gz
對于網(wǎng)絡(luò)不穩(wěn)定的用戶使用-c 和--tries 參數(shù),保證下載完成,并下載到指定目錄:
# wget -t 3 -c http://nginx.org/download/nginx-1.11.7.tar.gz -P down
不下載任何內(nèi)容,判斷 URL 是否可以訪問:
# wget --spider http://nginx.org/download/nginx-1.11.7.tar.gz
下載內(nèi)容寫到文件:
# wget http://www.baidu.com/index.html -O index.html
從文件中讀取 URL 下載:
# wget -i url.list
下載 ftp 文件:
# wget --ftp-user=admin --ftp-password=admin ftp://192.168.1.10/ISO/CentOS-6.5-i386-
minimal.iso
偽裝客戶端,指定 user-agent 和 referer 下載:
# wget -U "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/44.0.2403.157 Safari/537.36" --referer "http://nginx.org/en/download.html"
http://nginx.org/download/nginx-1.11.7.tar.gz
查看 HTTP 頭信息:
# wget -S http://nginx.org/download/nginx-1.11.7.tar.gz
# wget --debug http://nginx.org/download/nginx-1.11.7.tar.gz
11.32 curl
功能:發(fā)送數(shù)據(jù)到 URL,類似于 HTTP 客戶端
常用選項(xiàng):
-C, --continue-at 斷點(diǎn)續(xù)傳
-b, --cookie STRING/FILE 從文件中讀取 cookie
-c, --cookie-jar 把 cookie 保存到文件
-d, --data 使用 POST 方式發(fā)送數(shù)據(jù)
--data-urlencode POST 的數(shù)據(jù) URL 編碼
-F, --form 指定 POST 數(shù)據(jù)的表單
-D, --dump-header 保存頭信息到文件
--ftp-pasv 指定 FTP 連接模式 PASV/EPSV
-P, --ftp-port 指定 FTP 端口
-L, --location 遵循 URL 重定向,默認(rèn)不處理
-l, --list-only 指列出 FTP 目錄名
-H, --header 自定義頭信息發(fā)送給服務(wù)器
-I, --head 查看 HTTP 頭信息
-o, --output FILE 輸出到文件
-#, --progress-bar 顯示 bar 進(jìn)度條
-x, --proxy [PROTOCOL://]HOST[:PORT] 使用代理
-U, --proxy-user USER[:PASSWORD] 代理用戶名和密碼
-e, --referer 指定引用地址 referer
-O, --remote-name 使用遠(yuǎn)程服務(wù)器上名字寫到本地
--connect-timeout 連接超時(shí)時(shí)間,單位秒
--retry NUM 連接重試次數(shù)
--retry-delay 兩次重試間隔等待時(shí)間
-s, --silent 靜默模式,不輸出任何內(nèi)容
-Y, --speed-limit 限制下載速率
-u, --user USER[:PASSWORD] 指定 http 和 ftp 用戶名和密碼
-T, --upload-file 上傳文件
-A, --user-agent 指定客戶端信息
示例:
下載頁面:
# curl -o badu.html http://www.baidu.com
不輸出下載信息:
# curl -s -o baidu.html http://www.baidu.com
偽裝客戶端,指定 user-agent 和 referer 下載:
# curl -A "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/44.0.2403.157 Safari/537.36" -e "baike.baidu.com" http://127.0.0.1
模擬用戶登錄,并保存 cookies 到文件:
# curl -c ./cookies.txt -F NAME=user -F PWD=123 http://www.example.com/login.html
使用 cookie 訪問:
# curl -b cookies.txt http://www.baidu.com
訪問 HTTP 認(rèn)證頁面:
# curl -u user:pass http://www.example.com
FTP 上傳文件:
# curl -T filename ftp://user:pass@ip/a.txt
# curl ftp://ip -u user:pass-T filename
FTP 下載文件:
# curl -O ftp://user:pass@ip/a.txt
# curl ftp://ip/filename -u user:pass -o filename
FTP 下載多個(gè)文件:
# curl ftp://ip/img/[1,3,5].jpg
查看 HTTP 頭信息:
# curl -I http://www.baidu.com
11.33 scp
功能:基于 SSH 的安全遠(yuǎn)程服務(wù)器文件拷貝
常用選項(xiàng):
-i 指定私鑰文件
-l 限制速率,單位 Kb/s,1024Kb=1Mb
-P 指定遠(yuǎn)程主機(jī) SSH 端口
-p 保存修改時(shí)間、訪問時(shí)間和權(quán)限
-r 遞歸拷貝目錄
-o SSH 選項(xiàng),有以下常用的:
ConnectionAttempts=NUM 連接失敗后重試次數(shù)
ConnectTimeout=SEC 連接超時(shí)時(shí)間
StrictHostKeyChecking=no 自動(dòng)拉去主機(jī) key 文件
PasswordAuthentication=no 禁止密碼認(rèn)證
示例:
本地目錄推送到遠(yuǎn)程主機(jī):
# scp -P 22 -r src_dir root@192.168.1.10:/dst_dir
遠(yuǎn)程主機(jī)目錄拉取到本地:
# scp -P 22 root@192.168.1.10:dst_dir src_dir
同步文件方式一樣,不用加-r 參數(shù)
11.34 rsync
功能:遠(yuǎn)程或本地文件同步工具
常用選項(xiàng):
-v 顯示復(fù)制信息
-q 不輸出錯(cuò)誤信息
-c 跳過基礎(chǔ)效驗(yàn),不判斷修改時(shí)間和大小
-a 歸檔模式,等效-rlptgoD,保留權(quán)限、屬組等
-r 遞歸目錄
-l 拷貝軟連接
-z 壓縮傳輸數(shù)據(jù)
-e 指定遠(yuǎn)程 shell,比如 ssh、rsh
--progress 進(jìn)度條,等同-P
--bwlimit=KB/s 限制速率,0 為沒有限制
--delete 刪除那些 DST 中 SRC 沒有的文件
--exclude=PATTERN 排除匹配的文件或目錄
--exclude-from=FILE 從文件中讀取要排除的文件或目錄
--password-file=FILE 從文件讀取遠(yuǎn)程主機(jī)密碼
--port=PORT 監(jiān)聽端口
示例:
本地復(fù)制目錄:
# rsync -avz abc /opt
本地目錄推送到遠(yuǎn)程主機(jī):
# rsync -avz SRC root@192.168.1.120:DST
遠(yuǎn)程主機(jī)目錄拉取到本地:
# rsync -avz root@192.168.1.10:SRC DST
保持遠(yuǎn)程主機(jī)目錄與本地一樣:
# rsync -avz --delete SRC root@192.168.1.120:DST
排除某個(gè)目錄:
# rsync -avz --exclude=no_dir SRC root@192.168.1.120:DST
指定 SSH 端口:
# rsync -avz /etc/hosts -e "ssh -p22" root@192.168.1.120:/opt
11.35 nohup
功能:運(yùn)行命令,忽略所有掛起信號
常用選項(xiàng):
示例:
后臺運(yùn)行程序,終端關(guān)閉不影響:
# nohup bash test.sh &>test.log &
11.36 iconv
功能:將文件內(nèi)容字符集轉(zhuǎn)成其他字符集
常用選項(xiàng):
-l 列出所有已知的編碼字符集
-f 編碼原始文本
-t 輸出的編碼格式
-o 輸出到文件
-s 不輸出警告
示例:
將文件內(nèi)容轉(zhuǎn)換 UTF8:
# iconv -f gbk -t utf8 old.txt -o new.txt
將 csv 文件轉(zhuǎn)換 GBK:
# iconv -f utf8 -t gbk old.txt -o new.txt
解決郵件亂碼:
# echo $(echo "content" | iconv -f utf8 -t gbk) | mail -s "$(echo "title" | iconv -f
utf8 -t gbk)" dst@163.com
11.37 uname
功能:打印系統(tǒng)信息
常用選項(xiàng):
-a 打印所有信息
-s 打印內(nèi)核名稱
-n 打印主機(jī)名
-r 打印內(nèi)核發(fā)行版
-v 打印內(nèi)核版本
-m 打印機(jī)器硬件名
-p 打印處理器類型
-i 打印硬件平臺
-o 打印操作系統(tǒng)
示例:
打印所有系統(tǒng)信息:
# uname -a
打印主機(jī)名:
# uname -a
打印內(nèi)核版本:
# uname -r
打印操作系統(tǒng):
# uname -o
11.38 8 sshpass
功能:非交互 SSH 登錄(需要安裝)
常用選項(xiàng):
-f 從文件中獲取密碼
-d 用數(shù)字文件描述符獲取密碼
-p 密碼作為參數(shù)
-e 密碼作為環(huán)境變量傳遞,變量名是 SSHPASS
示例:
免交互 SSH 登錄:
# sshpass -p 123456 ssh root@192.168.1.10
免交互傳輸文件:
# sshpass -p 123456 scp a.txt 192.168.1.10:/root
密碼傳入系統(tǒng)變量:
# SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" root@192.168.1.221:/opt
11.39 9 tar
功能:歸檔目錄或文件
常用選項(xiàng):
-c 創(chuàng)建新歸檔
-d 比較歸檔和文件系統(tǒng)的差異
-r 追加文件到歸檔
-t 存檔的內(nèi)容列表
-x 提取歸檔所有文件
-C 改變解壓目錄
-f 使用歸檔文件或設(shè)備歸檔
-j bzip2 壓縮
-z gzip 壓縮
-v 輸出處理過程
示例:
創(chuàng)建歸檔文件來自 foo 和 bar:
# tar -cf archive.tar foo bar
提取歸檔的所有文件:
# tar -xf archive.tar
創(chuàng)建歸檔并 gzip 壓縮:
# tar -zcvf archive.tar.gz log
提取歸檔文件并 gzip 解壓:
# tar -zxvf log.tar.gz
創(chuàng)建歸檔并 bzip2 壓縮:
# tar -jcvf log.tar.bz log
列出所有在 archive.tar 的文件:
# tar -tvf archive.tar
提取歸檔并解壓到指定目錄:
# tar -zxvf log.tar.gz -C /opt
11. 40 logger
功能:系統(tǒng)日志的 shell 命令行接口
常用選項(xiàng):
-i 每行記錄進(jìn)程 ID
-f 指定輸出日志到文件
-p 設(shè)置記錄的優(yōu)先級
-t 添加標(biāo)簽
示例:
# logger -i -t "my_test" -p local3.notice "test_info"
11.41 netstat
功能:打印網(wǎng)絡(luò)連接、路由表、接口統(tǒng)計(jì)信息、偽裝連接和多播成員
常用選項(xiàng):
-r 顯示路由表
-i 顯示接口表
-n 不解析名字
-p 顯示程序名 PID/Program
-l 顯示監(jiān)聽的 socket
-a 顯示所有 socket
-o 顯示計(jì)時(shí)器
-Z 顯示上下文
-t 只顯示 tcp 連接
-u 只顯示 udp 連接
-s 顯示每個(gè)協(xié)議統(tǒng)計(jì)信息
示例:
顯示所有監(jiān)聽:
# netstat -anltu
顯示所有 TCP 連接:
# netstat -antp
顯示所有 UDP 連接:
# netstat -anup
顯示路由表:
# netstat -r
11.42 ss
功能:比 netstat 更強(qiáng)大的 socket 查看工具
格式:ss [options] [ FILTER ]
常用選項(xiàng):
-n 不解析名字
-a 顯示所有 socket
-l 顯示所有監(jiān)聽的 socket
-o 顯示計(jì)時(shí)器
-e 顯示 socket 詳細(xì)信息
-m 顯示 socket 內(nèi)存使用
-p 顯示進(jìn)程使用的 socket
-i 顯示內(nèi)部 TCP 信息
-s 顯示 socket 使用匯總
-4 只顯示 IPV4 的 socket
-0 顯示包 socket
-t 只顯示 TCP socket
-u 只顯示 UDP socket
-d 只顯示 DCCP socket
-w 只顯示 RAW socket
-x 只顯示 Unix 域 socket
-f FAMILY 只顯示 socket 族類型( unix, inet, inet6, link, netlink)
-A 查詢 socket {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D 將原始的 TCP socket 轉(zhuǎn)儲到文件
-F 從文件中讀取過濾信息
過濾:
-o state 顯示 TCP 連接狀態(tài)信息
示例:
顯示所有 TCP 連接:
# ss -t -a
顯示所有 UDP 連接:
# ss -u –a
顯示 socket 使用匯總:
# ss -s
顯示所有建立的連接:
# ss -o state established
顯示所有的 TIME-WAIT 狀態(tài):
# ss -o state TIME-WAIT
搜索所有本地進(jìn)程連接到 X Server:
# ss -x src /tmp/.X11-unix/*
11.43 lsof
功能:列出打開的文件
常用選項(xiàng):
-i [i] 監(jiān)聽的網(wǎng)絡(luò)地址,如果沒有指定,默認(rèn)列出所有。[i] 來自
[46][protocol][@hostname|hostaddr][:service|port]
-U 列出 Unix 域 socket 文件
-p 指定 PID
-u 指定用戶名或 UID 所有打開的文件
+D 遞歸搜索
示例:
列出所有打開的文件:
# lsof
查看哪個(gè)進(jìn)程占用文件:
# lsof /etc/passwd
列出所有打開的監(jiān)聽地址和 unix 域 socket 文件:
# lsof -i -U
列出 80 端口監(jiān)聽的進(jìn)程:
# lsof -i:80
列出端口 1-1024 之間的所有進(jìn)程:
# lsof -i:1-1024
列出所有 TCP 網(wǎng)絡(luò)連接:
# lsof -i tcp
列出所有 UDP 網(wǎng)絡(luò)連接:
# lsof -i udp
根據(jù)文件描述符列出打開的文件:
# lsof -d 1
列出某個(gè)目錄被打開的文件:
# lsof +D /var/log
列出進(jìn)程 ID 打開的文件:
# lsof -p 5373
打開所有登錄用戶名 abc 或 user id 1234,或 PID 123 或 PID 456:
# lsof -p 123,456 -u 123,abc
列出 COMMAND 列中包含字符串 sshd:
# lsof -c sshd
11.44 ps
功能:報(bào)告當(dāng)前進(jìn)程的快照
常用選項(xiàng):
-a 顯示所有進(jìn)程
-u 選擇有效的用戶 ID 或名稱
-x 顯示無控制終端的進(jìn)程
-e 顯示所有進(jìn)程
-f 全格式
-r 只顯示運(yùn)行的進(jìn)程
-T 這個(gè)終端的所有進(jìn)程
-p 指定進(jìn)程 ID
--sort 對某列排序
-m 線程
-L 格式化代碼列表
-o 用戶自定義格式
CODE NORMAL HEADER
%C pcpu %CPU
%G group GROUP
%P ppid PPID
%U user USER
%a args COMMAND
%c comm COMMAND
%g rgroup RGROUP
%n nice NI
%p pid PID
%r pgid PGID
%t etime ELAPSED
%u ruser RUSER
%x time TIME
%y tty TTY
%z vsz VSZ
示例:
打印系統(tǒng)上所有進(jìn)程標(biāo)準(zhǔn)語法:
# ps -ef
打印系統(tǒng)上所有進(jìn)程 BSD 語法:
# ps aux
打印進(jìn)程樹:
# ps axjf 或 ps -ejH
查看進(jìn)程啟動(dòng)的線程:
# ps -Lfp PID
查看當(dāng)前用戶的進(jìn)程數(shù):
# ps uxm 或 ps -U root -u root u
自定義格式顯示并對 CPU 排序:
# ps -eo user,pid,pcpu,pmem,nice,lstart,time,args --sort=-pcpu
或 ps -eo "%U %p %C %n %x %a"
11.45 top
功能:動(dòng)態(tài)顯示活動(dòng)的進(jìn)程和系統(tǒng)資源利用率
常用選項(xiàng):
-d 信息刷新時(shí)間間隔
-p 只監(jiān)控指定的進(jìn)程 PID
-i 只顯示正在使用 CPU 的進(jìn)程
-H 顯示線程
-u 只查看指定用戶名的進(jìn)程
-b 將輸出編排成易處理格式,適合輸出到文件處理
-n 指定最大循環(huán)刷新數(shù)
交互命令:
f 添加或刪除顯示的指標(biāo)
c 顯示完整命令
P 按 CPU 使用百分比排序
M 按駐留內(nèi)存大小排序
T 按進(jìn)程使用 CPU 時(shí)間排序
1 顯示每個(gè) CPU 核心使用率
k 終止一個(gè)進(jìn)程
示例:
刷新一次并輸出到文件:
# top -b -n 1 > top.log
只顯示指定進(jìn)程的線程:
# top -Hp 123
傳入交互命令,按 CPU 排序.
11.46 free
功能:查看內(nèi)存使用率
常用選項(xiàng):
-b bytes 顯示
-k KB 顯示
-m M 顯示
-g G 顯示
-h 易讀單位顯示
-s 每幾秒重復(fù)打印
-c 重復(fù)打印幾次退出
示例:
查看物理內(nèi)存:
# free -m
易讀單位顯示:
# free -h
11. 47 df
功能:查看文件系統(tǒng)的磁盤空間使用情況
常用選項(xiàng):
-a 包含虛擬文件系統(tǒng)
-h 可易讀單位顯示
-i 顯示 block 使用的 inode 信息
-k KB 顯示
-P 使用 POSIX 格式輸出
-t 輸出指定文件系統(tǒng)類型
-T 打印文件系統(tǒng)類型
示例:
查看所有文件系統(tǒng):
# df -ah
輸出指定文件系統(tǒng):
# df -t xfs
11. 48 vmstat
功能:報(bào)告虛擬內(nèi)存、swap、io、上下文和 CPU 統(tǒng)計(jì)信息。
分析了這些文件:
/proc/meminfo
/proc/stat
/proc/*/stat
常用選項(xiàng):
-a 打印活躍和不活躍的內(nèi)存頁
-d 打印硬盤統(tǒng)計(jì)信息
-D 打印硬盤表
-p 打印硬盤分區(qū)統(tǒng)計(jì)信息
-s 打印虛擬內(nèi)存表
-m 打印內(nèi)存分配(slab)信息
-t 添加時(shí)間戳到輸出
-S 顯示單位,默認(rèn) k、KB、m、M,大寫是*1024
示例:
分析系統(tǒng)性能:
# vmstat
每秒刷新一次,統(tǒng)計(jì)五次:
# vmstat -t 1 5
11. 49 iostat
功能:報(bào)告 CPU 利用率和磁盤 I/O
常用選項(xiàng):
-c 顯示 CPU 使用率
-d 只顯示磁盤使用率
-k 單位 KB/s 代替 Block/s
-m 單位 MB/s 代替 Block/s
-N 顯示所有映射設(shè)備名字
-t 打印報(bào)告時(shí)間
-x 顯示擴(kuò)展統(tǒng)計(jì)信息
示例:
顯示 CPU 使用率:
# iostat -c 1 3
顯示 I/O 磁盤統(tǒng)計(jì)信息:
# iostat -d -x -k 1 3 # 間隔 1 秒,輸出 3 次
11.50 0 ip
功能:查看/操作路由表,設(shè)備,路由策略和隧道
格式:ip [ OPTIONS ] OBJECT { COMMAND | help }
常用選項(xiàng):
-b, -batch <FILENAME> 從文件或標(biāo)準(zhǔn)輸入讀取命令并調(diào)用他們,第一次失敗將終止
-force 批量模式有錯(cuò)誤不終止,如果有錯(cuò)誤則狀態(tài)返回非 0
-s, -statistics 輸出更多的統(tǒng)計(jì)信息
-l, -loops <COUNT> 指定最大的循環(huán)數(shù)
操作對象(OBEJECT):
address 網(wǎng)絡(luò)設(shè)備地址
12tp 以太網(wǎng) IP 隧道
link 配置網(wǎng)絡(luò)設(shè)備
maddress 多播地址
monitor 動(dòng)態(tài)監(jiān)控網(wǎng)絡(luò)連接
mroute 多播路由緩存條目
mrule 角色在多播路由策略數(shù)據(jù)庫
neighbour 管理 ARP 或 NDISC 緩存條目
netns 管理網(wǎng)絡(luò)命名空間
ntable 管理 neighbour 緩存操作
route 路由表
rule 角色在路由策略數(shù)據(jù)庫
tpc_metrics/tcpmetrics 管理 TCP 指標(biāo)
tunnel IP 隧道
tuntap 管理 TUN/TAP 設(shè)備
xfrm 管理 IPSec 策略
可通過 ip OBEJECT help 再查看對象的操作方法。
示例:
查看網(wǎng)絡(luò)設(shè)備地址:
# ip addr
查看網(wǎng)卡統(tǒng)計(jì)信息:
# ip -s link
查看單個(gè)網(wǎng)卡統(tǒng)計(jì)信息:
# ip -s link ls eth0
查看 ARP 緩存表:
# ip neighbour
查看路由表:
# ip route
查看路由策略:
# ip rule
網(wǎng)卡設(shè)置/刪除 IP:
# ip addr add/del 192.168.1.201/24 dev eth0
添加/刪除默認(rèn)路由:
# ip route add/del default via 192.168.1.1
開啟/關(guān)閉網(wǎng)卡:
# ip link set dev eth0 up/down
設(shè)置最大傳輸單元:
# ip link set dev eth0 mtu 1500
設(shè)置 MAC 地址:
# ip link set dev eth0 address 00:0c:29:52:73:8e
11.51 1 nc
功能:TCP 和 UDP 連接和監(jiān)聽
常用選項(xiàng):
-i interval 指定間隔時(shí)間發(fā)送和接受行文本
-l 監(jiān)聽模式,管理傳入的連接
-n 不解析域名
-p 指定本地源端口
-r 指定本地和遠(yuǎn)程主機(jī)端口
-s 指定本地源 IP 地址
-u 使用 udp 協(xié)議,默認(rèn)是 tcp
-v 執(zhí)行過程輸出
-w timeout 連接超時(shí)時(shí)間
-x proxy_address[:port] 請求連接主機(jī)使用代理地址和端口
-z 指定掃描監(jiān)聽端口,不發(fā)送任何數(shù)據(jù)
示例:
端口掃描:
# nc -z 192.168.1.10 1-65535
TCP 協(xié)議連接到目標(biāo)端口:
# nc -p 31337 -w 5 192.168.1.10 22
UDP 協(xié)議連接到目的端口:
# nc -u 192.168.1.10 53
指定本地 IP 連接:
# nc -s 192.168.1.9 192.168.1.10 22
探測端口是否開啟:
# nc -z -w 2 192.168.1.10 22
創(chuàng)建監(jiān)聽 Unix 域 Socket:
# nc -lU /var/tmp/ncsocket
通過 HTTP 代理連接主機(jī):
# nc -x10.2.3.4:8080 -Xconnect 10.0.0.10 22
監(jiān)聽端口捕獲輸出到文件:
# nc -l 1234 > filename.out
從文件讀入到指定端口:
# nc host.example.com 1234 < filename.in
收發(fā)信息:
# nc -l 1234
# nc 127.0.0.1 1234
執(zhí)行 memcahced 命令:printf "stats\n" |nc 127.0.0.1 11211
發(fā)送郵件:
# nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM: <user@host.example.com>
RCPT TO: <user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF
# echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
11.52 2 time
功能:執(zhí)行腳本時(shí)間
常用選項(xiàng):
示例:
查看執(zhí)行 ls 所需的時(shí)間:
# time ls
11.53 3 ssh
功能:
常用選項(xiàng):
示例:
11.54 4 iptables
常見幾種類型防火墻?
包過濾防火墻:包過濾是 IP 層實(shí)現(xiàn),包過濾根據(jù)數(shù)據(jù)包的源 IP、目的 IP、協(xié)議類型
(TCP/UDP/ICMP)、源端口、目的端口等包頭信息及數(shù)據(jù)包傳輸方向燈信息來判斷是否允許數(shù)據(jù)包
通過。
應(yīng)用層防火墻:也稱為應(yīng)用層代理防火墻,基于應(yīng)用層協(xié)議的信息流檢測,可以攔截某應(yīng)用程序的
所有封包,提取包內(nèi)容進(jìn)行分析。有效防止 SQL 注入或者 XSS(跨站腳本攻擊)之類的惡意代碼。
狀態(tài)檢測防火墻:結(jié)合包過濾和應(yīng)用層防火墻優(yōu)點(diǎn),基于連接狀態(tài)檢測機(jī)制,將屬于同一連接的所
有包作為一個(gè)整體的數(shù)據(jù)流看待,構(gòu)成連接狀態(tài)表(通信信息,應(yīng)用程序信息等),通過規(guī)則表與
狀態(tài)表共同配合,對表中的各個(gè)連接狀態(tài)判斷。
iptables 是 Linux 下的配置防火墻的工具,用于配置 Linux 內(nèi)核集成的 IP 信息包過濾系統(tǒng),使增
刪改查信息包過濾表中的規(guī)則更加簡單。
iptables 分為四表五鏈,表是鏈的容器,鏈?zhǔn)且?guī)則的容器,規(guī)則指定動(dòng)作。
四表:
filter 用于包過濾
nat 網(wǎng)絡(luò)地址轉(zhuǎn)發(fā)
mangle 對特定數(shù)據(jù)包修改
raw 不做數(shù)據(jù)包鏈接跟蹤
五鏈:
INPUT 本機(jī)數(shù)據(jù)包入口
OUTPUT 本機(jī)數(shù)據(jù)包出口
FORWARD 經(jīng)過本機(jī)轉(zhuǎn)發(fā)的數(shù)據(jù)包
PREROUTING 防火墻之前,修改目的地址(DNAT)
POSTROUTING 防火墻之后,修改源地址(SNAT)
表中的鏈:
表 鏈
filter INPUT、OUTPUT 和 FORWARD
nat PREROUTING、POSTROUTING 和 OUTPUT
mangle PREROUTING、POSTROUTING、INPUT、OUTPUT 和 FORWARD
raw PREROUTING 和 OUTPUT
命令格式:iptables [-t table] 命令 [chain] 匹配條件 動(dòng)作
命令 描述
-A,append 追加一條規(guī)則
-I,insert 插入一條規(guī)則,默認(rèn)鏈頭,后跟編號,指定第幾條
-D,delete 刪除一條規(guī)則
-F,flush 清空規(guī)則
-L,list 列出規(guī)則
-P,policy 設(shè)置鏈缺省規(guī)則
-m,module 模塊,比如 state、multiport
匹配條件 描述
-i 入口網(wǎng)卡
-o 出口網(wǎng)卡
-s 源地址
-d 目的地址
-p 協(xié)議類型
--sport 源端口
--dport 目的端口
動(dòng)作 描述
ACCEPT 允許數(shù)據(jù)包通過
DROP 丟棄數(shù)據(jù)包不做處理
REJECT 拒絕數(shù)據(jù)包,并返回報(bào)錯(cuò)信息
SNAT 一般用于 nat 表的 POSTROUTING 鏈,進(jìn)行源地址轉(zhuǎn)換
DNAT 一般用于 nat 表的 PREROUTING 鏈,進(jìn)行目的地址轉(zhuǎn)換
MASQUERADE 動(dòng)態(tài)源地址轉(zhuǎn)換,動(dòng)態(tài) IP 時(shí)使用
模塊 描述
state 包狀態(tài),有四個(gè):NEW、RELATED、ESTABLISHED 和 INVALID
mac 源 MAC 地址
limit 包速率限制
multiport 多端口,以逗號分隔
iprange 端口范圍,以逗號分隔
示例:常用的規(guī)則配置方法
iptables -F # 清空表規(guī)則,默認(rèn) filter 表
iptables -t nat -F # 清空 nat 表
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許 TCP 的 22 端口訪問
iptables -I INPUT -p udp --dport 53 -j ACCEPT # 允許 UDP 的 53 端口訪問,插入在第一條
iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT # 允許端口范圍訪問
iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT # 刪除這條規(guī)則
iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT # 允許多個(gè) TCP 端
口訪問
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允許 192.168.1.0 段 IP 訪問
iptables -A INPUT -s 192.168.1.10 -j DROP # 對 1.10 數(shù)據(jù)包丟棄
iptables -A INPUT -i eth0 -p icmp -j DROP # eth0 網(wǎng)卡 ICMP 數(shù)據(jù)包丟棄,也就是禁 ping
iptables -A INPUT -i lo -j ACCEPT # 允許來自 lo 接口,如果沒有這條規(guī)則,將不能
通過 127.0.0.1 訪問本地服務(wù)
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j
REJECT # 限制并發(fā)連接數(shù),超過 30 個(gè)拒絕
iptables -I INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j
ACCEPT # 限制每個(gè) IP 每秒并發(fā)連接數(shù)最大 3 個(gè)
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables –t nat -A POSTROUTING -s [內(nèi)網(wǎng) IP 或網(wǎng)段] -j SNAT --to [公網(wǎng)
IP] # iptables 服務(wù)器作為網(wǎng)關(guān)時(shí),內(nèi)網(wǎng)訪問公網(wǎng)
iptables –t nat -A PREROUTING -d [對外 IP] -p tcp --dport [對外端口] -j DNAT --to [內(nèi)
網(wǎng) IP:內(nèi)網(wǎng)端口] # 訪問 iptables 公網(wǎng) IP 端口,轉(zhuǎn)發(fā)到內(nèi)網(wǎng)服務(wù)器端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports
8080 # 本地 80 端口轉(zhuǎn)發(fā)到本地 8080 端口
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT # 允許已建立及該鏈接相關(guān)聯(lián)的數(shù)據(jù)包通過
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o pppo -j
MASQUERADE # ASDL 撥號上網(wǎng)
iptables -P INPUT DROP # 設(shè)置 INPUT 鏈缺省操作丟棄所有數(shù)據(jù)包,只要不符合規(guī)則的數(shù)據(jù)包都
丟棄。注意要在最后設(shè)置,以免把自己關(guān)在外面
謝謝觀看,真心的希望能幫到您!
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: