續前文
7、權限管理
- 權限
- r
- w
- x
- 三類用戶
- u:屬主
- g:屬組
- o:其他用戶
- 改變用戶
- chown:只有管理員可以,改屬主與屬組
- chgrp:管理員,改屬組
- chmod: 數字;ugoa=rwx;用戶類別+-權限
- 新建一個沒有家目錄的用戶
- # useradd -M user
- 手動添加用戶
- nano /etc/group:添加基本組,附加組後添加用戶名
- nano /etc/passwd:
- nano /etc/shadow:86400秒/天,date +%s
- cp -r /etc/skel /home/user
- chown -R user.user /home/uder
- chmod -R go= /home/user
- openssl passwd -1 -salt '12121212': 生成密碼加密,複製到shadow
- umask:遮罩碼
- 666-umask:文件
- 777-umask:文件夾
- umask 022:修改
- 文件不具有默認執行權限,若設定默認有,則權限+1
- shell的類型
- 登陸式
- 正常
- su - user
- su -l user
- 讀取步驟:/etc/profile -->/etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
- 非登陸式
- su user
- 圖形終端
- 自動執行
- 讀取步驟:~/.bashrc --> /etc/bashrc -->/etc/profile.d/*.sh
- 登陸式
- bash的配置文件
- 全局
- /etc/profile, /etc/prifile.d/*.sh, /etc/bashrc
- 個人
- ~/.bash_profile,~/.bashrc
- profile類配置文件
- 設定環境變量
- 運行命令或腳本
- bashrc類的文件
- 設定本地變量
- 定義命令別名
- 修改 ./.bashrc 添加alias cls='clear'
- 全局
8、管道及IO重定向
- 權限
- r
- w
- x
- 三類用戶
- u:屬主
- g:屬組
- o:其他用戶
- 改變用戶
- chown:只有管理員可以,改屬主與屬組
- chgrp:管理員,改屬組
- chmod: 數字;ugoa=rwx;用戶類別+-權限
- 新建一個沒有家目錄的用戶
- # useradd -M user
- 手動添加用戶
- nano /etc/group:添加基本組,附加組後添加用戶名
- nano /etc/passwd:
- nano /etc/shadow:86400秒/天,date +%s
- cp -r /etc/skel /home/user
- chown -R user.user /home/uder
- chmod -R go= /home/user
- openssl passwd -1 -salt '12121212': 生成密碼加密,複製到shadow
- umask:遮罩碼
- 666-umask:文件
- 777-umask:文件夾
- umask 022:修改
- 文件不具有默認執行權限,若設定默認有,則權限+1
- shell的類型
- 登陸式
- 正常
- su - user
- su -l user
- 讀取步驟:/etc/profile -->/etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
- 非登陸式
- su user
- 圖形終端
- 自動執行
- 讀取步驟:~/.bashrc --> /etc/bashrc -->/etc/profile.d/*.sh
- 登陸式
- bash的配置文件
- 全局
- /etc/profile, /etc/prifile.d/*.sh, /etc/bashrc
- 個人
- ~/.bash_profile,~/.bashrc
- profile類配置文件
- 設定環境變量
- 運行命令或腳本
- bashrc類的文件
- 設定本地變量
- 定義命令別名
- 修改 ./.bashrc 添加alias cls='clear'
- 全局
9、grep及正則表達式
- grep:根據模式搜索文本,並將符合模式的文本行顯示出來。不一定全部匹配,一部分匹配即顯示。
- grep [OPTIONS] PATTERN [FILE...]
- pattern:文本字符和正則表達式的元字符組合而成匹配條件
- -i:忽略大小寫
- --color
- -v:顯示沒有被模式匹配到的行
- -o:只顯示被模式匹配到的字符串
- -E:擴展的正則表達式
- -A:某行被匹配,其後n行也顯示,
- -B:某行被匹配,其前n行也顯示。
- -C:前後n行顯示
- 正則表達式
- *:任意長度任意字符
- ?:任意單個字符
- 元字符:
- . :點表示任意單個字符
- []:指定範圍
- 匹配次數(貪婪模式)
- *:匹配其前面的字符任意次,a*b可匹配b,ab,aab,
- .*:任意長度的任意字符
- ?:匹配其前面的字符一次或者零次,需要使用轉義\?
- \{m,n\}:匹配其前面的字符至少一次,至多n次。
- 位置錨定
- ^:錨定行首,此字符後面出現的字符必須出現在行首
- $:錨定行尾,此字符前面出現的字符必須出現在行尾
- ^$:空白行
- \<:其後面的任意字符必須作爲單詞的首部出現\b,錨定詞首
- \>:其前面的任意字符必須作爲單詞的尾部出現\b,錨定詞尾
- 分組
- \(\)
- \(ab\)*:ab可出現任意次
- 後向引用:匹配He love his lover,grep '\(l..e\).*\1' test.txt
- \1:第一個左括號以及與之對應的右括號所包括的所有內容
- \(\)
- []:匹配指定範圍內的任意單個字符
- [^]:匹配指定範圍外的任意單個字符,digit,lower,upper,punct,space,alpha,alnum
- REGEXP:regular expression,正則表達式
- 正則表達式分類
- basic regexp:基本的
- 元字符,匹配次數,錨定,
- extended regexp:擴展的egrep==grep -E
- 元字符:
- 次數
- +:匹配其前面的字符至少一次,相當於\{1,\}
- 無需反斜線:{m,n}
- 位置錨定
- 分組:(),支持引用\1,無需轉義。
- 支持 or:| a|b C|cat:C或者cat
- basic regexp:基本的
- 找1-255之間的整數: egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
- 匹配IP v4地址ifconfig | egrep --color -o '(\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}(\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>)'
- fgrep:fast
- 不支持正則表達式,執行速度快。
10、bash腳本編程變量,變量類型
- 語言
- 編譯器,解釋器
- 編程語言:機器語言,彙編語言,高級語言。
- 靜態語言:編譯型語言,強類型,轉化二進制。
- 事先轉化程可執行程序。
- c,c++,Java,c#
- 動態語言:解釋型語言,弱類型,執行時轉化。
- 邊解釋邊執行。
- asp,asp.net,php,shell,python,perl
- 解釋器本身通常是靜態語言開發的
- 面向過程
- Linux內核由c寫成
- shell腳本
- 面向對象
- 大型軟件開發
- Java,python,c++
- 變量
- 內存空間,命令,內存是編址的存儲單元
- 變量映射內存地址
- 變量類型:整型,浮點型,
- 事先確定存儲格式與存儲長度
- 溢出問題:緩衝區溢出,判斷大小,軟件外包(中,印)
- 邏輯運算:與,或,非,異或
- shell:弱類型編程語言
- 強:變量在使用前,必須事先聲明,甚至還需要初始。
- 弱:變量用時聲明,甚至不區分類型,
- (本地)變量賦值:var_name=value,作用域整個bash進程
- bash變量類型
- 環境變量
- 作用域當前shell進程及其子進程
- export varname=value “導出”
- 腳本在執行時會啓動一個子shell進程(命令行中啓動的 腳本會繼承當前shell環境變量)
- 系統自動執行的腳本(非命令行啓動)就需要自我定義需要各環境變量
- 本地變量(局部變量)
- 變量引用:${varname},括號可省
- 局部:local varname=value,作用域當前代碼段
- 位置變量
- $1,$2,...:
- 特殊變量(系統變量)
- $?:保存上一個命令執行狀態返回值,0正確執行,1-255錯誤執行(1,2,127系統預留,其他可自定義含義)。
- 程序執行,可能有兩類狀態:正確和錯誤
- 輸出重定向dev/null(軟件模擬設備,數據黑洞):# id student &> /dev/null; echo $?
- $?:保存上一個命令執行狀態返回值,0正確執行,1-255錯誤執行(1,2,127系統預留,其他可自定義含義)。
- 撤銷變量:unset varname
- 查看當前shell中變量:set
- 查看環境:printenv,env,export
- 變量附加:animals=$animals:goat,不做算數運算,只做字符串相加
- 腳本:命令的堆砌,按實際需要
- 環境變量
11、bash腳本編程條件判斷
- 實現條件判斷
- $?:
- 條件測試類型
- 整數測試
- 字符測試
- 文件測試
- 條件測試的表達式
- [ expression ]
- [[ expression ]]
- test expression
- 整數比較的實現
- -eq:測試兩個整數是否相等,[ $A -eq $B ],取狀態返回值
- -ne:測試兩個整數是否不等
- -gt:測試一個數是否大於另一個數
- -lt:測試一個數是否小於另一個數
- -ge:大於等於
- -le:小於等於
- 命令間的邏輯關係
- 邏輯與:短路操作,&&,
- id user &> /dev/null && echo "hello,student!",
- 用戶不存在則添加 !id user && useradd user
- 第一個條件爲真,第二個條件必須得判斷
- 第一個條件爲假,第二個條件不再判斷(執行)
- 邏輯或:短路操作,||,
- id user || useradd user用戶不存在則添加
- 邏輯與:短路操作,&&,
- 變量名稱:只能包含字母,數字,下劃線,且不能以數字開頭,不應與系統中的環境變量名重名
- if-else變種:[ expression ] && if-true || else
- ! id user1 && useradd user1 && echo "password" | passed --stdin user &> /dev/null || echo "user1 exists."
- 取得當前系統用戶數
- USERS=`wc -l /etc/passwd | cut -d: -f1`
- echo USERS
- 條件判斷
- 單分支
- if 判斷條件; then
- statement1
- statement2
- ...
- fi
- if 判斷條件; then
- 雙分支
- if 判斷條件; then statement statement ... else statement statement fi
- 單分支
- 做算數運算
- let C=$A+$B
- $[算數運算表達式]:C=$[$A+$B]
- $((算術運算表達式)):D=$(($A+$B))
- expr 算數運算表達式:表達式中各操作數及運算符之間要有空格,而且要有命令引用,C=`expr $A + $B`
- 提前結束腳本:exit
- 定義執行狀態結果:exit n,0-255,
- 文件測試
- -e FILE :測試文件是否存在 [ -e /etc/inittab ]
- -f FILE :測試文件是否爲普通文件
- -d FILE :測試指定路徑是否爲目錄
- -r FILE :測試當前用戶對該文件是否有讀權限
- -w FILE :
- -x FILE :
- 文件測試的使用
- 多分支的if語句
- if elif elif ... else fi
- 多分支的if語句
- 測試腳本是否有錯誤
- 位置變量:
- $1,$2,對應命令的參數
- shift:輪換
- 特殊變量:
- $?,
- $#,返回參數的個數,判定有無參數
- $*,參數列表
- $@,參數列表
12、sed
- 基本用法
- 流編輯器
- 行編輯器(全屏編輯器:vi)
- 模式空間,
- 默認不編輯源文件,只對模式空間中的數據做處理
- sed [options] 'AddressCommand' file ...
- Address
- Startline,Endline:1,100,$表示最後一行,$-1.
- /RegExp:/root,以root開頭的字符串
- /pattern1/,/pattern/:第一次被模式一匹配到的行開始,到第一次被模式二匹配到的行結束。
- LineNumber:指定的行
- StartLine,+n:從startline開始,向後n行
- Command
- d:刪除符合條件的行,sed "1,2d" /etc/fstable
- p:顯示符合條件的行
- a \string:在指定的行後面追加新行,內容爲string
- i \string:在指定的行前面追加新行,內容爲string
- r fife:將指定的文件的內容添加至符合條件的行後(文件合併),
- w file:將指定範圍的內容另存至指定的文件中
- s/pattern/string/:查找並替換,默認只替換每行中第一次被模式匹配到的字符串,# (其他)也可做分隔符。
- 加修飾符
- g:全局替換:sed '/\//#/g' /etc/passwd
- i:查找時忽略字符大小寫
- 加修飾符
- options
- -n:靜默模式,不再默認顯示模式空間中的內容
- -i:直接修改原文件
- -e script ...:同時執行多個腳本
- -f FILE: sed -f /path/to/scripts file
- -r:使用擴展正則表達式
- 後向引用
- sed 's#l..e#&r#g' sed.txt
- &表示模式匹配到的所有字符串
- sed 's#\(l..e\)#\1r#g' sed.txt 類似於grep的用法
- sed 's#l\(..e\)#L\1r#g' sed.txt 將l替換爲L