抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

该篇内容非常之多,主要记录自己能用的上的linux操作指令和自己的一些理解,想要用的时候方便站内搜索直接查找。

1. linux常用命令

cd
cd:Change directory
修改(进入)工作目录,只对目录文件有效

1
2
3
4
5
cd /    进入根(root)目录
cd - 返回上次的目录
cd 返回家(home)目录
cd ~ 返回家目录
cd .. 返回上一级目录

ls

ls:List files
ls计算不了目录内文件大小,所以显示的目录大小不是实际的,要看目录实际大小用du命令

1
2
3
4
5
6
-a  列出包括.a开头的隐藏文件的所有文件
-A 通-a,但不列出"."和".."
-l 列出文件的详细信息
-c 根据ctime排序显示
-t 根据文件修改时间排序
-h 将文件大小按照易于读懂的方式显示(多少M,多少G)

ll和ls-l是同样的用法,linux可用,mac中不能用,可以改环境变量文件自定义ll用法


pwd
pwd:print working directory,打印当前所在目录


cp
cp: Copy file
拷贝并粘贴文件,并且可以重命名

1
2
3
4
5
-b  覆盖前做备份
-f 如存在不询问而强制覆盖
-i 如存在则询问是否覆盖
-u 较新才覆盖
-t 将多个源文件移动到统一目录下,目录参数在前,文件参数在后

$ cp ../data/xist.fa xist_seq.fa # 复制上一个目录data目录下的xist.fa到当前目录,并重命名为xist_seq.fa
$ cp -r 003/ 007 # 递归的方式,复制003目录到007目录,目录复制到目录要用递归


mv
mv: Move file
移动文件,相当于windows下的剪切粘贴,如果剪切粘贴到同一目录下,则为重命名

1
2
3
4
5
-b  覆盖前做备份
-f 如存在不询问而强制覆盖
-i 如存在则询问是否覆盖
-u 较新才覆盖
-t 将多个源文件移动到统一目录下,目录参数在前,文件参数在后

$ mv a1.index.sh ../ # 移动到上一目录
$ mv a1.index.sh a2.index.sh # 重命名为a2.index.sh
$ rename txt doc * # 把所有txt改成doc,批量文件重命名可以用rename


rm
rm: Remove file
删除文件

1
2
3
4
-r  删除文件夹(就是删除目录)
-f 删除不提示
-i 删除提示
-v 详细显示进行步骤

一定要慎重使用,命令行模式下删除文件不可恢复
$ rm -rf *.fna #删除目录下所有以.fna结尾的文件


ln
ln: Link files
创建连接文件,包括软连接和硬链接,一般软连接比较常用,相当于windows下的快捷方式;硬链接相当于重要文件的备份,默认硬链接
删除原文件,硬链接文件不受影响,软连接文件则无效

1
2
-s  建立软连接  
-v 显示详细的处理过程

mkdir
mkdir:Make directory
创建文件夹(目录)

1
2
3
-p  递归创建目录,若父目录不存在则依次创建
-m 自定义创建目录的权限
-v 显示创建目录的详细信息

$ mkdir rnaseq #创建一个名为rnaseq的目录


touch
建新的空文件(可写入的文件)
$ touch 1.txt 2.txt 3.txt # 同时新建三个文件,一个文件可以直接vim建立


cat
cat: concatenate 连接
cat的一个作用是查看文件,一般是比较小的文件,行数小于一个屏幕,最多不要超过两个屏幕,否则会刷屏(屏幕输出的方式)
cat另一个作用是合并多个文件,一般配合重定向合并为一个新文件或者将一个文件内容追加到另一个文件结尾
$ cat a1.txt a2.txt >all.txt # 合并文件,并不会删除原文件,覆盖新文件内容,新文件为all.txt
$ cat a1.txt >>a2.txt # 同样是合并,a1重定向到a2结尾
$ cat >id.txt # 回车输入内容,可新建id.txt文件,ctrl+c退出 echo不可以这样新建,只能echo "内容">id.txt

1
-A  显示文件内的空白信息

linux系统下是换行\n;mac系统下是回车\r;windows系统下回车加换行两个字符\r\n 三者都是空白,用less无法看出区别,只能在cat -A下看到不同操作系统的换行符信息


less / more
less和more都是文件查看工具,但是less功能更多一些,在windows系统下打开一个10G的文件比较困难,但是在Linux下非常方便,less可以打开非常大的文件,压缩格式也可以直接打开。注意后面接文件,不能接目录。

