多執行緒寫檔案 Shell簡單實現多執行緒

2021-10-12 07:54:09 字數 2149 閱讀 7721

解決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函式中,建立乙個針對...