生信星球转录组培训第一期Day2——卖萌哥

今天的主要任务是练习linux基础命令,然后结合实例练习一下三个重要的命令awk、sed、grep

基础命令:

  • pwd

显示当前目录。print word directory

  • ls

我一般常用的是llll=ls -l mac下是没有这个的噢,要自己手动添加的. 添加方法参考这个: https://blog.csdn.net/sway_wu/article/details/82992359)
后来经常用ll -th
-l 列出详细信息
-t 按修改时间排序
-h 文件大小按照适合人阅读的方式显示
其他可考虑参数:
-r 倒序排序 reverse
--color=auto根据输出结果类型上色

  • cd

常用的是:
cd ~ 因为~代表家目录,这条命令能快速回到家目录(如果是root的话就是到 /root,如果是普通用户的话就到/home/用户名
cd - 回到刚才那一层目录,就像电视机遥控器上的返回按钮,能在固定的两个台之间左右横跳
cd .. 切换到上一级目录

  • mkdir

今天新学会了一个命令:
mkdir $(date +%F) 可以创建以今天日期为名称的目录

$ mkdir $(date +%F)
$ ll
drwxrwxr-x.  2 n1806171b n1806171b   0 Jun  4 18:10 2019-06-04

太酷了!谢谢豆花!

  • rmdir

这是个我不常用的命令。
如何一次性删掉当前目录下的所有空文件夹:
find . -type d -empty -print | xargs rmdir

这条命令说了啥呢?
find . 查找当前目录下的所有文件。
那接下来的问题就是,按照什么条件来查找呢?
-type d d就是directory,就是文件夹啦。那是什么样的文件夹呢?
-empty 空的文件夹噢。找到之后呢
-print 打印出来。不打印就没有东西可以输出出来,输出不出来就不能通过|管道符交给后面的命令咯
| xargs 就是把前面的输出当作后面的命令的输入。输入到哪里去呢?
rmdir 删除掉空的文件夹。相当于执行了rmdir ManyEmptyDir这样的命令。
看懵了吗?懵了也没关系噢,多用就会啦,不难哒。

  • rm

啊哈。删库警告⚠️!
rm -rf / 千万别用这个噢,特别是当你有root权限的时候,除非你决定要删库跑路了 ( •̀ ω •́ )✧
-r recursive, 就是会把文件夹下的内容一起递归删除
-f force, 强制删除。

  • touch

“摸”一个文件出来

  • mv

这个命令有两个功能:一个是移动,一个是重命名。那啥时候是移动啥时候是重命名呢?

视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

参考自: https://blog.csdn.net/mosesmo1989/article/details/51094378/

I hope I make myself clear enough.

  • cat

把文件内容在标准输出(即屏幕上)全部打印出来。
今天新学会一个功能:重定向输出文件

$ cat > test.txt
Moran, can you hear me?
loving you~

在这个模式下,如果打错了字想要删掉,按backspace是不够的,你会发现不但要删的东西没删掉,反而还多了一些奇怪的字符

$ cat > test.txt
I made a typo heree^H^H^H^H^H

那个^H就是按退格产生的,这时候不要慌,按住Ctrl再按退格就能正常删除啦。

  • less

less -SN
-S --chop-long-lines Chop (truncate) long lines rather than wrapping.
-N 加上行号

  • head & tail

望文生义,这俩命令一个是看文件的头,一个是看文件的尾的。
一般会加一个 -n参数来设定看头(尾)的多少行,默认是10行。
也可以更偷懒一些, 直接把-n 12合并成-12, 例如:

head -n 12 
head -12 
tail -20 
  • |

管道符。这个特有意思,特别是结合xargs的时候。管道呢,就是把前一个命令的结果当作后一段命令的输入,例如
ls *.bam | xargs -l -I {} echo samtools flagstat {} \> {}.stat > flagstat.sh
这个一大串的命令说了啥呢?首先,ls *.bam是显示出了当前目录下所有以.bam为结尾的文件,把它交给下面这一段命令作为它的输入。
下面这个xargs -l是把输入变成一行一个文件的格式,之后-I {}是用{}这个作为符号,代替输入的文件。echo到后面的内容则是输出命令。

练习题

  1. 在主目录下面创建/tmp文件夹,并且使其中包含 1/2/3/4/5 格式的文件夹系列
  2. 在创建好的文件夹下面,比如我的是 /home/u1239/tmp/1/2/3/4/5 ,里面创建文本文件 xi.txt,并输入内容,例如Hello world, Welcome to bioinfoplanet, Nice to see you。三句话分行显示
  3. 在tmp/下创建 1~5这5个文件夹,然后每个文件夹下面继续创建 1~5这5个文件夹, 并查看
  4. 增加一点难度:我想在练习三的每个目录中都放进去一个文件xi.txt,内容还是练习二的内容
  5. 下载 http://www.biotrainee.com/jmzeng/igv/test.bed 文件,统计该文件总共有几行,含有 H3K4me3 的是第几行
  6. 下载 http://www.biotrainee.com/jmzeng/rmDuplicate.zip 文件,并且解压,查看里面的文件夹结构 (提示:了解tree命令)
  1. 考察的是mkdir的-p参数
    (怎么查看参数呢?敲mkdir --help或者man mkdir就好啦,man是manual,也可以理解成有困难找男人来帮忙( •̀ ω •́ )✧)
    -p --parents no error if existing, make parent directories as needed
$ mkdir -p tmp/1/2/3/4/5
$ tree tmp/
tmp/
└── 1
    └── 2
        └── 3
            └── 4
                └── 5

5 directories, 0 files
  1. 考察的就是今天新学的cat > xi.txt 命令啦。
$ cat > tmp/1/2/3/4/5/xi.txt
Hello world
Welcome to bioinfoplanet
Nice to see you
^C
$ cat tmp/1/2/3/4/5/xi.txt
Hello world
Welcome to bioinfoplanet
Nice to see you
  1. 这道题考察的是批量创建,关键是用{1..5}来一次性批量生成文件夹。文件夹得一级一级来创建,否则会报错噢。
$ mkdir tmp
$ mkdir tmp/{1..5}
$ mkdir tmp/{1..5}/{1..5}
$ tree tmp/
tmp/
├── 1
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
├── 2
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
├── 3
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
├── 4
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   └── 5
└── 5
    ├── 1
    ├── 2
    ├── 3
    ├── 4
    └── 5

30 directories, 0 files
  1. 这个问题确实有点点难,查了一下才找到思路。
    就是借助管道符,把本来要做25次的命令一次性生成好。
    把要移动的文件夹作为管道符的输入,输入的内容会被补充到最命令的后面。
    所以其实最基础的命令就是cp xi.txt tmp/1/1这样的模式,只是借助管道符一次全部做完而已。看起来有点难,想清楚就不难。用tree查看的时候,增加一个-h参数能够显示出文件的大小,可以看到确实是把生成的xi.txt文件放进去了(大小为53字节的文件),而不是在每个文件夹下面创建一个空的xi.txt
$ ll xi.txt
-rw-rw-r--. 1 n1806171b n1806171b 53 Jun  4 22:08 xi.txt
$ cat xi.txt
Hello world
Welcome to bioinfoplanet
Nice to see you
$ echo tmp/*/* | xargs -n 1 cp xi.txt
$ tree -h tmp/
tmp/
├── [  95]  1
│   ├── [  24]  1
│   │   └── [  53]  xi.txt
│   ├── [  24]  2
│   │   └── [  53]  xi.txt
│   ├── [  24]  3
│   │   └── [  53]  xi.txt
│   ├── [  24]  4
│   │   └── [  53]  xi.txt
│   └── [  24]  5
│       └── [  53]  xi.txt
├── [  95]  2
│   ├── [  24]  1
│   │   └── [  53]  xi.txt
│   ├── [  24]  2
│   │   └── [  53]  xi.txt
│   ├── [  24]  3
│   │   └── [  53]  xi.txt
│   ├── [  24]  4
│   │   └── [  53]  xi.txt
│   └── [  24]  5
│       └── [  53]  xi.txt
├── [  95]  3
│   ├── [  24]  1
│   │   └── [  53]  xi.txt
│   ├── [  24]  2
│   │   └── [  53]  xi.txt
│   ├── [  24]  3
│   │   └── [  53]  xi.txt
│   ├── [  24]  4
│   │   └── [  53]  xi.txt
│   └── [  24]  5
│       └── [  53]  xi.txt
├── [  95]  4
│   ├── [  24]  1
│   │   └── [  53]  xi.txt
│   ├── [  24]  2
│   │   └── [  53]  xi.txt
│   ├── [  24]  3
│   │   └── [  53]  xi.txt
│   ├── [  24]  4
│   │   └── [  53]  xi.txt
│   └── [  24]  5
│       └── [  53]  xi.txt
└── [  95]  5
    ├── [  24]  1
    │   └── [  53]  xi.txt
    ├── [  24]  2
    │   └── [  53]  xi.txt
    ├── [  24]  3
    │   └── [  53]  xi.txt
    ├── [  24]  4
    │   └── [  53]  xi.txt
    └── [  24]  5
        └── [  53]  xi.txt

30 directories, 25 files
  1. 考察下载的wget命令,统计行数的wc命令,还有查找的grep命令。
    wc -l 统计行数
    grep 查找,-n 显示行号。
$ wget http://www.biotrainee.com/jmzeng/igv/test.bed
$ cat test.bed | wc -l
10
$ grep -n 'H3K4me3' test.bed
8:chr1  9810    10438   ID=SRX387603;Name=H3K4me3%20(@%20HMLE);Title=GSM1280527:%20HMLE%20Twist3D%20H3K4me3%20rep2%3B%20Homo%20sapiens%3B%20ChIP-Seq;Cell%20group=Breast;
source_name=HMLE_Twist3D_H3K4me3;cell%20type=human%20mammary%20epithelial%20cells;transfected%20with=Twist1;culture%20type=sphere;chip%20antibody=H3K4me3;chip%20antibody%20vendor=Millipore; 222 . 9810 10438 0,226,255
  1. 考察wget,unzip和tree
$ wget http://www.biotrainee.com/jmzeng/rmDuplicate.zip
$ unzip rmDuplicate.zip
$ tree -pghD rmDuplicate
rmDuplicate
├── [drwxrwxr-x n1806171b   48 Nov 12  2016]  picard
│   ├── [drwxrwxr-x n1806171b  244 Nov 12  2016]  paired
│   │   ├── [-rw-rw-r-- n1806171b  351 Nov 12  2016]  readme.txt
│   │   ├── [-rw-rw-r-- n1806171b 3.0K Nov 12  2016]  tmp.header
│   │   ├── [-rw-rw-r-- n1806171b 2.7K Nov 12  2016]  tmp.MarkDuplicates.log
│   │   ├── [-rw-rw-r-- n1806171b 2.0K Nov 12  2016]  tmp.metrics
│   │   ├── [-rw-rw-r-- n1806171b  952 Nov 12  2016]  tmp.rmdup.bai
│   │   ├── [-rw-rw-r-- n1806171b 4.8K Nov 12  2016]  tmp.rmdup.bam
│   │   ├── [-rw-rw-r-- n1806171b  11K Nov 12  2016]  tmp.sam
│   │   └── [-rw-rw-r-- n1806171b 4.4K Nov 12  2016]  tmp.sorted.bam
│   └── [drwxrwxr-x n1806171b  281 Nov 12  2016]  single
│       ├── [-rw-rw-r-- n1806171b  351 Nov 12  2016]  readme.txt
│       ├── [-rw-rw-r-- n1806171b  16K Nov 12  2016]  tmp.header
│       ├── [-rw-rw-r-- n1806171b 3.1K Nov 12  2016]  tmp.MarkDuplicates.log
│       ├── [-rw-rw-r-- n1806171b  969 Nov 12  2016]  tmp.metrics
│       ├── [-rw-rw-r-- n1806171b 3.9K Nov 12  2016]  tmp.rmdup.bai
│       ├── [-rw-rw-r-- n1806171b 9.5K Nov 12  2016]  tmp.rmdup.bam
│       ├── [-rw-rw-r-- n1806171b  11K Nov 12  2016]  tmp.sam
│       └── [-rw-rw-r-- n1806171b  10K Nov 12  2016]  tmp.sorted.bam
└── [drwxrwxr-x n1806171b   48 Nov 12  2016]  samtools
    ├── [drwxrwxr-x n1806171b  213 Nov 12  2016]  paired
    │   ├── [-rw-rw-r-- n1806171b  354 Nov 12  2016]  readme.txt
    │   ├── [-rw-rw-r-- n1806171b 3.0K Nov 12  2016]  tmp.header
    │   ├── [-rw-rw-r-- n1806171b 4.3K Nov 12  2016]  tmp.rmdup.bam
    │   ├── [-rw-rw-r-- n1806171b 1.8K Nov 12  2016]  tmp.rmdup.vcf.gz
    │   ├── [-rw-rw-r-- n1806171b  11K Nov 12  2016]  tmp.sam
    │   ├── [-rw-rw-r-- n1806171b 4.4K Nov 12  2016]  tmp.sorted.bam
    │   └── [-rw-rw-r-- n1806171b 1.8K Nov 12  2016]  tmp.sorted.vcf.gz
    └── [drwxrwxr-x n1806171b  213 Nov 12  2016]  single
        ├── [-rw-rw-r-- n1806171b  355 Nov 12  2016]  readme.txt
        ├── [-rw-rw-r-- n1806171b  16K Nov 12  2016]  tmp.header
        ├── [-rw-rw-r-- n1806171b 8.8K Nov 12  2016]  tmp.rmdup.bam
        ├── [-rw-rw-r-- n1806171b 4.8K Nov 12  2016]  tmp.rmdup.vcf.gz
        ├── [-rw-rw-r-- n1806171b  11K Nov 12  2016]  tmp.sam
        ├── [-rw-rw-r-- n1806171b  10K Nov 12  2016]  tmp.sorted.bam
        └── [-rw-rw-r-- n1806171b 4.8K Nov 12  2016]  tmp.sorted.vcf.gz

6 directories, 30 files

顺便查了一下unzip和gunzip的区别

zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz

附录:

tree命令行参数:
-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用"?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
参考自:https://www.jianshu.com/p/15a96c1de695

你可能感兴趣的:(生信星球转录组培训第一期Day2——卖萌哥)