bash命令——linux command

bash命令——linux command

  • 1. Linux下的命令结构
  • 2. 重点命令学习
    • 2.1 基础命令
    • 2.2 文件操作
    • 2.3 文件权限
    • 2.4 目录操作
    • 2.5 环境变量
    • 2.6 进程信息
    • 2.7 grep命令
    • 2.8 awk命令
    • 2.9 cut命令
    • 2.10 bc命令
    • 2.11 sort命令
  • 3. 其他知识点
    • 3.1 批量执行某条命令
    • 3.2 windows下载数据
    • 3.3 创建shell脚本并执行
    • 3.4 积累的常用的shell命令

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进入一般模式后,输入: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 -zxvf ./prefix.tar 解压文件
tar -zxvf ./prefix.tar -C …/ #解压当前目录下的prefix.tar文件到指定目录…/下
rm 删除文件或目录
rm [文件名] 删除一个文件,且会询问你是否删除
rm -r 删除一个目录,且会依次询问你是否删除目录里的项目
rm -i 询问你是否确定删除文件
rm -f 在不提示的情况下删除
cp [需要拷贝的文件或目录的绝对路径] [拷贝到的位置]
cp -r 拷贝目录
软链接/符号链接:ln -s [文件/目录] [链接名]。对软链接进行操作,即对原文件进行修改。
scp 用于两个服务器之间文件传输
scp [email protected]:/home/zhaohuiyao/.bashrc ./ #从服务器IP为11.11.1.1,账户为zhaohuiyao,文件为/home/zhaohuiyao/.bashrc,传输到当前服务器的当前目录下。需要知道密码
scp -rL [email protected]:/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文件,则一致保存;如果直接在命令行执行export命令则仅在当前终端可用,关闭终端后,不改变
.bashrc文件/.bash_profile文件是一个,不同Linux发行版。这个文件很重要,要小心修改或者备份好,可能出现修改某些基础设置后,无法使用当前用户。
例:需要存放的路径:/home/zhaohuiyao/Biosoft/fastqc
①export PATH= P A T H : / h o m e / z h a o h u i y a o / B i o s o f t / f a s t q c > >   / . b a s h r c 。(或者使用 v i m 命令进行编辑)。然后使用 s o u r c e   / . b a s h r c 。激活新的环境变量② e x p o r t P A T H = PATH:/home/zhaohuiyao/Biosoft/fastqc >> ~/.bashrc。(或者使用vim命令进行编辑)。然后使用source ~/.bashrc。激活新的环境变量 ②export PATH= PATH:/home/zhaohuiyao/Biosoft/fastqc>> /.bashrc。(或者使用vim命令进行编辑)。然后使用source /.bashrc。激活新的环境变量exportPATH=PATH:/home/zhaohuiyao/Biosoft/fastqc
export PATH= P A T H : p w d 和 e x p o r t P A T H = p w d : PATH:pwd 和 export PATH=pwd: PATH:pwdexportPATH=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行内容
grep -B 100 -e “>” ./test.fa #共同返回符合条件行和该行前的100行内容
注:使用-A和-B参数返回的结果中,如果有多个匹配结果,会存在”–"作为间隔行
grep -v -e “>” ./test.fa #返回不符合条件的行(反向查找)
grep -E #匹配复杂正则表达式,而-e参数匹配简单正则表达式

2.8 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”,指定输出文件中每列的间隔符

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参数:从大到小。默认为从小到大

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,指将标准错误追加到标准输出后面。若是出现nohup.out无法生成的现象,你可以指定。nohup /bin/bash ./hello.sh 1>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

你可能感兴趣的:(shell学习,bash,linux,生物信息学)