Linux學習筆記

內容總結:php

1、經常使用命令總結html

低級:ls ll lsblk cd pwd sudo su touch mkdir chmod chown  cp mv date cat cal tar apt uname history dd md5sumjava

中級:find grep man ps kill jobs fg bg nohup [Common]& whereis service alias df du rm echo passwd lpr cmp wget mount gcc g++ javamysql

2、基本命令分類:linux

一、瞭解基本bash,學習vim。ios

雖然你有Emacs和Eclipse,可是VIM仍然是無出其右的利器。 瞭解SSH,基本的無密碼驗證方式。
例如經過ssh-agent, ssh-add等。 《靈犀志趣》( http://www.lingcc.com/)平時都使用以下腳本完成無密碼驗證,省事省力。
執行方式 sh nopasswd USER REMOTE_HOST
執行此腳本前,請確認:
  • 本機上已有 id_dsa.pub ,若無。 使用命令 ssh-keygen -t dsa 得到。
  • 遠程機上登陸用戶家目錄下,已經有 .ssh 文件夾,若無建立之。

$ cat  nopasswd nginx

#!/bin/shweb

scp ~/.ssh/id_dsa.pub  $1@$2:~/正則表達式

ssh $1@$2 " touch ~/.ssh/authorized_keys ; cat ~/id_dsa.pub  >> ~/.ssh/authorized_keys; cat ~/id_dsa.pub  >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys; exit二、熟悉Bash中經常使用的任務管理命令 sql

&,Ctrl-Z,Ctrl-C,jobs,fg,bg,kill 等。

三、基本的文件管理命令

ls, ls-l, less, head, tail, tail -f, ln, ln -s, chmod, chown, du, du -sk *, df, mount

四、基本的網絡管理命令

ipconfig, ifconfig, dig

五、熟悉正則表達式,以及 grep,egrep用到的選項

-o, -A, -B

六、軟件安裝命令瞭解

apt-get 和 yum

七、表達式學習

!!
再次執行上一條命令
!$
上一條命令的最後一個單詞
{a..b}
按照從a到b順序的一個數字列表
{a,b,c}
三個詞a,b,c. 能夠這樣使用 touch /tmp/{foo,bar,baz}
{$1-$9}
執行shell腳本時的命令行參數
$0
正在執行的命令名稱
$#
當前啓動的命令中傳入的參數個數
$?
上一條命令的執行返回值。
$$
該shell的進程號。
$*
從$1開始,啓動該shell腳本的全部參數。

八、平常技巧

Ctrl-R
在bash中, Ctrl-R用於在歷史命令中搜索
Ctrl-W, Ctrl-U, ALT + Backspace 刪除光標前的一個詞
bash中,Ctrl-W刪除最後一個詞,Ctrl-U刪除最後一行,Alt+BackSpace 刪除光標前的一個詞 man readline 中包含了大量bash中的默認熱鍵綁定.
cd -
返回前一個工做路徑
xargs
很是強大的命令。若是你還不肯定是否能正確的執行任務,能夠先用xargs echo查看。下面是一個用該功能的例子:

find . -name \*.py | xargs grep some_function

cat hosts | xargs -l {} ssh root@{} hostname

parallel一個更增強大的命令. 能夠實現並行執行任務,並能夠分割輸入文件, 指定多個節點同時運行命令等功能.詳細的功能能夠參考 http://www.biostars.org/p/63816/.
pstree -p打用進程樹的得力工具 pgrep,pkill使用名字查找進程,或者直接向指定名字的進程發送信號。
  • 瞭解用戶能發送給進程的一些信號。好比 kill -STOP [pid] ,讓pid進程掛起。

nohup,disown,screen, tmux當你須要將進程永遠處在後臺運行是,這兩個命令頗有用。lsof, netstat -lntp查詢當前什麼進程在監聽什麼端口。set在bash腳本中, 使用 set -x 得到debug輸出,使用 set -e 得到錯誤輸出。;分號用於開啓一個子shell並運行至結束後關閉。 例如:

 

#在當前路徑下執行一些命令

(cd /some/other/dir; other-command)

# 工做路徑仍然是當前目錄

瞭解shell中的多種參數表達式
${name:?error message}
檢查某個變量是否存在,若不存在輸出 error message。
${var%suffix}, ${var#prefix}
輸出var變量除前綴或者後綴外的部分。以下面的代碼輸出爲foo.txt.

var = foo.pdf

echo ${var%pdf}.txt

<,>輸入輸出重定向操做。 some_command > logfile 2>&1some_command 運行過程當中的標準輸出和標準錯誤輸出都輸出到文件logfile中。 man ascii得到一個好用的ASCII表格,包含10進制和16進制的值。 screen,dtach在遠程ssh繪畫中,使用這兩個命令能夠保存你的會話,避免由於網絡問題致使中斷。 curl, curl -l, wget在web頁面調試中,這幾個命令能幫你下載網頁代碼,頗有用。 lynx -dump -stdin將HTML轉換爲文本 xmlstarlet須要處理XML時,這個命令頗有用。 ssh -L, ssh -D須要利用遠程服務器訪問網頁時,這命令能夠幫助你在遠程服務器和你的機器之間創建ssh 隧道。 ssh鏈接優化以下配置能幫你避免連接丟失,不須要每次都輸入yes確認和遠程服務器的連接,以及在連接中啓用壓縮。建議將它放到.ssh/config中。

TCPKeepAlive=yes

ServerAliveInterval=15

ServerAliveCountMax=6

StrictHostKeyChecking=no

Compression=yes

ForwardAgent=yes

在正輸入的命令前加#
命令已經輸入一半,突然間改主意想少收運行時,
能夠使用 Alt-# 在命令前加‘#’,將整個命令變成註釋。這樣你稍後就能在命令歷史中找到該命令了。
cron
能夠幫助你制定一些定時執行的計劃任務。
Ctrl-S Ctrl-C
將一不當心須要大量輸出文本時,依次輸入這兩個操做,
比單純的頻繁按Ctrl-C能更快讓程序終止。

九、 數據處理

sort,uniq, uniq -u, uniq -d
瞭解這些排序命令
cut,paste, join
瞭解這些文本文件的維護工具。不少人都在使用cut後,忘記join
使用sort/uniq進行集合的交、並、補運算=
假設a和b是兩個文本文件,其中的行都是惟一的。
以下幾個命令能夠快速的實現一些集合操做。

cat a b | sort | uniq > c   # c is a union b

cat a b | sort | uniq -d > c   # c is a intersect b

cat a b b | sort | uniq -u > c   # c is set difference a - b

使用LC_ALL=CLinux中有關locale的設置會影響大量的命令行工具,其中包括排序工具。
多數安裝的Linux系統都將LANG或者其餘的locale默認設置成US English。
但這可能會致使排序及其餘命令慢上好幾倍。
所以export LCALL=C能避免使用i18n形式處理數據,帶來性能提高。 awk,sed這兩個工具能實現複雜的數據替換和修改。
例如,下面的命令實現對文本文件中低三列的數據求總和。
使用shell完成此運算比用Python快3倍。

awk '{ x += $3 } END { print x }'

shuf該命令能夠從將一個文件中的行混洗,或者從中隨機選出一些行。 sort瞭解sort的經常使用選項(-t,-k, -s)如何工做。 注意-k1,1只會排序第一列,
而-k1會根據整個行排序。 -s能實現穩定排序。
例如,先使用第二個域排序,再按照域一排序,能夠用這段命令實現

cat INPUT_FILE | sort -k1,1  | sort -s -k2,2

製表符的輸入在bash的命令行中,如若須要輸入製表符,能夠使用 Ctrl-V <tab> 或者 $’\t’ 實現 hd,bvi對於二進制文件,這兩個命令分別實現16進制抽取,二進制編輯操做。 strings,grep能夠幫助在二進制文件中尋找文本。 iconv,uconv能夠幫助轉換文本編碼 split,csplit分別能夠實現將文件按照大小分割,以及按照特定的模式分割。

十、系統調試

iostat,netstat,top,atop,htop,dstat
能夠幫助瞭解硬盤,CPU,內存,網絡的狀態。
這能幫你對系統正在發生的狀況有個第一認識。
free,vmstat
若是想了解內存的狀態,這兩個命令很重要。
其中cached是Linux內核中文件緩存的大小。
kill -3 <pid>
在調試Java程序時,使用此命令,能夠在stderr/logs中找到完整的stack trace,
堆信息(包含垃圾收集的細節).
mtr,traceroute
可以幫忙找到網絡問題,前者比traceroute更好用。
iftop,nethogs
這兩個命令能夠辦剛找出哪一個端口或者進程佔用了多少網絡帶寬。
ab,siege
這個Apache自帶的工具能幫助快速檢查web服務器的性能。
wireshark,tshark
是進行更高級的網絡調試的得力工具。
strace,ltrace
這兩個命令能幫你在一無所知的狀況下,對程序運行失敗,假死,崩潰等問題帶來一些線索。
另外,他們還能幫忙發現一些性能問題。好比 -c選項能夠作profiling;
-p選項能夠掛到某個指定的進程上。
ldd
檢查共享庫的狀況
gdb
瞭解如何利用GDB鏈接到一個正在運行的進程,而且獲得其stack trace。
/proc/
在作現場調試的時候頗有用。好比 /proc/cpuinfo, /proc/XXX/cwd, /proc/XXX/exe, /proc/XXX/fd/, /proc/XXX/smaps
sar
在須要判斷爲什麼過去某個時間系統會出錯時,這個命令能顯示CPU,內存和網絡的歷史狀況。
stap, perf
當須要更深的分析系統,以及性能狀況時,這兩個工具頗有用。
dmesg
當系統出現一些很反常的現象時,好比多是硬件或驅動問題時,這個很管用。
參考文章: http://blog.jobbole.com/46976/

十一、使用Shell腳本對Linux系統和進程資源進行監控

       檢查進程是否存在

       在對進程進行監控時,咱們通常須要獲得該進程的 ID,進程 ID 是進程的惟一標識,可是有時可能在服務器上不一樣用戶下運行着多個相同進程名的進程,下面的函數 GetPID 給出了獲取指定用戶下指定進程名的進程 ID 功能(目前只考慮這個用戶下啓動一個此進程名的進程),它有兩個參數爲用戶名和進程名,它首先使用 ps 查找進程信息,同時經過 grep 過濾出須要的進程,最後經過 sed 和 awk 查找須要進程的 ID 值(此函數可根據實際狀況修改,好比須要過濾其它信息等)。

      清單 1. 對進程進行監控

function GetPID #User #Name

{

    PsUser=$1

    PsName=$2

    pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbx\n

   |grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}'`

   echo $pid

}

示例演示:
1)源程序(例如查找用戶爲 root,進程名爲 CFTestApp 的進程 ID)

