解決shell指令碼單執行緒下效率低下的問題
需要在linux系統執行同一項命令,但是針對不同的物件,例如ping檢測主機,當然可以延展,只要是命令之間不會產生衝突就可以了
正式開始前先了解一下下面使用到的乙個工具:nc
nc是netcat的簡寫,有著網路界的瑞士軍刀美譽。因為它短小精悍、功能實用,被設計為乙個簡單、可靠的網路工具
(1)實現任意tcp/udp埠的偵聽,nc可以作為server以tcp或udp方式偵聽指定埠
(2)埠的掃瞄,nc可以作為client發起tcp或udp連線
(3)機器之間傳輸檔案
(4)機器之間網路測速
學習這個東西的原因是因為朋友需要對多達幾百個ip進行埠檢測,然後詢問我能不能寫指令碼實現,一開始我沒考慮太多,直接開始寫,指令碼內容如下:
#!/bin/bash##nc檢測if [ -f "/usr/bin/nc" ];then echo '開始檢測'else if [ ! -f "/usr/bin/apt" ];then apt-get install -y nc else if [ -f "/usr/bin/dnf" ];then dnf install -y nc else if [ -f "/usr/bin/yum" ];then yum install -y nc else echo "請自己安裝nc"exit 11 fi fi fifirm -f disables.txt ips.txtread -p "請輸入ip列表檔案路徑" fileif [[ -f "$file" ]];then echo -e "正在獲取ip列表"else echo "找不到這個檔案" exit 22firead -p "請輸入埠,多個請使用空格分開" dropips=`cat $file | wc -l`echo "一共有 $"for((i=1;i<=$;i++));do ip=`cat $file | awk "nr==$i"` echo -e "正在檢測$" for d in $drop;do services="$ip $d" nc -v -z $services if [[ "$?" == "0" ]];then echo -e "$services" >> ips.txt else echo "$services" >> disables.txt fi donedoneecho "開啟的ip列表在 ips.txt"echo "沒有開啟的ip列表在disables.txt"
#!/bin/bashrm -f ips.txt disables.txtread -p "請輸入ip列表檔案路徑" fileif [[ -f "$file" ]];then echo -e "正在獲取ip列表"else echo "找不到這個檔案" exit 22fi##統計檔案行數(ip數量)ips=`cat $file | wc -l`echo -e "當前檔案存在$個ip位址"##逐行讀取for((i=1;i<=$;i++));do "` sleep 5 ping $ip -c 5 >/dev/null if [[ "$?" == "0" ]];then echo -e "$ip" >> ips.txt else echo "$ip" >> disables.txt fi } &donewaitconnects=`cat ips.txt | wc -l`disconnects=`cat disables.txt | wc -l`echo -e "完成存活ip已記錄到: ips.txt未使用[也可能禁ping]的已記錄到:disables.txt"echo "當前可ping通的ip有: $"echo "當前不可ping通的ip有: $"
執行效果:
shell多執行緒應用場景不是很廣,而且場景複雜的情況下還可能會出現資料衝突的情況,所以如果需要在複雜下使用多執行緒,還是選擇python等更專業的語言吧
Java多執行緒寫檔案
問題場景 呼叫多個執行緒將多個檔案進行合併,當初沒有考慮到多執行緒操作檔案會造成的髒資料,導致了業務出問題。解決方法 審查檔案操作的方法,進行檔案加鎖,同一時間只能乙個執行緒對檔案進行操作。展示public static void copyfile string srcfilepath,string...
Shell 實現多執行緒(多工)
bin bash all num 10 a date h m s for num in seq1 do done b date h m s echo e starttime t a echo e endtime t b 在命令的末尾加 符號,則命令將在後台執行,這樣後面的命令不需要等待該命令執行完再...
QT QThread 簡單實現多執行緒
在本篇,會實現乙個非常簡單的執行緒。一.建立乙個工程 就是在qt總結第一篇介紹的,建立乙個mainwindow。二.在main.cpp中建立執行緒 整個 中,我加入了大量的注釋,很容易就可以弄懂 整個 可以分為幾步 1 建立乙個執行緒的類 2 實現類中的run函式 3 在main函式中,建立乙個針對...