1
2
-m  显示类似于more命令的百分比
-N 显示行号

more:q退出,space向下翻一页,enter向下滚动一行,b往前翻一页,会加载全部显示浏览到百分之几,退出后会加载显示的所有内容
less:类似,还可以用pageup和pagedown,不会加载全部,退出后不会加载文件内容显示到当前界面
less下按h进入帮助界面;按/向下搜索字符串,按?向上搜索字符串,搜索状态下n和p前后跳转;按v进入编辑


head / tail
这两个命令比较简单,只是取一个文件的头部和尾部多少行,默认10行,可以加-n进行设置,利用管道可以取文件中间行
$ head -40 a.txt | tail -20 #取文件第21~40行
$ tail -n +20 notes.log #取文件的第20行到文件末尾


g(un)zip/ b(un)zip2
gzip和bzip2是文件压缩工具,默认直接对源文件进行处理,压缩比率在2/3左右,都可以进行设置
加上un,为unpack的意思,表示解压缩
linux压缩文件格式是.gz和.bz2
windows压缩文件有.rar文件,可以下载rarlinux工具解压缩;.zip文件可以通过unzip命令解压
bzip2压缩比更高(尽量下载bz2压缩文件),但是占用更多CPU
$ gzip a.txt # 压缩a.txt文件
$ gunzip a.txt.gz # 解压a.txt.gz文件
压缩的文件可以用less或者zcat打开文件


tar(很多生物软件是打包并压缩的)
tar:Tape archive (磁带档案)
tar主要用于打包,由于tar能调用gzip或者bzip2进行压缩,而打包和压缩经常如windows系统一样合并为一个过程

1
2
3
-c  建立打包档案,可搭配 -v 来察看过程中被打包的档名(filename)
-t 察看打包档案的内容含有哪些档名,重点在察看文档名就是了(同less功能)
-x 解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开

以上三个命令不能同时使用,只能三选一
辅选项:

1
2
3
4
-j  透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z 透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v 在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename -f 后面要立刻接要被处理的档名!f很重要,每次执行tar命令都要加上

对于初学者,记住c是creat,创建,x是解包,z对应gzip,j对应bzip2即可,所以常用的命令如下:
$ tar -jcvf filename.tar.bz2 A B C #打包压缩为bz2结尾文件
$ tar -jxvf filename.tar.bz2 # 解压缩.tar.bz2结尾文件
$ tar -zcvf filename.tar.gz A B C #打包压缩为gz结尾文件
$ tar -zxvf filename.tar.gz # 解压缩.tar.gz 结尾文件
$ tar -jxvf filename.tar.bz2 -C 目录名 #解压缩到指定目录,注意是大写C
less命令可以不解压只查看(真的强大),tar -tf filename同样
如果只需解压其中一个文档,可以先通过-t查看文档名并复制,再在前面解压缩的命令基础上加空格和文档名


wc
wc = Word Count
统计一个文件中,行数,单词数(有空格或者换行符的字符串),字符数

1
2
3
4
-l  filename 报告行数
-c filename 报告字节数
-m filename 报告字符数
-w filename 报告单词数

统计当前目录下有多少文件
$ ll | wc # 注意显示行数比实际多两行,因为还有隐藏的当前目录.和上一层目录.. 可通过ls -a查看


sort
排序,默认按第一列排序,可以通过-k进行设置;默认排序规则为按ASCII码排序,可以通过-n进行修改;-r取相反方向;

1
2
3
4
5
-n  依照数值的大小排序。
-o 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序。

$ sort -nk2 -k1 01.txt | less # 在01.txt文件中,根据第二列数字大小进行排序,数字一样的比较第一列并排序


uniq
用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用,排序之后使用uniq

1
2
3
4
-u  显示未重复的行
-c 统计重复行的数量(在行首标注)
-ci 忽略大小写统计重复行
-d 显示重复出现的行

# cut -f 1 blast.out | sort -t "|" -nk2 | uniq | wc -l #从blast.out文件中提取第一列(f代表字段),第一列字段以“|”分割并比较第二段的数字大小进行排序,去除重复行,并记录行数 即记录有多少条比对上的基因


df
df: disk free
df用于查看磁盘消耗,显示磁盘可用空间数目信息及空间结点信息。一般加一个-h选项,然后接要查看的磁盘,默认所有磁盘。

