天天看點

Linux Shell 腳本攻略 - 第三章 以檔案之名

3.1 生成任意大小檔案

    1 建立特定大小的檔案最簡單的方法是使用dd指令,dd指令會克隆給定的輸入内容,然後将一份一模一樣的副本寫道輸出

    2 stdin,裝置檔案,普通檔案等都可以作為輸入,stdout,裝置檔案,普通檔案等也可以作為輸出

    3 例子: dd if=/dev/zero of=data bs=1M count=1

       該指令會在當面目錄建立一個1MB大小的檔案data,來看一下參數,if代表輸入檔案,of代表輸出檔案,bs代表以位元組為機關的塊大小,count表示要被複制的塊數

    4 我們将bs指定為1MB,count為1,于是得到了一個大小為1MB的檔案,如果把count指定為2則得到2MB的檔案

    5 /dev/zero是一個字元裝置,他會不斷傳回0值位元組(\0)

    6 如果不指定輸入參數,預設情況是從stdin中讀取輸入,與之類似,如果不指定輸出參數則預設會将stdout作為輸出

3.2 文本檔案的交集和差集

    1 comm指令可以用于兩個檔案之間的比較,它有很多不錯的選項來調整輸出

    2 例子: comm fileA fileB

       輸出的第一列包含在fileA中出現行,第二列包含在fileB中出現的行,第三列包含在fileA和fileB中相同的行

       有一些選項可以按照我們需求進行格式化輸出

       -1 從輸出中删除第一列

       -2 從輸出中删除第二列

       -3 從輸出中删除第三列

3.3 查找并删除重複檔案

    1 重複檔案指的是那些雖然名字不同但是内容卻一模一樣的檔案

    2 校驗和是通過檔案的内容來的,内容相同的檔案校驗和是一樣的

3.4 建立長路徑目錄

    1 mkdir指令用于建立目錄,如果目錄已經存在會傳回錯誤資訊

    2 -e是條件判斷[]中的參數,可以用來判斷某個檔案是否存在,在類UNIX中,目錄同樣是一個檔案

3.5 檔案權限和所有權

    1 使用者是檔案所有者,使用者組是多個使用者的集合,系統允許這些使用者對檔案以某種形式進行通路

    2 用指令ls -l可以列出檔案的權限

       比如: -rw-r--r-- 1 chenguolin chenguolin 2497 2014-01-19 21:02 hehe.txt

    3 第一列總共有10個字元,第一個字元表示的是檔案的類型,'-'是普通檔案,'d'是目錄檔案,’c'字元裝置等等

       剩下的9個字元可以分成三組,每組三個字元。第一組的三個字元是使用者權限,第二組的三個字元是使用者組權限,第三組的三個字元是其他使用者。

       權限序列rwx,分别表示讀寫執行權限

    4 目錄同樣也具有讀寫執行權限,不過目錄相對于普通檔案來說是不一樣的

       目錄的讀權限r 允許讀取目錄檔案和子目錄的清單

       目錄的寫權限w 允許目錄中建立或删除檔案或目錄

       目錄的執行權限 指明可以通路目錄中的檔案和子目錄

    5 為了設定檔案權限,可以使用chmod指令

       chmod u=rwx g=rw o=r filename

       在這裡: u指的是使用者權限,g指的是使用者組權限,o是指其它人實體權限

       如果需要給檔案添權重限,可以對使用者,使用者組和其他使用者+進行添加,用-進行删除權限

       我們也可以利用八進制來設定權限,權限由3位數來表示,每一位按順序分别對應使用者,使用者組和其他使用者

       r對應的值為4,w對應的值為2,x對應的值為1

    6 我們可以使用chown來更改檔案的所有權

       chown user.group filename // 這樣是把檔案filename的所有者改為user,使用者組為group

    7 有時候要以遞歸的方式修改目前目錄下的所有檔案和子目錄的權限,可以使用下面的方法

        chmod 777 path -R //這個例子就是遞歸把path目錄下的所有檔案的權限修改為777

    8 同理我們也可以利用-R來遞歸修改檔案的所有者

        chown user.group path -R //這個指令就是遞歸把path目錄下的所有檔案的所有者和使用者組修改掉

