30

Muscle进行多序列比对

软件的主页是

http://www.drive5.com/muscle/

进入主页,简单看看软件介绍,这个软件还是蛮牛的,一个人在家里自己写出来的,当然,对于普通人来说,这个软件跟clustalW没什么区别,反正都是多序列比对啦!

我们下载适合我们平台的版本即可!

Muscle进行多序列比对193

准备数据,我这里选择的是几个短小的蛋白

Muscle进行多序列比对215

 

这里有两种比对方式,都是很简单的命令

一种是先比对,再生成树文件(树的格式是Newick format, )

muscle -in mouse_J.pro -out mouse_J.pro.a

muscle -maketree -in mouse_J.pro.a -out mouse_J.phy (这里有两种构建树的方式)

另外一种是比对成aln格式的数据,然后用其它软件(phyml或者phylip)来生出树文件

muscle -in mouse_J.pro   -clwout seqs.aln

可以看到比对的效果还是蛮好的,是aln格式的比对文件,这个格式非常常用

Muscle进行多序列比对505

或者输出phy格式的比对文件,

muscle -in mouse_J.pro  -physout seqs.phy

Muscle进行多序列比对685

可以被phyml等软件识别,然后来构建进化树,见  http://www.bio-info-trainee.com/?p=626

21

美国Minnesota大学的生信全套课件分享

刚才在知乎什么看到了一篇分享pacbio的数据特征,顺便看到了Minnesota大学的关于生物信息的教程的ppt合集,所以就想打包下载。

https://www.msi.umn.edu/tutorial-materials

这个网页里面有64篇pdf格式的ppt,还有几个压缩包,本来是准备写爬虫来爬去的,但是后来想了想有点麻烦,而且还不一定会看,反正也是玩玩
就用linux的命令行简单实现了这个爬虫功能。
curl https://www.msi.umn.edu/tutorial-materials >tmp.txt
perl -alne '{/(https.*?pdf)/;print $1 if $1}' tmp.txt >pdf.address
perl -alne '{/(https.*?txt)/;print $1 if $1}' tmp.txt
perl -alne '{/(https.*?zip)/;print $1 if $1}' tmp.txt >zip.address
wget -i pdf.address
wget -i pdf.zip
这样就可以啦!
教程ppt列表如下,大家有兴趣的可以自行下载浏览。

2009-04-22-mrm-presentation_0.pdf               Matlab_viz_image_UMR.pdf
Analyzing ChIP at the command line.pdf          MaxQuant_Introduction_112409.pdf
Analyzing ChIP using Galaxy.pdf                 Maxquant-step-by-step_rs091124.pdf
Badalamenti_PacBio_tutorial_12-10-2014.pdf      MSI Applications Catalog Oct 21 MB slides.pdf
basics_chip_seq.pdf                             MSIIntro2013Jun18.pdf
Best_Practices_GATK_Variant_Detection_v1_0.pdf  MSIIntroBMEN5311.pdf
blast2go.pdf                                    MSI_Workshop_for_Introduction_to_Structure_based_Drug_Design.pdf
ClinProTools_0.pdf                              MTLB_GPUs.pdf
CUDA_Programming.pdf                            OpenMP.tutorial_1.pdf
cuda_tutorial_performance.pdf                   Open_Source_Proteomics_1.pdf
FLUENT_2009April21_final.pdf                    OptimizingWithGA.pdf
FLUENT_tutorial_2008aug14fin.pdf                Orbi_Data_Analysis_092811.pdf
galaxy_101_V4_ljm_0.pdf                         Partek Training Handout_miRNA and mRNA Data Analysis.pdf
GPU_tools.pdf                                   PerformanceTuning_itasca_11_27_12_0.pdf
gpututorial-msi.pdf                             PETSc_Tutorial.pdf
Hands_On_Tutorial_Using_ProTIP.pdf              Phi_Intro.pdf
Introduction to MSI Systems.pdf                 Protein_Grouping_FDR_Analysis_and_Database_Pratik_March2012_Draft.pdf
Introduction_to_PEAKS_0.pdf                     Proteomics_MSI_072309_Print.pdf
Introduction_to_SBDD.pdf                        pymol_v5.pdf
IntroMPI2011july19c.pdf                         QC_illumina_galaxy_V1_ljm.pdf
IntroMPI2012_July25-part1.pdf                   Quality Control of Illumina Data at the Command Line.pdf
IntroMSI2014.pdf                                remotevisualization.pdf
IntroNWChem.pdf                                 RISS_Hsapiens_variant_Detection_v3.0-small.pdf
IntroOpenMP_2011jun28b.pdf                      RNA_seq_Lecture2_2014_v2.pdf
Intro_to_GAMESS.pdf                             RNA-Seq mod1v6.pdf
IntroToGaussian09.pdf                           R_Spring2012_ver2.pdf
introtomolpro.pdf                               SchrodingerTutorial2011.pdf
Intro_to_MSI_Physicists.pdf                     Sybyl.pdf
intro-to-perl.pdf                               Tutorial-Hsap-v15.pdf
Matlab_11_29_UMR.pdf                            Tutorial-Stuber-v12-1.pdf
Matlab_PCT.pdf                                  unix2013.6.18.pdf
MATLAB_Tuning.pdf                               WRKSP_2_19.pdf

Total wall clock time: 40m 22s
Downloaded: 64 files, 249M in 40m 2s (106 KB/s)

我都已经下载好了,打包压缩到群里面啦!

21

HGNC数据库简介

人类基因命名委员会(HUGO Gene Nomenclature Committee);人类基因组命名委员会!

其实有了NCBI的entrez ID,然后还有refseq里面的ID,还有ensembl的ID,还有基因本身的功能英文缩略简称,已经很麻烦了,又来了一个HGNC,唉,头疼!

The HGNC approves both a short-form abbreviation known as a gene symbol, and also a longer and more descriptive name.

可以下载整个数据,用脚本慢慢研究研究

wget ftp://ftp.ebi.ac.uk/pub/databases/genenames/new/tsv/hgnc_complete_set.txt

 

还是看看BRCA1这个基因,里面的信息挺多的,主要看HGNC:1100,就是这个数据库对它这个基因的编号

HGNC:1100

BRCA1  这个是基因名,需要得到该组织的认可!!!!

breast cancer 1, early onset protein-coding gene gene with protein product Approved

17q21.31 17q21.31