PID=`GetPID root CFTestApp`

echo $PID

2)結果輸出

11426

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:11426 爲 root 用戶下的 CFTestApp 程序的進程 ID。

4)命令介紹

1. ps: 查看系統中瞬間進程信息。

參數:-u< 用戶識別碼 > 列出屬於該用戶的程序的情況,也可以使用用戶名稱來指定。

-p< 進程識別碼 > 指定進程識別碼,並列出該進程的情況。

-o 指定輸出格式

2. grep: 用於查找文件中符合字符串的當前行。

參數:-v 反向選擇,亦即顯示出沒有 ‘搜尋字符串’ 內容的那一行。

3. sed: 一個非交互性文本編輯器,它編輯文件或標準輸入導出的文件,一次只能處理一行內容。

參數:-n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。

p 標誌 打印匹配行

4. awk:一種編程語言,用於在 linux/unix 下對文本和數據進行處理。數據能夠來自標準輸入、一個或多個文件,或其它命令的輸出。它支持用戶自

定義函數和動態正則表達式等先進功能,是 linux/unix 下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk 的處理文本和數據的方式:它逐行掃描文件,從第一行到最後一行,尋找匹配的特定模式的行,並在這些行上進行你想要的操做。若是沒有指定處理動做,則把匹配的行顯示到標準輸出 ( 屏幕 ),若是沒有指定模式,則全部被操做所指定的行都被處理。

參數:-F fs or –field-separator fs :指定輸入文件折分隔符,fs 是一個字符串或者是一個正則表達式,如 -F:。

有時有可能進程沒有啓動,下面的功能是檢查進程 ID 是否存在,若是此進程沒有運行輸出:

The process does not exist.

# 檢查進程是否存在

if [ "-$PID" == "-" ]

then

{

    echo "The process does not exist."

}

fi

檢測進程 CPU 利用率

在對應用服務進行維護時,咱們常常遇到因爲 CPU 太高致使業務阻塞,形成業務中斷的狀況。CPU 太高可能因爲業務量過負荷或者出現死循環等異常狀況,經過腳本對業務進程 CPU 進行時時監控,能夠在 CPU 利用率異常時及時通知維護人員,便於維護人員及時分析,定位,以及避免業務中斷等。下面的函數可得到指定進程 ID 的進程 CPU 利用率。它有一個參數爲進程 ID,它首先使用 ps 查找進程信息,同時經過 grep -v 過濾掉 %CPU 行,最後經過 awk 查找 CPU 利用百分比的整數部分(若是系統中有多個 CPU,CPU 利用率能夠超過 100%)。

清單 2. 對業務進程 CPU 進行實時監控

function GetCpu

{

    CpuValue=`ps -p $1 -o pcpu |grep -v CPU | awk '{print $1}' | awk - F. '{print $1}'`

    echo $CpuValue

}

下面的功能是經過上面的函數 GetCpu 得到此進程的 CPU 利用率,而後經過條件語句判斷 CPU 利用率是否超過限制,若是超過 80%(能夠根據實際狀況進行調整),則輸出告警,不然輸出正常信息。

清單 3. 判斷 CPU 利用率是否超過限制

function CheckCpu

{

    PID=$1

    cpu=`GetCpu $PID`

    if [ $cpu -gt 80 ]

    then

    {

        echo 「The usage of cpu is larger than 80%」

    }

    else

    {

        echo 「The usage of cpu is normal」

   }

   fi

}

示例演示:

1)源程序(假設上面已經查詢出 CFTestApp 的進程 ID 爲 11426)

CheckCpu 11426

2)結果輸出

The usage of cpu is 75

The usage of cpu is normal

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:CFTestApp 程序當前的 CPU 使用爲 75%,是正常的,沒有超過 80% 的告警限制。

檢測進程內存使用量

在對應用服務進行維護時,也常常遇到因爲內存使用過大致使進程崩潰,形成業務中斷的狀況(例如 32 位程序可尋址的最大內存空間爲 4G,若是超出將申請內存失敗,同時物理內存也是有限的)。內存使用太高可能因爲內存泄露,消息堆積等狀況,經過腳本對業務進程內存使用量進行時時監控,能夠在內存使用量異常時及時發送告警(例如經過短信),便於維護人員及時處理。下面的函數可得到指定進程 ID 的進程內存使用狀況。它有一個參數爲進程 ID,它首先使用 ps 查找進程信息,同時經過 grep -v 過濾掉 VSZ 行 , 而後經過除 1000 取以兆爲單位的內存使用量。

清單 4. 對業務進程內存使用量進行監控

function GetMem

{

    MEMUsage=`ps -o vsz -p $1|grep -v VSZ`

    (( MEMUsage /= 1000))

    echo $MEMUsage

}

下面的功能是經過上面的函數 GetMem得到此進程的內存使用,而後經過條件語句判斷內存使用是否超過限制,若是超過 1.6G(能夠根據實際狀況進行調整),則輸出告警,不然輸出正常信息。

清單 5. 判斷內存使用是否超過限制

mem=`GetMem $PID`

if [ $mem -gt 1600 ]

then

{

    echo 「The usage of memory is larger than 1.6G」

}

else

{

    echo 「The usage of memory is normal」

}

fi

示例演示:

1)源程序(假設上面已經查詢出 CFTestApp 的進程 ID 爲 11426)

mem=`GetMem 11426`

echo "The usage of memory is $mem M"

if [ $mem -gt 1600 ]

then

{

    echo "The usage of memory is larger than 1.6G"

}

else

{

    echo "The usage of memory is normal"

}

fi

2)結果輸出

The usage of memory is 248 M

The usage of memory is normal

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:CFTestApp 程序當前的內存使用爲 248M,是正常的,沒有超過 1.6G 的告警限制。

檢測進程句柄使用量

在對應用服務進行維護時,也常常遇到因爲句柄使用 過量致使業務中斷的狀況。每一個平臺對進程的句柄使用都是有限的,例如在 Linux 平臺,咱們能夠使用 ulimit – n 命令(open files (-n) 1024)或者對 /etc/security/limits.conf 的內容進行查看,獲得進程句柄限制。句柄使用太高可能因爲負載太高,句柄泄露等狀況,經過腳本對業務進程句柄使用量進行時時監控,能夠在異常時及時發送告警(例如經過短信),便於維護人員及時處理。下面的函數可得到指定進程 ID 的進程句柄使用狀況。它有一個參數爲進程 ID,它首先使用 ls 輸出進程句柄信息,而後經過 wc -l 統計輸出句柄個數。

function GetDes

{

    DES=`ls /proc/$1/fd | wc -l`

    echo $DES

}

下面功能是經過上面的函數 GetDes得到此進程的句柄使用量,而後經過條件語句判斷句柄使用是否超過限制,若是超過 900(能夠根據實際狀況進行調整)個,則輸出告警,不然輸出正常信息。

des=` GetDes $PID`

if [ $des -gt 900 ]

then

{

    echo 「The number of des is larger than 900」

}

else

{

    echo 「The number of des is normal」

}

fi

示例演示:

1)源程序(假設上面查詢出 CFTestApp 的進程 ID 爲 11426)

des=`GetDes 11426`

echo "The number of des is $des"

if [ $des -gt 900 ]

then

{

    echo "The number of des is larger than 900"

}

else

{

    echo "The number of des is normal"

}

fi

2)結果輸出

The number of des is 528

The number of des is normal

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:CFTestApp 程序當前的句柄使用爲 528 個,是正常的,沒有超過 900 個的告警限制。

4)命令介紹

wc: 統計指定文件中的字節數、字數、行數 , 並將統計結果顯示輸出。

參數:-l 統計行數。

-c 統計字節數。

-w 統計字數。

使用 Shell 對系統資源進行監控

查看某個 TCP 或 UDP 端口是否在監聽

端口檢測是系統資源檢測常常遇到的,特別是在網絡通信狀況下,端口狀態的檢測每每是很重要的。有時可能進程,CPU,內存等處於正常狀態,可是端口處於異常狀態,業務也是沒有正常運行。下面函數可判斷指定端口是否在監聽。它有一個參數爲待檢測端口,它首先使用 netstat 輸出端口占用信息,而後經過 grep, awk,wc 過濾輸出監聽 TCP 端口的個數,第二條語句爲輸出 UDP 端口的監聽個數,若是 TCP 與 UDP 端口監聽都爲 0,返回 0,不然返回 1.

清單 6. 端口檢測

function Listening

{

    TCPListeningnum=`netstat -an | grep ":$1 " | \n

    awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l`

    UDPListeningnum=`netstat -an|grep ":$1 " \n

    |awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' | wc -l`

    (( Listeningnum = TCPListeningnum + UDPListeningnum ))

    if [ $Listeningnum == 0 ]

   then

   {

       echo "0"

    }

    else

   {

       echo "1"

   }

   fi

}

示例演示:

1)源程序(例如查詢 8080 端口的狀態是否在監聽)

isListen=`Listening 8080`

if [ $isListen -eq 1 ]

then

{

   echo "The port is listening"

}

else

{

   echo "The port is not listening"

}

fi

2)結果輸出

The port is listening

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:這個 Linux 服務器的 8080 端口處在監聽狀態。

4)命令介紹

netstat: 用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況。

參數:-a 顯示全部連線中的 Socket。

-n 直接使用 IP 地址,而不經過域名服務器。

下面的功能也是檢測某個 TCP 或者 UDP 端口是否處在正常狀態。

tcp: netstat -an|egrep $1 |awk '$6 == "LISTEN" && $1 == "tcp" {print $0}'

udp: netstat -an|egrep $1 |awk '$1 == "udp" && $5 == "0.0.0.0:*" {print $0}'

命令介紹

egrep: 在文件內查找指定的字符串。egrep 執行效果如 grep -E,使用的語法及參數可參照 grep 指令,與 grep 不一樣點在於解讀字符串的方法,egrep 是用擴展的正則表達式語法來解讀,而 grep 則用基本的正則表達式語法,擴展的正則表達式比基本的正則表達式有更完整的表達規範。

查看某個進程名正在運行的個數

有時咱們可能須要獲得服務器上某個進程的啓動個數,下面的功能是檢測某個進程正在運行的個數,例如進程名爲 CFTestApp。

