• 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进入一般模式后,输入: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依次类推

    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最前面添加新路径
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    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 -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的行

    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”,指定输出文件中每列的间隔符
    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//:/ })	#发生切割
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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!'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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
    • 2
    • 3
    • 4
    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
  • 相关阅读:
    Linux内核设计与实现 第一章 Linux内核简介
    qt作业day4
    【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
    js中内存泄漏的几种情况
    虚拟机开机字体变大,进入系统后字体模糊
    双三次差值bicubic
    【Python】Python中一些有趣的用法
    (九)RabbitMQ交换机(Exchange)
    《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)
    主存储器的基本组成
  • 原文地址:https://blog.csdn.net/weixin_44616693/article/details/125605934