Linux 入门小教程(续)
在上一个小教程中,我们学习了目录的“增”、“删”、“改”、“查”和文件的“增”、“删”、“改”、“查”。
而最后我们通过 ls -al
命令看到了类似这样的一些东西。
$ ls -al
total 8
drwxr-xr-x 1 panyq panyq 4096 Feb 8 12:53 .
drwxr-xr-x 1 root root 4096 Feb 8 12:46 ..
-rw------- 1 panyq panyq 128 Feb 8 12:53 .bash_history
-rw-r--r-- 1 panyq panyq 220 Feb 8 12:46 .bash_logout
-rw-r--r-- 1 panyq panyq 3771 Feb 8 12:46 .bashrc
drwxr-xr-x 1 panyq panyq 4096 Feb 8 12:46 .landscape
drwxr-xr-x 1 panyq panyq 4096 Feb 8 12:51 .local
-rw-r--r-- 1 panyq panyq 0 Feb 8 12:46 .motd_shown
-rw-r--r-- 1 panyq panyq 807 Feb 8 12:46 .profile
在输出结果中,除了第一行 total 8
以外,其余每一行都展现了当前目录下的一个文件或目录的详细信息。
以第 6 行为例,它可以被这样解读。
权限信息 | 连接数 | 所有者 | 所属组 | 大小(字节数) | 最后修改时间 | 名字 |
---|---|---|---|---|---|---|
-rw-r--r-- |
1 |
panyq |
panyq |
3771 |
Feb 8 12:46 |
.bashrc |
接下来简要介绍一下 Linux 的权限。
第一行的
total 8
和第二列的连接数有点复杂,这里就不讲了。😜
文件的权限
让我们 touch
一个空文件,并用 ls -l
查看它的详细信息。
$ touch abc
$ ls -l abc # 只列出 abc 文件的详细信息。
-rw-r--r-- 1 panyq panyq 0 Feb 11 10:23 abc
让我们把输出中的权限信息 -rw-r--r--
放大一下。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
- |
r |
w |
- |
r |
- |
- |
r |
- |
- |
第一个字符标识了该文件的类型(例如,普通文件是 -
,目录是 d
)。
第 2、3、4 个字符标识了所有者的权限,依次为读(read)、写(write)和执行(execute)。
第 5、6、7 个字符标识了所属组的权限。(顺序同上)
第 8、9、10 个字符标识了其他人的权限。
所以,把上面这串字符翻译成普通话就是:“这是一个普通文件,如果你是它的所有者,那么你可以读或写这个文件,但不能执行它。如果你不是它的所有者,那么这个文件对你来说是只读的。”
众所周知,Linux 是一个多用户的操作系统,所以为了保证每个用户的文件不会轻易地被别的用户修改,新建文件的默认权限就被设成了“只有所有者能读写,其他人只能读”了。
那么什么是执行权限呢?
在 Window 中,我们常常能碰到 .exe
结尾的可执行文件,它们通常是二进制的,可以被机器当作程序运行的文件。在 Linux 中也有这样的二进制地文件,但是为了安全起见,让机器运行这样的二进制文件也是需要权限的。
Linux 自带了许多可执行文件,比如位于 /usr/bin/
目录下的 ls
文件。
$ ls /usr/bin/ls -l
-rwxr-xr-x 1 root root 142144 Sep 5 2019 /usr/bin/ls
$
是的没错,这个 ls
文件就是 ls
命令的可执行文件,当我们键入 ls
命令时,系统就会去找这个 ls
文件,执行它,并打印它的输出结果。
通过查看它的权限信息,我们了解到:对于所有的用户,这个 ls
文件都是可执行的。
目录的权限与普通文件的权限有所不同,鸟哥曾把目录比喻为抽屉,把“读”比喻为“查看抽屉外面贴的标签”,把“写”比喻为“处置抽屉里的东西”,把“执行”比喻为“打开抽屉”。详情 -> 点这儿
关于权限的内容先告一段落,现在让我们学学如何装软件。
软件安装
如同 Windows 10 有 Microsoft Store 一样,大部分 Linux 发行版都自带了像应用商店般的软件包管理程序。
我们所安装的发行版为 Ubuntu,它的“应用商店”叫 apt
(Advanced Packaging Tools)。
apt
命令的用法十分简单,想要安装软件,只需键入 apt install <软件名字>
即可。
让我们来试试安装一个叫 tree
的软件。
$ apt install tree
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
$
报错了,我们可以从错误信息中的 Permission denied
得知我们没有相应的权限。
就如同在 Windows 中安装软件常常需要管理员身份一样,在调用 apt
安装软件时,也需要管理员权限。
在错误信息的最后,系统提示我们 are you root?
,root
即为 Linux 中管理员账户的名字。
管理员也被称为 Superuser,在 Linux 中,我们可以用 sudo
命令(superuser do)临时获得管理员权限。
让我们再试一次,这次在命令的最前面加上 sudo
。(过程中会要求输入密码,就是那个安装 WSL 时设置的密码啦。😉)
$ sudo apt install tree
[sudo] password for panyq: # 在此输入密码
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package tree
$
嗯,虽然这回我们有管理员权限了,但是又报错了。原来,我们想要安装的软件都放在互联网上的软件仓库里,要想用 apt
安装软件,需要先让 apt
知道远程的软件仓库里有哪些软件,它才能帮我们安装,所以我们需要更新一下软件源。
更新软件源的命令是 apt update
。(也需要管理员权限)
但如果就这样更新软件源,apt
就会去连接 Ubuntu 官方的服务器,这个服务器在国外,从上面下载软件的速度会很慢。
所幸,国内有许多的软件源镜像站,比如清华大学的 TUNA。
要想让 apt
去连接 TUNA 而不是国外的服务器,我们需要进行一些设置。(以下内容来自 TUNA 的教程)
首先,我们需要以管理员身份,编辑软件源配置文件。
$ sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak # 备份下原始的配置文件。
$ sudo nano /etc/apt/sources.list # 用 nano 编辑配置文件
然后把配置信息复制进去。(复制后用鼠标右键在黑框框内点一下即可粘贴)
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
保存退出后再用 sudo apt update
命令更新软件源。
$ sudo apt update
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease [265 kB]
# 此处省略很多行……
Get:46 https://mirrors.tuna.tsinghua.edu.cn/ubuntu focal-security/multiverse amd64 c-n-f Metadata [284 B]
Fetched 19.9 MB in 5s (3863 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
162 packages can be upgraded. Run 'apt list --upgradable' to see them.
$
这样,软件源就更新好了,现在用下面的命令安装 tree
。
sudo apt install tree
回车后安装会自动进行,当命令提示符再次出现时,安装就完成了。
那么 tree
是个做什么用的软件呢?请看下面这个例子。
$ mkdir outer
$ mkdir outer/inner
$ touch outer/inner/a_file
$ tree outer
outer
└── inner
└── a_file
1 directory, 1 file
$
对,tree
就是一个把文件和目录的结构以树形图的形式打印出来的小软件。
要卸载软件也很简单,只需
sudo apt remove <要卸载的软件名>
即可。
但是,不是所有软件都能在 apt
的软件源里找到的,有些软件需要我们手动从网上下载下来。所以接下来以 BLAST+ 和 PLINK 为例,介绍一下如何下载和解压网上的软件压缩包。
下载压缩包
从网上(Web)获取(Get)压缩包,最简单的方法是使用 wget
命令,格式如下。
wget <下载链接>
让我们用它来试着下载 BLAST+ 和 PLINK。
下载完成后,用 ls
即可发现当前目录下多了两个文件。
$ ls
ncbi-blast-2.11.0+-x64-linux.tar.gz plink_linux_x86_64_20201019.zip
一个以 .tar.gz
结尾,另一个以 .zip
结尾。这是两个不同格式的安装包,要用不同的命令进行解压。
首先是 ncbi-blast-2.11.0+-x64-linux.tar.gz
,要用 tar
命令进行解压。
$ tar -xf ncbi-blast-2.11.0+-x64-linux.tar.gz
$ # 没有进度条。提示符再次出现时,解压就完成了。
这里,-x
表示我们要从一个压缩包中提取(extract)文件,-f
选项则告诉 tar
要解压的文件的路径是 ncbi-blast-2.11.0+-x64-linux.tar.gz
。
注意,
-f
选项必须紧跟压缩包的路径,即不能写成tar -fx ncbi-blast-2.11.0+-x64-linux.tar.gz
(之间隔了个-x
选项)。
解压完成后,当前目录下就会多出一个 ncbi-blast-2.11.0+
目录,让我们用刚装的 tree
看看里头是啥。
$ tree ncbi-blast-2.11.0+
ncbi-blast-2.11.0+
├── ChangeLog
├── LICENSE
├── README
├── bin
│ ├── blast_formatter
│ ├── blastdb_aliastool
│ ├── blastdbcheck
│ ├── blastdbcmd
│ ├── blastn
│ ├── blastp
│ ├── blastx
│ ├── cleanup-blastdb-volumes.py
│ ├── convert2blastmask
│ ├── deltablast
│ ├── dustmasker
│ ├── get_species_taxids.sh
│ ├── legacy_blast.pl
│ ├── makeblastdb
│ ├── makembindex
│ ├── makeprofiledb
│ ├── psiblast
│ ├── rpsblast
│ ├── rpstblastn
│ ├── segmasker
│ ├── tblastn
│ ├── tblastx
│ ├── update_blastdb.pl
│ └── windowmasker
├── doc
│ └── README.txt
└── ncbi_package_info
2 directories, 29 files
$
嗯,可执行的二进制(Binary)文件都在其中的 bin
目录下了,我们我们只需输入这些软件的路径,即可调用这些软件。
$ ncbi-blast-2.11.0+/bin/blastn -h # 用 -h 选项查看使用说明。
USAGE
blastn [-h] [-help] [-import_search_strategy filename]
[-export_search_strategy filename] [-task task_name] [-db database_name]
[-dbsize num_letters] [-gilist filename] [-seqidlist filename]
# 此处省略很多行。
[-sorthsps sort_hsps] [-max_target_seqs num_sequences]
[-num_threads int_value] [-remote] [-version]
DESCRIPTION
Nucleotide-Nucleotide BLAST 2.11.0+
Use '-help' to print detailed descriptions of command line arguments
$
BLAST+ 装好了,现在来看 PLINK。PLINK 的安装包是一个在 Windows 中常见的 .zip
格式的压缩包,在 Linux 中,并没有软件可以直接解压它,我们得安装 unzip
软件。
sudo apt install unzip
然后再用 unzip
解压压缩包。
panyq@CFDJH:~$ unzip plink_linux_x86_64_20201019.zip -d plink
Archive: plink_linux_x86_64_20201019.zip
inflating: plink/plink
inflating: plink/LICENSE
inflating: plink/toy.ped
inflating: plink/toy.map
inflating: plink/prettify
panyq@CFDJH:~$
这里,-d
参数的作用是让 unzip
解压到指定的目录下(不然就都解压到当前目录下了😉)。
注:
tar
也可以指定解压的路径,比如可以写成这样:tar -xf ncbi-blast-2.11.0+-x64-linux.tar.gz -C blast
(blast
目录要事先存在)。
再用 tree
看看解压出的内容。
$ tree plink
plink
├── LICENSE
├── plink
├── prettify
├── toy.map
└── toy.ped
0 directories, 5 files
$
这个在 plink
目录下的 plink
文件就是 PLINK 的二进制可执行文件了,让我们来看看它的使用帮助。
$ plink/plink -h
PLINK v1.90b6.21 64-bit (19 Oct 2020) www.cog-genomics.org/plink/1.9/
(C) 2005-2020 Shaun Purcell, Christopher Chang GNU General Public License v3
plink <input flag(s)...> [command flag(s)...] [other flag(s)...]
plink --help [flag name(s)...]
Commands include --make-bed, --recode, --flip-scan, --merge-list,
--write-snplist, --list-duplicate-vars, --freqx, --missing, --test-mishap,
--hardy, --mendel, --ibc, --impute-sex, --indep-pairphase, --r2, --show-tags,
--blocks, --distance, --genome, --homozyg, --make-rel, --make-grm-gz,
--rel-cutoff, --cluster, --pca, --neighbour, --ibs-test, --regress-distance,
--model, --bd, --gxe, --logistic, --dosage, --lasso, --test-missing,
--make-perm-pheno, --tdt, --qfam, --annotate, --clump, --gene-report,
--meta-analysis, --epistasis, --fast-epistasis, and --score.
"plink --help | more" describes all functions (warning: long).
$
下载、解压软件压缩包的方法就介绍这么多。可以看出,比起用 apt
一键安装,手动下载解压要麻烦不少,所以接下来介绍一个安装生信常用软件的利器——conda。
conda 和 bioconda
就如同安卓手机可以安装第三方应用商店一样,在 Linux 中也可以安装别的软件包管理程序,conda 就是这样的一个东西。
conda 最大的特点是可以创建虚拟环境。比如,我们想尝试两个不同的数据分析 protocol,但一个要求 python 的版本为 3.8,另一个要求 python 的版本为 3.2,我们就可以创建两个虚拟环境,将不同版本的 python 隔离开来,方便管理。
也正因如此,conda 受到了许多生信行业人员的青睐。为了能方便地安装各种生信软件,bioconda 应运而生。bioconda 是 conda 的一个 “channel”,囊括了许多的生信软件,这使得我们能通过 conda 一键安装各种常用的生信软件。
安装 conda
Miniconda 是一个包含着 conda 的安装包,它只包含 conda 以及 python 等 conda 的依赖软件,下面介绍下它的安装方法。
首先,在 Miniconda 的官网找到适用于 Linux 的安装包,复制它的下载链接,然后下载它。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
安装包是一个 bash 脚本文件,它可以被这样打开。
$ bash Miniconda3-latest-Linux-x86_64.sh
Welcome to Miniconda3 py38_4.9.2
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
然后就进入安装界面了,根据提示按下回车,安装程序会调用一个叫 more
的文档查看器软件来显示用户协议,按住空格即可快速跳过。然后会询问是否接受用户协议。
Do you accept the license terms? [yes|no]
[no] >>>
输入 yes
后回车。然后会询问安装路径。
Miniconda3 will now be installed into this location:
/home/panyq/miniconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/home/panyq/miniconda3] >>>
这里直接回车,按默认的来。之后还会提示是否初始化,yes
即可😉。
安装完成后重启 WSL,命令提示符就变成了像这样的东西。
(base) panyq@CFDJH:~$
最左侧的 (base)
告诉我们,一个叫 base
的 conda 虚拟环境已被激活了,让我们再 ls
一下。
(base) panyq@CFDJH:~$ ls
Miniconda3-latest-Linux-x86_64.sh miniconda3
这个 miniconda3 目录就是刚才安装的内容了。
配置 conda 的软件源。
就如同配置 apt
的软件源一样,我们也可以通过修改配置文件让 conda
到 TUNA 镜像站下载软件。
在 ~
目录下新建一个叫 .condarc
的文件,然后把这些内容复制进去(内容修改自 TUNA 的教程)。
channels:
- bioconda
- conda-forge
- defaults
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
保存退出即可。
创建环境和安装软件
经过刚才的配置,我们就能用 conda
从 bioconda channel 中一键安装软件了,为了方便管理新安装的软件,让我们用下面的命令创建一个虚拟环境。
conda create --name temp
--name
参数用来指定虚拟环境的名字。创建完成后,让我们根据提示,激活这个环境。
(base) panyq@CFDJH:~$ conda activate temp
(temp) panyq@CFDJH:~$
提示符最左侧发生了变化,说明 temp
虚拟环境被激活了。
这时,执行
conda deactivate
命令即可返回 base 环境,再来一次就会退出 base 环境了。
接下来让我们在 temp
虚拟环境中安装 BLAST+ 和 PLINK,用下面的命令即可。
conda install blast plink
回车后,conda 会开始计算需要安装哪些依赖,等它计算完成后,只需一个 y
确认,安装就自动进行了。
安装完成后,我们可以用 conda list
命令列出当前环境下安装的所有软件。
(temp) panyq@CFDJH:~$ conda list
# packages in environment at /home/panyq/miniconda3/envs/temp:
#
# Name Version Build Channel
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 1_gnu conda-forge
blast 2.9.0 h20b68b9_1 bioconda
boost 1.68.0 py37h8619c78_1001 conda-forge
boost-cpp 1.68.0 h11c811c_1000 conda-forge
bzip2 1.0.8 h7f98852_4 conda-forge
ca-certificates 2020.12.5 ha878542_0 conda-forge
certifi 2020.12.5 py37h89c1867_1 conda-forge
gmp 6.2.1 h58526e2_0 conda-forge
gnutls 3.6.13 h79a8f9a_0 conda-forge
icu 58.2 hf484d3e_1000 conda-forge
ld_impl_linux-64 2.35.1 hea4e1c9_2 conda-forge
libblas 3.9.0 8_openblas conda-forge
libcblas 3.9.0 8_openblas conda-forge
libffi 3.3 h58526e2_2 conda-forge
libgcc-ng 9.3.0 h2828fa1_18 conda-forge
libgfortran-ng 9.3.0 hff62375_18 conda-forge
libgfortran5 9.3.0 hff62375_18 conda-forge
libgomp 9.3.0 h2828fa1_18 conda-forge
liblapack 3.9.0 8_openblas conda-forge
libopenblas 0.3.12 pthreads_h4812303_1 conda-forge
libstdcxx-ng 9.3.0 h6de172a_18 conda-forge
ncurses 6.2 h58526e2_4 conda-forge
nettle 3.4.1 h1bed415_1002 conda-forge
numpy 1.20.1 py37haa41c4c_0 conda-forge
openssl 1.1.1i h7f98852_0 conda-forge
pcre 8.44 he1b5a44_0 conda-forge
perl 5.26.2 h36c2ea0_1008 conda-forge
perl-archive-tar 2.32 pl526_0 bioconda
perl-carp 1.38 pl526_3 bioconda
perl-common-sense 3.74 pl526_2 bioconda
perl-compress-raw-bzip2 2.087 pl526he1b5a44_0 bioconda
perl-compress-raw-zlib 2.087 pl526hc9558a2_0 bioconda
perl-exporter 5.72 pl526_1 bioconda
perl-exporter-tiny 1.002001 pl526_0 bioconda
perl-extutils-makemaker 7.36 pl526_1 bioconda
perl-io-compress 2.087 pl526he1b5a44_0 bioconda
perl-io-zlib 1.10 pl526_2 bioconda
perl-json 4.02 pl526_0 bioconda
perl-json-xs 2.34 pl526h6bb024c_3 bioconda
perl-list-moreutils 0.428 pl526_1 bioconda
perl-list-moreutils-xs 0.428 pl526_0 bioconda
perl-pathtools 3.75 pl526h14c3975_1 bioconda
perl-scalar-list-utils 1.52 pl526h516909a_0 bioconda
perl-types-serialiser 1.0 pl526_2 bioconda
perl-xsloader 0.24 pl526_0 bioconda
pip 21.0.1 pyhd8ed1ab_0 conda-forge
plink 1.90b6.18 h516909a_0 bioconda
python 3.7.9 hffdb5ce_0_cpython conda-forge
python_abi 3.7 1_cp37m conda-forge
readline 8.0 he28a2e2_2 conda-forge
setuptools 49.6.0 py37h89c1867_3 conda-forge
sqlite 3.34.0 h74cdb3f_0 conda-forge
tk 8.6.10 h21135ba_1 conda-forge
wheel 0.36.2 pyhd3deb0d_0 conda-forge
xz 5.2.5 h516909a_1 conda-forge
zlib 1.2.11 h516909a_1010 conda-forge
(temp) panyq@CFDJH:~$
这里头就有 blast
和 plink
,以及所有的依赖软件,是不是很方便?😉
卸载软件和删除环境
这里就直接贴命令啦😜。
conda remove plink # 卸载当前环境中的 PLINK。
conda remove --name temp blast # 卸载 temp 环境中的 BLAST+。
conda remove --name temp --all # 删除 temp 环境,以及其中的所以软件。
其他常用指令可通过 Cheat sheet 快速查询。
这就是有关软件安装的全部内容啦。