Runnum=`ps -ef | grep -v vi | grep -v tail | grep "[ /]CFTestApp" | grep -v grep | wc -l

檢測系統 CPU 負載

在對服務器進行維護時,有時也遇到因爲系統 CPU(利用率)負載 過量致使業務中斷的狀況。服務器上可能運行多個進程,查看單個進程的 CPU 都是正常的,可是整個系統的 CPU 負載多是異常的。經過腳本對系統 CPU 負載進行時時監控,能夠在異常時及時發送告警,便於維護人員及時處理,預防事故發生。下面的函數能夠檢測系統 CPU 使用狀況 . 使用 vmstat 取 5 次系統 CPU 的 idle 值,取平均值,而後經過與 100 取差獲得當前 CPU 的實際佔用值。

function GetSysCPU

{

    CpuIdle=`vmstat 1 5 |sed -n '3,$p' \n

    |awk '{x = x + $15} END {print x/5}' |awk -F. '{print $1}'

    CpuNum=`echo "100-$CpuIdle" | bc`

    echo $CpuNum

}

示例演示:

1)源程序

cpu=`GetSysCPU`

echo "The system CPU is $cpu"

if [ $cpu -gt 90 ]

then

{

    echo "The usage of system cpu is larger than 90%"

}

else

{

    echo "The usage of system cpu is normal"

}

fi

2)結果輸出

The system CPU is 87

The usage of system cpu is normal

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:當前 Linux 服務器系統 CPU 利用率爲 87%,是正常的,沒有超過 90% 的告警限制。

4)命令介紹

vmstat:Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操做系統的虛擬內存、進程、CPU 活動進行監視。

參數: -n 表示在週期性循環輸出時,輸出的頭部信息僅顯示一次。

檢測系統磁盤空間

系統磁盤空間檢測是系統資源檢測的重要部分,在系統維護維護中,咱們常常須要查看服務器磁盤空間使用狀況。由於有些業務要時時寫話單,日誌,或者臨時文件等,若是磁盤空間用盡,也可能會致使業務中斷,下面的函數能夠檢測當前系統磁盤空間中某個目錄的磁盤空間使用狀況 . 輸入參數爲須要檢測的目錄名,使用 df 輸出系統磁盤空間使用信息,而後經過 grep 和 awk 過濾獲得某個目錄的磁盤空間使用百分比。

function GetDiskSpc

{

    if [ $# -ne 1 ]

    then

    return 1

    fi

    Folder="$1$"

    DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'

    echo $DiskSpace

}

示例演示:

1)源程序(檢測目錄爲 /boot)

Folder="/boot"

DiskSpace=`GetDiskSpc $Folder`

echo "The system $Folder disk space is $DiskSpace%"

if [ $DiskSpace -gt 90 ]

then

{

    echo "The usage of system disk($Folder) is larger than 90%"

}

else

{

    echo "The usage of system disk($Folder) is normal"

}

fi

2)結果輸出

The system /boot disk space is 14%

The usage of system disk(/boot) is normal

[dyu@xilinuxbldsrv shell]$

3)結果分析

從上面的輸出可見:當前此 Linux 服務器系統上 /boot 目錄的磁盤空間已經使用了 14%,是正常的,沒有超過使用 90% 的告警限制。

4)命令介紹

df:檢查文件系統的磁盤空間佔用狀況。能夠利用該命令來獲取硬盤被佔用了多少空間,目前還剩下多少空間等信息。

參數:-k 以 k 字節爲單位顯示。

總結

在 Linux 平臺下,shell 腳本監控是一個很是簡單,方便,有效的對服務器,進程進行監控的方法,對系統開發以及進程維護人員很是有幫助。它不只能夠對上面的信息進行監控,發送告警,同時也能夠監控進程的日誌等等的信息,但願本文對你們有幫助。

參考文章:http://blog.jobbole.com/22318/

3、深刻學習命令

1. ls命令:列出目錄內容(List Directory Contents)的意思。運行它就是列出文件夾裏的內容,多是文件也多是文件夾。

    ls –l 命令以詳情模式(long listing fashion)列出文件夾的內容。ls -l 命令輸出:

      • d (表明了是目錄).
      • rwxr-xr-x 是文件或者目錄對所屬用戶,同一組用戶和其它用戶的權限。
      • 上面例子中第一個ravisaive 表明了文件文件屬於用戶ravisaive
      • 上面例子中的第二個ravisaive表明了文件文件屬於用戶組ravisaive
      • 4096 表明了文件大小爲4096字節.
      • May 8 01:06 表明了文件最後一次修改的日期和時間.
      • 最後面的就是文件/文件夾的名字

    ls –a 命令會列出文件夾裏的全部內容,包括以」.」開頭的隱藏文件。

            注意:在Linux中,文件以「.」開頭的就是隱藏文件,而且每一個文件,文件夾,設備或者命令都是以文件對待。

  擴展:

  ll 是 ls –la命令的別名

  lsblk 就是列出塊設備。除了RAM外,以標準的樹狀輸出格式,整齊地顯示塊設備。

  lsblk –l 命令以列表格式顯示塊設備(而不是樹狀格式)。

           注意:lsblk是最有用和最簡單的方式來了解新插入的USB設備的名字,特別是當你在終端上處理磁盤/塊設備時。

  更多ls命令例子參考:http://www.tecmint.com/15-basic-ls-command-examples-in-linux/

2. cd 命令:表明了改變目錄。它在終端中改變工做目錄來執行,複製,移動,讀,寫等等操做。

注意: 在終端中切換目錄時,cd就大顯身手了。

cd ~ 會改變工做目錄爲用戶的家目錄,並且當用戶發現本身在終端中迷失了路徑時,很是有用;

cd .. 從當前工做目錄切換到(當前工做目錄的)父目錄,即上層目錄;

cd . 表示當前目錄(注意一個點和兩個點的區別);

cd / 表示切換到根目錄。

3. pwd 命令(print working directory):在終端中顯示當前工做目錄的全路徑。

root@tecmint:~# pwd

/home/user/Desktop

注意: 這個命令並不會在腳本中常用,可是對於新手,當從鏈接到nux好久後在終端中迷失了路徑,這絕對是救命稻草。

4. sudo (super user do) 命令:容許受權用戶執行超級用戶或者其它用戶的命令。經過在sudoers列表的安全策略來指定。

  注意:sudo 容許用戶借用超級用戶的權限,然而 su 命令其實是容許用戶以超級用戶登陸。因此sudo比su更安全。並不建議使用sudo或者su來處理平常用途,由於它可能致使嚴重的錯誤若是你意外的作錯了事。

su [username] 切換用戶

5. touch 命令:建立新文件,表明了將文件的訪問和修改時間更新爲當前時間。touch命令只會在文件不存在的時候纔會建立它。若是文件已經存在了,它會更新時間戳,可是並不會改變文件的內容。

注意:touch 能夠用來在用戶擁有寫權限的目錄下建立不存在的文件。

6. mkdir (Make directory) 命令: 在命名路徑下建立新的目錄。然而若是目錄已經存在了,那麼它就會返回一個錯誤信息」不能建立文件夾,文件夾已經存在了.

注意:目錄只能在用戶擁有寫權限的目錄下才能建立。如mkdir:不能建立目錄`tecmint`,由於文件已經存在了。(上面的輸出中不要被文件迷惑了,你應該記住在linux中,文件,文件夾,驅動,命令,腳本都視爲文件)。

7. chmod 命令表示改變文件的權限,就是改變文件的模式位。chmod會根據要求的模式來改變每一個所給的文件,文件夾,腳本等等的文件模式(權限)。在文件(文件夾或者其它,爲了簡單起見,咱們就使用文件)中存在3種類型的權限:

  • Read (r)=4
  • Write(w)=2
  • Execute(x)=1

因此若是你想給文件只讀權限,就設置爲4;只寫權限,設置權限爲2;只執行權限,設置爲1; 讀寫權限,就是4+2 = 6, 以此類推。

如今須要設置3種用戶和用戶組權限。第一個是擁有者,而後是用戶所在的組,最後是其它用戶。

如:rwxr-x--x   abc.sh

這裏root的權限是 rwx(讀寫和執行權限),所屬用戶組權限是 r-x (只有讀寫權限, 沒有寫權限)對於其它用戶權限是 -x(只有只執行權限)

爲了改變它的權限,爲擁有者,用戶所在組和其它用戶提供讀,寫,執行權限,即:chmod 777 abc.sh

三種都只有讀寫權限,即:chmod 666 abc.sh

擁有者用戶有讀寫和執行權限,用戶所在的組和其它用戶只有可執行權限,即:chmod 711 abc.sh

注意:對於系統管理員和用戶來講,這個命令是最有用的命令之一了。在多用戶環境或者服務器上,對於某個用戶,若是設置了文件不可訪問,那麼這個命令就能夠解決,若是設置了錯誤的權限,那麼也就提供了爲受權的訪問。經常使用chmod 777 * -R爲該層目錄及其如下層次全部文件的擁有者、用戶所在組和其它用戶提供讀寫執行命令。

8. chown 命令就是改變文件擁有者和所在用戶組。每一個文件都屬於一個用戶組和一個用戶。在你的目錄下,使用」ls -l」,你就會看到像這樣的東西。

root@tecmint:~# ls -l

drwxr-xr-x 3 server root 4096 May 10 11:14 Binary

drwxr-xr-x 2 server server 4096 May 13 09:42 Desktop

在這裏,目錄Binary屬於用戶」server」,和用戶組」root」,而目錄」Desktop」屬於用戶「server」和用戶組」server」,「chown」命令用來改變文件的全部權,因此僅僅用來管理和提供文件的用戶和用戶組受權。使用格式:chown [新的用戶]:[新的用戶組] [文件名]

root@tecmint:~# chown server:server Binary

drwxr-xr-x 3 server server 4096 May 10 11:14 Binary

drwxr-xr-x 2 server server 4096 May 13 09:42 Desktop

注意:「chown」所給的文件改變用戶和組的全部權到新的擁有者或者已經存在的用戶或者用戶組。

9. cp 命令:(copy)就是複製。它會從一個地方複製一個文件到另一個地方。使用格式:cp [-r(表遞歸)] [源文件或源目錄] [目標目錄]

root@tecmint:~# cp /home/user/Downloads abc.tar.gz /home/user/Desktop (Return 0 when sucess)

注意: cp,在shell腳本中是最經常使用的一個命令,並且它能夠使用通配符(在前面一塊中有所描述),來定製所需的文件的複製。

