RD1
grep
這個指令名稱其實是來自於正規表示法的 g/RE/p
,其意義是代表以正規表示法全域搜尋並列印出來(globally search for RE and print it)。
awk 可以處理後續接的檔案,也可以讀取來自前個指令的 standard output 。awk 主要是處理『每一行的欄位內的資料』,而預設的『欄位的分隔符號為 "空白鍵" 或 "[tab]鍵" 』
由以上的例子可以知道每一行的每個欄位都是有變數名稱的,那就是 $1, $2… 等變數名稱。以上面的例子來說,A001,A002…就是$1,第一欄的意思,至於AEADDDEE9931,FDEAEDFJK3394…就是$3,第三欄的意思,其他的就依此類推。另外$0 代表『一整列資料』的意思。
變數名稱 | 代表意義 |
---|---|
NF | 每一行 ($0) 擁有的欄位總數 |
NR | 目前 awk 所處理的是『第幾行』資料 |
FS | 目前的分隔字元,預設是空白鍵 |
有趣吧!不過,怎麼第一行沒有正確的顯示出來呢?這是因為我們讀入第一行的時候,那些變數 $1, $2… 預設還是以空白鍵為分隔的,所以雖然我們定義了 FS=":" 了, 但是卻僅能在第二行後才開始生效。那麼怎麼辦呢?我們可以預先設定 awk 的變數啊! 利用 BEGIN 這個關鍵字喔!這樣做:
sed (stream editor) 可以分析 Standard Input (STDIN) 的資料,
進行取代、刪除、新增、擷取特定行等處理後,再輸出到 standrad out (STDOUT)
不會對檔案本身進行修改只是輸出給你看
[n1[,n2]]function
上述指令中的界定符/
可以被代換成任意符號如:
|
變更檔案及目錄擁有者與群組
鳥哥
在 Linux 系統上的檔案與目錄都有擁有者以及群組的屬性質,我們可以透過 ls 的輸出來查看每個檔案與目錄的擁有者與群組:
ls -l
的輸出中,第三欄與第四欄就是檔案或目錄的擁有者與群組名稱,例如這裡的 log
目錄其擁有者就是 bill_chiu
,群組就是 admin
這樣就可以將 test.txt
這個檔案的擁有者改為 root
。
如果要更改檔案或目錄的群組,也可以用 chown
更改:
chown 的第一個參數若以冒號開頭,就是代表群組名稱的意思,這一行指令就是將 test.txt 這個檔案的群組改為 root。
不過,請記得,要被改變的群組名稱必須要在/etc/group檔案內存在才行,否則就會顯示錯誤!
若要同時更改 test.txt 的擁有者與群組,可以這樣寫:
功能:列出所在或指定目錄的內容or檔案之相關特性
語法:ls [-選項] [目錄or檔案名稱]
常用選項及其代表之意義
-a : 列出所有檔案名稱,包括以『.』開頭之隱藏檔,如.profile、.login等。
-d : 若參數的為一目錄名稱,則只列出檔案名稱而非目錄之內容。
-l : 列出檔案的詳細資料,包括檔案形態、存取權限、連結數目、擁有 者名稱、群組名稱等。
印出目前工作目錄之絕對路徑
這是察看執行中的程式的一個指令,您可以搭配kill指令隨時中斷,刪除不必要的程序:
下載
常用選項/替代指令
功能更多的wget
顯示尾幾行
n:指定行數,預設為10行
顯示頭幾行
n:指定行數,預設為10行
印出檔案內容至銀幕(標準輸出)或合併多檔
cat file1 file2 > file3 可將檔案file1、file2之內容依順序合併,並將結果存至file3。
可當more使用(讀黨)
上下翻頁看內容
近入後案 / 搜尋
n 跳到下一筆匹配
N 回島上一筆匹配
rsync
的角色就像是一般 Linux 的 cp
與 scp
指令,可以將檔案或目錄從來源位置複製到目的位置,不過 rsync
在複製檔案時會比 cp
與 scp
更有效率,並且支援連結檔與設備檔(devices),也可以保留檔案的擁有者、群組與權限設定
rsync
在第一次複製檔案時,會複製完整的檔案內容,而之後再次複製檔案時,就會先以 delta transfer 演算法檢查新舊檔案之間的差異,只傳送有變動的部份,可加快備份速度,尤其是在累進備份大檔案時,效果更明顯。另外 rsync
在使用網路傳送資料時,也支援資料的自動壓縮與解壓縮,這樣可以有效減少耗費的網路頻寬。
基本語法
以下是最常見的幾個參數:
-v
:verbose 模式,輸出比較詳細的訊息。-r
:遞迴(recursive)備份所有子目錄下的目錄與檔案。-a
:封裝備份模式,相當於 -rlptgoD
,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。-z
:啟用壓縮。-h
:將數字以比較容易閱讀的格式輸出這套軟體在 Windows 及 Linux 系統中都存在,只是介面有點不很相同就是了。
基本上,這個程式是 user 端用來連線登入遠端主機的。
例如人在台南,但是可以在台南使用可以連上 Internet 的電腦,經由 telnet 連線上家裡的 Linux 主機,而進行設定。
感覺上就好像在家裡玩自己的 Linux 主機一樣。
一般來說,如果你是使用 Winodows 系統,則你可以在『開始』–>『執行』後,輸入 telnet xxx.yyy.zzz.qqq ,其中, xxx.yyy.zzz.qqq 為 IP 位址,則可以連上主機(或者是 BBS )囉。當然,如果您是在 Linux 系統下,亦可直接輸入 telnet xxx.yyy.zzz.qqq 來連上主機或BBS。
這個 nc 指令可以用來作為某些服務的檢測,因為他可以連接到某個 port 來進行溝通,此外,還可以自行啟動一個 port 來傾聽其他用戶的連線。
檢測連線
c:次數
i:間格
這是用來查詢或反查詢 DNS 的指令
例如我們要知道 雅虎 的網路位址,則可以如此查詢:
系統會告訴你,我們使用的 DNS server 是 ksdns.seed.net.tw,而查詢到的網址是 180.222.102.202。
這也是用來觀察網路狀況的指令
查詢、設定網路卡與 IP 網域等相關參數
一般來說,直接輸入 ifconfig 就會列出目前已經被啟動的卡,不論這個卡是否有給予 IP,都會被顯示出來。而如果是輸入 ifconfig eth0,則僅會秀出這張介面的相關資料, 而不管該介面是否有啟動。
所以如果你想要知道某張網路卡的 Hardware Address,直接輸入『 ifconfig "網路介面代號" 』即可,至於出現的各項資料是這樣的(資料排列由上而下、由左而右):
依照指定條件,找尋檔案或目錄
-name 指定範本樣式的檔名
-iname 搜尋可以忽略大小寫之分
-path 指定目錄的範本
-user 指定使用者名稱
-group 群組名指定群組名稱
-amin < min> 指定時間內曾被存取過的檔案,單位為分鐘
-atime < day> 指定時間內曾被存取過的檔案,單位為24小時
-exec <指令> 當找到符合條件的檔案,就執行該指令,指令結尾必須是";"
-mmin < min> 指定時間內曾異動過的檔案,單位為分鐘
-mtime < day> 指定時間內曾被異動過的檔案,單位為24小時
-nouser 檔案不屬於本機上之任何User的檔案
-ok <指令> 用法同-exec,唯每一個指令執行前均會詢問使用者
-print 將符合條件的檔案資料由終端機顯示出來
-size <檔案大小> 符合檔案大小的檔案,單位為512Byte(Block),檔案大小前加"+"號代表大於這個 size,"-"代表小於這個size
Example:
###找到目前目錄下,檔案大小大於250K Bytes的檔案,並將結果由終端機輸出
###找出整個系統中所有"無主檔案"並刪除之。
搜尋命令執行檔的完整路徑
利用 which 選項 命令 可以依據「PATH環境變數」的內容來搜索命令執行檔,並顯示該命令之命令執行檔的完整路徑(若該命令執行檔不在PATH中,則不會被搜尋到)。其中,選項可以是:
watch 是 procps 套件內的其中一個指令,基本上現在多數的 Linux 發行版預設的系統套件就包含了 procps。如果系統預設並沒有安裝的話,可以利用套件管理工具安裝,或是到 procps 的 GitLab 下載原始碼編譯安裝。
在 mac OS 下可輸入 brew install watch
進行安裝。
可以將命令的輸出結果輸出到標準輸出設備,多用於週期性執行命令/定時執行命令
-n或–interval watch缺省每2秒運行一下程序,可以用-n或-interval來指定間隔的時間。
-d或–differences用-d或–differences選項watch會高亮顯示變化的區域。
而-d=cumulative選項會把變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來。
-t或-no-title會關閉watch命令在頂部的時間間隔,命令,當前時間的輸出。
-h, –help 查看幫助文檔
這是用來殺掉執行中程式的指令,需配合 ps
這個指令,當你執行一個 ftp 程式,但是他有點當當的時候,你可以 ps -aux
這個指令查出 ftp 這個程式的代碼(PID),假設其 PID 為 110 ,然後輸入:
即可殺掉這個 ftp 程式。
這是用來察看目錄內所有檔案使用掉的空間的情況,如下所示:
其中, du 預設的檔案輸出資料為 KB,以參數 -m 使檔案資料顯示為 MB。
h: human-readable
s: summary (僅列目錄總容量知結果)
c: 當前目錄下(檔案)的傯總容量
dN:指定深度
這是用來察看硬碟空間的指令。
由於我們目前將檔案都建立在根目錄『/』下,所以只要沒有空間,則所有檔案都無法複製進來系統。不過,若你規劃出多的硬碟,則可以察看你的硬碟空間資訊,如下所示:
a: 顯示所有系統檔案,包括大小為零的系統檔案
h: human-readable
T: 印出檔案系統類型($ mount-1)
在 Linux 系統之下,幾乎所有的系統資源都是以檔案的形式呈現的(包含一般檔案、目錄、連結檔、裝置檔、管線檔、網路 socket 等),所以對於管理者來說,若要查詢一個程式使用了哪些系統資源,就可以透過它開啟的檔案來得知。
lsof 指令可以用來查詢行程所開啟的檔案列表,這個小工具對於系統管理者來說非常實用,而且也非常重要,以下是這個工具的使用方式與範例。
如果想要查詢目前正在開啟指定檔案的行程,可以在執行 lsof 時直接加上檔案的名稱與路徑。