1
2
3
4
5
-a  显示全部文件系统
-h 文件大小友好显示
-l 只显示本地文件系统
-i 显示inode信息
-T 显示文件系统类型

du
du: Disk usage
df用于查看磁盘使用情况,du用于查看目录所占磁盘大小,一般也加-h选项

1
2
-h  方便阅读的方式(显示带单位)
-s 只显示总和的大小

find
find顾名思义,主要用于查找文件。因为当文件越来越多的时候,由于Linux是文本界面,不方便可视化文件,这个时候就可以利用find快速找到需要的文件。find支持多种搜索方式
主要用的搜索方式:find 目录 Expression 条件
$ find /media/ -name *.fna #查找media目录下所有.fna结尾的文件
$ find /media/ -size 100M #查找media目录下所有大于100M的文件


which
$ which filename # 查看可执行文件的位置,在PATH变量指定的路径中查看系统命令是否存在及其位置


whereis
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令


locate
是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库


top
top可以动态显示(3s一次)系统进程使用情况,类似于windows系统的任务管理器。可以显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等。


ps
ps: process status
ps也是系统进程管理工具,与top不同的是,top可以动态显示,而ps则是静态显示,是某一时刻的快照,静态显示的好处是便于其他程序捕获结果,进行处理。


kill
kill的作用是杀死进程,给定一个任务的PID号,可以通过top或者ps命令获得,例如当前有一个sleep进程,pid号为12000;通过kill -9可以强制杀死
$ kill -9 12000

1
2
3
4
5
6
7
1   终端断线
2 中断,相当于ctrl+c
2 退出,同ctrl+\
9 强制终止
15 终止进程,默认为15
18 继续,与STOP相反,fg/bg命令
19 暂停,同ctrl+z

chmod
chmod: Change mode
用于修改文件权限,Linux基础权限可以包括ugo模式(文字设定法)以及421模式(数字设定法),可以用通配符一次修改所有类型的文件
文字设定法:
u表示属主(user),g表示同组群用户(group),o表示其他用户(other),a表示所有用户(all)

1
2
3
4
5
6
+  添加权限
- 删除权限
= 赋予给定权限,并取消其他所有权限
r 可读(read)
w 可写(write)
x 可执行(execute)

数字设定法:

1
2
3
4
0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限
7:可读可写可执行 4+2+1
6:可读可写 4+2
5:可读可执行4+1

$ chmod 721 a1.index.sh # 421模式修改
与之类似的还有chown与chgrp,这两个权限更大,需要root权限;
chown: Change owner
$ chown 用户名 目录名/ # 修改目录的属主
chgrp: Change group
$ chgrp 组名 目录名/ # 修改目录的组名


exit
退出登录,exit是正确退出,最好不要直接点windows关闭窗口按钮退出,也不要使用ctrl+D给定退出信号退出。


man
详细解释命令,系统命令可以用这个找,下载的程序往往是–help


wget
后面接下载网址,可以直接由地址获取下载文件


su:super user
获得超级管理员权限,root权限,需要输入密码
sudo:super user do
暂时取得root权限,配置系统经常能看到sudo yum


echo
在标准输出(屏幕)上显示文字

1
2
-n  输出之后不换行,去除结尾的换行符。注意默认一行后有一个换行符
-e 转义字符按照对应方式处理

yum(centos是yum,ubuntu是apt)

Yellow dog Updater Modified是一个软件包管理器,能够从指定的服务器自动下载rpm包进行安装并且自动处理依赖性关系,yum优点提供了查找、安装、删除某一个、一组甚至全部软件包的命令,并且命令简洁便于使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum clean all               # 清除原有yum缓存
yum repolist # 列出仓库信息
yum install software # 安装
yum update # 更新
yum list software # 查看软件
yum list all # 查看所有软件
yum list installed # 列出已安装软件
yum list available # 列出可安装软件
yum reinstall software # 重新安装
yum remove software # 卸载
yum info software # 查看软件信息
yum search software # 根据软件信息查找软件
yum whatprovides file # 根据文件找出包含此文件的软件
yum history # 查看系统中软件管理信息
yum history info 数字 # 对该数字为id的信息进行显示
yum groups list # 列出软件组
yum groups info # 查看软件组的信息
yum groups install sfgroup # 安装软甲组
yum groups remove sfgroup # 卸载软件组
yum repolist # 查看yum源信息

cut
命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一

1
2
3
4
-b  以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
-c 以字符为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与-d一起使用,指定显示哪个区域

