從用戶的角度來看,它們之間似乎是沒有太大區別的,但事實上,用戶是使用控制台來連接終端來查看運行在計算機上的腳本。
在過去的時候,這三者是獨立的硬件。控制台無非是一個顯示器和一個鍵盤;它沒有計算能力。它通過一個串行接口去連接終端,應用最廣泛的是RS-232接口。
終端就像大型主機的界面。它一般具有計算、網絡通信或進行其他特殊連接,如與大型主機連接的能力。終端也提供了對系統的管理者權限,這也是它為什麼總是被 關在小黑屋的原因。被雇用者使用連接到這些終端的控制台進行工作,但是卻無法獲得大型主機的管理者權限。控制台與終端最終合並為一個單獨的設備,最好的例 子的就是現代linux發行版中仿真的虛擬機終端。
shell就是一個可以讀取用戶輸入,然後在屏幕輸出結果的程序。一個shell可以是基於字符的(像CLI),或者是基於圖形的(像Windows的 GUI)。今天,shell已經不僅僅是用戶與系統的接口,他還肩負著管理進程,窗口,應用程序,命令,以及系統的其他方面。
csaba@csaba-pc ~/Personal/Programming/NetTuts$我的BASH提示符就像上面那個樣子。 第一個詞csaba是我的用戶名,後接@和我的主機名稱,最後是當前的文件夾。~這個字符代表了用戶文件夾,對於我來說是/home/csaba。整行以$結尾,在$後面輸入的東西是我想shell執行的命令。
csaba@csaba-pc ~/Personal/Programming/NetTuts $ echo $PS1 \[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]輸入命令echo $PS1,然後你就看見了我的PS1變量。在BASH中,我們將$到變量名稱前就可以得到這個變量的內容。這個echo命令僅僅會輸出它接到的參數。我們給echo的參數是變量的值,所以它會輸出這個變量的值。
輸出代表著一種格式。\[\033[01;32m\]表示綠色,\u表示當前用戶的用戶名。\h表示主機名,\[\033[01;34m\]表示藍色,\w是當前目錄,\[\033[00m\]是將文字後續輸入的文字置為高亮灰色。通過下面的屏幕截圖你能夠更好地理解結果。
以“\”開頭的特殊字符具有特別的意義。反之“\”標識後面的字符是一個轉義字符(比如顏色代碼)。下面的內容是從BASH官方手冊中引用的,你可以在BASH命令中使用的特殊字符的完整列表:
csaba@csaba-pc ~ $ mkdir ~/tmp/NetTuts csaba@csaba-pc ~ $ cd ~/tmp/NetTuts/ csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./AnotherDir csaba@csaba-pc ~/tmp/NetTuts $ mkdir ./SecondDir csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/aFile csaba@csaba-pc ~/tmp/NetTuts $ touch ./SecondDir/AnotherFile csaba@csaba-pc ~/tmp/NetTuts $ cd ./SecondDir/ csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ pushd ~/tmp/NetTuts ~/tmp/NetTuts ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ popd ~/tmp/NetTuts/SecondDir csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile csaba@csaba-pc ~/tmp/NetTuts/SecondDir $
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ mcedit ./aFile
標准輸入是命令讀取信息的來源。鍵盤是默認標准輸入,標准輸入經常被稱為“stdin”。
標准輸出是命令的輸出會被發送到的地方。默認是當前控制台,標准輸出通常被稱為“stdout”。
標准錯誤是命令輸出錯誤的地方。默認當前控制台,常被稱為"stderr"。
到目前為止,我們可以定義簡單的狀態,來表示一個命令從鍵盤上讀取並輸出它的結果(包括好的和壞的)到屏幕上.
在Unix(或類unix系統)中, 所有的東西都會被抽象成文件,你的鍵盤是文件,你的鼠標是文件,你的屏幕是文件,程序是文件, 文本是文件,等等
文件描述符是一個整形數字用於操作系統引用打開的文件, 所有的unix系統至少包含三個文件描述符.
$ someCommand <但當要你的命令從一個文件中讀取內容你要怎麼做呢?你只要重定向這個文件到它的標准輸入(stdin),如下:
$ someCommand < /your/file.txt如果你要你的命令執行結果輸出到一個文件,你可以使用>操作符。例如我們已經知道如何將一個目錄中的文件列出:
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile csaba@csaba-pc ~/tmp/NetTuts/SecondDir $你可以把使用如下命令將結果發送到一個文件:
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ ls -al > ./ThirdFileThirdFile的內容如下:
total 12 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 0 Feb 24 00:06 ThirdFile比方說,我們要導航到上級目錄,列出它所有的文件,並且使用一個命令將這個列表添加至一個已經存在的文件中。操作符>重定向輸出到一個文件並且覆蓋 該文件;所以我們不能使用它。不過,我們可以使用>>(兩個>)來添加新數據到一個已經存在的文件。
csaba@csaba-pc ~/tmp/NetTuts/SecondDir $ cd .. csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al >> ./SecondDir/ThirdFile於是我們的文件內容就是這樣了:
total 12 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 0 Feb 24 00:06 ThirdFile total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir
csaba@csaba-pc ~/tmp/NetTuts $ ls -al > ./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1> ./SecondDir/ThirdFile在第二個命令中,在重定向之前我們指定標准輸出的來源。請注意1與>之間沒有空格。實際上,如果兩者之間有空格,則1會作為ls命令的一個參數,並且>會自動重定向標准輸出。以下兩個表達功能相同,但和上面的那個功能不同。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 > ./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ ls -al 1 1> ./SecondDir/ThirdFile當然,這些結果會出錯:"ls:不能訪問1:沒有那個文件或目錄” ——除非你真的有一個名字為1的目錄。這會讓我們驚訝下一步我們得到的:重定向錯誤。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder > ./SecondDir/ThirdFile ls: cannot access inexistenFilder: No such file or directory csaba@csaba-pc ~/tmp/NetTuts $ ls -al inexistenFilder 2> ./SecondDir/ThirdFile如你所見,第一個命令在控制台輸出標准輸出並重定向標准輸出到一個文件。第一個命令的結果是一個空文件和屏幕上的一條信息。然而,第二條命令重定向錯誤到我們的文件。其結果是如果在標准輸出上有任何輸出,則它們會顯示在屏幕上,並且錯誤信息會輸入到這個文件。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 16 drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./SecondDir/ total 16 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 . drwxr-xr-x 4 csaba csaba 4096 Feb 19 21:09 .. -rw-r--r-- 1 csaba csaba 12 Feb 19 21:19 aFile -rw-r--r-- 1 csaba csaba 0 Feb 19 21:09 AnotherFile -rw-r--r-- 1 csaba csaba 61 Feb 24 00:23 ThirdFile csaba@csaba-pc ~/tmp/NetTuts $ find . -name ThirdFile ./SecondDir/ThirdFile我打印這兩個ls命令是為了讓你很方便的看明白目錄結構,第三個是find命令。它有著復雜的參數系統,在此我就不一一列舉了,但是以上的例子展示了find命令最常見的使用。第一個參數.是一個我們想去搜索的目錄。
小貼士:參考當前目錄……參考上目錄
find命令的第二個參數是-name,緊接著是文件的名字。在-name參數中我們可以用?和*來擴大我們的搜索范圍:
csaba@csaba-pc ~/tmp/NetTuts $ find . -name ?File ./SecondDir/aFile csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile
?代表一個單個字母,而*指的是任意的字母數量。
接下來,我們將創建一個目錄同時使它被我們的用戶所不能讀。我們還沒有講解到權限,但是不用著急,很快我們將涉及那部分。現在試試下面的例子:
csaba@csaba-pc ~/tmp/NetTuts $ mkdir ThirdDir csaba@csaba-pc ~/tmp/NetTuts $ chmod 000 ThirdDir csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile find: `./ThirdDir': Permission denied
在這個例子中,我希望你對這目錄沒有權限以便我可以展示一下find輸出的內容。它試著進入到所有的目錄中然後搜索所有匹配的文件。當它不能進入一個目 錄,它會輸出一條信息。當你看到一兩條這樣的信息提示是很正常的哈,但是作為一個普通用戶去試著搜索root目錄下面的文件時。你將會獲取數百條錯誤信息 提示而且可能只有一兩條搜索結果。你不想錯過搜索結果;於是乎你想要除去錯誤的信息提示。
csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File 2> /dev/null ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile我們重定向標准錯誤輸出到/dev/null裡面。這樣做再好不過了。無論你向/dev/null扔進去什麼東西,它都可以很簡單的使他消失。通常的做法 是當你不想看見這些錯誤提示信息,你可以把信息發到那裡。假如你更喜歡把結果存入一個文件中的話,你可以把錯誤提示信息傳送到/dev/null,然後可 以用多道重定向:
csaba@csaba-pc ~/tmp/NetTuts $ find . -name *File 2> /dev/null 1>./SecondDir/ThirdFile csaba@csaba-pc ~/tmp/NetTuts $正如你看見的,這個命令在屏幕上面什麼也沒有輸出,因為錯誤信息和標准輸出被傳送到了不同的文件中。但是如果我們想在同一個文件中看到兩種信息的輸出,怎麼辦呢?沒問題,你可以把標准錯誤輸出傳送到標准輸出然後把標准輸出傳送到文件中:
find . -name *File 1>./SecondDir/ThirdFile 2>&1重定向被解釋執行是從右到左的。首先開始執行的是 2>&1,這裡的意思是重定向標准錯誤輸出到標准輸出。然後是1>./SecondDir/ThirdFile,這裡的意思是重定向標准輸出(此時已經有錯誤信息在文件裡面了)到指定的文件。
你可以在 /etc/passwd 文件中找到現有用戶的列表。
組的列表存放在 /etc/group 文件中。一個組擁有一個名字和一個 ID (GID),並擁有另個或數個用戶。每個用戶通常還擁有一個與之對應的組,名稱相同。
擁有者
文件有其擁有者,默認情況,創建那個文件的用戶就是它的擁有者。文件夾僅僅是一些特殊的文件,它們跟普通文件遵從一樣的規則。
csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba csaba 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir d--------- 2 csaba csaba 4096 Feb 24 00:44 ThirdDir<span></span>
在ls -al命令中,每一個文件的擁有者會像“用戶 組”(在這個例子中是“csaba csaba”)輸出。我們可以用下面的方法改變AnotherDir這個文件夾的擁有者:
csaba@csaba-pc ~/tmp/NetTuts $ chown csaba:users ./AnotherDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir d--------- 2 csaba csaba 4096 Feb 24 00:44 ThirdDirchown命令用途是改變擁有者(CHange OWNer)。它有一個簡單的用法:chown 用戶:組 文件路徑。一個用戶只能將“組”這個位置改成一個他所在的組。一個普通用戶不能更改他無權讀取的文件的擁有者。當然,擁有管理員權限的用戶,如 “root”,可以把任意文件的擁有者改成任意用戶和組。
這裡有三種關於文件的權限:
請注意: 如果一個文件夾內的文件可以被列出,這個文件夾本身擁有可執行的權限(x)。
看看前面的例子,每一個文件系統的對象的權限在輸出的開頭(那些rwx字符)。每個標志位可以是”被設置“(那些有字母的位置),或者是“未設置”(用一個”-“標識,代表沒有這個權限)。
這三種權限被包含於三個組, 即每個組都有這三種權限:
這個叫做ThirdDir的文件夾沒有任何標志位,所以它的擁有者也不能讀取它:
chown: changing ownership of ‘./AnotherDir/’: Operation not permitted csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./ThirdDir/* ls: cannot access ./ThirdDir/*: Permission denied但是擁有者擁有改變它的權限的權力:
csaba@csaba-pc ~/tmp/NetTuts $ chmod +rwx ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al ./ThirdDir total 8 drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:44 . drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 .. csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir
chmod命令可以更改一個文件系統對象的權限,,它的用法是:chmod +/-權限 文件路徑。使用+意味著你將給這個文件一個權限,-意味著去掉一個權限。你可以使用任意權限的組合。上個例子,我們給ThirdDir加上讀取,寫入,和可執行的權限。
請注意: 用這個方式添加的讀寫和可執行權限,會作用於擁有者,組,和其他人。但是寫入權限只會作用於當前的用戶。
csaba@csaba-pc ~/tmp/NetTuts $ chmod +r-w ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir dr-xr-xr-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir第二個例子中,我們選擇性的加上讀取的權限,去掉了寫入的權限,沒有改動可執行權限。
但是有時,你需要使用二進制的表示。chmod命令允許你使用10進制表示的二進制數據來更改權限。
chmod命令可以接受一個由0-7數字組成的字符串。每個數字由:用戶,組,其他人,的順序表示了特定的權限。
csaba@csaba-pc ~/tmp/NetTuts $ chmod 765 ./ThirdDir/ csaba@csaba-pc ~/tmp/NetTuts $ ls -al total 20 drwxr-xr-x 5 csaba csaba 4096 Feb 24 00:44 . drwx------ 7 csaba csaba 4096 Feb 19 21:09 .. drwxr-xr-x 2 csaba users 4096 Feb 19 21:09 AnotherDir drwxr-xr-x 2 csaba csaba 4096 Feb 24 00:06 SecondDir drwxrw-r-x 2 csaba csaba 4096 Feb 24 00:44 ThirdDir這個命令設置了讀取,寫入,可執行給擁有者,讀取,寫入,不可執行給組,讀取,可執行,還有不可寫入給其他人。
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile ./SecondDir/aFile ./SecondDir/AnotherFile ./SecondDir/ThirdFile find: `./ThirdDir': Permission denied
csaba@csaba-pc ~/tmp/NetTuts $ grep "AnotherFile" ./SecondDir/ThirdFile ./SecondDir/AnotherFile
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile | grep "Another" ./SecondDir/AnotherFile這實際上運行cat命令, 而不是輸出結果發送到標准輸出, 管道將標准輸出作為標准輸入傳給grep命令.grep命令讀取輸入的數據, 並搜索字條串"Another", 結果和我們先前的例子一樣
The History of UNIX(unix的歷史): 這是一個很有年代的視頻,來自AT&T, 這是一個非常不錯的視頻.如果你只對PIPES感覺趣, 可以快進到4:56
Sed
sed 命令可以讓你在輸出中執行一些正則表達式操作。 sed可以用在標准輸出或者管道命令中,它會輸出結果到標准輸出。
csaba@csaba-pc ~/tmp/NetTuts $ cat ./SecondDir/ThirdFile | grep "Another" | sed -e "s/AnotherFile/MyFile/" ./SecondDir/MyFile這個例子添加了sed命令。有了sed的幫助,我們可以在標准輸出中將“AnotherFile” 替換為“MyFile”,是不是很酷?
sed命令有很多選項,使用-e 參數指定要執行的正則表達式。如果你對正則表達式不熟悉的話,查看下面的手冊: Introducing “Regular Expressions: Up and Running” or Regular Expressions Cheat Sheets.
定義你自己的命令行
假設你需要經常執行下面的連接ssh的命令:
csaba@csaba-pc ~/tmp/NetTuts $ ssh [email protected] -p 8743
你可以通過創建一個自定義的命令saysshcon來縮短這個命令。你可以使用alias來自定義命令。Alias語法類似這樣的形式:alias shorthand='original_command'。
csaba@csaba-pc ~/tmp/NetTuts $ alias sshcon='ssh [email protected] -p 8743'
但是alias是臨時的,當你退出登錄之後就會失效。一個可能的解決辦法是編輯你的.bashrc文件。
.bashrc和.bash.profile文件
.bashrc文件一般位於你的用戶目錄。這個文件可以讓你指定任何你想在新開一個控制台或者登錄一個shell時想要執行的命令。讓我們把上面提到的sshcon加到裡面。
csaba@csaba-pc ~/tmp/NetTuts $ mcedit ~/.bashrc
把你的代碼加到文件末尾,按F2保存文件,然後按ESC兩次關閉文件。按CTRL+D退出shell,然後打開另一個shell,試試新添加的alias。
一些操作系統, 像Solaris, 可能沒有~/.bashrc文件。遇到這種情況,你可以編輯~/.bash_profile來實現這個操作。事實上,任何系統上都有~/.bash_profile。
隱藏文件: 以一個點 (.) 開頭的文件表明這個文件是隱藏文件。
些許網絡命令
讓我們來玩些許網絡命令。
Ping
ping命令是一種用來檢測一個服務器在線並可訪問的一種簡單方法。
csaba@csaba-pc ~/tmp/NetTuts $ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=44.0 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=65.6 ms ^C --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 44.081/54.871/65.661/10.790 ms csaba@csaba-pc ~/tmp/NetTuts $ ping inexistent.server ping: unknown host inexistent.server它的語言簡單:ping IP_address_or_name。如果服務器可訪問,你會看到詳細回復列表。如果不可訪問,會出現一個描述出錯信息的問題。
csaba@csaba-pc ~/tmp/NetTuts $ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 192.168.111.1 (192.168.111.1) 0.239 ms 0.322 ms 0.317 ms 2 * * * 3 95.77.39.65 (95.77.39.65) 45.754 ms 45.887 ms 46.024 ms 4 ro-cj01a-rd4-xe-1-2-1-v1643.upcnet.ro (84.116.216.1) 83.121 ms ro-cj01a-rd4-xe-1-2-0-v1642.upcnet.ro (84.116.225.253) 83.289 ms ro-cj01a-rd4-xe-1-3-0-v1713.upcnet.ro (84.116.217.26) 83.119 ms 5 84.116.217.93 (84.116.217.93) 83.153 ms 84.116.217.85 (84.116.217.85) 77.407 ms 77.350 ms 6 84-116-131-53.aorta.net (84.116.131.53) 77.327 ms 53.442 ms 53.357 ms 7 84.116.132.174 (84.116.132.174) 53.211 ms 48.923 ms 53.186 ms 8 72.14.219.9 (72.14.219.9) 85.040 ms 72.14.214.29 (72.14.214.29) 67.289 ms 72.216 ms 9 209.85.241.110 (209.85.241.110) 48.129 ms 47.389 ms 209.85.240.64 (209.85.240.64) 45.096 ms 10 72.14.239.62 (72.14.239.62) 47.254 ms 72.14.236.68 (72.14.236.68) 51.770 ms 72.14.239.62 (72.14.239.62) 43.242 ms 11 209.85.254.118 (209.85.254.118) 46.137 ms 209.85.254.116 (209.85.254.116) 52.165 ms 209.85.254.114 (209.85.254.114) 102.070 ms 12 * * * 13 google-public-dns-a.google.com (8.8.8.8) 47.471 ms 47.986 ms 43.645 ms
csaba@csaba-pc ~/tmp/NetTuts $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.111.1 0.0.0.0 UG 0 0 0 eno1 loopback localhost 255.0.0.0 UG 0 0 0 lo 192.168.111.0 * 255.255.255.0 U 1 0 0 eno1第一列是網絡連接或通訊的目的地址。“default”指的是沒有找到匹配的項或發送到本地的路由。Loopback是本地虛擬設備,它的IP地址是 127.0.0.1。這個IP地址在所有操作系統中都存在並總是指向本地機器(沒有其它地址像127.0.0.1一樣的功能)
第二列是連接用以到達目的所使用的網關。第一行顯示的是我的默認網關192.168.111.1。第二行是環回到達本地;第三行到達*,不需要網關用來訪問我們自身的網絡。
第三個有趣的是最後一列:”Iface“。它指定用以同特定目的通信的接口。在我們的例子中,環回通信通過環回接口lo。其它的所有連接通過接口eno1。
小貼士:如果你找不到route命令,可以試一下netstat -nr。它會產生相似的輸出。
csaba@csaba-pc ~/tmp/NetTuts $ ifconfig eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.111.10 netmask 255.255.255.0 broadcast 192.168.111.255 inet6 fe80::4e72:b9ff:fef6:c9ff prefixlen 64 scopeid 0x20<link> ether 4c:72:b9:f6:c9:ff txqueuelen 1000 (Ethernet) RX packets 2935016 bytes 696255521 (664.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5586410 bytes 6331639146 (5.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 1 collisions 0 device interrupt 17 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 7396 bytes 599533 (585.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7396 bytes 599533 (585.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0這裡又很多信息。首先,我們擁有兩部分,每個網絡適配器一個。系統中,我的有線網卡名為 eno1。你可以看到如 e1000g0,eth0,en0 或是其它的名字。無線網絡設備則通常(但並非絕對)以“w“開頭。
csaba@csaba-pc ~/tmp/NetTuts $ netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:59017 0.0.0.0:* LISTEN tcp 0 40 192.168.111.10:59017 109.99.97.81:53681 ESTABLISHED tcp 0 0 192.168.111.10:51137 109.99.97.81:55175 TIME_WAIT tcp 0 0 192.168.111.10:34715 173.194.70.109:993 ESTABLISHED tcp 0 0 192.168.111.10:34722 173.194.70.109:993 ESTABLISHED tcp 0 1 192.168.111.10:42876 86.162.58.4:7055 LAST_ACK tcp6 0 0 :::111 :::* LISTEN tcp6 0 0 :::4434 :::* LISTEN tcp6 0 0 :::59017 :::* LISTEN每一行表示一個處於特定狀態的連接,在這個例子中,你可以看到這些連接處於監聽狀態(看第一行,端口22,我的ssh服務端),已連接狀態,等待狀態等等。