3.6 建立不可修改的檔案

    1 一旦檔案被設定為不可修改,任何使用者包括超級使用者都不能删除該檔案,除非其不可修改的屬性被移除

    2 可以用chattr将檔案設定為不可修改

       sudo chattr +i file //這樣檔案file就變為了不可修改

    3 如果需要使得檔案可以寫,直接使用sudo chattr -i file來修改權限

3.7 批量生成空白檔案

   1 touch指令可以用來生成空白檔案,如果檔案存在,則可以用它來修改檔案的時間撮

   2 touch file // 如果檔案不存在則建立一個檔案否則直接修改該檔案的時間戳

   3 如果我們隻是想修改某些時間戳,則可以使用下面的選項

      touch -a 隻更改檔案通路時間 

      touch -m 隻更改檔案内容修改時間

3.8 查找符号連結及其指向目标

   1 符号連結不過是指向其他檔案的指針,它在功能上類似Mac OS中的别名或windows中的快捷方式

   2 我們可以按照下面的方式建立連結

      ln -s file link //該指令為檔案file建立一個連接配接link

3.9 列舉檔案類型統計資訊

   1 我們可以使用file指令來列印檔案類型 

      file filename //可以列印處filename的檔案類型

3.10 環回檔案及挂載

   1 為了使用儲存設備上面的檔案系統,我們需要将其挂載到一些被稱為挂載點的目錄上

   2 前面介紹了可以使用dd指令建立一個大的檔案,那麼我們可以使用mkfs這個指令來格式化裝置

      mkfs.ext4 /dev/sdb1 // 這個指令就是把/dev/sdb1格式化成ext4檔案類型

   3 我們可以使用mount來挂載

      mount /dev/sdb1 /mnt/usb  //這個指令就是把/dev/sdb1 挂載到/mnt/usb

   4 如果要解除安裝使用下面的方法

      umount /dev/sdb1 或 umount /mnt/usb

      因為umount是一個特權指令,是以必須以超級使用者的身份來執行

3.11 查找檔案差異進行修補

    1 我們可以使用patch(更新檔檔案)來更改檔案資訊

    2 diff指令可以用來比較兩個檔案,最常用的用法是diff fileA fileB

       我們還可以使用-u選項來進行一體化輸出 diff -u fileA fileB

    3 在一體化輸出中,以+起始的是新加入的行,以-起始的是删除的行

       diff -u fileA fileB > patch // 這個指令把兩個檔案的差異資訊重定向到patch檔案

    4 用下面的指令來修補

       patch -p1 file < patch // 這個指令可以把file進行差異更新

       如果要撤銷修改直接進行同樣的指令即可

3.12 head和tail

    1 head指令總是讀取輸入檔案的頭部 head file列印檔案file的前10行

    2 seq指令可以用來快速的生成一個序列 seq 11用來生成1~11的序列

    3 tail指令列印檔案的最後10行 tail file

3.13 隻列出目錄的方法

    第一種:ls -d */    // 隻有上面這種結合-d的用法才能夠隻列印出目錄

    第二種:ls -F | grep "/$"  // 當使用-F時,所有輸出項都會添加上一個代表檔案類型的字元

    第三種:ls -l | grep "^d"  // ls -l輸出的每一行,然後利用grep找到第一個字元是d的

    第四種:find path -maxdepth 1 -type d -print  // find指令指定最大的查找深度還有檔案類型

3.14 統計檔案的行數,單詞數和字元數

    1 wc是一個用于統計的工具,它是word count的縮寫

    2 統計行數: wc -l file

       統計單詞數: wc -w file

       統計字元數: wc -c file

       wc file預設列印出檔案行數,單詞數還有字元數

    3 wc file -L可以用來列印出最長行的長度

3.15 列印目錄樹

    1 tree指令是以圖形化的樹狀結構列印檔案和目錄的主角,通常在Linux的發型版本中并沒要該指令

    2 tree path // 這個指令可以直接以樹形來顯示

    3 以HTML形式輸出目錄樹

       tree path -H http://localhost -o out.html

       将http://localhost替換為适合存放輸出檔案的URL,将path替換為真的路徑,然後就可以生成web版的目錄樹

繼續閱讀