putty: [p^ti]: 油灰, 膩子,像 clay 粘土一樣起 連接作用.
非常簡潔,只有500多kB, 不需要安裝,純綠色的,版本還是0.x, Simon Tatham, 甚至沒有主界面,沒有菜單/工具欄什么的, 僅僅只有一個創建連接的對話框, 連接后就只有一個方框了.
通常 沒有如果沒有什么特殊原因, 都是直接使用 這個 putty (油灰/膩子) 來連接的了.
- 更深刻地理解linux的安裝和目錄
編譯安裝有點類似於win安裝到指定的目錄如d:\program files\fooSoft, 而dnf/yum安裝相當於win的默認的安裝到 c:\program files..
編譯安裝的東西幾乎全部集中放到一個同一個地方; 而dnf安裝的東西是分散的 分別的放在各個默認的目錄中
通常安裝一個軟件的時候,按類別放置:
基礎架構的東西放在include, lib中
配置文件放在conf目錄, 少數有的放在etc中
服務的 管理 啟動 停止等放在 sbin中
而對於服務的工具類如調試, utils等放在bin中
軟件包的資源文件通常放在share中, 比如軟件的css,js, images, man, scripts, documents幫助文檔等等...
還有一個很重要的目錄: var, 通常是對於服務器軟件來說的, 就是一些服務器 向外提供的內容, 一些經常會變化的內容, 比如httpd的 /var/www目錄, dns的 /var/named目錄等. 通常各種服務器的經常變換的實體內容都集中放在/var目錄中
還有一些 輔助目錄, 如: log等.
-
dns的配置文件實際上只有兩個, 一個是主配置文件named.conf, 另一個是區域數據文件.
對於區域文件的命名, 通常用 .zone結尾,比如: file "localdomain.zone"; 或者: file "0.0.127.zone" -
named.ca 中的ca是cache的意思, 是緩存的意思, 因為dns系統 支持暫存盤, 但是只有 root根才可以這樣命名.
-
動態dns系統是指 存在 主/從 master:slave dns-server的情況下, 當然得要安裝其他dns支持組件
-
在dns中的IN, 指的是: IN = internet 資源類型.
-
區域zone文件中的 allow-update {none;}; 表示的是是否 允許 客戶機/和當前dns服務器 自行更新自己的dns記錄.
-
dns的運行命令和服務名稱叫named, 但是提供他的包名稱是bind. bind: Barkley internet named daemon. 這是用得最多的 一種dns服務器軟件(也還有其他的dns服務器軟件包).
通常要安裝的包有: bind, bind-utils ([i]或[ai] 是utility的縮寫,一些工具包性質的軟件), 還有 caching-nameserver
notepad中保存文件時光標會亂跳? 這是一個小bug? 解決方法是: 一種是取消"格式中的 自動換行", 第二種是: 打開文件時什么都不要操作, 先ctrl-s保存一下,以后保存時就不會亂跑了
- 為什么要告訴dns服務器主機的resolv.conf中的 域名服務器呢?
就是要有一個最原始的"雞"來生蛋: 因為最開始的dns服務器的緩存是空的: 仔細看這篇文章: http://blog.csdn.net/bpingchang/article/details/38377053
如果您了解 DNS 的查詢模式﹐您會知道 DNS 服務器在查詢非自己管轄的 zone 的時候﹐首先會向 root 查詢下一級的 zone 在哪里﹐然后逐級查詢下去。但問題是﹕當 named 剛啟動的時候﹐在 cache 里面一片空白﹐它怎么知道 root zone 的 servers 在哪里呢﹖這不是一個矛盾嗎﹖所以﹐就必須靠這個檔案告訴 named 關於 root zone 的 servers 有哪些﹖以及在哪里﹖ --- 明白了嗎﹖
- 終於知道這個A類型是什么意思了: A= Address 地址正向解析類型 的意思, 而 反向解析區域的命名是:
zone "0.0.127.in-addr.arpa" IN { ....}
這里的 in-addr.arpa 表示的是 internet - address. 這個是固定的寫法, 直接添加在 反ip地址后面就行了.
要知道in-addr.arpa究竟是什么意思? 看RFC的官方文檔說的:
This address mapping domain is calledIN-ADDR.ARPA Within that domain are subdomains for each network, based on network number. 原來它是一個官方專門取的一個名字, 一個域的名字
named 的日志查看: named -g
查看所有的服務信息: service --status-all
bind-utils 是bind-utilities for querying name servers
為什么named要用rndc來管理?
因為bind在設計的時候, 就是這樣設計的, 主要是為了 dns不中斷解析(通常生產環境中的dns服務器很繁忙的), 可以通過rndc( 讓你得逞) 來在線更新 named. 所以named服務在啟動時, 必須通過 rndc來管理啟動: ** bind的named服務在啟動的時候, 會去通過rndc 和named之間的 TCP的套接字(hmac md5證書)來連接rndc服務器. 如果找不到rndc服務及其配置文件(如: /etc/rndc.conf) ,就會報錯,雖然你看 named服務進程是 running, 但是dns解析會error! **
為什么要用 下載的方式 編譯安裝? 因為雖然用yum也可以安裝 bind, 但是由於它安裝的版本通常來說比較舊, 也可能會有一些 已知的安全 通知問題 所以 用在 官網下載較新版本的 bind包來編譯安裝 會更好? 但是 yum安裝 會自動解決 包的dependencies 問題和 包的更新update問題. 更省心...
- 如果用putty 登錄 無X界面,就要使用 wget 來下載bind-9.10.6:
wget https://www.isc.org/downloads/file/bind-9-10-6/
下載下來的名字就是bind-9-10-6, 要將這個文件改名為: ...tar.gz - will be updated: 是說低版本的包將要被升級, will be an update : 是說升級到哪個版本的包
- 安裝包的時候, 會首先 "處理依賴" Processing Dependency", 然后進行 "Running transaction check" 交易檢查(交易檢查 就是 : 主要是檢查被依賴包的版本是否恰當會不會過低, 需要升級" 如果 transaction check error錯誤,可能是版本沖突的原因, 需要: 先卸載低版本,然后執行: yum update).
關於thinkphp的版本?
在新的版本中, 使用了應用分組.
以前是使用多個 應用程序, 平級的, 比如最常見的兩個獨立的應用程序, 前台和后台, Home和Admin.它們是平級的, 且目錄跟tp是在同一個地方.
而現在分組后, Home和Admin是作為 一個大的/總的應用程序 App下的兩個應用分組,是兩個目錄. 而App跟ThinkPHP是平級的.
tp版本從3.0, 3.1, 3.2. 其中3.1和3.2 的修訂版最后都是3,即最大的版本: 3.1.3, 和3.2.3
3.1.2是 比較低的, 舊的版本, 而3.2.x是一個比較大的 重大的升級, 變化較大, 可以認為是 4.0的版本. 比如: 3.1中的庫核心目錄叫lib, 而在3.2中叫 Library, 3.1中還沒有現成的index.php入口文件, 3.2中就已經給你寫了一個入口文件了. 而且在開發分組和獨立分組上也有了較大的差別.
通常對於 編譯安裝的軟件, 默認的是 放在 /usr/local 目錄中, 但是要注意的是, 放在local中的時候, 被安裝軟件的內容是按類別分別的/分散地 放在 /usr/local/bin, /usr/local/sbin /usr/local/lib, include ,share, etc等中的, 實際上, 還是沒有按軟件名稱進行 集中放置的, 所以 通常應該設置 --prefix=/usr/local/soft_name, 這樣就會在soft_name下分別創建bin, sbin, lib, etc等進行集中放置該軟件的內容了.
雜項
- 在vim的正則表達式中, 要表示行號, 該用什么?
如果是在 normal模式下, 到行首和行尾是使用的 gg, G(shift + g). 而$ 則表示 到當前行的 末尾
但是, 如果是在 command模式下, 即vim的正則搜索/替換/刪除的冒號模式下, 要表示第一行和最后一行則不是用 gg,和 G了 , 而是1, 和 $ (即, 這個$, 在不同的模式下, 表示不同的含義: 在normal下, 它是當前行的末尾, 而在editor模式下, 他表示的是 最后一行)
通常, 在 vim冒號模式/編輯模式下, 正則模式下, 表示行號的方式有這么幾種:
- 用 1, 或者0 表示第一行,
- 用 $ 表示最后一行, 注意不是用 G
- 用點號. 表示 當前行, 這個就不必用set nu去查看行號了.
- 用 + 或 - 表示相對行, 比如
.,.+8
- 最重要的是, 不管是替換還是 刪除命令, 前面的范圍部分, 以及命令部分, 都可以有 空格的, 而且空格的數量可以隨便加, 但是 在正則表達式部分, 則要嚴格控制 空格的寫法. 因為在 非正則匹配部分, 空格只是起分割的作用, 不管多少, 而正則匹配部分則是有嚴格的實際意義的! 不能隨便加
比如, 摘自網頁的:
以下命令將文中所有的字符串idiots替換成managers:
:1,$s/idiots/manages/g
通常我們會在命令中使用%指代整個文件做為替換范圍:
:%s/search/replace/g
以下命令指定只在第5至第15行間進行替換:
:5,15s/dog/cat/g
以下命令指定只在當前行至文件結尾間進行替換:
:.,$s/dog/cat/g
以下命令指定只在后續9行內進行替換:
:.,.+8s/dog/cat/g
**你還可以將特定字符做為替換范圍。比如,將SQL語句從FROM至分號部分中的所有等號(=)替換為不等號(<>):**
:/FROM/,/;/s/=/<>/g
要注意理解正則匹配中, 要替換的內容, 指的是 你正則表達式僅僅匹配到的內容, 如果沒有匹配的部分, 是不會被替換的. 比如: . , $-1 s/^#\ //g 就是將當前行 到倒數第一行的內容
表達式中的正號 負號, 可以看作是加減號, 也可以看作是 相對 行號...比如: $-1, .+8, ...
tail +n的用法
- tail和head本身可以直接帶文件名, 而不只是對 管道過來的數據進行操作
- head 和 tail 都應該帶上 -n選項, 否則后面的數字會被當作是文件名 而報錯
- head和tail的 行數 都可以是 帶正負號 的數字, 其中正負號和 不帶符合的數字相同 時 遵循的規則是: 頭正尾負, 即
head -n 5 foo.txt 等同於 head -n +5 foo.txt
而tail -n 10 foo.txt 等同於 tail -n -10 foo.txt
- 而如果后面的數字 是相反數的時候, 代表的含義略有不同:
head -n -3 foo.txt
表示的是 去掉 末尾的 3行文字 而tail -n +5 foo.txt
表示的是 從開頭的 第5行開始(注意, 要包括這個第5行)直到末尾的行數全部顯示。 - 為什么會這樣呢? 因為head 表示的總是輸出 文件前面的部分(開頭的部分), 而 tail 表示的總是輸出 文件末尾的部分。
killall和 kil的區別
- 第一, killall是殺死這個命令程序的 所有 進程, 而kill指的是 只殺死指定pid 進程號的程序
- 第二, killall因為要殺死所有 同名的進程(或線程),所以,后面跟的是 程序的名稱; 而kill 后面就只能跟進程的id號pid。
但是 他們都需要發送 -9 的停止信號.
dns中的術語?
dns中 soa是什么意思: start of authority: 開始授權, 后面開始寫 區域定義
rndc是什么: "讓你得逞", remote name deamon control, 是名字服務的遠程控制, named 服務, 必須要有rndc服務, 而且要rndc服務起來並由 rndc來管理它. named服務才能正常運行和解析
dig -t NS .
是什么意思 : 去挖掘 . 這個根域名服務器的記錄和信息, 當獲得 控制台輸出后,就可以 重定向到named.ca文件
named.ca是什么文件? 他表示 dns服務器的所有 的 根域名服務器的 信息. 當我們本地的 生產性 域名服務器本地 沒有頂級 域名的信息時, 要把dns查詢請求發送給 根, 然后讓 根dns服務器去返回 其他 下級(子級)域名服務器的信息. 那么這個根域名服務器的信息就放在 named.ca中.
hint表示鏈接? 表示 named.ca這個文件, 只是一個鏈接, 其數據庫並沒有在本地機器上.
最重要的是: 全球的 根 dns服務器共有 13個, 那么 named.ca這個文件 中, 應該包含有 這13個 服務器的 A (address ip) 記錄內容才行, 而不只是 這13個根dns服務器的域名
dhcp的協議為什么叫bootp? shutdown和reboot的區別? tail -f的用法 -F
- 關機的命令有很多, 要了解他們的層次. 總的來說, 最終的實現都是交給
init ?
這個命令, 當? =0 的時候,init 0
就表示 關機,init 6
就表示重啟.
但是, 規范的, 安全的關機命令, 以后都應該使用: shutdown, 因為shutdown 是一個安全的關機命令, 他會做一些處理善后工作, 比如: 會發送 通告/廣播消息給其他 同時登錄到這台機器的終端, 告訴他們機器即將關閉; 會指定 關機時間; 而且會 寫入 緩存(flush cache). 這樣 會避免程序內容和數據的丟失等.
而 halt是直接關機, 不會 做這些善后工作;
reboot是 重啟命令, 關機后 再重啟.
相對應的, 實際上, shutdown都有 對應的選項 : 比如: shutdown -h = halt, shutdown -r = reboot.
所以以后都用 shutown命令就好了. 而且 shutdown 有很多實用的選項:
-h, -r, -c: cancel 表示取消先前發出的shutdown命令
-k: 只是發出警告信息, 並不真的關機.
他的 命令格式是: shutdown [options] TIME [memssage]
shutdown 如果沒有指明 message, 會默認的 報告: for maintenance. maintain的名詞, maintenance: during routine maintenance
**注意: time參數是 必須的, 否則會報錯, 他要知道 什么時候關機? 有三種表示方法: ** 有意義的單詞 NOW; +m 表示多少分鍾后關機, m表示分鍾的數字; hh:mm指定關機的絕對時間.
- bootp分服務器端和客戶端, 服務器端的叫 bootps, 使用的是 67號端口的tcp/udp, 客戶端的叫bootpc 使用 68端口的tcp/udp
[root@localhost foo]# cat /etc/services | grep -nE 'boot'
71:bootps 67/tcp # BOOTP server
72:bootps 67/udp
73:bootpc 68/tcp dhcpc # BOOTP client
74:bootpc 68/udp dhcpc
bootp 是比較老的分配協議, dhcp(注意就是dhcp后面沒有d) 是bootp的升級版. 有兩個優點: bootp需要事先知道客戶端的mac地址, 而dhcp不需要; bootp分配地址后, 通常是靜態的地址, 而dhcp是動態可變化的.
- tail -f 是可以 跟蹤 文件末尾的變化和新增內容 的, 其中 -f是follow的意思, 但是 當 被跟蹤文件 被移動或刪除的情況下, -f可能會停止繼續輸出, 而這時候, 可以用 -F 來一直跟蹤, 他可以重建 被跟蹤文件...
linux的shell 編程中, 凡是 循環語句, 不管是while 還是用for, 其中的循環體, 都是放在 do ... done 之間的
關於 shell中的 雙圓括號的運用 , 看這篇文章講透了: https://www.cnblogs.com/linuxprobe/p/5634208.html , 很好.
雙圓括號, 是對 [, [[, test等的擴展. 可以只 使用雙圓括號代替他們: features:
雙括號中的運算完全支持c語言的所有運算符號,比如 a++, a--, a>1?true: false, 其次, 雙括號中的所有變量引用都不需要加 $
; 可以擴展 四則運算\邏輯運算\結構運算if while for等; 但是要注意的是, 雙括號中的是表達式, 可以是多個表達式, 之間用逗號分割, 但是要獲得 雙括號的值, 比如你要 echo, 你要賦值, 則必須在雙括號前面加上 $
關於單中括號 和 雙中括號的區別: 參考: http://blog.csdn.net/good_habits/article/details/27708745
一個最大的區別是: 單中括號會進行 變量的擴展(如果是多個單詞的字符串, 會把它們當作多個單詞來看待, 這時候會產生錯誤), 所以像 name="Smith Jonh" ; if [ $name = "Smith Jonh" ]; echo ...
會報語法錯誤, 因為單中括號 會將 $name 擴展成 if [ Smith John = "Smith John" ], 從而認為 Smith 是多余的單詞 而報錯
, 這時候, 使用單中括號, 應該將 變量用 雙引號括起來, 明確地告訴這是一個 完整的 字符串.
而使用 雙 中括號 則不會擴展, if [[ $name = "Smith John" ]] ...
則不會報錯...
linux的shell腳本 的語句和語句之間 需要分割. 有兩種分割方式, 一種是 用 分號, 另一種是 用 回車符 兩種都可以.
另外: 一個大的原則是 : 凡是在結構語句中, 比如if, for, while前面的條件 語句(注意這些if while for 分句都是 一個語句, 一個判斷 語句! 它 跟后面的do語句, 之間都需要加 分號或回車進行分割.
然后就是 凡是shell中的所有結構體(if, while, for ,until等 ) 中的body部分, 都必須有 類似 C語言中的 大括號 進行括起來. shell是用 關鍵字 進行來 "括起來"來的, 比如: if 結構體中, 要用 then...else....fi來括起來, while和for等要用 do ...done 來括起來. 這樣的話, 就不會忘記寫then或do等關鍵字了.
關於echo的一個用法是: echo 本身會照原樣輸出 后面的內容, 不管你有沒有加 雙引號. 但是有一點: echo 遇到 $(())
等之類的 計算表達式的時候, 會 先將 表達式的值計算出來然后再打印,比如:
[root@localhost foo]# echo b=$((a+3))
b=6
### 關於shell編程, 這一篇就夠了: http://blog.csdn.net/crazyhacking/article/details/10182563 就是關於 可以用在if while for等語句中 表示條件判斷的情形
主要有三種條件判斷: 1. 是關於字符串的邏輯運算 2. 是關於 整數的邏輯運算, 3. 是關於文件的邏輯運算
- 關於字符串的邏輯運算有: =, !=, -n, -z, 如果要比較大小, 使用 反斜杠轉義后的
\>, 或 \<
, 最重要的是字符串支持 單個字符串判斷, 比如:if [ "$name"]
, 但是 整數就不支持這種單個的邏輯運算 - 關於整數的邏輯運算, 要用 字符運算符, 如: -eq, -ne, -gt, -lt, -ge...
- 關於文件的邏輯運算, 包括: -f, -d, -r, -w, -x, -l, -s(文件大小非零)
而多個邏輯表達式 的 混合運算 可以用 -a, -o, ! , 也可以用對應的 &&, || ,! 但是 前者要放在一個 中括號內, 而后者要放在兩個 單獨的 中括號里面,比如: if [ $a -eq 1 -a $b -eq 2]
用&&
就是 if [ $a -eq 0 ] && [ $b -eq 2 ];
**關於字符串匹配的if判斷是 **: if [ 反引號echo $name | grep -e pattern ] ; then ... 反引號
要注意的是: 在 比較字符串是否相等的時候, 后面要加上一個附加的 額外字符(任意字符,比如x), 如果某個變量為空 str=
在判斷是否為空的時候, 不能這樣寫if [ $str = '' ]
而是 直接加上一個 末尾的附加字符串 來比較, 比如: if [ "$str"x = "x" ];
在shell中, 跟其他編程語言對字符串變量的 認定是一樣的, 即變量取名的時候, 都是"最大程度的 貪婪匹配", 比如, 本來有一個變量是 str, 但是如果你寫成: `if [ $strx = 'x' ] ` 那么這時候, 他不會認為是 變量 `$str` 和字符x的連接, 而是直接把他當成 變量 `$strx`了, 因為之前 的 `$strx` 變量沒有申明, 變量為空, 所以仍然會報錯: unary operator expected.... 即: ### 凡是你 需要將變量和后面的字符/字符串 相區別, 而不想讓 shell認為是一個整體的變量名的時候, 就應該用 雙引號 進行 分割 /界定
[root@localhost ~]# str=
[root@localhost ~]# if [ $strx = "x" ]; then echo 'right'; fi
-bash: [: =: unary operator expected
[root@localhost ~]# if [ "$str"x = "x" ]; then echo 'right'; fi
right
比較兩個字符串是否相等的辦法是:
if [ "$test"x = "test"x ]; then
這里的關鍵有幾點:
1 使用單個等號
2 注意到等號兩邊各有一個空格:這是unix shell的要求
3 注意到"$test"x最后的x,這是特意安排的,因為當$test為空的時候,上面的表達式就變成了x = testx,顯然是不相等的。而如果沒有這個x,表達式就會報錯:[: =: unary operator expected
- pidof和pgrep 都是列出進程的id號的命令.
pidof 需要 精確 程序的名字, 而 pgrep 只是需要 程序的 大致名字, 可以進行模糊匹配.
而pkill 則是根據 程序的名字, 殺死程序.
at命令的使用
garble: [ga:bl], 斷章取義, 曲解, 歪曲, 篡改.
at 命令提示 garbled time表示時間設置不對.
at命令表示的是, 在將來某個指定的時間 執行某個事件。相當於win的 計划任務
格式是:at [options] 時間 + 要執行的具體任務
也可以有at 交互式命令輸入
**在交互式的at命令中, 結束命令的輸入 是 按 ctrl+d , 注意不是 ctlr_c, ctrl_c是放棄, 取消當前輸入的命令, 取消at 安排! **
at每設置一次, 設置一個job, 顯示已經設置的 job是: job 序號 at 執行時間.
顯示的時候, 總是從 上到下 顯示最近設置的 at . 即按 job 從大到小的順序進行
at 有很多別名, 比如: at -l =atq, at -d =atrm 等等.
at 也可以把要執行的命令放在 一個文件中, 使用 -f 選項:
at -f jobs.at_todo 23:00 2010-12-12
運行at命令需要開啟 atd 服務
at命令的其他細節
- at命令是在指定的時間 **必須執行 一次, 而如果不是很重要的/緊急的任務, 非必須的任務, 可以使用 batch命令. 而如果是 周期性的執行預訂的命令則使用 crond文件...
- at 命令指定命令的時候, 要指定命令的 全路徑, 比如 要指定 /bin/echo, /bin/cp 而不要只是說 echo, cp等.
- at默認的是顯示你已經設置了那些jobs, 要查看具體的某個job的內容, 要使用 at -c jobid (其中的-c表示 --content內容的意思).
- at 的配置是/etc/at.allow, /etc/at.deny限制哪些用戶可以使用at, 哪些用戶不允許使用.. 規則是: 如果allow和deny都不存在, 則只有root用戶可以使用at命令, 如果 allow和deny都存在, 則按里面寫的用戶決定.
linux系統中 很多經常變化的內容都 放在 /var目錄中, 有的直接放在 /var下, 有的放在/var下的spool, 一般的進程號放在 /var/run/目錄下, 等等, at命令的 內容項要放在 /var/spool/at, /var/run/at/里面放的是pid文件.
quota是什么意思
是磁盤對用戶的配額設置, 他會首先去讀取 /etc/filesystems中的內容, 然后顯示所有的fs的配額
echo >> 是 添加, 那么要刪除 某一行呢? : 使用 sed命令. 很簡單: sed -i -e '$d' foo.txt
NURBS曲線: 是非統一有理B樣條曲線:
Non-Uniform 是指一個控制頂點的影響力范圍可以能夠改變,
Rational 有理, 是指曲線可以用數學表達式來定義
B 樣條曲線 spline : 因為在模擬 擬合多個點構成的曲線時, 是用 有彈性的木條來擬合的, 所以叫樣條曲線.
如何設置ip地址和網關和dns服務器?
route add default gw ...dev eth0? : dev是說要設置哪個網卡的默認網關?
你可以具體的指定是 哪個 網卡的 默認網關...
動名詞和名詞的區別?
比如,amazing, 動名詞具有動詞的性質,所以可以帶其他成分賓語、或狀語成分。而其他普通的名詞則不能。
徹底地掌握 sed 工具了:
sed 是流編輯, 它會把后面跟的文件 中的內容, 一行一行地讀出來, 然后進行處理, 然后默認的輸出到控制台. 他的格式是: sed [options] '編輯的命令腳本' files
即sed的后面是選項, 和 你要對文件進行什么樣的編輯命令, 最后是要編輯的文件名稱.
一句話深入到sed的實質: sed實際上就是跟 vim的 編輯命令/冒號命令 完全是一樣的! 你知道vim的冒號命令/命令模式的使用, 就一樣的使用sed命令了. 只是sed命令不需要打開文件...
命令腳本組成: 編輯范圍 + 編輯命令,
默認的是 對所有的行都進行相應的編輯, (相當於%), 當然你也可以 指定只 編輯哪些范圍, 其他的不滿足條件的行不編輯
編輯的時候, 是把當前行 讀取 -> 拷貝 到 緩沖區, 然后進行編輯操作.
編輯范圍比如: 1 | 1, $| /^a.A$/ | /^a.A/, $ 等等
編輯命令包括: 增刪該: i , d , s , a , c \ 等, 命令的格式是 單字符命令中間加一個空格后, 然后 用 反斜杠 . 不過注意的是, 命令后面可以不加 空格, 也可以不加反斜杠, 什么都不加, 加上空格, 反斜杠只是 便於閱讀和理解.
總之, sed是很智能的, 基本上, 你不寫 一些輔助代碼的時候, 都盡量 來解析...
sed -e 'script - expression' 命令中的 -e
等於 --expression=script...
, -e可以不要, 不寫.
script-expression表示的是 "add the script to the commands to be executed" 要添加到命令中去執行的腳本...
i, a,c,d, s等命令中, 后面的空格和反斜杠不是必須的, 只有當解析出現錯誤的時候, 才去添加空格或反斜杠.
注意a和i的 含義, 他們是表示 在當前 正在處理的行 的前面或后面 添加/插入一行.
c是替換 整個處理的行, 而s只是替換 行中的 字符串. 兩個不一樣.
同時 在執行sed 的時候, 可以同時指定多個 -e腳本命令表達式, 來一次性地執行多個指令, 比如: cat /etc/at.deny | sed -e ' $a \foo' -e '$a \bar' -e '$a \ itoto'
- 為什么dhcp服務器不是挨着依次分配ip地址的? dhcp服務器有的是從大到小分配地址, 而有的是從小到大分配地址的呢?
這個要看os的不同, linux是從大到小分配ip地址的. 而win與之相反, 是從小到大進行分配的.
還有的是要分配靜態地址, 而有的還要和client進行ip地址的協商. 通常如果沒有其他搶地址的話, 都是在refresh時間到了的時候, 還是分配原來的ip地址.
ARP和DNS是一樣的嗎?
-
雖然他們 都是 進行 ip地址轉換的, 但是轉換的 目標不同 arp是將 ip -> mac 地址. 而dns 是將 域名 dn: domain name ->ip地址.
-
gra'tuitous arp: 免費arp, 無故arp, 是在啟動的時候, 發送一個 arp請求,得到ip地址對應的mac地址
-
ARP協議是“Address Resolution Protocol”(地址解析協議)的縮寫。 就是在 局域網中, (同一個網段, 或連接在 同一個 交換機上的 所有機器) 進行通信的協議. 那為什么要進行解析呢?
-
因為, 在第三層傳輸的時候, 使用 是 ip地址, 傳輸單位是包 package, 而當包下傳到 第二層的時候, 分到局域網中時,進行傳輸的是“幀”,幀里面要封裝 目標主機的MAC地址的。
在以太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。 ARP協議的基本功能就是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。 -
ARP協議的工作原理
在每台安裝有TCP/IP協議的電腦里都有一個 ARP緩存表,表里的IP地址與MAC地址是一一對應的.
以主機A(192.168.1.5)向主機B(192.168.1.1)發送數據為例。當發送數據時,主機A會在自己的ARP緩存表中尋找是否有目標IP地址。如果找到了,也就知道了目標MAC地址,直接把目標MAC地址寫入幀里面發送就可以了;
但是, 如果在ARP緩存表中沒有找到相對應的IP地址,主機A就會在網絡上發送一個廣播,目標MAC地址是“FF.FF.FF.FF.FF.FF”,這表示向同一網段內的所有主機發出這樣的詢問:“192.168.1.1的MAC地址是什么?”網絡上其他主機並不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的回應:“192.168.1.1的MAC地址是00-aa-00-62-c6-09”。這樣,主機A就知道了主機B的MAC地址,它就可以向主機B發送信息了。
ARP的緩存?? : : 當 第一次 找到 主機B的 mac地址后 , 為了避免后面再多次進行詢問, 需要暫時將 這個B 主機的條目保存下來, 即就是要 更新了自己的ARP緩存表,下次再向主機B發送信息時,直接從ARP緩存表里查找就可以了。
ARP的老化, 如同你注冊一個郵箱一樣, 如果你注冊后, 在一段時間內都沒有用過, 那么它就會給你刪除 即老化 機制:::: 但是有一個問題, 如果把每次 曾經通過信的主機的mac地址條目不管時間 過了多久 都永遠保存, 那樣, arp表將會很大, 既不便於存儲, 浪費存儲空間, 又不便於查詢 將會浪費很多的查詢時間...
所以:: ARP緩存表采用了老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除,這樣可以大大減少ARP緩存表的長度,又 加快查詢速度。
ARP攻擊 就是通過偽造IP地址和MAC地址實現ARP欺騙,能夠在網絡中產生大量的ARP通信量使網絡阻塞,攻擊者只要持續不斷的發出偽造的ARP響應包就能更改目標主機ARP緩存中的IP-MAC條目,造成網絡中斷或中間人攻擊。 ARP攻擊主要是存在於局域網網絡中,局域網中若有一個人感染ARP木馬,則感染該ARP木馬的系統將會試圖通過“ARP欺騙”手段截獲所在網絡內其它計算機的通信信息,並因此造成網內其它計算機的通信故障。
名稱服務有三種情況: hosts文件解析, nis/nis+/nisplus(3.0版本) 網絡信息服務, 和dns服務
那么這三種 名稱服務的 采用的 先后次序是 怎樣規定的呢? 由 文件: /etc/nsswitch.conf : 即: 名稱服務切換...
named 區域文件中的各個術語和 名稱記錄的含義: 參考 https://wenku.baidu.com/view/63544d8ea0116c175f0e4897.html
cname: 命名(aliases):