Linux生物信息常用基础命令

Linux - 服务器登陆 目录操作 文本处理

登陆服务器

macOS–>terminal

ssh 用户名@IP地址

输入密码

Linux文件夹与文件管理命令

  • Linux的命令格式
  • pwd ls cd mkdir touch mv rm cp tar In
命令格式

命令+参数+文件

command [-options] [parameter] [FILE]

查询命令

man+命令

命令±-help参数

搜索引擎:关键词Linux+命令

eg. tar -zxvf Data.tar.gz

不同颜色含义

深蓝色目录 绿色可执行文件 红色压缩文件 浅蓝色链接文件 灰色其他文件

权限
最常用的几个命令 pwd ls cd
pwd
print work directory

ls:list

option

-a 列出目录下所有文件包括以.开头的隐藏文件

-d 将目录像文件一样显示,而不是现实其下的文件

-l 按照长格式显示详细属性

-h 配合-l以人性化方式显示文件大小(human)

-t 按照时间排序

-r 反响排序

–help 查看帮助文档

cd

cd -回到上一次操作的目录

mkdir

make directory

-p

mkdir -p bbb/ccc/ddd

tree
touch

创建文本

touch newfile

move

1、文件目录改名

mv newfile oldfile
mv 1 xyz
tree

2、移动文件、文件夹

什么时候改名什么时候移动:第二个参数是不是存在的文件夹

cp

-i 交互式复制

-r 递归式复制

-f 强制拷贝覆盖

默认覆盖同名文本,目标文件夹不能直接创建,目标路径必须是已存在路径

rm

remove删除目录或文件

-i 交互式删除,问一下是否删除

-r 递归式删除 删除文件夹,因为rm不会删除文件夹,只能靠-r递归删除

-f 强制删除

ln

link 链接文件命令(创建快捷方式)

ln 参数 源文件 链接文件

-s 建立软链接

压缩与解压命令
文本查看、操作
cat/tac

打印文本内容

tac 反着打印文本内容

cat 参数 文件名

-n 显示行号

-A 显示全部字符

终止刷屏command+C

重定向符号 > 创建新文件

cat > newfile
asd
sdaads
sadafsaf
123123
^C
#多出一个newfile文件,cat一下就是我们刚刚输入进去的内容
head/tail

查看文件前/后几行(默认10)

head -n 3 001.txt
tail -n 5 001.txt
head -4 001.txt
tail -5 001.txt
more

逐页查看文档内容

enter向下移动一行,空格键翻页,q退出

查看内容时不能向上翻页

less

升级版逐页查看文档内容

-S 单行显示

-N 显示行号

空格翻页,enter一行,上下左右查看文本内容,退出q

ctrl+l清屏

文本统计
wc

wc 参数 文件名

-l 统计行数

-w 统计字符串数

-c 统计字节数

cut

cut文本切割命令,以列为单位处理数据

cut options 文件名

-d 自定义分隔符,默认\t

-f 分隔符分割文本后,输出指定的列,可以是一个范围(比如2-8)

-b 以字节为单位进行分割

管道符|:把前一个命令的结果作为后一个命令的输入

cut -f4,5 example.gtf
cut -f9 example.gtf | cut -d" " -f1,2
cut -f9 example.gtf | less -SN | cut -d" " -f3,4 | less -SN
sort

排序

sort 参数 文件名

-n 按照数值从大到小排序

-r 逆向排序

-t 指定分隔符

-k 指定区域

sort -k5 -n example.gtf | less -SN
#以第五列为排列内容,按照数值大小排列,而不是按照字符排列,输出的时候单行输出,且输出行号
uniq

uniq 去除重复行 去除相邻的重复的行

uniq option 文件名

-c 统计每个字符串连续出现的行数

cut -f3 example.gtf | sort | uniq -c
#将文件第三列切出来,然后把第三列排序,看一下这三列里面都有啥,分别的个数都是多少
history

显示的内容是所输出去的所有命令的历史记录

history | cut -d" " -f4 | sort | uniq -c | sort -k2 -n

paste

paste 文本合并命令 可以以列为单位处理数据

paste option 文件名

-d 指定分隔符

-s 按行合并