10. mv 命令:將一個地方的文件移動到另一個地方去。使用格式:mv [-r(表遞歸)] [源文件或源目錄] [目標目錄]

root@tecmint:~# mv /home/user/Downloads abc.tar.gz /home/user/Desktop (Return 0 when sucess)

注意:mv 命令能夠使用通配符。mv需謹慎使用,由於易懂系統的或者未受權的文件不但會致使安全性問題,並且可能系統崩潰。

11. date 命令使用標準的輸出打印當前的日期和時間,也能夠深刻設置。

root@tecmint:~# date

Fri May 17 14:13:29 IST 2013

root@tecmint:~# date --set='14 may 2013 13:57'

Mon May 13 13:57:00 IST 2013

注意:這個命令在腳本中十分有用,以及基於時間和日期的腳本更完美。並且在終端中改變日期和時間,讓你更專業!!!(固然你須要root權限才能操做這個,由於它是系統總體改變)

12. cat 命令:表明了連結(Concatenation),鏈接兩個或者更多文本文件或者以標準輸出形式打印文件的內容。

root@tecmint:~# cat a.txt b.txt c.txt d.txt abcd.txt

root@tecmint:~# cat abcd.txt

....

contents of file abcd

...

注意:「>>」和「>」調用了追加符號。它們用來追加到文件裏,而不是顯示在標準輸出上「>」符號會刪除已存在的文件,而後建立一個新的文件。因此由於安全的緣由,建議使用「>>」,它會寫入到文件中,而不是覆蓋或者刪除。例如:ls>result.txt 表示將ls顯示的當前目錄下的內容寫到一個新的文件下,文件名爲result.txt

在深刻探究以前,我必須讓你知道通配符(你應該知道通配符,它出如今大多數電視選秀中)。通配符是shell的特點,和任何GUI文件管理器相比,它使命令行更強大有力!如你所看到那樣,在一個圖形文件管理器中,你想選擇一大組文件,你一般不得不使用你的鼠標來選擇它們。這可能以爲很簡單,可是事實上,這種情形很讓人沮喪!

例如,假如你有一個有不少不少各類類型的文件和子目錄的目錄,而後你決定移動全部文件名中包含「Linux」字樣的HTML文件到另一個目錄。如何簡單的完成這個?若是目錄中包含了大量的不一樣名的HTML文件,你的任務很巨大,而不是簡單了。

在LInux CLI中,這個任務就很簡單,就好像只移動一個HTML文件,由於有shell的通配符,纔會如此簡單。這些是特殊的字符,容許你選擇匹配某種字符模式的文件名。它幫助你來選擇,即便是大量文件名中只有幾個字符,並且在大多數情形中,它比使用鼠標選擇文件更簡單。

這裏就是經常使用通配符列表:

Wildcard Matches

*                   零個或者更多字符

?                   剛好一個字符

[abcde]             剛好列舉中的一個字符

[a-e]               剛好在所給範圍中的一個字符

[!abcde]            任何字符都不在列舉中

[!a-e]              任何字符都不在所給的範圍中

{debian,linux}      剛好在所給選項中的一整個單詞

! 叫作非,帶’!’的反向字符串爲真

注意:cat -n 能夠幫助顯示行號。

    更多請閱讀Linux cat 命令的實例:http://www.tecmint.com/13-basic-cat-command-examples-in-linux/

13.  cal 命令:(Calender),它用來顯示當前月份或者將來或者過去任何年份中的月份。

root@tecmint:~# cal

May 2013       

Su Mo Tu We Th Fr Sa 

1  2  3  4 

5  6  7  8  9 10 11 

12 13 14 15 16 17 18 

19 20 21 22 23 24 25 

26 27 28 29 30 31

顯示已通過去的月份,1835年2月

root@tecmint:~# cal 02 1835

February 1835

Su Mo Tu We Th Fr Sa 

1 2 3 4 5 6 7

8 9 10 11 12 13 14

15 16 17 18 19 20 21

22 23 24 25 26 27 28

顯示將來的月份,2145年7月。

root@tecmint:~# cal 07 2145

July 2145

Su Mo Tu We Th Fr Sa 

1 2 3

4 5 6 7 8 9 10

11 12 13 14 15 16 17

18 19 20 21 22 23 24

25 26 27 28 29 30 31

注意: 你不須要往回調整日曆50年,既不用複雜的數據計算你出生那天,也不用計算你的生日在哪天到來,由於它的最小單位是月,而不是日。

14. tar 命令是磁帶歸檔(Tape Archive),對建立一些文件的的歸檔和它們的解壓頗有用。

root@tecmint:~# tar -xvf abc.tar(記住'v'表明了顯示壓縮或解壓過程)

root@tecmint:~# tar -zxvf abc.tar.gz (記住'z'表明了.tar.gz)

root@tecmint:~# tar -jxvf abc.tar.bz2 (記住'j'表明了.tar.bz2)

root@tecmint:~# tar -cvf archieve.tar.gz(.bz2) /path/to/folder/abc

注意: 「tar.gz「表明了使用gzip歸檔,「bar.bz2」使用bzip壓縮的,它壓縮的更好可是也更慢。

下面對於tar系列的壓縮文件做一個小結:
(1)對於.tar結尾的文件
tar -xf all.tar
(2)對於.gz結尾的文件
gzip -d all.gz
gunzip all.gz
(3)對於.tgz或.tar.gz結尾的文件
tar -xzf all.tar.gz
tar -xzf all.tgz
(4)對於.bz2結尾的文件
bzip2 -d all.bz2
bunzip2 all.bz2
(5)對於tar.bz2結尾的文件
tar -xjf all.tar.bz2
(6)對於.Z結尾的文件
uncompress all.Z
(7)對於.tar.Z結尾的文件
tar -xZf all.tar.z

另外對於Window下的常見壓縮文件.zip和.rar,Linux也有相應的方法來解壓它們:
(1)對於.zip
linux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參
數選項不少,這裏只作簡單介紹,依舊舉例說明一下其用法:
zip all.zip *.jpg
這條命令是將全部.jpg的文件壓縮成一個zip包 
      unzip all.zip
這條命令是將all.zip中的全部文件解壓出來
(2)對於.rar
要在linux下處理.rar文件,須要安裝RAR for Linux,能夠從網上下載,但要記住,RAR for Linux 不是免費的;可從http://www.rarsoft.com/download.htm下載RARfor Linux 3.2. 0,而後安裝:
tar -xzpvf rarlinux-3.2.0.tar.gz
cd rar
make
這樣就安裝好了,安裝後就有了rar和unrar這兩個程序,rar是壓縮程序,unrar 是解壓程序。它們的參數選項不少,這裏只作簡單介紹,依舊舉例說明一下其用法:

rar a all *.jpg
這條命令是將全部.jpg的文件壓縮成一個rar包,名爲all.rar,該程序會將.rar
擴展名將自動附加到包名後。
unrar e all.rar
這條命令是將all.rar中的全部文件解壓出來
到此爲至,咱們已經介紹過linux下的tar、gzip、gunzip、bzip二、bunzip二、compress 、 uncompress、 zip、unzip、rar、unrar等程式,你應該已經可以使用它們對.tar 、.gz、.tar.gz、.tgz、.bz二、.tar.bz二、. Z、.tar.Z、.zip、.rar這10種壓縮文
件進行解壓了,之後應該不須要爲下載了一個軟件而不知道如何在Linux下解開而煩惱了。並且以上方法對於Unix也基本有效。

瞭解更多」tar 命令」的例子,請查看:http://www.tecmint.com/18-tar-command-examples-in-linux/

15. apt 命令:Debian系列以「apt」命令爲基礎,「apt」表明了Advanced Package Tool。APT是一個爲Debian系列系統(Ubuntu,Kubuntu等等)開發的高級包管理器,在Gnu/Linux系統上,它會爲包自動地,智能地搜索,安裝,升級以及解決依賴。

root@tecmint:~# apt-get install mplayer

root@tecmint:~# apt-get update