xargs
与管道不同,xargs可以给下个命令传递参数。
$ ls *.gz | head #只可以输出前10个文件名
$ ls *.gz | xargs head #输出.gz结尾的所有文件前10行
这里要注意下其实命令是有省略的,完整应该是ls *.gz | xargs -i head{} #传递参数到head的花括号中


jobs
查看当前在后台执行的命令,可查看命令进程号码


&
运行命令时,在命令末尾加上&可让命令在后台执行

顺便说一下 | ; && ||区别

1
2
3
4
&&     左边命令成功运行了,右边命令才会运行,就是逻辑与的功能
; 不管左边命令有没有成功运行,右边命令都会运行,两者之间独立
| 左边命令的结果作为右边命令的参数,注意与xargs区分
|| 左边运行的命令失败,右边的命令才会运行,否则只显示左边命令运行结果

nohup
命令可以使命令永久的执行下去,和终端没有关系,退出终端也不会影响程序的运行; & 是后台运行的意思,但当用户退出的时候,命令自动也跟着退出。 那么,把两个结合起来nohup 命令 &这样就能使命令永久的在后台执行


fg N
将命令进程号码为N的命令进程放到前台执行,同%N #注意是进程号不是PID!kill程序需要PID

bg N
将命令进程号码为N的命令进程放到后台执行

cal 显示日历

date 显示时间

2. 基本操作

源码编译
安装软件都有Readme文件或者install文件说明安装方式,一般是以下步骤:
1、运行configue脚本 #检查系统环境配置情况,缺少哪些东西,缺少的可以yum下载安装
2、运行make check命令(可选)
3、敲make命令进行编译
4、make install命令安装,出现可执行程序


文件校验
下载大的文件会附带.md5文件
任意长度信息逐位计算,产生128位hash值,不可逆。也就是说MD5算法可以位任何文件产生一个独一无二的数据指纹,通过校验下载前后的MD5值是否发生改变,就可以知道源文件是否被改动
$ md5sum filename > data.md5 # 对文件(可多个文件)生成md5校验码(32位,16进制),并命名为data.md5
$ md5sum -c data.md5 # 校验文件,如果校验码相同则显示OK


重定向
本质是将输出到屏幕的内容重定向到一个新的文件夹中,大于号和小于号都是代表数据的流向
$ echo “想要的内容”> 文件名 #覆盖原文件的内容
$ echo “想要的内容”>> 文件名 #想要的内容追加到文件后,原文件内容不修改
一个>是覆盖,两个>>是追加


Ctrl+C
终止并退出前台命令的执行,回到SHELL

Ctrl+Z
暂停前台命令的执行,将该进程放入后台,回到SHELL


3. vim

vim(主要用来写脚本,编辑文件)
vim是Linux系统自带的文本编辑器,可以理解成为windows系统下的word软件,适合编辑小文件,会一次加载全部内容到内存

1
2
3
:w filename 将文件以指定的文件名保存起来  
:wq 保存并退出
:q! 不保存而强制退出

注意vim是vi的拓展,有些自定义设置要在vim下生效,最好是用vim
用户设置优先级高于全局设置,设置文件都在家目录~下设置,且均为点开头的隐藏文件,如下
~/.vimrc
~/.bashrc

3.1 命令行模式功能键:

1)插入模式

1
2
3
i   切换进入插入模式 insert mode ,按"i"进入插入模式后是从光标当前位置开始输入文件
a 进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
o 进入插入模式后,是插入新的一行,从行首开始输入文字

2)从插入模式切换为命令行模式
按 ESC 键
3)移动光标
直接用键盘上的光标来上下左右移动,也可以用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格。

1
2
3
4
5
6
7
G   移动到文件末尾,15G移动光标至文章的第15行行首
gg 移动到文件开头
$ 移动到光标所在行的行尾
^ 移动到光标所在行的行首
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符

4)删除文字

1
2
3
x   每按一次,删除光标所在位置的后面一个字符
X 大写的X,每按一次,删除光标所在位置的前面一个字符
dd 删除光标所在行 1,6d删除1到6行

5)回复上一次操作

1
u   如果误执行一个命令,可以回到上一个操作。按多次u可以执行多次回复

6)继续下一个操作

1
2
n或. 比如查找一个字符串以后,继续寻找下一个字符串,按多次n执行多次操作
N 与 n 刚好相反,为反向进行前一个搜寻动作

3.2 底线命令模式

