Linux学习 - 命令运行监测和软件安装

时间:2022-04-26
本文章向大家介绍Linux学习 - 命令运行监测和软件安装,主要内容包括命令运行监测、文件系统和磁盘信息监测、软件安装、源码编译安装、Python包的安装、Anaconda的两个福利、R包的安装、备注、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

命令运行监测

监测命令的运行时间 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点:

  1. 需要根用户的权限。
  2. 如果系统版本老,安装的软件版本也会比较老。使用新版本有时又会发生冲突。
  3. 生物信息学中不少软件不在系统的安装源里面。

解决这些问题,就需要自己去软件官网查找最新的分发包,又有两种可能,一种是分发包直接就是编译好的软件,下载下来设置下可执行属性并放入环境变量就可以运行了,如blastbowtie这样的工具。

另一种则是需要从源码编译安装,下面主要讲解下这个。

源码编译安装

源码编译经典的三部曲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_nameconda install pakckage_name就可以了。
  • 这里唯一需要注意的就是确认使用的pythonpip确实是Anaconda安装的pythonpip

Anaconda的两个福利

  1. 头文件和库文件库

这是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环境的系统,对可重复性编程和服务器迁移后软件的安装都很有利。