小时候最开始接触电脑的时候,大多数人应该和我一样最先使用的便是Windows。凭着小时候好奇和贪玩的特点,加上Windows系统本身基本操作就比较容易上手,也没人教或者专门学习,便学会了“玩电脑”。后来上大学好久后,换了一台Mac,换之前因为害怕接触新的系统用不习惯犹豫了好久,不过用了两年以后,也慢慢适应并发现了Mac系统的简洁高效。而开始看到一些生信的文章后,Linux系统又一遍遍地出现在我的眼前。前两者虽然有所不同,但是依靠鼠标点击便可完成很多基本功能,而Linux的命令行却让人望而生畏。希望自己也可以像小时候玩电脑那样,从陌生走向熟悉。
什么是Linux
人们在解释Linux的时候总会拿Windows和Mac和它类比,它也是一种操作系统。它的创始人叫Linus Torvalds,因为小时候去动物园曾被企鹅咬了一口所以企鹅便成了这个系统的吉祥物。每个介绍Linux的文章都会提到它很突出的几个特点:
- 开源
- 免费
- 稳定
- 安全
提到Linux和Windows和Mac最直观的不同之处,我想大概是我们没有了熟悉的桌面,我们与计算机对话的工具变成了命令行。当然,随着Windows操作系统的普及,Linux也有图形化桌面的产生,被称为桌面环境。
为什么生物信息需要Linux
自己在刚刚看到Linux的时候也会有这些疑惑,因为感觉Windows和Mac已经这么成熟了,为什么还需要另找一个新的操作系统。在知乎和生信星球上看到的多数答案,主要是因为:
- 系统开源、免费
- 可以通过命令行进行批量处理
- 比较节约资源
- 许多生物分析软件都基于Linux
如何召唤Linux
既然是一个操作系统,就要有一个电脑(或者服务器)去运行这个系统,常见的方式有:
- 单纯安装
- Windows中的子系统
- 虚拟机或双系统
- 本地服务器
- 云服务器(本次必修课!)
按照教程中的方式登录一下云服务器试试看,因为是mac所以直接使用了终端,登录方式简单粗暴:
- ssh 用户名@ip地址,例如:ssh bioXX@XXX.XX.XXX.XXX
- 根据提示登录后,输入密码,最终便可成功登录,会显示:
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-54-generic x86_64)
Linux基本操作(今日重点)
- pwd:显示当前工作目录,类比windows或者mac的话就是告诉你你现在的工作界面在哪一个文件夹里。其中显示的结果为一个绝对工作路径(以正斜线/作为开头),从而清晰表明用户所在的位置:
bio06@VM-0-10-ubuntu:~$ pwd
/home/bio06
-
mkdir:创建一个新的目录,类似于windows当中的新建文件夹。文件的格式为
mkdir Directory
即可,例如:
bio06@VM-0-10-ubuntu:~$ mkdir New_Dir #创建一个新目录
bio06@VM-0-10-ubuntu:~$ ls -ld New_Dir
drwxrwxr-x 2 bio06 bio06 4096 Sep 26 18:55 New_Dir
在这里我们创建了一个名为New_Dir的新目录,我们可以用ls 命令看一下新目录的相关信息,结果是以d开头的说明这是一个新的目录,而不是一个其他格式的文件。但如果我们想像俄罗斯套娃一样批量创建文件夹,则需要加入-p参数,例如:
bio06@VM-0-10-ubuntu:~$ mkdir -p Dir1/Dir2/Dir3
bio06@VM-0-10-ubuntu:~$ ls -R Dir1
Dir1:
Dir2
Dir1/Dir2:
Dir3
Dir1/Dir2/Dir3:
上面的例子表示为:目录1包含了目录2,目录2包含了目录3这样的关系,其中目录1可被称为目录2的父目录。
- rmdir:删除一个空目录,如果一个目录当中还存有其他文件的话,则默认情况下是无法顺利删除的,这也在一定程度上保证了删除文件时的安全性。
bio06@VM-0-10-ubuntu:~$ mkdir New_Dir #创建一个新目录
bio06@VM-0-10-ubuntu:~$ ls -ld New_Dir
drwxrwxr-x 2 bio06 bio06 4096 Sep 26 19:19 New_Dir
bio06@VM-0-10-ubuntu:~$ rmdir New_Dir #删除空目录New_Dir
bio06@VM-0-10-ubuntu:~$ ls -ld New_Dir
ls: cannot access 'New_Dir': No such file or directory
- ls:显示系统中有哪些文件,你可以在脑子中将它想象成在windows中你打开一个文件夹后,各种大小、类型的文件以图标的形式展现在你面前的样子。我们还可以加上不同的参数,以根据需要更方便地进行展示:
bio06@VM-0-10-ubuntu:~$ pwd #显示当前工作目录
/home/bio06
bio06@VM-0-10-ubuntu:~$ ls -l #以长列表形式显示当前目录下文件,为0个
total 0
bio06@VM-0-10-ubuntu:~$ ls -al #加-a参数显示隐藏文件
total 32
drwxr-xr-x 4 bio06 bio06 4096 Sep 26 19:20 .
drwxr-xr-x 15 root root 4096 Sep 26 09:43 ..
-rw------- 1 bio06 bio06 868 Sep 26 19:30 .bash_history
-rw-r--r-- 1 bio06 bio06 220 Apr 5 2018 .bash_logout
-rw-r--r-- 1 bio06 bio06 3771 Apr 5 2018 .bashrc
drwx------ 2 bio06 bio06 4096 Sep 26 18:39 .cache
drwx------ 3 bio06 bio06 4096 Sep 26 18:38 .gnupg
-rw-r--r-- 1 bio06 bio06 807 Apr 5 2018 .profile
其中可能用到的一些参数或者工具包括:
-F:区分文件和目录(名字后面带/的为目录,带*的为可执行文件)
-a:显示隐藏文件(通常是以点.开头的文件)
-R:递归选项,即一层一层详细地进行展示
-l:长列表
-d:只显示目录本身的信息,而不列出其中的内容
问号(?):过滤器,代表1个字符,如ls -l my_scr?pt
星号 ( * ):过滤器,代表0或多个字符,如ls -l my_scr*
中括号:可用于文件匹配扩展,如ls -l my_scr[ai]pt
,代表从字母a或i选择一个进行匹配;如果是ls -l my_scr[a-i]pt
则代表从字母a到字母i;如果是ls -l my_scr[!a]pt
则代表排除字母a后再进行匹配注意:这些参数既可以分开书写,如
ls -R -F
,也可以合在一起书写,如ls -RF
而长列表格式因为良好的可读性而比较常用,展示的结果为:
bio06@VM-0-10-ubuntu:~$ mkdir New_Dir #创建一个新目录
bio06@VM-0-10-ubuntu:~$ ls -ld New_Dir
drwxrwxr-x 2 bio06 bio06 4096 Sep 26 18:55 New_Dir
这当中包含了关于该文件的大量信息:
文件类型:目录(d)、文件(-)、字符文件(c)、设备文件(b)、链接(l)
文件的权限:可读(r)、可写(w)、可执行(x)、无权限(-),其中这三个字母重复3次,如rwx/rwx/r-x,分别代表文件属主、属组成员、其他用户的权限
硬链接数目:如例子中的2
属主的用户名:如bio06
属组的组名:如bio06
文件的大小:以字节为单位,如4096
上次的修改时间:如Sep 26 18:55
文件名或目录名:如New_Dir
-
rm:删除文件或者目录,格式很简单为
rm 文件名
,但对于删除这项危险刺激的操作来讲配合参数才更高效或更安全:
-i:在每次删除(或叫做移除)前进行询问,就像离婚前问一句你真的要离婚吗,按y即可确认删除
-r:递归,多级目录一并删除,可配合-i参数使用,如rm -ri Dir
,一边确认,一边逐层进行删除
-f:删除的终极大法,强制进行删除,配合-r使用等于一剪没,如rm -rf Dir
,该操作十分危险务必谨慎使用
-
cd:切换目录,命令也十分简单格式为
cd 目标目录
,其中目标的目录可以为绝对路径(如中国-辽宁省-沈阳市)或者为相对路径(假定你已经在辽宁省,可以直接说到沈阳市),如:
bio06@VM-0-10-ubuntu:~$ pwd #显示当前工作目录
/home/bio06
bio06@VM-0-10-ubuntu:~$ cd /home/bio06/New_Dir #以绝对路径切换到New_Dir
bio06@VM-0-10-ubuntu:~/New_Dir$ pwd #已经切换成功
/home/bio06/New_Dir
bio06@VM-0-10-ubuntu:~/New_Dir$ cd #后面什么也不加,返回主目录
bio06@VM-0-10-ubuntu:~$ pwd #显示当前工作目录为主目录
/home/bio06
bio06@VM-0-10-ubuntu:~$ cd New_Dir #以相对路径定位到New_Dir
bio06@VM-0-10-ubuntu:~/New_Dir$ pwd #切换成功
/home/bio06/New_Dir
cd命令也有一些特殊的小技巧:
cd或cd~:返回主目录
cd -:返回刚才的(上一级)目录
单点符(.):表示当前目录
双点符(..):表示当前目录的父目录,节约敲打命令的时间
-
touch:创建空文件或更改文件修改时间,命令比较简单,为
touch 文件名
-
vi:vi是Linux当中的文本编辑器,方便脚本的编写,我们可以首先创建一个文本文件
vim test.txt
,之后按i键即可进行输入,页面如下:
编辑结束后,按esc键即可退出编辑模式,在左下角输入x保存后退出。编辑器命令相对比较晦涩,需要大量的练习以熟练使用复制、粘贴、查找、替换等功能,以后一边学习再一边补充吧! -
cat:显示文本文件中的内容,格式为
cat 文件名
,如:
bio06@VM-0-10-ubuntu:~/New_Dir$ cat test.txt
Hello,world!
This is an apple.
How are you?
I'm fine.
Thank you.
And you?
huahua
doudou
cat命令的一些常用参数:
-n:给所有行加上行号
-b:只给有文本的行加上行号
-T:不显示制表符补充:cat命令一旦进入便无法控制后面的操作,可摁q键退出;而more和less命令的使用与cat命令类似,但是可以一次一屏地手动操作显示的内容
-
head和tail:分别显示文本文件的末尾(默认倒数10行)和开头(默认前10行);如加上参数-n,如
tail -n 3 test.txt
,则可更改为显示前n行的内容:
bio06@VM-0-10-ubuntu:~/New_Dir$ head -n 3 test.txt #显示前3行的内容
Hello,world!
This is an apple.
How are you?
-
cp:复制文件,格式为
cp file1 file2
,新文件将出现在现有目录中:
bio06@VM-0-10-ubuntu:~/New_Dir$ cp test.txt test1.txt
bio06@VM-0-10-ubuntu:~/New_Dir$ ls -l
total 8
-rw-rw-r-- 1 bio06 bio06 89 Sep 26 21:25 test1.txt
-rw-rw-r-- 1 bio06 bio06 89 Sep 26 20:57 test.txt
如果将格式更改为cp file destination
,则将文件复制到所指定的目录中(其中目录常常以/结尾):
bio06@VM-0-10-ubuntu:~$ mkdir Dir1 #创建目录1
bio06@VM-0-10-ubuntu:~$ mkdir Dir2 #创建目录2
bio06@VM-0-10-ubuntu:~$ cd Dir1
bio06@VM-0-10-ubuntu:~/Dir1$ touch test1 #在目录1中创建文件1
bio06@VM-0-10-ubuntu:~/Dir1$ cp test1 /home/bio06/Dir2/ #将test1复制到目录2
bio06@VM-0-10-ubuntu:~/Dir1$ cd #返回主目录
bio06@VM-0-10-ubuntu:~$ ls -lR #递归显示主目录中文件,可见test1已经复制到了目录2中
.:
total 8
drwxrwxr-x 2 bio06 bio06 4096 Sep 26 21:29 Dir1
drwxrwxr-x 2 bio06 bio06 4096 Sep 26 21:30 Dir2
./Dir1:
total 0
-rw-rw-r-- 1 bio06 bio06 0 Sep 26 21:29 test1
./Dir2:
total 0
-rw-rw-r-- 1 bio06 bio06 0 Sep 26 21:30 test1
cp命令也包含许多实用的参数:
-i:在复制前询问是否需要覆盖已有文件
-R:递归地复制整个目录
通配符(星号 * 或问号?):根据有选择性地进行复制
-
mv:第一个功能为重命名文件,格式为
mv file1 file2
,只影响文件名:
bio06@VM-0-10-ubuntu:~/Dir1$ mv test1 test2
bio06@VM-0-10-ubuntu:~/Dir1$ ls -l
total 0
-rw-rw-r-- 1 bio06 bio06 0 Sep 26 21:29 test2
第二个功能为移动文件的位置,格式为mv file1 destination
,与cp命令相似,但是不同的是,移动之后原文件已经不在原来的位置了(类似于windows系统中的剪贴):
bio06@VM-0-10-ubuntu:~/Dir1$ mv test2 /home/bio06/Dir2/=
bio06@VM-0-10-ubuntu:~/Dir1$ cd
bio06@VM-0-10-ubuntu:~$ ls -l Dir2
total 0
-rw-rw-r-- 1 bio06 bio06 0 Sep 26 21:30 test1
-rw-rw-r-- 1 bio06 bio06 0 Sep 26 21:29 test2
同cp命令,我们既可以使用i命令在试图覆盖已有文件时得到提示,也可以一下子移动整个目录
- 自动补全:在给出足够的文件名信息(且不会与其他文件有重合时),shell可以自动补全文件名。这在处理一些文件名比较复杂的文件时十分高效,自动补全的方法为制表键(即Tab键)。我们可以输入文件名信息的一部分,再按下制表键,然后便可以得到文件名的完整信息了!
-
查看版本:输入
cat /proc/version
,说明正在运行的内核版本:
bio06@VM-0-10-ubuntu:~$ cat /proc/version
Linux version 4.15.0-54-generic (buildd@lgw01-amd64-014) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019
而cat /etc/issue
则给出发行版的信息:
bio06@VM-0-10-ubuntu:~$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
-
监测磁盘空间:如果想要知道在某个设备上还有多少磁盘空间,可以使用
df
命令进行查看;其中常用参数为-h,将用M代替兆字节,G代替吉字节:
bio06@VM-0-10-ubuntu:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 906224 4 906220 1% /dev
tmpfs 187740 5536 182204 3% /run
/dev/vda1 51539404 18001684 31340524 37% /
tmpfs 938680 24 938656 1% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 938680 0 938680 0% /sys/fs/cgroup
tmpfs 187736 0 187736 0% /run/user/1034
tmpfs 187736 0 187736 0% /run/user/1032
bio06@VM-0-10-ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 885M 4.0K 885M 1% /dev
tmpfs 184M 5.5M 178M 3% /run
/dev/vda1 50G 18G 30G 37% /
tmpfs 917M 24K 917M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 917M 0 917M 0% /sys/fs/cgroup
tmpfs 184M 0 184M 0% /run/user/1034
tmpfs 184M 0 184M 0% /run/user/1032
而如果想要判断某个特定目录(默认当前目录)的磁盘使用情况,我们可以用du
命令进行快速的探索:
bio06@VM-0-10-ubuntu:~$ du
4 ./.gnupg/private-keys-v1.d
8 ./.gnupg
4 ./.cache
48 .
du命令的常用参数也可以更方便地向我们展示所需的信息:
-c:显示所有已列出文件的总大小
-h:用k代表千字节,用M代替兆字节,G代替吉字节
-s:显示每个输出参数的总计
今天不知不觉就打了好多好多字,但是对Linux系统以及服务器也算有了初步的认识和熟悉,虽然辛苦但是能够将这些整理记录下来也算是给自己的一份礼物。继续加油!