seq 1 5 > f1
seq 2 10 > f2
paste f1 f2
#两个文件按列合并
paste -d":" f1 f2
paste -s f1 f2
#按行

Linux - 文本处理 grep sed awk

grep 搜索

sed 替换

awk 打印行 打印列

grep

grep 匹配

grep option pattern file

-v 反向选择,输出没有匹配的行

-n 显示匹配成功的行所在的行号

-c 统计匹配成功的行的数量

-w 完全匹配

-o 只输出匹配的内容

-f 从文件里读取pattern

-e 指定多个匹配模式

grep three file1
grep t file1
grep -v t file1
grep -n t file1
grep -c t file1 = grep t file1 | wc -l
grep -w "gene" example.gtf
grep -o "gene" example.gtf
grep -f file1 file2
grep -e t -e f file = grep [tf] file1 #正则表达式,用文本匹配
grep "t" file1
grep "^t" file1
grep "3$" file1
正则表达式

man grep

grep -n gene example.gtf

grep “>” example.fa

grep -c “>” example.fa

sed

流编辑器

-n 禁止显示所有输入内容,只显示经过sed处理的行**(常用)**

-e 直接在命令列模式上进行sed的动作编辑,接要执行的一个或多个命令

-f 执行含有sed动作的文件

-r sed的动作支持的扩展正则(默认基础正则)

-i 直接修改读取的文件内容,不输出

sed '' file1 = cat file1

p print

sed ‘s///’

y 转换

格式 y/inchars/outchars

sed [指定行 or /匹配模式/] ‘s///[g]’ 文件名

替换字符串

sed [指定行 or /匹配模式/] ‘y///’ 文件名

用sed删除文件每行最后一个字符
echo 123456789 | sed -n 's/\(.*\)\(.\)/\1/g'

这种方法bai意思是sed分组匹配。怎么分组呢?先看单引号里的内容。
-n意思是只显示sed处理的行。如果后面跟的是文件,则不会直接修改源文件。会单独加一行匹配到的行。然后单独输出加出来的这一行。
s///g 这是固定语法。匹配替换字符串用的。s/后面这堆乱七八糟的是什么意思呢?慢慢看
先看这个:\(.*\)\(.\)/
刚才说用法是分组匹配,分组关键字是用括号分组。
先看第一个分组(.*)。但是括号需要转义,所以就变成了\(.*\)这是第一个分组。里面的内容是.*,即正则表达式中的点和星号,意为任意长度任意字符串。也就是说如果我有1个字符串用这个正则能匹配到,有100万1000万个字符也能匹配到。没有也能匹配到哦。因为是任意长度。
第二个分组(.),同样的,先把括号转义。变成了\(.\)。里面的内容同样是正则表达式中的点。意思是任意一个字符串,注意第二个分组和第一个分组所用的正则的区别。
这样,我们就把123456789这个字符串分割成了两组。
第一组是:12345678
第二组是:9
接下来再看这个:/\1/g
第一个斜线是s///g里面中间的斜线,属于固定语法。\1的意思是第一个分组。也就是说这里的\1就等于12345678,为什么1前面要加上反斜线呢。如果不加这个反斜线,就会把匹配到的内容替换成了数字1,所以要加上反斜线转义,告诉sed,我要输出第一个分组。
g是全局匹配。
组合起来看就简单了,我先出输出了123456789,然后用sed分组匹配。分两组,第一组是12345678,第二组是9,然后输出第一个分组。就能实现去掉每行最后一个字符。
由于sed处理文件的机制属于从第一行开始读,然后读第二行,第三行…以此类推。
所以这样就能把每行的最后一个字符去掉。

删除

sed -e -i "/text/d" filename.txt

awk

awk 文本分析语言

awk按行处理数据

awk [options] 'script' var=value file(s)

awk [options] -f scriptfile var=value file(s)

-F 设定分割符

基础结构

awk ‘{}’

模式匹配结构

awk ‘/pattern/{}’

完整结构

awk 'BEGIN{}

{}

END{}’

awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配个一个变量

$0代表整个文本行(全部内容)

$1代表文本行中的第一个数据字段

$2代表文本行中的第二个数据字段