"RNF53|BRCC1|PPP1R53|FANCS" "BRCA1/BRCA2-containing complex, subunit 1|protein phosphatase 1, regulatory subunit 53|Fanconi anemia, complementation group S" "Ring finger proteins|Protein phosphatase 1 regulatory subunits" "58|694"

1991-02-20T00:00:00Z

2015-04-18T00:00:00Z

672     这里是entrez ID

ENSG00000012048  这里是ensembl的ID,

OTTHUMG00000157426 uc002ict.3 U14680 NM_007294

"CCDS11453|CCDS11454|CCDS11455|CCDS11456|CCDS11459|CCDS11455|CCDS11456|CCDS11459|CCDS11454" P38398 1676470 MGI:104537 RGD:2218

"Breast Cancer|http://research.nhgri.nih.gov/bic/|BRCA1 database at LOVD-China|http://genomed.org/LOVD/BC/home.php?select_db=BRCA1|LOVD - Leiden Open Variation Database|http://chromium.liacs.nl/LOVD2/cancer/home.php?select_db=BRCA1|LOVD - Leiden Open Variation Database|http://proteomics.bio21.unimelb.edu.au/lovd/genes/BRCA1|LRG_292|http://www.lrg-sequence.org/LRG/LRG_292"

BRCA1 113705 119068

 

数据结构大概就是这个样子的了!

这几个数据库的内容都是互相链接的!

 

然后我们看看HGNC数据库的一些统计信息

http://www.genenames.org/cgi-bin/statistics

总共有40392个基因信息

其中18990个是能编码蛋白产物的基因,它们大多有GO注释

其中5927个是non-coding RNA,是现在的研究热门。

还有12546个是假基因,挺复杂的

最后还有1188个免疫相关基因,位置基因,病毒基因等等

 

最后,送给大家一个彩蛋!还有十一个物种也是有一个命名委员会的!

类似于 Mouse Gene Nomenclature Committee (MGNC).  Please see the following links:

 

参考文献;

Gray KA, Yates B, Seal RL, Wright MW, Bruford EA. genenames.org: the HGNC resources in 2015. Nucleic Acids Res. 2015 Jan;43(Database issue):D1079-85. doi: 10.1093/nar/gku1071. PMID:25361968

18

Bowtie算法第六讲-tally法对bwt索引进行搜索

因为要讲搜索,所以我选择了一个长一点的字符串来演示多种情况的搜索

perl rotation_one_by_one.pl atgtgtcgtagctcgtnncgt

程序运行的结果如下

$ATGTGTCGTAGCTCGTNNCGT 21

AGCTCGTNNCGT$ATGTGTCGT 9

ATGTGTCGTAGCTCGTNNCGT$ 0

CGT$ATGTGTCGTAGCTCGTNN 18

CGTAGCTCGTNNCGT$ATGTGT 6

CGTNNCGT$ATGTGTCGTAGCT 13

CTCGTNNCGT$ATGTGTCGTAG 11

GCTCGTNNCGT$ATGTGTCGTA 10

GT$ATGTGTCGTAGCTCGTNNC 19

GTAGCTCGTNNCGT$ATGTGTC 7

GTCGTAGCTCGTNNCGT$ATGT 4

GTGTCGTAGCTCGTNNCGT$AT 2

GTNNCGT$ATGTGTCGTAGCTC 14

NCGT$ATGTGTCGTAGCTCGTN 17

NNCGT$ATGTGTCGTAGCTCGT 16

T$ATGTGTCGTAGCTCGTNNCG 20

TAGCTCGTNNCGT$ATGTGTCG 8

TCGTAGCTCGTNNCGT$ATGTG 5

TCGTNNCGT$ATGTGTCGTAGC 12

TGTCGTAGCTCGTNNCGT$ATG 3

TGTGTCGTAGCTCGTNNCGT$A 1

TNNCGT$ATGTGTCGTAGCTCG 15

它的BWT及索引是

T 21

T 9

$ 0

N 18

T 6

T 13

G 11

A 10

C 19

C 7

T 4

T 2

C 14

N 17

T 16

G 20

G 8

G 5

C 12

G 3

A 1

G 15

然后得到它的tally文件如下

图片1

接下来用我们的perl程序在里面找字符串

第一次我测试 GTGTCG 这个字符串,程序可以很清楚的看到它的查找过程。

perl search_char.pl    GTGTCG   tm.tally

your last char is G

start is 7 ; and end is 13

now it is number 5 and the char is C

start is 3 ; and end is 6

now it is number 4 and the char is T

start is 17 ; and end is 19

now it is number 3 and the char is G

start is 10 ; and end is 11

now it is number 2 and the char is T

start is 19 ; and end is 20

now it is number 1 and the char is G

start is 11 ; and end is 12

It is just one perfect match !

The index is 2

第二次我测试一个多重匹配的字符串GT,在原字符串出现了五次的

perl search_char.pl  GT  tm.tally

your last char is T

start is 15 ; and end is 22

now it is number 1 and the char is G

start is 8 ; and end is 13

we find more than one perfect match!!!

8 13

One of the index is 11

One of the index is 10

One of the index is 19

One of the index is 7

One of the index is 4

One of the index is 2

One of the index is 14

惨了,这个是很严重的bug,不知道为什么,对于多个匹配总是会多出那么一点点的结果。

去转换矩阵里面查看,可知,前面两个结果11和10是错误的。

CTCGTNNCGT$ATGTGTCGTAG 11

GCTCGTNNCGT$ATGTGTCGTA 10

GT$ATGTGTCGTAGCTCGTNNC 19

GTAGCTCGTNNCGT$ATGTGTC 7

GTCGTAGCTCGTNNCGT$ATGT 4

GTGTCGTAGCTCGTNNCGT$AT 2

GTNNCGT$ATGTGTCGTAGCTC 14

最后我们测试未知字符串的查找。

perl search_char.pl ACATGTGT tm.tally

your last char is T

start is 15 ; and end is 22

now it is number 7 and the char is G

start is 8 ; and end is 13

now it is number 6 and the char is T

start is 19 ; and end is 21

now it is number 5 and the char is G

start is 11 ; and end is 12

now it is number 4 and the char is T

start is 20 ; and end is 21

now it is number 3 and the char is A

start is 2 ; and end is 3

now it is number 2 and the char is C

start is 3 ; and end is 3

we can just find the last 6 char ,and it is ATGTGT

