Linux系统是一类自由开源的电脑操作系统,因其内核为Linux而得名。内核是一个电脑程序,组成操作系统的核心,链接系统硬件和应用程序。Linux系统是自由和开源的,有很多的发行版本。因为Linux免费、开源、稳定性好、安全性高、有活力的社区支持,绝大多数生物信息工具均是基于Linux系统的。
集群
将多个计算机(节点)连接在一起组成集群,我们可以登录到其中某个节点,通过这个节点向其它节点投递任务。
Linux初体验
工作目录
登录之后,可以查看目前所在的目录,一般为为你的 HOME目录,也可能不是,先看看:1
pwd
目录下内容查看
1 | ls # 查看当前工作目录下的文件和文件夹 |
切换目录
1 | PWD=`pwd` # 这里先将目前的路径存为变量PWD |
文件夹和文件操作
1 | mkdir yangguang # 创建以你的名字为名的文件夹,这里改成的名字 |
常用命令
1 | ls --help # 查看帮助信息 |
文件的权限
文件具有可写(w)、可读(r)、可执行(x)等权限,通过chmod命令来设置。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47echo "Hi RNA" > test.txt #示例文件
cat test.txt
ls -l test.txt # 初始的是 rw-r--r--
chmod =x test.txt # 将user、group、other的权限都设成x, 体会等号的用法
ls -l test.txt
chmod u=w test.txt # 将user的权限都设成w, 体会指定u、g、o的效果
ls -l test.txt
chmod u+r test.txt # 将user的权限增加r, 体会+的作用
ls -l test.txt
chmod o-x test.txt # 将other的权限减少x,体会-的作用
ls -l test.txt
chmod 111 test.txt # 将user、group、other的权限都设成x;可以用数字代表权限
ls -l test.txt
cat test.txt #不可读了
echo "Hi Hong" > test.txt #不可写了
chmod 222 test.txt # 将user、group、other的权限都设成w
ls -l test.txt
cat test.txt #不可读
echo "Hi Hong" >> test.txt #可写
chmod 444 test.txt # 将user、group、other的权限都设成r
ls -l test.txt
cat test.txt #可读
echo "Hi Hong" >> test.txt #不可写
chmod 731 test.txt # 将user、group、other的权限分别设成rwx、-wx、--x
ls -l test.txt
mkdir -p test1/test2
chmod 111 test1
ls -l
ls -l test1 #没有权限了
chmod 777 test1 #最宽松权限,要慎重使用
ls -l
ls -l test1 #看看 test1里的文件夹test2并没有跟着变化
chmod -R 775 test1 # -R 实现递归,就是文件夹中的文件已经文件夹都会跟着改变,直到最底层
ls -l
ls -l test1 #看看 test1里的文件夹test2 跟着变化了
1代表x,2代表w,4代表r。是rwx这个数序上的二进制数字的十进制值。
相对路径与绝对路径
从根目录出发的的绝对路径,比如1
2
3ls -l /home
pwd #pwd返回当前目录的绝对路径
从当前目录出发的是相对路径,比如1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18ls -l ./test1.txt
ls -l test1.txt # ./ 可以省略
ls -l test1/test2
ls -l ..
ls -l ./../
pwd
cd . # . 代表当前工作目录
pwd
cd ./ #依然在当前目录
pwd
cd ./././././
pwd #绝对路径并未改变
cd .. #.. 表示上一级目录,省略了当前路径
pwd
cd ./..
cd ./../
硬链接与软连接
数据在硬盘里的存储单元就是文件,文件都有文件名和数据。数据包括用户数据(user data) + 元数据 (metadata)。 用户数据就是文件的真实内容,元数据为文件的附加属性,文件大小、创建时间、所有者等信息。元数据中的索引节点(inode)号才是文件的唯一标识。为了方便文件的共享,Linux中引入了软连接和硬链接两种,硬链接是指具有相同inode号的文件,而软连接则是指向另一个文件的特殊文件,其特殊性在于,当你对软连接文件进行一些操作时,实际上是对指向的文件进行操作。这样当删掉硬链接中的某一个时,对另一个没有影响,而删除了软连接的源文件之后,这个软连接就成了死链接。 不能对文件夹创建硬链接。
1 | rm test1.txt test2.txt test3.txt # 如果这些文件存在,先删除了,如果不存在,报错也无所谓, |
管道
很多linux的命令输出直接达到屏幕上,也就是输出到stdout,这些输出可以直接作为一些命令的输入,也就是stdin。 这时候中间用 | 链接,也就是管道。
1 | echo -e '1\ta\n2\tb\n3\tc\n4\td\n5\te\n6\tf\n7\tg\n8\th\n9\ti\n10\tj\n11\tk\n12\tl' > test1.tsv |
grep
grep (global regular expression printer) 是一个非常常用的命令。逐行对文件进行指定模式的搜索。1
2
3
4
5
6
7
8
9
10
11
12echo -e 'ACT TAG AGG TAG\nATG TTT\nAAA GGG\nCCC\nATG' > input.txt #示例文件
cat input.txt
grep ATG input.txt # 返回包含ATG的行
grep -c ATG input.txt # 返回包含ATG的行的总行数
grep ^C input.txt # ^表示开头
grep T$ input.txt # $表示结尾
ls -l | grep ^d # 列出所有文件夹
sort
根据特定的列对文件进行排序.1
2
3
4
5
6
7
8
9echo -e 'chr1\t1\t100\nchr2\t4\t10\nchr1\t4\t10\nchr3\t3\t40' > test1.bed
sort test1.bed # 不分列
sort -k2 test1.bed # 按照第2列排序
sort -k2n test1.bed # 按照第2列排序,但当做数字
sort -k2,2n test1.bed # 这和上一条也是一样的,根据第2列到第2列排序。 -km,n 根据第m到第n列排序
sort -k1 test1.bed # 按照第1列排序
sort -k1,1 -k2,2n test1.bed # 先按第一列排,再按第二列排
sort -k2,2n -k1,1 test1.bed # 按照第二排序,再按第一列排
uniq
uniq总是要接着sort使用,因为它只会对相邻的元素判断是否重复。1
2
3
4
5
6
7echo -e 'chr1\nchr2\nchr1\nchr3\nchr4\nchr1\nchr5\nchr2\nchr6\nchr3' > test1.txt
cat test1.txt
uniq test1.txt
sort test1.txt | uniq # 看看sort之后uniq的效果
cat test1.txt | uniq
cat test1.txt | sort | uniq
sort test1.txt | uniq -c # -c统计各元素的重复次数
sed
sed (stream editor)用来对输入文件或者数据流进行编辑,逐行进行编辑,sed没有交互模式。通常我们用来做替换。
1 | echo -e 'ACT TAG AGG TAG\n TTT\nAAA GGG\nCCC\nATG' > input.txt #产生一个示例文件 |
AWK
AWK实际是一个编程语言,我们这里只讲一些简单的用法。 AWK可以和sed一样,对文件进行逐行处理,不同的是每一行可以被分为不同的域(field), 每行则是一个区(region)。而且,可以自定义区的分隔符,这样就不局限于逐行处理了,可以把多行当作一个region,每行当作一个field。这样AWK实际上是逐区进行操作, $0表示整个region,$1表示当前region的第一个field, $n表示第n个field. NR是当前区的序号。
AWK的基本语法结构为:
awk ‘/pattern/ {action}’ 输入文件
AWK初体验
1 | echo -e '1\ta B\n25\tb c\n3\tfc df\n84\td ok\n15\txye rte\n6\tzf erhyhy\n7\tag hhh\n48\th ADF\n39\ti ERF\n10\tj B\n11\tK OKK\n12\tl BEST' > test.tsv |
AWK编程
vi
将代码粘贴到集群的文件
在这个阶段,只需要知道怎么通过vi把在自己的电脑上编辑好的代码粘贴到集群上的文件就好了。
如下代码,回车之后就进入了编辑界面,这时候在命令模式
1
vi test.txt # test.txt 改成你想要的文件名
按键盘上的 i 进入输入模式,这样就能往文件里输入内容了
- 将剪切板上的内容粘贴进去。比如putty是单击使用鼠标右键来实现粘贴
- 如果需要做一些微小的修改,可以用方向键控制光标所在的位置,退格键可以逐个删除。需要修改的太多则可以将原来的文件删除,在自己电脑上编辑好了之后再整个粘贴进去。
- 粘贴好了之后,进入命令模式。从编辑模式进入名模式按退出(ESC)键
- 输入命令
1
2
3
4
5
6
7
8# 保存, 注意后边不能加 # 这样的注释
:w
# 退出
:q
# 保存并退出
:wq
# 强制退出,不保存
:q!
更多编辑技巧
- 命名模式下:按两次d删除整行
- 命名模式下::n 跳到第n行,:$ 跳到最后一行
- 命令模式下:/pattern 向下查找
- 命令模式下:?pattern 向上查找
- 命令模式下::set number 显示行号
- 命令模式下::set nonumber 不显示行号