1. 程式人生 > 其它 >Linux知識心得12 檔案查詢+上傳下載+輸出與重定向+字元處理+打包

Linux知識心得12 檔案查詢+上傳下載+輸出與重定向+字元處理+打包

筆記

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`