command [option] argument1,argument1
comman:命令,如ls,df,vim等
[option]:选项,如-a,-l,-h等
arguments:参数(可以是一个或多个)
查看所有用户:more /etc/passwd
su root或者su - 进入root用户,输出入密码。此时提示符为#表示超级用户。
su zhaohuiyao 从root进入一般用户不需要密码,此时提示符为$表示一般用户。用户设计分组,权限等问题。
查看内存使用情况:df -h
关机:shutdown -h now
重启: shutdown -r now
logout 注销/退出
clear 清楚当前屏幕内容
Linux下所有的内容都可以称为文件,包括目录,普通文件,链接等。
这里强调普通文件的操作
less查看文件(可以通过上下键进行翻页),用Q退出。有些人会对less进行alias处理——le命令
cat、more也可以查看文件。但是cat是全部显示。
vim、vi、gedit,nano进行文件编辑。vim进入一般模式后,输入:set num,可显示行数。vim进入一般模式(命令行模式)
点击a,进入插入模式;点击Esc,退出插入模式;输入:x(保存修改并退出);:q(不保存直接退出);:q!(保存修改并强制退出)
touch [文件名] 创建空白文件
touch test1 创建一个名为test1的文件
touch test{1…3} 批量创建test1,test2,test3文件
gunzip 解压缩,不含参,则会覆盖掉原文件
gunzip -c prefix.fa.gz > prefix.fa 保留原文件
zcat命令 在不解压缩情况下,显示压缩文件的内容
zcat prefix.fa.gz | grep “>” 输出">“行
grep “>” prefix.fa 输出”>"行
tar -cvf ./prefix.tar /home/data/ 打包/home/data/目录下的全部文件,并保存在当前目录下的prefix.tar中
tar -xvf ./prefix.tar 解压文件
tar -zxvf ./prefix.tar.gz -C …/ #解压当前目录下的prefix.tar.gz文件到指定目录…/下
#如果在tar命令,使用-p参数,保留原文件权限
rm 删除文件或目录
rm [文件名] 删除一个文件,且会询问你是否删除
rm -r 删除一个目录,且会依次询问你是否删除目录里的项目
rm -i 询问你是否确定删除文件
rm -f 在不提示的情况下删除
cp [需要拷贝的文件或目录的绝对路径] [拷贝到的位置]
cp -r 拷贝目录
软链接/符号链接:ln -s [文件/目录] [链接名]。对软链接进行操作,即对原文件进行修改。
scp 用于两个服务器之间文件传输
scp zhaohuiyao@11.11.1.1:/home/zhaohuiyao/.bashrc ./ #从服务器IP为11.11.1.1,账户为zhaohuiyao,文件为/home/zhaohuiyao/.bashrc,传输到当前服务器的当前目录下。需要知道密码
scp -rL zhaohuiyao@11.11.1.1:/home/zhaohuiyao/ ./ #传输目录
split 切割文件
split -l 100 name.txt split #将文件name.txt按照每100行一个文件进行分割。结果文件前缀为splitaa、splitab依次类推
查看权限 ll [目录或文件名]
lrwxrwxrwx :文件属性,共10个字符,第1个单独,后面9个,三个一组。(r——读取/查看;w——写入/修改;x——执行)
第1个字符:l——链接;d——目录;-——文件;c——字符设备文件;b——块设备文件
后面9个字符称为文件模式,且每3个字符表示一种用户权限。依次是文件所有者权限,用户组权限,其他用户权限。这9个字符对应一个八进制数字(这对后面的修改权限操作很重要)
文件模式八进制0:—;1:–x;2:-w-:;3:-wx;4:r–;5::r-x;6::rw-;7:rwx。最高权限777
修改权限 chmod [权限数值] [文件] 常使用的权限数值有:777,755,700,660等
修改权限也可以通过符号的形式进行(一般不常用)
u——文件所有者;g——文件所有者所在组;o——其他用户;a——所有用户
+——添加某种权限;-——删除某种权限,=——表示该用户只能有什么权限
三种权限:r,w,x。chmod a-x xxx.txt 表示删除所有用户对该文件的执行权限。
当出现错误:Permission denied,表示:当前用户没有查看/修改/执行该文件或目录的权限。需获得权限。
pwd 显示当前工作目录的完整路径
./:当前目录 …/:父目录(上级目录)
cd 进入当前用户的主目录
ls 当前工作目录下的文件和目录
ls -a 当前工作目录下的文件和目录(包括以.开头的文件与目录)
ls -l (ll)当前工作目录下的文件和目录的详细
ls -d [目录名] 查看指定目录下的详细信息
ls -t 按修改时间排序
du -sh * 查看当前目录下的所有目录和文件大小情况
简单理解,在Liunx下我们要使用某个命令,如ls。按照运行规则,我们需要提供该命令的绝对路径,即/usr/bin/ls,但为什么我们不需要,这是因为在安装Liunx时,已经将/usr/bin设置为环境变量。
这样当我们在命令行输出ls,操作系统会对PATH存储的目录进行查找,若找到/usr/bin,就暂停并运行,若查不到就报错。
PATH:是存放有(可执行)命令和程序的目录集合;在操作系统接到用户输入的命令时,会对PATH存储的目录进行查找,看下是否有与用户输入的命令同名的文件存在,而且是从前到后一个个查找,而且是查到就停,最后查不到就报错。
echo $PATH 查看当前环境下PATH所有信息
设置环境变量:两种情况。
情况一:写入.bashrc文件,则一直保存
.bashrc文件/.bash_profile文件是一个,不同Linux发行版。这个文件很重要,要小心修改或者备份好,可能出现修改某些基础设置后,无法使用当前用户。
情况二:如果直接在命令行执行export命令,则仅在当前终端可用,关闭终端后,修改消失
例:需要存放的路径:/home/zhaohuiyao/Biosoft/fastqc
#情况一
export PATH=$PATH:/home/zhaohuiyao/Biosoft/fastqc >> ~/.bashrc。(或者使用vim命令进行编辑)
source ~/.bashrc #激活新的环境变量
#情况二
export PATH=$PATH:/home/zhaohuiyao/Biosoft/fastqc
export PATH=$PATH:pwd 和 export PATH=pwd:$PATH 的区别
前面提到:在命令运行时,会进行从前到后,查到就停的操作;因此理解为越靠近前面,优先级越高
前者是在所有已有的PATH最后面添加新路径
后者是在所有已有的PATH最前面添加新路径
ps 查看进程信息,仅为机器状态的一个快照。ps -ef
top 查看动态进程信息,每3秒更新一次。
16:21:05 当前时间 up 正常运行的时间,从最近一次启动开始计算,在这个例子中,系统已经运行了7小时14分钟 1个用户正在登陆 load average(负载均值):指等待运行的进程数。三个值分别对应三个时间点(前1min,前5min,前15min),该值小于1.0表示机器不忙
tasks:总进程数和各进程的状态信息(运行,休眠,暂停,僵尸)
%Cpu(s):CPU时间被占情况。us——用户进程;sy——系统进程;ni——友好进程
jobs 推到后台的命令情况
htop 查看系统使用情况
#如果有两个不同匹配结果之间用"–“间隔
grep -c -e “>” ./test.fa #返回符合条件(包含字符”>“的行)的行的总行数
grep -A 100 -e “>” ./test.fa #共同返回符合条件行和该行后的100行内容
grep -B 100 -e “>” ./test.fa #共同返回符合条件行和该行前的100行内容
注:使用-A和-B参数返回的结果中,如果有多个匹配结果,会存在”–"作为间隔行
grep -v -e “>” ./test.fa #返回不符合条件的行(反向查找)
grep -A 1 “>” ./test.fa | grep -v “–” > ./2row_test.fa
#提取匹配行和下一行的内容
grep -E #匹配复杂正则表达式,而-e参数匹配简单正则表达式
grep -wf 1.txt 2.txt
#在2.txt文件中寻找文件1.txt中每一行PATTERN的匹配行。即寻找两个文件的交集
grep -vwf 1.txt 2.txt
#在2.txt文件中寻找文件1.txt中每一行PATTERN的匹配行,再反向查找。即寻找2.txt中没有1.txt的行
#awk默认识别TAB键
#awk语句中的常用变量/内置变量。$0:整行内容‘;$1:第一项;$2:第二项;NF:文件列数;NR:正在读的行的序号;FNR:当前文件读的行的序号;END:文件全部读取后做的最终处理;BEGIN:设置初始化参数
#awk语句中的函数。
length($1):计算字符串$1长度
index(“a”,$1):返回字符“a”在字符串$1中的位置索引,从1开始
tolower($1):将所有字符转为小写字母
toupper($1):将所有字符转为小写字母
substr($1,3,4):返回字符串$1中第3位开始,长度为4的子字符串,从1开始
split($1,arr,“a”):以字符"a"为分割符切割字符串$1,保存到数组arr中。数组arr以1为下标开始
#awk语句中经常使用if判断语句。
#awk语句中使用print和printf函数
print $1"\t"$2
printf “%s%03d\t%s\n”, “TF:”,23,“nd” #先设置输出格式,在对其中变量进行指定。则最后输出TF:023 nd
awk ‘{print “>”$1"\n"$2}’ ./sample.txt > ./barcode.fasta
#经典例子,不同条件下修改即可
awk ‘{if($0~/^>/){print $0} else{print “no”}}’ ./test.txt > ./result.txt #判断该行是否以">“开始,若是,则输出改行内容,否则输出"no”
awk -v FS=“\t” -v OFS=“\t” ‘{print $1}’ ./test.txt > ./result.txt
#参数-v FS=“\t”,指定输入文件中每列的间隔符
#参数-v OFS=“\t”,指定输出文件中每列的间隔符
awk ‘BEGIN {sum=0;} {sum=sum+length($0);} END {printf “%04d\n”, sum;}’ ./test.txt
#cut默认识别TAB键。按列提取文件内容
cut -f 1 ./name.txt > ./col1.txt #首先将name.txt文件按TAB键分列,然后提取第1列。若不存在TAB键,则整行输出
cut -f 1,5,2 ./name.txt > ./col1,2,5.txt #首先将name.txt文件按TAB键分列,然后提取第1列、第2列和第5列。每一行顺序是1,2,5而不是1,5,2
与上面一样结果一样cut -f 5,2,1 ./name.txt > ./col1,2,5.txt
cut -f 1 -d " " ./name.txt > ./col1.txt #首先将name.txt文件按空格键(连续空格也是可以的)分列,然后提取第1列
两种情况
①终端直接输出bc,进入计算页面(交互页面),使用quit退出
②与echo和管道符一起使用
echo “6.5/2.7” | bc #输出2
echo “6.5/2.7” | bc -l #输出2.40740740740740740740
echo “scale=4;6.5/2.7” | bc #输出2.4074。scale指定小数点后位数
sort -k 3 -n -r snp.tx > snp.sorted.txt #对snp.txt文件进行排序。按照第三列的值进行排序(-k参数);-n参数:排序的值按照数值大小排序。否则按照ASCII码排序(例如:11<8)。-r参数:从大到小。默认为从小到大
假设一个文件test.txt,5行,分别是1,a,1,a,b
#寻找一个文件的未重复行。即拿到b
sort test.txt | uniq -u
#一个文件的去重复。即拿到1,a,b
sort test.txt | uniq
假设字符串str="baidu hello world"
arr=($str) #默认使用空白字符(1个或连续多个)或TAB键或者回车符进行切割
${str[0]} #表示baidu
${str[1]} #表示hello
${str[2]} #表示world
假设字符串str="baidu:hello:world"
arr=($str) #不会发生切割
方法一:
IFS=":"
arr=($str) #发生切割
方法二:
arr=(${str//:/ }) #发生切割
cat ./SRR_Acc_List.txt | while read line; do fastq-dump -e 24 -p /data/SRX5327410_sra/$line -O /root/SRX5327410_FQ/; done
#有时在linux系统下无法下载的文件。选择在windows下载后上传
进入powershell(win+X) 点击Windows Powershell
$client = new-object System.Net.WebClient
$client.DownloadFile(‘http://korflab.ucdavis.edu/Unix_and_Perl/FAlite.pm’,‘C:\Users\Administrator\Desktop\master.zip’)
https://ftp.ncbi.nlm.nih.gov/genomes/refseq/assembly_summary_refseq.txt
$client.DownloadFile(‘https://ftp.ncbi.nlm.nih.gov/genomes/refseq/assembly_summary_refseq.txt’,‘C:\Users\Administrator\Desktop\assembly_summary_refseq.txt’)
vim test.sh
#!/bin/bash
#Author:zhaohuiyao
#Date:2021-01-18
#This script is used to exercise shell.
echo 'Hello World!'
ll test.sh
-rw-r–r–. 1 root root 109 Jan 18 16:55 test.sh
#此时的test.sh文件不是一个可执行的文件
#修改权限,755表示所有人都可以执行;700表示只有脚本所有者可以执行
chmod 755 test.sh
ll test.sh
-rwxr-xr-x. 1 root root 109 Jan 18 16:55 test.sh
./test.sh
Hello World!
#如果不修改权限。执行命令 /bin/bash ./test.sh
conda activate GenomeScope
conda env export > /home/zhaohuiyao//miniconda3/yaml/GenomeScope.yaml
conda env create -f /home/zhaohuiyao//miniconda3/yaml/GenomeScope.yaml
#该yaml文件可以在snakemake文件作为conda参数的内容