Linux命令運行監測和軟件安裝

監測命令的運行時間 time command
$ time sleep 5
real    0m5.003s # 程序開始至結束的時間,包括其它進程佔用的時間片和IO時間
user    0m0.001s # 進程真正執行佔用CPU的時間
sys    0m0.002s     # 進程在內核中調用所消耗的CPU時間
user+sys是進程實際的CPU時間。若是多線程執行,這個時間可能大於Real。若是IO是瓶頸,則real會大於user+sys (單線程)。
 
查看正在運行的命令和其資源使用 top
統計信息區
第一行:任務隊列信息,與uptime命令執行結果相同
  • 17:32:34:系統當前時間
  • up 3 days, 8:04:主機已運行時間
  • 5 users:用戶鏈接數(不是用戶數,who命令)
  • load average: 0.09, 0.12, 0.19:系統平均負載,統計最近1,5,15分鐘的系統平均負載
補充:uptime -V可查詢版本
 
第二行:進程信息
  • Tasks: 287 total:進程總數
  • 2 running:正在運行的進程數
  • 285 sleeping:睡眠的進程數
  • 0 stopped:中止的進程數
  • 0 zombie:殭屍進程數
第三行:CPU信息(當有多個CPU時,這些內容可能會超過兩行)
  • 1.5 us:用戶空間所佔CPU百分比
  • 0.9 sy:內核空間佔用CPU百分比
  • 0.0 ni:用戶進程空間內改變過優先級的進程佔用CPU百分比
  • 97.5 id:空閒CPU百分比
  • 0.2 wa:等待輸入輸出的CPU時間百分比
  • 0.0 hi:硬件CPU中斷佔用百分比
  • 0.0 si:軟中斷佔用百分比
  • 0.0 st:虛擬機佔用百分比
第四行:內存信息(與第五行的信息相似與free命令)
  • 8053444 total:物理內存總量
  • 7779224 used:已使用的內存總量
  • 274220 free:空閒的內存總量(free+used=total)
  • 359212 buffers:用做內核緩存的內存量

第五行:swap信息python

  • 8265724 total:交換分區總量
  • 33840 used:已使用的交換分區總量
  • 8231884 free:空閒交換區總量
  • 4358088 cached Mem:緩衝的交換區總量,內存中的內容被換出到交換區,而後又被換入到內存,可是使用過的交換區沒有被覆蓋,交換區的這些內容已存在於內存中的交換區的大小,相應的內存再次被換出時可沒必要再對交換區寫入。
進程信息區
  • PID:進程id
  • PPID:父進程id
  • RUSER:Real user name(看了好多,都是這樣寫,也不知道和user有什麼區別,歡迎補充此處)
  • UID:進程全部者的id
  • USER:進程全部者的用戶名
  • GROUP:進程全部者的組名
  • TTY:啓動進程的終端名。不是從終端啓動的進程則顯示爲?
  • PR:優先級
  • NI:nice值。負值表示高優先級,正值表示低優先級
  • P:最後使用的CPU,僅在多CPU環境下有意義
  • %CPU:上次更新到如今的CPU時間佔用百分比
  • TIME:進程使用的CPU時間總計,單位秒
  • TIME+:進程所使用的CPU時間總計,單位1/100秒
  • %MEM:進程使用的物理內存百分比
  • VIRT:進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
  • SWAP:進程使用的虛擬內存中被被換出的大小
  • RES:進程使用的、未被換出的物理內存的大小
  • CODE:可執行代碼佔用的物理內存大小
  • DATA:可執行代碼之外的部分(數據段+棧)佔用的物理內存大小
  • SHR:共享內存大小
  • nFLT:頁面錯誤次數
  • nDRT:最後一次寫入到如今,被修改過的頁面數
  • S:進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/中止,Z=殭屍進程)
  • COMMAND:命令名/行
  • WCHAN:若該進程在睡眠,則顯示睡眠中的系統函數名
  • Flags:任務標誌
默認狀況下,只顯示比較重要的列
 
文件系統和磁盤信息監測
查看系統硬盤大小和分配
df -h
du -sh *
軟件安裝
不一樣於windows,Linux下軟件安裝的方式比較多樣,有些也比較複雜。每種安裝方式都有本身的優勢和侷限,也都有可能遇到問題。在咱們理解了原理以後,藉助谷歌,能夠更好地幫助解決問題。
系統包管理器安裝
軟件安裝最方便的、通常也不容易出問題的是利用系統自帶的包管理工具,能夠解決大部分的依賴問題。
但也有一些不足,主要3點:
  • 須要根用戶的權限。
  • 若是系統版本老,安裝的軟件版本也會比較老。使用新版本有時又會發生衝突。
  • 生物信息學中很多軟件不在系統的安裝源裏面。
解決這些問題,就須要本身去軟件官網查找最新的分發包,又有兩種可能,一種是分發包直接就是編譯好的軟件,下載下來設置下可執行屬性並放入環境變量就能夠運行了,如blast或bowtie這樣的工具。
 
另外一種則是須要從源碼編譯安裝,下面主要講解下這個。
 
源碼編譯安裝
源碼編譯經典的三部曲configure, make, make install。若是不出問題,一步步執行下來就安裝好了。但出了問題,就不是比較容易解決的。若是知道這背後的機制,對解決問題會有很大幫助的。
 
