Shell 常用命令與工具

2018-06-08 17:09 更新

防偽碼:七月七日晴,忽然下起了大雪。

本章節(jié)學習一些在編寫 Shell 時的常用命令或工具,有人說學習好 Shell,首先把 Linux 上各種常

見的命令和工具掌握了,這句話說的沒錯,由于 Shell 本身語言在數(shù)據(jù)結構功能有限,而且 Shell

本身又工作在 Linux 內(nèi)核之上,故此調(diào)用 Linux 上的命令會很方面,所以大多數(shù)情況下我們都是依

靠這些命令來完成腳本中的數(shù)據(jù)處理,通過 Shell 語法結構組織代碼邏輯。不管是學 Linux 好還是

Shell 腳本也好,這些命令都是必須要會的,這些命令多之又多,剛開始一定要先把一些常用的學

會了,以后再用到其他的再學習也不遲,下面是我根據(jù)自身經(jīng)驗總結的一些。

怎么更好的學習命令呢?

當然查看官方幫助文檔了,可以通過 man cmd、cmd --help、help cmd、info cmd 等查看命令的使

用。

11.1 ls

功能:列出目錄內(nèi)容

常用選項:

-a 顯示所有文件,包括隱藏的

-l 長格式列出信息

-i 顯示文件 inode 號

-t 按修改時間排序

-r 按修改時間倒序排序

示例:

按修改時間排序:

# ls -t

按修改時間倒序排序:

# ls -rt

長格式列出:

# ls -l

查看文件 inode:

# ls -i file

11.2  echo

功能:打印一行

常用選項:

-n 不加換行符

-e 解釋轉義符

示例:

解釋換行符:

# echo -e "1\n2\n3"

1

2

3

11.3  printf

功能:格式化打印數(shù)據(jù)。默認打印字符串不換行。

格式:printf format [arguments]

常用選項:

format:

%.ns 輸出字符串,n 是輸出幾個字符

%ni 輸出整數(shù),n 是輸出幾個數(shù)字

%m.nf 輸出浮點數(shù),m 是輸出的整數(shù)位數(shù),n 是輸出的小數(shù)位數(shù)

%x 不帶正負號的十六進制值,使用 a 至 f 表示 10 至 15

%X 不帶正負號的十六進制,使用 A 至 F 表示 10 至 15

%% 輸出單個%

一些常用的空白符:

\n 換行

\r 回車

\t 水平制表符

對齊方式:

%-5s 對參數(shù)每個字段左對齊,寬度為 5

%-4.2f 左對齊,寬度為 4,保留兩位小數(shù)

不加橫線"-"表示右對齊。

示例:

輸出一個字符:

# printf "%.1s" abc

a

保留一個小數(shù)點:

# 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

功能:連接文件和標準輸出打印

常用選項:

-A 查看所有內(nèi)容

-b 顯示非空行行號

-n 顯示所有行行號

-T 顯示 tab,用^I 表示

-E 顯示以$結尾

示例:

連接兩個文件:

# cat a b

# cat << EOF

> 123

> abc

> EOF

123

abc

將 eof 標準輸入作為 cat 標準輸出再寫到 a.txt:

# cat > a.txt << eof

> 123

> abc

> eof

11.5  tac

功能:連接文件和倒序打印文件

常用選項:

示例:

倒序打印每一行:

# tac a.txt

11.6 rev

功能:反向打印文件的每一行

常用選項:

示例:

# echo "123" |rev

321

11.7  wc

功能:統(tǒng)計文件行數(shù)、字節(jié)、字符數(shù)

常用選項:

-c 打印文件字節(jié)數(shù)

-m 打印文件字符數(shù)

-l 打印多少行

示例:

統(tǒng)計文件多少行:

wc -l a.txt

11.8  cp

功能:復制文件或目錄

常用選項:

-a 歸檔

-b 目標文件存在創(chuàng)建備份,備份文件是文件名跟~

-f 強制復制文件或目錄

-r 遞歸復制目錄

-p 保留原有文件或目錄屬性

-i 覆蓋文件之前先詢問用戶

-u 當源文件比目的文件修改時間新時才復制

-v 顯示復制信息

示例:

復制目錄:

# cp -rf test /opt

11.9  mkdir

功能:創(chuàng)建目錄

常用選項:

-p 遞歸創(chuàng)建目錄

-v 顯示創(chuàng)建過程

示例:

創(chuàng)建多級目錄:

# mkdir /opt/test/abc

創(chuàng)建多個目錄:

# mkdir {install,tmp}

創(chuàng)建連續(xù)目錄:

# mkdir {a..c}

11.10  mv

功能:移動文件或重命名

常用選項:

-b 目標文件存在創(chuàng)建備份,備份文件是文件名跟~

-u 當源文件比目的文件修改時間新時才移動

-v 顯示移動信息

示例:

移動文件:

# mv a.txt /opt

重命名文件:

# mv a.txt b.txt

1 1 1.11 rename

功能:重命名文件,支持通配符

常用選項:

示例:批量命名文件

將 foo1-foo9 替換為 foo01-foo09:

# rename foo foo0 foo?

將以.htm 后綴的文件替換為.html:

# rename .htm .html *.htm

11.12  dirname

功能:去除路徑的最后一個名字

常用選項:

示例:

# dirname /usr/bin/

/usr

# dirname dir1/str

dir1

dir2

# dirname stdio.h

.

11.13  basename

功能:打印路徑的最后一個名字

常用選項:

-a 支持多個參數(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

功能:估算文件磁盤空間使用

常用選項:

-b 單位 bytes 顯示

-c 產(chǎn)生一個總大小

-h 易讀格式顯示(K,M,G)

-k 單位 KB 顯示

-m 單位 MB 顯示

-s 只顯示總大小

--max-depth=<目錄層數(shù)>,超過層數(shù)的目錄忽略

--exclude=file 排除文件或目錄

--time 顯示大小和創(chuàng)建時間

示例:

查看目錄大?。?/span>

# du -sh /opt

排除目錄某個文件:

# du -sh --exclude=test /opt

11.15  cut

功能:選取文件的每一行數(shù)據(jù)

常用選項:

-b 選中第幾個字符、

-c 選中多少個字符

-d 指定分隔符,默認是空格

-f 指定顯示選中字段

示例:

打印 b 字符:

# echo "abc" |cut -b "2"

b

截取 abc 字符:

# echo "abcdef" |cut -c 1-3

abc

已冒號分隔,顯示第二個字段:

# echo "a:b:c" |cut -d: -f2

b

11 .16  tr

功能:替換或刪除字符

格式:Usage: tr [OPTION]... SET1 [SET2]

常用選項:

-c 替換 SET1 沒有 SET2 的字符

-d 刪除 SET1 中字符

-s 壓縮 SET1 中重復的字符

-t 將 SET1 用 SET2 轉換,默認

示例:

替換 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)

常用選項:

-Z 顯示 selinux 安全上下文

-f 顯示文件系統(tǒng)狀態(tài)

-c 指定格式輸出內(nèi)容

-t 以簡潔的形式打印

示例:

顯示文件信息:

# stat file

只顯示文件修改時間:

# stat -c %y file

11.18  seq

功能:打印序列化數(shù)字

常用選項:

-f 使用 printf 樣式格式

-s 指定分隔符,默認換行符\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 是默認數(shù)字位數(shù),02 是數(shù)字不足 2 位時用 0 填充。

str01

str02

str03

11.19  shuf

功能:生成隨機序列

常用選項:

-i 輸出數(shù)字范圍

-o 結果寫入文件

示例:

輸出范圍隨機數(shù):

# seq 5 |shuf

2

1

5

4

3

# shuf -i 1-5

8

10

7

9

6

5

11.20 sort

功能:排序文本

常用選項:

-f 忽略大小寫

-g 一般數(shù)字排序

-M 根據(jù)月份比較排序,比如 JAN、DEC

-h 易讀的大小單位排序,比如 2K、1G

-n 數(shù)字比較排序

-r 倒序排序

-k n,m 根據(jù)關鍵字排序,從第 n 字段開始,m 字段結束

-o 將結果寫入文件

-t 指定分隔符

-u 去重重復行

默認是對整列排序。

示例:

隨機數(shù)字排序:

# seq 5 |shuf |sort

隨機字母排序:

# printf "%c\n" {a..f} |shuf |sort

倒序排序:

# seq 5 |shuf |sort -r

分隔后的字段排序:

# cat /etc/passwd |sort -t : -k 3 -n

去重重復行:

# echo -e "1\n1\n2\n3\n3" |sort -u

大小單位排序:

# du -h |sort -k 1 -h -r

分隔后第一個字段的第二個字符排序:

# 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 文件的第二列正序排序,再次基礎再對第三列倒序排序(多列排序):

# sort -k 2,2 -n -k 3,3 -nr file

zhaoliu 9 70

lisi 8 80

wangwu 7 90

zhangsan 6 100

對兩個文件同時排序:

# sort file1 file2

11.21  uniq

功能:去除重復行

常用選項:

-c 打印出現(xiàn)的次數(shù),只能統(tǒng)計相鄰的

-d 只打印重復行

-u 只打印不重復行

-D 只打印重復行,并且把所有重復行打印出來

