《Linux Shell 指令碼攻略》學習記錄之三

2021-07-09 19:27:58 字數 2727 閱讀 1275

cat

cat本身表示concatenate(拼接)

cat file1 file2 file3 ...

將標準輸入與另外乙個檔案資料結合在一起

echo 'text through stdin' | cat - file.txt

擺脫多餘的空白行

cat -s file.txt

將製表符顯示為^| 

cat -t file.txt

顯示行號,如果要跳過空白行使用-b

cat -n file.txt

cat -nb file.txt 跳過空白行

find

列印檔案和目錄的列表

find . -print

find -name 

find -iname 忽略大小寫

如果匹配多個條件,使用or

find . \(-name "*.txt" -o -name "*.pdf" \) -print  ???????????????

匹配多個檔案型別

find . -regex ".*\(\.pdf\|\.txt\)$"

排除某些型別

find . ! -name "*.txt" -print

基於目錄深度的搜尋

find . -maxdepth 1 -name "f*" -print 指定深度以內的

find . -mindepth 2 -name "f*「 -print 指定目的深度,排除一些

-maxdepth - mindeptch 作為第三個引數出現,如果作為第四個引數,效率會降低

根據檔案型別進行搜尋

find . -type d -print 目錄

find . -type f -print 普通檔案

find . -type l -print  符號鏈結

c 字元裝置   

b 塊裝置

s 套接字

p fifo

根據檔案時間進行搜尋

unix/linux檔案系統中的每乙個檔案都有三種時間戳

訪問時間(-atime): 使用者最近一次訪問的時間

修改時間(-mtime): 檔案內容最後一次唄修改的時間

變化時間(-ctime): 檔案元資料(例如許可權或所有權)最後一次改變的時間

單位是天,這些整數通常還帶有-或+:-表示小於,+表示大於。

列印最近7天內被訪問的所有檔案

find . -type f -atime -7 -print

列印出恰好在7天前被訪問過的所有檔案

find . -type f -atime 7 -print

列印出訪問時間超過7天的所有檔案

find . -type f -atime +7 -print

單位時間為分鐘的

-amin (訪問時間)

-mmin (修改時間)

-cmin (變化時間)

find 另乙個漂亮的特性是-newer引數,使用它可以比較時間戳比參考檔案更新的所有檔案

find . -type f -newer file.txt -print

基於檔案大小的搜尋

大於2k

find . -type f -size +2k

小於2k

find . -type f -size -2k

大小等於2k的檔案

find . -type f -size 2k

除k之外,還有其他檔案大小單元

b -塊 512位元組

c 位元組

w 字 2位元組

k 1024位元組

m 1024k

g 1024m 

刪除所有匹配檔案

find . -type f -name "*.swp" -delete

基於檔案許可權和所有權的匹配

find . -type f -perm 644 -print

列印沒有設定好知執行許可權的檔案

find . -type f -name "*.php" ! -perm 644 -print

列印使用者擁有的檔案

find . -type f -user slynux -print

find借助-exec,執行其他命令

修改許可權

find . -type f -user root -exec chown slynux {} \;all_files.txt

將10天前的.txt檔案複製到old目錄中

find . -type f -mtime +10 -name "*.txt" -exec cp {} old \;

-exec 結合多個命令

-exec是單個命令的,不過可以使用乙個shell指令碼

-exec ./commands.sh -f server -b "%02d.log" ; rm server00.log

/server/ 用來匹配某一行,分割過程即從此處開始

表示根據匹配重複執行分割,直到檔案末尾為止。可以用的形式來指定分割執行的次數。

-s 使命令進入靜默模式,不列印其他資訊

-n指定分割後的檔名字尾的數字個數,例如01,02,03等。

-f 指定分割後的檔案字首(在上面的例子中,server就是字首)

-b 指定字尾格式。例如%02d.log,類似於c語言中的printf的引數格式。在這裡

檔名=字首+字尾=server + %02d.log

因為分割後的第乙個檔案沒有任何內容(匹配的單詞就位於檔案的第一行中),所以我們刪除了server00.log

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 指令碼學習攻略9

1 建立不可修改的檔案 chattr 能夠將檔案設定為不可修改。不過chattr能做的可不止這些。a 使用下列命令將乙個檔案設定為不可修改 b 這樣檔案file就變成為了不可修改狀態。來試試下面的命令 c 如果需要是檔案恢復可寫狀態,移除不可修改屬性即可 2 批量生成空白檔案 touch 命可以用來...