1、認識bash shellshell
一、登陸取得的shell就記錄在/etc/passwd這個文件內數組
可使用cat /etc/passwd查看bash
二、bash shell 功能網絡
a. 命令記憶能力(history),默認1000個,存在~/.bash_history文件less
b. 命令與文件補全功能(Tab鍵的好處)dom
【Tab】接在一串命令的第一個字的後面,則爲命令補全函數
【Tab】接在一串命令的第二個字之後時,則爲文件補齊。測試
c. 命令別名設置功能(alias), alias lm='ls -al'ui
d. 做業控制、前臺、後臺控制編碼
e. 程序腳本(shell script)
f. 通配符(Wildcard)
三、bash shell 的內置命令: type
語法:type [-tpa] name
參數:
type: 不加任何參數時, type會顯示name是外部命令仍是bash內置命令
-t: 當加入-t 參數時, type會將name如下面這些字眼顯示出它的意義:
file:表示爲外部命令;
alias: 表示該命令爲命令別名所設置的名稱
builtin : 表示該命令爲bash內置的命令功能
-p: 若是後面接的name爲外部命令時, 纔會顯示完整文件名
-a :會由PATH變量定義的路徑中,將全部含name的命令都列出來,包含alias
type主要在找出「執行文件」而不是通常文件名。因此,這個type也能夠用來做爲相似which命令的用途
2、shell 的變量功能
一、變量的顯示與設置: echo, unset
變量的顯示: echo ---》 echo $variable 或 echo ${varible}
變量的設置規則:
a. 變量與變量內容以一個等號「=」來鏈接,以下所示: myname=sam
b. 等號兩邊不能直接接空格符
c. 變量名稱只能是英文字母與數字,可是開頭字符不能是數字
d. 變量內容如有空格符可以使用雙引號" 或單引號 ' 將變量內容結合起來,可是雙引號內的特殊字符如$等,能夠保留本來的特性,單引號內的特殊字符則僅爲通常字符(純文本)
e.可用轉義字符「\」將特殊符號變成通常字符
f. 在一串命令中,還須要經過其餘的命令提供的信息,可使用反單引號。`命令` 或 $(命令),
特別注意,那個是鍵盤上方數字鍵1左邊那個按鍵,而不是單引號。
g. 若該變量爲了增長變量內容時, 則可用$變量名稱或¥{變量}累加內容,以下:
PATH=$PATH:/home/bin
h. 若該變量須要在其餘子進程執行,則須要以export來使變量變成環境變量:
"export PATH"
i. 一般大寫字符爲系統默認變量,自行設置變量可使用小寫字符, 方便判斷
j.取消變量: unset 變量名稱
子進程: 就是說在我目前這個shell的狀況下,去打開另外一個新的shell,新的那個shell就是子進程。在通常的狀態下,父進程的自定義變量是沒法再子進程內使用的。可是經過export將變量變成環境變量後,就可以在子進程下面應用了。
二、 環境變量的功能
查看環境量: env
常見的環境變量:
HOME: 表明用戶的主文件夾。
SHELL: 它告知咱們目前這個環境使用的shell是哪一個程序?Linux默認使用/bin/bash的
HISTSIZE: 這個與「歷史命令」有關,便是咱們曾經執行過的命令能夠被系統記錄下來,而記錄的「條數」則是由這個值來設置的。
MAIL:當咱們使用mail這個命令在收信時系統會去讀取的郵件信箱文件
PATH: 就是執行文件查找的路徑,目錄 與目錄中間以冒號(:)分隔,因爲文件的查找是依序由PATH的變量內的目錄來查詢,因此目錄的順序也是重要的。
LANG:語系數據
RANDOM: 這是「隨機數」的變量。在BASH的環境下,這個RANDOM變量的內容介於0~32767
set查看全部變量(含有環境變量與自定義變量)
a. PS1(提示符的設置):
這是PS1(數字的1, 不是英文字母),這個東西就是咱們的「命令提示符」。當咱們每次按下【Enter】鍵去執行某個命令後,最後要在次出現提示符時, 就會主動去讀取這個變量值了。上面PS1內顯示的是一些特殊符號,這些特殊符號能夠顯示不一樣的信息,每一個distributions的bash默認的PS1變量內容可能有些區別,你能夠用man bash 查詢一下PS1的相關說明,以理解下面的一些符號意義。
\d: 可顯示出「星期月日」的日期格式, 如「Mon Feb 2」
\H: 完整的主機名, 如「www.vbird.tsai」
\h: 僅去主機名在第一個小數點以前的名字, 如「www」
\t: 顯示時間,爲24小時格式的「HH:MM:SS」
\T: 顯示時間, 爲12小時格式的「HH:MM:SS」
\A: 顯示時間,爲24小時格式的「HH:MM」
\@:顯示時間, 爲12小時格式的「am/pm」樣式
\u: 目前用戶的帳號名稱,如「root」
\v: BASH的版本信息
\w: 利用basename函數取得工做目錄名稱,因此僅會列出最後一個目錄名
\#: 執行的第幾個命令
\$: 提示符,若是是root時,提示符爲#, 不然就是$
例: PS1='[\u@\h \w \A #\#]\$ ' --------》 [root@www /home/dmtsai 16:40 #12]#
b.$(關於本shell的PID)
「$」自己也是個變量。這個表明的是目前這個Shell的線程號,便是所謂的PID(Process ID)
c. ? (關於上個執行命令的回傳碼)
這個變量是上一個執行命令所傳回的值, 當咱們執行某些命令時, 這些命令都會回傳一個執行後的代碼。通常來講, 若是成功執行該命令,則會回傳一個0值。若是發生錯誤,則回傳一個非0值。
d. OSTYPE, HOSTTYPE, MACHTYPE(主機硬件與內核的等級)
export: 自定義變量轉成環境變量
export 變量名稱
三、影響顯示結果的語系變量(locale)
四、變量鍵盤讀取、數組與聲明: read, array, declare
a. read : 讀取來自鍵盤輸入的變量
read 【-pt】 variable
-p: 後面能夠接提示符
-t: 後面能夠接等待的「秒數」
b. declare/typeset
declare或typeset是同樣的功能,就是聲明變量的類型。
declare [-aixr] variable
參數:
-a: 將後面名爲variable的變量定義成爲數組(array)類型
-i: 將後面名爲variable的變量定義爲整數數字(integer)類型
-x: 用法與export同樣,就是將後面的variable變成環境變量, 注意將-變成+能夠進行「取消」操做,將環境變量變成通常變量
-r: 將變量設置成爲readonly類型,該變量不可被更改內容,也不能重設
因爲在默認的狀況下面, bash對於變量有幾個基本的定義:
a. 變量類型默認爲「字符串」, 因此若不指定變量類型, 則1+2爲一個「字符串」而不是「計算式」,
b. bash環境中的數值計算, 默認最多僅能到達整數類型,因此1/3結果是0
數組(arry)變量類型
var[index]=content
讀取: ${var[index]}
五、與文件系統及程序的限制關係: ulimit
bash能夠限制用戶的某些系統資源的,包括能夠打開的文件數量、可使用的CPU時間、可使用的內存總量等
ulimit [-SHacdfltu] [配額]
參數:
-H: hard limit 嚴格的設置,一定不能超過這個設置的數值
-S: soft limit 警告的設置,能夠超過這個設置值,可是若超過則有警告信息
-a: 後面不接任何參數,可列出全部的限制額度
-c: 當某些進程發生錯誤時,系統可能會將該進程在內存中的信息寫成文件(排錯用), 這種文件就被稱爲內核文件。此爲限制每一個內核文件的最大容量。
-f: 此shell能夠建立的最大文件容量(通常可能設置爲2GB)單位爲KB
-d: 進程可以使用的最大斷裂內存(segment)容量
-l: 可用於鎖定(lock)的內存量。
-t: 可以使用的最大CPU時間(單位爲秒)
-u: 單以用戶可使用的最大進程數量。
注意: 想要復原ulimit的設置最簡單的方法就是註銷再登錄,不然就是得要從新以ulimit設置才行。不過要注意的是通常身份用戶若是以ulimit設置了-f的文件大小,那麼他只能繼續減小文件的容量,不能增長文件的容量。
六、變量內容的刪除、替代與替換
變量內容的刪除與替換
變量設置方式 | 說明 |
${變量#關鍵字} | 若變量內容從頭開始的數據符合「關鍵字」, 則將符合的最短數據刪除 |
${變量##關鍵字} | 若變量內容從頭開始的數據符合「關鍵字」, 則將符合的最長數據刪除 |
${變量%關鍵字} | 若變量內容從尾向前的數據符合「關鍵字」,則將符合的最短數據刪除 |
${變量%%關鍵字} | 若變量內容從尾向前的數據符合「關鍵字」, 則將符合的最長數據刪除 |
${變量/舊字符串/新字符串} | 若變量內容符合「舊字符串」, 則第一個舊字符串被新字符串替換 |
${變量//舊字符串、新字符串} | 若變量內容符合「舊字符串」, 則所有舊字符串被新字符串替換 |
變量的測試與內容替換
在某些時刻咱們常常須要「判斷」某個變量是某存在,若變量存在則使用既有的設置,若變量不存在則給予一個經常使用的設置。
new_var=${old_var-content}
new_var: 新的變量,主要用來替換舊變量。新舊變量名稱其實常常是同樣的
old_var: 舊的變量, 被測試的選項
content: 變量的「內容」
注: new_var=${old_var:-content}
加上:後若變量內容爲空或者爲未設置,度可以之後面的內容替換
若是想要將舊變量內容也一塊兒替換掉的話,那麼就是用等號(=):
如: unset str; var=${str=newvar} --->var=newvar, str=newvar
str="oldvar"; var=${str=newvar}--->var=newvar, str=oldvar
若是隻想知道,若是舊變量不存在時, 整個測試就告知我「有錯誤」,此時就可以使用問號「?」
如: var=${str?無此變量}
3、命令別名與歷史命令
一、命令別名設置:alias, unalias
例: alias rm='rm -i'
alias 列出全部命令別名
unalias rm 解除命令別名
二、歷史命令:history
history [n]
history [-c]
history [-raw] histfiles
參數:
n: 數字,是要列出最近的n條命令行的意思
-c: 將目前的shell中的全部history內容所有消除。
-a: 將目前新增的history命令新增入histfiles中, 若沒有加histfiles,默認寫入~/.bash_history
-r: 將histfiles的內容讀到目前這個shell的history記憶中
-w: 將目前的history記憶內容寫入histfiles中
有關history的命令:
!number :執行第幾條命令
!command : 由最近的命令向前搜尋命令串開頭爲command的那個命令,並執行
!! : 就是執行上一個命令(至關於按up鍵後,按enter鍵)
4、Bash Shell的操做環境
一、路徑與命令查找順序
基本上,命令運行的順序能夠這樣看:
一、以相對/絕對路徑執行命令,例如: "/bin/ls"或「./ls」
二、由alias找到該命令來執行
三、由bash內置的(builtin)命令來執行
四、經過$PATH這個變量的順序找到的第一個命令來執行
能夠經過type -a command 查看執行順序
二、bash的登陸與歡迎信息:/etc/issue, /etc/motd
a. 終端機接口(tty1~tty6)登陸時的登陸界面: /etc/issue登陸界面提示符設置文件
issue內的各個代碼意義 | |
\d | 本地端時間的日期 |
\l | 顯示第幾個終端機接口 |
\m | 顯示硬件的等級(i386/i486/i586/i686...) |
\n | 顯示主機的網絡名稱 |
\o | 顯示domain name |
\r | 操做系統的版本(至關於rname -r) |
\t | 顯示本地端的時間 |
\s | 操做系統的名稱 |
\v | 操做系統的版本 |
若是你想要讓用戶登陸後取得一些信息,例如你想要讓你們都知道的信息,那麼能夠將信息加入/etc/motd裏面去:以下
三、bash的環境配置文件
(1)、 login與non-login shell
login shell:取得bash完整的登陸流程中,就稱爲login shell.
non-login shell:
login shell 只會讀取這兩個配置文件:
/etc/profile:這是系統總體的設置,最好不要修改此配置文件
~/.bash_profile或~/.bash_login或~/.profile: 屬於用戶我的設置
/etc/profile(login shell纔會讀):
這個文件設置的變量主要有:
PATH:會依據UID決定PATH變量要不要含有sbin的系統命令目錄
MAIL: 依據帳號設置好用戶的mailbox到/var/spool/mail/帳號名
USER: 根據用戶的帳號設置此變量內容
HOSTNAME: 依據主機的hostname命令決定此變量內容
HISTSIZE:歷史命令記錄條數
/etc/profile不止會作這些事, 還會去調用外部的設置數據,下面這些數據會依序被調用進來:
a. /etc/inputrc: 這個文件會主動判斷用戶有沒有自定義輸入的按鍵功能,若是沒有,/etc/profile就會決定設置「INPUTRC=/etc/inputrc」這個變量。此文件內容爲bash的熱鍵、【Tab】鍵有沒有聲音等的數據。
b. /etc/profile.d/*.sh: 只要在/etc/profile.d/這個目錄內且擴展名爲.sh,另外用戶可以具備r的權限,那麼該文件就會被/etc/profile調用。這個目錄下面的文件規定了bash操做接口的顏色、語系、ll與ls命令別名、vi的命令別名、which的命令別名等。若是須要幫全部用戶設置一些共享的命令別名時,能夠在這個目錄下面自行建立擴展名爲.sh的文件,並將所須要的數據寫入便可。
c. /etc/sysconfig/i18n: 這個文件是由/etc/profile.d/lang.sh調用的。這也是咱們決定bash默認使用何種語系的重要配置文件。文件裏最重要的就是LANG這個變量的設置。
注意:bash的login shell狀況下所讀取的總體環境配置文件其實只有/etc/profile,可是/etc/profile還會調用其餘的配置文件。
其實bash在都玩了總體環境設置的/etc/profile並藉此調用其餘配置文件後,接下來則是會讀取用戶的我的配置文件。在login shell的bash環境中,所讀取的我的偏好配置文件其實主要有三個,依序分別是:
~/.bash_profile, ~/.bash_login, ~/.profile, 其實bash的loginshell設置只會讀取上面三個文件的其中一個,而讀取的順序則是依照上面的順序。
讀出順序以下:
(2):source: 讀入環境配置文件的命令
source 配置文件名
. 配置文件名
利用source或小數點(.)均可以將配置文件的內容讀進目前的shell環境中。
(3): non-login shell:
當你取得non-login shell時, 該bash配置文件僅會讀取~/.bashrc而已
(4): /etc/bashrc幫咱們的bash定義下面的數據:
根據不一樣的UID規定umask的值
依據不一樣的UID規定提示符(就是PS1變量)
調用/etc/profile.d/*.sh的設置
(5)、其餘相關配置文件
a、 /etc/man.config: 這個文件的內容規定了使用man的時候man page的路徑到哪裏去尋找。
b、~/.bash_history: 每次登陸bash後,bash會先讀取這個文件,將全部的歷史命令讀入內存
c、 ~/.bash_logout: 這個文件記錄當咱們註銷bash後系統再幫咱們作完什麼操做後才離開
四、終端機的環境設置: stty, set
a、 查閱目前的一些按鍵內容: stty [-a]
參數: -a : 將目前全部的stty參數列出來
設置熱鍵: 如 stty erase ^h ^h--->[ctrl]+h
eof: End of file 的意思,表明結束輸入
erase: 向後刪除字符
intr: 送出一個interrupt(中斷)信號給目前正在運行的程序
kill: 刪除在目前命令行上的全部文字
quit: 送出一個quit的信號給目前正在運行的進程
start: 在某個進程中止後,從新啓動它的輸出
stop: 中止目前屏幕的輸出
susp: 送出一個terminal stop的信號給正在運行的進程
set 能夠幫咱們設置整個命令輸出/輸入的環境。例如記錄歷史命令、顯示錯誤內容等。
參數:
-u: 默認不啓用,若啓用後,當使用未設置時,會顯示錯誤信息。
-v: 默認不啓用,若啓用後,在訊息被輸出前,會先顯示信息的原始內容
-x: 默認不啓用,若啓用後,在命令被執行前,會顯示命令內容(前面有++符號)
-h: 默認啓用,與歷史命令有關
-H: 默認啓用,與歷史命令有關
-m: 默認啓用,與工做管理有關
-B:默認啓用,與括號[]的做用有關
-C: 默認不啓用,使用>等時, 則若文件存在時,該文件不會被覆蓋。
b 、顯示目前全部的set設置值: echo $- , 默認爲himBH
c、 另外咱們還有其餘的按鍵設置功能,就是在前一小節提到的/etc/inputrc這個文件裏面設置。
cat /etc/inputrc
d、 bash默認的組合鍵給它彙整如表:
組合按鍵 | 執行結果 |
Ctrl+C | 終止目前的命令 |
Ctrl+D | 輸入結束(EOF),例如郵件結束的時候 |
Ctrl+ M | 就是Enter |
Ctrl + S | 暫停屏幕的輸出 |
Ctrl+ Q | 恢復屏幕的輸出 |
Ctrl+U | 在提示符下,將整行命令刪除 |
Ctrl+ Z | 暫停目前的命令 |
五、通配符與特殊符號
a、bash中的通配符
符號 | 意義 |
* | 表明0個到無窮多個任意字符 |
? | 表明必定有一個任意字符 |
[] | 一樣表明必定有一個在中括號內的字符(非任意字符)。例如[abc]表明必定有一個字符,多是abc中的任一個 |
[-] | 如有減號在中括號內時,表明在編碼順序內的全部字符,例如[0-9]表明0到9之間的全部數字,由於數字的語系編碼是連續的 |
[^] | 若中括號內的第一個字符爲指數符號(^),那表示原向選擇,例如[^abc]表明必定有一個字符,只要是非a,b,c的其餘字符就接受的意思 |
特殊字符:
符號 | 內容 |
# | 批註符號,這個最常被使用在script當中,視爲說明。其後的數據均不執行 |
\ | 轉義字符,將「特殊字符或通配符」還原成通常字符 |
| | 管道(pipe), 分隔兩個管道命令的界定 |
; | 連續命令執行分隔符,連續性命令的界定(注意,與管道命令不相同) |
~ | 用戶的主文件 |
$ | 使用變量前導符,便是變量以前須要加的變量替代值 |
& | 做業控制(job control), 將命令變成背景下工做 |
! | 邏輯運算意義上的「非」的意思 |
>,>> | 數據流重定向,輸出導向,分別是「替換」與「累加」 |
<,<< | 數據重定向, 輸入導向 |
'' | 單引號,不具備變量置換的功能 |
"" | 具備變量置換的功能 |
`` | 兩個「`」中間爲能夠先執行的命令,也可以使用$() |
() | 在中間爲子shell的起始於結束 |
{} | 在中間爲命令塊的組合 |
5、數據流重定向
數據重定向: 就是將某個命令執行後要出如今屏幕上的數據傳輸到其餘的地方,例如文件或者是設備。
一、什麼是數據流重定向
standard output 與 standard error output:
標準輸出指的是命令執行所回傳的正確的信息, 而標準錯誤輸出可理解爲命令執行失敗後,所回傳的錯誤信息。
數據重定向能夠將standard output(簡稱stdout)與standard error output(簡稱stderr)分別傳送到其餘的文件或設備區,分別傳送所用的特殊字符則以下所示:
a、 標準輸入(stdin): 代碼爲0,使用<或<<
b、 標準輸出(stdout): 代碼爲1, 使用>或>>
c、 標準錯誤輸出(stderr): 代碼爲2, 使用2> 或2>>
覆蓋於累加輸出:
單個>:覆蓋 兩個>(>>): 累加
a、 /dev/null垃圾桶黑洞設備與特殊寫法:
/dev/null能夠吃掉任何導向這個設備的信息。
如 find /home -name .bashrc 2> /dev/null
b、將正確與錯誤數據統統寫入同一個文件的正確寫法:
find /home -name .bashrc >list 2>&1
find /home ianme .bashrc &>list
c、 standard input: < 與 <<:
<: 將本來須要由鍵盤輸入的數據改由文件內容來替代。
例如: cat >file <~/.bashrc
<<:表明結束輸入的意思
二、命令執行的判斷依據: ; , &&, ||
a、cmd;cmd(不考慮命令相關性的連續命令執行)
b、$?(命令回傳碼)與&& 或 ||
cmd1 && cmd2 | 若cmd1執行完畢且正確執行($?=0), 則執行cmd2 |
若cmd1執行完畢且爲錯誤($?!=0), 則不執行cmd2 | |
cmd1 || cmd2 | 若cmd1執行完畢且正確執行($?=0), 則不執行cmd2 |
若cmd1執行完畢且爲錯誤($?!=0), 則執行cmd2 |
6、管道命令(pipe)
管道命令: 「|」僅能出來經由前面一個命令傳來的正確信息,也就是standard output的信息,對於stdandard error並無直接處理的能力。在每一個管道後面接的第一個數據一定是「命令」, 並且這個命令必需要可以接收standard input的數據才行,這樣的命令才能夠是「管道命令」,如less,more, head, tail等都是能夠接收standard input的管道命令。
管道命令主要有兩個比較須要注意的地方:
管道命令必需要可以接收來自前一個命令的數據成爲standard input繼續處理才行
管道命令僅會處理standard output, 對於standard error output會予以忽略
二、選取命令: cut, grep
a、cut命令將一段信息的某一段「切」出來,處理的信息以「行」爲單位。
cut -d '分隔字符' -f fields
cut -c 字符範圍
參數:
-d: 後面接分隔字符, 與-f一塊兒使用
-f: 依據-d的分隔字符將一段信息切割成爲數段,用-f取出第幾段的意思
-c: 以字符的單位取出固定字符區間
b、 grep:分析一行信息,若當中有咱們所須要的信息,就將該行拿出來,簡單的語法是這樣的
grep [-acinv] [--color=auto] '查找字符串' filename
參數:
-a: 將binary文件以text文件的方式查找數據
-c: 計算找到‘查找字符串’的次數
-i: 忽略大小寫的不一樣,因此大小寫視爲相同
-n: 順便輸出行號
-v: 反向選擇,即顯示出沒有‘查找符號’內容的那一行
--color=auto: 能夠將找到的關鍵字部分加上顏色顯示
三、排序命令:sort, wc, uniq
a、sort: 幫咱們進行排序,並且能夠依據不一樣的數據類型來排序。例如數字與文字的排序就不同。此外排序的字符與語系的編碼有關。
sort [-fbMnrtuk] [file or stdin]
參數:
-f: 忽略大小寫的差別, 例如A與a視爲編碼相同
-b: 忽略最前面的空格符部分
-M: 以月份的名字來排序,例如JAN, DEC等的排序方法
-n: 使用「純數字」進行排序(默認是以文字類型排序)
-r: 反向排序
-u: 就是uniq,相同的數據中,僅出現一行表明
-t: 分隔符, 默認是用【tab】鍵來分隔
-k: 以那個區間(field)來進行排序的意思
例如: /etc/passwd 內容以: 來分隔,我想以第三列來排序
cat /etc/passwd | sort -t ':' -k 3
b、uniq
uniq [-ic]
參數:
-i: 忽略大小寫字符的不一樣
-c: 進行計數
c、 wc
wc [-lwm]
參數:
-l: 僅列出行
-w: 僅列出多少字(英文單字)
-m: 多少字符
三、雙向重定向: tee
tee會同時將數據流送與文件與屏幕(screen);而輸出到屏幕的,其實就是stdout,可讓下個命令繼續處理:
tee [-a] file
參數:
-a: 以累加的方式, 將數據加入file當中
如: ls -l /home | tee ~/homefile | more
將ls 的數據存一份到~/homefile,同時屏幕也有輸出信息
四、字符轉換命令: tr, col, join, paste, expand
a、 tr: 能夠用來刪除一段信息當中的文字, 或者是進行文字信息的替換
tr [-ds] SET1 ...
參數:
-d: 刪除信息當中的SET1這個字符串
-s: 替換掉重複的字符
例: 將last輸出的信息中全部的小寫字符變成大寫字符
last | tr '[a-z]' '[A-Z]'
b、 col: 能夠用來進行簡單處理,如將【tab】按鍵替換成爲空格鍵
col [-xb]
參數:
-x: 將tab鍵轉換成對等的空格鍵
-b: 在文字內有反斜槓(/)時, 僅保留反斜槓最後接的那個字符
c、join : 將兩個文件當中有相同數據的那一行加在一塊兒。
jion [-ti12] file1 file2
參數:
-t: join默認以空格符分隔數據,而且對比「第一個字段」的數據
-i: 忽略大小寫的差別
-1: 這個是數字的1, 表明第一個文件要用哪一個字段來分析的意思
-2: 表明第二個文件要用哪一個字段來分析的意思
例: /etc/passwd的第四個字段是GID, 那個GID記錄在/etc/group當中的第三個字段,以GID整合兩個文件
join -t ':' -1 4 /etc/passwd -2 3 /etc/group
注意: 在使用join以前,你所須要處理的文件應該要先通過排序(sort)處理,不然有些對比的項目會被略過。
d、 paste: 介質將兩行貼在一塊兒,且中間以【tab】鍵隔開而已
paste [-d] file1 file2
參數:
-d: 後面能夠接分隔字符,默認是以【tab】來分隔
-: 若是file部分寫成-, 表示來自standard iput的數據的意思
e、 expand: 將【tab】按鍵轉成空格鍵, 能夠這樣作:
expand [-t] file
參數:
-t: 後面能夠接數字。通常來講,一個【tab】按鍵能夠用8個空格鍵替換,咱們也能夠自行定義一個【tab】表明多少個字符
注: unexpand: 將空白轉成【tab】命令
五、切割命令:split
若是你有文件太大,致使一些攜帶式設備沒法複製的問題。split能夠將一個大文件依據文件大小或行數來切割成爲小文件。
split [-bl] file PREFIX
參數:
-b: 後面可接欲切割的文件大小,可加單位,例如b,k, m等
-l: 以行數來進行切割
PREFIX: 可做爲切割文件的前導文字
六、參數代換: xargs
產生某個命令的參數的意思。xargs能夠讀入stdin的數據,而且以空格符或斷行字符進行分辨,將stdin的數據分隔成爲arguents。
xargs [-0epn] command
-0: 若是輸入的stdini含有特殊字符, 例如`, \, 空格鍵字符時, 這個參數能夠將它還原成通常字符。這個參數能夠用於特殊狀態
-e: 這個是EOF(end of file)的意思。後面能夠接一個字符串,當xargs分析到這個字符串時,就會中止繼續工做
-p: 在執行每一個命令的參數時, 都會詢問用戶的意思
-n: 後面接次數,每次command命令執行時, 要使用幾個參數的意思
當xargs後面沒有接任何的命令時, 默認是以echo來進行輸出
例如: 將/etc/passwd內的第一列取出,僅取三行, 使用finger這個命令將每一個帳號內容顯示出來
cut -d ':' -f 1 /etc/passwd | head -n 3 | xargs finger
七、關於減號-的用途
在管道命令中,常常會使用到前一個命令的stdout做爲此次的stdin,某些命令須要用到文件名來進行處理時,該stdin與stdout能夠利用減號「-」來替代,舉例以下:
tar -cvf - /home | tar -xvf -
將/home裏面的文件打包,但打包的數據不是記錄到文件,而是傳送到stdout;通過管道後,將tar -cvf - /home傳送給後面的tar -xvf -後面的這個-則是取用前一個命令的stdout