-f n 忽略第 n 個字段

-i 忽略大小寫

-s n 忽略前 N 個字符

-w 比較不超過前 N 個字符

示例:

測試文本如下:

# cat file

abc

cde

xyz

cde

xyz

abd

去重復行:

# sort file |uniq

abc

abd

cde

xyz

打印每行重復次數(shù):

# sort file |uniq -c

1 abc

1 abd 

2 cde

2 xyz

打印不重復行:

# sort file |uniq -u

abc

abd

打印重復行:

# sort file |uniq -d

cde

xyz

打印重復行并統(tǒng)計出現(xiàn)次數(shù):

# sort file |uniq -d -c

2 cde

2 xyz

根據(jù)前幾個字符去重:

# sort file |uniq -w 2

abc

cde

xyz

11.22  tee

功能:從標準輸入讀取寫到標準輸出和文件

常用選項:

-a 追加到文件

示例:

打印并追加到文件:

# echo 123 |tee -a a.log

11.23 join

功能:連接兩個文件

常用選項:

-a <1 或 2> 除顯示原來輸出的內(nèi)容外,還顯示指定文件中沒有相同的欄位,默認不顯示

-i 忽略大小寫

-o 按照指定文件欄位顯示

-t 使用字符作為輸入和輸出字段分隔符

-1 連接文件 1 的指定欄位

-2 連接文件 2 的指定欄位

示例:

將兩個文件相同字段合并一行,其余不輸出:

# join file1 file2

打印 file1 第一個列,第 file2 第二列:

# join -o 1.1 2.2 file1 file2

同時打印 file1 沒有的相同字段:

# join -a1 file1 file2

11.24  paste

功能:合并文件

常用選項:

-d 指定分隔符,默認是 tab 鍵

-s 將文件內(nèi)容平行,tab 鍵分隔

示例:

兩個文件合并,以 tab 鍵分隔:

# paste a.txt b.txt

兩個文件合并,+號分隔:

# paste a.txt b.txt -s -d "+"

文件內(nèi)容平行顯示,tab 鍵分隔:

# paste -s a.txt

11.25  head

功能:輸出文件的前幾行

常用選項:

-c 打印前多少 K、bytes

-n 打印前多少行

示例:

打印文件前 50 行:

# head -n 50 file

11.26 tail

功能:輸出文件的后幾行

常用選項:

-c 打印前多少 K、bytes

-f 實時讀文件,隨著文件輸出附加輸出

-n 輸出最后幾行

--pid 與-f 一起使用,表示 pid 死掉后結束

-s 與-f 一起使用,表示休眠多少秒輸出

示例:

打印文件后 50 行:

# tail -n 50 file

實時輸出新增行:

# tail –f file

11.27  find

功能:搜索文件目錄層次結構

格式:find path -option actions

常用選項:

-name 文件名,支持(‘*’, ‘?’, and ‘[]’)

-type 文件類型,d 目錄,f 常規(guī)文件等

-perm 符合權限的文件,比如 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 文件名匹配正則表達式模式

-inum 通過 inode 編號查找文件

動作:

-detele 刪除文件

-exec command {} \; 執(zhí)行命令,花括號代表當前文件

-ls 列出當前文件,ls -dils 格式

-print 完整的文件名并添加一個回車換行符

-print0 打印完整的文件名并不添加一個回車換行符

-printf format 打印格式

示例:

查找文件名:

# find / -name "*http*"

查找文件名并且文件類型:

# find /tmp -name core -type f -print

查找文件名并且文件類型刪除:

# find /tmp -depth -name core -type f -delete

查找當前目錄常規(guī)文件并查看文件類型:

# find . -type f -exec file '{}' \;

查找文件權限是 664:

# find . -perm 664

查找大于 1024k 的文件:

# find . -size -1024k

查找 3 天內(nèi)修改的文件:

# find /bin -ctime -3

排除多個類型的文件:

# find . ! -name "*.sql" ! -name "*.txt"

或條件查找多個類型的文件:

# 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

功能:從標準輸入執(zhí)行命令

常用選項:

-a file 從指定文件讀取數(shù)據(jù)作為標準輸入

-0 處理包含空格的文件名,print0

-d delimiter 分隔符,默認是空格分隔顯示

-i 標準輸入的結果以{}代替

-I 標準輸入的結果以指定的名字代替

-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

列轉行(去除換行符 ):

# cut -d: -f1 < /etc/passwd | sort | xargs echo

行轉列:

# echo "1 2 3 4 5" |xargs -n1

最長兩列顯示:

# echo "1 2 3 4 5" |xargs -n2

創(chuàng)建未來十天時間:

# seq 1 10 |xargs -i date -d "{} days " +%Y-%m-%d