原始字符串是ATGTGTCGTAGCTCGTNNCGT,所以查找的挺对的!!!

 

[perl]

$a=$ARGV[0];

$a=uc $a;

open FH,"<$ARGV[1]";

while(<FH>){

chomp;

@F=split;

$hash_count_atcg{$F[0]}++;

$hash{$.}=$_;

# the first line is $ and the last char and the last index !

}

$all_a=$hash_count_atcg{'A'};

$all_c=$hash_count_atcg{'C'};

$all_g=$hash_count_atcg{'G'};

$all_n=$hash_count_atcg{'N'};

$all_t=$hash_count_atcg{'T'};

#print "$all_a\t$all_c\t$all_g\t$all_t\n";

$len_a=length $a;

$end_a=$len_a-1;

#print "your query is $a\n";

#print "and the length of your query is $len_a \n";

$after=substr($a,$end_a,1);

#we fill search your query from the last char !

if ($after eq 'A') {

$start=2;

$end=$all_a+1;

}

elsif ($after eq 'C') {

$start=$all_a+1;

$end=$all_a+$all_c+1;

}

elsif ($after eq 'G') {

$start=$all_a+$all_c+1;

$end=$all_a+$all_c+$all_g+1;

}

elsif ($after eq 'T'){

$start=$all_a+$all_c+$all_g+$all_n+1;

$end=$all_a+$all_c+$all_g+$all_t+$all_n+1;

}

else {die "error !!! we just need A T C G !!!\n"}

print "your last char is $after\n ";

print "start is $start ; and end is $end \n";

foreach (reverse (1..$end_a)){

$after=substr($a,$_,1);

$before=substr($a,$_-1,1);

($start,$end)=&find_level($after,$before,$start,$end);

print "now it is number $_ and the char is $before \n ";

print "start is $start ; and end is $end \n";

if ($_  > 1 && $start == $end) {

$find_char=substr($a,$_);

$find_len=length $find_char;

print "we can just find the last $find_len char ,and it is $find_char \n";

#return "miss";

last;

}

if ($_ == 1) {

if (($end-$start)==1) {

print "It is just one perfect match ! \n";

my @F_start=split/\s+/,$hash{$end};

print "The index is $F_start[1]\n";

#return $F_start[1];

last;

}

else {

print "we find more than one perfect match!!!\n";

print "$start\t$end\n";

foreach  (($start-1)..$end) {

my @F_start=split/\s+/,$hash{$_};

print "One of the index is $F_start[1]\n";

}

#return "multiple";

last;

}

}

}

sub find_level{

my($after,$before,$start,$end)=@_;

my @F_start=split/\s+/,$hash{$start};

my @F_end=split/\s+/,$hash{$end};

if ($before eq 'A') {

return ($F_start[2]+1,$F_end[2]+1);

}

elsif ($before eq 'C') {

return ($all_a+$F_start[3]+1,$all_a+$F_end[3]+1);

}

elsif ($before eq 'G') {

return ($all_a+$all_c+1+$F_start[4],$all_a+$all_c+1+$F_end[4]);

}

elsif ($before eq 'T') {

return ($all_a+$all_c+$all_g+$all_n+1+$F_start[5],$all_a+$all_c+$all_g+1+$all_n+$F_end[5]);

}

else {die "error !!! we just need A T C G !!!\n"}

}

[/perl]

 

原始字符串是atgtgtcgtagctcgtnncgt

 

18

Bowtie算法第五讲-index2tally

前面讲到了如何用笨方法进行字符串搜索,也讲了如何构建bwt索引,和把bwt索引还原成字符串!

原始字符串是ATGCGTANNGTC

排序过程是下面的

$ATGCGTANNGTC 12

ANNGTC$ATGCGT 6

ATGCGTANNGTC$ 0

C$ATGCGTANNGT 11

CGTANNGTC$ATG 3

GCGTANNGTC$AT 2

GTANNGTC$ATGC 4

GTC$ATGCGTANN 9

NGTC$ATGCGTAN 8

NNGTC$ATGCGTA 7

TANNGTC$ATGCG 5

TC$ATGCGTANNG 10

TGCGTANNGTC$A 1

现在讲讲如何根据bwt索引构建tally,并且用tally搜索方法来搜索字符串!

首先是bwt索引转换为tally

C 12

T 6

$ 0

T 11

G 3

T 2

C 4

N 9

N 8

A 7

G 5

G 10

A 1

这个其实非常简单的,tally就是增加四列计数的列即可

[perl]

$hash_count{'A'}=0;

$hash_count{'C'}=0;

$hash_count{'G'}=0;

$hash_count{'T'}=0;

open FH ,"<$ARGV[0]";

while(<FH>){

        chomp;

@F=split;

$last=$F[0]; # 读取上面的tally文件,分列,判断第一列,并计数

        $hash_count{$last}++;

   print  "$_\t$hash_count{'A'}\t$hash_count{'C'}\t$hash_count{'G'}\t$hash_count{'T'}\n";

}

[/perl]

输出的tally如下

C 12 0 1 0 0

T 6 0 1 0 1

$ 0 0 1 0 1

T 11 0 1 0 2

G 3 0 1 1 2

T 2 0 1 1 3

C 4 0 2 1 3

N 9 0 2 1 3

N 8 0 2 1 3

A 7 1 2 1 3

G 5 1 2 2 3

G 10 1 2 3 3

A 1 2 2 3 3

接下来就是针对这个tally的查询函数了

 

18

Bowtie 算法第四讲

由于之前就简单的看了看bowtie作者的ppt,没有完全吃透就开始敲代码了,写了十几个程序最后我自己都搞不清楚进展到哪一步了,所以我现在整理一下,从新开始!!!

 

首先,bowtie的作用就是在一个大字符串里面搜索一个小字符串!那么本身就有一个非常笨的复杂方法来搜索,比如,大字符串长度为100万,小字符串为10,那么就依次取出大字符串的10个字符来跟小字符串比较即可,这样的算法是非常不经济的,我简单用perl代码实现一下。

[perl]

#首先读取大字符串的fasta文件

open FH ,"<$ARGV[0]";

$i=0;

while (<FH>) {

next if /^>/;

chomp;

$a.=(uc);

}

#print "$a\n";

#然后接受我们的小的查询字符串

$query=uc $ARGV[1];

$len=length $a;

$len_query=length $query;

$a=$a.'$'.$a;

#然后依次循环取大字符串来精确比较!

