Linux Shell筆記之準備篇
阿新 • • 發佈:2019-01-01
一、基礎bash shell命令
1.shell提示符
PS1 控制預設命令列提示符的格式
[[email protected] ~]$ echo $PS1
[\[email protected]\h \W]\$
PS2 控制後續命令列提示符的格式
[[email protected] ~]$ echo $PS2
>
[[email protected] ~]$ PS1="[\t][\u]\$" 更改命令列提示符
[07:02:53][hunterno4]$
2.命令列引數
單字母引數 -a
全字引數 --all
3.基本列表
1)ls命令
-a 顯示所有檔案及目錄,包含隱藏檔案
-d 只顯示目錄
-l 列出許可權,使用者等詳細資訊
-s 顯示檔案大小
-k 以K位元組形式顯示大小
-t 以時間排序
-r 對目錄反向排序
-R 列出子目錄下的檔案
-F 區分出檔案及目錄
-i 列出每個檔案的索引節點
2)cat 檢視檔案
-n 給所有的行加上行號
3)more 分屏顯示檔案
v 在當前行啟動vi編輯器
= 顯示當前行在檔案中的行號
spacbar(空格鍵) 顯示下一屏
b 顯示上一屏
4)stat 提供檔案的所有狀態資訊
5)file 檢視檔案型別
6)ps -H引數顯示層級格式
[ [email protected] hunterno4]# ps -efH| grep ssh
root 3502 1 0 Oct30 ? 00:00:00 /usr/sbin/sshd
root 8370 3502 0 07:32 ? 00:00:00 sshd: [email protected]/4
root 8751 8726 0 07:48 pts/4 00:00:00 grep ssh
7)killall 支援通過程序名而不是程序號來結束程序
8)sort 按預設語言的排序規則進行排序
-n 按數字進行排序
-M 按月排序
-r 反序排序
[ [email protected] hunterno4]# du -sh *| sort -nr 檢視佔用空間最多的檔案
12K build.xml
12K bb.xml
8.0K aa.xml
4.0K ter
4.0K pgtest
4.0K number
9)grep
-e 用來指定每個模式# grep -e i -e o number
或# grep [io] number
-n 顯示匹配模式的行所在的行號
-v 反向搜尋,輸出不匹配該模式的行
-c 顯示有多少行含有匹配的模式
-i 搜尋時忽略大小寫
10)useradd
[ [email protected] etc]# useradd -D 顯示新增使用者時系統預設值
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 新增使用者時會將此目錄下的內容複製到HOME目錄下
CREATE_MAIL_SPOOL=no
-m 建立使用者的HOME目錄
-r 建立系統賬戶
-p passwd 指定預設密碼
-u uid 指定唯一的UID
-g 指定主組
-G 指定附加組
11)userdel 刪除使用者,只刪除/etc/passwd檔案中的使用者資訊
-r 刪除使用者同時刪除使用者的HOME目錄及mail目錄
12)usermod 修改使用者
-L 鎖定使用者
-U 解鎖使用者
13)umask 預設為022
目錄預設許可權777,umask後,新建立目錄許可權777-022=755,即drwxr-xr-x
檔案預設許可權666,umask後,新建立檔案許可權666-022=644,即-rw-r--r--
14)chmod g+s testdir 設為共享檔案,以保證目錄中新建檔案都屬於同一屬組
二、vim編輯器
即Vi improved,常用vi做為別名
1.普通模式
# vi filename 開啟或新建檔案,並將游標置於第一行首
# vi + filename 開啟檔案並置於最後一行
# vi +/pattern filename 開啟檔案並將游標置於第一個與pattern匹配的位置
Ctrl+u 向上翻半屏
Ctrl+b 向上翻一屏
Ctrl+d 向下翻半屏
Ctrl+f 向下翻一屏
n+ 游標下移n行
n- 游標上移n行
h,j,k,l 分別代表左、下、上、右方向鍵
H,M,L 分別將游標置於螢幕頂行、中間行、底行
$ 將游標移至當前行尾
o 在當前行之下新開一行
/abc 在檔案中向前查詢abc
?abc 在檔案中向後查詢abc
n 在同一方向重複上次的搜尋命令
N 在反方向重複上次的搜尋命令
dd 刪除當前游標所在行
3dd 刪除從當前游標行開始的3行
u 撤銷前一編輯命令
p 將剪貼簿的內容複製到游標後
yy 將游標所在行復制到剪下板
2.命令列模式(按下:鍵)
:set nu 給檔案的每行加上行號
:q 退出
:q! 強制退出
:wq 儲存並退出
:w filename 檔案另存一份名為filename
:s/old/new/g 將old替換為new
:n,ms/old/new/g 將替換行號為n到m之間的所有old
:%s/old/new/g 將替換整個檔案中的所有old
:$ 將游標移至最後一行的行首
3.插入模式(按下i鍵)
Esc 返回普通模式
三、環境變數
1.區域性環境變數
# set 檢視區域性環境變數
[[email protected] ~]# test=51testing 環境變數名、等號和值之間無空格
[[email protected] ~]# echo $test
51testing
[[email protected] ~]# bash 新開子Shell後,區域性環境變數失效
[[email protected] ~]# echo $test
2.全域性環境變數
# printenv 檢視全域性變數
# echo $HOME 檢視變數
# test=testing 建立新的環境變數,建議小寫,區別於系統環境變數
# export test 匯出到全域性變數中
# unset test 刪除環境變數,子程序中刪除只對子程序有效,對父程序無效
3.定位系統環境變數
1)登入Shell
/etc/profile 系統上預設的bash shell的主啟動檔案,每個使用者登入都會執行這個啟動檔案
而這個檔案又回逐一訪問/etc/profile.d目錄下的指令碼檔案
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile 提供使用者專屬的啟動檔案
2)互動式Shell
$ bash 此時啟動的Shell為互動式Shell,啟動時不會去訪問/etc/profile檔案
而是檢查.bashrc是否存在
[[email protected] ~]$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then 檢視是否存在/etc/bashrc檔案,存在則生效之
. /etc/bashrc
fi
# User specific aliases and functions 用於定義別名及私有指令碼函式
/etc/bashrc 任何子Shell都會執行這個檔案
/etc/bashrc 檔案也會執行/etc/profile.d目錄下的指令碼
3)非互動式shell
系統執行shell指令碼時所使用的shell
4).命令別名
alias ll='ls -al' 放入.bashrc檔案中,當啟動互動式shell時就會生效了
四、基本指令碼
1.指定要使用的shell
#!/bin/bash 此時的#不用作註釋行
2.使用多個命令
# date;who 以;號分隔,長度不能超過最大命令列字元數255
3.echo 顯示訊息
# echo 'this is "script".' 字串內有引號時,需要用另一種引號圈起來
-n 同一行顯示一個文字字串作為命令輸出
4.反引號 允許將shell命令的輸出賦給變數
# today=`date +%y%m%d`
# echo $today
131103
5.數學運算
# var1=$[1+5] 使用方括號,bash shell只支援整數運算
6.浮點數運算
# bc 進入計算器
quit 退出計算器
# bc -q 進入計算器,並去掉歡迎資訊
scale=2 指定小數點後的位數
#!/bin/bash
var1=11.1
var2=11.2
var3=11.3
var4=11.3
var5=`bc << EOF
scale=2
a1=($var1 * $var2)
b1=($var3 * $var4)
a1+b1
EOF
`
echo the result is $var5
7.退出狀態碼
$? 專屬變數,用於儲存上個執行命令的退出狀態碼
0,命令成功結束
1,通用未知錯誤
126,命令不可執行
127,沒找到命令
exit 5 退出時指定退出狀態碼
1.shell提示符
PS1 控制預設命令列提示符的格式
[[email protected] ~]$ echo $PS1
[\[email protected]\h \W]\$
PS2 控制後續命令列提示符的格式
[[email protected] ~]$ echo $PS2
>
[[email protected] ~]$ PS1="[\t][\u]\$" 更改命令列提示符
[07:02:53][hunterno4]$
2.命令列引數
單字母引數 -a
全字引數 --all
3.基本列表
1)ls命令
-a 顯示所有檔案及目錄,包含隱藏檔案
-d 只顯示目錄
-l 列出許可權,使用者等詳細資訊
-s 顯示檔案大小
-k 以K位元組形式顯示大小
-t 以時間排序
-r 對目錄反向排序
-R 列出子目錄下的檔案
-F 區分出檔案及目錄
-i 列出每個檔案的索引節點
2)cat 檢視檔案
-n 給所有的行加上行號
3)more 分屏顯示檔案
v 在當前行啟動vi編輯器
= 顯示當前行在檔案中的行號
spacbar(空格鍵) 顯示下一屏
b 顯示上一屏
4)stat 提供檔案的所有狀態資訊
5)file 檢視檔案型別
6)ps -H引數顯示層級格式
[
root 3502 1 0 Oct30 ? 00:00:00 /usr/sbin/sshd
root 8370 3502 0 07:32 ? 00:00:00 sshd: [email protected]/4
root 8751 8726 0 07:48 pts/4 00:00:00 grep ssh
7)killall 支援通過程序名而不是程序號來結束程序
8)sort 按預設語言的排序規則進行排序
-n 按數字進行排序
-M 按月排序
-r 反序排序
[
12K build.xml
12K bb.xml
8.0K aa.xml
4.0K ter
4.0K pgtest
4.0K number
9)grep
-e 用來指定每個模式# grep -e i -e o number
或# grep [io] number
-n 顯示匹配模式的行所在的行號
-v 反向搜尋,輸出不匹配該模式的行
-c 顯示有多少行含有匹配的模式
-i 搜尋時忽略大小寫
10)useradd
[
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 新增使用者時會將此目錄下的內容複製到HOME目錄下
CREATE_MAIL_SPOOL=no
-m 建立使用者的HOME目錄
-r 建立系統賬戶
-p passwd 指定預設密碼
-u uid 指定唯一的UID
-g 指定主組
-G 指定附加組
11)userdel 刪除使用者,只刪除/etc/passwd檔案中的使用者資訊
-r 刪除使用者同時刪除使用者的HOME目錄及mail目錄
12)usermod 修改使用者
-L 鎖定使用者
-U 解鎖使用者
13)umask 預設為022
目錄預設許可權777,umask後,新建立目錄許可權777-022=755,即drwxr-xr-x
檔案預設許可權666,umask後,新建立檔案許可權666-022=644,即-rw-r--r--
14)chmod g+s testdir 設為共享檔案,以保證目錄中新建檔案都屬於同一屬組
二、vim編輯器
即Vi improved,常用vi做為別名
1.普通模式
# vi filename 開啟或新建檔案,並將游標置於第一行首
# vi + filename 開啟檔案並置於最後一行
# vi +/pattern filename 開啟檔案並將游標置於第一個與pattern匹配的位置
Ctrl+u 向上翻半屏
Ctrl+b 向上翻一屏
Ctrl+d 向下翻半屏
Ctrl+f 向下翻一屏
n+ 游標下移n行
n- 游標上移n行
h,j,k,l 分別代表左、下、上、右方向鍵
H,M,L 分別將游標置於螢幕頂行、中間行、底行
$ 將游標移至當前行尾
o 在當前行之下新開一行
/abc 在檔案中向前查詢abc
?abc 在檔案中向後查詢abc
n 在同一方向重複上次的搜尋命令
N 在反方向重複上次的搜尋命令
dd 刪除當前游標所在行
3dd 刪除從當前游標行開始的3行
u 撤銷前一編輯命令
p 將剪貼簿的內容複製到游標後
yy 將游標所在行復制到剪下板
2.命令列模式(按下:鍵)
:set nu 給檔案的每行加上行號
:q 退出
:q! 強制退出
:wq 儲存並退出
:w filename 檔案另存一份名為filename
:s/old/new/g 將old替換為new
:n,ms/old/new/g 將替換行號為n到m之間的所有old
:%s/old/new/g 將替換整個檔案中的所有old
:$ 將游標移至最後一行的行首
3.插入模式(按下i鍵)
Esc 返回普通模式
三、環境變數
1.區域性環境變數
# set 檢視區域性環境變數
[[email protected] ~]# test=51testing 環境變數名、等號和值之間無空格
[[email protected] ~]# echo $test
51testing
[[email protected] ~]# bash 新開子Shell後,區域性環境變數失效
[[email protected] ~]# echo $test
2.全域性環境變數
# printenv 檢視全域性變數
# echo $HOME 檢視變數
# test=testing 建立新的環境變數,建議小寫,區別於系統環境變數
# export test 匯出到全域性變數中
# unset test 刪除環境變數,子程序中刪除只對子程序有效,對父程序無效
3.定位系統環境變數
1)登入Shell
/etc/profile 系統上預設的bash shell的主啟動檔案,每個使用者登入都會執行這個啟動檔案
而這個檔案又回逐一訪問/etc/profile.d目錄下的指令碼檔案
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile 提供使用者專屬的啟動檔案
2)互動式Shell
$ bash 此時啟動的Shell為互動式Shell,啟動時不會去訪問/etc/profile檔案
而是檢查.bashrc是否存在
[[email protected] ~]$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then 檢視是否存在/etc/bashrc檔案,存在則生效之
. /etc/bashrc
fi
# User specific aliases and functions 用於定義別名及私有指令碼函式
/etc/bashrc 任何子Shell都會執行這個檔案
/etc/bashrc 檔案也會執行/etc/profile.d目錄下的指令碼
3)非互動式shell
系統執行shell指令碼時所使用的shell
4).命令別名
alias ll='ls -al' 放入.bashrc檔案中,當啟動互動式shell時就會生效了
四、基本指令碼
1.指定要使用的shell
#!/bin/bash 此時的#不用作註釋行
2.使用多個命令
# date;who 以;號分隔,長度不能超過最大命令列字元數255
3.echo 顯示訊息
# echo 'this is "script".' 字串內有引號時,需要用另一種引號圈起來
-n 同一行顯示一個文字字串作為命令輸出
4.反引號 允許將shell命令的輸出賦給變數
# today=`date +%y%m%d`
# echo $today
131103
5.數學運算
# var1=$[1+5] 使用方括號,bash shell只支援整數運算
6.浮點數運算
# bc 進入計算器
quit 退出計算器
# bc -q 進入計算器,並去掉歡迎資訊
scale=2 指定小數點後的位數
#!/bin/bash
var1=11.1
var2=11.2
var3=11.3
var4=11.3
var5=`bc << EOF
scale=2
a1=($var1 * $var2)
b1=($var3 * $var4)
a1+b1
EOF
`
echo the result is $var5
7.退出狀態碼
$? 專屬變數,用於儲存上個執行命令的退出狀態碼
0,命令成功結束
1,通用未知錯誤
126,命令不可執行
127,沒找到命令
exit 5 退出時指定退出狀態碼