1. 程式人生 > >Linux Shell筆記之準備篇

Linux Shell筆記之準備篇

一、基礎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                退出時指定退出狀態碼