一、認識bash shell
1、登錄取得的shell就記錄在/etc/passwd這個文件內
可以使用cat /etc/passwd查看
2、bash shell 功能
a. 命令記憶能力(history),默認1000個,存在~/.bash_history文件
b. 命令與文件補全功能(Tab鍵的好處)
【Tab】接在一串命令的第一個字的后面,則為命令補全
【Tab】接在一串命令的第二個字以后時,則為文件補齊。
c. 命令別名設置功能(alias), alias lm='ls -al'
d. 作業控制、前台、后台控制
e. 程序腳本(shell script)
f. 通配符(Wildcard)
3、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命令的用途
二、shell 的變量功能
1、變量的顯示與設置: 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將變量變成環境變量后,就能夠在子進程下面應用了。
2、 環境變量的功能
查看環境量: 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 變量名稱
3、影響顯示結果的語系變量(locale)
4、變量鍵盤讀取、數組與聲明: 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]}
5、與文件系統及程序的限制關系: 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的文件大小,那么他只能繼續減少文件的容量,不能增加文件的容量。
6、變量內容的刪除、替代與替換
變量內容的刪除與替換
變量設置方式 | 說明 |
${變量#關鍵字} | 若變量內容從頭開始的數據符合“關鍵字”, 則將符合的最短數據刪除 |
${變量##關鍵字} | 若變量內容從頭開始的數據符合“關鍵字”, 則將符合的最長數據刪除 |
${變量%關鍵字} | 若變量內容從尾向前的數據符合“關鍵字”,則將符合的最短數據刪除 |
${變量%%關鍵字} | 若變量內容從尾向前的數據符合“關鍵字”, 則將符合的最長數據刪除 |
${變量/舊字符串/新字符串} | 若變量內容符合“舊字符串”, 則第一個舊字符串被新字符串替換 |
${變量//舊字符串、新字符串} | 若變量內容符合“舊字符串”, 則全部舊字符串被新字符串替換 |
變量的測試與內容替換
在某些時刻我們經常需要“判斷”某個變量是某存在,若變量存在則使用既有的設置,若變量不存在則給予一個常用的設置。
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?無此變量}
三、命令別名與歷史命令
1、命令別名設置:alias, unalias
例: alias rm='rm -i'
alias 列出所有命令別名
unalias rm 解除命令別名
2、歷史命令: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鍵)
四、Bash Shell的操作環境
1、路徑與命令查找順序
基本上,命令運行的順序可以這樣看:
1、以相對/絕對路徑執行命令,例如: "/bin/ls"或“./ls”
2、由alias找到該命令來執行
3、由bash內置的(builtin)命令來執行
4、通過$PATH這個變量的順序找到的第一個命令來執行
可以通過type -a command 查看執行順序
2、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里面去:如下
3、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后系統再幫我們做完什么操作后才離開
4、終端機的環境設置: 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 | 暫停目前的命令 |
5、通配符與特殊符號
a、bash中的通配符
符號 | 意義 |
* | 代表0個到無窮多個任意字符 |
? | 代表一定有一個任意字符 |
[] | 同樣代表一定有一個在中括號內的字符(非任意字符)。例如[abc]代表一定有一個字符,可能是abc中的任一個 |
[-] | 若有減號在中括號內時,代表在編碼順序內的所有字符,例如[0-9]代表0到9之間的所有數字,因為數字的語系編碼是連續的 |
[^] | 若中括號內的第一個字符為指數符號(^),那表示原向選擇,例如[^abc]代表一定有一個字符,只要是非a,b,c的其他字符就接受的意思 |
特殊字符:
符號 | 內容 |
# | 批注符號,這個最常被使用在script當中,視為說明。其后的數據均不執行 |
\ | 轉義字符,將“特殊字符或通配符”還原成一般字符 |
| | 管道(pipe), 分隔兩個管道命令的界定 |
; | 連續命令執行分隔符,連續性命令的界定(注意,與管道命令不相同) |
~ | 用戶的主文件 |
$ | 使用變量前導符,即是變量之前需要加的變量替代值 |
& | 作業控制(job control), 將命令變成背景下工作 |
! | 邏輯運算意義上的“非”的意思 |
>,>> | 數據流重定向,輸出導向,分別是“替換”與“累加” |
<,<< | 數據重定向, 輸入導向 |
'' | 單引號,不具有變量置換的功能 |
"" | 具有變量置換的功能 |
`` | 兩個“`”中間為可以先執行的命令,也可使用$() |
() | 在中間為子shell的起始於結束 |
{} | 在中間為命令塊的組合 |
五、數據流重定向
數據重定向: 就是將某個命令執行后要出現在屏幕上的數據傳輸到其他的地方,例如文件或者是設備。
1、什么是數據流重定向
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
<<:代表結束輸入的意思
2、命令執行的判斷依據: ; , &&, ||
a、cmd;cmd(不考慮命令相關性的連續命令執行)
b、$?(命令回傳碼)與&& 或 ||
cmd1 && cmd2 | 若cmd1執行完畢且正確執行($?=0), 則執行cmd2 |
若cmd1執行完畢且為錯誤($?!=0), 則不執行cmd2 | |
cmd1 || cmd2 | 若cmd1執行完畢且正確執行($?=0), 則不執行cmd2 |
若cmd1執行完畢且為錯誤($?!=0), 則執行cmd2 |
六、管道命令(pipe)
管道命令: “|”僅能出來經由前面一個命令傳來的正確信息,也就是standard output的信息,對於stdandard error並沒有直接處理的能力。在每個管道后面接的第一個數據必定是“命令”, 而且這個命令必須要能夠接收standard input的數據才行,這樣的命令才可以是“管道命令”,如less,more, head, tail等都是可以接收standard input的管道命令。
管道命令主要有兩個比較需要注意的地方:
管道命令必須要能夠接收來自前一個命令的數據成為standard input繼續處理才行
管道命令僅會處理standard output, 對於standard error output會予以忽略
2、選取命令: 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: 可以將找到的關鍵字部分加上顏色顯示
3、排序命令: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: 多少字符
3、雙向重定向: tee
tee會同時將數據流送與文件與屏幕(screen);而輸出到屏幕的,其實就是stdout,可以讓下個命令繼續處理:
tee [-a] file
參數:
-a: 以累加的方式, 將數據加入file當中
如: ls -l /home | tee ~/homefile | more
將ls 的數據存一份到~/homefile,同時屏幕也有輸出信息
4、字符轉換命令: 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】命令
5、切割命令:split
如果你有文件太大,導致一些攜帶式設備無法復制的問題。split可以將一個大文件依據文件大小或行數來切割成為小文件。
split [-bl] file PREFIX
參數:
-b: 后面可接欲切割的文件大小,可加單位,例如b,k, m等
-l: 以行數來進行切割
PREFIX: 可作為切割文件的前導文字
6、參數代換: 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
7、關於減號-的用途
在管道命令中,經常會使用到前一個命令的stdout作為這次的stdin,某些命令需要用到文件名來進行處理時,該stdin與stdout可以利用減號“-”來替代,舉例如下:
tar -cvf - /home | tar -xvf -
將/home里面的文件打包,但打包的數據不是記錄到文件,而是傳送到stdout;經過管道后,將tar -cvf - /home傳送給后面的tar -xvf -后面的這個-則是取用前一個命令的stdout