在運維工作中随着經驗不斷增多,想必這些場景經常遇到:
下面我就來具體介紹下我的處理方式吧。
1.Linux如何快速删除大量文件?在Linux中對于删除大量小文件或删除大文件,我們一般會通過rm命令直接删除,這時你就很有可能會遇到以下問題:
其實以上問題都和rm命令有關,因為rm删除内容時,是将目錄的每一個條目逐個删除(unlink),而且需要循環重複遍曆很多次;雖然unlink解除,但是進程仍可以讀取已删除的問題件,導緻磁盤不釋放。
在此我們可以使用rsync命令來代替rm。rsync删除内容時,通過建立好新的空目錄替換掉老目錄,不需要進行大量的遍曆操作,因此效率會高很多。
rsync提供了一些跟删除相關的參數如下:
rsync --help | grep delete
--del an alias for --delete-during
--delete delete 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-after receiver 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=NUM don'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硬盤?Vsphere虛拟機新添加硬盤進行LVM擴容,此時需要重啟刷新文件系統,否則無法識别新添加的硬盤。重啟服務器這對于生産環境來說是不允許的,那麼有什麼方法能夠實現在線刷新文件系統呢?
在此有兩種方法:
第一種方法
沒有新增硬盤前的SCSI設備參數如圖
如果新添加的硬盤為“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/scan echo "- - -" > /sys/class/scsi_host/host1/scan echo "- - -" > /sys/class/scsi_host/host2/scan
以上兩種方式都可以實現在不重啟服務器的情況下識别到新添加的硬盤,請根據實際情況進行選擇。
3.Linux中rm命令如何做到防誤删?Linux系統中冒号(:)在bash中是一個內建命令,而不單純是一個分隔符,它的主要作用是空命令、參數擴展、重定向、注釋等。我們可以使用其參數擴展特性實現rm的防誤删功能。
4.不同Linux服務器之間如何實現快速挂載?
格式:${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,删除此目錄不會産生任何影響。
不同Linux服務器之間的共享,我們一般通過NFS來實現。但是有一次同事在進行遷移ELK時,使用了sshfs命令快速基于SSH協議快速實現了數據的共享。
SSHFS(Secure SHell FileSystem)是一個客戶端,可以讓我們通過 SSH 文件傳輸協議(SFTP)挂載遠程的文件系統并且在本地機器上和遠程的目錄和文件進行交互。
具體使用如下:
# 1.安裝 SSHFS yum install sshfs # 2.創建 SSHFS 挂載目錄 mkdir /mnt/data # 3.使用 SSHFS 挂載遠程的文件系統 sshfs [email protected]:/home/test/ /mnt/data 如果SSH有密鑰授權,我們也可以使用公鑰實現挂載 sshfs -o IdentityFile=~/.ssh/id_rsa [email protected]:/home/test/ /mnt/data
正如你所看到的,通過sshfs命令我們快速實現了挂載,相對于NFS非常方便。
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調整多個分組時,必須将所有分組一并添加,否則會覆蓋原來分組
那麼是否有命令可以讓我們在不必提前知道原來的分組信息的情況下而直接更新分組呢?gpasswd就可以解決我們的痛點問題,它是Linux下工作組文件/etc/group和/etc/gshadow管理工具,用于将一個用戶添加到組或者從組中删除。
# 1.将test1添加到test2分組 # gpasswd -a test1 test2 uid=508(test1) gid=508(test1) groups=508(test1),509(test2) # 2.将test1添加到test3分組 # gpasswd -a test1 test3 uid=508(test1) gid=508(test1) groups=508(test1),509(test2),510(test3)
我們一般不會遇到用戶同時隸屬于多個分組的情況,但是在做文件共享,因權限分離需求才會用到,此時我們通過gpasswd命令會方便很多。
總結在運維過程中我們通過常規操作就可以解決大多數問題,但是在處理過程中可能會存在效率不高、操作麻煩等問題。
個人的經驗總是有限的,學習他人技巧同樣可以快速進步呀~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!