Linux-Unix系統操作與維護常用命令

咖-啡-香發表於2014-10-03

Linux-Unix系統操作與維護常用命令

(關注常用、實用目錄)

                       

 

1 Linux下掛載新建硬碟的方法

1.1新硬碟分割槽及掛載

進入系統後,用root使用者操作: fdisk -l 會看到有一塊新的設定,如果你先前有一塊硬碟(sda, sda1...),新加的這塊應該是(/dev/sdb)如果還有其它硬碟就會依次遞增(/dev/sdc, /dev/sdd....)。

1.2 分割槽

# fdisk /dev/sdb
進入fdisk模式:
Command (m for help):m //檢視fdisk命令幫助
Command (m for help):n //建立新分割槽
Command action:
e extended //輸入e為建立擴充套件分割槽
p primary partition (1-4)     //輸入p為建立主分割槽,這裡我們選擇p
Partion number(1-4):1     //第一個擴充套件分割槽,按需求可以最多分4個主分割槽
First Cylinder(1-1014,default 1): 1 //第一個主分割槽起始的磁碟塊數,可以選擇預設值
Last cylindet or +siza or +sizeM or +sizeK: +1024MB //定義該分割槽的大小,如果按預設(按回車)即是使用全部可用儲存額,也可以是用M或m單位結尾的數字(大寫M是大B的意思,如果輸入1M實際上是X8也就是8m的空間),這樣我們就建立完一個分割槽,如果要建立更多分割槽可以照上面的步驟繼續建立。所有分割槽建立完後用w儲存分割槽。
Command (m for help): w
The partition table has been altered!
儲存完成後重啟伺服器,可以用#fdisk -l 命令檢查剛剛所建分割槽,可以在返回結果中確認/dev/sdb1的資訊。

1.3格式化該新新增的分割槽

鍵入:mkfs -t ext3  /dev/sda3

格式化指定的分割槽,依次類推,現在的系統大部分都是 ext3 格式

1.4掛載該分割槽

手動掛載,則鍵入:mount /dev/sda3 /home/work/       

 "表示將該新分割槽掛載到/home/work/這個目錄下面"

開機自動掛載,則修改/etc/fstab檔案,在這個檔案裡面新增一行:

/dev/sda3      /home/work      ext3   defaults,       1       2    如:

vi /etc/fstab

LABEL=/                /                      ext3     defaults        1 1
tmpfs                  /dev/shm             tmpfs   defaults        0 0
devpts                 /dev/pts              devpts gid=5,mode=620 0 0
sysfs                  /sys                   sysfs    defaults        0 0
proc                   /proc                  proc     defaults       0 0
LABEL=SWAP-sda2  /swap           swap    defaults        0 0
/dev/sda3           /home/work            ext3   defaults        1 2

fstab中存放了與分割槽有關的重要資訊,其中每一行為一個分割槽記錄,每一行又可分為六個部份,下面以/dev/hda7 / ext2 defaults 11為例逐個說明:

  1. 第一項是您想要mount的儲存裝置的實體位置,如hdb或如上例的/dev/hda7。

  2. 第二項就是您想要將其加入至哪個目錄位置,如/home或如上例的/,這其實就是在安裝時提示的掛入點。

  3. 第三項就是所謂的local filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等,或如上例的ext2,可以參見/prco/filesystems說明。

  4. 第四項就是您mount時,所要設定的狀態,如ro(只讀)或如上例的defaults(包括了其它引數如rw、suid、exec、auto、nouser、async),可以參見「mount nfs」。

  5. 第五項是提供DUMP功能,在系統DUMP時是否需要BACKUP的標誌位,其內定值是0。

6. 第六項是設定此filesystem是否要在開機時做check的動作,除了root的filesystem其必要的check為1之外,其它皆可視需要設定,內定值是0。

 

2 Linux環境變數配置檔案(常用)

檢視系統當前的環境變數:env

檢視變數的值:echo $變數名

設定環境變數: export 變數名=Hello!

清除環境變數:unset $變數名

常用預定義環境變數:

PATH 當前使用者的主目錄

HOME 當前使用者的可執行檔案搜尋路徑

LANG 系統使用的預設語言

SHELL 系統預設的shell。

 