1
2
3
4
5
6
7
:/word          # 查找word字符串
:%s/x/y/gc # 所有x被y替换 g代表全局,c代表交互模式(每次替代会提示)
:!命令 # 命令先执行,vim被挂起。执行后按enter回到vim
:split # 横屏分屏显示 ctrl+ww切换上下屏
:vsplit # 纵向分屏
:only # 取消分屏
:n1,n2s/word1/word2/g # 在第n1与n2行之间寻找word1这个字符串,并将该字符串取代为word2

vim还有专门的键盘图。。。放一个简略版的

4. 基础命令三剑客

三剑客的命令非常之多,完全可以出一本书,这里只放一些简单的和我能用得到的

4.1 三剑客之grep

grep(找基因信息比较方便)
Global Regular Expression Print,全局正则表达式版本
文本搜索工具,类似于正则表达式搜索,可以在一个大的文件中快速搜索到满足一定规则的内容。

$ grep ">" gene.fna | wc -l # 统计gene.fna文件中序列的条数
$ grep -A 2 "3 gi 29732 34486" lastz.axt #将满足条件的行和下面两行显示出来

1
2
grep -E         # grep的拓展模式
grep -P # 适应perl语言的正则表达式

区分一下:find是搜索目录下满足条件的文件,grep是搜索文件内满足条件的内容

4.2 三剑客之sed

sed
sed = Stream Editor
流处理器,数据流过这个工具,格式化成固定的格式
sed + 选项参数 + '模式' + 文本或文件

选项参数

1
2
3
4
5
-e  替换,并输出到屏幕(搭配重定向)
-i 原文件修改
-f 根据模式替换
-r 拓展的正则表达式
-n 输出

模式:

1
2
3
4
g   全局
s 替换,一个字符替换另一个
d 删除
p 打印

输出固定的行
$ sed -n '1307p' seq.fna # 输出文件第1307行;
$ sed -n '100,200p' seq.fna # 输出文件第100到200行;

替换操作
$ sed -e 's/gi/GI/' seq.fna # 将文件中gi全部替换为大写GI;s为替换
$ sed -i 's/gi/GI/g' seq.fna # 在原文件上进行替换,并且进行全部替换,g为全局(默认只进行一次替换)

删除操作
$ sed -e '/^\s$/d' seq.fna # 删除文件中的空白行,命令d为删除符合条件的行。\s为空白;^行首,$行尾
$ sed -e '/>/d' seq.fna # 删除包含ref的行,每个ref行都有>
$ sed -e 's/:.*//g' seq.fna # 删除冒号之后的所有内容

4.3 三剑客之awk

awk也是非常强大的文本处理工具,awk本身也是一门编程语言
输出一个列表任意列
$ awk '{print $1,$NF}' 1.txt # 输出1.txt的第一列和最后一列

过滤文件结果
$ awk '{if ($3>=80 && $4>=100) print $0}' blast_m8.out # 过滤文件比对结果,将第三列值大于80,并且第四列值大于100的所有结果输出

比较
$ awk '$8>$10' input.txt # 输出第8列数值大于第10列数值的行

输出固定行内容
$ awk 'NR>=20&&NR<=80' input.txt #输出第20到第80行内容

5. 正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
^   匹配输入字行首      ^eat,识别eat开头的字符串
$ 匹配输入行尾 eat$,识别eat结尾的字符串
\b 单词锚定符 \beat\b ,只识别eat字符串
. 匹配除“\n”和"\r"之外的任何单个字符
\ 转译字符 比如匹配. 则\.
* 匹配前面的子表达式任意次
+ 匹配前面的子表达式一次或多次(大于等于1次,例如“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”)# 需要grep -E支持(拓展)
? 匹配前面的子表达式零次或一次 # 需要grep -E支持(拓展)
[xyz] 字符集合。匹配所包含的任意一个字符
x|y 匹配x或y。“z|food”能匹配“z”或“food”。“[z|f]ood”则匹配“zood”或“food”,择译匹配
[a-z] 字符范围
\d 匹配所有数字,等同[0-9]
\s 空白,是字符集换页、制表、换行、回车以及空格的简写[\f\t\n\r]
\w [A-Za-z0-9_]单词包括大小写字母、数字和下划线
^ 负值字符范围。匹配任何不在指定范围内的任意字符。(倒三角)
\D 非数字
\W 非字符
\S 非空白字符

欢迎小伙伴们留言评论~