awk默认的字段分隔符是任意空白字符(空格/制表符)也可以用-F参数自定义分隔符

awk '{print$0}' example.gtf #打印全部
awk '{print$1}' example.gtf = cut -f1 example.gtf #打印第一列
awk '{print$2}' example.gtf #打印第二列
awk '{print$3}' example.gtf
less -SN example.gtf

awk '{print$3}' example.gtf | sort | uniq -c
awk支持判断

awk ‘{if (判断条件){}else{}}’

#只要第三列是gene的行
awk '{if ($3=="gene"){print$0}}' example.gtf | less -SN
#如果第三列中出现了gene,就打印出来
awk '{if ($3 ~ "gene"){print$0}}' example.gtf | less -SN
#不用if
awk '{$3=="gene"){print$0}}' example.gtf | less -SN
awk '{if ($1=="chr1"){print("yes")}\
else{print("no")}}' example.gtf
awk支持运算
统计所有外显子长度
awk '{if($3~"exon"){print$0}}' example.gtf
awk '{if($3~"exon"){print$1,$4,$5,$5-$4}}' example.gtf | less -SN
特殊内置变量

NR行号

NF当前行总列数

OFS输出分隔符

FS输入分隔符 -F

gtf文件:gene transfer format 用来对基因进行注释

#去掉注释
grep -v '^#' genecode.gtf | less -SN
sed -n '/^#/p!' genecode.gtf | less -SN
awk '!/^#/{print$0}' genecode.gtf less -SN
#去掉注释提取第三列信息,数据详情
awk '!/^#/{print$0}' genecode.gtf | awk '{print$3}' | sort | uniq -c
#去掉注释提取第三列是gene的行
awk '!/^#/{print$0}' genecode.gtf |awk '{if($3=="gene"){print$0}}' | less -SN
#去掉注释提取第三列是gene的行,然后选第九列数据类型是pritein_coding的。查看protein_coding基因的个数用wc -l
awk '!/^#/{print$0}' genecode.gtf |awk '{if($3=="gene"){print$0}}' |   grep "protein_coding"
#查看文件的第九列
awk '!/^#/{print$0}' genecode.gtf |awk '{if($3=="gene"){print$0}}'|cut -f9 | less -SN
#统计所以基因type的类型,head默认前10行
awk '!/^#/{print$0}' genecode.gtf |awk '{if($3=="gene"){print$0}}'| cut -f9 | awk '{print$3,$4}' | head
#去掉引号和分号
sed 's/"//g' | sed 's/;//g' = sed 's/"//g;s/;/g'
#transcripts的总数,和gene type是protein_coding的转录本
awk '!/^#/{print$0}' genecode.gtf |awk '{if($3=="trancript" && /protein_coding/){print$0}}'|less -SN
每行字符数

#awk ‘{print NR “:” length($1);}’ filename

fasta文件每行氨基酸数

awk ‘!/^>/{} length($1)}’ all_uniq.fasta > num

提取每个fasta序号

sed ‘s/.>/\n>/g’ uniq_seq > allenter

awk ‘{print$1}’ allenter > name

序号和数字粘在一起

paste name …/num > allname

paste allname allenter > all

cat filename | nawk -F " " ‘{for (i=4;i<=NF;i++)printf("%s ", $i);print “”}’

Linux - conda 环境变量 生信软件安装

history | awk '{print$4}' | sort | uniq -c | sort -k1 -n
history | cut -d" " -f 6 | sort | uniq -c | sort -k1 -n
使用conda管理生信软件

安装 升级 管理软件

conda 清华大学开源镜像

mirrors.tuna.tsinghua.edu.cn

anaconda – miniconda3

复制链接,然后wget -c 下载命令

wget

-c 带点续传,下载到一半断掉了下次还可以继续下载

bash 文件.sh

前期配置

source ~/.bashrc 重启linux

不需要自动启动conda:conda config --set auto_activate_base false

conda:显示子命令

配置信息保存在 ~/.condarc

可以使用cat ~/.condarc 查看

创建小环境
小环境???

有些软件依赖于python2有些软件依赖于python3版本,所以分出不同小环境,在相对应的小环境里运行相应软件,相当于分隔出了不同的小房间

conda env create -n 环境名

-y yes确认

