天天看點

讀書筆記--Linux Shell腳本攻略

總結的來說,這本書很實踐性和實用性強,都是給的具體的例子,直接可以在終端操作實踐,比單純隻看不動手務實多了,另外就是,這本書涵蓋的内容也比較廣,從文本操作到伺服器管理到遠端ssh等等,都給出來作者挑選的一些比較經驗實用的shell指令和shell腳本,不過也可以看出來,這本書是作者從自身實用的角度來挑選shell指令和腳本,是以覆寫面比較全,但是會感覺有點零碎,比如對于shell的基本文法就不會展開講,隻是會提到,需要有基本的shell底子,另外就是像sed、awk這種大神級别的shell指令,講解的相對不是很完整,略零碎,特别是awk,可能需要另外找資料看。總的來說是一本值得入手的書,讓你對linux各個方面的指令和shell腳本有個不錯的認識。

貼上記錄的筆記,ps,筆記用markdown記錄的,markdown絕逼做筆記記錄的神器,沒有之一!

Linux Shell腳本攻略

第一章 小試牛刀

運作shell腳本的兩種方式:

  • sh test.sh 用sh指令
  • 賦予可執行權限,chmod a+x tesh.sh,然後執行./test.sh

echo

  • 不帶引号的echo,如echo hi google,沒法在echo後面的文本中使用分号,因為分号在bash裡是指令界定符,比如echo hi;google隻會輸出hi
  • 帶單引号的echo,bash不會對單引号中的變量入$var求值,會原樣輸出
  • 帶雙引号的echo,不會列印感歎号。echo “hi!google”會報錯

printf

  • printf指令也可以用于輸出,特别适合用于格式化輸出,但是printf不會像echo那樣預設換行,需要手動添加\n換行

變量

  • var=value,這是給變量指派
  • var = value,這是判斷兩個變量相等
  • 計算變量長度:length={#var}

重定向

  • $echo "test" > temp.txt會先清空temp.txt然後再寫入
  • $echo "test" >> temp.txt會以追加的方式寫入

第二章 指令之樂

cat

  • cat file1 file2 file3...讀取多個檔案
  • cat -s file 壓縮空白行,把文本的多個空行壓縮成一個
  • cat -n file 顯示行号

find

  • find base_path列出目前目錄和子目錄下的所有檔案和檔案夾
  • find path -name '*txt' 根據檔案名或者正規表達式比對搜尋
  • find path -iname '*txt' 同上,忽略大小寫
  • find path ! -name '*txt' 對上面的搜尋結果取反
  • find path -type d 根據檔案類型搜尋,d檔案夾,f普通檔案,etc
  • find path -type f -size +2k 根據檔案大小搜尋,+2k大于2k的檔案,-2k小于2k的檔案,2k等你2k的檔案
  • find path -type f -name '*txt' -delete 删除比對到的檔案

md5sum

  • 用來計算檔案md5值,校驗檔案完整性
  • md5sum filename 生成檔案的md5值
  • md5sum filename > file_sum.md5 把生成的md5值重定向到檔案中
  • md5sum file1 file2 file3校驗這三個檔案的md5值,比較是否相同
  • md5sum -c file_sum.md5 檢查md5值是否比對

第三章 以檔案之名

權限設定

  • 第一個代表類型,-表示普通檔案,d表示目錄,etc
  • 後面三個三個一組,分别代表使用者、使用者組、其他使用者的權限
  • 三個一組的值基本都是rwx和-,-表示沒有權限,r代表讀權限,w代表寫權限,x代表執行權限,對于目錄,x代表可以通路目錄中的檔案和子目錄
  • chmod u=rwx g=rwx o=rwx filename設定權限,u=使用者權限g=使用者組權限o=其他使用者權限
  • chmod o+x filename 給其他使用者增加可執行權限
  • chmod a+x filename 給所有權限類别(all)加上執行權限
  • chmod a-x filename 給所有權限類别删除執行權限
  • 還可以使用八進制來設定權限,比如chmod 764 filename
  • chmod a+x . -R 遞歸的方式修改目前目錄下所有檔案和子目錄的權限

head

  • head filename 列印檔案前10行
  • head -n 5 filename 列印檔案前5行

tail

  • tail filename 列印檔案後10行
  • tail -n 5 filename 列印檔案後5行
  • tail -f filename 不斷列印檔案的新增内容

wc

  • wc -l filename 統計行數
  • cat filename | wc -l 同上
  • wc -w filename 統計單詞數
  • wc -c filename 統計字元數

tree

  • tree ./ 用圖形化的樹狀結構列印檔案和目錄

第四章 讓文本飛

正規表達式

grep

  • grep "text" . -R -n 從目前目錄開始對文本遞歸搜尋,linux下查找源碼的利器
  • grep -i "text" 忽略大小寫
  • grep "text" filename -A 3 列印比對結果之後的3行
  • grep "text" filename -B 3 列印比對結果之前的3行
  • grep "text" filename -C 3 列印比對結果前後各3行

sed

sed用來替換給定文本中的字元串,可以用正規表達式進行比對。

  • $sed 's/pattern/replace_string/' file 或者 $cat file | sed 's/pattern/replace_string/'
  • $sed -i 's/pattern/replace_string/' file 将替換結果寫入到原檔案
  • 上面這種替換隻會将每一行的第一個比對替換,如果需要替換所有的,需要加上參數g,這樣:$sed 's/pattern/replace_string/g' file
  • sed '/^$/d' file 移除空白行,/pattern/d會移除比對樣式的行,在空白行中,行尾标記緊随着行首标記
  • sed表達式通常用單引号,也可以用雙引号,雙引号可以引用變量,比如:
$text=hello
    $echo hello world | sed "s/$text/HELLO"
    HELLO world           

awk

awk過于牛逼了,這本書裡關于awk指令的講解太碎不夠系統,需要另外找資料系統的看下

第五章 一團亂麻?沒這回事

主要講解curl、wget等幾個在指令行下求情遠端URL的指令

第六章 B計劃

tar

tar指令用來歸檔檔案

  • tar -cf output.tar file1 file2 file3... -c代表建立檔案,-f代表指定檔案名
  • tar -rvf output.tar file1... -r代表添加檔案,向已存在的tar包中添加檔案
  • tar -tf archive.tar 列出歸檔檔案中的内容
  • tar -tvf archive.tar 列出歸檔檔案中内容的詳細資訊
  • tar -xf archive.tar 提取歸檔檔案到目前目錄
  • tar -xf archive.tar -C path 提取歸檔檔案到指定目錄
  • tar -Af file1.tar file2.tar 将file2.tar合并到file1.tar中
  • tar -f archive.tar --delete file1 file2...從歸檔檔案中删除檔案

第七章 無網不利

主要講解ssh指令,利用ssh-keygen -t rsa可以生成ssh公鑰和私鑰,實作免輸密碼的ssh登陸

第八章 當個好管家

du

du指令檢視磁盤占用空間情況

  • du file1 file2 檢視各個file的大小
  • du -h file1 file2用更友好的方式展示file大小
  • du -ak source_dir | sort -nrk 1 | head 查找指定目錄中最大的10個檔案

df

df輸出磁盤空間使用情況,df -h更友好的展示空間使用情況

第九章 管理重任

ps

檢視程序資訊

uptime

檢視系統load和系統運作時間

top

預設輸出一個占用cpu最多的程序清單

kill

  • kill -9 process_id 強殺程序

wall

這個指令可以向所有目前登入使用者的終端發送資訊,這個還挺好玩,不過沒試過

cron

一個很有用的排程指令,寫過時間程式的應該都對這個很有印象

以上。

繼續閱讀