configure是檢查系統的庫文件、類文件、依賴軟件是否存在以及它們的版本是否知足需求,並根據實際檢測結果生成Makefile的工具。通常是一堆bash命令的組合。一般也須要在這一步配置一些參數。最經常使用的就是指定軟件的安裝目錄--prefix=/home/ct/soft/specific_name。
 
make則是具體的編譯過程。編譯的語句都寫在了Makefile中。make默認編譯Makefile中出現的第一個target,也能夠指定target編譯,並根據Makefile的設置方式依次編譯全部依賴的東西。
 
Makefile一般的格式和佈局以下
# 假設當前文件夾下Makefile文件中內容以下 
# first: target名字
# echo "compile first": target對應的命令,任何Linux命令均可以
$ cat Makefile
first:
    echo "compile first"
all: first second
    echo "compile all"
second:
    echo "compile second"
 
# 直接運行make,會make第一個出現的target
$ make
echo "compile first"
compile first
# make first與直接make相同,由於它出如今第一個 
$ make first
echo "compile first"
compile first
# all依賴於first, second,所以make all會先執行make first, make second
# 而後纔是本身所表明的命令 
$ make all
echo "compile first"
compile first
echo "compile second"
compile second
echo "compile all"
compile all
有些軟件的安裝,在執行完make後就得到了可執行程序,能夠跳過make install的過程,只須要放入環境變量就能夠運行了。但部分軟件還須要一些依賴關係,因此須要執行make install纔算完成了完整的安裝。
  • make install一般是拷貝make編譯出來的可執行文件或者依賴的庫文件(若是有的話)到configure時的--prefix指定的目錄下。
  • 安裝好的軟件放入環境變量, 就能夠快樂的運行了。
兩點注意:
  • 從源碼編譯最難解決的問題就是依賴的庫文件、頭文件、依賴軟件的缺失或版本不匹配,沒有統一的解決辦法,原則就是缺啥補啥。後面提到的Anaconda,會對庫文件的依賴提供一個簡便的解決辦法。
  • 三部曲每一步的執行,屏幕上都會輸出比較多的信息,必定仔細看最後有沒有ERROR類的字樣,對判斷軟件有無安裝成功和下一步要怎麼解決問題會頗有幫助。
Linux包的安裝通用方式主要是這些,後面還會提到兩種虛擬安裝方式,都是爲了簡化安裝而提出的。
 
Python包的安裝
在沒有Anaconda(或其前身canopy)出現以前,Python包以其管理混亂、安裝困難著稱。有了Anaconda後,不僅python包的安裝簡單了,其它軟件的安裝也都方便了 (詳見後面Anaconda的兩個福利)。
  • 首先下載Anaconda的安裝包 https://www.continuum.io/downloads。
  • Anaconda的安裝包作的很人性化,一個bash腳本,只要運行bash Anacond*x86_64.sh,而後按照提示操做就能夠了。
  • 安裝好後,設置或刷新下環境變量就可使用了。
  • 此後再安裝python的包只須要執行pip install pakcage_name或conda install pakckage_name就能夠了。
  • 這裏惟一須要注意的就是確認使用的python或pip確實是Anaconda安裝的python或pip。
  • which python查看使用的python命令。
  • 若是使用的仍是系統默認的python,則須要檢查下環境變量的設置。
Anaconda的兩個福利
一、頭文件和庫文件庫
這是Anaconda安裝後的目錄結構
bin   envs  Examples  imports  lib    LICENSE.txt  pkgs     share  var
conda-meta  etc   gcc include  lib64  mkspecsplugins  ssl
其中lib目錄下,一部分是依賴的動態連接庫, .so文件;這也是在源碼編譯時最多見的攔路虎。一般,只須要把這個目錄放入環境變量LD_LIBRARY_PATH裏面好比export LD_LIBARY_PATH=${LD_LIBARY_PATH}:anaconda_path/lib就能夠解決問題。
cairo                    libitm.a              libQtScript.so.4
cmake                    libitm.la             libQtScript.so.4.8
engines                  libitm.so             libQtScript.so.4.8.7
gcc                      libitm.so.1           libQtScriptTools.la
gcj-4.8.5-14             libitm.so.1.0.0       libQtScriptTools.prl
glib-2.0                 libitm.spec           libQtScriptTools.so
libargtable2.a           libjpeg.a             libQtScriptTools.so.4
libargtable2.la          libjpeg.la            libQtScriptTools.so.4.8
libargtable2.so          libjpeg.so            libQtScriptTools.so.4.8.7
libargtable2.so.0        libjpeg.so.8          libQtSql.la
libargtable2.so.0.1.8    libjpeg.so.8.4.0      libQtSql.prl
libasan.a                libmkl_avx2.so        libQtSql.so
libasan.la               libmkl_avx512_mic.so  libQtSql.so.4
libasan_preinit.o        libmkl_avx512.so      libQtSql.so.4.8
libasan.so               libmkl_avx.so         libQtSql.so.4.8.7
二、bioconda
bioconda提供了一個虛擬環境,方便軟件的編譯安裝。
 
R包的安裝
須要注意的也是依賴的軟件或庫文件的版本,一樣的Anaconda提供的lib庫也能夠直接拿來用。
相關文章
相關標籤/搜索