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