《鳥哥的linux私房菜 基礎篇》第十一章讀書筆記(部分)

第十一章 認識與學習bash

爲什麼學習shell:不同固定distribution中的shell都是一樣的;遠程管理中,命令行界面比較快;管理系統很方便

我們常用的一類shell爲Bourne Again SHell (bash).

支持的shell記錄在/etc/shells文件中
登陸取得的shell記錄在/etc/passwd文件中,不同的用戶所取得的shell是不一樣的。root一般爲bash。

history命令,可以查詢曾經執行過的命令
~/.bash_history中記錄了前一次登陸以前所執行過的命令,至於這一次登陸所執行的命令都被暫存在臨時內存中,當你成功註銷系統後,該命令纔會記錄到.bash_history中。但無法記錄時間

[tab]接在一串命令的第一個字後面,則爲命令補全;
[tab]接在一串命令的第二個字後面,則爲文件不全;

命名別名設置功能(alias):在命令行中輸入alias,既可以知道當前的命名別名有哪些,也可以直接執行命令來設置命名別名,例如alias lm='ls -al'
取消命令別名:unalias lm

通配符:例如ls -l /usr/bin/X*  該目錄下查找以X開頭的文件

如果命令行太長,可以利用反斜槓\來進行換行,其實是一個轉義[\enter],中間沒有空格。

echo,變量的顯示,需在變量前加上$符號,echo $variable,如echo $PATH或echo ${PATH}也可以
設置變量的內容:變量名=內容 即可
等號兩邊若有空格,需要用雙引號或單引號括起來,雙引號保留了原本的特性,單引號裏面爲一般字符(純文本)
變量名開頭不能爲數字

爲變量增加內容:如PATH="$PATH":/home/bin
若該變量需要在其他子進程執行,則需要以export來使變量稱爲環境變量; export PATH
通常大寫字符爲系統默認變量,自行設置變量可以使用小寫字符
取消變量:unset 變量名稱,如unset myname

#bash進入子進程。這裏的子進程是在目前這個shell的情況下,去打開另一個新的shell,新的shell就是子進程。一般的狀態下,父進程的自定義變量是無法再子進程內使用的,但通過export將變量編程環境變量後,就能夠在子進程下使用了。

