Time of Update: 2017-01-18
在我們的系統中,我曾寫了一個指令碼去定時更新一些repository,但偶爾會遇到問題,比如:git
Time of Update: 2017-01-18
在程式設計語言中,迴圈語句是最基本的文法之一,在Shell(這裡是Bash)中也不例外,再把以前自己寫過的相關內容整理一下吧。這裡包括for/while/until迴圈,以及變數自增的文法執行個體。Shell(以Bash為例)中的迴圈語句一般有for、while、until這幾種,偶爾還有寫錯文法的時候,這裡結合執行個體來自己總結一下。也為今後使用提供一個快捷的資料擷取渠道。一、for迴圈語句執行個體1.1 最基本的for迴圈: (傳統的形式,for var in …)複製代碼 代碼如下:#!/
Time of Update: 2017-01-18
通過top命令看到的進程的CPU、記憶體的使用率的百分比是一個浮點數,我需要在寫指令碼時對其進行處理,所以學習了一些,總結如下。其實,Shell(這裡是Bash)本身不具備處理浮點計算的能力,但是可以使用“bc”這個高精度的計算機工具來協助,另外,也可以在Bash中調用“awk”指令碼來處理浮點運算。1. 用bc來處理計算(包括整型和浮點計算)bc – An arbitrary precision calculator language(1).
Time of Update: 2017-01-18
在Linux上處理一些資料檔案時,有時候需要將其中的空行過濾掉,系統中提供的各種工具都可以完成這個功能。將常用的介紹如下吧:1. grep複製代碼 代碼如下:grep . data.txtgrep -v '^$' data.txtgrep '[^$]' data.txt2. sed複製代碼 代碼如下:sed '/^$/d' data.txtsed '/^\s*$/d' data.txt #這個命令還可將完全空格、tab等組成的空行刪掉。# The
Time of Update: 2017-01-18
現在很多人命名的時候都喜歡用空格,例如“An Introduction.doc”。但是這種命名方式給Linux命令列工具和Shell帶來了困擾,因為大多數命令中,都是預設以空格做為值與值之間的分隔字元,而不是做為檔案名稱的一部分。看下面的指令碼,我們可以瞭解的更清楚:執行的結果如下:實際上,目前的目錄的檔案只有兩個:對於簡單的檔案名稱,如上例中,我們也可以通過 for i in *doc 這樣簡單的方法來獲得檔案清單。但是對於複雜的環境,如下圖,我們如何獲得這些列表呢?有一個辦法,通過 for
Time of Update: 2017-01-18
除了 "if,else" 形式之外,還有其它形式的 "if" 語句: 複製代碼 代碼如下:if [ condition ]then actionfi只有當 condition 為真時,該語句才執行操作,否則不執行操作,並繼續執行 "fi" 之後的任何行。 複製代碼 代碼如下:if [ condition ]then actionelif [ condition2 ]then action2...elif [ condition3 ]then elseactionxfi 以上 "elif"
Time of Update: 2017-01-18
寫了個shell指令碼,可以用來統計每天的訪問日誌,並發送到電子郵箱,方便每天瞭解網站情況。指令碼統計了:1、總訪問量2、總頻寬3、獨立訪客量4、訪問IP統計5、訪問url統計6、來源統計7、404統計8、搜尋引擎訪問統計(Google,百度)9、搜尋引擎來源統計(Google,百度)複製代碼
Time of Update: 2017-01-18
網上有現在的防連接埠工具,如psad、portsentry,但覺得配置有點麻煩,且伺服器不想再裝一個額外的軟體。所以自己就寫了個shell指令碼實現這個功能。基本思路是:使用iptables的recent模組記錄下在60秒鐘內掃描超過10個連接埠的IP,並結合inotify-tools工具即時監控iptables的日誌,一旦iptables記錄檔有寫入新的ip記錄,則使用iptables封鎖源ip,起到了防止連接埠掃描的功能。1、iptables規則設定建立指令碼iptables.sh,執行此指
Time of Update: 2017-01-18
數組作為一種特殊的資料結構在任何一種程式設計語言中都有它的一席之地,當然bash shell也不例外。本文就shell數組來做一個小的總結。在這裡只討論一維數組的情況,關於多維陣列(事實上,你得用一維數組的方法來類比),不涉及。這裡包括數組的複製,計算,刪除,替換。1.數組的聲明:複製代碼 代碼如下:1)array[key]=value # array[0]=one,array[1]=two2)declare -a array # array被當作數組名3)array=( value1
Time of Update: 2017-01-18
下面的指令碼能統計出網站的總訪問量,以及404,500出現的次數。統計出來後,我們可以結合監控寶來進行記錄,進而可以看出網站訪問量是否異常,是否存在攻擊,一目瞭然。還可以根據查看500出現的次數,進而判斷網站程式是否出現異常。複製代碼 代碼如下:#!/bin/bash#purpose:count nginx or apache or other webserver status code using jiankongbao#how to:run the script every 5
Time of Update: 2017-01-18
一、cpu資訊採集1).採集cpu使用率採集演算法:通過/proc/stat檔案採集並計算CPU總使用率或者單個核使用率。以cpu0為例,演算法如下:1. cat /proc/stat | grep ‘cpu0'得到cpu0的資訊2. cpuTotal1=user+nice+system+idle+iowait+irq+softirq3. cpuUsed1=user+nice+system+irq+softirq4. sleep 30秒5. 再次cat /proc/stat | grep
Time of Update: 2017-01-18
1. 取長度複製代碼 代碼如下:str="abcd"expr length $str # 4echo ${#str} # 4expr "$str" : ".*" # 4好像一般使用第二種2. 尋找子串的位置複製代碼 代碼如下:str="abc"expr index $str "a" # 1expr index $str "b" # 2expr index $str
Time of Update: 2017-01-18
用特定的格式重新命名目前的目錄的影像檔,指令碼如下:複製代碼 代碼如下:#!/bin/bash#Filename:rename_photo.shset -xcount=1for img in *.jpg *.pngdonew=image-$count.${img##*.}mv "$img" "$new" 2> /dev/nullif [ $? -eq 0 ]thenecho "Renameing $img to $new"let
Time of Update: 2017-01-18
今天在處理檔案時遇到個問題,當檔案名稱包含空格時,for迴圈就出問題了。例如,我在當前檔案夾下建立3個檔案名稱包含空格的檔案:複製代碼 代碼如下:keakons-MacBook-Pro:test keakon$ touch "test 1"keakons-MacBook-Pro:test keakon$ touch "test 2"keakons-MacBook-Pro:test keakon$ touch "test 3"keakons-MacBook-Pro:test keakon$
Time of Update: 2017-01-19
在伺服器營運過程中,經常需要對伺服器的各種資源進行監控,例如:CPU的負載監控,磁碟的使用率監控,進程數目監控等等,以在系統出現異常時及時警示,通知系統管理員。本文介紹在Linux系統下幾種常見的監控需求及其shell指令碼的編寫。文章目錄:1.Linux使用 Shell 檢查進程是否存在2.Linux使用 Shell檢測進程 CPU 利用率3.Linux使用 Shell檢測進程記憶體使用量量4.Linux使用 Shell檢測進程控制代碼使用量5.Linux使用 Shell查看某個 TCP 或
Time of Update: 2017-01-19
在 Linux 下面可以使用 history 命令查看使用者的所有曆史操作,同時 shell 命令操作記錄預設儲存在使用者目錄的 .bash_history 檔案中。通過這個檔案可以查詢 shell 命令的執行曆史,有助於營運人員進行系統審計和問題排查,同時在伺服器遭受駭客攻擊後,也可以查詢駭客登入伺服器的曆史命令操作。但是駭客在入侵後,為了抹除痕迹,會刪除 .bash_history 檔案,這個就需要合理備份這個檔案了。預設的 history
Time of Update: 2017-01-19
經常需要根據IP地址統計apache網站訪問量,最基本的指令碼.根據IP訪問量降序排列:複製代碼 代碼如下:#!/bin/bash#Script_name: access_countacc_log=/usr/local/apache2/logs/access_log/bin/awk '{print $1}' $acc_log | sort | uniq -c | sort -nr執行效果:複製代碼 代碼如下:[root@zabbix ~]# sh access_count
Time of Update: 2017-01-19
一、方法複製代碼 代碼如下:/** * 執行一個shell命令,並返回字串值 * * @param cmd * 命令名稱&參數組成的數組(例如:{"/system/bin/cat", "/proc/version"}) * @param workdirectory * 命令執行路徑(例如:"system/bin/") * @return&
Time of Update: 2017-01-19
現在通過CommandHelper.execute方法可以執行命令,該類實現複製代碼 代碼如下:package javaapplication3;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * * @author chenshu */public class CommandHelper {
Time of Update: 2017-01-19
我們在Android開發中總能看到程式的log日誌內容充滿了螢幕,而真正對開發人員有意義的資訊被淹沒在洪流之中,讓開發人員無所適從,嚴重影響開發效率。本文就具體介紹幾種在shell命令列中過濾adb logcat輸出的方法。 1、只顯示需要的輸出(白名單) 最方便的當然是通過管道使用 grep 過濾了,這樣可以使用 grep