conda create -y -n rna python=3

激活小环境

conda activate rna

退出小环境

conda deactivate rna

查看小环境

conda info -e

-e environment

conda env list

conda create -n -y rna python=3
conda info -e
conda activate rna
conda deactivate rna
conda deactivate #退出一层小环境,到达base
查找软件

conda search 软件名

conda search fastqc

可以去bioconda的网站,用浏览器的搜索功能搜索fastqc

安装软件

conda install 软件名

conda install fastqc

是否安装成功?

  • fastqc --help

  • fastqc --version

  • which fastqc #查找fastqc在哪个文件夹里面

  • 输入fa按tab键,列表里面出现fastqc即可

conda activate rna

conda install fastqc

conda install 软件名=版本号

conda install 软件1 软件2 软件3

eg conda -y hisat2 multiqc samtools

查看已经安装的软件
conda list
conda list | wc -l #查看总共多少个软件
cat > biosoft_list
hisat2
fastqc
multiqc
samtools
conda list | grep -f biosoft_list
软件升级

conda undate 软件名

conda update fastqc

conda update --all

卸载软件

conda remove 软件名

删除小环境

conda env remove --name 环境名

conda activate rna

conda install

conda list

conda install sra-tools
prefetch -version
#知道的名字不一定是conda的,最好在bioconda里面搜一下
cat biosoft_list
软件名
conda list | grep -f biosoft_list
环境变量

echo $PATH

echo $PATH | tr “:” “\n”

PATH:shell查找命令的目录列表,由:分隔

which ls /bin/ls

which awk /usr/bin/awk

ll /usr/bin/awk 软链接文件

环境变量:用于存储有关shell会话和工作环境的信息的系统变量

常见环境变量

HOME PATH SHELL LOGNAME

PS1:shell命令行界面的主提示符

PS2:shell命令行界面的次提示符

查看变量的值:

echo $HOME

echo $PATH

env 显示系统中的所有环境变量

echo 打印字符串 打印变量的值

export 将shell变量输出为环境变量

生信软件安装–补充
建议安装软件建立两个文件夹:

mkdir -p biosoft

mkdir -p install-packages

二进制文件安装

binary

搜索下载解压添加到path

Hisat2 downloads找到官网
右边有linux版本下载 binary 右键复制链接地址 下载 wget -c 地址(或下本地Xftp传)
unzip解压 ls 看到文件夹,然后移动文件夹到家目录的biosoft文件夹里面,查看,看到有很多可执行文件
当前文件夹里面运行查看帮助文档,发现已经安装成功
解压后出现文件夹,移动文件夹到家目录下文件夹,然后到达对应文件夹,进入我们复制过来的文件夹,看到有对应可执行文件hisat2
./hisat2 --help
发现已经安装成功
但是回到家目录下面发现hisat2找不到,因为没有把hisat2添加到PATH环境变量,所以必须用全路径~/biosoft/hisat2-2.1.0/hisat2 --help
PATH=/home/biosoft/hisat2-2.1.0/:$PATH
在PATH里面添加了这个文件夹就可以用了
但是该方法在退出linux系统之后就抹除了
所以应该把这个添加到linux系统的设置里面去
echo 'export PATH="/home/teach/biosoft/hisat2-2.1.0/:$PATH"' >> ~/.bashrc
source ~/.bashrc
这样之后不管如何都是可以直接运行了
源代码安装

​ ./configure --prefix=“地址”

​ make

​ make install

编译容易出错,最不建议!

source code

下载 解压 编译 添加到PATH

configure make

搜索samtools官网 右键选择下载链接地址

wget -c 文件名
tar xf 文件名
cd install-packages
ls
tar xf samtools	
ls
configure #预编译
#编译三部曲./configure --prefix="设置软件安装在什么位置"
./configure --prefix="地址"

多了个Makefile文件
make #编译
make install
cd ~/biosoft/samtools-1.10
ls   bin share
cd bin 
#看到了samtools可执行文件
./samtools --help
#添加到PATH
echo 'export PATH="samtools地址"' >> ~/.bashrc
#重启
source ./bashrc
java编译的软件

​ java -jar xxx.jar

​ 全路径调用

