linux學習日記範文

來源:才華庫 6.42K

只要能夠操作應用程式的介面都能稱為shell。狹義的shell指的是命令列方面的軟體,包括bash。廣義的shell則包括圖形介面軟體,因為圖形介面其實也可以操作各種應用程式來呼叫核心工作,不過,在這裡我們主要指的是bash。

linux學習日記範文

# type [-tpa] command –> 檢視命令是否為bash的內建命令或者是外部命令

* 利用$var或者是${var}可獲取變數var的值

* bash中的雙引號:特殊字元如$等,可以保有原本的特性

* bash中的單引號:所有的字元均為普通的字元,沒有其他含義

*可以用將特殊字元變成一般字元

* 可用$(其他命令)來在命令中巢狀其他命令的返回值,也就是說:${var}取得變數var的值,$(command)取得命令返回值

* 若變數需要在其他子程序中執行,需要export var 來使變數成為環境變數

* unset var 可取消變數var的定義

====環境變數====

# env –> 檢視當前系統的環境變數

$本身也是一個變數,表示本shell的PID號,比如 # echo $$ 輸出本shell的PID

?本事也是一個變數,表示上一個執行的命令的返回值,一般如果是0表示執行成功,如果非0表示有問題。

公共的語系編碼設定:/etc/sysconfig/i18n

# read [-pt] variable –> 鍵盤讀取變數輸入值

-p:後面可以跟提示符

-t:後面可以接等待的秒數,不會一直等待使用者輸入

====變數的宣告====

# declare [-aixrp] var

-a:將後面的var定義為陣列型別

-i:將後面的var定義為integer整數型別

-x:用法與export一樣,就是將後面的var變成環境變數

-r:將變數var設定成readonly狀態,該變數不能被更改,也不能重設

-p:單獨列出變數的型別

如果把-改成+表示取消操作

====限制使用者的計算機資源使用====

# ulimit [-SHacdfltu] [配額]

-H:hardlimit,嚴格的限制,必定不能超過這個數值

-S:softlimit,可以超過這個值,但有警告資訊

-a:後面不接任何引數,列出所有的限制額度

-c:某些程序發生錯誤的時候,系統會將該程序在記憶體中的資訊寫成檔案,稱為核心檔案。限制每個核心檔案的最大容量

-f:此shell可建立的最大單一檔案容量,單位為KB

-d:程序可以使用的最大記憶體量

-l:可用於lock的記憶體量

-t:最大的CPU時間(單位為秒)

-u:單一使用者可使用的最大程序(process)數量

====變數內容的刪除與替換====

# echo ${path#/*:} –> 刪除path變數中最前面的那個以/開頭,以:結尾的

# echo ${path##/*:} –> 刪除最長的那個,也就是說只保留了最後的一個路徑

# –> 符合替換文字的最短的那個

## –> 符合替換文字的最長的那個

如果想從後面開始刪,用%替換#即可

接下來講替換功能:

# echo ${path/sbin/SBIN} –> 將第一個sbin替換成SBIN

# echo ${path//sbin/SBIN} –> 將所有的sbin替換成SBIN

我們將這部分總結說明下一下:

變數設定方式   說明       ${變數#關鍵字}

${變數##關鍵字}   若變數內容從頭開始的資料符合『關鍵字』,則將符合的最短資料刪除

若變數內容從頭開始的資料符合『關鍵詞』,則將符合的最長資料刪除       ${變數%關鍵字}

${變數%%關鍵字}   若變數內容從尾向前的資料符合『關鍵字』,則將符合的最短資料刪除

若變數內容從尾向前的資料符合『關鍵字』,則將符合的最長資料刪除       ${變數/舊字串/新字串}

${變數//舊字串/新字串}   若變數內容符合『舊字串』則『第一個舊字串會被新字串取代』

若變數內容符合『舊字串』則『全部的舊字串會被新字串取代』

# username=${username:-root} –> 如果username非空就取原值,如果沒有設定或者為空字串就設定成root

====bash登入介面與登入成功後的歡迎介面====

tips:最好是單一bash登陸,然後利用job control來切換不同的工作,這樣的話shell的history才能完全儲存下來

命令的執行搜尋路徑順序:先alias,再builtin,再$PATH

bash的登陸介面配置檔案:/etc/issue,遠處登陸介面配置檔案:/etc/

命令# man mingetty檢視issue中各個程式碼的意義

登陸成功後顯示的資訊配置檔案:/etc/motd

====bash環境變數====

login shell的配置檔案:

/etc/profile:系統全域性配置檔案,最好不要修改這個檔案

~/_profile或者~/_login或者~/ile:使用者自定義bash配置檔案

~/rc,這個配置檔案login shell和non-login shell都會讀取

====bash中的萬用字元和特殊字元====

符號   意義       *   代表『 0 個到無窮多個』任意字元       ?   代表『一定有一個』任意字元       [ ]   同樣代表『一定有一個在括號內』的字元(非任意字元)。例如 [abcd] 代表『一定有一個字元, 可能是 a, b, c, d 這四個任何一個』       [ - ]   若有減號在中括號內時,代表『在編碼順序內的所有字元』。例如 [0-9] 代表 0 到 9 之間的'所有數字,因為數字的語系編碼是連續的!       [^ ]   若中括號內的第一個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 的其他字元就接受的意思。

除了萬用字元之外,bash 環境中的特殊符號有哪些呢?底下我們先彙整一下:

符號   內容       #   註釋符號:這個最常被使用在 script 當中,視為說明#在後的語句均不執行          跳脫符號:將『特殊字元或萬用字元』還原成一般字元       |   管道 (pipe):分隔兩個管道命令的界定(後兩節介紹);       ;   連續指令下達分隔符:連續性命令的界定 (注意!與管道命令不相同)       ~   使用者的家目錄       $   取用變數前置字元:亦即是變數之前需要加的變數取代值       &   工作控制 (job control):將指令變成背景下工作       !   邏輯運算意義上的『非』 not 的意思!       /   目錄符號,路徑分割符號       >, >>   資料流重導向:輸出導向,分別是『取代』與『累加』       <, <<   資料流重導向:輸入導向 (這兩個以後說明)       ‘ ‘   單引號,裡面全是普通字元,不具備變數置換功能       ” “   具有變數置換的功能!       ` `   兩個『 ` 』中間為可以先執行的指令,亦可使用 $( )       ( )   在中間為子 shell 的起始與結束       { }   在中間為命令區塊的組合!

====資料流重導向====

1,標準輸入(stdin):程式碼為0,使用<或者<<

2,標準輸出(stdout):代號為1,使用>或者>>

3,標準錯誤輸出(stderr):代號為2,使用2>或者2>>

>表示清空後新增,>>表示累加新增,append的意思。瞭解?o(╯□╰)o

<表示原本由鍵盤輸入的改由檔案輸入,而<<則表示遇到後面的字串的時候結束輸入。

/dev/null:超級黑洞,它會吃掉任何導向到它的資料流,很強大的,不是麼。

正確和錯誤輸出到同一個檔案的語法格式:

find /home -name rc > list 2>&1

====管道命令====

管道命令需要注意的是:

1,管道命令僅能處理standard output,對於stderr會忽略掉

2,管道命令必須要能夠接受來自前一個命令的資料成為standard input繼續處理才行

====選取命令cut和grep====

# cut -d ‘分割字元’ -f fields <== 用於分割字元

# cut -c 字元範圍 <== 用於排列整齊的資訊

-d:後面接分割字元,與-f一起使用

-f:依據-d的分割字元將一段資訊切割成為數段,用-f取出第幾段的意思(-f 3,5)

-c:以字元的單位取出固定字元區間 (-c 12-34)

grep以行為單位分析資訊,如果該行符合條件,則把該行提出出來

# grep [-acinv] [--color=auto] ’查詢的字串’ filename

-a:將binary檔案以text檔案方式查詢

-c:計算找到’查詢的字串’的次數

-i:忽略大小寫

-n:順便輸出行號

-v:反向選擇,即顯示出沒有 ‘字串’內容的那些行

–color=auto : 關鍵字加上顏色

====排序命令sort,wc,uniq====

# sort [-fbMnrtuk] [file or stdin]

-f:忽略大小寫

-b:忽略最前面的空格

-M:以月份的名字排序

-n:使用數字排序(預設是文字來排序)

-r:反向排序

-u:就是uniq,相同的資料中,僅出現一行代表

-t:分隔符,預設以TAB分割

-k:以那個區間進行排序

# cat /etc/passwd | sort -t “:” -k 3 <== 以第三列進行排序

# last | cut -d ‘ ‘ -f 1 | sort

# uniq [-ic] <==排序完成後將重複的資料僅列出一個顯示

-i:忽略大小寫

-c:進行計數

#last | cut -d ‘ ‘ -f1 | sort | uniq -ic

# wc [-lwm] <== 行數,字數,字元數統計命令

-l:僅列出行

-w:僅列出多少字(英文單詞word)

-m:多少字元(char)

# cat /etc/ig | wc

====雙向重定向tee====

# tee [-a] file

-a:以累加(append)方式,將資料加入到file中

# ls -l /home | tee -a ~/homefile | more

====字元轉換命令:tr,col,join,paste,expand====

# tr [-ds] SET1 …

-d:刪除資訊中的SET1這個字串;

-s:替換掉重複的字元

# last | tr -s ‘[a-z]‘ ‘[A-Z]‘

# cat /etc/passwd | tr -d “:”

# col [-xb]

-x:將tab鍵轉換成對等的空格鍵

-b:如果在文字內有反斜槓(),僅保留反斜槓最後接的字元

# join [-ti12] file1 file2

-t:join預設以空格符分割資料,並且對比第一個欄位的資料,如果相同,合併到一行,且第一個欄位放在第一個

-i:忽略大小寫

-1:代表第一個檔案要用那個欄位來分析

-2:代表第二個檔案要用哪個欄位來分析

# join -t “:” -1 4 /etc/passwd -2 3 /etc/group

# paste [-d] file1 file2 …

-d:後面可以接分割字元,預設以tab來分割

-:如果-file寫成-,則表示來自stdin的資料

# expand [-t] file

-t :後面接數字,表示一個tab鍵可以轉換成幾個空格鍵

# grep ‘^MANPATH’ /etc/ig | head -n 3 | expand -t 6 – | cat -A

====切割命令split====

# split [-bl] -file PREFIX

-b:後面接欲切割成的檔案的大小,可以加單位,如b,k,m,g等

-l:以行數進行切割

PREFIX:前導符,可作為切割檔案的前導文字

# split -b 300k /etc/termcap tercap

====引數代換xargs====

# xargs [-0epn] command

-0:如果輸入的stdin含有特殊字元,比如`,,空格鍵等,這個引數可以將其還原成一般字元

-e:EOF,後面可以接一個字串,當xargs遇到這個字串的時候,就停止繼續工作

-p:每次執行命令的引數時,詢問使用者

-n:後面接次數,每次command執行時,要使用幾個引數的意思

# cut -d ‘:’ -f1 /etc/passwd | xargs -p -n 5 finger

使用xargs的原因是:很多命令其實不支援管道命令,因此我們可以通過xargs來提供該命令引用stdin之用。

# find /sbin -perm +7000 | xargs ls -l <== 找出/sbin下具有特殊許可權的檔名

熱門標籤