標籤:shell linux ubuntu rhel
【設定環境變數】
1、使用env命令顯示所有的環境變數
$ env
2、使用echo命令查看單個環境變數
$ echo $PATH
3、設定一個新的環境變數
$ export HELLO="Hello!"
文法:export [-fnp][變數名稱]=[變數設定值]
參數:
-f 代表[變數名稱]中為函數名稱。
-n 刪除指定的變數。變數實際上並未刪除,只是不會輸出到後續指令的執行環境中。
-p 列出所有的shell賦予程式的環境變數。
注意:export只是臨時修改環境變數,退出當前Shell,設定的環境變數失效。
若想永久改變環境變數,直接編輯相關檔案,修改後重新載入。
/etc/profile:系統每個使用者的環境設定資訊,使用者第一次登入時執行。並從/etc/profile.d目錄的設定檔中搜集shell的設定。
/etc/bashrc:為每一個運行bash shell的使用者執行此檔案。
~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次。
~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該該檔案被讀取。
注意:另外,/etc/bashrc檔案作用於所有使用者,而~/.bashrc作用於目前使用者,繼承/etc/bashrc中的變數,他們是\"父子\"關係,如果變數衝突,以~/.bashrc為準。
參考:http://blog.chinaunix.net/uid-25533439-id-3291246.html
【檔案安全與許可權】
1、使用touch建立檔案:$ touch temp;
2、查看目錄:ls -[a|l|...]
檔案的許可權位:
rwx:前三位,檔案屬主可讀、寫、執行
rw-:中間三位,組使用者可讀、寫
r--:最後三位,其他使用者只可讀
檔案類型位:
d 目錄。
l 符號連結(指向另一個檔案)。
s 通訊端檔案。
b 塊裝置檔案。
c 字元裝置檔案。
p 具名管道檔案。
- 普通檔案,或者更準確地說,不屬於以上幾種類型的檔案。
3、chmod改變檔案許可權
chmod [who] operator [permission] filename
who:
u 檔案屬主許可權。
g 屬組使用者權限。
o 其他使用者權限。
a 所有使用者(檔案屬主、屬組使用者及其他使用者)。
operator:
+ 增加許可權。
- 取消許可權。
= 設定許可權。
permission:
r 讀許可權。
w 寫入權限。
x 執行許可權。
s 檔案屬主和組set-ID。
t 粘性位*。
l 給檔案加鎖,使其他使用者無法訪問。
u,g,o 針對檔案屬主、屬組使用者及其他使用者的操作。
註:設定許可權使用絕對模式
chmod [mode] file
檔案屬主:r w x:4 + 2 + 1
屬組使用者:r w x:4 + 2 + 1
其他使用者:r w x:4 + 2 + 1
樣本:chmod 744 test :rwx r-- r- - 賦予檔案屬主讀、寫和執行的許可權,所有其他使用者讀的許可權。
注意:目錄許可權代表含義與檔案不同
r :可以列出該目錄中的檔案
w:可以在該目錄中建立或刪除檔案
x:可以搜尋或進入該目錄
4、使用chown修改屬主
chmod -R -h owner file
- R 選項意味著對所有子目錄下的檔案也都進行同樣的操作。
- h 選項意味著在改變符號連結檔案的屬主時不影響該連結所指向的目標檔案。
5、umask
當最初登入到系統中時,umask命令確定了你建立檔案的預設模式。這一命令實際上和chmod命令正好相反。你的系統管理員必須要為你設定一個合理的umask值,以確保你創
建的檔案具有所希望的預設許可權,防止其他非同組使用者對你的檔案具有寫入權限。
【尋找】
find
find pathname -options [-print -exec -ok]
命令參數:
pathname: find命令所尋找的目錄路徑,.來表示目前的目錄,用/來表示系統根目錄。
-print: find 命令將匹配的檔案輸出到標準輸出。
-exec: find 命令對匹配的檔案執行該參數所給出的shell命令。相應命令的形式為‘
command‘ {} \;,注意{ }和\;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell
命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。
選項:
-name:按照檔案名稱尋找檔案。
-perm:按照檔案許可權來尋找檔案。
-user: 按照檔案屬主來尋找檔案。
-mtime -n +n:按照檔案的更改時間來尋找檔案,
-n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。
-type 尋找某一類型的檔案。
-size n:[c] 尋找檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。
-depth:在尋找檔案時,首先尋找目前的目錄中的檔案,然後再在其子目錄中尋找。
樣本:
在/logs目錄中尋找更改時間在5日以前的檔案並刪除它們:
$ find logs -type f -mtime +5 -exec rm {} \;
xargs
在使用find命令的-exec選項處理匹配到的檔案時,find命令將所有匹配到的檔案一
起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find
命令運行幾分鐘之後,就會出現溢出錯誤。錯誤資訊通常是“參數列太長”或“參數列溢出”。
這就是xargs命令的用處所在,特別是與find命令一起使用。
Find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只擷取一部分檔案而
不是全部,不像-exec選項那樣。這樣它可以先i處理最先擷取的一部分檔案,然後是下一批,
並如此繼續下去。
樣本:在整個系統中尋找記憶體資訊轉儲檔案(core dump) ,然後把結果儲存到/tmp/core.log
檔案中
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
【輸入輸出】
1、echo命令輸出轉義符以及變數。
樣本:
# echo -e "\007your home is $HOME , you are connected on `tty`"
your home is /root , you are connected on /dev/pts/1
註:
\007或\a可以讓終端鈴響一聲
顯示出$HOME目錄,
並且可以讓系統執行tty命令(注意,該命令用鍵盤左上方的符號,法語中的抑音符引起來,
不是單引號 )。
\n表示換行、\t表示定位字元
2、重新導向:重新導向符號>和>>
樣本:
重新導向並覆蓋原有檔案
$ echo "The log files have all been done"> myfile
追加到一個檔案的末尾,不覆蓋原有的內容
$ echo "$LOGNAME carried them out at `date`">>myfile
3、cat:顯示檔案內容,建立檔案,還可以用它來顯示控制字元。
注意:在檔案分頁符處不會停下來;會一下顯示完整個檔案。因此,可以使用more命令或把
cat命令的輸出通過管道傳遞到另外一個具有分頁功能的命令中,使用命令less file可實現相
同的功能。
樣本:$ cat myfile | more
1)顯示名為file的檔案:
$ cat file
2)顯示file1,file2,file3這三個檔案
$ cat file1 file2 file3
3)、建立一個包含上述三個檔案的內容,名為bigfile的檔案,可以用輸出重新導向到新檔案
中
$ cat file1 file2 file3 > bigfile
4)如果cat的命令列中沒有參數,輸入的每一行都立刻被cat命令輸出到螢幕上
5)建立檔案
$cat >myfile
4、tee:讀取標準輸入的資料,並將其內容輸出成檔案。
語 法:tee [-ai][--help][--version][檔案…]
說 明:tee指令會從標準輸入裝置讀取資料,將其內容輸出到標準輸出裝置,同時儲存
成檔案。我們可利用tee把管道匯入的資料存成檔案,甚至一次儲存數份檔案。
參 數:-a 附加到既有檔案的面,而非覆蓋它。如果給予tee 指令的檔案名稱已經存在,
預設會覆蓋該檔案的內容。加上此參數,資料會新增在該檔案內容的最面,而不會刪除原先之內
容。
-i 忽略中斷訊號
--help 線上協助
--version 顯示版本資訊
樣本:
1)列出文字檔slayers.story 的內容,同時複製3 份副本,檔案名稱分別為ss-copy1、
ss-copy2、ss-copy3:
$ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3
2)把列出目前的目錄,並把結果結到myfile裡
$ls -l |tee myfile
5、管道
可以通過管道把一個命令的輸出傳遞給另一個命令作為輸入,用豎杠“|”表示。
註:檔案檔案描述符(系統中實際上有12個檔案描述符)
輸入檔案—標準輸入0:它是命令的輸入,預設是鍵盤,也可以是檔案或其他命令的輸出。
輸出檔案—標準輸出1:它是命令的輸出,預設是螢幕,也可以是檔案。
錯誤輸出檔案—標準錯誤2:這是命令錯誤的輸出,預設是螢幕,同樣也可以是檔案。
如果沒有特別指定檔案說明符,命令將使用預設的檔案說明符(終端)。
樣本:
熱門檔案重新導向命令
command > file 把把標準輸出重新導向到file中
command >> file 把把標準輸出追加到file中
command 1 > file 把把標準輸出重新導向到file中
command > file 2>&1 把把標準輸出和標準錯誤一起重新導向到file中
command 2 > file 把把標準錯誤重新導向到file中
command 2 >> file 把把標準錯誤追加到file中
command < file1 >file2 command命令以file1檔案作為標準輸入,以file2檔案作為標準輸出
command < filename 把command命令以file檔案作為標準輸入
command << delimiter 從標準輸入中讀入,直至遇到delimiter分界符
command <&m 檔案描述符m作為標準輸入
command >&m 標準輸出重新導向到檔案描述符m中
command <&- 關閉標準輸入
【文本過濾工具grep】
Linux有grep, egrep, fgrep
grep:
傳統的grep程式, 在沒有參數的情況下, 只輸出符合RE字串之句子,常見參數如下:
-v: 逆反模示, 只輸出"不含" RE 字串之句子;
-r: 遞迴模式, 可同時處理所有層級子目錄裡的檔案;
-q: 靜默模式, 不輸出任何結果(stderr除外);
-i: 忽略大小寫;
-w: 整詞比對, 類似 \<word\>;
-n: 同時輸出行號;
-c: 只輸出符合比對的行數;
-l: 只輸出符合比對的檔案名稱;
-o: 只輸出符合RE的字串;
-E: 切換為egrep;
egrep:
grep的擴充版本, 改良了許多傳統grep不能或不便的操作。
fgrep:
不作RE處理, 運算式僅作一般字串處理。
單引號雙引號
在grep命令中輸入字串參數時,最好將其用雙引號括起來,在調用模式比對時,應使用單引號。
例如:“string”,這樣做有兩個原因
一是以防被誤解為shell命令,二是可以用來尋找多個單片語成的字串。
在調用變數時,也應該使用雙引號,諸如: grep “$MYVAR” 檔案名稱,如果不這樣,將沒有返回結果。
1、在所有檔案中查詢單詞“abc”
$ grep "abc" *
2、精準匹配
$grep "abc\>" abc.txt
返回只包含abc的行
3、與正則配合,尋找空行行數
$ grep -c ‘^$‘ abc.txt
【Regex(RE)】
1、使用句點匹配單字元
匹配除“\r\n”之外的任何單個字元。
注意,“.”允許匹配ASCII集中任一字元,或為字母,或為數字。
2、在行首以^匹配字串或字元序列
^只允許在一行的開始匹配字元或單詞
樣本:行首第四個字元為a:^ . . . a
3、在行尾以$匹配字串或字元
$與^正相反,它在行尾匹配字串或字元, $符號放在匹配單詞後。假定要匹配以
單詞com結尾的所有行:com$
4、使用*匹配字串中的單字元或其重複序列
匹配前面的子運算式零次或多次(大於等於0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等價於{0,}。
與“*”號類似
“+”號:匹配前面的子運算式一次或多次(大於等於1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等價於{1,}。
“?”號:匹配前面的子運算式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等價於{0,1}。
5、使用\屏蔽一個特殊字元的含義
特殊字元:$.‘"*[]^|\+?
6、使用[]匹配一個範圍或集合
使用“-”表示一個字串範圍,表明字串範圍從“ -”左邊字元開始,到“-”右邊字
符結束。
樣本:
1)任意一個數字[0-9];
2)任意小寫字母[a-z];
3)匹配任一非字母型字元:[^a-zA-Z];
4)匹配任一非數字型字元:[^0-9];
7、使用\{\}匹配模式結果出現的次數
使用*可匹配所有匹配結果任意次,但如果只要指定次數,就應使用\{\},此模式有三種
形式,即:
pattern\{n\} 匹配模式出現n次。
pattern\{n,\} 匹配模式出現最少n次。
pattern\{n,m} 匹配模式出現n到m次之間,n,m為0-255中任意整數。
樣本:匹配字母A出現兩次,並以B結尾:A\{2\}B
重要提示:並不是所有語言都支援所有正則字元,實際使用時需注意。
因為.[]^$所有語言都支援,所以可以進行等價代換:
等價:
?,*,+,\d,\w 都是等價字元
?等價於匹配長度{0,1}
*等價於匹配長度{0,}
+等價於匹配長度{1,}
\d等價於[0-9]
\w等價於[A-Za-z_0-9]
參考:http://baike.baidu.com/link?url=2_39Tb0YXCeyDNFSovdMqm6_Jye09jx8CDd4gKLO6X3ji0rJHBCJ9EHQnP34JUD-xL53vctIwlnYGda48rajhq
【AWK與SED】
Awk、sed與grep,俗稱Linux下的三劍客,它們之間有很多相似點,但是同樣也各有各的特色,相似的地方是它們都可以匹配文本,其中sed和awk還可以用於文本編輯,而grep則不具備這個功用。sed是一種非互動式且面向字元流的編輯器,而awk則是一門模式比對的程式設計語言,因為它的主要功能是用於匹配文本並處理,同時它有一些程式設計語言才有的文法,例如函數、分支迴圈語句、變數等等,當然比起我們常見的程式設計語言,Awk相對比較簡單。
使用Awk,我們可以做以下事情:
將文字檔視為由欄位和記錄組成的文本資料庫;
在操作文本資料庫的過程中能夠使用變數;
能夠使用數學運算和字串操作
能夠使用常見的編程結構,例如條件分支與迴圈;
能夠格式化輸出;
能夠自訂函數;
能夠在awk指令碼中執行UNIX命令;
能夠處理UNIX命令的輸出結果;
Sed本質上是一個編輯器,但是它是非互動,這點與VIM不同;同時它又是面向字元流的,輸入的字元流經過Sed的處理後輸出。這兩個特性使得Sed成為命令列下面非常有用的一個處理工具。
sed的處理流程,簡化後是這樣的:
讀入新的一行內容到緩衝空間;
從指定的操作指令中取出第一條指令,判斷是否匹配pattern;
如果不匹配,則忽略後續的編輯命令,回到第2步繼續取出下一條指令;
如果匹配,則針對緩衝的行執行後續的編輯命令;完成後,回到第2步繼續取出下一條指令;
當所有指令都應用之後,輸出緩衝行的內容;回到第1步繼續讀入下一行內容;
當所有行都處理完之後,結束。
參考:
http://blog.csdn.net/a81895898/article/details/8482387
http://blog.csdn.net/a81895898/article/details/8482333
本文出自 “暗夜” 部落格,請務必保留此出處http://icyore.blog.51cto.com/8486958/1596280
Shell常用命令