foreach (0..$len-1){

if (substr($a,$_,$len_query) eq $query){

print "$_\n";

#last;

}

}

[/perl]

 

这样在时间复杂度非常恐怖,尤其是对人的30亿碱基。

 

正是因为这样的查询效率非常低,所以我们才需要用bwt算法来构建索引,然后根据tally来进行查询

其中构建索引有三种方式,我首先讲最效率最低的那种索引构造算法,就是依次取字符串进行旋转,然后排序即可。

[perl]

$a=uc $ARGV[0];

$len=length $a;

$a=$a.'$'.$a;

foreach (0..$len){

$hash{substr($a,$_,$len+1)}=$_;

}

#print "$_\t$hash{$_}\n" foreach sort keys %hash;

print  substr($_,-1),"\t$hash{$_}\n" foreach sort keys %hash;

[/perl]

这个算法从时间复杂度来讲是非常经济的,对小字符串都是瞬间搞定!!!

perl rotation_one_by_one.pl atgcgtanngtc 这个字符串的BWT矩阵索引如下!

C 12

T 6

$ 0

T 11

G 3

T 2

C 4

N 9

N 8

A 7

G 5

G 10

A 1

但同样的,它也有一个无法避免的弊端,就是内存消耗太恐怖。对于30亿的人类碱基来说,这样旋转会生成30亿乘以30亿的大矩阵,一般的服务器根本hold不住的。

 

最后我讲一下,这个BWT矩阵索引如何还原成原字符串,这个没有算法的差别,因为就是很简单的原理。

[perl]

#first read the tally !!!

#首先读取上面输出的BWT矩阵索引文件。

open FH,"<$ARGV[0]";

$hash_count{'A'}=0;

$hash_count{'C'}=0;

$hash_count{'G'}=0;

$hash_count{'T'}=0;

while(<FH>){

        chomp;

        @F=split;

        $hash_count{$F[0]}++;

        $hash{$.}="$F[0]\t$F[1]\t$hash_count{$F[0]}";

#print "$hash{$.}\n";

}

$all_a=$hash_count{'A'};        

$all_c=$hash_count{'C'};        

$all_g=$hash_count{'G'};        

$all_t=$hash_count{'T'};

$all_n=$hash_count{'N'};

#start from the first char !

$raw='';

&restore(1);

sub restore{

my($num)=@_;

my @F=split/\t/,$hash{$num};

$raw.=$F[0];

   my $before=$F[0];

     if ($before eq 'A') { 

$new=$F[2]+1;

        }

        elsif ($before eq 'C') {

               $new=1+$all_a+$F[2];

        }

        elsif ($before eq 'G') {

               $new=1+$all_a+$all_c+$F[2];

        }

elsif ($before eq 'N') {

                $new =1+$all_a+$all_c+$all_g+$F[2];

        }

        elsif ($before eq 'T') {

                $new=1+$all_a+$all_c+$all_g+$all_n+$F[2];

        }

        elsif ($before eq '$') {

chop $raw;

                $raw = reverse $raw;

print "$raw\n";

exit;

        }

else {die "error !!! we just need A T C N G !!!\n"}

#print "$F[0]\t$new\n";

&restore($new);

}

[/perl]

 

 

16

Annovar使用记录

至于如何安装该软件,请见上一个教程

一.首先把snp-calling步骤的VCF文件转为annovar软件要求的格式

convert2annovar.pl   -format vcf4   12.vcf >12.annovar

Annovar使用记录108

二.进行注释

命令行参数比较多,还是用脚本来运行

# define path

infolder=/home/jmzeng/hoston/diff

outfolder=$infolder

annovardb=/home/jmzeng/bio-soft/annovar/humandb

# start annotating

/home/jmzeng/bio-soft/annovar/annotate_variation.pl \

--buildver hg19 \

--geneanno \

--outfile ${outfolder}/12.anno \

${infolder}/12.annovar  \

${annovardb}

三.输出结果解读

2.6M Apr 14 22:32 12.anno.exonic_variant_function

1.9K Apr 14 22:32 12.anno.log

1.3M Apr 14 22:32 12.anno.variant_function

重点是后缀为exonic_variant_function,这个文件对每一个vcf的突变都进行了注释。

Annovar使用记录617

这个结果就可以用来解析了,可以根据实验设计来找到自己感兴趣的突变。

第5.6列是染色体及pos坐标

第4列信息非常复杂,是突变的注释

第12列是测序深度,一般要大于20

我这里是先把注释文件转换成以下格式

location:chr1:874467 SAMD11:NM_152486:exon6:c.G478A:p.D160N

location:chr1:888639 NOC2L:NM_015658:exon9:c.A918G:p.E306E

location:chr1:888659 NOC2L:NM_015658:exon9:c.A898G:p.I300V

location:chr1:916549 PERM1:NM_001291367:exon2:c.T58C:p.W20R

location:chr1:949608 ISG15:NM_005101:exon2:c.G248A:p.S83N

location:chr1:980552 AGRN:NM_198576:exon13:c.G2266A:p.A756T

location:chr1:1114699 TTLL10:NM_001130045:exon4:c.G104A:p.R35Q

location:chr1:1158631 SDF4:NM_016176:exon4:c.T570C:p.D190D

location:chr1:1158631 SDF4:NM_016547:exon4:c.T570C:p.D190D

location:chr1:1164073 SDF4:NM_016176:exon2:c.C101T:p.A34V

然后比较两个文件,取不同的突变来格式化输出。

16

推荐linux学习博客-每日一linux命令

竹子-博客(.NET/Java/Linux/架构/管理/敏捷)

思索、感悟、践行!走向高效,快乐,平衡!

http://www.cnblogs.com/peida/tag/%E6%AF%8F%E6%97%A5%E4%B8%80linux%E5%91%BD%E4%BB%A4/default.html?page=1

已下目录是本人用爬虫爬取的!

每天一个linux命令(61):wget命令

每天一个linux命令(60):scp命令

每天一个linux命令(59):rcp命令

每天一个linux命令(58):telnet命令

每天一个linux命令(57):ss命令

每天一个linux命令(56):netstat命令

每天一个linux命令(55):traceroute命令

每天一个linux命令(54):ping命令

每天一个linux命令(53):route命令

每天一个linux命令(52):ifconfig命令

每天一个linux命令(51):lsof命令

每天一个linux命令(50):crontab命令

每天一个linux命令(49):at命令

