Bash shell

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

相關文章
相關標籤/搜索