Linux知識心得12 檔案查詢+上傳下載+輸出與重定向+字元處理+打包
阿新 • • 發佈:2021-07-01
筆記
1、今天內容
1、檔案查詢 1、查詢深度 指定需要查詢的檔案層級。 格式: find [路徑] -maxdepth [層級數] [匹配規則] # 注:-maxdepth不能夠單獨使用的 例1:查詢/etc目錄下所有的資料夾,要求目錄層級為3? find ./ -maxdepth 3 -type d 例2:查詢/etc目錄下名稱包含eth的普通檔案,要求目錄層級為3。 [root@localhost etc]# find /etc -maxdepth 3 -name '*eth*' -type f 2、處理查找出來的內容 -exec 是find中的引數之一,它的主要作用是將find查詢出來的內容交給其他命令來處理。 格式: find [路徑] [匹配規則] -exec 處理的命令 {} \; 例1:將/etc目錄下所有的普通檔案複製到/tmp/etc目錄下 [root@localhost etc]# find /etc -type f -exec cp {} /tmp/etc/ \; 例2:將/tmp/etc目錄中所有超過1M的檔案刪除 [root@localhost etc]# find /tmp/etc -size +1M -exec rm -rf {} \; xargs xargs不是find的引數,它是格式化輸出的一種命令 格式: find [路徑] [匹配規則] | xargs 例1:查詢/tmp/etc目錄中超過20M的檔案,將其刪除 [root@localhost etc]# find /tmp/etc/ -size +10M | xargs -I {} rm -rf {} 例2:查詢/tmp/etc目錄中超過20M的檔案,將其移動到/root目錄下 [root@localhost etc]# find /tmp/etc -size +20M | xargs -I {} mv {} /root/ 3、檢測 1、將etc目錄中所有的目錄複製到/tmp下 find /etc -type d -exec cp -r {} /tmp \; 2、將/tmp下檔名稱中包含sys的檔案及資料夾刪除 find /tmp -name '*sys*' -exec rm -rf {} \; 2、上傳與下載 1、上傳 yum install lrzsz -y rz 2、下載 wget 下載檔案(yum install wget -y) 引數: -O : 指定下載的路徑及檔名 curl 讀取檔案(Linux自帶命令) 引數: -o : 指定下載的路徑及檔名 sz 從Linux主機中下載檔案到客戶端 3、輸出與重定向 $? : 上一條命令的執行結果(執行返回值),當返回值為0時,則認為上一條命令執行成功,非0則認為失敗。 0 :標準輸入 1 :標準正確輸出 2 : 標準錯誤輸出 & :是標準正確和錯誤輸出 > :覆蓋重定向(先清空該檔案,然後寫入新內容) >> :追加重定向(在原有的檔案後寫入新內容) < :輸入重定向 #!/bin/bash while read line do echo $line done < /etc/passwd 2>&1 等價於 & echo 111 >> log 2>&1 echo 111 & >> log 檢測: 1、使用grep過濾檔案中包含root的行,要求使用輸入重定向方式(/etc/passwd) grep 'root' < /etc/passwd 2、編寫一個指令碼,要求標準正確輸出到log檔案中,標準錯誤輸出到log1檔案中。 echo 111 1>log 2>log1 4、字元處理命令 1、字元排序 sort 將字元按照一定的順序排序,(預設情況下:按照第一個字元進行排序) 引數: -n # 依照數值的⼤⼩排序 -r # 以相反的順序來排序 -k # 以某列進⾏排序 -t # 指定分割符,預設是以空格為分隔符 例1:將1.txt按照數值從大到小進行排序 [root@localhost ~]# cat 1.txt | sort -n -r 例2:將1.txt按照第二列數值從大到小進行排序 [root@localhost ~]# cat 1.txt | sort -n -r -k2 例3:將1.txt按照冒號來分割,按照第三列來從大到小進行排序 [root@localhost ~]# cat 1.txt | sort -n -r -k3 -t: 2、字元去重 uniq ⽤於檢查及刪除⽂本⽂件中重複出現的⾏列,⼀般與 sort 命令結合使⽤。 引數: -c # 在每列旁邊顯示該⾏重複出現的次數。 -d # 僅顯示重複出現的⾏列。 -u # 僅顯示出⼀次的⾏列。 #由於統計是統計相臨的幾個數值,需要配合sort來正確統計資料 例1:輸出2.txt檔案中,每個詞出現的次數 [root@localhost ~]# cat 2.txt | sort | uniq -c 例2:在第一題的基礎上,僅顯示出現重複的列 [root@localhost ~]# cat 2.txt | sort | uniq -c -d 例3:在第一題的基礎上,僅顯示未重複的列 [root@localhost ~]# cat 2.txt | sort | uniq -c -u 例4:在第一題的基礎上,要求按照重複的次數進行排序 [root@localhost ~]# cat 2.txt | sort | uniq -c | sort -r 3、切割字元 cut cut命令⽤來顯示⾏中的指定部分,刪除⽂件中指定欄位 引數: -d # 指定欄位的分隔符,預設的欄位分隔符為"TAB"; -f # 顯示指定欄位的內容; 例1:獲取當前系統中所有的使用者ID [root@localhost ~]# cat /etc/passwd | cut -d: -f3 例2:在第一題的基礎上,按照從大到小的順序排序 [root@localhost ~]# cat /etc/passwd | cut -d: -f3 | sort -r -n 4、刪除和替換字元 tr 替換或刪除命令 引數: -d # 刪除字元 例1:刪除/etc/passwd中root [root@localhost ~]# cat /etc/passwd | tr -d 'root' 例2:將/etc/passwd檔案中所有的bash轉換成BASH [root@localhost ~]# cat /etc/passwd | tr 'bash' "BASH" 5、字元統計 wc 統計,計算數字 引數: -c # 統計⽂件的位元組數; -l # 統計⽂件的⾏數; -w # 統計⽂件中單詞的個數,預設以空⽩字元做為分隔符 例1:統計3.txt中有多少個位元組的資料 [root@localhost ~]# cat 4.txt | wc -c 例2:統計3.txt中有多少行資料 [root@localhost ~]# cat 4.txt | wc -l 例3:統計3.txt中有多少個詞(一段數字和字母連續不斷的字串,不包含特殊字元) [root@localhost ~]# cat 4.txt | wc -w
2、打包和壓縮
什麼是壓縮包 打包指的是將多個⽂件和⽬錄合併為⼀個特殊⽂件,然後將該特殊⽂件進⾏壓縮,得到壓縮包。 為什麼要用壓縮包 1.減少佔⽤的體積 2.加快⽹絡的傳輸 Windows的壓縮和Linux的有什麼不同 1、Windows : zip 2、Linux : tar Linux下常⻅的壓縮包型別 格式 壓縮⼯具 .zip zip壓縮⼯具 .gz gzip壓縮⼯具,只能壓縮⽂件,會刪除源⽂件(通常配合tar使⽤) .bz2 bzip2壓縮⼯具,只能壓縮⽂件,會刪除源⽂件(通常配合tar使⽤) .tar.gz 先使⽤tar命令歸檔打包,然後使⽤gzip壓縮 .tar.bz2 先使⽤tar命令歸檔打包,然後使⽤bzip壓縮 gzip : 只用gzip壓縮演算法壓縮,不打包 -d : 解壓gzip壓縮 bzip2 :只用bzip壓縮演算法壓縮,不打包 1、打包 PS: [root@ljl etc]# tar -cvzf $(date +%F)_a.tar.gz yum.conf # 增加時間明確備份時間 # 如果帶有時分秒,不要⽤冒號分隔,因為⽂件名的命名⾥不能帶有冒號 tar tar打包時會將路徑同時打包到壓縮包中,如果從根目錄開始,tar會自動刪除/目錄。 引數: -f : 指定打包的檔名稱 -c : 打包檔案 -v : 顯示打包的過程 -z : 使用gzip壓縮演算法進行壓縮處理(推薦) -j : 使用bzip2壓縮演算法進行壓縮處理 -P : 在打包過程中,取消移除根目錄說明 -x : 將tar打包的壓縮包解壓 -t : 檢視壓縮包內內容 -C : 解壓至指定目錄 例1:將/etc/passwd壓縮到/tmp/passwd.tar.gz [root@localhost tmp]# tar -czvf /tmp/passwd.tar.gz /etc/passwd 例2:將/etc下,所有的普通檔案目錄打包成etc.tar.gz [root@localhost tmp]# find /etc/ -type d -exec tar -czPvf etc.tar.gz {} \; 例3:將/etc/passwd壓縮到/tmp/passwd.tar.bz2 [root@localhost tmp]# tar -cjPvf /tmp/passwd.tar.bz2 /etc/passwd 例4:將/etc下,所有的普通檔案目錄打包成etc.tar.bz2 [root@localhost tmp]# find /etc/ -type d -exec tar -cjPvf etc.tar.bz2 {} \; 例5:將第三題中的壓縮包解壓到/tmp/test目錄下 [root@localhost tmp]# tar -xf etc.tar.gz 例6:將etc.tar.gz解壓到/tmp/test/目錄下 [root@localhost etc]# tar -xf etc.tar.gz -C /tmp/test/ zip 1、打包 格式: zip [壓縮包名稱] [壓縮檔案...] 引數: -r : 遞迴壓縮,遞迴處理,將指定目錄下的所有檔案和子目錄一併處理。 -q : 靜默輸出 例1:壓縮/etc/yum.conf /etc/passwd [root@localhost test]# zip test.zip /etc/yum.conf /etc/passwd 例2:壓縮/etc目錄 [root@localhost test]# zip -r etc.zip /etc/* 2、解壓(unzip) 引數: -l : 顯示壓縮包內部資訊 -d : 解壓到指定目錄 例1:解壓上述test.zip [root@localhost etc]# unzip etc.zip 2、壓縮演算法 1、gzip壓縮演算法(壓縮完成之後,立即刪除原始檔) 引數: -d : 解壓 gzip [檔案] 2、bzip2壓縮演算法 3、打包壓縮和find結合 find [路徑] [匹配規則] -exec [壓縮打包] \; 例1:將/etc目錄下的所有普通檔案進行壓縮 [root@localhost etc]# tar -zcPvf vvv.tar.gz `find /etc/ -type f | xargs`