每天一个linux命令(48):watch命令

每天一个linux命令(47):iostat命令

每天一个linux命令(46):vmstat命令

每天一个linux命令(45):free 命令

每天一个linux命令(44):top命令

每天一个linux命令(43):killall命令

每天一个linux命令(42):kill命令

每天一个linux命令(41):ps命令

每天一个linux命令(40):wc命令

每天一个linux命令(39):grep 命令

每天一个linux命令(38):cal 命令

每天一个linux命令(37):date命令

每天一个linux命令(36):diff 命令

每天一个linux命令(35):ln 命令

每天一个linux命令(34):du 命令

每天一个linux命令(33):df 命令

每天一个linux命令(32):gzip命令

每天一个linux命令(31): /etc/group文件详解

每天一个linux命令(30): chown命令

每天一个linux命令(29):chgrp命令

每天一个linux命令(28):tar命令

每天一个linux命令(27):linux chmod命令

每天一个linux命令(26):用SecureCRT来上传和下载文件

每天一个linux命令(25):linux文件属性详解

每天一个linux命令(24):Linux文件类型与扩展名

每天一个linux命令(23):Linux 目录结构

每天一个linux命令(22):find 命令的参数详解

每天一个linux命令(21):find命令之xargs

每天一个linux命令(20):find命令之exec

每天一个linux命令(19):find 命令概览

每天一个linux命令(18):locate 命令

每天一个linux命令(17):whereis 命令

每天一个linux命令(16):which命令

每天一个linux命令(15):tail 命令

每天一个linux命令(14):head 命令

每天一个linux命令(13):less 命令

每天一个linux命令(12):more命令

每天一个linux命令(11):nl命令

每天一个linux命令(10):cat 命令

每天一个linux命令(9):touch 命令

每天一个linux命令(8):cp 命令

每天一个linux命令(7):mv命令

每天一个linux命令(6):rmdir 命令

每天一个linux命令(5):rm 命令

每天一个linux命令(4):mkdir命令

每天一个linux命令(3):pwd命令

每天一个linux命令(2):cd命令

每天一个linux命令(1):ls命令

 

15

human已经被研究的snp竟然有一亿多个?

我在NCBI里面下载了一个dbsnp_142数据库文件,发现它居然有2.5G的大小,我感到很不可思议,毕竟人的基因组也就3G,就30亿的碱基嘛。研究过的突然竟然有110,917,213 ,高达一亿个!!!

谁能给我解释一下呢!

而且人只有十万多个蛋白,2.2万多个基因!

jmzeng@ubuntu:/home/jmzeng/hoston/diff/snp$ wc -l dbsnp_142_chrom_id_rs
110917213 dbsnp_142_chrom_id_rs
jmzeng@ubuntu:/home/jmzeng/hoston/diff/snp$ tail dbsnp_142_chrom_id_rs
MT    16429    rs150751410
MT    16443    rs371960162
MT    16456    rs142662828
MT    16482    rs386419986
MT    16497    rs376846509
MT    16512    rs373943637
MT    16519    rs3937033
MT    16526    rs386829315
MT    16527    rs386829316
MT    16529    rs370705831
jmzeng@ubuntu:/home/jmzeng/hoston/diff/snp$ head dbsnp_142_chrom_id_rs
1    10108    rs62651026
1    10109    rs376007522
1    10139    rs368469931
1    10144    rs144773400
1    10150    rs371194064
1    10177    rs201752861
1    10177    rs367896724
1    10180    rs201694901
1    10228    rs143255646
1    10228    rs200462216

15

Vcf文件的突变ID号注释

VCF是1000genome计划定义的测序比对突变说明文件,熟悉VCF文件的都知道,第三列是ID号,也就是说对该突变在dbsnp的数据库的编号。大多时候都是用点号占位,代表不知道在dbsnp的数据库的编号,这时候就需要我们自己来注释了。

Vcf文件的突变ID号注释134

其实,这是一个非常简单的事情,因为有了CHROM和pos,只要找到一个文件,就可以自己写脚本来映射到它的ID号,但是找这个文件比较困难,我也是搜索了好久才找到的。

http://varianttools.sourceforge.net/Annotation/DbSNP

这里面提到了最新版的数据库是dbSNP138

The default version of our dbSNP annotation is currently referring to dbSNP138 (using hg19 coordinates) as shown below. However, users can also retrieve older versions of dbSNP: db135, dbSNP129, dbSNP130, dbSNP131 and dbSNP132. The 129 and 130 versions use hg18 as a reference genome and 131, 132, 135 and later use hg19. The archived versions can be used by a variant tools project by referring to their specific names - for example: dbSNP-hg18_129.

所以我就换了关键词,终于搜的了

http://www.ncbi.nlm.nih.gov/projects/SNP/snp_summary.cgi?view+summary=view+summary&build_id=138

http://asia.ensembl.org/info/genome/variation/sources_documentation.html?redirect=no

SNP 138 database (232,952,851 million altogether).

Vcf文件的突变ID号注释1276

有一个bioconductor包是专门来做snp过滤的

http://www.bioconductor.org/packages/release/bioc/html/VariantAnnotation.html

首先下载vcf文件。

nohup wget ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/00-All.vcf.gz &

这个文件很大,解压开是

如果大家对snp不了解,可以去查看它的各种介绍以及分类

http://moma.ki.au.dk/genome-mirror/cgi-bin/hgTrackUi?db=hg19&g=snp138

 

其实我这里本来有个hg19_snp141.txt文件,如下

1 10020 A - .

1 10108 C T .

1 10109 A T .

1 10139 A T .

1 10145 A - .

1 10147 C - .

1 10150 C T .

1 10177 A C .

1 10180 T C .

1 10229 A - .

 

还可以下载一些文件,如bed_chr_1.bed

chr1 175292542 175292543 rs171 0 -

chr1 20542967 20542968 rs242 0 +

chr1 6100897 6100898 rs538 0 -

chr1 93151988 93151989 rs546 0 +

chr1 15220328 15220329 rs549 0 +

chr1 203744004 203744005 rs568 0 +

chr1 23854550 23854551 rs665 0 -

chr1 53213656 53213657 rs672 0 +

chr1 173907422 173907423 rs677 0 -

当然还有那个ftp://ftp.ncbi.nih.gov/snp/organisms/human_9606/VCF/00-All.vcf.gz  18G的文件,是VCF格式