反單引號(`)之內的命令將會被先執行,而其執行出來的結果將作爲外部的輸入信息。

env  查看環境變量。它是environment的縮寫
  • HOME  用戶的主文件夾cd ~
  • SHELL  使用的shell是哪個程序,默認/bin/bash
  • HISTSIZE  記錄歷史命令的條數設置
  • MAIL  在收信時系統會去讀取郵箱文件
  • PATH  執行文件查找的路徑,目錄順序也很重要
  • LANG  語系數據。一般中文編碼爲zh_CN.UTF-8
  • RANDOM  "隨機數"的變量。隨機數生成器即/dev/random文件,可以挺過這個隨機數文件相關的變量($RANDOM)來隨機取得隨機數值。BASH下,它的範圍是0~32767。如果要去0~9之間的數值,利用declare:declare -i number=$RAMDOM*10/32768 ; echo $number
set  查看所有變量(包括環境變量與自定義變量)

$ 本身也是個變量,表示本shell的PID,echo $$。
? 也是一個特殊的變量,它是上一個執行的命令所回傳的值。上一個命令成功執行,回傳爲0,則echo $?會顯示0.否則顯示相應的錯誤代碼
 
當你登陸linux並取得一個bash之後,這個bash就是一個獨立的進程。接下來你在這個bash下面所執行的任何命令都是由這個bash所衍生出來的,那些被執行的命令就被稱爲子進程。

環境變量與自定義變量的區別在於是否會被子進程所繼續使用。
子進程僅會繼承父進程的環境變量,子進程不會繼承父進程的自定義變量。
export 變量名稱”  設置環境變量   
若沒有接變量名稱,則會把所有的環境變量顯示出來


locale -a 顯示linux支持的語系
locale 不加參數,顯示當前的語系信息
語系文件放置在/usr/lib/locale/這個目錄中。整體系統默認的語系定義在/etc/sysconfig/i18n文件中

變量鍵盤讀取、數組與聲明:read, array, declare
read [-pt] variable,由鍵盤讀取變量的內容
-p:後面接提示符
-t:後面接等待的秒數,不會一直等待用戶

ulimit命令:可以限制用戶的某些系統資源,包括打開的文件數量、可以使用的CPU時間、可以使用的內存總量等。

變量內容的刪除、替代與轉換,暫時略過

路徑或命令查找順序:先alias,再builtin(bash內置的),再由$PATH找到路徑

bash的登錄與歡迎信息:/etc/issue, /etc/motd
bash環境配置文件,終端機的環境設置stty,set,暫時略過


通配符
*   代表0個到無窮多個任意字符
? 代表一定有一個任意字符
還有[], [-], [^]三個

特殊符號
#  批註符號,常用在script中,相當於註釋
\   轉義符號
|   管道pipe,分割兩個管道命令的界定
; 連續命令執行分隔符
~  用戶的主文件夾
$   使用變量前導符,即變量之前需要加的變量替代值
&   作業控制job control,將命令變成背景下工作
>, >>  數據流重定向,輸出導向,分別是替換與累加
<, <<  數據流重定向,輸入導向
‘’    單引號,不具有變量置換功能
“”   雙引號,具有變量置換功能
``  兩個`中間爲可以先執行的命令,也可以使用$()
()   在中間位子shell的起始於結束
{}   在中間爲命令塊的組合

數據流重定向
  1. 標準輸入stdin,代碼爲0,使用<或<< , <<代表結束輸入的意思,當輸入爲<<後面的內容時,就是結束了輸入
  2. 標準輸出stdout,代碼爲1,使用>或>>,>>爲累加,>會覆蓋原先的內容
  3. 標準錯誤輸出stderr,代碼爲2,使用2>或2>>
/dev/null垃圾桶黑洞設備,它可以吃掉任何導向這個設備的信息

將命令的數據全部寫入名爲list的文件中:
錯誤:find /home -name .bashrc > list 2>list  不同文件的時候這樣用,相同文件下,兩條數據可能會交叉寫入該文件內,造成次序混亂
正確:find /home -name .bashrc > list 2>&1
正確;find /home -name .bashrc &> list

$?命令迴轉碼
cmd1 && cmd2  若cmd1執行完畢且正確執行($?=0),則開始執行cmd2
                        若cmd1執行完畢且爲錯誤($?≠0),則cmd2不執行
cmd1 || cmd2    若cmd1執行完畢且正確執行($?=0),則cmd2不執行
                        若cmd1執行完畢且爲錯誤($?≠0),則開始執行cmd2

判斷式:command1 && command2 || command3,一般這樣放置,且從左至右來判斷,command2和command3會防止肯定可以執行成功的命令

管道命令
界定符號:“|”。
管道命令僅能處理經由前面一個命令傳來的正確信息,也就是standard output的信息,對於standard error並沒有直接處理的能力。

在每一個管道後面接的第一個數據必定是“命令”。而這個命令必須要能夠接受standard input的數據才行。

選取命令
cut, grep

cut是在一行信息中取出某部分我們想要的,grep是分析一行的信息,若當中有我們所需要的信息,就將該行拿出來。
grep [-acinv] [--color=auto] '查找字符串' filename
-a   將binary文件以test文件的方式查找數據
-c   計算找到'查找字符串'的次數
-i    忽略大小寫的不同
-n   順便輸出行號
-v   反向選擇,即顯示出沒有'查找字符串'內容的那一行
--color=auto 可以將找到的關鍵字部分加上顏色顯示

排序命令:sort, wc, uniq
雙向重定向:tee
字符轉換命令:tr, col, join, paste, expand
參數代換:xargs
減號 - 的用途 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章