LinuxShell指令碼攻略 第三章 以檔案之名

2022-07-27 17:24:13 字數 3512 閱讀 9683

生成任意大小的檔案

檔案許可權、所有權和粘滯位

建立不可修改檔案

生成空白檔案

查詢符號鏈結及其指向目標

head 與 tail

只列出目錄的其他方法

在命令列中用 pushd 和 popd 快速定位(cd -)

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

生成任意大小的檔案

$ dd

if=/dev/zero of=junk.data bs=1m count=1

if**輸入檔案(input file), of代表輸出檔案(output file),bs代表每個檔案的大小(block size),count代表需要被複製的塊數。

/dev/zero是乙個字元裝置,它會不斷的放回0值位元組(\0)。if也可以指定自己的其他檔案。

檔案許可權、所有權和粘滯位

linux系統中每乙個檔案都與多種型別的許可權相關聯。這些許可權中,我們通常要和三類許可權打交道(使用者,使用者組,其他使用者)。使用者(user)是檔案的所有者。使用者組(group)是多個使用者的集合(由系統管理員指定),系統允許這些使用者對檔案進行某種形式的訪問。其他使用者(others)是除檔案使用者或使用者組之外的任何人。

用命令ls -l檢視檔案

-rwxrwxr-x 1 fzk fzk 311 12月  6 20:35 test.sh

第一列說明了檔案的型別:

-  —— 普通檔案

d —— 目錄

c —— 字元裝置

b —— 塊裝置

l  —— 符號鏈結

s —— 套接字

p —— 管道

剩下的部分可以分為三組,每組三個字元(--- --- ---)。第一組的3個字元(---)對應使用者許可權(所有者),第二組對應使用者組許可權,第三組對應其他使用者許可權。這9個字元(即9個許可權)中的每乙個字元指明是否其設定了某種許可權。如果已設定,對應位置上會出現乙個字元,否則出現乙個 '-', 表明沒有設定對應的許可權。

目錄有乙個特殊的許可權,叫做粘滯位(sticky bit)。如果目錄設定了粘滯位,只有建立該目錄的使用者才能刪除目錄中的檔案,即使使用者組和其他使用者也有寫許可權,也無能無力。粘滯位出現在其他使用者許可權中的執行許可權( x )位置。它使用 t 或 t 來表示。如果沒有設定執行許可權,但設定了粘滯位,就使用 t ;如果同時設定了執行許可權和粘滯位,就使用 t 。

例如: ------rwt , ------rwt

$ chmod u=rwx g=rw o=r filename  #u代表user g代表group o代表other

$ chmod o+x filename        #增加使用者執行許可權

$ chmod a+x filename        #a**所有

$ chmod a-x filename        #刪除使用者執行許可權

$ chmod a+x dir -r #dir是目錄名,連同子目錄下的檔案全部增加執行許可權。-r在後面

也可用八進位制來設定許可權。

想設定什麼許可權就把相應的許可權對應的數字加和。

chmod u=rwx g=rw o=r filename  和   chmod 764 filename 乙個效果
更改所有權

$ chown

user.group filename

$ chown fzk.fzk test.sh

建立不可修改的檔案

$ chattr +i file    #設定不可修改

$ chattr -i file   #取消不可修改

這樣設定完之後就算執行 sudo rm -f file也不能刪除

生成空白檔案:touch filename

建立鏈結

$ ln -s target symbolic_link_name

$ ls -l | grep "^l"          #檢視符號鏈結

$ find . -type l -print

$ readlink web             #檢視鏈結的目標路徑

上面中的grep 對ls -l的輸出進行過濾,^顯示以 l 起始的行,^是字串的起始標記。也就是每個符號鏈結的許可權(lrwxrwxrwx)都是l開頭。

檢視檔案頭幾行,後幾行(head tail)

$ head

file

#前10行

$ cat text | head

#從stdin讀取資料前10行

$ head -n 4

file

#讀取前4行

$ head -n -5

file

#列印除了最後5行之外的其他行

$ seq

11 | head -n -5 #seq

11 能生成1 - 11

$ tail

file

#列印最後10行

$ cat text | tail

$ tail -n 5

file

#列印最後5行

$ tail -n +(m+1

) #列印除了前m行之外的所有行

$ tail -f growing_file #能隨著資料的增長保持更新

$ tail -f file --pid $pid #pid的程序一直向file中寫資料,如果pid結束,那麼tail也結束。

tail -f 後也可以跟乙個 -s 引數,指定多少秒跟新一次。

只列出目錄的各種方法

$ ls -d */$ 

ls -f | grep"/$

"$ ls -l | grep"^d

"$ find . -type d -maxdepth 1 -print

目錄間快速切換:

$ pushd /var/www    #將路徑壓入棧

$ dirs          #檢視棧中目錄

/usr/src /var/www ~ /usr/share /etc

$ pushd +n       #將上面目錄從左到右從0開始編號,切換到第n個目錄

$ pop          #從棧中刪除最後乙個目錄

$ pop +n         #刪除第n個目錄

$ cd -          #上個目錄之間進行切換,如果只有兩個目錄,這個方法非常方便

統計檔案的行數、單詞數和字元數(wc (word count))

$ wc -l file    #列印行數

7 file

$ cat file | wc -l

7$ wc -c file #-w 單次數

$ cat file | wc -w

$ wc -c file     #-c 字元數

$ cat file | wc -c

$ wc file      #分別列印出行數,單詞數,字元數(1435 15763 112200)

$ wc -l       #最長的一行長度

Linux Shell指令碼攻略(三)

一.find命令 1.根據檔名或正規表示式匹配搜尋 2.基於目錄深度的搜尋 maxdepth mindepth 3.根據檔案型別搜尋 4.根據檔案時間搜尋 atime 訪問時間 mtime 修改時間 ctime 變化時間 eg find type f atime 7 print 最近7天訪問的檔案 ...

linux shell指令碼攻略 一

變數數 算 重定向陣列 別名終端資訊 日期相關 除錯指令碼 函式和引數 管道命令 字段分隔符和迭代器 迴圈算術比較 檔案系統相關測試 字串比較 日期內容 格式星期 a 例如 sat a 例如 saturday 月 b 例如nov b 例如 november 日 d 例如31 固定格式日期 d 例如 ...

linux shell 指令碼攻略第3版 讀書筆記

第2章 1shell會擴充套件沒有引號或是出現在雙引號 中 的萬用字元。單引號能夠阻止shell擴充套件 txt,使得該字串能夠原封不動地傳給find命令。2find 命令 如果需要用到正規表示式使用單引號 例如 查詢 home slynux下面 所有以txt結尾的檔案並列印出來 find home...