Linux學習筆記(7~12)

續前文

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
  • 找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 $?
      • 撤銷變量:unset varname
      • 查看當前shell中變量:set
      • 查看環境:printenv,env,export
      • 變量附加:animals=$animals:goat,不做算數運算,只做字符串相加
      • 腳本:命令的堆砌,按實際需要
        • shebang:魔數, 首行寫 #!/bin/bash
        • # 註釋行,不執行。
        • 賦予執行權限:chmod +x file.sh
        • ./file.sh 執行腳本
        • 不賦予執行權限,作爲bash的參數,bashfile.sh ,使用解釋器執行

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 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
  • 測試腳本是否有錯誤
  • 位置變量:
    • $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
發佈了46 篇原創文章 · 獲贊 16 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章