Linux学习 - 命令运行监测和软件安装
命令运行监测
监测命令的运行时间 time command
ct@ehbio:~$ time sleep 5
real 0m5.003s # 程序开始至结束的时间,包括其它进程占用的时间片和IO时间
user 0m0.001s # 进程真正执行占用CPU的时间,
sys 0m0.002s # 进程在内核中调用所消耗的CPU时间
user+sys是进程实际的CPU时间。如果多线程执行,这个时间可能大于Real。如果IO是瓶颈,则real会大于user+sys (单线程)。
查看正在运行的命令和其资源使用 top
top输出界面第一行主要信息是负载显示,分别是1分钟、5分钟、15分钟前到现在的任务队列的平均长度,一般与CPU数目相当为好,过大系统负载超额,反应慢
在top输出界面输入
u
, 会提示输入用户名,以查看某个用户的进程重点关注的是%MEM列,查看系统占用的内存是否超出
ct@ehbio:~$ top -a #按内存排序显示
top - 09:02:11 up 224 days, 8:34, 30 users, load average: 40, 33, 28
Tasks: 1561 total, 1 running, 1550 sleeping, 0 stopped, 10 zombie
Cpu(s): 0.6%us, 0.2%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2642768880k total, 2094619800k used, 548149080k free, 4310240k buffers
Swap: 86472700k total, 73226016k used, 13246684k free, 193383748k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32527 ct 20 0 2631m 1.7g 1332 S 0.0 0.7 100:34.87 rsem-run-em
29273 ct 20 0 4094m 692m 3396 S 0.0 0.3 45:18.83 java -Xmx1000m
40148 mysql 20 0 21.9g 606m 6116 S 1.3 0.2 2536:06 /usr/sbin/mysqld
31040 ct 20 0 1887m 77m 2604 S 0.3 0.0 180:43.16 [celeryd:
查看系统进程 ps auwx | grep 'process_name'
文件系统和磁盘信息监测
查看系统硬盘大小和分配
ct@ehbio:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 193G 112G 71G 62% /
tmpfs 127G 104K 127G 1% /dev/shm
/dev/sda2 477M 102M 351M 23% /boot
/dev/sda1 200M 264K 200M 1% /boot/efi
/dev/mapper/ehbiobp1 137T 10T 127T 7% /ehbioB
/dev/mapper/ehbiocp1 137T 32T 104.8T 23% /ehbioC
/dev/mapper/ehbiodp1 137T 56T 81T 41% /ehbioD
ct@ehbio:~$ du -sh *
268M blog
4.0K browserMimic.py
5.6G CAFE
386M chip
73M class
4.0K config.file
4.0K do_not_del_r_test.Rmd
7.2M ehbio
20K ehbio_logo.png
12K ehbio_weixin.jpg
4.0K Grid_with_line.Rmd
8.0K heatmap_nonlinear.pdf
8.0K heatmap_nooutlier.pdf
软件安装
不同于windows,Linux下软件安装的方式比较多样,有些也比较复杂。每种安装方式都有自己的优点和局限,也都有可能遇到问题。在我们理解了原理之后,借助谷歌,可以更好地帮助解决问题。
系统包管理器安装
软件安装最方便的、一般也不容易出问题的是利用系统自带的包管理工具,可以解决大部分的依赖问题。
# centos
# 如果长时间没更新,先运行下update
yum update
# 如果不知道软件具体名字,可以先用一个关键字search一下, 选择正式的名字
# 需要注意的是一般的服务器都是64 bit,需要选x86_64版本
yum search soft_name or soft_description
yum search soft_official_name
但也有一些不足,主要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文件中内容如下 ct@ehbio:~$ cat Makefile # first: target名字 # echo "compile first": target对应的命令,任何Linux命令都可以 first: echo "compile first" all: first second echo "compile all" second: echo "compile second" # 直接运行make,会make第一个出现的target ct@ehbio:~$ make echo "compile first" compile first # make first与直接make相同,因为它出现在第一个 ct@ehbio:~$ make first echo "compile first" compile first # all依赖于first, second,因此make all会先执行make first, make second # 然后才是自己所代表的命令 ct@ehbio:~$ 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
2. bioconda
bioconda提供了一个虚拟环境,方便软件的编译安装。具体的我没用过,可以读下 徐洲更的生信软件的好帮手-bioconda。
R包的安装
R包的安装具体看之前的R教程。
需要注意的也是依赖的软件或库文件的版本,同样的Anaconda提供的lib库也可以直接拿来用。
备注
文中凡是提到环境变量的地方都可链接到之前提到的环境变量使用的文章,请务必仔细读两遍,读两遍,读两遍。
如果软件版本或依赖因为系统问题实在解决不了的,用Docker,虚拟出一个新的系统来解决,具体见用了Docker,妈妈再也不担心我的软件安装了 - 基础篇。利用Docker安装的软件,可以运行于任何有Docker环境的系统,对可重复性编程和服务器迁移后软件的安装都很有利。