注意:上面的命令會致使系統總體的改變,因此須要root密碼(查看提示符爲」#」,而不是「$」).和yum命令相比,Apt更高級和智能。見名知義,apt-cache用來搜索包中是否包含子包mplayer, apt-get用來安裝,升級全部的已安裝的包到最新版。

  關於apt-get 和 apt-cache命令更多信息,請查看:http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/

16. uname 命令:就是Unix Name的簡寫。顯示機器名,操做系統和內核的詳細信息。

root@tecmint:~# uname -a

Linux tecmint 3.8.0-19-generic #30-Ubuntu SMP Wed May 1 16:36:13 UTC 2013 i686 i686 i686 GNU/Linux

注意: uname顯示內核類別, uname -a顯示詳細信息。上面的輸出詳細說明了uname -a

  1. 「Linux「: 機器的內核名
  2. 「tecmint「: 機器的分支名
  3. 「3.8.0-19-generic「: 內核發佈版本
  4. 「#30-Ubuntu SMP「: 內核版本
  5. 「i686「: 處理器架構
  6. 「GNU/Linux「: 操做系統名
17. history 命令:就是歷史記錄。它顯示了在終端中所執行過的全部命令的歷史。

root@tecmint:~# history

sudo add-apt-repository ppa:tualatrix/ppa

sudo apt-get update

sudo apt-get install ubuntu-tweak

sudo add-apt-repository ppa:diesch/testing

執行歷史第3條命令能夠用:

root@tecmint:~# !3

注意:按住「CTRL + R」就能夠搜索已經執行過的命令,它能夠在你寫命令時自動補全,也能夠用Tab鍵進行自動補全

(reverse-i-search)`if': ifconfig

18. dd 命令:表明了轉換和複製文件。能夠用來轉換和複製文件,大多數時間是用來複制iso文件(或任何其它文件)到一個usb設備(或任何其它地方)中去,因此能夠用來製做USB啓動器。

root@tecmint:~# dd if=/home/user/Downloads/debian.iso of=/dev/sdb1 bs=512M; sync

注意:在上面的例子中,usb設備就是sdb1(你應該使用lsblk命令驗證它,不然你會重寫你的磁盤或者系統),請慎重使用磁盤的名,切忌。

dd 命令在執行中會根據文件的大小和類型 以及 usb設備的讀寫速度,消耗幾秒到幾分鐘不等。

19. md5sum 命令:就是計算和檢驗MD5信息簽名。md5 checksum(一般叫作哈希)使用匹配或者驗證文件的文件的完整性,由於文件可能由於傳輸錯誤,磁盤錯誤或者無惡意的干擾等緣由而發生改變。

root@tecmint:~# md5sum teamviewer_linux.deb

47790ed345a7b7970fc1f2ac50c97002  teamviewer_linux.deb

注意:用戶能夠使用官方提供的和md5sum生成簽名信息匹對以此檢測文件是否改變。Md5sum沒有sha1sum安全。

1-19命令參考文章:http://blog.jobbole.com/45335/

20.  find 命令:搜索指定目錄下的文件,從開始於父目錄,而後搜索子目錄。

root@tecmint:~# find -name *.sh

./Desktop/load.sh

./Desktop/test.sh

./Desktop/shutdown.sh

./Binary/firefox/run-mozilla.sh

./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh

./Downloads/kdewebdev-3.5.8/admin/doxygen.sh

./Downloads/kdewebdev-3.5.8/admin/cvs.sh

./Downloads/kdewebdev-3.5.8/admin/ltmain.sh

./Downloads/wheezy-nv-install.sh

注意: `-name‘選項是搜索大小寫敏感。能夠使用`-iname‘選項,這樣在搜索中能夠忽略大小寫。(*是通配符,能夠搜索全部的文件;‘.sh‘你能夠使用文件名或者文件名的一部分來制定輸出結果,最後能夠添加一項搜索的目錄,如:find -name *.sh /home)

root@tecmint:~# find -iname *.SH ( find -iname *.Sh /  find -iname *.sH)

./Desktop/load.sh

./Desktop/test.sh

./Desktop/shutdown.sh

./Binary/firefox/run-mozilla.sh

./Downloads/kdewebdev-3.5.8/quanta/scripts/externalpreview.sh

./Downloads/kdewebdev-3.5.8/admin/doxygen.sh

./Downloads/kdewebdev-3.5.8/admin/cvs.sh

./Downloads/kdewebdev-3.5.8/admin/ltmain.sh

./Downloads/wheezy-nv-install.sh

  find命令的更詳細信息請參考http://www.tecmint.com/35-practical-examples-of-linux-find-command/

21. grep 命令:搜索指定文件中包含給定字符串或者單詞的行。舉例搜索‘/etc/passwd‘文件中的‘tecmint’

root@tecmint:~# grep tecmint /etc/passwd

tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

使用 「-i 」 選項將忽略大小寫,其餘命令也同理。

root@tecmint:~# grep -i TECMINT /etc/passwd

tecmint:x:1000:1000:Tecmint,,,:/home/tecmint:/bin/bash

使用 「-r 」 選項遞歸搜索全部自目錄下包含字符串 「127.0.0.1「.的行,其餘命令也同理。

root@tecmint:~# grep -r "127.0.0.1" /etc/

/etc/vlc/lua/http/.hosts:127.0.0.1

/etc/speech-dispatcher/modules/ivona.conf:#IvonaServerHost "127.0.0.1"

/etc/mysql/my.cnf:bind-address      = 127.0.0.1

/etc/apache2/mods-available/status.conf:    Allow from 127.0.0.1 ::1

/etc/apache2/mods-available/ldap.conf:    Allow from 127.0.0.1 ::1

/etc/apache2/mods-available/info.conf:    Allow from 127.0.0.1 ::1

/etc/apache2/mods-available/proxy_balancer.conf:#    Allow from 127.0.0.1 ::1

/etc/security/access.conf:#+ : root : 127.0.0.1

/etc/dhcp/dhclient.conf:#prepend domain-name-servers 127.0.0.1;

/etc/dhcp/dhclient.conf:#  option domain-name-servers 127.0.0.1;

/etc/init/network-interface.conf:   ifconfig lo 127.0.0.1 up || true

/etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).

/etc/java-6-openjdk/net.properties:# http.nonProxyHosts=localhost|127.0.0.1

/etc/java-6-openjdk/net.properties:# localhost & 127.0.0.1).

/etc/java-6-openjdk/net.properties:# ftp.nonProxyHosts=localhost|127.0.0.1

/etc/hosts:127.0.0.1    localhost

注意:您還能夠使用如下選項:

1 -w搜索單詞 (egrep -w ‘word1|word2‘ /path/to/file).

2 -c用於統計知足要求的行 (i.e., total number of times the pattern matched) (grep -c ‘word‘ /path/to/file).

3 –color彩色輸出 (grep –color server /etc/passwd).

22. man命令:系統幫助頁。Man提供命令全部選項及用法的在線文檔。幾乎全部的命令都有它們的幫助頁,例如:

root@tecmint:~# man man

MAN(1)                                                               Manual pager utils                                                              MAN(1)

NAME

man - an interface to the on-line reference manuals

SYNOPSIS

man  [-C  file]  [-d]  [-D]  [--warnings[=warnings]]  [-R  encoding]  [-L  locale]  [-m  system[,...]]  [-M  path]  [-S list] [-e extension] [-i|-I]

[--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justification]  [-p

string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ...

man -k [apropos options] regexp ...

man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...

man -f [whatis options] page ...

man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t] [-T[device]]

[-H[browser]] [-X[dpi]] [-Z] file ...

man -w|-W [-C file] [-d] [-D] page ...

man -c [-C file] [-d] [-D] page ...

man [-hV]

上面是man命令的系統幫助頁,相似的有cat和ls的幫助頁。

注意:系統幫助頁是爲了命令的使用和學習而設計的。

23. ps 命令:給出正在運行的某個進程的狀態,每一個進程有特定的id成爲PID。

ps 命令最經常使用的仍是用於監控後臺進程的工做狀況,由於後臺進程是不和屏幕鍵盤這些標準輸入/輸出設備進行通訊的,因此若是須要檢測其狀況,即可以使用ps命令了.

注意:ps是顯示瞬間進程的狀態,並不動態連續;若是想對進程進行實時監控應該用top命令

參數:

a  顯示全部進程
-a 顯示同一終端下的全部程序
-A 顯示全部進程
c  顯示進程的真實名稱
-N 反向選擇
-e 等於「-A」
e  顯示環境變量
f  樹狀顯示,顯示程序間的關係
-H 顯示樹狀結構
r  顯示當前終端的進程
T  顯示當前終端的全部程序
u  指定用戶的全部進程
-au 顯示較詳細的資訊
-aux 顯示全部包含其餘使用者的行程
-C<命令> 列出指定命令的情況
--lines<行數> 每頁顯示的行數
--width<字符數> 每頁顯示的字符數
--help 顯示幫助信息
--version 顯示版本顯示

經常使用格式:ps -aux(以BSD風格顯示進程)或者 ps –efH (以System V風格顯示進程) 或者 ps -ef

特別說明:

因爲 ps 可以支持的系統類型至關的多,因此他的參數多的離譜!

並且有沒有加上 - 差不少!詳細的用法應該要參考 man ps 喔!

例1:ps –l 將目前屬於您本身此次登入的 PID 與相關信息列示出來

# 各相關信息的意義爲:

# F 表明這個程序的旗標 (flag), 4 表明使用者爲 superuser;

# S 表明這個程序的狀態 (STAT);

#UID 表明執行者身份

# PID 進程的ID號!底下的 PPID 則父進程的ID;

# C CPU 使用的資源百分比

# PRI指進程的執行優先權(Priority的簡寫),其值越小越早被執行;

# NI 這個進程的nice值,其表示進程可被執行的優先級的修正數值。

# ADDR 這個是內核函數,指出該程序在內存的那個部分。若是是個執行

# 的程序,通常就是『 - 』

# SZ 使用掉的內存大小;

# WCHAN 目前這個程序是否正在運做當中,若爲 - 表示正在運做;

# TTY 登入者的終端機位置囉;

# TIME 使用掉的 CPU 時間。

# CMD 所下達的指令名稱

例2:ps aux 列出目前全部的正在內存當中的程序

• USER:該進程屬於那個使用者帳號的?

• PID :該進程的進程ID號。

• %CPU:該進程使用掉的 CPU 資源百分比;

• %MEM:該進程所佔用的物理內存百分比;

• VSZ :該進程使用掉的虛擬內存量 (Kbytes)

• RSS :該進程佔用的固定的內存量 (Kbytes)

• TTY :該進程是在那個終端機上面運做,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若爲 pts/0 等等的,則表示爲由網絡鏈接進主機的程序。

• STAT:該程序目前的狀態,主要的狀態有:

   R :該程序目前正在運做,或者是可被運做;

   S :該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。

   T :該程序目前正在偵測或者是中止了;

   Z :該程序應該已經終止,可是其父程序卻沒法正常的終止他,形成 zombie (疆屍) 程序的狀態

• START:該進程被觸發啓動的時間;

• TIME :該進程實際使用 CPU 運做的時間。

• COMMAND:該程序的實際指令爲何?

例3:以例一的顯示內容,顯示出全部的程序

例4:列出相似程序樹的程序顯示

例5:找出與 cron 與 syslog 這兩個服務有關的 PID 號碼

其餘實例:
1. 能夠用 | 管道和 more 鏈接起來分頁查看
命令:ps -aux |more

2. 把全部進程顯示出來,並輸出到ps001.txt文件
命令:ps -aux > ps001.txt

3. 輸出指定的字段
命令:ps -o pid,ppid,pgrp,session,tpgid,comm
輸出:

代碼以下:

[root@localhost test6]# ps -o pid,ppid,pgrp,session,tpgid,comm
PID PPID PGRP SESS TPGID COMMAND
17398 17394 17398 17398 17478 bash
17478 17398 17478 17398 17478 ps
[root@localhost test6]#

參考:http://www.jb51.net/LINUXjishu/151851.html

 

ps命令極爲經常使用,其餘命令還有:
pstree  
樹狀顯示進程信息
-a 顯示完整命令及參數
-c 重複進程分別顯示
-c 顯示進程ID PID
-n 按 PID 排列進程
pgrep <進程名> 
顯示進程的PID
-l 顯示進程名和進程PID
-o 進程起始ID
-n 進程終止ID

24. kill 命令
也許你從命令的名字已經猜出是作什麼的了,kill是用來殺死已經可有可無或者沒有響應的進程.它是一個很是有用的命令,而不是很是很是有用.你可能 很熟悉Windows下要殺死進程可能須要頻繁重啓機器由於一個在運行的進程大部分狀況下不可以殺死,即便殺死了進程也須要從新啓動操做系統才能生效.但 在linux環境下,事情不是這樣的.你能夠殺死一個進程而且重啓它而不是重啓整個操做系統.

殺死一個進程須要知道進程的PID.

假設你想殺死已經沒有響應的‘apache2′進程,運行以下命令:

root@tecmint:~# ps -A | grep -i apache2

1285 ?        00:00:00 apache2

搜索‘apache2′進程,找到PID並殺掉它.例如:在本例中‘apache2′進程的PID是1285..

root@tecmint:~# kill 1285 (to kill the process apache2)

注意:每次你從新運行一個進程或者啓動系統,每一個進程都會生成一個新的PID.你能夠使用ps命令得到當前運行進程的PID.

另外一個殺死進程的方法是:

root@tecmint:~# pkill apache2

注意:kill須要PID做爲參數,pkill能夠選擇應用的方式,好比指定進程的全部者等.

kill 命令做用:

     用來終止一個進程

格式:

    kill [ -s signal | -p ] [ -a ] pid ...

    kill -l [ signal ]

參數:

    -s:指定發送的信號。

    -p:模擬發送信號。

    -l:指定信號的名稱列表。

    pid:要停止進程的ID號。

    Signal:表示信號。

進程查看方法:

  • top 命令

  • ps 命令

結束進程的命令

    有kill、pkill、killall、xkill等:

  • kill [信號代碼] <進程PID> 
    根據PID向進程發送信號,經常使用來結束進程,默認信號爲 -9
    信號代碼,可取值以下:
    -l [信號數字] 顯示、翻譯信號代碼
    -9 , -KILL 發送 kill 信號退出
    -6 , -ABRT 發送 abort 信號退出
    -15 , -TERM 發送 Termination 信號
    -1 , -HUP 掛起
    -2 , -INT 從鍵盤中斷,至關於 Ctrl+c
    -3 , -QUIT 從鍵盤退出,至關於 Ctrl+d
    -4 , -ILL 非法指令
    -11 , -SEGV 內存錯誤
    -13 , -PIPE 破壞管道
    -14 , -ALRM
    -STOP 中止進程,但不結束
    -CONT 繼續運行已中止的進程
    -9 -1 結束當前用戶的全部進程
  • pkill <進程名> 
    結束進程族。若是結束單個進程,請用 kill
  • killall <進程名> 
    killall和pkill 應用方法差很少,也是直接殺死運行中的程序;若是您想殺掉單個進程,請用kill 來殺掉。
  • xkill  
    在圖形界面中點殺進程。
    當xkill運行時鼠標指針變爲骷髏圖案,哪一個圖形程序崩潰一點就OK了。若是您想終止xkill ,就按右鍵取消。
    好比當firefox 出現崩潰不能退出時,點鼠標就能殺死firefox 。

參考:http://blog.sina.com.cn/s/blog_89ca421401016ec1.html

6. 實例應用

(1)強行停止(常用殺掉)一個進程標識號爲324的進程:

kill -9 324

(2)解除Linux系統的死鎖

在Linux中有時會發生這樣一種狀況:一個程序崩潰,而且處於死鎖的狀態。此時通常不用從新啓動計算機,只須要停止(或者說是關閉)這個有問題的程序便可。當kill處於X-Window界面時,主要的程序(除了崩潰的程序以外)通常都已經正常啓動了。此時打開一個終端,在那裏停止有問題的程序。好比,

    若是Mozilla瀏覽器程序出現了鎖死的狀況,能夠使用kill命令來停止全部包含有Mozolla瀏覽器的程序。首先用top命令查處該程序的PID,而後使用kill命令中止這個程序:

kill -SIGKILL XXX

其中,XXX是包含有Mozolla瀏覽器的程序的進程標識號。

(3)使用命令回收內存

咱們知道內存對於系統是很是重要的,回收內存能夠提升系統資源。kill命令能夠及時地停止一些「越軌」的程序或很長時間沒有相應的程序。例如,使用top命令發現一個無用 (Zombie) 的進程,此時能夠使用下面命令:

kill -9 XXX

    其中,XXX是無用的進程標識號。

    而後使用下面命令

free

    此時會發現可用內存容量增長了。

(4)killall命令

Linux下還提供了一個killall命令,能夠直接使用進程的名字而不是進程標識號,例如:

killall -HUP inetd

*殺死進程最安全的方法是單純使用kill命令,不加修飾符,不帶標誌。

    首先使用ps -ef命令肯定要殺死進程的PID,而後輸入如下命令:

    # kill -pid

    註釋:標準的kill命令一般都能達到目的。終止有問題的進程,並把進程的資源釋放給系統。然而,若是進程啓動了子進程,只殺死父進程,子進程仍在運行,所以仍消耗資源。爲了防止這些所謂的「殭屍進程」,應確保在殺死父進程以前,先殺死其全部的子進程。

*肯定要殺死進程的PID或PPID

    # ps -ef | grep httpd

*以優雅的方式結束進程

   # kill -l PID

    -l選項告訴kill命令用好像啓動進程的用戶已註銷的方式結束進程。當使用該選項時,kill命令也試圖殺死所留下的子進程。但這個命令也不是總能成功--或許仍然須要先手工殺死子進程,而後再殺死父進程。

*TERM信號

    給父進程發送一個TERM信號,試圖殺死它和它的子進程。

   # kill -TERM PPID

*killall命令

    killall命令殺死同一進程組內的全部進程。其容許指定要終止的進程的名稱,而非PID。

    # killall httpd

*中止和重啓進程

    有時候只想簡單的中止和重啓進程。以下:

   # kill -HUP PID

    該命令讓Linux和緩的執行進程關閉,而後當即重啓。在配置應用程序的時候,這個命令很方便,在對配置文件修改後須要重啓進程時就能夠執行此命令。

*絕殺 kill -9 PID

    贊成的 kill -s SIGKILL

    這個強大和危險的命令迫使進程在運行時忽然終止,進程在結束後不能自我清理。危害是致使系統資源沒法正常釋放,通常不推薦使用,除非其餘辦法都無效。

    當使用此命令時,必定要經過ps -ef確認沒有剩下任何殭屍進程。只能經過終止父進程來消除殭屍進程。若是殭屍進程被init收養,問題就比較嚴重了。殺死init進程意味着關閉系統。

    若是系統中有殭屍進程,而且其父進程是init,並且殭屍進程佔用了大量的系統資源,那麼就須要在某個時候重啓機器以清除進程表了。

參考:http://os.chinaunix.net/a2008/0601/980/000000980620.shtml

25. jobs fg bg nohup [Common]&等先後臺運行命令詳解

A,Shell支持做用控制,有如下命令: 
1. command& 讓進程在後臺運行 
2. jobs 查看後臺運行的進程 
3. fg %n 讓後臺運行的進程n到前臺來 
4. bg %n 讓進程n到後臺去;   
PS:"n"爲jobs查看到的進程編號.

B. 命令詳解

fg、bg、jobs、&、ctrl + z都是跟系統任務有關的,雖然如今基本上不怎麼須要用到這些命令,但學會了也是很實用的
一。& 最常常被用到
這個用在一個命令的最後,能夠把這個命令放到後臺執行
二。ctrl + z
能夠將一個正在前臺執行的命令放到後臺,而且暫停
三。jobs
查看當前有多少在後臺運行的命令
四。fg
將後臺中的命令調至前臺繼續運行
若是後臺中有多個命令,能夠用 fg %jobnumber將選中的命令調出,%jobnumber是經過jobs命令查到的後臺正在執行的命令的序號(不是pid)
五。bg
將一個在後臺暫停的命令,變成繼續執行
若是後臺中有多個命令,能夠用bg %jobnumber將選中的命令調出,%jobnumber是經過jobs命令查到的後臺正在執行的命令的序號(不是pid)

#Linux下使用Shell命令控制任務Jobs執行

下列命令能夠用來操縱進程任務:
ps 列出系統中正在運行的進程;
kill 發送信號給一個或多個進程(常常用來殺死一個進程);
jobs 列出當前shell環境中已啓動的任務狀態,若未指定jobsid,則顯示全部活動的任務狀態信息;若是報告了一個任務的終止(即任務的狀態被標記爲Terminated),shell 從當前的shell環境已知的列表中刪除任務的進程標識;
bg 將進程搬到後臺運行(Background);
fg 將進程搬到前臺運行(Foreground); 
將job轉移到後臺運行 
若是你常常在X圖形下工做,你可能有這樣的經歷:經過終端命令運行一個GUI程序,GUI界面出來了,可是你的終端還停留在原地,你不能在shell中繼續執行其餘命令了,除非將GUI程序關掉。 
爲了使程序執行後終端還能繼續接受命令,你能夠將進程移到後臺運行,使用以下命令運行程序: #假設要運行xmms
$xmms &
這樣打開xmms後,終端的提示又回來了。如今xmms在後臺運行着呢;但萬一你運行程序時忘記使用「&」了,又不想從新執行;你能夠先使用ctrl+z掛起程序,而後敲入bg命令,這樣程序就在後臺繼續運行了。
概念:當前任務 
若是後臺的任務號有2個,[1],[2];若是當第一個後臺任務順利執行完畢,第二個後臺任務還在執行中時,當前任務便會自動變成後臺任務號碼「[2]」的後臺任務。因此能夠得出一點,即當前任務是會變更的。當用戶輸入「fg」、「bg」和「stop」等命令時,若是不加任何引號,則所變更的均是當前任務。
察看jobs 
使用jobs或ps命令能夠察看正在執行的jobs。 
jobs命令執行的結果,+表示是一個當前的做業,減號表是是一個當前做業以後的一個做業,jobs -l選項可顯示全部任務的PID,jobs的狀態能夠是running, stopped, Terminated,可是若是任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識;也就是說,jobs命令顯示的是當前shell環境中所起的後臺正在運行或者被掛起的任務信息;
進程的掛起 
後臺進程的掛起: 
在solaris中經過stop命令執行,經過jobs命令查看job號(假設爲num),而後執行stop %num;
在redhat中,不存在stop命令,可經過執行命令kill -stop PID,將進程掛起;
當要從新執行當前被掛起的任務時,經過bg %num 便可將掛起的job的狀態由stopped改成running,仍在後臺執行;當須要改成在前臺執行時,執行命令fg %num便可;
前臺進程的掛起:
ctrl+Z;
進程的終止 
後臺進程的終止:
方法一:
經過jobs命令查看job號(假設爲num),而後執行kill %num
方法二:
經過ps命令查看job的進程號(PID,假設爲pid),而後執行kill pid 
前臺進程的終止:
ctrl+c
kill的其餘做用 
kill除了能夠終止進程,還能給進程發送其它信號,使用kill -l 能夠察看kill支持的信號。 
SIGTERM是不帶參數時kill發送的信號,意思是要進程終止運行,但執行與否還得看進程是否支持。若是進程尚未終止,能夠使用kill -SIGKILL pid,這是由內核來終止進程,進程不能監聽這個信號。

Unix/Linux下通常想讓某個程序在後臺運行,不少都是使用 & 在程序結尾來讓程序自動運行。好比咱們要運行mysql在後臺:

         /usr/local/mysql/bin/mysqld_safe --user=mysql &

可是咱們不少程序並不象mysqld同樣能夠作成守護進程,可能咱們的程序只是普通程序而已,通常這種 程序即便使用 & 結尾,若是終端關閉,那麼程序也會被關閉。爲了可以後臺運行,咱們須要使用nohup這個命令,好比咱們有個start.sh須要在後臺運行,而且但願在 後臺可以一直運行,那麼就使用nohup:

            nohup /root/start.sh &

          在shell中回車後提示:

           [~]$ appending output to nohup.out

      原程序的的標準輸出被自動改向到當前目錄下的nohup.out文件,起到了log的做用。

可是有時候在這一步會有問題,當把終端關閉後,進程會自動被關閉,察看nohup.out能夠看到在關閉終端瞬間服務自動關閉。

諮詢紅旗Linux工程師後,他也不得其解,在個人終端上執行後,他啓動的進程居然在關閉終端後依然運行。

在第二遍給我演示時,我才發現我和他操做終端時的一個細節不一樣:他是在當shell中提示了nohup成 功後還須要按終端上鍵盤任意鍵退回到shell輸入命令窗口,而後經過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關 閉程序按鈕關閉終端.。因此這時候會斷掉該命令所對應的session,致使nohup對應的進程被通知須要一塊兒shutdown。

這個細節有人和我同樣沒注意到,因此在這兒記錄一下了。

附:nohup命令參考

nohup 命令

用途:不掛斷地運行命令。

語法:nohup Command [ Arg ... ] [ & ]

描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略全部掛斷(SIGHUP)信號。在註銷後使用 nohup 命令運行後臺中的程序。要運行後臺中的 nohup 命令,添加 & ( 表示"and"的符號)到命令的尾部。

不管是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。若是當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。若是沒有文件能建立或打開以用於追加,那麼 Command 參數指定的命令不可調用。若是標準錯誤是一個終端,那麼把指定的命令寫給標準錯誤的全部輸出做爲標準輸出重定向到相同的文件描述符。

退出狀態:該命令返回下列出口值:

126 能夠查找但不能調用 Command 參數指定的命令。

127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。

不然,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

nohup命令及其輸出文件

nohup命令:若是你正在運行一個進程,並且你以爲在退出賬戶時該進程還不會結束,那麼能夠使用nohup命令。該命令能夠在你退出賬戶/關閉終端以後繼續運行相應的進程。nohup就是不掛起的意思( n ohang up)。

該命令的通常形式爲:nohup command &

使用nohup命令提交做業

若是使用nohup命令提交做業,那麼在缺省狀況下該做業的全部輸出都被重定向到一個名爲nohup.out的文件中,除非另外指定了輸出文件:

nohup command > myout.file 2>&1 &

在上面的例子中,輸出被重定向到myout.file文件中。

使用 jobs 查看任務。

使用 fg %n 關閉。

另外有兩個經常使用的ftp工具ncftpget和ncftpput,能夠實現後臺的ftp上傳和下載,這樣就能夠利用這些命令在後臺上傳和下載文件了。

簡單而有用的nohup命令在UNIX/LINUX中,普通進程用&符號放到後臺運行,若是啓動該程序的控制檯logout,則該進程隨即終止。

要實現守護進程,一種方法是按守護進程的規則去編程(本站有文章介紹過),比較麻煩;另外一種方法是仍然用普通方法編程,而後用nohup命令啓動程序:

nohup<程序名>&

則控制檯logout後,進程仍然繼續運行,起到守護進程的做用(雖然它不是嚴格意義上的守護進程)。

使用nohup命令後,原程序的的標準輸出被自動改向到當前目錄下的nohup.out文件,起到了log的做用,實現了完整的守護進程功能。

ygwu @ 2005年04月18日 上午10:03

For example:

如何遠程啓動WebLogic服務?

用telnet遠程控制服務器,遠程啓動WEBLOGIC服務,啓動後關閉telnet,WebLogic服務也跟着中止,這是由於使用telnet啓動的進程會隨着telnet進程的關閉而關閉。因此咱們能夠使用一些UNIX下的命令來作到不關閉。

使用以下命令:

nohup startWeblogic.sh&

若是想要監控標準輸出能夠使用:

tail -f nohup.out

當在後臺運行了程序的時候,能夠用jobs命令來查看後臺做業的狀態。在有多個後臺程序時,要使用來參數的fg命令將不一樣序號的後臺做業切換到前臺上運行。

當用戶啓動一個進程的時候,這個進程是運行在前臺,使用與相應控制終端相聯繫的標準輸入、輸出進行輸 入和輸出。即便將進程的輸入輸出重定向,並將進程放在後臺執行,進程仍然和當前終端設備有關係。正由於如此,在當前的登陸會話結束時,控制終端設備將和登 錄進程相脫離,那麼系統就向全部與這個終端相聯繫的進程發送SIGHUP的信號,通知進程線路已經掛起了,若是程序沒有接管這個信號的處理,那麼缺省的反 應是進程結束。所以普通的程序並不能真正脫離登陸會話而運行進程,爲了使得在系統登陸後還能夠正常執行,只有使用命令nohup來啓動相應程序。

使用命令nohup固然能夠啓動這樣的程序,但nohup啓動的程序在進程執行完畢就退出,而常見的 一些服務進程一般永久的運行在後臺,不向屏幕輸出結果。在Unix中這些永久的後臺進程稱爲守護進程(daemon)。守護進程一般從系統啓動時自動開始 執行,系統關閉時才中止。

在守護進程中,最重要的一個是超級守護進程inetd,這個進程接管了大部分網絡服務,但並非對每 個服務都本身進行處理,而是依據鏈接請求,啓動不一樣的服務程序與客戶機打交道。inetd支持網絡服務種類在它的設置文件/etc/inet.conf中 定義。inet.conf文件中的每一行就對應一個端口地址,當inetd接受到鏈接這個端口的鏈接請求時,就啓動相應的進程進行處理。使用inetd的 好處是系統沒必要啓動不少守護進程,從而節約了系統資源,然而使用inetd啓動守護進程相應反應會遲緩一些,不適合用於被密集訪問的服務進程

引用自:http://hi.baidu.com/flying5/blog/item/70ff8fdd4a3e60d28c10292b.html

26. whereis命令:用來定位命令的二進制文件\資源\或者幫助頁.舉例來講,得到ls和kill命令的二進制文件/資源以及幫助頁:

root@tecmint:~# whereis ls

ls: /bin/ls /usr/share/man/man1/ls.1.gz

root@tecmint:~# whereis kill

kill: /bin/kill /usr/share/man/man2/kill.2.gz /usr/share/man/man1/kill.1.gz

注意:當須要知道二進制文件保存位置時有用.

27. service命令:控制服務的啓動、中止和重啓,它讓你可以不重啓整個系統就可讓配置生效以開啓、中止或者重啓某個服務。

在Ubuntu上啓動apache2 server:

root@tecmint:~# service apache2 start

* Starting web server apache2                                                                                                                                 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

httpd (pid 1285) already running                        [ OK ]

重啓apache2 server:

root@tecmint:~# service apache2 restart

* Restarting web server apache2                                                                                                                               apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

... waiting .apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName  [ OK ]

中止apache2 server:

root@tecmint:~# service apache2 stop

* Stopping web server apache2                                                                                                                                 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

... waiting                                                                [ OK ]

注意:要想使用service命令,進程的腳本必須放在‘/etc/init.d‘,而且路徑必須在指定的位置。

若是要運行「service apache2 start」實際上實在執行「service /etc/init.d/apache2 start」.

28. alias 命令:alias是一個系統自建的shell命令,容許你爲名字比較長的或者常用的命令指定別名。

我常常用‘ls -l‘命令,它有五個字符(包括空格)。因而我爲它建立了一個別名‘l’。

root@tecmint:~# alias l='ls -l'

試試它是否能用:

root@tecmint:~# l

total 36

drwxr-xr-x 3 tecmint tecmint 4096 May 10 11:14 Binary

drwxr-xr-x 3 tecmint tecmint 4096 May 21 11:21 Desktop

drwxr-xr-x 2 tecmint tecmint 4096 May 21 15:23 Documents

drwxr-xr-x 8 tecmint tecmint 4096 May 20 14:56 Downloads

drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Music

drwxr-xr-x 2 tecmint tecmint 4096 May 20 16:17 Pictures

drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Public

drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Templates

drwxr-xr-x 2 tecmint tecmint 4096 May  7 16:58 Videos

去掉’l’別名,要使用unalias命令:

root@tecmint:~# unalias l

再試試:

root@tecmint:~# l

bash: l: command not found

開個玩笑,把一個重要命令的別名指定爲另外一個重要命令:

alias cd='ls -l' (set alias of ls -l to cd)

alias su='pwd' (set alias of pwd to su)

....

(You can create your own)

....

想一想多麼有趣,如今若是你的朋友敲入‘cd’命令,當他看到的是目錄文件列表而不是改變目錄;當他試圖用’su‘命令時,他會進入當前目錄。你能夠隨後去掉別名,向他解釋以上狀況。

29. df 命令: 報告系統的磁盤使用狀況。在跟蹤磁盤使用狀況方面對於普通用戶和系統管理員都頗有用。 ‘df‘ 經過檢查目錄大小工做,但這一數值僅當文件關閉時才獲得更新。

root@tecmint:~# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda1       47929224 7811908  37675948  18% /

none                   4       0         4   0% /sys/fs/cgroup

udev             1005916       4   1005912   1% /dev

tmpfs             202824     816    202008   1% /run

none                5120       0      5120   0% /run/lock

none             1014120     628   1013492   1% /run/shm

none              102400      44    102356   1% /run/user

/dev/sda5         184307   79852     94727  46% /boot

/dev/sda7       95989516   61104  91045676   1% /data

/dev/sda8       91953192   57032  87218528   1% /personal

df -h 以可讀性較好的格式顯示尺寸(例如:1K 234M 2G)
df -H 計算時使用1000 爲基底而非1024,意思就是 -H 表示以1000 換算了,1G = 1000M 1M = 1000K

‘df’命令的更多例子請參閱:http://www.tecmint.com/how-to-check-disk-space-in-linux/

30. du命令:估計文件的空間佔用。 逐層統計文件(例如以遞歸方式)並輸出摘要。

root@tecmint:~# du

8       ./Daily Pics/wp-polls/images/default_gradient

8       ./Daily Pics/wp-polls/images/default

32      ./Daily Pics/wp-polls/images

8       ./Daily Pics/wp-polls/tinymce/plugins/polls/langs

8       ./Daily Pics/wp-polls/tinymce/plugins/polls/img

28      ./Daily Pics/wp-polls/tinymce/plugins/polls

32      ./Daily Pics/wp-polls/tinymce/plugins

36      ./Daily Pics/wp-polls/tinymce

580     ./Daily Pics/wp-polls

1456    ./Daily Pics

36      ./Plugins/wordpress-author-box

16180   ./Plugins

12      ./May Articles 2013/Xtreme Download Manager

4632    ./May Articles 2013/XCache

注意: ‘df‘ 只顯示文件系統的使用統計,但‘du‘統計目錄內容。‘du‘命令的更詳細信息請參閱10 du (Disk Usage) Commands.

df和du的區別:

實例:http://blog.itpub.net/26230597/viewspace-1242675

早晨磁盤報警剛清空完tomcat和nginx日誌,使用的命令是相似echo "" > show_web-error.log或者> show_web-debug.log清空語句,而後rm -rf 掉一些tar.gz包,空出來30G空間。並且也關閉了tomcat的debug信息。剛剛又接到報警,磁盤100%了。 怎麼回事?

進去df -h下,確實100%了,去/根目錄check,du -sh *,看到,佔據的磁盤空間全部的加起來也不到30G,但是df -h下來,確實100%呢?差別在哪裏?

緣由:

我由於磁盤快滿了就刪除了一些過時文件,可能應用程序還在使用這些文件句柄,因此致使了我說的問題。 我把全部應用程序都中止後,du和df的結果就大體相同了。

原理總結:

du -s命令經過將指定文件系統中全部的目錄、符號連接和文件使用的塊數累加獲得該文件系統使用的總塊數;
df命令經過查看文件系統磁盤塊分配圖得出總塊數與剩餘塊數。
du是用戶級程序,不考慮Meta Data(系統爲自身分配的一些磁盤塊)
ps:應用程序打開的文件句柄沒有關閉的話,會形成df命令顯示的剩餘磁盤空間少。而du則不會

31. rm 命令: 標準移除命令。 rm 能夠用來刪除文件和目錄。

刪除目錄

root@tecmint:~# rm PassportApplicationForm_Main_English_V1.0

rm: cannot remove `PassportApplicationForm_Main_English_V1.0': Is a directory

‘rm’不能直接刪除目錄,須要加上相應的’-rf’參數才能夠。

root@tecmint:~# rm -rf PassportApplicationForm_Main_English_V1.0

警告: 」rm -rf」 命令是一個破壞性的命令,假如你不當心刪除一個錯誤的目錄。一旦你使用’rm -rf’ 刪除一個目錄,在目錄中全部的文件包括目錄自己會被永久的刪除,因此使用這個命令要很是當心。

32.  echo 命令:功能正如其名,就是基於標準輸出打印一段文本。它和shell無關,shell也不讀取經過echo命令打印出的內容。然而在一種交互式腳本中,echo經過終端將信息傳遞給用戶。它是在腳本語言,交互式腳本語言中常常用到的命令。

root@tecmint:~# echo "Tecmint.com is a very good website"

Tecmint.com is a very good website

建立一小段交互式腳本

1. 在桌面上新建一個文件,命名爲 ‘interactive_shell.sh‘  (記住必須帶 ‘.sh‘擴展名)。

2. 複製粘貼以下腳本代碼,確保和下面的一致。

#!/bin/bash

echo "Please enter your name:"

read name

echo "Welcome to Linux $name"

接下來,設置執行權限並運行腳本。

root@tecmint:~# chmod 777 interactive_shell.sh

root@tecmint:~# ./interactive_shell.sh

Please enter your name:

Ravi Saive

Welcome to Linux Ravi Saive

注意: ‘#!/bin/bash‘ 告訴shell這是一個腳本,而且在腳本首行寫上這句話是個好習慣。. ‘read‘ 讀取給定的輸出.

33. passwd命令: 這是一個很重要的命令,在終端中用來改變本身密碼頗有用。顯然的,由於安全的緣由,你須要知道當前的密碼。

root@tecmint:~# passwd

Changing password for tecmint.

(current) UNIX password: ********

Enter new UNIX password: ********

Retype new UNIX password: ********

Password unchanged   [這裏表示密碼未改變,例如:新密碼=舊密碼]

Enter new UNIX password: #####

Retype new UNIX password:#####

34. lpr 命令:用來在命令行上將指定的文件在指定的打印機上打印。

root@tecmint:~# lpr -P deskjet-4620-series 1-final.pdf

注意: 」lpq」命令讓你查看打印機的狀態(是開啓狀態仍是關閉狀態)和等待打印中的工做(文件)的狀態。

35. cmp 命令:比較兩個任意類型的文件並將結果輸出至標準輸出。若是兩個文件相同, ‘cmp‘默認返回0;若是不一樣,將顯示不一樣的字節數和第一處不一樣的位置。

如下面兩個文件爲例:

file1.txt

root@tecmint:~# cat file1.txt

Hi My name is Tecmint

file2.txt

root@tecmint:~# cat file2.txt

Hi My name is tecmint [dot] com

比較一下這兩個文件,看看命令的輸出。

root@tecmint:~# cmp file1.txt file2.txt

file1.txt file2.txt differ: byte 15, line 1

36. wget 命令: Wget是用於非交互式(例如後臺)下載文件的免費工具.支持HTTP, HTTPS, FTP協議和 HTTP 代理。

使用wget下載ffmpeg

root@tecmint:~# wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

--2013-05-22 18:54:52--  http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59

Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2 [following]

--2013-05-22 18:54:54--  http://kaz.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

Resolving kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)... 92.46.53.163