環境變數設定檔案


   全域性環境變數,對所有Linux使用者有效,設定檔案:/etc/profile、/etc/bashrc(bashksh對應的檔案為/etc/kshrc
   使用者環境變數,只對當前使用者有效,設定檔案為當前使用者主目錄(~)下的:.profile、.bash_profile、.bashrc(bashksh對應的檔案為.ksh_profile.kshrc

登入shell:作為Linux使用者登入到Linux作業系統,或者用su - username切換到其他使用者,都為登入shell,環境變數也同時切換。

非登入shell,用su  username,即為非登入shell,環境變數仍為當前使用者的環境變數。
    根據是否為登入shell,讀取環境變數配置檔案是不同的。

登入shell讀取環境變數順序:

/etc/profile > /etc/profile.d/*.sh> ~/.bash_profile> ~/.bashrc> /etc/bashrc
   非登入shell讀取環境變數順序:

~/.bashrc > /etc/bashrc> /etc/profile.d/*.sh 

環境變數更改後,在使用者下次登陸時生效,如果想立刻生效,則可執行下面的語句:source .bash_profile或者 . .bash_profile

 

3 ls du df的用法(常用實用)

3.1 顯示檔案大小

ls -lrt--block-size=MB

ls 命令顯示檔案大小:

可以通過 block-size 引數,來顯示檔案的KB/MB/GB大小值

因為它們都是取近似值,所以最好是三者都用,這樣獲得的資訊更準確。

 

[root@fullcent datastore]#ls -l--block-size=KB

total 3148813kB

[root@fullcent datastore]#ls -l--block-size=MB

total 3149MB

[root@fullcent datastore]#ls -l--block-size=GB

total 4GB

也可以加入h 引數,來顯示大小:

[root@fullcent datastore]#ls -l

total 3075012

[root@fullcent datastore]# ls -lh

total 3.0G

 

3.2 檢視檔案數

檢視當前目錄下檔案的個數

ls -l | grep"^-" | wc -l

檢視當前目錄下檔案的個數,包括子目錄裡的。

ls -lR| grep"^-" | wc -l

檢視某目錄下資料夾(目錄)的個數,包括子目錄裡的。

ls -lR| grep"^d" | wc –l

 

3.4 linux檢視資料夾下檔案的大小

du -sk/-sm 檔案詳細路徑    例如:du -sm ./

3.5 檢視檔案系統空間

df -h

df -k

df -m

du -sk ./* | sort-n

找出目錄的空間大小,按大小排序

一般在管理多檔案是需要使用一些特殊排序方式

預設排序:du-sm|sort -n

按照列排序:du-sm|sort +n(列數) -n(倒序用-r)

 

4 Linux下grep命令(常用)

grep(General Regular Expression Parser,通用規則表示式分析程式)是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來。

它的使用語法為:

grep [選項] pattern [檔名]

. 匹配任意一個字元
* 匹配0 個或多個*前的字元
^ 匹配行開頭
$ 匹配行結尾
[] 匹配[ ]中的任意一個字元,[]中可用 - 表示範圍,
例如[a-z]表示字母a 至z 中的任意一個
\ 轉意字元
命令中的選項為:
-b 顯示塊號
-c 僅顯示各指定檔案中包含模式的總行數
-i 模式中字母不區分大小寫
-h 不將包含模式的檔名顯示在該行上
-l 僅顯示包含模式的檔名
-n 顯示模式所在行的行號
-s 指定檔案若不存在或不可讀,不提示錯誤資訊
-v 顯示所有不包含模式的行

其中,pattern為所要匹配的字串。如在/etc/passwd檔案下查詢包含“carey”字元的行:

grep carey/etc/passwd

要用好grep這個工具,其實就是要寫好正規表示式,所以這裡不對grep的所有功能進行例項講解,只列幾個例子,講解一個正規表示式的寫法。

grep 'test' d*

顯示所有以d開頭的檔案中包含test的行。

ls -l | grep'^public'

通過管道過濾ls -l輸出的內容,只顯示以public開頭的行。

後面的^字元強制grep命令只在每行的開頭找public。整個搜尋模式(pattern)用單引號括起來,使shell不理會它們。shell只將單引號去掉,將搜尋模式送給grep命令。

grep -i 'helloworld' menu.h main.c

顯示在menu.h和main.c檔案中匹配“hello world”的行,忽略大小寫。

例如:

grep'sample' -R * 

 

grep -v "^#" ./redis.conf

grep -v "^#" ./redis.conf | grep-v "^$" 

grep是文字過濾,-v選項是顯示不包含匹配文字的行,^#表示以#開頭的行.
grep -v ^#
表示不顯示以#開頭的行.
grep -v ^$
表示不顯示空行.

5 Netstat 命令

Netstat 命令用於顯示各種網路相關資訊,如網路連線,路由表,介面狀態 (Interface Statistics),masquerade 連線,多播成員(Multicast Memberships) 等等從整體上看,netstat的輸出結果可以分為兩個部分:

一個是Active Internet connections,稱為有源TCP連線,其中"Recv-Q"和"Send-Q"指%0A的是接收佇列和傳送佇列。這些數字一般都應該是0。如果不是則表示軟體包正在佇列中堆積。這種情況只能在非常少的情況見到。

另一個是Active UNIX domain sockets,稱為有源Unix域套介面(和網路套接字一樣,但是隻能用於本機通訊,效能可以提高一倍)。

Proto顯示連線使用的協議,RefCnt表示連線到本套介面上的程式號,Types顯示套介面的型別,State顯示套介面當前的狀態,Path表示連線到套介面的其它程式使用的路徑名。

常見引數

lsof -i :port 檢視指定埠執行的程式,同時還有當前連線

LISTENING:正在監聽,只有tcp埠才可以這樣(如果是udp的話,那麼肯定是木馬)

ESTABLISHED:正在共享,表示兩者連線著(如果135埠這樣的話,注意防毒)

CLOSE_WAIT:有過連線,現在已經結束了

netstat -ntl

lsof -i :port 檢視指定埠執行的程式,同時還有當前連線

LISTENING:正在監聽,只有tcp埠才可以這樣(如果是udp的話,那麼肯定是木馬)

ESTABLISHED:正在共享,表示兩者連線著(如果135埠這樣的話,注意防毒)

CLOSE_WAIT:有過連線,現在已經結束了

netstat -ntl

 

netstat -nul  

-a (all)顯示所有選項,預設不顯示LISTEN相關

-t (tcp)僅顯示tcp相關選項

-u (udp)僅顯示udp相關選項

-n 拒絕顯示別名,能顯示數字的全部轉化成數字。

-l 僅列出有在 Listen (監聽) 的服務狀態

-p 顯示建立相關連結的程式名

-r 顯示路由資訊,路由表

-e 顯示擴充套件資訊,例如uid等

-s 按各個協議進行統計

-c 每隔一個固定時間,執行該netstat命令。

提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

實用命令例項

 

1. 列出所有埠 (包括監聽和未監聽的)

  列出所有埠 netstat -a

  列出所有 tcp 埠 netstat-at

  列出所有 udp 埠 netstat-au

2. 列出所有處於監聽狀態的 Sockets

只顯示監聽埠 netstat -l

只列出所有監聽 tcp 埠 netstat -lt

只列出所有監聽 udp 埠 netstat -lu

只列出所有監聽 UNIX 埠 netstat -lx

3. 顯示每個協議的統計資訊

顯示所有埠的統計資訊 netstat -s

顯示 TCP 或 UDP 埠的統計資訊 netstat -st 或 -su

4. 在 netstat 輸出中顯示 PID 和程式名稱 netstat-p

 netstat -pt

5. 在 netstat 輸出中不顯示主機,埠和使用者名稱 (host, port or user)

netstat -an

6. 持續輸出 netstat 資訊

netstat -c

網路地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html

 

6 linux 檢視系統資訊命令(常用)

# cat /proc/meminfo

# uname -a # 檢視核心/作業系統/CPU資訊 

# head -n 1 /etc/issue# 檢視作業系統版本 
# cat /proc/cpuinfo #
檢視CPU資訊 
# hostname #
檢視計算機名 
# lspci -tv #
列出所有PCI裝置 
# lsusb -tv #
列出所有USB裝置 
# lsmod #
列出載入的核心模組 
# env #
檢視環境變數資源 
# free -m #
檢視記憶體使用量和交換區使用量 
# df -h #
檢視各分割槽使用情況 
# du -sh <
目錄名> #檢視指定目錄的大小 
# grep MemTotal /proc/meminfo # 檢視記憶體總量 
# grep MemFree /proc/meminfo # 檢視空閒記憶體量 
# uptime #
檢視系統執行時間、使用者數、負載 
# cat /proc/loadavg #
檢視系統負載磁碟和分割槽 
# mount | column -t #
檢視掛接的分割槽狀態 
# fdisk -l #
檢視所有分割槽 
# swapon -s #
檢視所有交換分割槽 
# hdparm -i /dev/hda #
檢視磁碟引數(僅適用於IDE裝置
# dmesg | grep IDE #
檢視啟動時IDE裝置檢測狀況網路 
# ifconfig #
檢視所有網路介面的屬性 
# iptables -L #
檢視防火牆設定 
# route -n #
檢視路由表 
# netstat -lntp #
檢視所有監聽埠 
# netstat -antp #
檢視所有已經建立的連線 
# netstat -s #
檢視網路統計資訊程式 
# ps -ef #
檢視所有程式 
# top #
實時顯示程式狀態使用者 
# w #
檢視活動使用者 
# id <
使用者名稱> # 檢視指定使用者資訊 
# last #
檢視使用者登入日誌 
# cut -d: -f1 /etc/passwd #
檢視系統所有使用者 
# cut -d: -f1 /etc/group #
檢視系統所有組 
# crontab -l #
檢視當前使用者的計劃任務服務 
# chkconfig
list #列出所有系統服務 
# chkconfig
list | grep on #列出所有啟動的系統服務程式 
# rpm -qa #
檢視所有安裝的軟體包 

 

7 Linux-Crontab計劃任務入門詳解

Cron簡介
     cron是一個linux下的定時執行工具,可以在無需人工干預的情況下執行作業。

由於Cron 是Linux的內建服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:
    /sbin/service crond start //啟動服務
    /sbin/service crond stop //關閉服務
    /sbin/service crond restart //重啟服務
    /sbin/service crond reload //重新載入配置


你也可以將這個服務在系統啟動的時候自動啟動,在/etc/rc.d/rc.local這個指令碼的末尾加上:
    /sbin/service crond start
現在Cron這個服務已經在程式裡面了,我們就可以用這個服務了。

 

任務排程的crond常駐命令
     crond 是linux用來定期執行程式的命令。當安裝完成作業系統之後,預設便會啟動此任務排程命令。

crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。

1.linux任務排程的工作主要分為以下兩類:
     *系統執行的工作:系統週期性所要執行的工作,如備份系統資料、清理快取
     *個人執行的工作:某個使用者定期要做的工作,例如每隔10分鐘檢查郵件伺服器是否有新信,這些工作可由每個使用者自行設定。

2.直接用crontab命令編輯
  cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些引數與說明:
  crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此引數
  crontab -l //列出某個使用者cron服務的詳細內容
crontab -r //刪除 個使用者的cron服務
  crontab -e //編輯某個使用者的cron服務
  比如說root檢視自己的cron設定:crontab -u root -l
  再例如,root想刪除fred的cron設定:crontab -u fred -r
  在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e
  進入vi編輯模式,編輯的內容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

3.cron檔案語法:
         分    小時     日      月      星期        命令
       0-59   0-23  1-31   1-12     0-6    command     (取值範圍,0表示週日一般一行對應一個任務)
4.記住幾個特殊符號的含義:
       "*"代表取值範圍內的數字,
       "/"代表"每",
       "-"代表從某個數字到某個數字,
       ","分開幾個離散的數字

 

任務排程設定檔案的寫法
     可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應使用者的cron檔案,

也可以直接修改/etc/crontab檔案
具體格式如下:
      Minute  Hour  Day Month  Dayofweek   command
       分鐘     小時   天    月       天每星期      命令
每個欄位代表的含義如下:
     Minute           每個小時的第幾分鐘執行該任務
     Hour              每天的第幾個小時執行該任務
     Day                每月的第幾天執行該任務
     Month            每年的第幾個月執行該任務
     DayOfWeek       每週的第幾天執行該任務
     Command        指定要執行的程式
在這些欄位裡,除了“Command”是每次都必須指定的欄位以外,其它欄位皆為可選欄位,可視需要決定。

對於不指定的欄位,要用“*”來填補其位置。

舉例如下:

5        *      *       *    *    ls    指定每小時的第5分鐘執行一次ls命令
30      5       *       *    *    ls    指定每天的 5:30 執行ls命令
30      7       8       *    *    ls    指定每月8號的7:30分執行ls命令
30      5       8       6    *    ls    指定每年的6月8日5:30執行ls命令
30      6       *       *    0    ls    指定每星期日的6:30執行ls命令[注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]
30      3       10,20  *    *    ls    每月10號及20號的3:30執行ls命令[注:“,”用來連線多個不連續的時段]
25      8-11  *      *    *     ls    每天8-11點的第25分鐘執行ls命令[注:“-”用來連線連續的時段]
*/15   *       *      *    *     ls    每15分鐘執行一次ls命令 [即每個小時的第0 1530 45 60分鐘執行ls命令 ]
30      6       */10   *    *    ls    每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日是的6:30執行一次ls命令。 ]
50      7       *       *    *     root    run-parts     /etc/cron.daily  每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行檔案
 [ 注:run-parts參數列示,執行後面目錄中的所有可執行檔案。 ]


1.新增排程任務
   
新增排程任務可用兩種方法:
     1
、在命令列輸入: crontab-e然後新增相應的任務,wq存檔退出。
     2
、直接編輯/etc/crontab檔案,即vi /etc/crontab,新增相應的任務。
2.檢視排程任務
     crontab -l //列出當前的所有排程任務
     crontab -l -u jp  //列出使用者jp的所有排程任務
3.刪除任務排程工作
     crontab -r   //刪除所有任務排程工作
4.任務排程執行結果的轉向
     1:每天530執行ls命令,並把結果輸出到/jp/test檔案中
         30 5 * * * ls>/jp/test 2>&1
     注:2>&1表示執行結果及錯誤資訊。


編輯/etc/crontab 檔案配置cron  
  cron服務每分鐘不僅要讀一次/var/spool/cron內的所有檔案,還需要讀一次/etc/crontab,因此我們配置這個檔案也能運用cron服務做一些事情。

     用crontab配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務。此檔案的檔案格式是:  
  SHELL=/bin/bash  
  PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳號  
  HOME=/ //使用者執行的路徑,這裡是根目錄  
  # run-parts  
  01   *   *   *   *     rootrun-parts /etc/cron.hourly         //每小時執行/etc/cron.hourly內的指令碼  
  02   4   *   *   *    root run-parts /etc/cron.daily          //每天執行/etc/cron.daily內的指令碼  
  22   4   *   *   0    root run-parts /etc/cron.weekly       //每星期執行/etc/cron.weekly內的指令碼  
  42   4   1   *   *    root run-parts /etc/cron.monthly     //每月去執行/etc/cron.monthly內的指令碼  
  大家注意"run-parts"這個引數了,如果去掉這個引數的話,後面就可以寫要執行的某個指令碼名,而不是資料夾名了

 

**************注意*********************

指令碼在手動執行的情況下,沒有問題,但是使用crontab呼叫的時候,會報環境變數為空,找不到的問題。

原因:這其實是crontab的bug,不會預設從profile檔案中讀取環境變數的原因導致的。

解決辦法:

 

方法1:手動export

export HADOOP_HOME=/data/application/hadoop

export SQOOP_HOME=/data/application/sqoop

 

方法2:執行一些profile

. /etc/profile(注意點後有個空格)

 

8 Linuxfind命令(常用實用)

8.1 find命令用法

find / -name access_log 2>/dev/null
find /etc -name ‘*srm*’
find / -amin -10 # 查詢在系統中最後10分鐘訪問的檔案
find / -atime -2 # 查詢在系統中最後48小時訪問的檔案
find / -mmin -5 # 查詢在系統中最後5分鐘裡修改過的檔案
find / -mtime -1 #查詢在系統中最後24小時裡修改過的檔案
find / -cmin -5 # 查詢在系統中最後5分鐘裡被改變狀態的檔案
find / -ctime -1 #查詢在系統中最後24小時裡被改變狀態的檔案
find / -user reda #查詢在系統中屬於fred這個使用者的檔案
find / -not -user reda #查詢在系統中不屬於FRED這個使用者的檔案
find / -group redagrp # 查詢在系統中屬於redagrp組的檔案
find / -gid 501 #查詢系統中屬於組id為501的檔案
find / -user fred -a -group redagrp
find / -user reda -o -user tracy
find / -nouser #查詢在系統中屬於作廢使用者的檔案
find / -empty # 查詢在系統中為空的檔案或者為空的資料夾
find / -false #查詢系統中總是錯誤的檔案
find / -size +5k #查詢系統中大於5k位元組的檔案
find / -size +5c #查詢系統中大於5位元組的檔案
find / -perm +6000
find / -type b

檔案型別:
b   塊(緩衝)裝置.
c   字元裝置.
d   目錄.
p   有名管道(FIFO).
f    規則檔案.
l    符號鏈結.
s    SOCKET.
find / -maxdepth 2 -name fred
find /tmp -size +10000000c -and -mtime +2
find / -user reda -or -user tracy
find /tmp ! -user reda
find / -name "httpd.conf" -ls
find / -user reda -exec ls -l {} \;
find / -user reda -ok #確認後執行
find / -user reda | xargs ls -l 

8.2 find命令使用經驗

find pathname  -options [-print-exec -ok]
pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
  -print find命令將匹配的檔案輸出到標準輸出。
  -exec find命令對匹配的檔案執行該引數所給出的shell命令。
  相應命令的形式為'command'{} \;,注意{}和\;之間的空格。
  -ok和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行


檔案狀態判斷:
-mtime: 指定時間檔案內容被修改過
-ctime: 指定時間檔案許可權被修改過
-atime: 指定時間檔案被讀取過

找出3天“以前”被修改過的文件
# find /var/log/ -mtime +3 -type f -print

找出3天“”被修改過的文件
# find /var/log/ -mtime -3 -type f -print

找出3被修改過的文件.
# find /var/log/ -mtime 3 -type f -print
或這樣寫:
#find /var/log/ -mtime +2 -mtime -4 -type f -print

注:訪問過用amin,修改過用mmin,檔案狀態改變過用cmin
精確到分鐘的用amin,mmin,cmin,精確到天的用atime,mtime,ctime

 

8.3 find用法小結

1. 通過檔案的特徵查詢:
===============================
1)
按檔名
   find /    -name httpd.conf
   find /usr -name httpd.conf
   find /etc -name '*srm*'

