监测命令的运行时间 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:任务标志
默认状况下,只显示比较重要的列
文件系统和磁盘信息监测
查看系统硬盘大小和分配
软件安装
不一样于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库也能够直接拿来用。