這些Linux運維實(shí)用技巧,為什么我給滿(mǎn)分?
需求
在運維工作中隨著(zhù)我們積累的經(jīng)驗不斷增多,不知你是否遇到過(guò)以下幾個(gè)場(chǎng)景:
Linux 如何快速刪除大量文件? Vsphere 如何在不重啟的情況下識別新添加的 iscsi 硬盤(pán)? Linux中 rm 命令如何做到防誤刪? 不同 Linux 服務(wù)器之間如何實(shí)現快速掛載? Linux 中如何將用戶(hù)快速添加到附屬組? 細心的人往往會(huì )通過(guò)自己特有的方式來(lái)快速處理,不禁讓人拍手叫絕。
下面我就來(lái)具體介紹下我的處理方式吧。
1、Linux如何快速刪除大量文件?
rm 刪除過(guò)程耗時(shí)很長(cháng),效率低下;
rm 刪除完畢后,文件不存在但是磁盤(pán)空間仍未釋放;
其實(shí)以上問(wèn)題都和 rm 命令有關(guān),因為 rm 刪除內容時(shí),是將目錄的每一個(gè)條目逐個(gè)刪除(unlink),而且需要循環(huán)重復遍歷很多次;雖然 unlink 解除,但是進(jìn)程仍可以讀取已刪除的問(wèn)題件,導致磁盤(pán)不釋放。
在此我們可以使用rsync
命令來(lái)代替 rm。rsync 刪除內容時(shí),通過(guò)建立好新的空目錄替換掉老目錄,不需要進(jìn)行大量的遍歷操作,因此效率會(huì )高很多。
rsync 提供了一些跟刪除相關(guān)的參數如下:
rsync --help | grep delete --del an alias for --delete-during --deletedelete files that don't exist on the sending side --delete-before receiver deletes before transfer (default) --delete-during receiver deletes during transfer, not before --delete-afterreceiver deletes after transfer, not before --delete-excluded also delete excluded files on the receiving side --ignore-errors delete even if there are I/O errors --max-delete=NUMdon't delete more than NUM files
快速刪除目錄
1. 建立一個(gè)空目錄
mkdir -p /del_tmp
2. 需要清空的目標目錄
/del_dest
3. 如果目標目錄下有大量的小文件,清空目錄下文件
rsync --delete-before -a -H -v --progress --stats ./del_tmp/./del_dest/
選項說(shuō)明:
–delete-before 接收者在傳輸之前進(jìn)行刪除操作
–progress 在傳輸時(shí)顯示傳輸過(guò)程
-a 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性
-H 保持硬連接的文件
-v 詳細輸出模式
--stats 給出某些文件的傳輸狀態(tài)
快速刪除文件
注意:當SRC和DEST文件性質(zhì)不一致時(shí)將會(huì )報錯;當SRC和DEST性質(zhì)都為文件【f】時(shí),意思是清空文件內容而不是刪除文件;當SRC和DEST性質(zhì)都為目錄【d】時(shí),意思是刪除該目錄下的所有文件,使其變?yōu)榭漳夸洠?/section>
2、Vsphere 如何在不重啟的情況下識別新添加的iscsi硬盤(pán)?
如果新添加的硬盤(pán)為“Direct-Access”類(lèi)型,因此我們需要執行命令,將Id+1后將是新磁盤(pán)的Id號:echo'scsi add-single-device 2 0 1 0' > /proc/scsi/scsi
其中:
HOST,主機適配器標識,第一個(gè)適配器為0,在此新增加硬盤(pán)的適配器為2;
Channel,主機適配器上的SCSI通道,第一個(gè)通道為00,新增加磁盤(pán)的SCSI通道仍為00;
ID,設備的SCSI標識 ,即硬盤(pán)標識從00開(kāi)始,新增加磁盤(pán)的標識為01;
增加硬盤(pán)后的SCSI設備參數如圖
第二種方法:
# 刷新SCSI,需要根據hosts數量確認刷新次數。# 如果系統有3個(gè)scsi host,則需要刷新3次echo "- - -" > /sys/class/scsi_host/host0/scanecho "- - -" > /sys/class/scsi_host/host1/scanecho "- - -" > /sys/class/scsi_host/host2/scan
3、Linux中rm命令如何做到防誤刪?
:
在bash中是一個(gè)內建命令,而不單純是一個(gè)分隔符,它的主要作用是空命令、參數擴展、重定向、注釋等。我們可以使用其參數擴展特性實(shí)現rm的防誤刪功能。
格式:${parameter:-test} 功能:如果parameter沒(méi)有設置或者為空,替換為test;否則替換為parameter的值。命令:rm -rf ${dest:-test}用法:當變量dest為空時(shí),刪除test;當變量dest不為空時(shí),刪除test用例:rm -rf /$dest。當變量dest沒(méi)有設置或為空時(shí),則命令變成rm -rf /,這將誤刪系統根目錄,導致系統崩潰。改進(jìn):rm -rf /${dest:-test},當變量dest沒(méi)有設置或為空時(shí),會(huì )使用test代替,則命令變成rm -rf /test,刪除此目錄不會(huì )產(chǎn)生任何影響。
4、不同Linux服務(wù)器之間如何實(shí)現快速掛載?
# 1.安裝 SSHFS
yum install sshfs
# 2.創(chuàng )建 SSHFS 掛載目錄
mkdir /mnt/data
# 3.使用 SSHFS 掛載遠程的文件系統
sshfs test@x.x.x.x:/home/test/ /mnt/data
如果SSH有密鑰授權,我們也可以使用公鑰實(shí)現掛載
sshfs -o IdentityFile=~/.ssh/id_rsa test@x.x.x.x:/home/test/ /mnt/data
5.Linux中如何將用戶(hù)快速添加到附屬組?
對于 Linux 操作系統,我們一般使用 usermod 命令來(lái)調整用戶(hù)分組,但是在使用過(guò)程中是有痛點(diǎn)的。
# 1.新增3個(gè)用戶(hù)
# useradd test1
uid=508(test1) gid=508(test1) groups=508(test1)
# useradd test2
uid=509(test2) gid=509(test2) groups=509(test2)
# useradd test3
uid=510(test3) gid=510(test3) groups=510(test3)
# 2.調整test1 附加組
# usermod -G test2 test1
uid=508(test1) gid=508(test1) groups=508(test1),509(test2)
# usermod -G test3 test1
uid=508(test1) gid=508(test1) groups=508(test1),510(test3)
# usermod -G test2,test3 test1
uid=508(test1) gid=508(test1) groups=508(test1),509(test2),510(test3)
通過(guò)以上命令,我們可以看到以下痛點(diǎn):
每次 usermod 附加組調整,會(huì )覆蓋原來(lái)的分組
usermod 調整多個(gè)分組時(shí),必須將所有分組一并添加,否則會(huì )覆蓋原來(lái)分組
# 1.將test1添加到test2分組# gpasswd -a test1 test2uid=508(test1) gid=508(test1) groups=508(test1),509(test2)# 2.將test1添加到test3分組# gpasswd -a test1 test3uid=508(test1) gid=508(test1) groups=508(test1),509(test2),510(test3)我們一般不會(huì )遇到用戶(hù)同時(shí)隸屬于多個(gè)分組的情況,但是在做文件共享,因權限分離需求才會(huì )用到,此時(shí)我們通過(guò)gpasswd命令會(huì )方便很多。