查找模塊
1. locate : 非實時查找(數據庫查找)
實時查找: find
locate 查詢是建立在系統上預建的文件索引數據庫
/var/lib/mlocate/mlocate.db
索引的構建是在系統較為空閑時自動進行(周期性任務); 管理員手動更新數據庫(updatedb)
索引構建過程需要遍歷整個根文件系統, 極度消耗資源。
2. locate
-i 不區分大小寫
-r '正則表達式'
locate 支持模糊查詢
比如: locate pass 只要文件名中有pass就行, 這一點和find的命令的區別很大, find命令必須要搭配通配符, 表示一個完整的路徑 *pass*
3.locate 的優勢: 1>.運行速度非???2>.查找固定的文件(比如配置文件的話)效果非常好。
4. find : 實時查找、功能更加的強大、可以匹配到的查詢條件更多。
5.find [OPTION] … [查找路徑] [查找條件] [處理動作]
查找條件:
1>. 根據文件名和inode查找
-name 必須是個完整的路徑, 不支持模糊查詢
如果有通配符話的, 必須用雙引號括起來
-iname 忽略大小寫
-inum n 按inode號查找
-samefile name 指向該文件硬鏈接數
-regex "PATTERN" 以PATTERN匹配整個條件路徑字符串,而不僅僅是文件名稱
2>. 根據屬組、屬主查找:
-user
-group
-uid
-gid
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
3>. 查找文件類型查找
-type TYPE:
f: 普通文件
d: 目錄文件
l: 符號鏈接文件
s:套接字文件
b:塊設備文件
c: 字符設備文件
p: 管道文件
4>. 組合條件:
find調用多個條件的時候,尤其當你后面還要加操作命令的話, 一定要記得用雙引號()括起來。雙引號必須通過\轉譯。并且雙引號的兩邊必須有空格。
什么情況需要用用雙引號:1>用到德摩根定律 2>.多個判斷條件時, 并且后面跟上了操作命令。
與: -a 多個條件時,默認就是與操作
或: -o 多個條件時,默認是或操作
比如: find -user zhangsan -o -type d
非: -not ,!
find -not -user root -a -type f
./pp1
find ! -user root -a -type f
./pp1
5>. 查找條件:
-size [+-]#UNIT
K M G
#UNIT (#-1,#]
-#UNIT [0,#-1]
+#UNIT (#,無群大)
+-# 表示一個完全的路徑
+:>#到無窮大 #: (,#-1,#] -#: 負無窮->#-1
根據文件大小查找文件在實際過程中, 用來查找大文件.
find /tmp -size +1G // 用來查找/tmp目錄下文件大小大于1G的文件
6>. 根據時間戳:
atime [+|-]#.
#: [#,#+1]
+#: [#+1,…]
-#: [0,#)
mtime:
ctime:
以"分鐘"為單位:
-atime
-mtime
-ctime
// 用來查詢某段時間修改過的配置文件
find -mtime -10 /
查看10分鐘內修改過的文件
7>. 根據權限查找:
-perm [/|-]MODE
/MODE 只要3種對象必須有一種權限對上就行了
-MODE 三種對象在權限上都必須對上
以上權限超了是沒有沒有關系的, 比如指定r, 你是rw, 這肯定是可以的
6. 處理動作:
-ls == ll
-print 默認動作
-delete
-fls file 指定到相應的文件中
-ok COMMAND {} \; 交互式的
-exec COMMAND {} \; 非交互式的 {} 表示你找到的文件
find xxx | xargs COMMAND
例子:find /testdir -name "passwd" | xargs chmod +x
效果是查找出的命令會默認寫到COMMAND
7. 德摩根定理:
!(A and B) =! A or !B
!(A or B) = !A and !B
8. 排除指定目錄:
find /etc/ -path '/etc/sane.d' -a -prune -o -name "*.conf" | grep "sane"
-path '/etc/sane.d' -a -prune 排除該目錄
上面的選項和-o命令搭配使用, 指定判定條件。
壓縮模塊
1. comperss 壓縮
uncomperss 解壓縮
2. gzip [OPTION] … FILE …
-d: 解壓縮, 相當于gunzip
-c: 將壓縮或壓縮的結果輸出至標準輸出
-#: 1-9, 指定壓縮比, 值越大壓縮比例越大
zcat : 不顯示解壓縮的前提下查看文本文件內容
比如:壓縮指令
gzip file // 原文件被刪除
gzip -c file > file.gz // 保留原文件
解壓縮:
gzip -d file.gz
gunzip file.gz // 刪除壓縮文件
zcat file.gz > file // 保留壓縮文件
3. bzip2/bunzip2/bzcat
bzip2 [OPTION] … FILE …
-k : keep, 保留原文件
-d: 解壓縮
-#: 1-9 壓縮比,默認為6
bzcat : 不顯示壓縮的前提下查看文本文件內容
壓縮:
bzip2 file // 刪除原文件
bzip2 -k file // 保留原文件
解壓縮:
bunzip2 -k 壓縮文件 // 保留壓縮文件
bzip2 -d 壓縮文件
bzcat 壓縮文件 > 文件, 保留壓縮文件
4. xz : 新的壓縮技術
5.zip/unzip // 可以打包壓縮, 可以壓縮目錄
-r: 用來指定壓縮后文件名,如果后面沒有指定.zip結尾, 默認自動添加.zip為結束符。
打包壓縮:
zip -r sysconfig sysconfig/
cat /var/log/messages | zip message –
解包解壓縮:
unzip sysconfig.zip
unzip -p message.zip > message
隨記
1. . source bash 絕對路徑執行 4者的區別:
. source
這兩種一般用來執行系統的腳本配置文件。執行后腳本中的變量是可以在當前shell中運行的。
bash 絕對路徑
bash 是由當前shell子shell執行, 所以腳本中的變量是無法在當前shell中運行。
2. vim 編輯文檔的時候, 如何往tab鍵變為4個空格, 在命令擴展模式,編輯tabstop
:tabstop=5 // 就將tab鍵變為5個空格。
3. 無論是if 還是elif 后面都是 ; then, 這個模式是固定的, 只有else后面是不需要加任何東西的。
4.case 變量 in 第一句后面不需要:
值1): 值是支持通配符的
分支
;;
值2):
分支
;;
…
esac
5. 在shell編程中, 如果只是單純的為了執行某條命令或則是要把根據這條命令的是否執行成功而去做出相應的操作的話, 是不需要加 反引號 “
只有想要將執行的結果賦予變量的時候, 需要加反引號 “
6. 雖然在shell編程中, 命令的執行的結果是0或則是非0, 但是這些值是不能直接被if for 語句調用。
7. grep -i xxx 忽略大小寫。
8. [[ $1 =~ 正則表達式 ]] 正則表達式是不需要加"", 雙引號的。加了, 就會報錯。 這個功能蠻重要。
9. 用來匹配字符串 [[ 變量 =~ 正則表達式 ]]
10. [[]] 雙括號中是不支持 -a -o 選項的。 條件與 條件或
11. 文件測試的功能非常強大, 一般性的要求都是可以直接返回直接去判斷的。
12. 用來抽取文本中的特定的一段的內容的時候, 一直使用sed命令分組替換,其實這樣很費事,如果可以通過grep -o 抽取出來是很方便的。
13. expr length 字符串 // 可以用來求字符串的長度
14./proc 目錄下, 有很多數字信息, 這些都是內存上進程變化的數據, 這些數據find命令是不可以查找的。
15. usermod -ou uid號 用戶名
// 忽略uid重復, 設置相同uid的用戶。 如果設置了相同的uid, 后面設置的用戶其實就是個傀儡, 這個用戶是可以訪問,但是訪問這個用戶其實訪問同UID的用戶。
16. 時間戳:
atime: 上次被查看的時間
mtime: 上次被編輯的時間
ctime: 上次元數據變化的時間
atime : 讀取文件的話, atime時間不會馬上改變, 當atime這個時間比mtime早的話,atime會改變。 還有一種是當aitme時間操作規定的時間的話,atime會也會改變。
17. 安裝外界包的時候, 大部分是先打包, 然后將包壓縮, 大部分的后組是.tar.gz, 或則是 .tar.bz2。
20.Windows默認使用的zip軟件壓縮文件, 這是Windows系統自帶的軟件, 右擊文件,發送到zip管理工具, 就壓縮了。
作業:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
1. find /var -user root -group mail
2、查找/var目錄下不屬于root、lp、gdm的所有文件
2.find /var ! \( -user root -user lp -user gdm \)
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
3.find /var -mtime -7 -not -user root -not -user postfix
find /var -mtime -7 -not (\ -user root -or -user postfix \)
4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
4. find / -nouser -nogroup -mtime -7
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
5. find /etc -size +1M -type f
6、查找/etc目錄下所有用戶都沒有寫權限的文件
6. find /etc -not -perm /222
7、查找/etc目錄下至少有一類用戶沒有執行權限的文件
find /etc -not -perm -222
8、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件
8. find /etc/init.d -perm -113
find /etc/init.d/ -perm -111 -perm 002
原創文章,作者:458813466,如若轉載,請注明出處:http://www.www58058.com/34886