##fileformat=VCFv4.0

##fileDate=20150218

##source=dbSNP

##dbSNP_BUILD_ID=142

##reference=GRCh38

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO

1       10108   rs62651026      C       T       .       .       RS=62651026;RSPOS=10108;dbSNPBuildID=129;SSR=0;SAO=0;VP=0x050000020005000002000100;WGT=1;VC=SNV;R5;ASP

所以这个文件就是我们想要的最佳文件,提取前三列就够啦

#CHROM  POS     ID

1 10108 rs62651026

1 10109 rs376007522

1 10139 rs368469931

1 10144 rs144773400

1 10150 rs371194064

1 10177 rs201752861

1 10177 rs367896724

1 10180 rs201694901

1 10228 rs143255646

1 10228 rs200462216

这样就可以通过脚本用hash把我们自己找到的hash跟数据库的rs编号对应起来啦

 

13

用phyML对多重比对phy文件来构建进化树

本来还没这么快写进化专题的,但是有个朋友要我帮忙跑一下她的phy文件,看看能否生成树,我就试用了一下phyml这个软件,挺简单的。

一、下载并安装该软件

这是一个很简单的软件,我们直接下载它的二进制程序就可以直接使用啦,官网里面的压缩包里面有各种平台的二进制程序,我这里用linux64的。

wget http://www.atgc-montpellier.fr/download/binaries/phyml/PhyML-3.1.zip

unzip PhyML-3.1.zip

构建进化树phyml241

二.准备文件

它需要的phy格式的多重比对结果文件,一般是clustalW或者muscle比对的结果

构建进化树phyml294

可以看到是53个蛋白,多重比对后的公共序列长度是325个氨基酸。

三.命令

./PhyML-3.1_linux64   -i test.phy  -d aa   -b 1000   -m LG   -f m -v e -a e -o tlr

这些参数在运行的时候都会显示出来

构建进化树phyml434

具体解释见博客 http://www.chenlianfu.com/?p=2221

 

四,输出文件

这个时间会很久,大家有心里准备!!!总共会输出四个文件,

test.phy_phyml_tree.txt        :    最大似然法构建的进化树

test.phy_phyml_boot_stats.txt  :    bootstrap 的统计信息

test.phy_phyml_boot_trees.txt  :    bootstrap 树

test.phy_phyml_stats.txt       :    程序运行的中的参数和结果统计

 

然后我们的那个test.phy_phyml_tree.txt  就可以用figtree等软件画图啦!!!

 

 

 

 

 

 

 

 

 

10

查找某个基因上面的snp位点

进入网页 http://www.ncbi.nlm.nih.gov/projects/SNP/

image001

其实就是http://www.ncbi.nlm.nih.gov/snp 这个网页

image003

可以看到这个基因上面发表的snp非常多,共有14893个。

每个突变的各种信息都很完全,比如第一个snp位点, 它的ID是rs12516,在BRCA1基因上面。是17号染色体的43044391的碱基突变,在refseq数据库里面显示有两个NG,一个NC,还有五个NM都突变了,还有一堆XM就无所谓啦。

http://www.ncbi.nlm.nih.gov/projects/SNP/snp_ref.cgi?rs=12516

image005

而且是有文献支持的,在1000genomes计划里面也有发表。而且是hg19和hg38里面是不同的坐标!

发表它的文献是 Associations between single nucleotide polymorphisms in double-stranded DNA repair pathway genes and familial breast cancer.

 

 

10

一步一步运行软件系列合集

这些是很久以前写的一些教程,是关于进化树构建和全基因组关联分析的!

gwas-plink分析教程.pdf
plink的统计基础.ppt
一步一步构建系统进化树.pdf
一步一步运行blast.pdf
一步一步运行inparanoid蛋白聚类.pdf
一步一步运行PLINK-part1.pdf
一步一步运行plink-part2.pdf
用PhyML构建系统发育树.pptx
进化树的构建分子原理.pdf