2) 按大小
   find / -size 1500c      # 查詢檔案大小為1,500 bytes的檔案,字元 c 表明這個要查詢的檔案的大小是以bytes為單位。
   find/ -size +10000000c  # "+”是表示要求系統只列出大於指定大小的檔案,  "-”表示小於
   find / -empty           # 查詢在系統中為空的檔案或者資料夾

   -size:表示檔案大小,+表示大於某個數,-表示小於某個數。c表示單位是位元組,你可以將c換成k,M,G。

3)
按時間
   find / -amin -10        #
查詢在系統中最後10分鐘訪問的檔案
   find / -atime -2        # 查詢在系統中最後48小時訪問的檔案
   find / -mmin -5         # 查詢在系統中最後5分鐘裡修改過的檔案
   find / -mtime -1        # 查詢在系統中最後24小時裡修改過的檔案
   find / -cmin -5         # 查詢在系統中最後5分鐘裡被改變狀態的檔案
   find / -ctime -1        # 查詢在系統中最後24小時裡被改變狀態的檔案
     訪問過用amin,修改過用mmin,檔案狀態改變過用cmin
  精確到分鐘的用amin,mmin,cmin,精確到天的用atime,mtime,ctime
  在5分鐘之內的用-5,在5分鐘以上的用+5
