這些Linux運維實用技巧,為什么我給滿分?
需求
在運維工作中隨著我們積累的經驗不斷增多,不知你是否遇到過以下幾個場景:
Linux 如何快速刪除大量文件? Vsphere 如何在不重啟的情況下識別新添加的 iscsi 硬盤? Linux中 rm 命令如何做到防誤刪? 不同 Linux 服務器之間如何實現快速掛載? Linux 中如何將用戶快速添加到附屬組? 細心的人往往會通過自己特有的方式來快速處理,不禁讓人拍手叫絕。
下面我就來具體介紹下我的處理方式吧。
1、Linux如何快速刪除大量文件?
rm 刪除過程耗時很長,效率低下;
rm 刪除完畢后,文件不存在但是磁盤空間仍未釋放;
其實以上問題都和 rm 命令有關,因為 rm 刪除內容時,是將目錄的每一個條目逐個刪除(unlink),而且需要循環重復遍歷很多次;雖然 unlink 解除,但是進程仍可以讀取已刪除的問題件,導致磁盤不釋放。
在此我們可以使用rsync
命令來代替 rm。rsync 刪除內容時,通過建立好新的空目錄替換掉老目錄,不需要進行大量的遍歷操作,因此效率會高很多。
rsync 提供了一些跟刪除相關的參數如下:
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. 建立一個空目錄
mkdir -p /del_tmp
2. 需要清空的目標目錄
/del_dest
3. 如果目標目錄下有大量的小文件,清空目錄下文件
rsync --delete-before -a -H -v --progress --stats ./del_tmp/./del_dest/
選項說明:
–delete-before 接收者在傳輸之前進行刪除操作
–progress 在傳輸時顯示傳輸過程
-a 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性
-H 保持硬連接的文件
-v 詳細輸出模式
--stats 給出某些文件的傳輸狀態
快速刪除文件
注意:當SRC和DEST文件性質不一致時將會報錯;當SRC和DEST性質都為文件【f】時,意思是清空文件內容而不是刪除文件;當SRC和DEST性質都為目錄【d】時,意思是刪除該目錄下的所有文件,使其變為空目錄;
2、Vsphere 如何在不重啟的情況下識別新添加的iscsi硬盤?
如果新添加的硬盤為“Direct-Access”類型,因此我們需要執行命令,將Id+1后將是新磁盤的Id號:echo'scsi add-single-device 2 0 1 0' > /proc/scsi/scsi
其中:
HOST,主機適配器標識,第一個適配器為0,在此新增加硬盤的適配器為2;
Channel,主機適配器上的SCSI通道,第一個通道為00,新增加磁盤的SCSI通道仍為00;
ID,設備的SCSI標識 ,即硬盤標識從00開始,新增加磁盤的標識為01;
增加硬盤后的SCSI設備參數如圖
第二種方法:
# 刷新SCSI,需要根據hosts數量確認刷新次數。# 如果系統有3個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中是一個內建命令,而不單純是一個分隔符,它的主要作用是空命令、參數擴展、重定向、注釋等。我們可以使用其參數擴展特性實現rm的防誤刪功能。
格式:${parameter:-test} 功能:如果parameter沒有設置或者為空,替換為test;否則替換為parameter的值。命令:rm -rf ${dest:-test}用法:當變量dest為空時,刪除test;當變量dest不為空時,刪除test用例:rm -rf /$dest。當變量dest沒有設置或為空時,則命令變成rm -rf /,這將誤刪系統根目錄,導致系統崩潰。改進:rm -rf /${dest:-test},當變量dest沒有設置或為空時,會使用test代替,則命令變成rm -rf /test,刪除此目錄不會產生任何影響。
4、不同Linux服務器之間如何實現快速掛載?
# 1.安裝 SSHFS
yum install sshfs
# 2.創建 SSHFS 掛載目錄
mkdir /mnt/data
# 3.使用 SSHFS 掛載遠程的文件系統
sshfs test@x.x.x.x:/home/test/ /mnt/data
如果SSH有密鑰授權,我們也可以使用公鑰實現掛載
sshfs -o IdentityFile=~/.ssh/id_rsa test@x.x.x.x:/home/test/ /mnt/data
5.Linux中如何將用戶快速添加到附屬組?
對于 Linux 操作系統,我們一般使用 usermod 命令來調整用戶分組,但是在使用過程中是有痛點的。
# 1.新增3個用戶
# 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)
通過以上命令,我們可以看到以下痛點:
每次 usermod 附加組調整,會覆蓋原來的分組
usermod 調整多個分組時,必須將所有分組一并添加,否則會覆蓋原來分組
# 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)我們一般不會遇到用戶同時隸屬于多個分組的情況,但是在做文件共享,因權限分離需求才會用到,此時我們通過gpasswd命令會方便很多。