都在云盘(http://pan.baidu.com/s/1jIvwRD8 )里面,群空间(201161227)里面也有!

暂时应该不会写这些教程了,因为没有项目,实在没有动力去做那么多事情

10

对snp进行注释并格式化输出

前面我已经讲了如何用annovar来把vcf格式的snp进行注释,注释之后大概是这样的,每个snp位点的坐标,已经在哪个基因上面,都标的很清楚啦,。而且该突变是在哪个基因的哪个转录本的哪个外显子都一清二楚,更强大的是,还能显示是第几个碱基突变成第几个,同样氨基酸的突变情况也很清楚。

对snp进行注释并格式化输出157

但是这样不是很方便浏览具体突变情况,所以我写了一个脚本格式化该突变情况。

对snp进行注释并格式化输出196

理论上是应该要做出上面这个样子,突变氨基酸前后各12个氨基酸都显示出来,突变的那个还要标红色突出显示!但是颜色控制很麻烦,我就没有做。效果如下

对snp进行注释并格式化输出270

实现这样的格式化输出有三个重点,首先是NM开头的refseq的ID号要转换为ensembl数据库的转录本ID号,还有找到该转录本的CDS序列,这个都需要在biomart里面转换,或者自己写脚本,然后就用脚本爬取即可!

代码如下

[perl]

open FH1,"NM2ensembl.txt";

while(<FH1>){

chomp;

@F=split;

$hash_nm_enst{$F[4]}=$F[1] if $F[4];

}

open FH2,"ENST.CDS.fa";

while($line=<FH2>){

chomp $line;

if ($line=~/>/) {$key = (split /\|/,$line)[1];}

else {$hash_nucl{$key}.=$line;}

}

open FH3,"ENST.protein";

while($line=<FH3>){

chomp $line;

if ($line=~/>/) {$key = (split /\|/,$line)[1];}

else {$hash_prot{$key}.=$line;}

}

open FH4,"raw.mutiple.txt";

$i=1;

while(<FH4>){

chomp;

@F=split;

@tmp=split/:/,$F[1];

/:exon(\d+):/;$exon=$1;

/(NM_\d+)/; $nm=$1;

$enst=$hash_nm_enst{$nm};

print "$i.  $tmp[0] $F[0] the $exon -th exon(s) of $enst \n";

$i++;

$tmp[3]=~/(\d+)/;$num_nucl=$1;

$tmp[3]=~/>([ATCG])/;$mutation_nucl=$1;

$tmp[4]=~/(\d+)/;$num_prot=$1;

$sequence=$hash_nucl{$enst};

$num_up=3*$num_prot-39;

$out_nucl=substr($sequence,$num_up,75);

print "WT:$out_nucl\n  ";

for(my $j=0; $j < (length($out_nucl) - 2) ; $j += 3)

{print ' ';print $codon{substr($out_nucl,$j,3)} ;print ' ';}   

print "\n";

$mutation_pos=$num_nucl-$num_up-1;

substr($out_nucl,$mutation_pos,1,$mutation_nucl) if ((length $out_nucl) == 75 );

print "MU:$out_nucl\n  ";

for(my $j=0; $j < (length($out_nucl) - 2) ; $j += 3)

{print ' ';print $codon{substr($out_nucl,$j,3)} ;print ' ';}   

print "\n";

print "\n";

print "\n";

}

[/perl]

02

重复序列屏蔽第二讲-用repeatscount来构建重复序列文库

该软件主页 http://bix.ucsd.edu/repeatscout/

wget http://bix.ucsd.edu/repeatscout/RepeatScout-1.0.5.tar.gz

解压进入目录,make即可

对于草莓这个215M的基因组来说,还是蛮快的!

第一步:用build_lmer_table命令把整个基因组生成一个频率表格,把所有有过重复的kmer都找出来。

/opt/RepeatScount/build_lmer_table -l 14 -sequence strawberry.fa -freq strawberry.freq

第二步:用 RepeatScout 这个命令根据生成的频率表格和基因组序列产生一个包含有所有的能找到的重复元件的文件。

RepeatScout -sequence strawberry.fa -freq strawberry.freq -l 14 -output strawberry_repeat

第三步:用filter-stage-1.prl这个脚本过滤掉低复杂度和串联重复元件。

 

貌似得到的文件为空,难道是全部过滤掉了???

第四步:需要借用repeatmasker来把这个得到repeat文件当作文库运行生成一个out文件

这个软件的参数其实蛮多的,我只是简单介绍了一些,关于它参数的调试,在我网盘里面还有更具体的文档说明,就不列了!

 

01

重复序列屏蔽第一讲RepeatMasker的一些参数调试

这是很久以前的一篇文章,我先贴出来给大家看看,然后讲一个实例

一:RepeatMasker的一些参数运行结果比较

从ncbi随便下载的zebrafish的一条sequence.fasta

不加上任何参数跑出来结果是 RepeatMasker   sequence.fasta

repeat-masker参数摸索138

加上物种的参数之后跑出来是: RepeatMasker -species Danio  sequence.fasta

效果里面出来了,之前得到的重复序列不到10%,这次可以达到70%以上,所以必须得选好对应的物种,这样才不会错过那么多要找的重复序列

repeat-masker参数摸索267

repeat-masker参数摸索269

再加上-low这个参数是 RepeatMasker -species Danio -low  sequence.fasta

感觉没有改变多少,就少了几个

repeat-masker参数摸索349 repeat-masker参数摸索351

比较-div参数:RepeatMasker -species Danio  sequence.fasta

RepeatMasker -species Danio -div 10  sequence.fasta

repeat-masker参数摸索459

而加上-div 10之后

repeat-masker参数摸索475

第二列小于10%的全部被剔除掉了

输出参数,本来应该是用N把重复区域屏蔽掉的

repeat-masker参数摸索518

但是如果加上参数-x,原来输出是N的地方就都变成了X,感觉这个参数没啥子意义。

repeat-masker参数摸索560

还有一些类似的参数,意义也不大,加上-xsmall,就是把重复区域用小写字母,不再需要N来掩盖了

repeat-masker参数摸索613

如果加上-a这个参数,就多了一个文件

repeat-masker参数摸索637

查看可知其内容是

repeat-masker参数摸索648

The  alignments are in the cross_match/SWAT format, in which mismatches rather than matches are indicated: transitions

with an i and  transversions with a v. Note it exists some differences between the  alignment file and the map fi le.

The map fi le is produced by  ProcessRepeats that the main task is to defragment the original  map file and the alignment fi le is created from the original map fi le:  the difference between them comes from the defragmented hits.
如果加上-poly,也会多出一个文件

repeat-masker参数摸索1139

查看,可知其单独列出了微卫星的表格

repeat-masker参数摸索1159

The ‘-xm’, ‘-ace,’ and ‘-gff ’ options create an additional out put file in cross match, ACeDB, and Gene Feature Finding format  respectively.这几个参数都是为了生成适合其它处理的文件。

另外针对大文件的操作,可能需要-pa来设置运行速度,或者-s,-q,-qq

 

二:生成的文件的解释

会输出这些文件

repeat-masker参数摸索1387

1,。Out类文件

repeat-masker参数摸索1399

SW score 根据Smith-Waterman算法比对的分值 2555
Div% 比上区间与共有序列相比的替代率 5.7
Del% 在查询序列中碱基缺失的百分率(删除碱基) 0.0
Ins% 在repeat库序列中碱基缺失的百分率(插入碱基)  0.0
Query sequence 输入的待屏蔽重复的序列 gi|211853417|emb|CU633477.14|
Position begin 373
Position end  690
Query left 在查询序列中超出比上区域的碱基数

+= 比上了库中重复序列的正义链,如果是互补连用“c”表示

(50140)
Matching repeat 比上的重复序列的名称 C DNA13TA1a_DR
Repeat family(class) 比上的重复序列的类型   DNA/TcMar-Tc1
Position begin
Position end
Query left 比对区域距重复序列左端的碱基数
比对的顺序ID

3.cat文件基本类似于。Out文件
3。。Tbl类文件

repeat-masker参数摸索1917 repeat-masker参数摸索1919
4.masked文件,就是找到的重复序列被N给代替了,或者用参数改变代替形式

polyout文件。就是单独列出了微卫星表格

Align文件,其实就是把之前的。Out文件的每一行记录单独拿出来再进行表格化解释

repeat-masker参数摸索2027

把373到690的核苷酸序列列出来,说明这个DNA13TA1a_DR 重复具体的意义

但是没看懂这个i,v是什么意思

 

结果比较

从ncbi随便下载的zebrafish的一条sequence.fasta

不加上任何参数跑出来结果是 RepeatMasker   sequence.fasta

 

加上物种的参数之后跑出来是: RepeatMasker -species Danio  sequence.fasta

效果里面出来了,之前得到的重复序列不到10%,这次可以达到70%以上,所以必须得选好对应的物种,这样才不会错过那么多要找的重复序列

01

Perl及R及python模块碎碎念

老实说,模块其实是一个很讨厌的东西,但是它也实实在在的节省了我们很多时间,也符合我的理念:避免重复造轮子!此教程可能过期了,请直接看最新版(perl模块安装大全)

1,perl的那些模块

如果有root权限,用root权限

进入cpan然后install ExtUtils::Installed模块

这样就可以执行instmodsh这个脚本了,可以查看当前环境下所有的模块 Continue reading

01

R的包(package)

关于R语言包的一些操作,挺重要的!!!

R的包(package)通常有两种:
1 binary package:这种包属于即得即用型(ready-to-use),但是依赖与平台,即Win和Linux平台下不同。
2 Source package: 此类包可以跨平台使用,但用之前需要处理或者编译(compiled)。

以下一些常用的包相关的函数:
.libPaths():查看包的安装目录

ls('package:ggplot2')可以查看该包里面所有的函数
library():查看已经安装的包目录
library(mypackage):载入mypackage包

getOption("defaultPackages"):查看启动R时自动载入的包。
help(package = 'mypackage'):查看‘mypackage’的帮助
args(function):查看函数的参数
example(function):自动运行该函数帮助文档中的例子,很赞!
demo("package"):展示一些包中demostration,需要再看下??
vignette('mypackage'):有的包,特别是bioconductor的包有vignette,用函数查看
openVignette('mypackage'):这个函数也可以查看vignette,更好用一些
RSiteSearch("helpinfor"):搜索R网站上的“helpinfor”相关信息
help.start():查看已经安装包的详细HTML文档,这个命令非常爽
更新:
search():查看当前载入的包

sessionInfo():查看R中载入的包
methods():查看某个S3泛型函数中所有的方法或者一个类中所有的方法(S3:S version 3)

showMethods(class = "myClass"):查看S4类的方法

findMethods("myMethods"):查看method的代码

class(myObject):查看某个对象的类
getClass(“class/package”):查看某个class或者包的具体内容

getSlots("class"):查看某个class的slot

slotNames(MyObject):查看某个对象的slot。

可以使用Myobject@slotNames访问对象的slot值,这个@设计实在是太爽了,可以连续用。
查询包内信息:1. ?function/method:查看某个“函数”或者“方法”的详细内容
2. class?graph::graph:查看“组”的详细内容的一个例子。这个例子的来源是查询graph包时候,查看其中class的信息,输入??graph后出现一个graph::graph-class
ls("package:mypackage"):查看"mypackage"中的所有对象。

安装source package方法

1 在终端输入 # R CMD INSTALL /.../mypackage.tar.gz
使用此方法,需要解决包依赖问题,即安装此包所依赖的包,安装过程有提示

2 也可以使用R的install.packages()函数安装
回答:可以使用install.packages()函数安装,而且比较简便,即联网即可装,装了就可用。
# R
> install.packages('mypackage')

回答2:可以使用install.packages()安装本地下载的包,尤其适用于在服务器上安装包

$ R

> install.packages( c("XML_0.99-5.tar.gz", "http://www.cnblogs.com/Interfaces/Perl/RSPerl_0.8-0.tar.gz"), repos = NULL, configure.args = c(XML = '--with-xml-config=xml-config', RSPerl = "--with-modules='IO Fcntl'"))
3 Bioconductor的安装方法
> source("http://bioconductor.org/biocLite.R")
> biocLite("mypackage")

 

4 卸载package

remove.packages("mypackage")

 

5 查看R及其package的version

R version: version 或者 R.version

R package version:

 

6 更新包

update.packages( )  可以定期执行以下

 

7 使用别人安装的包

修改.bashrc文件,添加环境变量R的lib路径

export R_LIBS=/home/.../R/lib64/R/library

R中用.libPaths()函数查看lib路径,如果有多个lib,install.packages()默认是安装在第一个目录下

 

01

ubuntu服务器解决方案第十讲–虚拟机屏幕及联网设置

发现自己搞服务器遇到的困难还是蛮多的,所以记录了一下,给菜鸟们指个路。
ubuntu对生信菜鸟来说是最好用的linux服务器,没有之一,因为它有apt-get。

很多人可能并没有自己的服务器,那么就只能通过虚拟机来试试ubuntu啦

我想起来我以前玩虚拟机的时候遇到过一些困难,记录了一些,分享给大家, Continue reading

01

ubuntu服务器解决方案第九讲-mysql和apache的安装

发现自己搞服务器遇到的困难还是蛮多的,所以记录了一下,给菜鸟们指个路。
ubuntu对生信菜鸟来说是最好用的linux服务器,没有之一,因为它有apt-get。

很多时候大家的服务器可能并不是想联网,只是想玩一下,或者只是因为生信的某些软件要求数据库,所以大家可能会单独安装mysql,或者想学习perl的CGI模块,需要apache。

ubuntu上安装mysql

非常简单只需要几条命令就可以完成。

1. sudo apt-get install mysql-server

2. sudo apt-get install mysql-client

3.  sudo apt-get install libmysqlclient-dev

安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功:

sudo netstat -tap | grep mysql

通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。

登陆mysql数据库可以通过如下命令:

mysql -u root -p

-u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。

Ubuntu上安装Apache

Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令;2 从源码构建Apache。本文章将详细描述这两种不同的安装方式。

方法一:使用开发包的打包服务——apt-get

安装apache,在命令行终端中输入一下命令:

$ sudo apt-get install apache2

安装完成后,重启apache服务,在命令行终端中输入一下命令:

$ sudo /etc/init.d/apache2 restart

可能会出现的问题1: NameVirtualHost *:80 has no VirtualHosts,

出现上述问题的原因:定义了多个NameVirtualHost,故将/etc/apache2/ports.conf中的NameVirtualHost *:80注释掉即可。

可能会出现的问题2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

原因:

根据提示,无法可靠的确定服务器的有效域名,使用127.0.1.1作为服务器域名。应此,在下面的测试中,应该使用127.0.1.1,而不是127.0.0.1!

解决:

$ vim /etc/apache2/httpd.conf,在文件中添加:

ServerName localhost:80,再次重启apache2,就可以使用127.0.0.1来访问web服务器啦!

测试:

在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了It works!,那就说明Apache就成功的安装了,Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了,所有要能 过浏览器访问的Web文件都要放到这个目录里。