4)
按使用者
   find / -user fred       #
查詢在系統中屬於FRED這個使用者的檔案
   find / -group cat       # 查詢在系統中屬於 groupcat的檔案
   find / -nouser          # 查詢在系統中屬於作廢使用者的檔案
  5) 其他
   -false 查詢系統中總是錯誤的檔案
   -fstype type 查詢系統中存在於指定檔案系統的檔案,例如:ext2 .
   -gid n 查詢系統中檔案數字組 ID 為 n的檔案
   -group gname 查詢系統中檔案屬於gnam檔案組,並且指定組和ID的檔案

8.4 findxargs的用法

(1) find . -type f -exec ls -l {} \;
解釋:查詢當前路徑下的所有普通檔案,並把它們列出來。
(2)find logs -type f -mtime +5 -exec rm {} \;
解釋:刪除logs目錄下更新時間為5日以上的檔案。
(3)find . -name "*.log" -mtime +5 -ok rm {} \;
解釋:刪除當前路徑下以。log結尾的五日以上的檔案,刪除之前要確認。
(4) find ~ -type f -perm 4755 -print
解釋:查詢$HOME目錄下suid位被設定,檔案屬性為755的檔案列印出來。

說明: find在有點系統中會一次性得到將匹配到的檔案都傳給exec,但是有的系統對exec的命令長度做限制,就會報:”引數列太長“,這就需要使用xargsxargs是部分取傳來的檔案。

(5)find / -type f -print |xargs file
解釋:xargs測試檔案分類
(6)find . -name "core*" -print|xargs echo "">/tmp/core.log
解釋:將core檔案資訊查詢結果報存到core。log日誌。
(7)find / -type f -print | xargs chmod o -w
(8)find . -name * -print |xargs grep "DBO" 

 

9 Ftp應用命令

下載檔案

  下載檔案通常用get和mget這兩條命令。

a) get 

  格式:get [remote-file] [local-file]

  將檔案從遠端主機中傳送至本地主機中.

  如要獲取伺服器上E:/rose/1.bmp,則

  ftp> get /rose/1.bmp 1.bmp (回車)

b) mget

  格式:mget [remote-files]

  從遠端主機接收一批檔案至本地主機.

  如要獲取伺服器上E:/rose/下的所有檔案,則

  ftp> cd /rose

  ftp> mget *.* (回車)

  注意:檔案都下載到了linux主機的當前目錄下。比如,在 /root/yint下執行的ftp命令,則檔案都下載到了/root/yint下。

上傳檔案

  a) put

  格式:put local-file [remote-file]

  將本地一個檔案傳送至遠端主機中.

  如要把本地的1.bmp傳送到遠端主機E:/rose,並改名為333.bmp

  ftp> put 1.bmp /rose/333.bmp (回車)

  b) mput

  格式:mput local-files

  將本地主機中一批檔案傳送至遠端主機.

  如要把本地當前目錄下所有bmp檔案上傳到伺服器E:/rose 下

  ftp> cd /rose (回車)

  ftp> mput *.bmp (回車)

  注意:上傳檔案都來自於主機的當前目錄下。比如,在 /root/yint下執行的ftp命令,則只有在/root/yint下的檔案linux才會上傳到伺服器E:/rose 下。


斷開連線

bye:中斷與伺服器的連線。

  ftp> bye (回車)

 

