bash命令——linux command

1. Linux下的命令结构

command [option] argument1,argument1
comman:命令,如ls,df,vim等
[option]:选项,如-a,-l,-h等
arguments:参数(可以是一个或多个)

2. 重点命令学习

2.1 基础命令

查看所有用户:more /etc/passwd
su root或者su - 进入root用户,输出入密码。此时提示符为#表示超级用户。
su zhaohuiyao 从root进入一般用户不需要密码,此时提示符为$表示一般用户。用户设计分组,权限等问题。
查看内存使用情况:df -h
关机:shutdown -h now
重启: shutdown -r now
logout 注销/退出
clear 清楚当前屏幕内容

2.2 文件操作

Linux下所有的内容都可以称为文件,包括目录,普通文件,链接等。
这里强调普通文件的操作
less查看文件(可以通过上下键进行翻页),用Q退出。有些人会对less进行alias处理——le命令
cat、more也可以查看文件。但是cat是全部显示。
vim、vi、gedit,nano进行文件编辑。
vim进入一般模式后
点击a,进入插入模式;点击Esc,退出插入模式;输入:x(保存修改并退出);:q(不保存直接退出);:q!(保存修改并强制退出)
在一般模式下输入以下信息
:/查找的词 n:下一个,N:上一个
:set nu 显示行号
:set nonu 关闭行号
:set num,可显示行数
:%s/,/\n/g,行 -> 列
:%s/\n/,/g,列 -> 行
#从第二行开始看文件:tail -n +2 test.txt | less
touch [文件名] 创建空白文件
touch test1 创建一个名为test1的文件
touch test{1…3} 批量创建test1,test2,test3文件
gunzip 解压缩,不含参,则会覆盖掉原文件
gzip prefix.fa
gunzip -c prefix.fa.gz > prefix.fa 保留原文件
bunzip2 解压缩,不含参,则会覆盖掉源文件
bunzip2 -c prefix.fa.bz2 > prefix.fa 保留原文件
bzip2 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依次类推

2.3 文件权限

查看权限 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,表示:当前用户没有查看/修改/执行该文件或目录的权限。需获得权限。

2.4 目录操作

pwd 显示当前工作目录的完整路径
./:当前目录 …/:父目录(上级目录)
cd 进入当前用户的主目录
ls 当前工作目录下的文件和目录
ls -a 当前工作目录下的文件和目录(包括以.开头的文件与目录)
ls -l (ll)当前工作目录下的文件和目录的详细
ls -d [目录名] 查看指定目录下的详细信息
ls -t 按修改时间排序
du -sh * 查看当前目录下的所有目录和文件大小情况

2.5 环境变量

简单理解,在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最前面添加新路径

2.6 进程信息

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 查看系统使用情况

2.7 grep命令

#如果有两个不同匹配结果之间用"–“间隔
grep -c -e “>” ./test.fa #返回符合条件(包含字符”>“的行)的行的总行数
grep -A 100 -e “>” ./test.fa #共同返回符合条件行和该行后的100行内容,101行
grep -B 100 -e “>” ./test.fa #共同返回符合条件行和该行前的100行内容,101行
注:使用-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的行
grep -v ‘^$’ #删除空白行
#参数-v:非
#参数-A 2:向下多取2行
#参数-B 2:向上多取2行
#参数-G:正常字符串
#参数-E:通配字符串
#参数-f:文件,每一行是一个匹配,但是不会按照匹配顺序进行输出
#特殊字符(.,*,-,/)等之类可以在前面加\

2.8 awk命令

强调:awk命令中使用单引号很重要
#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

2.9 cut命令

#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列

2.10 bc命令

两种情况
①终端直接输出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指定小数点后位数

2.11 sort命令

sort -k 3 -n -r snp.tx > snp.sorted.txt #对snp.txt文件进行排序。按照第三列的值进行排序(-k参数);-n参数:排序的值按照数值大小排序。否则按照ASCII码排序(例如:11<8)。-r参数:从大到小。默认为从小到大

2.12 uniq命令

假设一个文件test.txt,5行,分别是1,a,1,a,b
#寻找一个文件的未重复行。即拿到b
sort test.txt | uniq -u
#一个文件的去重复。即拿到1,a,b
sort test.txt | uniq

2.13 shell中对字符串切割和字符串

假设字符串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//:/ })	#发生切割

3. 其他知识点

3.1 批量执行某条命令

cat ./SRR_Acc_List.txt | while read line; do fastq-dump -e 24 -p /data/SRX5327410_sra/$line -O /root/SRX5327410_FQ/; done

3.2 windows下载数据

#有时在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’)

3.3 创建shell脚本并执行

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

3.4 积累的常用的shell命令

  1. 查看linux版本:cat /proc/version 查看服务器是32/64位:getconf LONG_BIT
  2. 查看服务器配置情况:CPU情况:lscpu;内存情况:free -g
  3. nohup /bin/bash ./hello.sh 2>&1 &。nohup将命令挂载到后台。这里会将输出追加到nohup.out文件。若是不想要nohup.out文件,nohup /bin/bash ./hello.sh 1>/dev/null 2>&1 &。这里1表示标准输出,2表示标准错误输出。2>&1,指将标准错误追加到标准输出后面。指定log文件名:nohup /bin/bash ./hello.sh nohup.out 2>&1 &
  4. 将命令挂载到后台。常用两种方法:1. nohup(no hang up)CMD &:这种情况,即使关闭当前终端,该命令也会执行。2. CMD &:这种情况,当关闭当前终端,则会终止该命令。
  5. Ctrl+c:表示终止当前命令;Ctrl+z:表示暂停当前命令。
  6. jobs:查看当前终端提交到后台的任务。若重新打开一个终端,则不会显示。
  7. bg:把任务转到后台运行
  8. disown:移除任务
  9. 若是你正在运行一个任务,可能马上要断网了,想将命令推到后台,但不想先终止命令,再重新推到后台,那怎么办呢?操作如下:1.先用Ctrl+z,暂停当前任务;2. 用jobs查看该任务的编号,状态显示stopped,假设编号是1111;3. 执行bg %1111,将任务转到后台运行;4.再次用jobs查看,会发现状态是running,而且是一个新的任务编码;5. 执行disown %1111,将原来的任务移除;6.再次运行jobs确认。(这样,就算断网,也没有关系了。但是日志文件会丢失)
  10. 对.gz/.tar/.zip等压缩文件进行wc统计。命令:less xxx.tar | wc -l
  11. 将终端输出结果输出到log文件中。命令ls | tee -a log.txt(参数-a:表示追加。若为tee log.txt表示覆盖)
  12. conda环境打包为yaml文件
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参数的内容
  1. 查看被kill掉的进程的原因
    dmesg | egrep -i -B100 ‘killed process’,多数是out of memory
  2. wget下载文件,参数-c:支持断点续传。参数-O:修改下载文件名
    wget -c -O newname.txt https://SSS/SSS/name.txt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值