如果你想知道你的服務器正在做干什么,你就需要了解一些基本的命令,一旦你精通了這些命令,那你就是一個專業的 Linux 系統管理員。
監控命令##
iostat###
iostat命令用來顯示存儲系統的詳細信息,通常用它來監控磁盤 I/O 的情況。要特別注意 iostat 統計結果中的 %iowait
值,太大了表明你的系統存儲系統性能低下。
命令: iostat -m -x 1 1000
可以觀察對應的CPU中的%iowait數據
,除此之外iostat還提供了一些更詳細的I/O狀態數據,比如比較重要的有:
**avgqu-sz : ** The average queue length of the requests that were issued to the device. (磁盤隊列的請求長度,正常的話2,3比較好??梢院蚦pu的load一樣的理解)。
**await : **The average time (in milliseconds) for I/O requests issued to the device to be served. (代表一個I/O操作從wait到完成的總時間)。
svctm和%util都是代表處理該I/O請求花費的時間和CPU的時間比例。 判斷是否瓶頸時,這兩個參數不是主要的。
r/s w/s 和 rMB/s wMB/s 都是代表當前系統處理的I/O的一些狀態,前者是我們常說的tps,后者就是吞吐量。這也是評價一個系統的性能指標。
meminfo 和 free###
Meminfo 可讓你獲取內存的詳細信息,你可以使用 cat 和 grep 命令來顯示 meminfo 信息:
cat /proc/meminfo
另外你可以使用 free
命令來顯示動態的內存使用信息,free 只是給你大概的內存信息,而 meminfo
提供的信息更加詳細。
mpstat###
mpstat是MultiProcessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。
在多CPUs系統里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。
mpstat的語法如下:mpstat [-P {|ALL}] [internal [count]]
,參數的含義如下:
-P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
internal 相鄰的兩次采樣的間隔時間
count 采樣的次數,count只能和delay一起使用
當沒有參數時,mpstat則顯示系統啟動以后所有信息的平均值。有interval時,第一行的信息自系統啟動以來的平均信息。
命令:mpstat -P ALL 1 1000
CPU 處理器ID
user 在internal時間段里,用戶態的CPU時間(%),不包含 nice值為負 進程 (usr/total)*100
nice 在internal時間段里,nice值為負進程的CPU時間(%) (nice/total)*100
system 在internal時間段里,核心時間(%) (system/total)*100
iowait 在internal時間段里,硬盤IO等待時間(%) (iowait/total)*100
irq 在internal時間段里,硬中斷時間(%) (irq/total)*100
soft 在internal時間段里,軟中斷時間(%) (softirq/total)*100
idle 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%)(idle/total)*100
intr/s 在internal時間段里,每秒CPU接收的中斷的次數intr/total)*100
CPU總的工作時間=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數點。
注意:這里面的%iowait
列,CPU等待I/O操作所花費的時間。這個值持續很高通??赡苁荌/O瓶頸所導致的。通過這個參數可以比較直觀的看出當前的I/O操作是否存在瓶頸。
netstat###
Netstat 和 ps 命令類似,是 Linux 管理員基本上每天都會用的工具,它顯示了大量跟網絡相關的信息,例如 socket 的使用、路由、接口、協議、網絡等等,下面是一些常用的參數:
-a Show all socket information
-r Show routing information
-i Show network interface statistics
-s Show network protocol statistics
nmon###
Nmon, 是 Nigel's Monitor 的縮寫,是一個使用很普遍的開源工具,用以監控 Linux 系統的性能。Nmon 監控多個子系統的性能數據,例如處理器的使用率、內存使用率、隊列、磁盤I/O統計、網絡I/O統計、內存頁處理和進程信息。Nmon 也提供了一個圖形化的工具:
要運行 nmon,你可以在命令行中啟動它,然后選擇要監控的子系統,這些子系統都對應有一個快捷鍵,例如輸入 c 可查看 CPU 信息,m用于查看內存,d用來查看磁盤信息
等,你也可以使用 -f 命令將 nmon 的執行結果保存到一個 CSV 文件中,便于日后分析
。
在每日的監控工作中,我發現 nmon 是我最常用的工具。
pmap###
pmap 命令用來報告每個進程占用內存的詳細情況
,可用來看是否有進程超支了,該命令需要進程 id 作為參數
。
ps 和 pstree###
ps 和 pstree 命令是 Linux 系統管理員最好的朋友,都可以用來列表正在運行的所有進程。ps 告訴你每個進程占用的內存和 CPU 處理時間,而 pstree 顯示的信息沒那么詳細,但它以樹形結構顯示進程之間的依賴關系,包括子進程信息。
一旦發現某個進程有問題,你可以使用 kill 來殺掉它。
命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid
這個命令的作用,主要是可以獲取到對應一個進程下的線程的一些信息。 比如你想分析一下一個java進程的一些運行瓶頸點,可以通過該命令找到所有當前Thread的占用CPU的時間,也就是這里的最后一列。
比如這里找到了一個TID : 6603
,所占用的TIME時間最高。通過 printf "%x\n" 6603 首先轉化成16進制
, 繼續通過jstack命令dump出當前的jvm進程的堆棧信息
。 通過Grep命令即可以查到對應16進制的線程id信息
,很快就可以找到對應最耗CPU的代碼塊在哪。
簡單的解釋下,jstack下這一串線程信息內容:
"qtp812487918-32" prio=10 tid=0x00007f69b4430000 nid=0x19cb waiting on condition [0x00007f69a5b86000]
**nid : **對應的linux操作系統下的tid,就是前面轉化的16進制數字
tid:這個是jvm的jmm內存規范中的唯一地址定位,如果你詳細分析jvm的一些內存數據時用得上
pidstat###
命令: pidstat -p pid -u -d -t -w -h 1 1000
相當實用的一個命令,可以基于當個進程分析對應的性能數據,包括CPU,I/O,IR , CS等,可以方便開發者更加精細化的觀察系統的運行狀態。不過pidstat貌似是在2.6內核的一些較新的版本才有,需要安裝sysstat包。在ubuntu下,可以通過sudo apt-get install sysstat
進行安裝。
pidstat強大之處在于它不僅可以監視進程的性能情況
,也可以監視線程的性能情況
。
命令:pidstat -p 3287 -r 1 1000 查看進程內存監控
dstat###
命令:dstat -y --tcp 1 1000
通過dstat --tcp可以比較方便的看到當前的tcp的各種狀態,不需要每次netstat -nat去看
tcpdump###
tcpdump 是一個簡單、可靠的網絡監控工具,用來做基本的協議分析,看看那些進程在使用網絡以及如何使用網絡。當然,如果你要獲取跟詳細的信息,你應該使用 Wireshark。
top###
top 命令顯示當前的活動進程,默認它是按消耗 CPU 的厲害程度進行排序
,每5秒鐘刷新一次列表,你也可以選擇不同的排序方式,例如 m 是按內存占用方式進行排序的快捷鍵。
命令:top -Hp pid
可以實時的跟蹤并獲取指定進程中最耗cpu的線程。再用ps命令中提到的jstack方法提取到對應的線程堆棧信息。
默認情況下,Top 被調用時使用交互模式。
在此模式下,Top 無限期運行,并可以通過按鍵重新定義 Top 的運行方式。但是,有時你需要對 Top 的輸出進行后續處理,但這在此模式下難以實現。解決方法?使用批處理模式。
命令:top -b
哈,等等,它是不斷重復運行的,同交互模式一樣。不用擔心,你可以使用 -n 限制重復數量。所以,如果你希望獲得一次性結果,鍵入:
命令:top -b -n 1
這一模式的真正優勢在于你可以很容易的與 at 或 cron 命令結合
。它們的結合,使得 Top 可以在特定時間對資源使用狀態進行快照。例如,使用 at ,我們可以設定 top 在一分鐘之后運行。
cat ./test.at
TERM=linux top -b -n 1 >/tmp/top-report.txt
at -f ./test.at now+1minutes
細心的讀者可能會問“在創建新任務時,為什么我需要在調用 Top 之前設置環境變量 TERM?”。答案是,Top 運行時需要此變量,但“at”在定時調用時并不會保留它。同上面那樣簡單的設置可以確保 Top 正常運行。
如何監控制定進程
有時,我們只對幾個進程感興趣,可能只是全部進程中的4個或5個。例如,如果你想要監測進程標識(PID)為4360和4358的進程,你需要鍵入:top -p 19647,10065
看起來很簡單,只需要使用 -p 列出所有需要的 PID
,并使用逗號間隔或簡單的多次使用 -p即可。
另一種可能是監測擁有特定用戶標識(UID)的進程
。應對此需求,你可以使用 -u 或 -U 選項。假設用戶“johndoe”的 UID 為500,鍵入:top -u taomk
或:top -U taomk
結論是,你既可以純使用用戶名,也可使用數字 UID?!?u,-U?這兩者不同?”是的。同多數其它 GNU 工具一樣,選項是大小寫敏感的。-U 意味著 Top 將會搜索有效的、真實的、被保存的以及文件系統的 UID 進行匹配,而 -u 僅匹配有效的用戶id。
要知道,每一個 Linux 進程在運行時都是用有效用戶標識(effective UID),而其中有些并不等同真實用戶標識。多數情況是,對類似文件系統權限或操作系統功能這項的有效用戶標識感興趣的人將會檢查它,而不是 UID。
不同于 -p 僅用于命令行選項,-U 和 -u 都可以在交互模式中使用。
同你猜測的一樣,鍵入‘U’或‘u’可以依據用戶名過濾進程。同樣的規則依然適用,‘u’為有效用戶標識,‘U’為 真實/有效/保存/文件系統用戶名
。你將被要求鍵入用戶名或數字 UID。
sar###
sar命令也是Linux系統中重要的性能監測工具之一,它可以周期性地對內存和CPU使用情況進行采樣
。
命令:sar -u 1 3 查看CPU使用率
命令:sar -r 1 3 查看內存使用率
命令:sar -b 1 3 查看I/O使用率
uptime###
uptime 命令告訴你這臺服務器從開機啟動到現在已經運行了多長時間了。
同時也包含了從啟動到現在服務器的平均負載情況:
vmstat###
你可以使用 vmstat 來監控虛擬內存
,一般 Linux 上的開發者喜歡使用虛擬內存來獲得最佳的存儲性能。該命令報告關于內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告可以用于平衡系統負載活動。系統范圍內的這些統計信息(所有的處理器中)都計算出以百分比表示的平均值,或者計算其總和。
vmstat:可以查看內存,交互區分,I/O操作,上下文切換,時鐘中斷以及CPU的使用情況。
命令:vmstat 1 3
其他命令###
netstat -natp : 查看對應的網絡鏈接,關注下Recv-Q , Send-Q , State。
lsof -p pid : 查找對應pid的文件句柄
lsof -i : 80 : 查找對應端口被哪個進程占用
lsof /tmp/1.txt :查找對應文件被哪個進程占用
tcpdump / wireshark :抓包分析工具
jstat / jmap / jstack / jps :等一系列的java監控命令
CPU命令##
查看系統內核信息###
命令:uname -a
命令:uname -r
查看系統發行版信息###
命令:cat /etc/issue
命令:cat /proc/version
查看系統CPU邏輯核數###
命令:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看系統CPU物理核數###
命令:cat /proc/cpuinfo | grep physical | uniq -c
命令:grep "model name" /proc/cpuinfo
查看系統CPU運行位數###
命令:getconf LONG_BIT
說明:當前CPU運行在64bit模式下
查看系統CPU是否支持64位計算###
命令:cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
說明:結果大于0, 支持64bit計算. lm指long mode, 支持lm則是64bit
查看系統Shell腳本###
#!/bin/bash
hostname=`hostname`
ip_addr=`ifconfig | grep inet | grep Bcast | tr -s " "`
os_name=`cat /etc/issue | head -n1`
os_bit=`getconf LONG_BIT`
cpu=`cat /proc/cpuinfo | grep name | cut -f2 -d: | head -n1`
cpu_core=`cat /proc/cpuinfo | grep name | cut -f2 -d: | wc -l`
memory_kb=`cat /proc/meminfo | grep MemTotal | awk '{print $(NF-1)}'`
memory_mb=`expr $memory_kb / 1024`
memory_gb=`expr $memory_mb / 1024`
memory="$memory_gb GB; $memory_mb MB; $memory_kb KB"
memory_cmd='free -m'
echo "hostname : $hostname"
echo "ip_addr : $ip_addr"
echo
echo "os_name : $os_name"
echo "os_bit : $os_bit bit"
echo "cpu : $cpu"
echo "cpu_core : $cpu_core"
echo
echo "memory : $memory"
$memory_cmd
cat /proc/cpuinfo命令###
- processor:邏輯處理器的id。
- physical id:物理封裝的處理器的id。
- core id:每個核心的id。
- cpu cores:位于相同物理封裝的處理器中的內核數量。
- siblings:位于相同物理封裝的處理器中的邏輯處理器的數量。
查看物理CPU的個數:cat /proc/cpuinfo |grep "physical id"|sort |uniq| wc -l
查看邏輯CPU的個數:cat /proc/cpuinfo |grep "processor"|wc -l
查看CPU是幾核:cat /proc/cpuinfo |grep "cores"|uniq
查看CPU的主頻:cat /proc/cpuinfo |grep MHz|uniq
日期時間##
date命令###
查看當前系統時間:date
修改當前系統時間:date -s "2009-07-28 15:32:00"
解壓縮命令##
tar解壓###
tar -zvxf httpd-2.2.11.tar.gz:解壓.tar.gz格式的文件;
tar xvf wordpress.tar:解壓tar格式的文件;
tar -tvf myfile.tar:查看tar文件中包含的文件;
tar xjf www.tar.bz2:解壓tar.bz2格式;
tar壓縮###
tar cf toole.tar tool:把tool目錄打包為toole.tar文件;
tar cfz vpser.tar.gz tool:把tool目錄打包且壓縮為vpser.tar.gz文件,因為.tar文件幾乎是沒有壓縮過的,MT的.tar.gz文件解壓成.tar文件后差不多是10MB;
tar jcvf /var/bak/www.tar.bz2 /var/www/:創建.tar.bz2文件,壓縮率高;
gzip -d ge.tar.gz:解壓.tar.gz文件為.tar文件;
unzip phpbb.zip:解壓zip文件,windows下要壓縮出一個.tar.gz格式的文件還是有點麻煩的;
find命令##
列出當前目錄的文件樹:
find . -print 2 > /dev/null | awk '!/\.$/ {for (i=1;i<NF;i++){d=length($i);if ( d < 5 && i != 1 )d=5;printf("%"d"s","|")}print "---"$NF}' FS='/'
who命令##
查看用戶所在哪些終端:who | awk '{print $1 "\t" $6}'
查看硬件配置##
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:查看所有安裝的軟件包
重啟命令##
shutdown###
shutdown命令安全地將系統關機。
有些用戶會使用直接斷掉電源的方式來關閉linux,這是十分危險的。因為linux與windows不同,其后臺運行著許多進程,所以強制關機可能會導致進程的數據丟失
﹐使系統處于不穩定的狀態﹐甚至在有的系統中會損壞硬件設備。
而在系統關機前使用shutdown命令﹐系統管理員會通知所有登錄的用戶系統將要關閉。并且login指令會被凍結﹐即新的用戶不能再登錄。直接關機或者延遲一定的時間才關機都是可能的﹐還可能重啟。這是由所有進程〔process〕都會收到系統所送達的信號〔signal〕決定的。
這讓像vi之類的程序有時間儲存目前正在編輯的文檔﹐而像處理郵件〔mail〕和新聞〔news〕的程序則可以正常地離開等等。
shutdown執行的工作是送信號〔signal〕給init程序﹐要求它改變runlevel。
Runlevel 0被用來停機〔halt〕﹐runlevel 6是用來重新激活〔reboot〕系統﹐而runlevel 1則是被用來讓系統進入管理工作可以進行的狀態﹔這是預設的﹐假定沒有-h也沒有-r參數給shutdown。要想了解在停機〔halt〕或者重新開機〔reboot〕過程中做了哪些動作﹐你可以在這個文件/etc/inittab里看到這些runlevels相關的資料。
shutdown 參數說明:
[-t] 在改變到其它runlevel之前﹐告訴init多久以后關機。
[-r] 重啟計算器。
[-k] 并不真正關機﹐只是送警告信號給每位登錄者〔login〕。
[-h] 關機后關閉電源〔halt〕。
[-n] 不用init﹐而是自己來關機。不鼓勵使用這個選項﹐而且該選項所產生的后果往往不總是你所預期得到的。
[-c] cancel current process取消目前正在執行的關機程序。所以這個選項當然沒有時間參數﹐但是可以輸入一個用來解釋的訊息﹐而這信息將會送到每位使用者。
[-f] 在重啟計算器〔reboot〕時忽略fsck。
[-F] 在重啟計算器〔reboot〕時強迫fsck。
[-time] 設定關機〔shutdown〕前的時間。
命令:shutdown -r -t 0:0就是立即關機,如果設置為7,則是7秒鐘之后關機。
halt###
halt就是調用shutdown -h。
halt執行時﹐殺死應用進程﹐執行sync系統調用﹐文件系統寫操作完成后就會停止內核。
halt 參數說明:
[-n] 防止sync系統調用﹐它用在用fsck修補根分區之后﹐以阻止內核用老版本的超級塊〔superblock〕覆蓋修補過的超級塊。
[-w] 并不是真正的重啟或關機﹐只是寫wtmp〔/var/log/wtmp〕紀錄。
[-d] 不寫wtmp紀錄〔已包含在選項[-n]中〕。
[-f] 沒有調用shutdown而強制關機或重啟。
[-i] 關機〔或重啟〕前﹐關掉所有的網絡接口。
[-p] 該選項為缺省選項。就是關機時調用poweroff。
reboot###
reboot的工作過程差不多跟halt一樣﹐不過它是引發主機重啟﹐而halt是關機。它的參數與halt相差不多。
init###
init是所有進程的祖先﹐它的進程號始終為1
﹐所以發送TERM信號給init會終止所有的用戶進程﹑守護進程等。shutdown 就是使用這種機制。
init定義了8個運行級別(runlevel), init 0為關機﹐init 1為重啟。
關于init可以長篇大論﹐這里就不再敘述。另外還有 telinit命令可以改變init的運行級別﹐比如﹐telinit -i S可使系統進入單用戶模式﹐并且得不到使用shutdown時的信息和等待時間。
apt-get使用##
“起初GNU/Linux系統中只有.tar.gz。用戶必須自己編譯他們想使用的每一個程序。在Debian出現之後,人們認為有必要在系統中添加一種機制用來管理安裝在計算機上的軟件包。人們將這套系統稱為dpkg。至此著名的‘package’首次在GNU/Linux上出現。不久之後紅帽子也開始著手建立自己的包管理系統‘rpm’。
“GNU/Linux的創造者們很快又陷入了新的窘境。他們希望通過一種快捷、實用而且高效的方式來安裝軟件包。這些軟件包可以自動處理相互之間的依賴關系,并且在升級過程中維護他們的配置文件。Debian又一次充當了開路先鋒的角色。她首創了APT(Advanced Packaging Tool)。這一工具後來被Conectiva 移植到紅帽子系統中用于對rpm包的管理。在其他一些發行版中我們也能看到她的身影?!?/p>
"同時,apt是一個很完整和先進的軟件包管理程序,使用它可以讓你,又簡單,又準確的找到你要的的軟件包, 并且安裝或卸載都很簡潔。
它還可以讓你的所有軟件都更新到最新狀態,而且也可以用來對ubuntu進行升級。"
"apt是需要用命令來操作的軟件,不過現在也出現了很多有圖形的軟件,比如Synaptic, Kynaptic 和 Adept。"
apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後運行該命令。此外您需要定期運行這一命令以確保您的軟件包列表是最新的。
apt-get install packagename——安裝一個新軟件包(參見下文的aptitude)。
apt-get remove packagename——卸載一個已安裝的軟件包(保留配置文件)。
apt-get --purge remove packagename——卸載一個已安裝的軟件包(刪除配置文件)。
dpkg --force-all --purge packagename——有些軟件很難卸載,而且還阻止了別的軟件的應用,就可以用這個,不過有點冒險。
apt-get autoclean——apt會把已裝或已卸的軟件都備份在硬盤上,所以如果需要空間的話,可以讓這個命令來刪除你已經刪掉的軟件。
apt-get clean——這個命令會把安裝的軟件的備份也刪除,不過這樣不會影響軟件的使用的。
apt-get upgrade——更新所有已安裝的軟件包。
apt-get dist-upgrade——將系統升級到新版本。
apt-cache search string——在軟件包列表中搜索字符串。
dpkg -l package-name-pattern——列出所有與模式相匹配的軟件包。如果您不知道軟件包的全名,您可以使用“package-name-pattern”。
aptitude——詳細查看已安裝或可用的軟件包。與apt-get類似,aptitude可以通過命令行方式調用,但僅限于某些命令——最常見的有安裝和卸載命令。由于aptitude比apt-get了解更多信息,可以說它更適合用來進行安裝和卸載。
apt-cache showpkg pkgs——顯示軟件包信息。
apt-cache dumpavail——打印可用軟件包列表。
apt-cache show pkgs——顯示軟件包記錄,類似于dpkg –print-avail。
apt-cache pkgnames——打印軟件包列表中所有軟件包的名稱。
dpkg -S file——這個文件屬于哪個已安裝軟件包。
dpkg -L package——列出軟件包中的所有文件。
apt-file search filename——查找包含特定文件的軟件包(不一定是已安裝的),這些文件的文件名中含有指定的字符串。apt-file是一個獨立的軟件包。您必須先使用apt-get install來安裝它,然後運行apt-file update。如果apt-file search filename輸出的內容太多,您可以嘗試使用apt-file search filename | grep -w filename(只顯示指定字符串作為完整的單詞出現在其中的那些文件名)或者類似方法,例如:apt-file search filename | grep /bin/(只顯示位于諸如/bin或/usr/bin這些文件夾中的文件,如果您要查找的是某個特定的執行文件的話,這樣做是有幫助的)。
apt-get autoclean——定期運行這個命令來清除那些已經卸載的軟件包的.deb文件。通過這種方式,您可以釋放大量的磁盤空間。如果您的需求十分迫切,可以使用apt-get clean以釋放更多空間。這個命令會將已安裝軟件包裹的.deb文件一并刪除。大多數情況下您不會再用到這些.debs文件,因此如果您為磁盤空間不足而感到焦頭爛額,這個辦法也許值得一試。
wget下載##
wget是在Linux下開發的開放源代碼的軟件,作者是Hrvoje Niksic,后來被移植到包括Windows在內的各個平臺上。它有以下功能和特點:
(1)支持斷點下傳功能;這一點,也是網絡螞蟻和FlashGet當年最大的賣點,現在,Wget也可以使用此功能,那些網絡不是太好的用戶可以放心了;
(2)同時支持FTP和HTTP下載方式;盡管現在大部分軟件可以使用HTTP方式下載,但是,有些時候,仍然需要使用FTP方式下載軟件;
(3)支持代理服務器;對安全強度很高的系統而言,一般不會將自己的系統直接暴露在互聯網上,所以,支持代理是下載軟件必須有的功能;
(4)設置方便簡單;可能,習慣圖形界面的用戶已經不是太習慣命令行了,但是,命令行在設置上其實有更多的優點,最少,鼠標可以少點很多次,也不要擔心是否錯點鼠標;
(5)程序小,完全免費;程序小可以考慮不計,因為現在的硬盤實在太大了;完全免費就不得不考慮了,即使網絡上有很多所謂的免費軟件,但是,這些軟件的廣告卻不是我們喜歡的;
wget http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:下載遠程服務器上的文件到自己的服務器,連上傳都省了,服務器不是100M就是1000M的帶寬,下載一個2-3兆的MT還不是幾十秒的事;
wget -c http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:繼續下載上次未下載完的文件;
wget參數說明:
-t,--tries=NUMBER 是否下載次數(0表示無窮次)
-O --output-document=FILE保存下載日志到文件FILE
-nc, --no-clobber 不要覆蓋已經存在的文件
-N,--timestamping只下載比本地新的文件
-T,--timeout=SECONDS 設置超時時間
-Y,--proxy=on/off 關閉代理
例:下載的首頁并將下載過程中的的輸入信息保存到test.htm文件中:wget -O test.html
1)下載整個http或者ftp站點:wget http://place.your.url/here
這個命令可以將http://place.your.url/here 首頁下載下來
。使用-x會強制建立服務器上一模一樣的目錄,如果使用-nd參數,那么服務器上下載的所有內容都會加到本地當前目錄。
2)遞歸下載 :wget -r http://place.your.url/here
這 個命令會按照遞歸的方法,下載服務器上所有的目錄和文件,實質就是下載整個網站
。這個命令一定要小心使用,因為在下載的時候,被下載網站指向的所有地址同 樣會被下載,因此,如果這個網站引用了其他網站,那么被引用的網站也會被下載下來!基于這個原因,這個參數不常用。可以用-l number參數來指定下載的層次。
例如只下載兩層,那么使用-l 2。
3)制作鏡像站點,那么可以使用-m參數,例如:wget -m http://place.your.url/here
這時wget會自動判斷合適的參數來制作鏡像站點
。此時,wget會登錄到服務器上,讀入robots.txt并按robots.txt的規定來執行。
4)斷點續傳,例如:wget -c http://the.url.of/incomplete/file
當文件特別大或者網絡特別慢的時候,往往一個文件還沒有下載完,連接就已經被切斷,此時就需要斷點續傳。wget的斷點續傳是自動的,只需要使用-c參數,使用斷點續傳要求服務器支持斷點續傳
。-t參數表示重試次數,例如需要重試100次,那么就寫-t 100,如果設成-t 0,那么表示無窮次重試,直到連接成功。-T參數表示超時等待時間,例如-T 120,表示等待120秒連接不上就算超時。
**5)批量下載,例如:wget -i download.txt **
如果有多個文件需要下載,那么可以生成一個文件,把每個文件的URL寫一行,例如生成文件download.txt,然后用命令:wget -i download.txt 這樣就會把download.txt里面列出的每個URL都下載下來。(如果列的是文件就下載文件,如果列的是網站,那么下載首頁)
6)選擇性的下載,例如:wget -m –reject=gif http://target.web.site/subdirectory
可以指定讓wget只下載一類文件,或者不下載什么文件。例如:wget -m –reject=gif http://target.web.site/subdirectory 表示下載http://target.web.site/subdirectory, 但是忽略gif文件。–accept=LIST 可以接受的文件類型,–reject=LIST拒絕接受的文件類型。
7)密碼和認證
wget只能處理利用用戶名/密碼方式限制訪問的網站,可以利用兩個參數:
–http-user=USER設置HTTP用戶
–http-passwd=PASS設置HTTP密碼
對于需要證書做認證的網站,就只能利用其他下載工具了,例如curl。
8)利用代理服務器進行下載
如果用戶的網絡需要經過代理服務器,那么可以讓wget通過代理服務器進行文件的下載。此時需要在當前用戶的目錄下創建一個.wgetrc文件。文件中可以設置代理服務器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分別表示http的代理服務器和ftp的代理服務器。如果代理服務器需要密碼則使用:
–proxy-user=USER設置代理用戶
–proxy-passwd=PASS設置代理密碼
這兩個參數。
使用參數–proxy=on/off 使用或者關閉代理。
附錄:命令格式:
wget [參數列表] [目標軟件、網頁的網址]
-V,–version 顯示軟件版本號然后退出;
-h,–help顯示軟件幫助信息;
-e,–execute=COMMAND 執行一個 “.wgetrc”命令-o,–output-file=FILE 將軟件輸出信息保存到文件;
-a,–append-output=FILE將軟件輸出信息追加到文件;
-d,–debug顯示輸出信息;
-q,–quiet 不顯示輸出信息;
-i,–input-file=FILE 從文件中取得URL;-t,–tries=NUMBER 是否下載次數(0表示無窮次)
-O –output-document=FILE下載文件保存為別的文件名
-nc, –no-clobber 不要覆蓋已經存在的文件
-N,–timestamping只下載比本地新的文件
-T,–timeout=SECONDS 設置超時時間
-Y,–proxy=on/off 關閉代理-nd,–no-directories 不建立目錄
-x,–force-directories 強制建立目錄-http-user=USER設置HTTP用戶
-http-passwd=PASS設置HTTP密碼
-proxy-user=USER設置代理用戶
-proxy-passwd=PASS設置代理密碼-r,–recursive 下載整個網站、目錄(小心使用)
-l,–level=NUMBER 下載層次-A,–accept=LIST 可以接受的文件類型
-R,–reject=LIST拒絕接受的文件類型
-D,–domains=LIST可以接受的域名
-exclude-domains=LIST拒絕的域名
-L,–relative 下載關聯鏈接
-follow-ftp 只下載FTP鏈接
-H,–span-hosts 可以下載外面的主機
-I,–include-directories=LIST允許的目錄
-X,–exclude-directories=LIST 拒絕的目錄
lsof使用##
lsof filename 顯示打開指定 文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字符的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
查看22端口現在運行的情況:lsof -i :22
查看所屬root用戶進程所打開的文件類型為txt的文件:lsof -a -u root -d txt