二进制文件右键复制 wget -c

unzip 移动 切换到文件夹下,没有绿色可执行文件,只是一个.jar文件

java -jar xxx.jar --help

在家目录中只能用全路径来运行java编译的软件

Linux - 系统结构 文件目录结构 绝对路径相对路径 通配符参数扩展

Linux系统结构

内核 shell 文件系统和应用程序

查看CPU信息 lscpu
查看内存信息 free

free -h

查看硬盘信息 df

df -h

查看文件文件夹大小 du

du -ah(当前目录的文件文件夹大小)

查看系统进程 top/ps

top 实时更新,q退出

按h查看帮助内容

ps -ef 查看 kill命令杀掉正在运行的进程

查看teach用户正在运行的几个命令

ps -ef | grep teach

Linux目录结构 文件系统构成

/bin 包含二进制可执行文件 系统的所有用户使用的命令都设在这里

/usr unix software resource 此目录用于存储系统软件资源

ls /usr/bin | wc -l

/sbin 保存与系统环境设置相关的命令,只有root可以使用这些命令进行系统环境设置

/etc 系统配置文件目录

/tmp 临时文件目录,所有用户可以访问和写入

/lib 库目录 用于存放系统和应用程序的库文件

/var 可变目录。用于存放经常变化的文件,比如日志文件

/home 主目录 linux在这里创建用户目录

​ lost+found 非正常关机的时候存放的文件

/opt 可选目录 用于存放第三方软件包和数据文件

/boot 启动目录 存放启动文件

绝对路径 相对路径
通配符和参数扩展
通配符

man 7 glob #查看所有通配符

ls * {ea,es}*

匹配所有包含es或ea的文件名

参数扩展

a=“abc”

echo $a

${expression}

统计字符个数

${#变量名} #返回变量值中字符个数

从头删除

${变量#关键字}

${变量##关键字}

从尾删除 %

${变量%关键字}

${变量%%关键字}

替换 /

${变量/旧字符串/新字符串}

${变量//旧字符串/新字符串}

fasta文件处理
#fasta文件变为一行
awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0"\n":$0 }' c2c8.fasta > c2c8line.fasta
#一行fasta转换成名字一行,序列一行
awk '{print$0"#"$NF}' cas12a_1250.fasta | awk '{$(NF-1)="";print$0}' | sed 's/#/\n/g' > cas12a_1250_fa.fasta
#取fasta文件的序列长度
awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }'  $a |awk '{length($NF)}'|awk '{$NF="";print $0}' > ${a%.fasta}.xls
#取fasta文件名字和长度,不要序列
awk '/^>/&&NR>1{print ""}{ printf "%s",/^>/ ? $0" ":$0 }'  cas12f.fasta |awk '{$NF=length($NF);print $0"\t"}'
#fasta文件名加空格,然后输出名字和长度,不要序列
sed 's/ /_/g' cas12f.fasta | awk '/^>/&&NR>1{print ""}{ printf "%s",/^>/ ? $0" ":$0 }' |awk '{$NF=length($NF);print $0"\t"}'
切文件为小文件
split命令

-l指定行数,每个文件多少行

-b指定大小,每个文件100M.,这种担心会破坏一行的完整性

-d指定用数字递增为生成的文件名编号 test111为前缀

-a指定有几位数字 这里指定了4位,则从0000开始

split -l 700000 /data.csv -d -a 4 test
split -b 100M /data.csv -d -a 4 test

split -l 4451 all_name_list -d -a 2 DataProcess

gsub

gsub(/-/,"",$4)的值是2【在赋值的情况下是这样的~】,你将2赋值给$4 ,gsub返回的是替换的次数。
如下是测试结果:
[root@Test230 ~]# echo “a b c 2011-11-22 a:d” | awk ‘$4=gsub(/-/,"",$4)’
a b c 2 a:d

看另一种情况,只是替换的话~

[root@sor-sys config]# echo “a b c 2011-11-22 a:d” | awk ‘gsub(/-/,"",$4)’
a b c 20111122 a:d
[root@sor-sys config]# echo “a b c 2011-11-22 a:d” | awk ‘gsub(/-/,"_",$4)’
a b c 2011_11_22 a:d

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值