1 / 54

Linux 基礎學習

Linux 基礎學習. Chapter 11 Bash Shell VBird 2005/08/18. 內容. Shell 的角色 Bash 指令下達與特色 Bash 的變數功能 命令別名與歷史指令 Shell 使用的環境 資料流重導向 管線命令. Shell 的角色. Shell 的角色(續). Shell 用來溝通 user 與 kernel ! 目前常見的 shell Bourne shell (/bin/sh) Bourne again shell (/bin/bash, Linux 預設 )

warner
Download Presentation

Linux 基礎學習

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux 基礎學習 Chapter 11 Bash Shell VBird 2005/08/18 Linux基礎--Bash Shell

  2. 內容 • Shell 的角色 • Bash 指令下達與特色 • Bash 的變數功能 • 命令別名與歷史指令 • Shell 使用的環境 • 資料流重導向 • 管線命令 Linux基礎--Bash Shell

  3. Shell 的角色 Linux基礎--Bash Shell

  4. Shell 的角色(續) • Shell 用來溝通 user 與 kernel ! • 目前常見的 shell • Bourne shell (/bin/sh) • Bourne again shell (/bin/bash, Linux 預設) • Korn-shell (/bin/ksh) • C-Shell (/bin/csh) • 圖形介面也是一種 shell • 可以在不同的 shell 之間變換! • 系統可用的 shell 均記錄在 /etc/shells內 • 若有系統帳號不想讓他登入,可使用特殊 shell 。 Linux基礎--Bash Shell

  5. Shell 的角色(續) • 何時才進入 Shell ? • BIOS • MBR (loader & kernel) • init & scripts • /bin/login • 輸入帳號密碼後,依據 /etc/passwd 的設定給予 shell • 用 finger (user account) 查詢使用者的 shell • 用 chsh 修改 /etc/passwd 內的使用者 shell 設定 Linux基礎--Bash Shell

  6. Bash 指令下達與特色 • Command [option] [parameters] • 範例: ls –l /home • 每一行的最前面為『指令』,後續才接 option 與 parameter • 指令與 option 及 parameter 之間需要用一個或多個空白鍵隔開 • Paramter 不會是指令,通常是檔名或者其他等等 • 大小寫是不一樣的 • 按下 Enter 按鍵後,該指令會立刻執行! • 可使用跳脫符號 (\) 將指令寫在第二行 • 跳脫符號的用途,還可用來跳脫特殊字元的特殊意義! • 可使用 ; 來連接兩個指令的下達 • 輸出的內容可使用 > 來傳導到檔案或裝置當中! Linux基礎--Bash Shell

  7. Bash 指令下達與特色(續) • 檔名與指令補齊(Filename completion) • 變數功能(Variable) • 命令別名(Command aliases) • 指令歷史紀錄(Command history) • 命令稿執行(Shell programming) • 工作控制(Job control) • 萬用字元 (wildcard chars) Linux基礎--Bash Shell

  8. Bash 指令下達與特色(續) • Bash 的內建指令: • type [-tpa] name • 參數: • 不加任何參數時,則 type 會顯示出那個 name 是外部指令還是 bash 內建的指令! • -t :當加入 -t 參數時,type 會將 name 以顯示這些字眼 • file :表示為外部指令; • alias :表示該指令為命令別名所設定的名稱; • builtin :表示該指令為 bash 內建的指令功能; • -p :如果後面接的 name 為指令時,會顯示完整檔名(外部指令)或顯示為內建指令; • -a :會將由 PATH 變數定義的路徑中,將所有含有 name 的指令都列出來,包含 alias Linux基礎--Bash Shell

  9. Bash 指令下達與特色(續) • Bash 的內建指令:(續) • 例題: • 系統上的 ls 指令的所有路徑; • type -a ls • cd 這個指令是內建的?還是外部的? • type cd / type -t cd • 如何利用 type 查詢指令的路徑 (類似 which ) • type -P ls Linux基礎--Bash Shell

  10. Bash 的變數功能 • 變數的意義: • 利用變數的定義,可以設定您的工作環境,例如語系檔、系統時間、指令執行路徑等等,方便使用! • 以一個變數名稱,帶入『變數內容』來操作變數。 • 變數的讀取: • echo $variable • echo ${variable} • 簡易變數的設定、讀取與取消: • name=VBird • echo $name • unset name • echo $name (未設定的變數,預設為『空的字串』) Linux基礎--Bash Shell

  11. Bash 的變數功能(續) • 變數的設定方式 • 變數與變數內容以等號『=』來連結; • 等號兩邊不能直接接空白字元; • 變數名稱只能是英文字母與數字,但是數字不能是開頭字元; • 若有空白字元可以使用雙引號『 “ 』或單引號『 ‘ 』來將變數內容結合起來 • 必要時需要以跳脫字元『 \ 』來將特殊符號 ( 如 Enter, $, \, 空白字元, ' 等 ) 變成一般符號; • 在一串指令中,還需要藉由其他的指令提供的資訊,可以使用 quote 『 ` command` 』; • 若該變數為擴增變數內容時,則需以雙引號及 $變數名稱 如:『 "$PATH":/home』繼續累加內容; • 若該變數需要在其他子程序執行,則需要以 export 來使變數變成環境變數, 如『export PATH』; • 通常大寫字元為系統預設變數,自行設定變數可以使用小寫字元,方便判斷 ( 純粹依照使用者興趣與嗜好 ) ; • 取消變數的方法為:『unset 變數名稱』。 Linux基礎--Bash Shell

  12. Bash 的變數功能(續) • 設定變數: • 是否可以設定 12name 這個變數? 不行 • 設定 name 內容為你的大名: name=VBird • 如何設定 name 為 『VBird‘s Tsai』 這個字串? • name=VBird\’s\ Tsai • name=“VBird’s Tsai” • 在 PATH 內多加一個 /home/dmtsai/bin 的目錄: • PATH=“$PATH”:/home/dmtsai/bin • 在 name 的內容中,多加 dm 兩個字母 • name=${name}dm / name=“$name”dm • uname -r 可以秀出目前的核心版本,系統核心版本的路徑在 /lib/modules 底下,請問如何一串指令寫出目前核心檔案放置的路徑? • cd /lib/modules/`uname -r` Linux基礎--Bash Shell

  13. Bash 的變數功能(續) • 設定變數: • 剛剛設定好了 name 這個變數,我想要使用 myname 這個變數來將 name 這個內容引用成: myname is $name ,該如何設定? • myname=“myname is $name” • myname=‘myname is $name’ • myname=`myname is $name` • 查詢系統內 crontab 檔案,並輸出這些檔案的屬性! • ls -l `locate crontab` Linux基礎--Bash Shell

  14. Bash 的變數功能(續) • 環境變數: • 用來定義系統環境的變數,例如 PATH, HOME 等; • 可以被子程序利用的變數亦被稱為『環境變數』 • 查閱環境變數可用 env 指令查閱; • 常見的環境變數: • HOME (代表 ~ ) • HISTSIZE • PATH (更多說明在下一頁) • MAIL (使用者 mail box) • LANG • RANDOM (與 /dev/random 有關, 介於 1~32767 之間) Linux基礎--Bash Shell

  15. Bash 的變數功能(續) • PATH 環境變數的意義 • 目錄與目錄用 : 分隔 • 不能有空白字元 • 搜尋的順序很重要 • 最好不要有 . 存在 PATH 當中 • 相對路徑與絕對路徑的差異? • 絕對路徑一定由 / 開始寫起 ex> /root/bin • 有的時候絕對路徑要比較可靠的多! • 指令的搜尋 (which)也與 path 有關! • 請找出 ls 在哪裡? Linux基礎--Bash Shell

  16. Bash 的變數功能(續) • 環境變數:(續) • 更多的變數可使用 set 來查閱出所有的已設定變數; • COLOR • HISTFILE • PWD / OLDPWD • PS1 • 更多功能變數,請參考下頁 • $ (本 bash 程序的 PID) • ? (上個指令執行後的回傳值) • PPID (本 bash 的上層 PID) Linux基礎--Bash Shell

  17. Bash 的變數功能(續) • PS1 內的變數意義: • \d :代表日期,格式為 Weekday Month Date,例如 "Mon Aug 1" • \H :完整的主機名稱。 • \h :僅取主機名稱的第一個名字。 • \t :顯示時間,為 24 小時格式,如: HH:MM:SS • \T :顯示時間,12 小時的時間格式! • \A :顯示時間,24 小時格式, HH:MM • \u :目前使用者的帳號名稱; • \v :BASH 的版本資訊; • \w :完整的工作目錄名稱。家目錄會以 ~ 取代; • \W :利用 basename 取得工作目錄名稱,列出最後一個目錄名。 • \# :下達的第幾個指令。 • \$ :提示字元,如果是 root 時,提示字元為 # ,否則就是 $ 囉~ • 練習: • 若要顯示如下:[root@linux /home/dmtsai 16:50 #12]# 則 PS1 為? • PS1='[\u@\h \w \A #\#]\$ ' Linux基礎--Bash Shell

  18. Bash 的變數功能(續) • 環境變數與自訂變數的差異 • 自訂變數(local variable) • 所有變數均僅存在於目前所在的 shell 行程當中,當離開此 shell 時,該變數將無法存取。 • 環境變數(export variable) • 作業系統分配一記憶區塊給 shell ,此區域之變數可讓子程序存取 • 利用 export var 可將 var 這個變數寫到該記憶區塊中 • 當載入另一個 shell 時(離開原本的 shell ),子 shell 可將父 shell 的環境變數所在的記憶區塊導入自己的環境變數區塊中 • 最常用在程式之間的互相呼叫! • 查閱可用 env, export 等 Linux基礎--Bash Shell

  19. Bash 的變數功能(續) • 語系方面的變數 • i18N 的變數項目如下(locale) • LANG: 主語言環境 • LC_CTYPE: 字元辨識 • LC_NUMERIC: 數字系統的顯示 • LC_TIME: 時間系統的顯示 • LC_COLLATE: 字串比較、排序 • LC_MONETARY: 幣值格式的顯示 • LC_MESSAGES: 訊息顯示,如功能表、錯誤訊息 • LC_ALL: 語言環境整體設定 Linux基礎--Bash Shell

  20. Bash 的變數功能(續) • 語系方面的變數 • 若 LC_XX 沒有設定,預設以 LANG 或 LC_ALL 的設定來取代 • 列出所有可用語言: locale -a • locale 放置的目錄: /usr/lib/locale • 可修訂的系統設定檔: /etc/sysconfig/i18n • LANG="en_US.UTF-8" • SUPPORTED="zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en" • SYSFONT="latarcyrheb-sun16“ • 不修改語系下變換此次指令顯示語系的方法: • LANG=C ls -al /root Linux基礎--Bash Shell

  21. Bash 的變數功能(續) • 變數的鍵盤輸入:read [-pt] variable • 參數: • -p :後面可以接提示字元! • -t :後面可以接等待的『秒數!』範例: • 建立一變數名稱為 atest ,讓使用者自行輸入; • read atest • 同上,但顯示:input your name 字樣,且定義在三十秒內完成 • read -t 30 -p “Input your name: “ atest • 宣告變數類型: declare • a=3; b=5; c=$a+$b 結果為? • 若用 declare -i 宣告,結果為? • 數值計算亦可用 $((計算內容)) 來取代! Linux基礎--Bash Shell

  22. Bash 的變數功能(續) • 使用者在系統的資源限制: ulimit [-SHacdflmnpstuv] [配額] • -H :hard limit ,嚴格的設定,必定不能超過設定的值; • -S :soft limit ,警告的設定,可以超過這個設定值, • -a :列出所有的限制額度; • -c :可建立的最大核心檔案容量 (core files) • -d :程序資料可使用的最大容量 • -f :此 shell 可以建立的最大檔案容量 ,單位為 Kbytes • -l :可用於鎖定 (lock) 的記憶體量 • -p :可用以管線處理 (pipe) 的數量 • -t :可使用的最大 CPU 時間 (單位為秒) • -u :單一使用者可以使用的最大程序(process)數量。 • 列出所有限制的值: ulimit -a • 限制可使用檔案為 200M : ulimit -f 200000 • (一般使用者僅能減小,不能加大!) Linux基礎--Bash Shell

  23. 命令別名與歷史指令 • 命令別名: • 語法:alias aliasname=‘command’ • alias, unalias • 練習: • 讓 lm 等於下達 ls -al | more ; • lm=‘ls -al | more’ 與 alias lm=‘ls -al | more’ 有何不同? • 目前系統有多少命令別名? • 如何取消 ls 的命令別名? • 設定 cls 也可以清除螢幕; • 設定 dir 也可以顯示檔案; Linux基礎--Bash Shell

  24. 命令別名與歷史指令(續) • 歷史指令: • 察看歷史指令: • history [n] 僅列出 n 比紀錄 • history [-c] 消除在記憶體當中的紀錄 • history [-raw] [filename] • r :將在 filename 當中的記錄讀到記憶體內; • a :將記憶體的紀錄,增加入 filename 內 • w :將記憶體的資料寫入 filename 內。 • 記錄的歷史指令筆數變數:HISTSIZE • 歷史指令設定多寡的益處/缺點? • 記錄檔: • ~/.bash_history (登入時會先讀入); • 何時寫入記錄檔中? (預設登出才寫入) Linux基礎--Bash Shell

  25. 命令別名與歷史指令(續) • 歷史指令:(續) • 歷史指令記錄的應用: • !number 執行第 number 個指令; • !! 執行剛剛下達過的指令(上一個); • !vi 執行『最近』執行的 vi 為開頭的指令 Linux基礎--Bash Shell

  26. Shell 使用的環境設定 • 系統登入 tty 時,會使用到的提示字元檔: • /etc/issue • \d 本地端時間的日期; • \l 顯示第幾個終端機介面; • \m 顯示硬體的等級 (i386/i486/i586/i686...); • \n 顯示主機的網路名稱; • \o 顯示 domain name; • \r 作業系統的版本 (相當於 uname -r) • \t 顯示本地端時間的時間; • \s 作業系統的名稱; • \v 作業系統的版本。 • /etc/issue.net • /etc/motd • 練習:讓提示字元顯示登入處為第幾個 tty ?且登入後顯示一些歡迎訊息! Linux基礎--Bash Shell

  27. Shell 使用的環境設定(續) • Bash Shell 登入時,讀取的環境設定檔案: • /etc/profile • /etc/profile.d/*.sh • ~/.bash_profile, ~/.bash_login, ~/.profile (login shell) • ~/.bashrc (non-login shell) • /etc/bashrc • 系統設定檔: • /etc/profile: • 規範:PATH、USER、MAIL、 HOSTNAME、HISTSIZE 等變數,同時設定引用 /etc/profile.d/*.sh 及 /etc/inputrc 鍵盤 • /etc/bashrc • umask 與 PS1 等資料。 • /etc/sysconfig/i18n: • 引用語系資料檔 Linux基礎--Bash Shell

  28. Shell 使用的環境設定(續) • 建議設定檔放置於個人設定檔內: • ~/.bash_login • 主要放置登入時會使用到的各項變數,如 PATH, HISTSIZE, LANG 其他 alias 等等; • ~/.bashrc • 最後被讀取到的檔案,所以,可以考慮將所有的資料都寫入這裡。 • 不過若有 echo 的訊息時,則『每執行 shell script 時,都會重新讀取 ~/.bashrc ,所以,會重複顯示訊息,而非登入時顯示而已。 • ~/.bash_logout • 登出後,還要系統幫忙進行的工作! Linux基礎--Bash Shell

  29. Shell 使用的環境設定(續) • 設定檔內容的正式使用: • 登出後再登入,讓 bash shell 重新讀取一次設定檔; • 使用 source 或者是 . 來讀取設定檔: • source ~/.bashrc • . ~/.bashrc • 若有多個文案內容中,各項變數均不相同,可以撰寫多個環境設定檔,分別 source 即可! Linux基礎--Bash Shell

  30. Shell 使用的環境設定(續) • Shell 的按鍵環境使用: • stty -a: • eof : End of file 的意思,代表『結束輸入』。 • erase : 向後刪除字元, • intr : 送出一個 interrupt (中斷) 的訊號給目前正在 run 的程序 • kill : 刪除在目前指令列上的所有文字; • quit : 送出一個 quit 的訊號給目前正在 run 的程序; • start : 在某個程序停止後,重新啟動他的 output • stop : 停止目前螢幕的輸出; • susp : 送出一個 terminal stop 的訊號給正在 run 的程序。 • /etc/inputrc Linux基礎--Bash Shell

  31. Shell 使用的環境設定(續) • 一些字符的意義: • ? 一定有一個 • * 零個或多個 • [a-z] 範圍區間,為 a-z 之間的所有字母『僅取一個』 • [!a-z] 反向選擇 • [a-zA-Z] 同上! • 練習: • cd /usr/X11R6/bin (/usr/X11/bin) • ls xc* • ls xc[alo]* • ls xc[!o]* • ls xc*l* Linux基礎--Bash Shell

  32. Shell 使用的環境設定(續) • Bash 的子命令 • $(command) • `command` • ls /lib/modules/`uname –r` Linux基礎--Bash Shell

  33. 資料流重導向 Linux基礎--Bash Shell

  34. 資料流重導向 • 以指令的角度來觀察: • 處理的訊息,稱為 standard input, STDIN • 處理後,輸出的訊息 standard output, STDOUT • 有時候有錯誤訊息 standard error, STDERR • 特殊字符與裝置: • >, >> STDOUT • 2>, 2>> STDERR • <, << STDIN • /dev/null device Linux基礎--Bash Shell

  35. 資料流重導向(續) • 用 ls 將 /root 與 /temp 底下的檔案資訊輸出 • 僅正確資料到:/tmp/rootfile • 正確到 /tmp/rootfile 錯誤到 /tmp/rootfile_no • 同時傳送到 /tmp/rootfile • ls –l /root /temp > /tmp/rootfile • ls –l /root /temp > /tmp/rootfile 2> /tmp/rootfile_no • ls –l /root /temp > /tmp/rootfile 2>&1 Linux基礎--Bash Shell

  36. 資料流重導向(續) • 將 /etc/passwd, /etc/group 的資料全部都放置到 /tmp/account 檔案內?那個是對的? • cat /etc/passwd > /tmp/account; cat /etc/group > /tmp/account • cat /etc/passwd > /tmp/account; cat /etc/group >> /tmp/account • 利用 cat 建立一個檔案,檔名為 /tmp/catfile,內容為: I am VBird • cat > /tmp/catfile (記得 [ctrl]+d 的用途!) • 利用 cat 讀取 /etc/passwd • cat < /etc/passwd • 如例題二,如發現輸入內容含有 exit 則結束輸入! • cat > /tmp/catfile <<exit Linux基礎--Bash Shell

  37. 資料流重導向(續) • 資料流重導向的常見使用時機: • 當螢幕輸出的資訊很重要,而且我們需要將他存下來的時候 • 背景執行中的程式,不希望他干擾螢幕正常的輸出結果時; • 一些系統的例行命令(例如寫在 /etc/crontab 中的檔案)的執行結果,希望他可以存下來時; • 一些執行命令,我們已經知道他可能的錯誤訊息,所以想以『 2> /dev/null 』將他丟掉時; • 錯誤訊息與正確訊息需要分別輸出時。 Linux基礎--Bash Shell

  38. 資料流重導向(續) • 判斷有無錯誤發生的變數 • echo $? • 命令的執行判斷: • Command1 ; command2 不考慮 command1 的執行結果 • Command1 && command2 command1 的結果必須要正確 • Command1 || command2 command1 的結果必須為錯誤! • 練習: • 若 /tmp/testing 不存在,才用 touch 建立 • 若 /tmp/testing 存在,且為檔案,就刪除他! • 以 ls 測試 /tmp/vbirding 是否存在,若存在則顯示 “exist” ,若不存在,則顯示 “not exist”!(注意 && 與 || 的順序!) Linux基礎--Bash Shell

  39. 資料流重導向(續) • 說明底下的意義: foo1 && foo2 || foo3 > foo4 • foo1, foo2, foo3, foo4 各為指令/檔案或裝置? • 執行的流程為何? • 若 foo1 執行結果為 stdout • 接著執行 foo2 ,若 foo2 有 stderr ,才執行 foo3 > foo4 ,否則就結束該串指令; • 若 foo1 執行結果為 stderr ,則略過 foo2 ,執行 foo3 > foo4 。 Linux基礎--Bash Shell

  40. 管線命令 • 利用 | 處理前一個指令輸出的『訊息』 • 僅處理『standard out』! • ls /home /root /usr | less Linux基礎--Bash Shell

  41. 管線命令(續) • 取出一行文字當中的某一個內容: cut • cut -d'分隔字元' -f fileds • cut -c 字元區間 • 參數: • -d :後面接分隔字元。與 -f 一起使用; • -f :依據 -d 的分隔字元將一段訊息分割成為數段,用 -f 取出 • -c :以字元 (characters) 的單位取出固定字元區間; • 範例: • 將 PATH 變數取出,我要找出第三個路徑 • 將 export 輸出的訊息,取得第 12 字元以後的所有字串 • 用 last 將這個月登入者的資訊中,僅留下使用者大名 Linux基礎--Bash Shell

  42. 管線命令(續) • 分析『行』,並一關鍵字取出整行: grep • -a :將 binary 檔案以 text 檔案的方式搜尋資料 • -c :計算找到 '搜尋字串' 的次數 • -i :忽略大小寫的不同,所以大小寫視為相同 • -n :順便輸出行號 • -v :反向選擇,亦即顯示出沒有 ‘搜尋字串’ 內容的那一行! • 範例: • 將 last 當中,有出現 root 的那一行就取出來 • 與範例一相反,只要沒有 root 的就取出! • 在 last 的輸出訊息中,只要有 root 就取出,並且僅取第一欄 Linux基礎--Bash Shell

  43. 管線命令(續) • 將資料進行排序:sort [-t] [-k] [nr] • -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同; • -b :忽略最前面的空白字元部分; • -M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法; • -n :使用『純數字』進行排序(預設是以文字型態來排序的); • -r :反向排序; • -u :就是 uniq ,相同的資料中,僅出現一行代表; • -t :分隔符號,預設是 tab 鍵; • -k :以那個區間 (field) 來進行排序的意思, • 範例: • 個人帳號都記錄在 /etc/passwd 下,請將帳號進行排序。 • /etc/passwd 內容是以 : 來分隔的,我想以第三欄來排序,該如何? • 利用 last ,將輸出的資料僅取帳號,並加以排序 Linux基礎--Bash Shell

  44. 管線命令(續) • 將重複資料『行為單位』進行去除:uniq [-ic] • 參數: • -i :忽略大小寫字元的不同; • -c :進行計數 • 範例: • 使用 last 將帳號列出,僅取出帳號欄,進行排序後僅取出一位 • 呈上題,如果我還想要知道每個人的登入總次數呢? • wc [-lwm] • -l :僅列出行; • -w :僅列出多少字(英文單字); • -m :多少字元; • 範例: • 那個 /etc/man.config 裡面到底有多少相關字、行、字元數? • 我知道使用 last 可以輸出登入者,但是 last 最後兩行並非帳號內容,那麼請問,我該如何以一行指令串取得這個月份登入系統的總人次? Linux基礎--Bash Shell

  45. 管線命令(續) Linux基礎--Bash Shell

  46. 管線命令(續) • tee [-a] file • -a :以累加 (append) 的方式,將資料加入 file 當中! • 範例: • 可以讓我們將 last 的輸出存一份到 last.list 檔案中; • 將 ls -l /home 的資料存一份到 ~/homefile ,同時螢幕也有輸出訊息! • 呈上題,如果 ls -l /root 也要記錄到 ~/homefile ? Linux基礎--Bash Shell

  47. 管線命令(續) • tr 刪除或取代字元 • -d :刪除訊息當中的 SET1 這個字串; • -s :取代掉重複的字元! • 範例: • 範例一:將 last 輸出的訊息中,所有的小寫變成大寫字元: • last | tr '[a-z]' '[A-Z]' • 範例二:將 /etc/passwd 輸出的訊息中,將冒號 (:) 刪除 • cat /etc/passwd | tr -d ':' • 範例三:將 DOS 檔案的斷行字元 ^M 符號刪除: • cat /home/test/dostxt | tr -d '\r' > dostxt-noM Linux基礎--Bash Shell

  48. 管線命令(續) • col [-x] • 參數: • -x :將 tab 鍵轉換成對等的空白鍵 • 範例: • cat -A /etc/man.config • 此時會看到很多 ^I 的符號,那就是 tab • cat /etc/man.config | col -x | cat -A | more Linux基礎--Bash Shell

  49. 管線命令(續) • join [-ti12] file1 file2 • 參數: • -t :join 預設以空白字元分隔資料,並且比對『第一個欄位』的資料,如果兩個檔案相同,則將兩筆資料聯成一行 • -i :忽略大小寫的差異; • -1 :這個是數字的 1 ,『第一個檔案要用那個欄位來分析』的意思 • -2 :代表『第二個檔案要用那個欄位來分析』的意思。 • 範例: • 用 root 的身份,將 /etc/passwd 與 /etc/shadow 相關資料整合成一欄 • join -t ':' /etc/passwd /etc/shadow • 我們知道 /etc/passwd 第四個欄位是 GID ,那個 GID 記錄在 /etc/group 當中的第三個欄位,請問如何將兩個檔案整合 • join -t ':' -1 4 /etc/passwd -2 3 /etc/group Linux基礎--Bash Shell

  50. 管線命令(續) • paste [-d] file1 file2 • 參數: • -d :後面可以接分隔字元。預設是以 [tab] 來分隔的! • - :如果 file 部分寫成 - ,表示來自 standard input 的資料的意思。 • 範例: • 將 /etc/passwd 與 /etc/shadow 同一行貼在一起 • paste /etc/passwd /etc/shadow • 先將 /etc/group 讀出(用 cat),然後與範例一貼上一起!且僅取出前三行 • cat /etc/group|paste /etc/passwd /etc/shadow -|head -n 3 Linux基礎--Bash Shell

More Related