5分鐘學會,同時對100+臺linux虛擬機器進行批量操作命令,例如:磁碟分割槽、掛載目錄、修改linux虛擬機器最大連線數等;只要你需要,都能執行
-
檢視硬碟資訊 fdisk -l
新安裝的linux虛擬機器centos系統,發現有一個硬碟/dev/mapper/centos-root,共14.4GB
-
檢視硬碟掛載資訊 df -h
發現硬碟/dev/mapper/centos-root整體掛載在根目錄下/
-
檢視最大連線數 ulimit -n或者ulimit -a
ulimit -n就是查詢當前使用者的程式,最多開啟的檔案open files數是1024
-
對100+臺同類linux虛擬機器硬碟/dev/mapper/centos-root自動分割槽、掛載目錄、修改linux虛擬機器最大連線數
4.1 在/root目錄下,建立文字iptest.txt,放置100+臺虛擬機器的密碼password和ip地址;將來被執行shell指令碼batch_exec.sh迴圈執行,呼叫其iptest.txt文字中所羅列的password和ip,進行遠端互動登入,依次執行指定命令command,如:磁碟分割槽、掛載目錄、修改最大連線數等。
4.1.2 注意:第1列,放置密碼password;第2列放置ip cd /root cat >> iptest.txt << EOF > abcdef 192.168.1.1 > aefged 192.168.5.8 > aexcdd 192.168.8.9 > EOF #裡面新增密碼、ip,ip後面不要有空格null
4.1.3 檢視文字iptest.txt中批量執行的虛擬機器密碼password和ip填寫ok,如果有100+臺,全部填寫,多多益善,真正體現接下來batch_exec.sh的實力。
4.2 在/root目錄下,建立指令碼batch_exec.sh,並授權
touch batch_exec.sh
chmod 777 batch_exec.sh
#此處,授權為最高可執行讀r(read)寫w(write)許可權,通過sh ./root/batch_exec.sh,執行此指令碼,完成批量執行指令commad;授權之後的shell為綠色,如下圖
4.2.1 將下面第2部分黑色視窗展示的 `程式碼片`copy 放置batch_exec.sh指令碼中;第1部分為詳解。
第1部分,shell指令碼詳解
#!/bin/bash
#課堂小知識,此處為直譯器,作用就是將shell指令碼里面的內容,翻譯成為計算機能識別的語言;
#就像翻譯官,溝通華夏子孫與外國人,起一個翻譯作用;
#每臺linux虛擬機器,都有各種各樣的直譯器,就像翻譯官,有英語翻譯官、法語、德語翻譯官一樣;
#直譯器不同,識別的語言也不同。
apt-get update
#安裝的linux虛擬機器,如果是ubuntu系統的使用apt-get,是centos系統的使用yum -y update;
#後續的shell中只需apt-get與yum互換即可;
#此處目的,更新一下系統,做個健康檢查,恢復機理
apt-get install expect -y
#此處安裝expect,系統以互動形式要求輸入指定字串,實現互動通訊;
#例如,linux虛擬機器出了1、2、3,三個選項,你選擇1,虛擬機器自動給出1的答案或者指令;
#所有指令碼中-y(yes的簡寫),後期出現要你確認的事件,以後就不用再點確認,這裡提前設定自動確認了。
while read -r line
#看這個shell最後1行,此處是取出 iptest.txt中,虛擬機器password和ip(將來要批量執行分割槽、掛載命令的虛擬機器資訊)
#將迴圈讀取的第1列密碼password、第2列ip資訊,放入變數line中
do
password=`echo $line| awk '{print $1}'`
#讀取變數line中的第1列資訊,即密碼password
echo $password
#測試過程中,可以將密碼列印出來,判斷取值是否ok
ip=`echo $line| awk '{print $2}'`
#讀取變數line中的第2列資訊,即ip
echo $ip
#測試過程中,可以將ip列印出來,判斷取值是否ok
expect << EOF
#此處,啟動遠端expect互動,<< EOF(可以理解為從哪開始),與後面< EOF(可以理解為結束)遙相呼應
spawn ssh root@$ip
#前面的所有步驟,都完成了從iptest.txt (password ip)取值--> line --> password、ip
#啟動新程式(spawn作用),這裡是ssh連結從iptest.txt獲取虛擬機器ip
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$password\r" }
}
#固定用法,expect預判斷上面spawn程式開啟後,通過ssh root@ip連結ok,後會讓你輸入虛擬機器密碼
#通過send把從iptest.txt傳遞給line的密碼password傳送過去,如果ok,就登入成功了
#此時,你已經在登入的這臺linux虛擬機器中了
sleep 2
#密碼驗證登入,需要時間,此處可以休眠一下
expect "*#"
#開啟遠端互動,固定用法:第1個expect”*#”是開啟,第2個expect”*#”是結束;與EOF類似
send "fdisk /dev/mapper/centos-root\r"
#開始對登入ok的這臺linux虛擬機器進行分割槽
expect "Command*"
#預判上面send的fdisk...執行成功後,會出現Command這個介面
#Command*後面的*代指任何字元或字串,你可以理解為捕捉或者預判linux介面出來了"Command,那接下來往下走
send "n\r"
#此處n代表add a new partition,說白了就是增加1個新分割槽
#分割槽就像是把電腦500G硬碟,分為C盤、D盤、E盤
expect "Select*"
#預判上面send的n選擇分割槽指令,linux介面出來了Select的字串,那接下來選擇
send "p\r"
#這裡的p代表primary主分割槽;硬碟分有主分割槽、邏輯分割槽,但是主分割槽一定要有;
#就比如C盤,可以啟動系統程式(主分割槽作用),也可以存放檔案(邏輯分割槽作用)
#這裡linux的這個p就是對硬碟分割槽,分一個primary的主分割槽
expect "Partition*"
#這裡捕捉或者預判linux介面出來了Partition的字串,接下來往下走
send "1\r"
#將/dev/mapper/centos-root分1個區,將來就是/dev/mapper/centos-root1
#如果send的是2,將來分割槽的磁碟就是dev/mapper/centos-root2
expect "First*"
send "\r"
expect "Last*"
send "\r"
#選擇分割槽的大小,相當於一個區間,這個區間範圍就是【First Last】
# 以上send的2個null空格
expect "Command*"
send "w\r"
#將以上分割槽資訊,寫(write簡寫w)入虛擬機器,說白了就是儲存
#以上步驟的截圖,如下4.
send "mkfs.ext4 /dev/mapper/centos-root1\r"
#將磁碟 /dev/mapper/centos-root1製作為ext4檔案系統格式
#linux中,萬物皆檔案,磁碟必須以掛載mount檔案目錄形式出現
#所有磁碟也必須有檔案格式,就像電腦有txt、mp4、ppt格式等
#其中mkfs為(make file system製作檔案系統,ext4為一種常用的格式)
send "mkdir -p /workDir\r"
#建立一個workDir目錄,將來把分割槽好的/dev/mapper/centos-root1硬碟掛載上去
#其中-p為遞迴,你可以建立/workDir/a/b/c,不用一層一層建立
send "mount /dev/mapper/centos-root1 /workDir\r"
#將/dev/mapper/centos-root1掛載到目錄/workDir\r下
send "echo '/dev/mapper/centos-root1 /workDir ext4 defaults 0 0' >> /etc/fstab\r "
#設定開啟自啟動/etc/fstab,不管當機重啟,它們的格式固定了ext4
send "mount -a\r"
#檢查掛載是否ok,如果異常會中斷連線,如果ok會回到最初介面
expect "*root/"
#預判mount -a掛載檢查ok,游標顯示在root使用者下
send "echo '* hard nofile 65535' >> /etc/security/limits.conf\r"
send "echo '* soft nofile 65535' >> /etc/security/limits.conf\r"
send "echo 'root hard nofile 65535' >> /etc/security/limits.conf\r"
send "echo 'root soft nofile 65535' >> /etc/security/limits.conf\r"
send "sysctl -p\r"
#以上,是將使用者開啟程式開啟open files檔案數,修改為最大值65535
#sysctl -p為立馬生效,與ubuntu中source xxx.file類似
sleep 1
#send "reboot\r"
#修改完配置後可以重啟電腦,也可以休眠1s,讓配置生效
expect "*#"
#此處從程式接受字串,第1個表開啟接收,第2個表結束
interact
#此處,代表1臺linux命令執行完以後,繼續迴圈讀取下一臺linux的密碼password和ip,繼續ssh連線root@ip,實現互動登入,這裡也是允許互動的意思
EOF
#第1個EOF表示,開始執行某些指令;第二個EOF表示執行指令結束
done < iptest.txt
5、硬碟分割槽過程截圖展示 fdisk /dev/mapper/centos-root
6、硬碟分割槽結果展示 fdisk -l
7、部分命令說明
send 用於向程式傳送字串
expect 從程式接受字串
spawn 啟動新的整合
interact 允許使用者互動
#!/bin/bash
apt-get update
apt-get install expect -y
while read -r line
do
password=`echo $line| awk '{print $1}'`
echo $password
ip=`echo $line| awk '{print $2}'`
echo $ip
expect << EOF
spawn ssh root@$ip
expect {
"*yes/no" {send "yes\r";exp_continue }
"*password:" {send "$password\r" }
}
sleep 2
expect "*#"
send "fdisk /dev/mapper/centos-root\r"
expect "Command*"
send "n\r"
expect "Select*"
send "p\r"
expect "Partition*"
send "1\r"
expect "First*"
send "\r"
expect "Last*"
send "\r"
expect "Command*"
send "w\r"
send "mkfs.ext4 /dev/mapper/centos-root1\r"
send "mkdir -p /workDir\r"
send "mount /dev/mapper/centos-root1 /workDir\r"
send "echo '/dev/mapper/centos-root1 /workDir ext4 defaults 0 0' >> /etc/fstab\r "
send "mount -a\r"
expect "*root/"
send "echo '* hard nofile 65535' >> /etc/security/limits.conf\r"
send "echo '* soft nofile 65535' >> /etc/security/limits.conf\r"
send "echo 'root hard nofile 65535' >> /etc/security/limits.conf\r"
send "echo 'root soft nofile 65535' >> /etc/security/limits.conf\r"
send "sysctl -p\r"
sleep 1
#send "reboot\r"
expect "*#"
interact
EOF
done < iptest.txt
以上就是寫好後,大家只需要在sh batch_exec.sh指令碼就可完成對100+臺linux虛擬機器操作,歡迎大家留言,如果有什麼問題可以隨時找我解答。關注小編不迷路,小編帶你上高速…
相關文章
- java虛擬機器執行時記憶體分割槽Java虛擬機記憶體
- 為虛擬機器新增硬碟並進行分割槽虛擬機硬碟
- 虛擬機器增加磁碟分割槽的大小虛擬機
- xshell怎麼連線linux虛擬機器 xshell連結linux虛擬機器ssh命令Linux虛擬機
- ubuntu虛擬機器克隆後需要進行的修改Ubuntu虛擬機
- linux虛擬機器執行機必安裝Linux虛擬機
- 連線虛擬機器oracle 和虛擬機器KEY虛擬機Oracle
- linux虛擬機器磁碟擴容Linux虛擬機
- 深入學習Java虛擬機器——虛擬機器位元組碼執行引擎Java虛擬機
- 在VirtualBox下RedHat Linux虛擬機器中掛載共享目錄RedhatLinux虛擬機
- 使用netterm連線linux虛擬機器Linux虛擬機
- 【Linux】遠端連線Linux虛擬機器(MobaXterm)Linux虛擬機
- Linux虛擬機器擴充套件磁碟Linux虛擬機套件
- 虛擬機器Unbuntu如何修改硬碟空間大小(不需要分割槽)虛擬機硬碟
- Podman中如何執行一個 Linux 虛擬機器?Linux虛擬機
- 如何在windows下進行LINUX虛擬機器搭建WindowsLinux虛擬機
- Linux無停機增加虛擬機器磁碟容量Linux虛擬機
- Java虛擬機器-執行時資料區Java虛擬機
- Java虛擬機器 —— 執行時資料區Java虛擬機
- 深入理解虛擬機器之虛擬機器位元組碼執行引擎虛擬機
- 虛擬機器Ubuntu 掛載硬碟虛擬機Ubuntu硬碟
- 宿主機和虛擬機器連線虛擬機
- java虛擬機器的執行原理Java虛擬機
- VM虛擬機器 linux系統新增磁碟虛擬機Linux
- vsphere 虛擬機器線上新增磁碟linux虛擬機Linux
- 為Linux虛擬機器增加磁碟空間Linux虛擬機
- xshell能ping通虛擬機器,不能連線虛擬機器虛擬機
- 虛擬機器之linux系統命令虛擬機Linux
- 虛擬機器Linux掛載安裝ISO檔案虛擬機Linux
- 深入理解Java虛擬機器8 虛擬機器位元組碼執行引擎Java虛擬機
- java虛擬機器——執行時資料區域Java虛擬機
- JVM虛擬機器-執行時資料區概述JVM虛擬機
- Java虛擬機器--方法區(執行時常量池)Java虛擬機
- 虛擬機器系列 | JVM執行時資料區虛擬機JVM
- 設定Kali Linux虛擬機器連線網路Linux虛擬機
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- VMware虛擬機器中修改Linux MAC地址虛擬機LinuxMac
- VMware虛擬機器Linux系統根目錄空間擴充操作虛擬機Linux