Connecting to kaz.dl.sourceforge.net (kaz.dl.sourceforge.net)|92.46.53.163|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 275557 (269K) [application/octet-stream]

Saving to: ‘ffmpeg-php-0.6.0.tbz2’

100%[===========================================================================>] 2,75,557    67.8KB/s   in 4.0s 

2013-05-22 18:55:00 (67.8 KB/s) - ‘ffmpeg-php-0.6.0.tbz2’ saved [275557/275557]

37. mount 命令:mount 是一個很重要的命令,用來掛載不能自動掛載的文件系統。你須要root權限掛載設備。在插入你的文件系統後,首先運行」lsblk」命令,識別出你的設備,而後把分配的設備名記下來。

root@tecmint:~# lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda      8:0    0 931.5G  0 disk

├─sda1   8:1    0 923.6G  0 part /

├─sda2   8:2    0     1K  0 part

└─sda5   8:5    0   7.9G  0 part [SWAP]

sr0     11:0    1  1024M  0 rom

sdb      8:16   1   3.7G  0 disk

└─sdb1   8:17   1   3.7G  0 part

從這個輸出上來看,很明顯我插入的是4GB的U盤,於是「sdb1」就是要掛載上來的文件系統。以root用戶操做,而後切換到/dev目錄,它是全部文件系統掛載的地方。