復制多個目錄:

# echo dir1 dir2 |xargs -n1 cp a.txt

清空所有日志:

# find ./ -name "*.log" |xargs -i tee {} # echo ""> {} 這樣不行,>把命令中斷了

rm 在刪除大量的文件時,會提示參數(shù)過長,那么可以使用 xargs 刪除:

# ls |xargs rm –rf

或分配刪除 rm [a-n]* -rf # getconf ARG_MAX 獲取系統(tǒng)最大參數(shù)限制

11.29  nl

功能:打印文件行號

常用選項:

-b <a|t> 指定行號顯示方式,a 表示所有行都打印行號,b 表示空行不顯示行號,默認是 a

-n <ln|rn|rz> 行號顯示方法,ln 左對齊,rn 右對齊,rz 右邊顯示,左邊空白用 0 填充。

-w 行號欄位在左邊占用的寬度

示例:

打印行號,空行不顯示:

# nl a.txt

左對齊打印行號:

# nl -n ln a.txt

行號右移動五個空格:

# nl -w 5 a.txt

11.30 date

功能:打印或設置系統(tǒng)日期和時間

常用選項:

-d string 顯示時間所描述的字符串

-f datefile 讀取文件的每一行

-I 輸出 ISO 8601 格式的日期和時間

-r 顯示文件的最后修改時間

-R 輸出 RFC 2822 格式的日期和時間

-s string 設置時間所描述的字符串

-u 打印或設置 UTC 時間

控制輸出格式:

%n : 下一行

%t : 跳格

%H : 小時(00..23)

%I : 小時(01..12)

%k : 小時(0..23)

%l : 小時(1..12)

%M : 分鐘(00..59)

%p : 顯示本地 AM 或 PM

%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M)

%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數(shù)

%S : 秒(00..61)

%T : 直接顯示時間 (24 小時制)

%X : 相當于 %H:%M:%S

%Z : 顯示時區(qū) %a : 星期幾 (Sun..Sat)

%A : 星期幾 (Sunday..Saturday)

%b : 月份 (Jan..Dec)

%B : 月份 (January..December)

%c : 直接顯示日期與時間

%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)

示例:

設置系統(tǒng)日期和時間:

# date -s "2016-12-15 00:00:00"

查看當前系統(tǒng)時間戳:

# date +%s

查看當前系統(tǒng)時間:

# date +'%F %T'

把日期和時間轉換成時間戳:

# date -d "2016-12-15 18:00:00" +%s

把時間戳轉成時間:

# date -d '@1481842800' '+%F %T'

時間加減:

顯示前一分鐘:date -d '-1 minute' +'%F %T'

顯示上一周:date -d '-1 week' +'%F %T'

顯示前一天日期:date +%F -d '+1 day'

顯示后一天日期:date +%F -d '-1 day'

顯示上一個月日期:date +%F -d '+1 month'

顯示下一個月日期: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)在時間:date -d '1 day ago' +'%F %T'

秒為單位,顯示一小時前現(xiàn)在時間:date -d '3600 second ago' +'%F %T'

時間比較:

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)絡下載,類似于 HTTP 客戶端

常用選項:

-b, --background 后臺運行

日志記錄和輸入文件:

-o, --output-file=FILE 日志寫到文件

-a, --append-output=FILE 日志追加到文件

-d, --debug 打印 debug 信息,會包含頭信息

-q, --quiet 退出,不輸出

-i, --input-file=FILE 從文件中讀取 URL 下載

下載選項:

-t, --tries=NUMBER 設置鏈接重試次數(shù)

-O, --output-document=FILE 寫入內(nèi)容到文件

-nc, --no-clobber 跳過下載現(xiàn)有的文件

-c, --continue 斷點續(xù)傳

--progress=TYPE 設置進度條(dot 和 bar)

-S, --server-response 打印服務器響應頭信息

--spider 不下載任何內(nèi)容

-T, --timeout=SECONDS 設置相應超時時間(還有--dns-timeout、--connect-timeout 和

--read-timeout)

-w, --wait=SECONDS 兩次重試間隔等待時間

--bind-address=ADDRESS 設置綁定地址

--limit-rate=RATE 限制下載速度

--user=USER 設置 ftp 和 http 用戶名

--password=PASS 設置 ftp 和 http 密碼

目錄:

-P, --directory-prefix=PREFIX 保存文件目錄

HTTP 選項:

--http-user=USER 設置 http 用戶名

--http-password=PASS 設置 http 密碼

--proxy-user=USER 設置代理用戶名

--proxy-password=PASS 設置代理密碼

--referer=URL 設置 Referer

--save-headers 保存頭到文件