ls 列出遠端機的當前目錄 
cd 在遠端機上改變工作目錄 
lcd 在本地機上改變工作目錄 
ascii 設定檔案傳輸方式為ASCII模式 
binary 設定檔案傳輸方式為二進位制模式 
close 終止當前的ftp會話 
hash 每次傳輸完資料緩衝區中的資料後就顯示一個#號 
get(mget)從遠端機傳送指定檔案到本地機 
put(mput)從本地機傳送指定檔案到遠端機 
open 連線遠端ftp站點 
斷開與遠端機的連線並退出ftp 
? 顯示本地幫助資訊 
! 轉到Shell中  

10 Linuxvi進行字元替換(常用實用)

Linux環境下vi/vim 可以使用 :s 命令來替換字串。以前只會使用編輯軟體進行替換,今天發現該命令有很多種寫法(vi 真是強大啊,還有很多需要學習),記錄幾種在此,方便以後查詢。

:s/well/good/ 替換當前行第一個 well為 good

:s/well/good/g 替換當前行所有 well 為 good

:n,$s/well/good/ 替換第 n 行開始到最後一行中每一行的第一個 well 為 good

:n,$s/well/good/g 替換第 n 行開始到最後一行中每一行所有 well 為 good

n 為數字,若 n 為 .,表示從當前行開始到最後一行