root@tecmint:~# su

Password:

root@tecmint:~# cd /dev

建立一個任何名字的目錄,可是最好和引用相關。

root@tecmint:~# mkdir usb

如今將「sdb1」文件系統掛載到「usb」目錄.

root@tecmint:~# mount /dev/sdb1 /dev/usb

如今你就能夠從終端進入到/dev/usb或者經過X窗口系統從掛載目錄訪問文件。

是時候讓程序猿見識見識Linux環境是多麼豐富了!

38. gcc 命令: gcc 是Linux環境下C語言的內建編譯器。下面是一個簡單的C程序,在桌面上保存爲Hello.c (記住必需要有‘.c‘擴展名)。

#include <stdio.h>

int main()

{

  printf("Hello world\n");

  return 0;

}

編譯

root@tecmint:~# gcc Hello.c

運行

root@tecmint:~# ./a.out

Hello world

注意: 編譯C程序時,輸出會自動保存到一個名爲「a.out」的新文件,所以每次編譯C程序 「a.out」都會被修改。 所以編譯期間最好定義輸出文件名.,這樣就不會有覆蓋輸出文件的風險了。

用這種方法編譯

root@tecmint:~# gcc -o Hello Hello.c

這裏‘-o‘將輸出寫到‘Hello‘文件而不是 ‘a.out‘。再運行一次。