--default-page=NAME 改變默認頁面名字,默認 index.html

-U,--user-agent=AGENT 設置客戶端信息

--no-http-keep-alive 禁用 HTTP keep-alive(長連接)

--load-cookies=FILE 從文件加載 cookies

--save-cookies=FILE 保存 cookies 到文件

--post-data=STRING 使用 POST 方法,發(fā)送數(shù)據(jù)

FTP 選項:

--ftp-user=USER 設置 ftp 用戶名

--ftp-password=PASS 設置 ftp 密碼

--no-passive-ftp 禁用被動傳輸模式

遞歸下載:

-r, --recursive 指定遞歸下載

-l, --level=NUMBER 最大遞歸深度

-A, --accept=LIST 逗號分隔下載的擴展列表

-R, --reject=LIST 逗號分隔不被下載的擴展列表

-D, --domains=LIST 逗號分隔被下載域的列表

--exclude-domains=LIST 排除不被下載域的列表

示例:

下載單個文件到當前目錄:

# 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)絡不穩(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 客戶端

常用選項:

-C, --continue-at 斷點續(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 重定向,默認不處理

-l, --list-only 指列出 FTP 目錄名

-H, --header 自定義頭信息發(fā)送給服務器

-I, --head 查看 HTTP 頭信息

-o, --output FILE 輸出到文件

-#, --progress-bar 顯示 bar 進度條

-x, --proxy [PROTOCOL://]HOST[:PORT] 使用代理

-U, --proxy-user USER[:PASSWORD] 代理用戶名和密碼

-e, --referer 指定引用地址 referer

-O, --remote-name 使用遠程服務器上名字寫到本地

--connect-timeout 連接超時時間,單位秒

--retry NUM 連接重試次數(shù)

--retry-delay 兩次重試間隔等待時間

-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 認證頁面:

# 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 下載多個文件:

# curl ftp://ip/img/[1,3,5].jpg

查看 HTTP 頭信息:

# curl -I http://www.baidu.com

11.33  scp

功能:基于 SSH 的安全遠程服務器文件拷貝

常用選項:

-i 指定私鑰文件

-l 限制速率,單位 Kb/s,1024Kb=1Mb

-P 指定遠程主機 SSH 端口

-p 保存修改時間、訪問時間和權限

-r 遞歸拷貝目錄

-o SSH 選項,有以下常用的:

ConnectionAttempts=NUM 連接失敗后重試次數(shù)

ConnectTimeout=SEC 連接超時時間

StrictHostKeyChecking=no 自動拉去主機 key 文件

PasswordAuthentication=no 禁止密碼認證

示例:

本地目錄推送到遠程主機:

# scp -P 22 -r src_dir root@192.168.1.10:/dst_dir

遠程主機目錄拉取到本地:

# scp -P 22 root@192.168.1.10:dst_dir src_dir

同步文件方式一樣,不用加-r 參數(shù)

11.34  rsync

功能:遠程或本地文件同步工具

常用選項:

-v 顯示復制信息

-q 不輸出錯誤信息

-c 跳過基礎效驗,不判斷修改時間和大小

-a 歸檔模式,等效-rlptgoD,保留權限、屬組等

-r 遞歸目錄

-l 拷貝軟連接

-z 壓縮傳輸數(shù)據(jù)

-e 指定遠程 shell,比如 ssh、rsh

--progress 進度條,等同-P

--bwlimit=KB/s 限制速率,0 為沒有限制

--delete 刪除那些 DST 中 SRC 沒有的文件

--exclude=PATTERN 排除匹配的文件或目錄

--exclude-from=FILE 從文件中讀取要排除的文件或目錄

--password-file=FILE 從文件讀取遠程主機密碼

--port=PORT 監(jiān)聽端口

示例:

本地復制目錄:

# rsync -avz abc /opt

本地目錄推送到遠程主機:

# rsync -avz SRC root@192.168.1.120:DST

遠程主機目錄拉取到本地:

# rsync -avz root@192.168.1.10:SRC DST

保持遠程主機目錄與本地一樣:

# rsync -avz --delete SRC root@192.168.1.120:DST

排除某個目錄:

# 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

功能:運行命令,忽略所有掛起信號

常用選項:

示例:

后臺運行程序,終端關閉不影響:

# nohup bash test.sh &>test.log &

11.36  iconv

功能:將文件內(nèi)容字符集轉成其他字符集

常用選項:

-l 列出所有已知的編碼字符集

-f 編碼原始文本

-t 輸出的編碼格式

-o 輸出到文件

-s 不輸出警告

示例:

將文件內(nèi)容轉換 UTF8:

# iconv -f gbk -t utf8 old.txt -o new.txt

將 csv 文件轉換 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)信息

常用選項:

-a 打印所有信息

-s 打印內(nèi)核名稱

-n 打印主機名

-r 打印內(nèi)核發(fā)行版

-v 打印內(nèi)核版本

-m 打印機器硬件名

-p 打印處理器類型

-i 打印硬件平臺

-o 打印操作系統(tǒng)

示例:

打印所有系統(tǒng)信息:

# uname -a

打印主機名:

# uname -a

打印內(nèi)核版本:

# uname -r

打印操作系統(tǒng):

# uname -o

11.38 8 sshpass

功能:非交互 SSH 登錄(需要安裝)

常用選項:

-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

功能:歸檔目錄或文件

常用選項:

-c 創(chuàng)建新歸檔

-d 比較歸檔和文件系統(tǒng)的差異

-r 追加文件到歸檔

-t 存檔的內(nèi)容列表

-x 提取歸檔所有文件

-C 改變解壓目錄

-f 使用歸檔文件或設備歸檔

-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 命令行接口

常用選項:

-i 每行記錄進程 ID

-f 指定輸出日志到文件

-p 設置記錄的優(yōu)先級

-t 添加標簽

示例:

# logger -i -t "my_test" -p local3.notice "test_info"

11.41 netstat

功能:打印網(wǎng)絡連接、路由表、接口統(tǒng)計信息、偽裝連接和多播成員

常用選項:

-r 顯示路由表

-i 顯示接口表

-n 不解析名字

-p 顯示程序名 PID/Program

-l 顯示監(jiān)聽的 socket

-a 顯示所有 socket

-o 顯示計時器

-Z 顯示上下文

-t 只顯示 tcp 連接

-u 只顯示 udp 連接

-s 顯示每個協(xié)議統(tǒng)計信息

示例:

顯示所有監(jiān)聽:

# netstat -anltu

顯示所有 TCP 連接:

# netstat -antp

顯示所有 UDP 連接:

# netstat -anup

顯示路由表:

# netstat -r

11.42  ss

功能:比 netstat 更強大的 socket 查看工具

格式:ss [options] [ FILTER ]

常用選項:

-n 不解析名字

-a 顯示所有 socket

-l 顯示所有監(jiān)聽的 socket

-o 顯示計時器

-e 顯示 socket 詳細信息

-m 顯示 socket 內(nèi)存使用

-p 顯示進程使用的 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 轉儲到文件

-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

搜索所有本地進程連接到 X Server:

# ss -x src /tmp/.X11-unix/*

11.43  lsof

功能:列出打開的文件

常用選項:

-i [i] 監(jiān)聽的網(wǎng)絡地址,如果沒有指定,默認列出所有。[i] 來自

[46][protocol][@hostname|hostaddr][:service|port]

-U 列出 Unix 域 socket 文件

-p 指定 PID

-u 指定用戶名或 UID 所有打開的文件

+D 遞歸搜索

示例:

列出所有打開的文件:

# lsof

查看哪個進程占用文件:

# lsof /etc/passwd

列出所有打開的監(jiān)聽地址和 unix 域 socket 文件:

# lsof -i -U

列出 80 端口監(jiān)聽的進程:

# lsof -i:80

列出端口 1-1024 之間的所有進程:

# lsof -i:1-1024

列出所有 TCP 網(wǎng)絡連接:

# lsof -i tcp

列出所有 UDP 網(wǎng)絡連接:

# lsof -i udp

根據(jù)文件描述符列出打開的文件:

# lsof -d 1

列出某個目錄被打開的文件:

# lsof +D /var/log

列出進程 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

功能:報告當前進程的快照

常用選項:

-a 顯示所有進程

-u 選擇有效的用戶 ID 或名稱

-x 顯示無控制終端的進程

-e 顯示所有進程

-f 全格式

-r 只顯示運行的進程

-T 這個終端的所有進程

-p 指定進程 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)上所有進程標準語法:

# ps -ef

打印系統(tǒng)上所有進程 BSD 語法:

# ps aux

打印進程樹:

# ps axjf 或 ps -ejH

查看進程啟動的線程:

# ps -Lfp PID

查看當前用戶的進程數(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

功能:動態(tài)顯示活動的進程和系統(tǒng)資源利用率

常用選項:

-d 信息刷新時間間隔

-p 只監(jiān)控指定的進程 PID

-i 只顯示正在使用 CPU 的進程

-H 顯示線程

-u 只查看指定用戶名的進程

-b 將輸出編排成易處理格式,適合輸出到文件處理

-n 指定最大循環(huán)刷新數(shù)

交互命令:

f 添加或刪除顯示的指標

c 顯示完整命令

P 按 CPU 使用百分比排序

M 按駐留內(nèi)存大小排序

T 按進程使用 CPU 時間排序

1 顯示每個 CPU 核心使用率

k 終止一個進程

示例:

刷新一次并輸出到文件:

# top -b -n 1 > top.log

只顯示指定進程的線程:

# top -Hp 123

傳入交互命令,按 CPU 排序.

11.46  free

功能:查看內(nèi)存使用率

常用選項:

-b bytes 顯示

-k KB 顯示

-m M 顯示

-g G 顯示

-h 易讀單位顯示

-s 每幾秒重復打印

-c 重復打印幾次退出

示例:

查看物理內(nèi)存:

# free -m

易讀單位顯示:

# free -h

11. 47 df

功能:查看文件系統(tǒ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

功能:報告虛擬內(nèi)存、swap、io、上下文和 CPU 統(tǒng)計信息。

分析了這些文件:

/proc/meminfo

/proc/stat

/proc/*/stat

常用選項:

-a 打印活躍和不活躍的內(nèi)存頁

-d 打印硬盤統(tǒng)計信息

-D 打印硬盤表

-p 打印硬盤分區(qū)統(tǒng)計信息

-s 打印虛擬內(nèi)存表

-m 打印內(nèi)存分配(slab)信息

-t 添加時間戳到輸出

-S 顯示單位,默認 k、KB、m、M,大寫是*1024

示例:

分析系統(tǒng)性能:

# vmstat

每秒刷新一次,統(tǒng)計五次:

# vmstat -t 1 5

11. 49 iostat

功能:報告 CPU 利用率和磁盤 I/O

常用選項:

-c 顯示 CPU 使用率

-d 只顯示磁盤使用率

-k 單位 KB/s 代替 Block/s

-m 單位 MB/s 代替 Block/s

-N 顯示所有映射設備名字

-t 打印報告時間

-x 顯示擴展統(tǒng)計信息

示例:

顯示 CPU 使用率:

# iostat -c 1 3

顯示 I/O 磁盤統(tǒng)計信息:

# iostat -d -x -k 1 3 # 間隔 1 秒,輸出 3 次

11.50 0 ip

功能:查看/操作路由表,設備,路由策略和隧道

格式:ip [ OPTIONS ] OBJECT { COMMAND | help }

常用選項:

-b, -batch <FILENAME> 從文件或標準輸入讀取命令并調(diào)用他們,第一次失敗將終止

-force 批量模式有錯誤不終止,如果有錯誤則狀態(tài)返回非 0

-s, -statistics 輸出更多的統(tǒng)計信息

-l, -loops <COUNT> 指定最大的循環(huán)數(shù)

操作對象(OBEJECT):

address 網(wǎng)絡設備地址

12tp 以太網(wǎng) IP 隧道

link 配置網(wǎng)絡設備

maddress 多播地址

monitor 動態(tài)監(jiān)控網(wǎng)絡連接

mroute 多播路由緩存條目

mrule 角色在多播路由策略數(shù)據(jù)庫

neighbour 管理 ARP 或 NDISC 緩存條目

netns 管理網(wǎng)絡命名空間

ntable 管理 neighbour 緩存操作

route 路由表

rule 角色在路由策略數(shù)據(jù)庫

tpc_metrics/tcpmetrics 管理 TCP 指標

tunnel IP 隧道

tuntap 管理 TUN/TAP 設備

xfrm 管理 IPSec 策略

可通過 ip OBEJECT help 再查看對象的操作方法。

示例:

查看網(wǎng)絡設備地址:

# ip addr

查看網(wǎng)卡統(tǒng)計信息:

# ip -s link

查看單個網(wǎng)卡統(tǒng)計信息:

# ip -s link ls eth0

查看 ARP 緩存表:

# ip neighbour

查看路由表:

# ip route

查看路由策略:

# ip rule

網(wǎng)卡設置/刪除 IP:

# ip addr add/del 192.168.1.201/24 dev eth0

添加/刪除默認路由:

# ip route add/del default via 192.168.1.1

開啟/關閉網(wǎng)卡:

# ip link set dev eth0 up/down

設置最大傳輸單元:

# ip link set dev eth0 mtu 1500

設置 MAC 地址:

# ip link set dev eth0 address 00:0c:29:52:73:8e

11.51 1 nc

功能:TCP 和 UDP 連接和監(jiān)聽

常用選項:

-i interval 指定間隔時間發(fā)送和接受行文本

-l 監(jiān)聽模式,管理傳入的連接

-n 不解析域名

-p 指定本地源端口

-r 指定本地和遠程主機端口

-s 指定本地源 IP 地址

-u 使用 udp 協(xié)議,默認是 tcp

-v 執(zhí)行過程輸出

-w timeout 連接超時時間

-x proxy_address[:port] 請求連接主機使用代理地址和端口

-z 指定掃描監(jiān)聽端口,不發(fā)送任何數(shù)據(jù)

示例:

端口掃描:

# nc -z 192.168.1.10 1-65535

TCP 協(xié)議連接到目標端口:

# 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 代理連接主機:

# 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í)行腳本時間

常用選項:

示例:

查看執(zhí)行 ls 所需的時間:

# time ls

11.53 3 ssh

功能:

常用選項:

示例:

11.54 4 iptables

常見幾種類型防火墻?

包過濾防火墻:包過濾是 IP 層實現(xiàn),包過濾根據(jù)數(shù)據(jù)包的源 IP、目的 IP、協(xié)議類型

(TCP/UDP/ICMP)、源端口、目的端口等包頭信息及數(shù)據(jù)包傳輸方向燈信息來判斷是否允許數(shù)據(jù)包

通過。

應用層防火墻:也稱為應用層代理防火墻,基于應用層協(xié)議的信息流檢測,可以攔截某應用程序的

所有封包,提取包內(nèi)容進行分析。有效防止 SQL 注入或者 XSS(跨站腳本攻擊)之類的惡意代碼。

狀態(tài)檢測防火墻:結合包過濾和應用層防火墻優(yōu)點,基于連接狀態(tài)檢測機制,將屬于同一連接的所

有包作為一個整體的數(shù)據(jù)流看待,構成連接狀態(tài)表(通信信息,應用程序信息等),通過規(guī)則表與

狀態(tài)表共同配合,對表中的各個連接狀態(tài)判斷。

iptables 是 Linux 下的配置防火墻的工具,用于配置 Linux 內(nèi)核集成的 IP 信息包過濾系統(tǒng),使增

刪改查信息包過濾表中的規(guī)則更加簡單。

iptables 分為四表五鏈,表是鏈的容器,鏈是規(guī)則的容器,規(guī)則指定動作。

四表:

filter  用于包過濾

nat  網(wǎng)絡地址轉發(fā)

mangle  對特定數(shù)據(jù)包修改

raw  不做數(shù)據(jù)包鏈接跟蹤

五鏈:

INPUT  本機數(shù)據(jù)包入口

OUTPUT  本機數(shù)據(jù)包出口

FORWARD  經(jīng)過本機轉發(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] 匹配條件 動作

命令  描述

-A,append  追加一條規(guī)則

-I,insert  插入一條規(guī)則,默認鏈頭,后跟編號,指定第幾條

-D,delete  刪除一條規(guī)則

-F,flush  清空規(guī)則

-L,list  列出規(guī)則

-P,policy  設置鏈缺省規(guī)則

-m,module  模塊,比如 state、multiport

匹配條件  描述

-i  入口網(wǎng)卡

-o  出口網(wǎng)卡

-s  源地址

-d  目的地址

-p  協(xié)議類型

--sport  源端口

--dport  目的端口

動作  描述

ACCEPT  允許數(shù)據(jù)包通過

DROP  丟棄數(shù)據(jù)包不做處理

REJECT  拒絕數(shù)據(jù)包,并返回報錯信息

SNAT  一般用于 nat 表的 POSTROUTING 鏈,進行源地址轉換

DNAT  一般用于 nat 表的 PREROUTING 鏈,進行目的地址轉換

MASQUERADE 動態(tài)源地址轉換,動態(tài) IP 時使用

模塊  描述

state  包狀態(tài),有四個:NEW、RELATED、ESTABLISHED 和 INVALID

mac  源 MAC 地址

limit  包速率限制

multiport  多端口,以逗號分隔

iprange  端口范圍,以逗號分隔

示例:常用的規(guī)則配置方法

iptables -F # 清空表規(guī)則,默認 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 # 允許多個 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 訪問本地服務

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j

REJECT # 限制并發(fā)連接數(shù),超過 30 個拒絕

iptables -I INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j

ACCEPT # 限制每個 IP 每秒并發(fā)連接數(shù)最大 3 個

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ǎng)關時,內(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 端口,轉發(fā)到內(nèi)網(wǎng)服務器端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports

8080 # 本地 80 端口轉發(fā)到本地 8080 端口

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j

ACCEPT # 允許已建立及該鏈接相關聯(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 # 設置 INPUT 鏈缺省操作丟棄所有數(shù)據(jù)包,只要不符合規(guī)則的數(shù)據(jù)包都

丟棄。注意要在最后設置,以免把自己關在外面

謝謝觀看,真心的希望能幫到您!

本文出自 “一盞燭光” 博客,謝絕轉載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號