:%s/well/good/(等同於:g/well/s//good/)替換每一行的第一個 well 為 good

:%s/well/good/g(等同於:g/well/s//good/g)替換每一行中所有 well 為 good

可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符

:s#well/#good/# 替換當前行第一個well/ 為 good/

:%s#/usr/bin#/bin#g

可以把檔案中所有路徑/usr/bin換成/bin

1. 基本的替換 

:s/vivian/sky/ 替換當前行第一個vivian 為 sky 

:s/vivian/sky/g 替換當前行所有vivian 為 sky 

:n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第一個 vivian 為 sky 

:n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 sky 

(n 為數字,若 n 為 .,表示從當前行開始到最後一行) 

:%s/vivian/sky/(等同於:g/vivian/s//sky/)替換每一行的第一個 vivian 為 sky 

:%s/vivian/sky/g(等同於:g/vivian/s//sky/g)替換每一行中所有 vivian 為 sky 

2. 可以使用 #作為分隔符,此時中間出現的 /不會作為分隔符 

:s#vivian/#sky/# 替換當前行第一個vivian/ 為 sky/ 

:%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ):/oradata/apras/替換成/user01/apras1/ 

3. 刪除文字中的^M 

問題描述:對於換行,window下用回車換行(0A0D)來表示,linux下是回車(0A)來表示。這樣,將window上的檔案拷到unix上用時,總會有個^M,請寫個用在unix下的過濾windows檔案的換行符(0D)的shell或c程式。 

使用命令:cat filename1 | tr -d “^V^M” > newfile; 

使用命令:sed -e “s/^V^M//” filename > outputfilename 

需要注意的是在1、2兩種方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必須要手工進行輸入,而不是貼上。 

在vi中處理:首先使用vi開啟檔案,然後按ESC鍵,接著輸入命令: 

:%s/^V^M// 

:%s/^M$//g 

如果上述方法無用,則正確的解決辦法是: 

tr -d “\r” < src>dest 

tr -d “\015″ dest 

strings A>B 

4. 其它用法 

利用 :s 命令可以實現字串的替換。具體的用法包括: 

:s/str1/str2/ 用字串 str2 替換行中首次出現的字串str1 

:s/str1/str2/g 用字串 str2 替換行中所有出現的字串str1 

:.,$ s/str1/str2/g 用字串 str2 替換正文當前行到末尾所有出現的字串 str1 

:1,$ s/str1/str2/g 用字串 str2 替換正文中所有出現的字串str1 

:g/str1/s//str2/g 功能同上 

:g/MsgExceptionHand/s//RtaMsgExceptionHand/g
從上述替換命令可以看到:g 放在命令末尾,表示對搜尋字串的每次出現進行替換;不加 g,表示只對搜尋字串的首次出現進行替換;g 放在命令開頭,表示對正文中所有包含搜尋字串的行進行替換操作。

 

11 VI的快捷鍵及高階用法(實用)

11.1  VI跳到行首和行尾快捷鍵

Vi有三種基本的工作模式:指令行模式、文字輸入模式、行末模式

指令模式(Command Mode) 下輸入  a、i、o進入文字輸入模式(InputMode)
文字輸入模式(Input Mode) 下按ESC進入指令模式(Command Mode)

文字模式下:

shift+g 全域性行尾

gg 全域性行首

 

指令模式下:

shift+$ 一行的行尾

0(注:數字0) 一行的行首

11.2  VI搜尋

使用vi編輯器編輯長檔案時,常常是頭昏眼花,也找不到需要更改的內容。

這時,使用查詢功能尤為重要。

方法如下:

1、命令模式下輸入“/字串”,例如“/Section3”。

2、如果查詢下一個,按“n”即可。

 

要自當前游標位置向上搜尋,請使用以下命令:
/pattern Enter

其中,pattern表示要搜尋的特定字元序列。
要自當前游標位置向下搜尋,請使用以下命令:
?pattern Enter
按下 Enter鍵後,vi 將搜尋指定的pattern,並將游標定位在 pattern的第一個字元處。

 

12  Linux xargs命令(實用)

xargs是給命令傳遞引數的一個過濾器,也是組合多個命令的一個工具。它把一個資料流分割為一些足夠小的塊,以方便過濾器和命令進行處理。通常情況下,xargs從管道或者stdin中讀取資料,但是它也能夠從檔案的輸出中讀取資料。xargs的預設命令是echo,這意味著通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代。

xargs 是一個強有力的命令,它能夠捕獲一個命令的輸出,然後傳遞給另外一個命令,下面是一些如何有效使用xargs 的實用例子。

1. 當你嘗試用rm 刪除太多的檔案,你可能得到一個錯誤資訊:/bin/rm Argument list too long. 用xargs 去避免這個問題

find ~ -name ‘*.log’ -print0 |xargs -0 rm -f

 

2. 獲得/etc/ 下所有*.conf 結尾的檔案列表,有幾種不同的方法能得到相同的結果,下面的例子僅僅是示範怎麼實用xargs ,在這個例子中實用 xargs將find 命令的輸出傳遞給ls -l

# find /etc -name "*.conf" |xargs ls –l


3. 假如你有一個檔案包含了很多你希望下載的URL, 你能夠使用xargs 下載所有連結

# cat url-list.txt | xargs wget –c

 

4. 查詢所有的jpg 檔案,並且壓縮它

# find / -name *.jpg -type f -print | xargstar -cvzf images.tar.gz


5. 拷貝所有的圖片檔案到一個外部的硬碟驅動 

# ls *.jpg | xargs -n1 -i cp {}/external-hard-drive/directory

 

EXAMPLES
find /tmp -name core -type f -print |xargs /bin/rm -f
Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenamescontaining newlines or spaces.

find /tmp -name core -type f -print0| xargs -0 /bin/rm -f
Find  files  named core in or below thedirectory /tmp and delete them, processing filenames in such a way that file ordirectory names containing spaces or newlines are correctly handled.

find /tmp -depth -name core -type f -delete
Find files named core in or below the directory /tmp and delete them,but more efficiently than in the previous example (because we avoid the need touse fork(2) and exec(2) to launch rm and we don't need the extra xargsprocess).

cut -d: -f1 < /etc/passwd | sort |xargs echo
Generates a compact listing of all the users on thesystem.

xargs sh -c 'emacs "$@"< /dev/tty' emacs
Launches the minimum number of copies of Emacs needed,one after the other, to edit the files listed on xargs' standard input. This example achieves the same effect as BSD's -o option, but in amore flexible and portable way.

 

13 linux解壓包命令(常用實用)

tar -xzvf FileName.tar.gz

.tar

解包:tar xvf FileName.tar

打包:tar cvf FileName.tar DirName

(注:tar是打包,不是壓縮!)

---------------------------------------------

.gz

解壓1:gunzip FileName.gz

解壓2:gzip -d FileName.gz

壓縮:gzip FileName

 

.tar.gz

解壓:tar zxvf FileName.tar.gz

壓縮:tar zcvf FileName.tar.gz DirName

---------------------------------------------

.bz2

解壓1:bzip2 -d FileName.bz2

解壓2:bunzip2 FileName.bz2

壓縮: bzip2 -z FileName

.tar.bz2

解壓:tar jxvf FileName.tar.bz2

壓縮:tar jcvf FileName.tar.bz2 DirName

---------------------------------------------

.bz

解壓1:bzip2 -d FileName.bz

解壓2:bunzip2 FileName.bz

壓縮:未知

.tar.bz

解壓:tar jxvf FileName.tar.bz

壓縮:未知

---------------------------------------------

.Z

解壓:uncompress FileName.Z

壓縮:compress FileName

.tar.Z

解壓:tar Zxvf FileName.tar.Z

壓縮:tar Zcvf FileName.tar.Z DirName

---------------------------------------------

.tgz

解壓:tar zxvf FileName.tgz

壓縮:未知

.tar.tgz

解壓:tar zxvf FileName.tar.tgz

壓縮:tar zcvf FileName.tar.tgz FileName

---------------------------------------------

.zip

解壓:unzip FileName.zip

壓縮:zip FileName.zip DirName

---------------------------------------------

.rar

解壓:rar a FileName.rar

壓縮:rar e FileName.rar

rar請到:http://www.rarsoft.com/download.htm下載!

解壓後請將rar_static拷貝到/usr/bin目錄(其他由$PATH環境變數指定的目錄也可以):

[root@www2 tmp]# cp rar_static /usr/bin/rar

---------------------------------------------

.lha

解壓:lha -e FileName.lha

壓縮:lha -a FileName.lha FileName

lha請到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下載!

解壓後請將lha拷貝到/usr/bin目錄(其他由$PATH環境變數指定的目錄也可以):

[root@www2 tmp]# cp lha /usr/bin/

/home/ods/java6/bin

 

14 Linux dirnamebasename指令(shell中常用) 

一、dirname指令
1、功能:從給定的包含絕對路徑的檔名中去除檔名(非目錄的部分),然後返回剩下的路徑(目錄的部分)

2、用法:dirname  filename
例如下面幾個例子
(1)# dirname /etc/sysconfig/network-scripts/ifcfg-eth0
   /etc/sysconfig/network-scripts
(2)# dirname /boot/grub/grub.conf
  /boot/grub
(3)# dirname /etc/inittab
  /etc
(4)# echo `pwd` && dirname modprobe.conf
/etc
.
(5)#echo `pwd` && dirname sysconfig/network-scripts/
 
/etc
  sysconfig
二、basename指令

1、功能:從給定的包含絕對路徑的檔名中去除左邊目錄部分或者同時去除某個字尾的內容(目錄的部分),然後返回剩下的部分(非目錄的部分)

2、用法:basename  filename  [suffix]
例如下面幾個例子
(1)#basename /etc/sysconfig/network-scripts/ifcfg-eth0
   ifcfg-eth0
(2)#basename /boot/grub/grub.conf
   grub.conf
(3)#echo `pwd` && basename sysconfig/network-scripts/

/etc

network-scripts

(4)# basename /boot/grub/grub.conf.bak .bak

grub.conf

(5)# basename /boot/grub/grub.conf.bak .conf.bak

Grub

 

15 Linux配置Java環境變數(常用實用)

一. 解壓安裝jdk 
在shell終端下進入jdk-6u14-linux-i586.bin檔案所在目錄, 
執行命令 ./jdk-6u14-linux-i586.bin 這時會出現一段協議,連繼敲回車,當詢問是否同意的時候,輸入yes,回車。之後會在當前目錄下生成一個jdk1.6.0_14目錄,你可以將它複製到任何一個目錄下。 

二. 需要配置的環境變數 
1. PATH環境變數。作用是指定命令搜尋路徑,在shell下面執行命令時,它會到PATH變數所指定的路徑中查詢看是否能找到相應的命令程式。我們需要把 jdk安裝目錄下的bin目錄增加到現有的PATH變數中,bin目錄中包含經常要用到的可執行檔案如javac/java/javadoc等待,設定好 PATH變數後,就可以在任何目錄下執行javac/java等工具了。 
2. CLASSPATH環境變數。作用是指定類搜尋路徑,要使用已經編寫好的類,前提當然是能夠找到它們了,JVM就是通過CLASSPTH來尋找類的。我們需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設定到CLASSPATH中,當然,當前目錄“.”也必須加入到該變數中。 
3. JAVA_HOME環境變數。它指向jdk的安裝目錄,Eclipse/NetBeans/Tomcat等軟體就是通過搜尋JAVA_HOME變數來找到並使用安裝好的jdk。 

三. 三種配置環境變數的方法1. 修改/etc/profile檔案 
如果你的計算機僅僅作為開發使用時推薦使用這種方法,因為所有使用者的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。 
·用文字編輯器開啟/etc/profile 
·在profile檔案末尾加入: 
export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

·重新登入 
·註解 
a. 你要將 /usr/share/jdk1.6.0_14改為你的jdk安裝目錄 
b. linux下用冒號“:”來分隔路徑 
c. $PATH / $CLASSPATH / $JAVA_HOME 是用來引用原來的環境變數的值 
在設定環境變數時特別要注意不能把原來的值給覆蓋掉了,這是一種 
常見的錯誤。 
d. CLASSPATH中當前目錄“.”不能丟,把當前目錄丟掉也是常見的錯誤。 
e. export是把這三個變數匯出為全域性變數。 
f. 大小寫必須嚴格區分。 

2. 修改.bash_profile檔案 

這種方法更為安全,它可以把使用這些環境變數的許可權控制到使用者級別,如果你需要給某個使用者許可權使用這些環境變數,你只需要修改其個人使用者主目錄下的.bash_profile檔案就可以了。 
·用文字編輯器開啟使用者目錄下的.bash_profile檔案 
·在.bash_profile檔案末尾加入: 

export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

·重新登入 

3. 直接在shell下設定變數 
不贊成使用這種方法,因為換個shell,你的設定就無效了,因此這種方法僅僅是臨時使用,以後要使用的時候又要重新設定,比較麻煩。 
只需在shell終端執行下列命令: 
export JAVA_HOME=/usr/share/jdk1.6.0_14 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

四. 測試jdk 
1. 用文字編輯器新建一個Test.java檔案,在其中輸入以下程式碼並儲存: 
public class test { 
public static void main(String args[]) { 
System.out.println("A new jdk test !"); 
} 
} 
2. 編譯:在shell終端執行命令 javac Test.java 
3. 執行:在shell終端執行命令 java Test 
當shell下出現“A new jdk test !”字樣則jdk執行正常。 

五. 解除安裝jdk 
·找到jdk安裝目錄的_uninst子目錄 
·在shell終端執行命令./uninstall.sh即可解除安裝jdk。 

 

16  Linux命令執行控制(易用實用)

1、&&

  方式:command1&& command2

  如果command1執行成功,則執行command2

 

2、||

方式:command1 || command2

如果command1執行失敗,則執行command2


&&(命令執行控制) 
語法格式如下: 
command1 && command2 [&& command3 ...] 
1 命令之間使用 && 連線,實現邏輯與的功能。 
2 只有在 && 左邊的命令返回真(命令返回值 $? == 0),&& 右邊的命令才會被執行。 
3 只要有一個命令返回假(命令返回值 $? == 1),後面的命令就不會被執行。 

 

 

||(命令執行控制)
語法格式如下: 
command1 || command2 [|| command3 ...]
1 命令之間使用|| 連線,實現邏輯或的功能。
2 只有在 || 左邊的命令返回假(命令返回值 $? == 1),|| 右邊的命令才會被執行。這和 c 語言中的邏輯或語法功能相同,即實現短路邏輯或操作。
3 只要有一個命令返回真(命令返回值 $? == 0),後面的命令就不會被執行。

 

命令組合
語法格式如下:
(command1;command2[;command3...]) 
1 一條命令需要獨佔一個物理行,如果需要將多條命令放在同一行,命令之間使用命令分隔符(;)分隔。執行的效果等同於多個獨立的命令單獨執行的效果。
2 表示在當前 shell 中將多個命令作為一個整體執行。需要注意的是,使用 () 括起來的命令在執行前面都不會切換當前工作目錄,也就是說命令組合都是在當前工作目錄下被執行的,儘管命令中有切換目錄的命令。
3 命令組合常和命令執行控制結合起來使用。

 

17 Linux vmstat命令(常用)

root@ubuntu:~# vmstat 2  
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      034998403158363819660    0    0     0     1    2    0  0  0100  0
 0  0      034995843158363819660    0    0     0     0   88  158  0  0100  0
 0  0      034997083158363819660    0    0     0     2   86  162  0  0100  0
 0  0      034997083158363819660    0    0     0    10   81  151  0  0100  0
 1  0      034997323158363819660    0    0     0     2   83  154  0  0100  0

 

#!/bin/sh

#chmod +x cm.sh

#./cm.sh > cm.log

while [ 1 ]

do

date

vmstat

sleep 3

done

 

這表示vmstat2秒採集資料,一直採集,直到我結束程式,這裡採集了5次資料我就結束了程式。

好了,命令介紹完畢,現在開始實戰講解每個引數的意思。

r 表示執行佇列(就是說多少個程式真的分配到CPU),我測試的伺服器目前CPU比較空閒,沒什麼程式在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果執行佇列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b 表示阻塞的程式,這個不多說,程式阻塞,大家懂的。

swpd 虛擬記憶體已使用的大小,如果大於0,表示你的機器實體記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到其他機器。

free   空閒的實體記憶體的大小,我的機器記憶體總共8G,剩餘3415M。

buff   Linux/Unix系統是用來儲存,目錄裡面有什麼內容,許可權等的快取,我本機大概佔用300多M

cache cache直接用來記憶我們開啟的檔案,給檔案做緩衝,我本機大概佔用300多M(這裡是Linux/Unix的聰明之處,把空閒的實體記憶體的一部分拿來做檔案和目錄的快取,是為了提高程式執行的效能,當程式使用記憶體時,buffer/cached會很快地被使用。)

si  每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示實體記憶體不夠用或者記憶體洩露了,要查詢耗記憶體程式解決掉。我的機器記憶體充裕,一切正常。

so  每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上。

bi  塊裝置每秒接收的塊數量,這裡的塊裝置是指系統上所有的磁碟和其他塊裝置,預設塊大小是1024byte,我本機上沒什麼IO操作,所以一直是0,但是我曾在處理拷貝大量資料(2-3T)的機器上看過可以達到140000/s,磁碟寫入速度差不多140M每秒

bo 塊裝置每秒傳送的塊數量,例如我們讀取檔案,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

in 每秒CPU的中斷次數,包括時間中斷

cs 每秒上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程式上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者程式的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程式可以由程式或者執行緒的峰值一直下調,壓測,直到cs到一個比較小的值,這個程式和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的程式碼就會進入核心空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁呼叫系統函式。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

us 使用者CPU時間,我曾經在一個做加密解密很頻繁的伺服器上,可以看到us接近100,r執行佇列達到80(機器在做壓力測試,效能表現不佳)。

sy 系統CPU時間,如果太高,表示系統呼叫時間長,例如是IO操作頻繁。

id  空閒 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閒CPU使用率,us是使用者CPU使用率,sy是系統CPU使用率。

wt 等待IO CPU時間。

 

vmstat命令各指標含義

 

 

Procs(程式):

r: 執行佇列中程式數量

b: 等待IO的程式數量

系統:

in: 每秒中斷數,包括時鐘中斷。

cs: 每秒上下文切換數。

 

CPU(以百分比表示):

us: 使用者程式執行時間(user time)

sys: 系統程式執行時間(system time)

wa: 等待IO時間

id: 空閒時間(包括IO等待時間),中央處理器的空閒時間 。以百分比表示。


 

Memory(記憶體):

swpd: 使用虛擬記憶體大小

free: 可用記憶體大小

buff: 用作緩衝的記憶體大小

cache: 用作快取的記憶體大小

Swap

si: 每秒從交換區寫到記憶體的大小

so: 每秒寫入交換區的記憶體大小

IO:(現在的Linux版本塊的大小為1024bytes)

bi: 每秒讀取的塊數

bo: 每秒寫入的塊數

 

備註: 如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。如果pi,po 長期不等於0,表示記憶體不足。如果disk 經常不等於0, 且在 b中的佇列 大於3, 表示 io效能不好。Linux在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴充套件性,能夠針對不同的應用和硬體環境調整,優化出滿足當前應用需要的最佳效能。因此企業在維護Linux系統、進行系統調優時,瞭解系統效能分析工具是至關重要的。

 

 

18 Linux常用網路測試命令

1、可以使用ifconfig命令來配置並檢視網路介面的配置情況。
    例如:
  (1)配置eth0的IP地址,同時啟用該裝置。
  #ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
  (2)配置eth0別名裝置eth0:1的IP地址,並新增路由。
  #ifconfig eth0 192.168.1.3
  #route add –host 192.168.1.3 dev eth0:1
  (3)啟用裝置。
  #ifconfig eth0 up
  (4)禁用裝置。
  #ifconfig eth0 down
  (5)檢視指定的網路介面的配置。
  #ifconfig eth0
  (6)檢視所有的網路介面配置。
  #ifconfig
2、route
  可以使用route命令來配置並檢視核心路由表的配置情況。
  例如:
  (1)新增到主機的路由。
  #route add –host 192.168.1.2 dev eth0:0
  #route add –host 10.20.30.148 gw 10.20.30.40
  (2)新增到網路的路由。
  #route add –net 10.20.30.40 netmask 255.255.255.248 eth0
  #route add –net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
  #route add –net 192.168.1.0/24 eth1
  (3)新增預設閘道器。
  #route add default gw 192.168.1.1
  (4)檢視核心路由表的配置。
  #route
  (5)刪除路由。
  #route del –host 192.168.1.2 dev eth0:0
  #route del –host 10.20.30.148 gw 10.20.30.40
  #route del –net 10.20.30.40 netmask 255.255.255.248 eth0
  #route del –net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
  #route del –net 192.168.1.0/24 eth1
  #route del default gw 192.168.1.1
  對於1和2兩點可使用下面的語句實現:
  Ifconfig eth0 172.16.19.71 netmask 255.255.255.0
  Route 0.0.0.0 gw 172.16.19.254
  Service network restart
3、traceroute
  可以使用traceroute命令顯示資料包到達目的主機所經過的路由。
  例如:
  #traceroute 
4、ping
  可以使用ping 命令來網路的連通性。
  例如:
  #ping 
  #ping –c 4 192.168.1.12
5、netstat
  可以使用netstat命令來顯示網路狀態資訊。
  例如:
  (1)顯示網路介面狀態資訊。
  #netstat –i
  (2)顯示所有監控中的伺服器的Socket和正使用Socket的程式資訊。
  #netstat –lpe
  (3)顯示核心路由表資訊。
  #netstat –r
  #netstat –nr
  (4)顯示TCP/UDP傳輸協議的連線狀態。
  #netstat –t
  #netstat –u
6、hostname
  可以使用hostname命令來更改主機名。例如;
  #hostname myhost
7、arp
  可以使用arp命令來配置並檢視arp快取。例如:
  (1)檢視arp快取。
  #arp
  (2)新增一個IP地址和MAC地址的對應記錄。
  #arp –s 192.168.33.15 00:60:08:27:CE:B2
  (3)刪除一個IP地址和MAC地址的對應快取記錄。
  #arp –d192.168.33.15

8

系統禁止ping

  #echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

  

系統允許ping

  # echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

  此上兩條命令的效果實時生效,可以用另外的機器ping來測試是否生效。

  ----------------------------------------------------------------------------------

  /etc/rc.d/rc.local中增加一行

  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

  0表示允許

1表示禁止

 

19 Scp命令(常用)

 

scp hadoop@134.64.114.150:/data/cdrhome/cdrFtpLocal/hf2/opt/opthb/data/bill/ctl/load/lte.tar /rtap/rtap 

 scp  root@192.168.128.47:/home/rhn6.2/EULA  /home

 scp-p port user@serverip:/home/user/filename /home/user/filename

以 上埠p 為引數,port 埠 user 為ssh userserverip 為遠端伺服器ip或者域名 ,/home/user/filename 為遠端伺服器的檔名 /home/user/filename 為本地服務伺服器的檔名。該命令的作用就是將遠端的filename複製到本地對應的目錄下面

 

 

本地複製到遠端
======
* 複製檔案:
* 命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file

第1,2個指定了使用者名稱,命令執行後需要再輸入密碼,第1個僅指定了遠端的目錄,檔名字不變,第2個指定了檔名;
第3,4個沒有指定使用者名稱,命令執行後需要輸入使用者名稱和密碼,第3個僅指定了遠端的目錄,檔名字不變,第4個指定了檔名;
* 例程:
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/002.mp3
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/002.mp3

 

scp./commons-beanutils-1.8.2.jar rta@192.168.128.77:/home/rta/storm/storm-0.8.2/lib

 

* 複製目錄:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder

第1個指定了使用者名稱,命令執行後需要再輸入密碼;
第2個沒有指定使用者名稱,命令執行後需要輸入使用者名稱和密碼;
* 例程:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

上面 命令 將 本地 music 目錄 複製 到 遠端 others 目錄下,即複製後有 遠端 有 ../others/music/ 目錄

 

遠端複製到本地
======
從 遠端 複製到 本地,只要將 從 本地 複製到 遠端 的命令 的 後2個引數 調換順序 即可;

例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/i.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

 

20 Linux date命令的用法

 在linux shell程式設計中,經常用到日期的加減運算

以前都是自己通過expr函式計算,很麻煩

其實date命令本身提供了日期的加減運算

非常方便。例如:得到昨天的時間
date +%Y%m%d --date="-1 day"

date +%Y-%m-%d  --date="-1 day"

 

date 用法: date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date 可以用來顯示或設定系統的日期與時間。
1.在顯示方面,使用者可以設定欲顯示的格式,格式設定為一個加號後接數個標記,其中可用的標記列表如下: % :  列印出 %
%n : 下一行
%t : 跳格
%H : 小時(00..23)
%I : 小時(01..12)
%k : 小時(0..23)
%l : 小時(1..12)
%M : 分鐘(00..59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數
%S : 秒(00..61)
%T : 直接顯示時間 (24 小時制)
%X : 相當於 %H:%M:%S
%Z : 顯示時區 %a : 星期幾 (Sun..Sat)
%A : 星期幾 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接顯示日期與時間
%d : 日 (01..31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第幾周 (00..53) (以 Sunday 為一週的第一天的情形)
%w : 一週中的第幾天 (0..6)
%W : 一年中的第幾周 (00..53) (以 Monday 為一週的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最後兩位數字 (00.99)
%Y : 完整年份 (0000..9999)

 

2.在設定時間方面
date -s //
設定當前時間,只有root許可權才能設定,其他只能檢視。
date -s 20080523 //
設定成20080523,這樣會把具體時間設定成空00:00:00
date -s 01:01:01 //
設定具體時間,不會對日期做更改
date -s “01:01:01 2008-05-23″ //
這樣可以設定全部時間
date -s “01:01:01 20080523″ //
這樣可以設定全部時間
date -s “2008-05-23 01:01:01″ //
這樣可以設定全部時間
date -s “20080523 01:01:01″ //
這樣可以設定全部時間


3.加減
date +%Y%m%d         //顯示現在天年月日
date +%Y%m%d --date="+1 day"  //顯示後一天的日期
date +%Y%m%d --date="-1 day"  //顯示前一天的日期
date +%Y%m%d --date="-1 month"  //顯示上一月的日期
date +%Y%m%d --date="+1 month"  //顯示下一月的日期
date +%Y%m%d --date="-1 year"  //顯示前一年的日期
date +%Y%m%d --date="+1 year"  //顯示下一年的日期

或者更簡單點的  date=`date -d -${t}day '+%Y%m%d'` //為t為前幾天

 

相關文章