shell基礎知識
1.shell簡介
- shell是系統跟計算機硬體互動時使用的中間媒體,它隻是系統的一個工具。在shell和計算機硬體還有一層東西那就是–系統核心,系統核心在系統中就像大腦至于人類一樣的作用,shell則更像是人類的五官。
- 使用者直接面對的不是計算機硬體而是shell,使用者把指令告訴shell,然後shell再傳輸給系統核心,接着核心再去支配計算機硬體去執行各種操作
- centOS預設安裝的shell版本是bash
-
記錄指令曆史:
- 我們執行過的指令Linux都會記錄,預設是1000條曆史指令,這些指令儲存在使用者家目錄的.bash_history檔案中
- !符号是與指令曆史有關的一個特殊字元。
- !!:連續兩個!表示執行上一條指令
- !n:這裡的n是數字,表示執行指令曆史中的第n條指令
- ![字元串]:表示執行以字元串内容開頭的指令
-
别名:
-
alias是bash所特有的功能之一。
可以通過alias将一個常用并且很長的指令去另外一個比較簡單的指令
若不想用了,可以通過unalias指令解除别名功能
- 指令格式:alias [指令别名] = [‘具體的指令’](注意有引号)
-
-
通配符
- 在bash下,可以使用*來比對零個或多個字元,用?比對一個字元
-
輸入/輸出重定向
- 輸入重定向用于改變指令的輸入,輸出重定向用于改變指令的輸出
- 輸入重定向的指令是 < ,輸出重定向的指令是 > ,追加重定向的指令是 >>
- 例子:echo“123” > 1.txt
-
管道符
- 管道符 | ,它用于将前一個指令的輸出作為後一個指令的輸入。
- 例:cat /etc/passwd|wc -l
-
作業控制
- 當運作程序時,你可以使它暫停(ctrl+z),然後使用fg指令恢複,或是利用bg指令使它到背景運作,或者是按(ctrl+c)來使它終止
- 在進行作業控制時,可以通過指令jobs來檢視被暫停的或者是在背景運作的任務
-
變量
-
環境變量PATH是shell預設的一個值。通常shell預設的變量都是大寫的
PATH代替了所有常用指令的絕對路徑的設定。
- 定義:變量就是使用 一個較簡單的字元串來代替某些具有特殊意義的設定以及資料。
-
-
指令env
- 使用指令env可列出系統預設的全部系統變量
- 常見的環境變量:
- HOSTNAME:表示主機的名稱
- SHELL:表示目前使用者的shell類型
- HISTSIZE:表示曆史記錄數
- MAIL:表示目前使用者的郵件存放目錄
- PATH:該變量決定了shell将到哪些目錄中尋找指令或程式
- PWD:表示目前目錄
- LANG:這是與語言相關的環境變量,多語言環境可以修改此環境變量
- HOME:表示目前使用者的家目錄
- LOGNAME:表示目前使用者的登入名。
-
指令set
- set指令與env指令類似,也可以輸出環境變量,同時也能顯示使用者自定義的變量
- 自定義變量隻能在目前的shell中生效,使用bash在打開一個shell後,之前預設的變量會不存在。如果想讓設定的環境變量一直生效?
- 一是允許系統内所有使用者登入後都能使用該變量。具體的操作方法是在/etc/profile檔案的最後一行加入export [預設自定義變量],然後允許source /etc/profile就可以生效了
- 二是僅允許目前使用者使用該變量。具體的操作方法是在主使用者目錄下的.bashrc檔案的最後一行加入export [預設自定義變量],然後允許source 。bashrc就可以生效了
- 若想取消某個變量隻要輸入 unset 變量名 即可
系統環境變量與個人環境變量的配置檔案
- /etc/profile:這個檔案預設了幾個重要的變量,例如PATH,USER,LOGNAME,MAIL等
- /etc/bashrc:這個檔案主要預設umask以及PS1。這個PS1是我們在輸入指令時前面的那串字元。例:[[email protected] ~] #。 \u是使用者,\h是主機名,\w是指目前目錄,$是指字元#
- 隐藏檔案:
- .bash_profile:該檔案定義了使用者的個人化路徑與環境變量的檔案名稱
- .bashrc:該檔案包含專屬自己的shell和bash資訊
- .bash_history:該檔案用于記錄指令曆史
- .bash_logout:當退出shell時,會執行該檔案。可以在該檔案中存放一些清理的工作
Linux shell中的特殊符号
- *:代表零個或多個任意字元
- ?:代表一個任意的字元
- #:注釋符号
- \:脫義字元,這個字元會将後面的特殊字元還原為普通字元
- |:管道符:将前面指令的輸出作為後面指令的輸入
-
指令cut:
- 作用:用來截取某一個字段
- 指令格式:cut -d ‘分割字元’ [-cf] n(數字)
- 參數選項:
- -d:後面跟分隔字元,要用單引号括起來
- -c:後面接的是第幾個字元
- -f:後面接的是第幾個區域(列)
-
指令sort:
- 作用:用作排序。
- 指令格式:sort [-t 分隔符] [-kn1,n2] [-nru]
- 參數選項:
- -t:後面跟分隔字元。
- -n:表示使用純數字排序
- -r:表示反向排序
- -u:表示去重複
- -kn1,n2:表示由n1區間排序到n2區間
-
指令wc:
- 作用:wc指令用于統計文檔的行數,字元數或詞數
- 參數選項:
- -l:統計行數
- -m:統計字元數
- -w:統計詞數
-
指令uniq:
- 作用:用來删除重複的行。
- 參數選項:
- -c:用來統計重複的行數,并把行數寫在前面
- 在使用uniq前,必須先給檔案排序,否則不管用
-
指令tee:
- tee指令後面跟檔案名,作用類似于重定向 >
-
指令tr:
- 作用:用于替換字元,常用來處理文檔中的特殊符号。
- 指令格式:tr [被替換字元] [替換字元]
- 參數選項:
- -d:表示删除某個字元,後面跟要删除的字元
- -s:表示删除重複的字元
-
指令split:
- 作用:用來切割文檔
- 參數選項:
-
-b:表示依據大小來分割文檔,機關為byte。
split -b 切割大小 切割檔案 (目标檔案名)
-
-l:表示依據行數來分割文檔
split -l 行數 切割檔案 (目标檔案名)
-
-
特殊符号
- 符号$可作為變量前面的辨別符
-
符号;作為指令與指令之間的分隔符,可以在一行運作多個指令
command1 ;command2,不管command1是否成功都執行command2
- 符号~表示使用者的家目錄
- 符号&:若想把一條指令放到背景執行,則需要加上符号&
- 符号[]:中括号内為字元組合,代表字元組合中的任意一個
- 符号&&:command1 && command2,不管command1成功後執行command2,否則不執行
- 符号||:command1 && command2,不管command1成功後不執行command2,否則執行command2