歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> LinuxShell腳本攻略-第三章以文件之名

LinuxShell腳本攻略-第三章以文件之名

日期:2017/3/1 13:37:10   编辑: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版的目錄樹

Copyright © Linux教程網 All Rights Reserved