root@tecmint:~# ./Hello

Hello world

39. g++ 命令: g++是C++的內建編譯器。下面是一個簡單的C++程序,在桌面上保存爲Add.cpp (記住必需要有‘.cpp‘擴展名)。

#include <iostream>

using namespace std;

int main()

{

  int a;

  int b;

  cout<<"Enter first number:\n";

  cin >> a;

  cout <<"Enter the second number:\n";

  cin>> b;

  cin.ignore();

  int result = a + b;

  cout<<"Result is"<<"  "<<result<<endl;

  cin.get();

  return 0;

}

編譯

root@tecmint:~# g++ Add.cpp

運行

root@tecmint:~# ./a.out

Enter first number:

...

...

注意:編譯C++程序時,輸出會自動保存到一個名爲「a.out」的新文件,所以每次編譯C++程序 「a.out」都會被修改。 所以編譯期間最好定義輸出文件名.,這樣就不會有覆蓋輸出文件的風險了。

用這種方法編譯

root@tecmint:~# g++ -o Add Add.cpp

運行

root@tecmint:~# ./Add

Enter first number:

...

...

40. java 命令: Java 是世界上使用最普遍的編程語言之一. 它也被認爲是高效, 安全和可靠的編程語言. 如今大多數基於網絡的服務都使用Java實現.

拷貝如下代碼到一個文件就能夠建立一個簡單的Java程序. 不妨把文件命名爲tecmint.java (記住: ’.java’擴展名是必需的).

class tecmint {

public static void main(String[] arguments) {

System.out.println("Tecmint ");

}

}

用javac編譯tecmint.java

root@tecmint:~# javac tecmint.java

運行

root@tecmint:~# java tecmint

注意: 幾乎全部的Linux發行版都帶有gcc編譯器, 大多數發行版都內建了g++ 和 java 編譯器, 有些也可能沒有. 你能夠用apt 或 yum 安裝須要的包.

20-39參考文章:http://blog.jobbole.com/45377/

3、技巧

(待續)

相關文章
相關標籤/搜索