cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自動化交互python
1. cat的用法linux
壓縮連續的空白行git
cat -s fileshell
也能夠用tr,將連續'\n',壓縮成一個'\n'bash
cat file | tr -s '\n'服務器
顯示製表符session
cat -T filessh
顯示行號spa
cat -n file命令行
2. script命令
錄製: script -t 2> time.log out.session
type commands;
exit退出錄製
回放: scriptreplay time.log out.session
記錄日誌: script -aq out -c "pwd"
能夠將-c裏面執行命令的結果保存到out文件,達到記錄日誌的目的
3. find命令
多條件組合
注意括號須要轉義,後面必須有空格
查找shell還有python文件
目錄深度
find . -mindepth 2 -type f
find . -maxdepth 1 -type d
文件類型
find . -type d # d表示目錄,f表示文件,l表示連接
文件時間,linux中沒有文件建立時間概念
-atime,用戶最近一次訪問文件的時間; -mtime,文件內容最後一次被修改的時間; -ctime,文件元數據(metadata,例如權限或全部權)最後一次改變的時間
其中-表示小於,+表示大於
查找七天內被訪問過的文件: find . -type f -atime -7; 剛好在七天前被訪問的文件: find . -type f -atime 7; 超過七天被訪問的文件: find -type f -atime +7
類似的有amin,mmin,cmin,以分鐘爲單位
文件大小
-size ( b,塊 512字節; c,字節; w,字 2字節; k, 千字節; M,兆字節; G )
其中-表示小於,+表示大於
刪除文件 -delete
刪除當前目錄下全部.swp文件: find . -type f -name "*.swp" -delete
全部權或用戶查找
find . -type f -perm 644
find . -type f -user sryan
結合find執行命令,-exec
將當前目錄下用戶爲root的文件改成sryan
find . -type f -user root -exec chown sryan {} \;
{}是find搜尋的結果,\轉義分號,不讓shell解釋,意思該分號是給-exec使用
-exec只能接受單個命令,因此若是有多個命令,能夠寫成腳本,-exec ./comand.sh {} \;
find命令所有輸出只是一個單數據流(stdin),只有當多個數據流被追加到文件時,纔有必要用用>>
find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt #將當前目錄下全部c程序文件拼接起來寫入文件
find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \; #將大於10天的txt文件移動到OLD目錄下
修剪,跳過指定目錄
find dev/folder \( -name ".git" -prune \) -o \( -type f -print \) # 排除.git目錄,打印全部文件的名稱和路徑
只查看目錄下非隱藏的文件, 試了下,若是不加-o選項,則-prune不會起做用
4. xargs
有些命令沒法接收stdin數據流,xargs可以將標準輸入數據先格式化,轉換成命令行參數
將多行轉換成單行輸出, xargs默認是按照「 」空格來格式化的
-n 指定每行最大參數數量
-d 指定定界符,注意是區分大小寫的
-I 選項指定一個替換字符串
cat args.txt | xargs -I {} ./test.sh -p {} -l
至關於 .test.sh -p arg1 -l
test.sh -p arg2 -l
與 -i 的區別
與find的結合
誤區: find . -type f -name "*.txt" -print | xargs rm -f
沒法預測find輸出結果的定界符到底是'\n'仍是空格' ',不少文件名中含有空格
誤刪了hell文件,可是hell test.txt沒刪掉,由於xargs是以空格爲定界符的
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
xargs -0 將\0做爲指定的定界符
統計每一個txt文件的行數
5. tr
對來自標準輸入的字符進行替換,刪除以及壓縮。沒法經過命令行參數接收輸入
tr後面的兩個參數須要等長,若是前面短,則截斷後面;若是前面長,則後面的用最後一個字符補齊
-d 刪除
-s 壓縮,能夠用來去除多餘空格
$[ ] 是執行算術運算
字符類替換
alnum: 字母和數字; alpha: 字母; cntrl: 控制字符
digit: 數字; graph: 圖形字符; lower: 小寫
upper: 大寫; print: 可打印字符; punct: 標點符號
space: 空白字符; xdigit: 十六進制
6. 產生tmp文件
或者使用$RANDOM
或者temp_file=/tmp/var.$$,在腳本中,$$會被擴展成當前運行腳本的進程id
7. 生產固定大小的文件
dd if=/dev/zero bs=100k count=1 of=data.file
生成大小爲100kb而文件內容所有是0
8. 字符串截取
${var%.*},刪除位於%右側的通配符(.*)所匹配的字符串,通配符從右向左匹配
貪婪模式
${var#.*},刪除位於#左側通配符(.*)所匹配的字符串,通配符從左向右匹配
9. 批量文件重命名
rename 'y/A-Z/a-z/' * #大寫替換成小寫,*匹配全部文件
find . -type f -exec rename 's/ /_/g' {} \; #將全部文件裏的空格替換成_
10. 自動化交互
#!/bin/expect spawn kinit sryan expect "Password*" send "Mypassword\n" expect eof # interact
spawn: 啓動你要自動化的的進程
expect:須要等待的信息
send: 要發送的信息
expect eof: 指明命令交互結束
interact: 將交互狀態保留給控制檯,例如ssh進入後,若是不加這句,就會退出,而不是留在遠程服務器上