日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux bash学习

發布時間:2025/3/15 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux bash学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更多生信和LInux學習,程序寫作,請掃描關注生信寶典。

https://mp.weixin.qq.com/mp/homepage?__biz=MzI5MTcwNjA4NQ==&hid=6&sn=667813e1f021e2cf155a74457b48d087&scene=18&uin=&key=&devicetype=Windows+UnKnow&version=62040549&lang=zh_CN&ascene=7&winzoom=1

本教程宗旨 (請仔細閱讀)

本教程不是一個完備的Linux使用教程,而是側重于一般教程默認讀者會了的信息,包括基本概念的解釋 (方便初學者了解自己的操作)、命令的各種錯誤及解決 (通常寫教程的都是對這一領域比較熟悉的,一般不會提到這些初學者剛開始不好理解的簡單錯誤)、部分常用命令 (會提到基本用法,具體的使用還請查看手冊或在線搜索)、常用快捷鍵 (簡化操作)和組合命令 (快速的批處理等,初學者一般不會想到、高級學者又不屑于提起的部分)。

為什么要用Linux系統

個人認為,Linux操作系統和類Linux操作系統的命令行界面是最適合進行生物信息分析的操作系統。原因有三點:

  • 長期運行的穩定性
  • 多數軟件只有Linux版本
  • 強大的Bash命令簡化繁瑣的操作,尤其是大大簡化重復性工作

但對于初學者來說,接觸和理解Linux操作系統需要一些時間和摸索。陡然從可視化點選操作的Windows進入到只有命令行界面的Linux,最大的陌生感是不知道做什么,不知道文件在哪?本文希望能通過幾個示例幫助大家適應Linux系統。

如何獲取Linux系統

  • 如果自己的單位有共有服務器,可以嘗試申請賬號。
  • 自己的電腦安裝雙系統或虛擬機
  • 購買一塊云服務器
  • 試驗下在線學習平臺實驗樓 https://www.shiyanlou.com (里面也有不少Linux教程,任意點一個進去,雙擊桌面的Xfce圖標,都可以啟動Linux終端)
  • <生信寶典>微信公眾號后臺回復向管理員索要

初識Linux系統

登錄Linux系統后,呈現在眼前的是這樣一個界面:

Last login: Mon Jun 5 16:56:56 2017 from 219.241.208.209Welcome to aliyun Elastic Compute Service!ct@ehbio:~$

首先解釋下出現的這幾個字母和符號:

  • ct: 用戶名
  • ehbio:如果是登錄的遠程服務器,則為宿主機的名字
  • ~: 代表家目錄, 在我們進入新的目錄后,這個地方會跟著改變
  • $: 用來指示普通用戶輸入命令的地方;對根用戶來說一般是#
  • http://bashrcgenerator.com/可視化定制不同的顯示方式。

我的電腦在哪?

打開Windows,首先看到的是桌面;不愛整理文件的我,桌面的東西已經多到需要2個屏幕才能顯示的完。另外一個常用的就是我的電腦,然后打開D盤,依次點開對應的文件夾,然后點開文件。

Linux的文件系統組織方式與Windows略有不同,登錄進去就是家目錄,可視為Windows下的桌面。在這個目錄下,我們可以新建文件、新建文件夾,就像在桌面上的操作一樣。

注:

  • 這里我們假設所有用到的文件和文件夾都放置于家目錄下
  • Linux的家目錄嚴格來說可能類似于Windows下的C:\Users\ct

如果想查看當前目錄下都有什么內容,輸入命令 ls,回車即可 (ls可以理解為單詞list的縮寫)。當前目錄下什么也沒有,所以沒有任何輸出。

ct@ehbio:~$ ls

如果錯把l看成了i,輸入了is,則會出現下面的提示未找到命令。如果輸入的是Linux基本命令,出現這個提示,基本可以判定是命令輸入錯了,瞪大眼睛仔細看就是了。 在敲完命令回車后,注意查看終端的輸出,以判斷是否有問題。

ct@ehbio:~$ is -bash: is: 未找到命令 # 大小寫敏感 ct@ehbio:~$ lS -bash: lS: 未找到命令

當前目錄下只有一個文件,看不出效果,我們可以新建幾個文件和文件夾,來查看下。

mkdir是新建一個目錄 (make a directory);data是目錄的名字。
如果目錄存在,則會出現提示,”無法創建已存在的目錄”。這時可以使用參數-p忽略這個錯誤。

ct@ehbio:~$ mkdir data ct@ehbio:~$ mkdir ls data ct@ehbio:~$ mkdir data mkdir: 無法創建目錄"data" : 文件已存在 ct@ehbio:~$ mkdir -p data

cat是一個命令,主要用來查看文件;在這與<<END連用用于讀入大段數據。輸入cat <<END之后,回車,會看到終端出現一個大于號,大于號后面可以輸入內容,再回車,繼續輸入內容,直到我們輸入END (大寫的,與上面一致),輸入過程結束,我們輸入的內容都顯示在了屏幕上。

ct@ehbio:~$ mkdir data ct@ehbio:~$ cat <<END > a > bc > END a bc`>`是一個重定向符號,即把前面命令的輸出寫入到`>`后面的文件中。如下所示,新建了一個`Fasta`格式的文件。 `ls -l`列出文件的詳細信息;`-l`表示命令行參數,是程序預留的一些選項,保證在不更改程序的情況下獲得更靈活的操作。可使用`man ls`查看`ls`所有的命令行參數, 上下箭頭翻頁,按`q`退出查看。(man: manual, 手冊)```bash ct@ehbio:~$ cat <<END >data/test.fa > >SOX2 > ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT > ACGATGAGGAGTAGGAGAGAGGAGG > >OCT4 > ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA > AGAGTAGAGAGA > >NANOG > ACGATGCGATGCAGCGTTTTTTTTTGGTTGGATCT > CAGGTAGGAGCGAGGAGGCAGCGGCGGATGCAGGCA > ACGGTAGCGAGTC > >mYC HAHA > ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC > CAGGACAGGAGCTA > end > END<div class="se-preview-section-delimiter"></div>## 注意命令和參數之間的空格 ct@ehbio:~/data$ ls-l -bash: ls-l: 未找到命令 ct@ehbio:~$ ls -l 總用量 4<div class="se-preview-section-delimiter"></div>## d: dir; 表示data是個目錄<div class="se-preview-section-delimiter"></div>## rwx:表示目錄的權限,暫時忽略,或自己在線搜索 drwxrwxr-x 2 ct ct 4096 68 14:52 data ct@ehbio:~$ ls -l data 總用量 4<div class="se-preview-section-delimiter"></div>## 開頭的`-`表示test.fa是個文件 -rw-rw-r-- 1 ct ct 284 68 14:48 test.fa<div class="se-preview-section-delimiter"></div>

查看寫入的文件的內容,cat 文件名;需要注意的是文件所在的目錄,默認是當前目錄;如下面第一個命令,會提示cat: test.fa: 沒有那個文件或目錄,是因為當前目錄下不存在文件test.fa。(注意文件末尾的end)

ct@ehbio:~$ cat test.fa cat: test.fa: 沒有那個文件或目錄 ct@ehbio:~$ cat data/test.fa >SOX2 ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT ACGATGAGGAGTAGGAGAGAGGAGG >OCT4 ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA AGAGTAGAGAGA >NANOG ACGATGCGATGCAGCGTTTTTTTTTGGTTGGATCT CAGGTAGGAGCGAGGAGGCAGCGGCGGATGCAGGCA ACGGTAGCGAGTC >mYC HAHA ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>

test.fa在目錄data下,可以先進入data目錄,然后再查看文件。類比于Windows下先點開一個文件夾,再點開下面的文件。

cd (change dir)切換目錄。

head查看文件最開始的幾行,默認為10行,可使用-n 6指定查看前6行。

ct@ehbio:~$ cd data ct@ehbio:~/data$ head -n 6 test.fa >SOX2 ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT ACGATGAGGAGTAGGAGAGAGGAGG >OCT4 ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA AGAGTAGAGAGA<div class="se-preview-section-delimiter"></div>

另外less和more也可以用來查看文件,尤其是文件內容特別多的時候。

ct@ehbio:~/data$ less test.fa <div class="se-preview-section-delimiter"></div># q: 退出<div class="se-preview-section-delimiter"></div># 上下箭頭、空格翻頁<div class="se-preview-section-delimiter"></div>

獲取可用命令行參數

前面使用的命令,有幾個用到了參數如ls -l, head -n 6等,需要注意的是命令跟參數之間要有空格

終端運行man ls可以查看ls所有可用的參數,上下箭頭翻頁,按q退出查看。(man: manual, 手冊)

ct@ehbio:~/data$ man ls NAMEls - list directory contentsSYNOPSISls [OPTION]... [FILE]...DESCRIPTIONList information about the FILEs (the current directory by default).Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.Mandatory arguments to long options are mandatory for short options too.-a, --alldo not ignore entries starting with .-A, --almost-alldo not list implied . and ..--authorwith -l, print the author of each file-b, --escapeprint C-style escapes for nongraphic characters....<div class="se-preview-section-delimiter"></div>

文件上下翻轉和左右翻轉

兩個有意思的命令,tac: 文件翻轉,第一行變為最后一行,第二行變為倒數第二行;rev每列反轉,第一個字符變為最后一個字符,第二個字符變為倒數第二個字符。

ct@ehbio:~/data$ cat <<END | tac > first > second > third > END third second first ct@ehbio:~/data$ cat <<END | rev > abcde > xyz > END edcba zyx<div class="se-preview-section-delimiter"></div>

其它新建文件的方式

nano類似于Windows下記事本的功能,nano filename就可以新建一個文件,并在里面寫內容;ctrl+x退出,根據提示按Y保存。

vim 功能更強大的文本編輯器。vim filename就可以新建一個文件, 敲擊鍵盤字母i,進入寫作模式。寫完后,敲擊鍵盤Esc, 退出寫作模式,然后輸入:w (會顯示在屏幕左下角),回車保存。vim的常用方法,以后會單寫一個,這里點到為止。

Linux下文件操作

常用的文件操作有移動文件到另一個文件夾、復制文件到另一個文件夾、文件重命名等。

cp (copy): 拷貝文件或文件夾 (cp -r 拷貝文件夾時的參數,遞歸拷貝)

<div class="se-preview-section-delimiter"></div># 列出當前目錄下有的文件和文件夾 ct@ehbio:~$ ls data<div class="se-preview-section-delimiter"></div># 新建一個文件夾 ct@ehbio:~$ mkdir ehbio_project<div class="se-preview-section-delimiter"></div># 列出當前目錄下有的文件和文件夾, 及其子文件夾的內容<div class="se-preview-section-delimiter"></div># data目錄下有一個文件,ehbio_project目錄下無文件 ct@ehbio:~$ ls * data: test.faehbio_project:<div class="se-preview-section-delimiter"></div># 拷貝data目錄下的文件test.fa到ehbio_project目錄下 ct@ehbio:~$ cp data/test.fa ehbio_project/<div class="se-preview-section-delimiter"></div># 列出當前目錄下有的文件和文件夾, 及其子文件夾的內容<div class="se-preview-section-delimiter"></div># data目錄下有一個文件,ehbio_project目錄下無文件 ct@ehbio:~$ ls * data: test.faehbio_project: test.fa<div class="se-preview-section-delimiter"></div>

mv (move): 移動文件或文件夾

<div class="se-preview-section-delimiter"></div># 重命名data目錄下的文件test.fa為first.fa<div class="se-preview-section-delimiter"></div># mv除了可以移動文件,也可以做單個文件的重命名 ct@ehbio:~$ mv data/test.fa data/first.fa<div class="se-preview-section-delimiter"></div># 列出當前目錄下有的文件和文件夾, 及其子文件夾的內容 ct@ehbio:~$ ls * data: first.faehbio_project: test.fa<div class="se-preview-section-delimiter"></div>

rename: 文件重命名 (常用于批量重命名,不同的系統可能用法略有不同,使用前先man rename查看使用方法)

<div class="se-preview-section-delimiter"></div># 進入另一個目錄 ct@ehbio:~$ cd ehbio_project/ ct@ehbio:~/ehbio_project$ ls test.fa<div class="se-preview-section-delimiter"></div># 給文件做一份拷貝 ct@ehbio:~/ehbio_project$ cp test.fa second.fa ct@ehbio:~/ehbio_project$ ls second.fa test.fa<div class="se-preview-section-delimiter"></div># 給文件多拷貝幾次,無聊的操作,就是為了給rename提供發揮作用的機會 ct@ehbio:~/ehbio_project$ cp test.fa test2.fa ct@ehbio:~/ehbio_project$ cp test.fa test3.fa ct@ehbio:~/ehbio_project$ cp test.fa test4.fa<div class="se-preview-section-delimiter"></div># cp 后面需要2個參數,被拷貝的文件和要被拷貝到的目錄或文件<div class="se-preview-section-delimiter"></div># 出現下面的錯誤,表示缺少目標路徑或文件 ct@ehbio:~/ehbio_project$ cp ehbio.fa cp: 在" ehbio.fa" 后缺少了要操作的目標文件 Try 'cp --help' for more information.ct@ehbio:~/ehbio_project$ ls second.fa test2.fa test3.fa test4.fa test.fa<div class="se-preview-section-delimiter"></div># 用rename進行文件批量重命名 ct@ehbio:~/ehbio_project$ rename 'test' 'ehbio' test*.fa ct@ehbio:~/ehbio_project$ ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div>

ln (link): 給文件建立快捷方式 (ln -s source_file target 創建軟連接)。

在建立軟連接時,原文件要使用全路徑。全路徑指以/開頭的路徑。

建立軟連接,是為了在不增加硬盤存儲的情況下,簡化文件訪問方式的一個辦法。把其它文件夾下的文件鏈接到當前目錄,使用時只需要寫文件的名字就可以了,不需要再寫長串的目錄了。

../: 表示上一層目錄;../../: 表示上面兩層目錄

pwd (print current/working directory): 輸出當前所在的目錄

\``為鍵盤Esc下第一個按鍵 (與家目錄~`符號同一個鍵),寫在反引號內的命令會被運行,運行結果會放置在反引號所在的位置

<div class="se-preview-section-delimiter"></div># 建立軟連接,把當前目錄下的ehbio2.fa,鏈接到上一層目錄的data下面<div class="se-preview-section-delimiter"></div># 這是一個無效的軟連接, ct@ehbio:~/ehbio_project$ ln -s ehbio2.fa ../data<div class="se-preview-section-delimiter"></div># 在使用ls查看時,無效的軟連接的文件名下面是黑色的背景。 ct@ehbio:~/ehbio_project$ ls -l ../data/ 總用量 4 lrwxrwxrwx 1 ct ct 9 69 17:55 ehbio2.fa -> ehbio2.fa -rw-rw-r-- 1 ct ct 284 68 14:48 first.fa<div class="se-preview-section-delimiter"></div># 輸出當前所在的目錄 ct@ehbio:~/ehbio_project$ pwd /home/ct/ehbio_project<div class="se-preview-section-delimiter"></div># 建立軟連接時,原始文件一定使用全路徑。全路徑指以/開頭的路徑。 ct@ehbio:~/ehbio_project$ ln -s /home/ct/ehbio_project/ehbio2.fa ../data ln: 無法創建符號鏈接" ../data/ehbio2.fa" : 文件已存在<div class="se-preview-section-delimiter"></div># 上面的錯誤信息時,已經存在這么一個鏈接了(雖然是無效的),但再建新的鏈接時還會提示<div class="se-preview-section-delimiter"></div># 使用`-f` (force)強制覆蓋已有的鏈接 ct@ehbio:~/ehbio_project$ ln -fs `pwd`/ehbio2.fa ../data<div class="se-preview-section-delimiter"></div># 再次查看時,就正常了。文件名下面沒有了背景色,并且有個右箭頭指向原始文件<div class="se-preview-section-delimiter"></div># `lrwxrwxrwx`中的`l`表示軟連接。 ct@ehbio:~/ehbio_project$ ls -l ../data/ 總用量 4 lrwxrwxrwx 1 ct ct 32 69 17:56 ehbio2.fa -> /home/ct/ehbio_project/ehbio2.fa -rw-rw-r-- 1 ct ct 284 68 14:48 first.fa<div class="se-preview-section-delimiter"></div># 通常為了簡化寫法,使用`pwd`代替全路徑<div class="se-preview-section-delimiter"></div># `為鍵盤Esc下面的按鍵,寫在反引號內的命令會被運行,運行結果會放置在反引號所在的位置 ct@ehbio:~/ehbio_project$ ln -s `pwd`/ehbio2.fa ../data ln: 無法創建符號鏈接" ../data/ehbio2.fa" : 文件已存在 ct@ehbio:~/ehbio_project$ ln -fs `pwd`/ehbio2.fa ../data ct@ehbio:~/ehbio_project$ ls -l ../data/ 總用量 4 lrwxrwxrwx 1 ct ct 32 69 17:56 ehbio2.fa -> /home/ct/ehbio_project/ehbio2.fa -rw-rw-r-- 1 ct ct 284 68 14:48 first.fa<div class="se-preview-section-delimiter"></div>

Linux下命令的一些異常情況

命令不全:在命令沒有輸入完 (引號或括號沒有配對),就不小心按下了Enter鍵,終端會提示出一個>代表命令不完整,這是可以繼續輸入,也可以ctrl+c終止輸入,重新再來。(下面sed命令使用時,還有另外一種命令不全的問題)

ct@ehbio:~/ehbio_project$ rename 'ehbio2 >' ct@ehbio:~/ehbio_project$ rename 'ehbio2 > ^C ct@ehbio:~/ehbio_project$<div class="se-preview-section-delimiter"></div>

文件名輸入錯誤: 多一個字母、少一個字母、大小寫問題

ct@ehbio:~/ehbio_project$ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div># 重命名沒有生效 ct@ehbio:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ebio2.fa ct@ehbio:~/ehbio_project$ ls ehbio2.fa ehbio3.fa ehbio4.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div># 仔細看是ehbio2.fa寫成了ebio2.fa,更正后即可。 Z8vb3e9jtel4m99ss6e7eZ:~/ehbio_project$ rename 'ehbio2' 'ehbio5' ehbio2.fa ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div>

所在目錄不對: 訪問的文件不存在于當前目錄,而又沒有提供絕對路徑, 或軟連接失效

ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio6.fa ehbio.fa second.fa ct@ehbio:~/ehbio_project$ ls ../data ehbio2.fa first.fa<div class="se-preview-section-delimiter"></div># 當前目錄沒有ehbio2.fa ct@ehbio:~/ehbio_project$ less ehbio2.fa ehbio2.fa: 沒有那個文件或目錄<div class="se-preview-section-delimiter"></div># ehbio2.fa在上一層目錄的data目錄下 ct@ehbio:~/ehbio_project$ ls ../data/ehbio2.fa ../data/ehbio2.fa<div class="se-preview-section-delimiter"></div># 加上路徑依然訪問不了 ct@ehbio:~/ehbio_project$ less ../data/ehbio2.fa ../data/ehbio2.fa: 沒有那個文件或目錄<div class="se-preview-section-delimiter"></div># 上面的問題是軟連接失效,在之前的操作中刪掉了原始的ehbio2.fa,所以快捷方式失效<div class="se-preview-section-delimiter"></div># 正確的訪問 ct@ehbio:~/ehbio_project$ tail -n 3 ../data/first.fa ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>

Linux下文件內容操作

常用的文件內容操作有文件壓縮解壓縮、文件大小行數統計、文件內容查詢等。

gzip: 壓縮文件; gunzip: 解壓縮文件

<div class="se-preview-section-delimiter"></div># gzip -c 把壓縮的文件輸出到標準輸出 (一般是屏幕)<div class="se-preview-section-delimiter"></div># '>' 輸出重定向,輸出寫入文件ct@ehbio:~/ehbio_project$ gzip -c ehbio.fa >ehbio.fa.gz<div class="se-preview-section-delimiter"></div># 多了一個.gz文件 ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio.fa ehbio.fa.gz second.fa<div class="se-preview-section-delimiter"></div>#解壓縮 ct@ehbio:~/ehbio_project$ gunzip ehbio.fa.gz gzip: ehbio.fa already exists; do you wish to overwrite (y or n)? y ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div>

wc (word count): 一般使用wc -l獲取文件的行數

<div class="se-preview-section-delimiter"></div># 輸出文件有14行 ct@ehbio:~/ehbio_project$ wc -l ehbio.fa 14 ehbio.fa<div class="se-preview-section-delimiter"></div>

獲取文件中包含大于號 (>)的行, grep (print lines matching a pattern)。
grep的用法很多,支持正則表達式匹配,這里不展開,可以自己查閱資料,或在后期的教程涉及到時再學習。

ct@ehbio:~/ehbio_project$ grep '>' ehbio.fa >SOX2 >OCT4 >NANOG >mYC HAHA<div class="se-preview-section-delimiter"></div># 獲取包含>的行的行數 (-c: count lines) ct@ehbio:~/ehbio_project$ grep -c '>' ehbio.fa 4<div class="se-preview-section-delimiter"></div># 是不是還記得當時新建文件時,末尾多了一行end,刪除end所在行 ct@ehbio:~/ehbio_project$ less ehbio.fa <div class="se-preview-section-delimiter"></div># -v: 不輸出匹配上的行 ct@ehbio:~/ehbio_project$ grep -v 'end' ehbio.fa >ehbio6.fa ct@ehbio:~/ehbio_project$ cat ehbio6.fa >SOX2 ACGTCGGCGGAGGGTGGSCGGGGGGGGAGAGGT ACGATGAGGAGTAGGAGAGAGGAGG >OCT4 ACGTAGGATGGAGGAGAGGGAGGGGGGAGGAGAGGAA AGAGTAGAGAGA >NANOG ACGATGCGATGCAGCGTTTTTTTTTGGTTGGATCT CAGGTAGGAGCGAGGAGGCAGCGGCGGATGCAGGCA ACGGTAGCGAGTC >mYC HAHA ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA<div class="se-preview-section-delimiter"></div>

替換文件中的字符: sed是一個功能強大的文件內容編輯工具,常用于替換、取得行號等操作。

<div class="se-preview-section-delimiter"></div># 第一個錯誤,漏掉了文件名<div class="se-preview-section-delimiter"></div># 程序靜止在這,等待用戶的進一步輸入<div class="se-preview-section-delimiter"></div># ctrl+c殺掉當前命令 ct@ehbio:~/ehbio_project$ sed 's/ HAHA//' | tail -n 3^C<div class="se-preview-section-delimiter"></div># 第二個錯誤,文件名和單引號之間沒有空格,使得sed判斷命令錯誤ct@ehbio:~/ehbio_project$ sed 's/ HAHA//'ehbio.fa | tail -n 3 sed:-e 表達式 #1,字符 11:“s”的未知選項<div class="se-preview-section-delimiter"></div># 正確操作,ct@ehbio:~/ehbio_project$ sed 's/ HAHA//' ehbio.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>

另外一個方式,去除HAHA,使用cut命令 (cut更適合與矩陣操作,去除其中的一列或者多列)。

-f: 指定取出哪一列,使用方法為-f 2 (取出第2列),-f 2-5 (取出第2-5列),-f 2,5 (取出第2和第5列)。

-d: 設定分隔符, 默認為TAB鍵。如果一行沒有指定的分隔符,整行都為第一列。

ct@ehbio:~/ehbio_project$ cut -f 1 -d ' ' ehbio.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>

Linux終端常用快捷操作

  • 命令或文件名自動補全:在輸入命令或文件名的前幾個字母后,按Tab鍵,系統會自動補全或提示補全
  • 上下箭頭:使用上下箭頭可以回溯之前的命令,增加命令的重用,減少輸入工作量
  • !加之前輸入過的命令的前幾個字母,快速獲取前面的命令
ct@ehbio:~/ehbio_project$ cut -f 1 -d ' ' ehbio.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end ct@ehbio:~/ehbio_project$ man cut<div class="se-preview-section-delimiter"></div># 直接跳到上面運行的cut命令,再執行一次 ct@ehbio:~/ehbio_project$ !cut cut -f 1 -d ' ' ehbio.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>
  • ctrl+a回到命令的行首,用于修改常命令或注釋掉命令
<div class="se-preview-section-delimiter"></div># 寫完下面的命令,突然不想運行了,又不想一個個刪掉 ct@ehbio:~/ehbio_project$ cut -f 1 -d ' ' ehbio.fa | tail -n 4<div class="se-preview-section-delimiter"></div># 按ctrl+a, 回到行首,再輸入`#`號,回車,命令即被注釋掉。 ct@ehbio:~/ehbio_project$ #cut -f 1 -d ' ' ehbio.fa | tail -n 4<div class="se-preview-section-delimiter"></div>
  • !! 表示上一條命令。
ct@ehbio:~/ehbio_project$ ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio6.fa ehbio.fa second.fa ct@ehbio:~/ehbio_project$ !! ls ehbio3.fa ehbio4.fa ehbio5.fa ehbio6.fa ehbio.fa second.fa<div class="se-preview-section-delimiter"></div>
  • 替換上一個命令中的字符,再運行一遍命令,用于需要對多個文件執行同樣的命令,又不想寫循環的情況
<div class="se-preview-section-delimiter"></div># 輸入一個命令 ct@ehbio:~/ehbio_project$ #cut -f 1 -d ' ' ehbio.fa | tail -n 4<div class="se-preview-section-delimiter"></div># !!表示上一條命令<div class="se-preview-section-delimiter"></div># :gs表示替換,把上一個命令中全部的ehbio替換為ehbio3; g: global; s: substitute ct@ehbio:~/ehbio_project$ !!:gs/ehbio/ehbio3<div class="se-preview-section-delimiter"></div>#cut -f 1 -d ' ' ehbio3.fa | tail -n 4<div class="se-preview-section-delimiter"></div># 替換后效果如上<div class="se-preview-section-delimiter"></div># 去掉命令前的#號 ct@ehbio:~/ehbio_project$ cut -f 1 -d ' ' ehbio3.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>## 替換ehbio3為ehbio4,直接運行命令 ct@ehbio:~/ehbio_project$ !!:gs/ehbio3/ehbio4 cut -f 1 -d ' ' ehbio4.fa | tail -n 4 >mYC ACGGAGCGAGCTAGTGCAGCGAGGAGCTGAGTCGAGC CAGGACAGGAGCTA end<div class="se-preview-section-delimiter"></div>

Linux下的標準輸入、輸出、重定向、管道

在Linux系統中,有4個特殊的符號,<, ‘>’, ‘|’, ‘-‘,在我們處理輸入和輸出時存在重要但具有迷惑性的作用。

默認Linux的命令的結果都是輸出到標準輸出,錯誤信息 (比如命令未找到或文件格式識別錯誤等) 輸出到標準錯誤,而標準輸出和標準錯誤默認都會顯示到屏幕上。

>表示重定向標準輸出,> filename就是把標準輸出存儲到文件filename里面。標準錯誤還是會顯示在屏幕上。

2 >&1 表示把標準錯誤重定向到標準輸出。Linux終端用2表示標準錯誤,1表示標準輸出。

- (短橫線):表示標準輸入,一般用于1個程序需要多個輸入的時候。

<標準輸入,后面可以跟可以產生輸出的命令,一般用于1個程序需要多個輸入的時候。

|管道符,表示把前一個命令的輸出作為后一個命令的輸入,前面也有一些展示例子。用于數據在不同的命令之間傳輸,用途是減少硬盤存取損耗。

下面我們通過一個程序stdout_error.sh來解釋上面的文字,內容如下

<div class="se-preview-section-delimiter"></div>#!/bin/bash echo "I am std output" <div class="se-preview-section-delimiter"></div># 下面是隨便寫的一個理論上不存在的命令, 理論上會報錯的。 unexisted_command<div class="se-preview-section-delimiter"></div>

運行這個腳本

<div class="se-preview-section-delimiter"></div># 標準輸出和標準錯誤默認都會顯示到屏幕上 ct@ehbio:~$ bash stdout_error.sh I am std output stdout_error.sh: line 5: unexisted_command: command not found<div class="se-preview-section-delimiter"></div># >把結果輸入到了文件;標準錯誤還顯示在屏幕上 ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout stdout_error.sh: line 5: unexisted_command: command not found ct@ehbio:~$ cat stdout_error.stdout I am std output<div class="se-preview-section-delimiter"></div># >把結果輸入到了文件; 2>把標準錯誤輸入到了另一個文件 ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>stdout_error.stderr ct@ehbio:~$ cat stdout_error.stderr stdout_error.sh: line 5: unexisted_command: command not found<div class="se-preview-section-delimiter"></div># 標準輸出和標準錯誤寫入同一個文件 ct@ehbio:~$ bash stdout_error.sh >stdout_error.stdout 2>&1 ct@ehbio:~$ cat stdout_error.stdout I am std output stdout_error.sh: line 5: unexisted_command: command not found<div class="se-preview-section-delimiter"></div>

下面看管道符和標準輸入的使用。

<div class="se-preview-section-delimiter"></div># 管道符的使用<div class="se-preview-section-delimiter"></div># 第一個命令的輸出作為第二個的輸入<div class="se-preview-section-delimiter"></div># 前面的例子中也有使用<div class="se-preview-section-delimiter"></div># tr: 是用于替換字符的,把空格替換為換行,文字就從一行變為了一列 ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n' 1 2 3<div class="se-preview-section-delimiter"></div># cat命令之前也用過,輸出一段文字<div class="se-preview-section-delimiter"></div># diff是比較2個文件的差異的,需要2個參數<div class="se-preview-section-delimiter"></div># - (短橫線)表示上一個命令的輸出,傳遞給diff<div class="se-preview-section-delimiter"></div># < 表示其后的命令的輸出,也重定向給diff ct@ehbio:~$ cat <<END | diff - <(echo "1 2 3" | tr ' ' '\n') > 2 > 3 > 4 > END 0a1 > 1 3d3 < 4<div class="se-preview-section-delimiter"></div># 如果不使用管道和重定向標準輸入,程序是這么寫的<div class="se-preview-section-delimiter"></div># 先把第一部分存儲為1個文件 ct@ehbio:~$ cat <<END >firstfile 2 3 > 4 > END ct@ehbio:~$ less firstfile <div class="se-preview-section-delimiter"></div># 再把第二部分存儲為1個文件 ct@ehbio:~$ echo "1 2 3" | tr ' ' '\n' >secondfile<div class="se-preview-section-delimiter"></div># 然后比較 ct@ehbio:~$ diff firstfile secondfile 0a1 > 1 3d3 < 4<div class="se-preview-section-delimiter"></div>

管道符的更多應用

ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | wc -l 3<div class="se-preview-section-delimiter"></div># sed =:先輸出行號,再輸出每行的內容 ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = 1 a 2 b 3 c<div class="se-preview-section-delimiter"></div># 后面這個命令不太好解釋<div class="se-preview-section-delimiter"></div># sed = 同時輸出行號<div class="se-preview-section-delimiter"></div># N: 表示讀入下一行;sed命令每次只讀一行,加上N之后就是緩存了第2行,所有的操作都針對第一行;<div class="se-preview-section-delimiter"></div># s: 替換;把換行符替換為\t ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/\n/\t/' 1 a 2 b 3 c<div class="se-preview-section-delimiter"></div># 后面這個命令不太好解釋<div class="se-preview-section-delimiter"></div># sed = 同時輸出行號<div class="se-preview-section-delimiter"></div># N: 表示讀入下一行;sed命令每次只讀一行,加上N之后就是緩存了第2行,所有的操作都針對第一行;<div class="se-preview-section-delimiter"></div># s: 替換;把讀取的奇數行行首加一個'>'(偶數行相當于被隱藏了) ct@ehbio:~$ echo "a b c" | tr ' ' '\n' | sed = | sed 'N;s/^/>/' >1 a >2 b >3 c<div class="se-preview-section-delimiter"></div># 把多條序列轉成FATSA格式<div class="se-preview-section-delimiter"></div># sed = 同時輸出行號<div class="se-preview-section-delimiter"></div># N: 表示讀入下一行;sed命令每次只讀一行,加上N之后就是緩存了第2行,所有的操作都針對第一行;<div class="se-preview-section-delimiter"></div># s: 替換;把讀取的奇數行行首加一個'>'(偶數行相當于被隱藏了)<div class="se-preview-section-delimiter"></div># 于是FASTA格式序列就出來了 ct@ehbio:~$ echo "actg aaaaa cccccg" | tr ' ' '\n' | sed = | sed 'N;s/^/>/' >1 actg >2 aaaaa >3 cccccg<div class="se-preview-section-delimiter"></div>

文件的可執行屬性和環境變量

Linux下文件有一個特殊的屬性即可執行屬性,用來指示這個文件是一個可執行的腳本或可以運行的二進制文件。前面所提到的這些命令,都具有可執行屬性。

which: 表示查看命令的路徑。一般用于當我們想知道使用的命令來源于什么地方時,比如安裝了多個R或多個python,但又分不清用的是哪個時,which一下,立即明了。在這兒我們用which獲取的是可執行的命令所在的路徑,進而查看其屬性。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which cd`"<div class="se-preview-section-delimiter"></div>#rwx: 文件所有者可讀、可寫、可執行<div class="se-preview-section-delimiter"></div>#r-x: 文件所有者所在組其它成員可讀、可執行,不可修改<div class="se-preview-section-delimiter"></div>#r-x: 其它人可讀、可執行,不可修改 -rwxr-xr-x 1 root root 26 127 2016 /usr/bin/cd ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which mkdir`" -rwxr-xr-x. 1 root root 79768 116 2016 /usr/bin/mkdir ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python`"<div class="se-preview-section-delimiter"></div>#l: 代表軟連接<div class="se-preview-section-delimiter"></div>#軟連接自身是所有人可讀可寫,但具體的權限依賴于其鏈接的文件 lrwxrwxrwx. 1 root root 7 322 15:04 /usr/bin/python -> python2 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python2`"<div class="se-preview-section-delimiter"></div>#第二層鏈接 lrwxrwxrwx. 1 root root 9 322 15:04 /usr/bin/python2 -> python2.7<div class="se-preview-section-delimiter"></div>#鏈接的原始文件 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l "`which python2.7`" -rwxr-xr-x. 1 root root 7136 116 2016 /usr/bin/python2.7<div class="se-preview-section-delimiter"></div>

文件屬性rwx中r表示read (數字表示為4)、w表示write (數字表示為2)、x表示執行 (數字表示為1)。三個未一組,連續出現三次(如下面命令行中所示), 第一組表示文件的所有者擁有的權限,第二組為文件所有者所在的用戶組所擁有的權限,組內所有成員都具有的權限,第三組為其它用戶的權限。

chmod a+x file: 表示給文件增加所有人(a)可執行權限 (+x)

chmod u+x file: 表示給文件增加所有者(u,user,)可執行權限 (+x)

chmod g+x, chmod o+X: 表示給文件增加組內人或其它人可執行權限

chmod 755 file: 表示擁有者有可讀寫執行權限,其它人有可讀執行權限。(7=4+2+1; 5=4+1)

具體使用man chmod查看其它參數使用。

<div class="se-preview-section-delimiter"></div># 新建個文件 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ cat <<END >run.sh > echo " I am a script created by ehbio." > END<div class="se-preview-section-delimiter"></div># 查看其權限值 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rw-rw-r-- 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div># 更改權限值 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod 755 run.sh<div class="se-preview-section-delimiter"></div># 查看其權限值<div class="se-preview-section-delimiter"></div># 注意多了3個x ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rwxr-xr-x 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div># 去除其它用戶的可執行權限 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod o-x run.sh <div class="se-preview-section-delimiter"></div># 注意看少了個x ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rwxr-xr-- 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div># 去除同組的可執行權限 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod g-x run.sh<div class="se-preview-section-delimiter"></div># 注意看又少了個x ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rwxr--r-- 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div># 去除所有人的可執行權限 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod a-x run.sh ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rw-r--r-- 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div># 給所有人增加可執行權限 ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ chmod a+x run.sh ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ ls -l run.sh -rwxr-xr-x 1 ct ct 39 614 23:12 run.sh<div class="se-preview-section-delimiter"></div>

如果一個文件有了可執行權限,是不是就可以執行了,我們來檢測下。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ run.sh -bash: run.sh: 未找到命令<div class="se-preview-section-delimiter"></div>

事實上并非如此,輸入命令,回車后,提示命令未找打,這是為什么呢?

這就涉及到環境變量的概念,通俗的講,環境變量就是告訴電腦 (實際是操作系統)幾個目錄。這幾個目錄下存儲又可執行文件,如前面顯示的/usr/bin目錄,大部分的系統命令都在這個目錄下。

當我們輸入命令mkdir時,系統就會在環境變量所代表的幾個目錄從前都厚去查找,哪個里面有mkdir文件,然后去執行mkdir命令。

系統中環境變量的名字是PATH,其內容可通過下面的命令顯示 (根據操作系統不同和配置不同,略有差別,但格式是統一的,:分割的一堆路徑):

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin<div class="se-preview-section-delimiter"></div>

所以如果我們想讓自己的命令能被系統找到,就需要把命令所在的目錄加到環境變量里面,怎么操作呢?

加到環境變量的路徑必須是全路徑,全路徑指以/開頭或已~開頭的路徑。

<div class="se-preview-section-delimiter"></div># 加到環境變量的路徑必須是全路徑,全路徑指以/開頭或已~開頭的路徑<div class="se-preview-section-delimiter"></div># 注意第一個PATH不含$, 第二個PATH有$符號<div class="se-preview-section-delimiter"></div># 我們后面會講什么時候用$, 什么時候不用$ ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ export PATH=$PATH:/home/ct ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ct<div class="se-preview-section-delimiter"></div>

這時,我們在執行那個命令試試,成功運行了。

ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ run.sh I am a script created by ehbio.<div class="se-preview-section-delimiter"></div>

所以在以后安裝了新的軟件,或者寫了新的腳本后,都把軟件的可執行程序可執行的腳本所在的目錄,加到環境變量里面就可以了。

但是,在命令行中執行export,對環境變量所做的修改,只對當前終端有效,退出后就無效了。為了使得這一操作,長期有效,我們需要把這句話寫入一個文件中,一個登陸服務器就會被自動讀取的文件中。

對于普通用戶,在遠程登錄終端時,家目錄下的~/.bash_profile (不是~/.bashrc, 在本地登錄時才會被讀取)會自動被讀取,所以我們需要把export語句加入到這個文件中。

<div class="se-preview-section-delimiter"></div># 這是我的~/.bash_profile中的內容,主要是最好一行。可以連續的加入多個路徑。 if [ -f ~/.bashrc ]; then. ~/.bashrc fiif [ -f ~/.bash_aliases ]; then. ~/.bash_aliases fiexport PATH=$PATH:/home/ct:/home/bin:/home/soft/bowtie2/bin<div class="se-preview-section-delimiter"></div>

前面提到,系統查找命令的順序是從環境變量的第一個目錄到最后一個目錄,在第一次碰到查詢的命令后,就調用執行。假如系統存在一個python命令,我們自己又安裝了一個python (假如在/home/ct/anaconda/bin目錄下),如果我們想執行自己的python程序,就需要把/home/ct/anaconda/bin寫在$PATH前面,如下

<div class="se-preview-section-delimiter"></div># 注意$PATH的順序ct@iZ8vb3e9jtel4m99ss6e7eZ:~$ export PATH=/home/ct/anaconda/bin:$PATH<div class="se-preview-section-delimiter"></div>

至此,我們可以熟練使用環境變量來簡化命令的輸入過程了,因為如果沒有環境變量,我們就得需要運行/home/ct/anaconda/bin/python來運行python命令了。

環境變量這塊,自己多操作下,就會慢慢理解熟練了。

環境變量的補充

PATH只是眾多環境變量中的一個變量,用于存儲可執行文件所在的目錄,以便在用戶輸入命令時可以查詢的到。尤其是自己寫的腳本或安裝的程序,系統不會知道它們在哪個路徑下,需要我們去提供給系統這些新的路徑,學名叫設置環境變量。

此外常用到的環境變量還有LD_LIBARY_PATH: 指定動態鏈接庫 (so文件)的位置,一般在安裝軟件出錯時會用到;PYTHONPATH: 指定Python的安裝包的路徑;PERL5LIB: 指定perl的安裝包的路徑。

設置環境變量要注意2點:1. 設置新的環境變量時一般要包含原始的環境變量,不能覆蓋;2. 注意自己的目錄和系統環境變量的目錄的順序,想讓哪個先被找到,就先放哪個。

文件內容操作 (二)

文件排序

seq: 產生一系列的數字; man seq查看其具體使用。我們這使用seq產生下游分析所用到的輸入文件。

<div class="se-preview-section-delimiter"></div># 產生從1到10的數,步長為1 ct@ehbio:~$ seq 1 10 1 2 3 4 5 6 7 8 9 10<div class="se-preview-section-delimiter"></div># 產生從1到10的數,步長為1,用空格分割 ct@ehbio:~$ seq -s ' ' 1 10 1 2 3 4 5 6 7 8 9 10<div class="se-preview-section-delimiter"></div># 產生從1到10的數,步長為2<div class="se-preview-section-delimiter"></div># 如果有3個數,中間的數為步長,最后一個始終為最大值 ct@ehbio:~$ seq -s ' ' 1 2 10 1 3 5 7 9<div class="se-preview-section-delimiter"></div># 還記得前面提到的標準輸入和標準輸出吧<div class="se-preview-section-delimiter"></div># 后臺回復 標準輸入 查看 ct@ehbio:~$ cat <(seq 0 3 17) <(seq 3 6 18) >test ct@ehbio:~$ cat test 0 3 6 9 12 15 3 9 15<div class="se-preview-section-delimiter"></div>

sort: 排序,默認按字符編碼排序。如果想按數字大小排序,需添加-n參數。

<div class="se-preview-section-delimiter"></div># 可能不符合預期的排序,系統首先排0,然后排1, 3, 6, 9 ct@ehbio:~$ sort test 0 12 15 15 3 3 6 9 9<div class="se-preview-section-delimiter"></div># 按數字大小排序 ct@ehbio:~$ sort -n test 0 3 3 6 9 9 12 15 15<div class="se-preview-section-delimiter"></div>

sort -u: 去除重復的行,等同于sort | uniq。

ct@ehbio:~$ sort -nu test 0 3 6 9 12 15<div class="se-preview-section-delimiter"></div>

sort file | uniq -d: 獲得重復的行。(d=duplication)

ct@ehbio:~$ sort -n test | uniq -d 3 9 15<div class="se-preview-section-delimiter"></div>

sort file | uniq -c: 獲得每行重復的次數。

<div class="se-preview-section-delimiter"></div># 第一列為每行出現的次數,第二列為原始的行 ct@ehbio:~$ sort -n test | uniq -c1 02 31 62 91 122 15<div class="se-preview-section-delimiter"></div># 換一個文件看的更清楚 ct@ehbio:~$ cat <<END >test2 > a > b > c > b > a > e > d > a > END<div class="se-preview-section-delimiter"></div># 第一列為每行出現的次數,第二列為原始的行 ct@ehbio:~$ sort test2 | uniq -c 3 a 2 b 1 c 1 d 1 e<div class="se-preview-section-delimiter"></div># 在執行uniq操作前,文件要先排序,不然結果很詭異 ct@ehbio:~$ cat test2 | uniq -c 1 a 1 b 1 c 1 b 1 a 1 e 1 d 1 a<div class="se-preview-section-delimiter"></div>

整理下uniq -c的結果,使得原始行在前,每行的計數在后。

awk是一個強大的文本處理工具,其處理數據模式為按行處理。每次讀入一行,進行操作。OFS: 輸出文件的列分隔符 (output file column separtor);FS為輸入文件的列分隔符 (默認為空白字符)。awk中的列從第1到n列,分別記錄為$1, $2 … $n。BEGIN表示在文件讀取前先設置基本參數;與之相對應的是END,只文件讀取完成之后進行操作。不以BEGIN, END開頭的{}就是文件讀取、處理的部分。

<div class="se-preview-section-delimiter"></div># 管道符還記得吧,后臺回復 管道 可查看<div class="se-preview-section-delimiter"></div># awk的操作就是鍍金上一步的結果,去除多余的空白,然后調換2列 ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2, $1}' a 3 b 2 c 1 d 1 e 1<div class="se-preview-section-delimiter"></div>

對兩列文件,安照第二列進行排序, sort -k2,2n。

<div class="se-preview-section-delimiter"></div># 第二列按數值大小排序 ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2, $1}' | sort -k2, 2n c 1 d 1 e 1 b 2 a 3<div class="se-preview-section-delimiter"></div># 第二列按數值大小排序<div class="se-preview-section-delimiter"></div># 第二列相同的再按第一列的字母順序的逆序排序 (-r)<div class="se-preview-section-delimiter"></div># 注意看前3行的順序與上一步結果的差異 ct@ehbio:~$ sort test2 | uniq -c | awk 'BEGIN{OFS="\t";}{print $2,$1}' | sort -k2,2n -k1,1r e 1 d 1 c 1 b 2 a 3<div class="se-preview-section-delimiter"></div>

FASTA序列提取

生成單行序列FASTA文件,提取特定基因的序列,最簡單的是使用grep命令。

grep在前面也提到過,以后還會經常提到,主要用途是匹配文件中的字符串,以此為基礎,進行一系列的操作。如果會使用正則表達式,將會非常強大。正則表達式版本很多,幾乎每種語言都有自己的規則,本文檔不會展開,用到哪個提哪個。

<div class="se-preview-section-delimiter"></div># 生成單行序列FASTA文件 ct@ehbio:~$ cat <<END >test.fasta > >SOX2 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > >POU5F1 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > >NANOG > CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT > END ct@ehbio:~$ cat test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC >POU5F1 ACGAGGGACGCATCGGACGACTGCAGGACTGTC >NANOG CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT<div class="se-preview-section-delimiter"></div># grep匹配含有SOX2的行<div class="se-preview-section-delimiter"></div># -A 1 表示輸出的行中,包含匹配行的下一行 (A: after) ct@ehbio:~$ grep -A 1 'SOX2' test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC<div class="se-preview-section-delimiter"></div># 也可以使用AWK<div class="se-preview-section-delimiter"></div># 先判斷當前行是不是 > 開頭,如果是,表示是序列名字行,替換掉大于號,取出名字。<div class="se-preview-section-delimiter"></div># sub 替換, sub(被替換的部分,要替換成的,待替換字符串)<div class="se-preview-section-delimiter"></div># 如果不以大于號開頭,則為序列行,存儲起來。<div class="se-preview-section-delimiter"></div># seq[name]: 相當于建一個字典,name為key,序列為值。然后就可以使用name調取序列。 ct@ehbio:~$ awk 'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} else seq[name]=$0;}END{print ">SOX2"; print seq["SOX2"]}' test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC<div class="se-preview-section-delimiter"></div>

多行FASTA序列提取要麻煩些,一個辦法就是轉成單行序列,用上面的方式處理。

sed和tr都為最常用的字符替換工具。

ct@ehbio:~$ cat <<END >test.fasta > >SOX2 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGAC > >POU5F1 > CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT > CGGAAGGTAGTCGTCAGTGCAGCGAGTCC > >NANOG > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGG > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGACTGT > END<div class="se-preview-section-delimiter"></div># 給>號開頭的行的行尾加個TAB鍵,以便隔開名字和序列<div class="se-preview-section-delimiter"></div># TAB鍵不可見,直接看看不大<div class="se-preview-section-delimiter"></div># \(\)表示記錄匹配的內容,\1則表示()中記錄的匹配的內容<div class="se-preview-section-delimiter"></div># 后面我們專門講sed ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT<div class="se-preview-section-delimiter"></div>#使用cat -A 可以顯示文件中所有的符號<div class="se-preview-section-delimiter"></div># ^I 表示tab鍵<div class="se-preview-section-delimiter"></div># $表示行尾ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | cat -A >SOX2^I$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGAC$ >POU5F1^I$ CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT$ CGGAAGGTAGTCGTCAGTGCAGCGAGTCC$ >NANOG^I$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGG$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGACTGT$<div class="se-preview-section-delimiter"></div># 把所有的換行符替換為空格<div class="se-preview-section-delimiter"></div># tr這個命令,前面提到過,若想不起來 `man tr`查看<div class="se-preview-section-delimiter"></div># 主意第二個參數,引號內為空格。 ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | tr '\n' ' ' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT <div class="se-preview-section-delimiter"></div># 把最后一個空格替換為換行符 ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT<div class="se-preview-section-delimiter"></div># 把 ' >'替換為換行符 注意被替換的是 空格+大于號<div class="se-preview-section-delimiter"></div># 當連用多個替換命令時,使用-e 隔開 ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT<div class="se-preview-section-delimiter"></div># 把所有的空格替換掉 ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g' -e 's/ //g' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT<div class="se-preview-section-delimiter"></div># 把TAB鍵轉換為換行符 ct@ehbio:~$ sed 's/^\(>.*\)/\1\t/' test.fasta | tr '\n' ' ' | sed -e 's/ $/\n/' -e 's/ >/\n>/g' -e 's/ //g' -e 's/\t/\n/g' >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT<div class="se-preview-section-delimiter"></div>

或者簡單點,直接用前面的awk略微做下修改。

<div class="se-preview-section-delimiter"></div># 差別只在一點<div class="se-preview-section-delimiter"></div># 對于單行fasta文件,只需要記錄一行,seq[name]=$0<div class="se-preview-section-delimiter"></div># 對于多好fasta文件,需要把每一行序列都加到前面的序列上,seq[name]=seq[name]$0 ct@ehbio:~$ awk 'BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} else seq[name]=seq[name]$0;}END{print ">SOX2"; print seq["SOX2"]}' test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC<div class="se-preview-section-delimiter"></div>

命令運行監測

  • 檢測命令的運行時間 time command
  • ct@ehbio:~$ time sleep 5real 0m5.003s # 程序開始至結束的時間,包括其它進程占用的時間片和IO時間 user 0m0.001s # 進程真正執行占用CPU的時間, sys 0m0.002s # 進程在內核中調用所消耗的CPU時間 user+sys是進程實際的CPU時間。如果多線程執行,這個時間可能大于Real。如果IO是瓶頸,則real會大于user+sys (單線程)。<div class="se-preview-section-delimiter"></div>
  • 查看正在運行的命令和其資源使用 top

    • top輸出界面第一行主要信息是負載顯示,分別是1分鐘、5分鐘、15分鐘前到現在的任務隊列的平均長度。
    • 一般與CPU數目相當為好,過大系統負載超額,反應慢。
    • 在top輸出界面輸入 u, 會提示輸入用戶名,以查看某個用戶的進程。
    • 重點關注的是%MEM列,查看系統占用的內存是否超出。
  • ct@ehbio:~$ top -a #按內存排序顯示top - 09:02:11 up 224 days, 8:34, 30 users, load average: 40, 33, 28 Tasks: 1561 total, 1 running, 1550 sleeping, 0 stopped, 10 zombie Cpu(s): 0.6%us, 0.2%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2642768880k total, 2094619800k used, 548149080k free, 4310240k buffers Swap: 86472700k total, 73226016k used, 13246684k free, 193383748k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 32527 ct 20 0 2631m 1.7g 1332 S 0.0 0.7 100:34.87 rsem-run-em 29273 ct 20 0 4094m 692m 3396 S 0.0 0.3 45:18.83 java -Xmx1000m 40148 mysql 20 0 21.9g 606m 6116 S 1.3 0.2 2536:06 /usr/sbin/mysqld 31040 ct 20 0 1887m 77m 2604 S 0.3 0.0 180:43.16 [celeryd: <div class="se-preview-section-delimiter"></div>
  • 查看系統進程 ps auwx | grep 'process_name'
  • 文件系統和磁盤信息監測

    查看系統硬盤大小和分配

    ct@ehbio:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 193G 112G 71G 62% / tmpfs 127G 104K 127G 1% /dev/shm /dev/sda2 477M 102M 351M 23% /boot /dev/sda1 200M 264K 200M 1% /boot/efi /dev/mapper/ehbiobp1 137T 10T 127T 7% /ehbioB /dev/mapper/ehbiocp1 137T 32T 104.8T 23% /ehbioC /dev/mapper/ehbiodp1 137T 56T 81T 41% /ehbioD<div class="se-preview-section-delimiter"></div> ct@ehbio:~$ du -sh * 268M blog 4.0K browserMimic.py 5.6G CAFE 386M chip 73M class 4.0K config.file 4.0K do_not_del_r_test.Rmd 7.2M ehbio 20K ehbio_logo.png 12K ehbio_weixin.jpg 4.0K Grid_with_line.Rmd 8.0K heatmap_nonlinear.pdf 8.0K heatmap_nooutlier.pdf<div class="se-preview-section-delimiter"></div>

    軟件安裝

    不同于windows,Linux下軟件安裝的方式比較多樣,有些也比較復雜。每種安裝方式都有自己的優點和局限,也都有可能遇到問題。在我們理解了原理之后,借助谷歌,可以更好地幫助解決問題。

    系統包管理器安裝

    軟件安裝最方便的、一般也不容易出問題的是利用系統自帶的包管理工具,可以解決大部分的依賴問題。

    <div class="se-preview-section-delimiter"></div># centos<div class="se-preview-section-delimiter"></div># 如果長時間沒更新,先運行下update yum update<div class="se-preview-section-delimiter"></div># 如果不知道軟件具體名字,可以先用一個關鍵字search一下, 選擇正式的名字<div class="se-preview-section-delimiter"></div># 需要注意的是一般的服務器都是64 bit,需要選x86_64版本 yum search soft_name or soft_description yum search soft_official_name<div class="se-preview-section-delimiter"></div>

    但也有一些不足,主要3點:

  • 需要根用戶的權限。
  • 如果系統版本老,安裝的軟件版本也會比較老。使用新版本有時又會發生沖突。
  • 生物信息學中不少軟件不在系統的安裝源里面。
  • 解決這些問題,就需要自己去軟件官網查找最新的分法包,又有兩種可能,一種是分法包直接就是編譯好的軟件,下載下來設置下可執行屬性并放入環境變量就可以運行了,如于blast或bowtie這樣的工具。

    另一種則是需要從源碼編譯安裝,下面主要講解下這個。

    源碼編譯安裝

    源碼編譯經典的三部曲configure, make, make install。如果不出問題,對著執行下來就安裝好了,也不一定知其所以然。但出了問題,就不是比較容易解決的。如果知道這背后的機制,還是會有幫助的。

    • configure是檢查系統的庫文件、類文件、依賴軟件是否存在以及它們的版本是否滿族需求,并根據實際檢測結果生成Makefile的工具。一般是一堆bash命令的組合。通常也需要在這一步配置一些參數。最常用的就是指定軟件的安裝目錄--prefix=/home/ct/soft/specific_name。

    • make則是具體的編譯過程。編譯的語句都寫在了Makefile中。make默認編譯Makefile中出現的第一個target,也可以指定target編譯,并根據Makefile的設置方式依次編譯所有依賴的東西。

      Makefile通常的格式和布局如下,有興趣的可以自己去學,或者我們再出一個教程。

      # 假設當前文件夾下Makefile文件中內容如下 ct@ehbio:~$ cat Makefile# first: target名字# echo "compile first": target對應的命令,任何Linux命令都可以first: echo "compile first" all: first second echo "compile all" second: echo "compile second"# 直接運行make,會make第一個出現的targetct@ehbio:~$ make echo "compile first" compile first# make first與直接make相同,因為它出現在第一個 ct@ehbio:~$ make first echo "compile first" compile first# all依賴于first, second,因此make all會先執行make first, make second# 然后才是自己所代表的命令 ct@ehbio:~$ make all echo "compile first" compile first echo "compile second" compile second echo "compile all" compile all

    有些軟件的安裝,在執行完make后就獲得了可執行程序,可以跳過make install的過程,只需要放入環境變量就可以運行了。但部分軟件還需要一些依賴關系,所以需要執行make install才算完成了完整的安裝。

    • make install通常是拷貝make編譯出來的可執行文件或者依賴的庫文件(如果有的話)到configure時的--prefix指定的目錄下。

    • 安裝好的軟件放入環境變量, 就可以快樂的運行了。

    兩條注意:

    • 從源碼編譯最難解決的問題就是依賴的庫文件、頭文件、其它軟件的缺失或版本不匹配,沒有統一的解決辦法,原則就是缺啥補啥。

    • 三部曲每一步的執行,屏幕上都會輸出比較多的信息,一定仔細看最后有沒有ERROR類的字樣,對判斷軟件有無安裝成功和下一步要怎么做會很有幫助。

    Linux包的安裝的通用方式主要這些,后面還會提到兩種虛擬安裝方式,也都是為了簡化安裝而提出的。

    Python包的安裝

    在沒有Anaconda(或其前身canopy)出現之前,Python包以其管理混亂、安裝困難著稱。有了Anaconda后,不只python包的安裝簡單了,其它軟件的安裝也都方便了 (詳見后面Anaconda的兩個福利)。

    • 首先下載Anaconda的安裝包 https://www.continuum.io/downloads。
    • Anaconda的安裝包做的很人性化,一個bash腳本,只要運行bash Anacond*x86_64.sh,然后按照提示操作就可以了。
    • 按照好后,設置或刷新下環境變量就可以使用了。
    • 此后再安裝python的包只需要執行pip install pakcage_name或conda install pakckage_name就可以了。
    • 這里唯一需要注意的就是確認使用的python或pip確實是Anaconda安裝的python或pip。
      • which python查看使用的python命令。
      • 如果使用的還是系統默認的python,則需要檢查下環境變量的設置。

    Anaconda的兩個福利

  • 頭文件和庫文件庫
  • 這是Anaconda安裝后的目錄結構

    bin envs Examples imports lib LICENSE.txt pkgs share var conda-meta etc gcc include lib64 mkspecsplugins ssl<div class="se-preview-section-delimiter"></div>

    其中lib目錄下,一部分是依賴的動態鏈接庫, .so文件;這也是在源碼編譯時最常見的攔路虎。通常,只需要把這個目錄放入環境變量LD_LIBRARY_PATH里面比如export LD_LIBARY_PATH=${LD_LIBARY_PATH}:anaconda_path/lib就可以解決問題。

    cairo libitm.a libQtScript.so.4 cmake libitm.la libQtScript.so.4.8 engines libitm.so libQtScript.so.4.8.7 gcc libitm.so.1 libQtScriptTools.la gcj-4.8.5-14 libitm.so.1.0.0 libQtScriptTools.prl glib-2.0 libitm.spec libQtScriptTools.so libargtable2.a libjpeg.a libQtScriptTools.so.4 libargtable2.la libjpeg.la libQtScriptTools.so.4.8 libargtable2.so libjpeg.so libQtScriptTools.so.4.8.7 libargtable2.so.0 libjpeg.so.8 libQtSql.la libargtable2.so.0.1.8 libjpeg.so.8.4.0 libQtSql.prl libasan.a libmkl_avx2.so libQtSql.so libasan.la libmkl_avx512_mic.so libQtSql.so.4 libasan_preinit.o libmkl_avx512.so libQtSql.so.4.8 libasan.so libmkl_avx.so libQtSql.so.4.8.7
  • bioconda
  • bioconda提供了一個虛擬環境,方便軟件的編譯安裝。具體的我沒用過,可以讀下 徐洲更的生信軟件的好幫手-bioconda。

    R包的安裝

    R包的安裝具體看之前的R教程。

    需要注意的也是依賴的軟件或庫文件的版本,同樣的Anaconda提供的lib庫也可以直接拿來用。

    備注

    文中凡是提到環境變量的地方都可鏈接到之前提到的環境變量使用的文章,請務必仔細讀兩遍。

    如果軟件版本或依賴實在解決不了的,用Docker,虛擬出一個新的系統來解決,具體見。

    原文鏈接 http://blog.genesino.com//2017/06/bash1/

    微信公眾號

    http://mp.weixin.qq.com/s/yKP1Kboji9N4p2Sl1Ovj0Q

    總結

    以上是生活随笔為你收集整理的Linux bash学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲永久av | 久久久视频在线 | 波多野结衣精品在线 | 亚洲精品动漫成人3d无尽在线 | 久久人人爽爽人人爽人人片av | 九九热99视频 | 一区二区三区高清 | 夜夜夜影院 | 亚洲激情电影在线 | 精品亚洲午夜久久久久91 | 婷婷激情久久 | 亚洲高清在线观看视频 | 免费试看一区 | 日韩中文免费视频 | 国产精品黄色影片导航在线观看 | 成人黄色短片 | 久久久久久久久久电影 | 人人擦 | 欧美精品三级 | 久久久免费在线观看 | 亚洲精品欧美成人 | 91久久国产露脸精品国产闺蜜 | 久久国产热视频 | 黄色大片免费播放 | 色www永久免费| 99久久精品国产一区二区成人 | 国产一区视频免费在线观看 | 日本黄色免费在线 | 免费中午字幕无吗 | 日日操操操 | www.av在线播放 | 国产在线视频在线观看 | 日韩精品中文字幕在线不卡尤物 | 91大神一区二区三区 | 日韩电影在线看 | 久久久久久久久影院 | 久久精品资源 | 在线 国产 亚洲 欧美 | 日韩中文字幕亚洲一区二区va在线 | 黄色电影网站在线观看 | 一级性视频 | 日韩av不卡在线 | 午夜精品久久久久久久99热影院 | 一级α片免费看 | 午夜电影一区 | 欧美成人播放 | 亚洲精品国偷拍自产在线观看蜜桃 | 久草在线资源观看 | 亚洲成人家庭影院 | 韩国av免费在线观看 | 国产人在线成免费视频 | 制服丝袜一区二区 | 亚洲精品视频在线观看网站 | 国产又粗又猛又爽又黄的视频先 | 在线观看国产区 | 国产日韩欧美在线免费观看 | 蜜桃av久久久亚洲精品 | 91在线观 | 五月婷婷视频在线观看 | 三级视频国产 | 欧美激情视频一区 | 久久久久久中文字幕 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲成人网在线 | 亚洲九九九在线观看 | 激情综合五月天 | 久久免费高清视频 | 在线视频区 | 欧美成年黄网站色视频 | 在线观看黄色小视频 | 国产明星视频三级a三级点| 在线免费观看羞羞视频 | 国产精品久久久久久妇 | 久久国产精品偷 | 99免费看片 | 色综合久久久久久久久五月 | 插久久| 中日韩在线视频 | www.狠狠| 日韩在线网址 | 日韩欧在线 | 中午字幕在线观看 | 日韩美女av在线 | 视频在线一区 | 国产一级视屏 | www.久久色 | 天天操夜夜操夜夜操 | 黄色软件视频大全免费下载 | 国产精品人成电影在线观看 | 日韩免费一区 | 色综合久久88色综合天天免费 | 日韩一区二区三区不卡 | 91手机视频 | 亚洲人成免费网站 | 五月天久久综合 | 九九热国产视频 | 国产精品午夜av | 日本资源中文字幕在线 | 四虎国产精品永久在线国在线 | 国产精品视频不卡 | 91精品国产九九九久久久亚洲 | 91亚州| 毛片无卡免费无播放器 | 久久精品xxx | 免费开视频 | 中文字幕二区在线观看 | 久艹视频免费观看 | 免费欧美| 欧美日韩国产一区二区三区 | 午夜在线免费观看 | 69久久久久久久 | 久久精品美女视频 | 国产成人久久精品 | 丝袜美女视频网站 | 911香蕉| 欧美黄色免费 | 中文字幕有码在线 | 亚洲国产一区在线观看 | 久久久久久久久久久久国产精品 | 91久久精品一区二区二区 | 国产性天天综合网 | 日韩视频一区二区三区 | 狠狠躁夜夜a产精品视频 | 精品国产99| 日韩精品免费在线观看 | 色中射 | 精品亚洲成人 | 日韩在线观看网址 | 免费观看一区二区三区视频 | 国产精品久久久久久久久大全 | 成人免费在线观看电影 | 丁香六月天婷婷 | 久久精品精品电影网 | 探花国产在线 | 亚洲精品美女久久久 | 中文字幕日韩电影 | 亚洲妇女av | 97国产精品| 午夜国产福利在线 | 一本到视频在线观看 | 国产精品一区二区在线 | 日韩动漫免费观看高清完整版在线观看 | 成人手机在线视频 | 97超视频 | 中文字幕亚洲欧美日韩 | 国产精品一级视频 | 99久久精品免费一区 | 久久久久久久影院 | av免费观看高清 | 在线观看视频日韩 | 亚洲精品在线观看中文字幕 | 麻豆免费视频 | 中文字幕国语官网在线视频 | 国产成人一区二区三区免费看 | 亚洲一区二区精品3399 | 成人午夜电影在线播放 | 天天色天天射天天综合网 | 九九热有精品 | 久草干 | 国产伦精品一区二区三区高清 | 夜色资源站国产www在线视频 | 日韩欧美高清一区二区三区 | 精品国产激情 | 国产精品久久久区三区天天噜 | 精品国产乱码久久久久 | 天天操天天插 | 六月天综合网 | 91亚洲精品视频 | 激情五月婷婷丁香 | 国产一级二级在线播放 | 九九有精品 | 中文字幕av播放 | 久草在线费播放视频 | 久久综合久久综合这里只有精品 | 深爱婷婷 | 国产最新91 | 色多多视频在线观看 | 99久久er热在这里只有精品66 | 成人黄色一级视频 | 99久久久国产精品免费99 | 国产精品永久免费 | 97人人模人人爽人人喊中文字 | 永久免费观看视频 | 免费看网站在线 | 日韩视频www | 99久久99视频| 婷婷丁香社区 | 亚洲欧美日韩精品一区二区 | 激情影音先锋 | 日日日日干 | 在线观看国产麻豆 | av一区二区在线观看中文字幕 | 69精品在线观看 | 黄色三级免费片 | 日韩一区二区免费播放 | 久久久久久97三级 | av看片在线观看 | 五月丁香 | 天海冀一区二区三区 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产精品免费久久久久久 | 天天干婷婷 | 91免费日韩 | 久久久久激情视频 | h网站免费在线观看 | 中文字幕在线看视频 | 日韩精品在线看 | 在线播放精品一区二区三区 | 国产男女免费完整视频 | 久久视频国产精品免费视频在线 | 激情五月婷婷 | 久久天天躁夜夜躁狠狠躁2022 | 91av影视 | 波多野结衣精品视频 | 国产精品视频免费观看 | 在线欧美国产 | 免费亚洲一区二区 | 久草视频2 | 激情综合网色播五月 | 成人在线播放视频 | 久久精品视频在线播放 | 国产精品在线看 | 欧美最猛性xxx| 免费在线色 | 欧美日韩视频一区二区三区 | 少妇bbbb搡bbbb桶 | 狠狠插狠狠操 | 成人av片在线观看 | 亚洲精品乱码白浆高清久久久久久 | 欧美日韩国产综合一区二区 | 免费看成人| 精品视频免费在线 | 久久久久国产精品视频 | 成人日韩av | 久久久久久久久久久高潮一区二区 | 国产成人免费观看久久久 | 欧美少妇bbwhd | 嫩草av在线 | 日韩超碰在线 | 97视频网站| 五月天综合色 | 日韩色av色资源 | 中文字幕电影在线 | 日韩精品在线免费播放 | 久久久久成人精品免费播放动漫 | 日韩天天综合 | 精品视频久久久久久 | 99视频在线看 | 色五月色开心色婷婷色丁香 | 日韩在线激情 | 97在线免费 | 成年人视频在线 | 日韩欧美网站 | 中文在线资源 | 91av片| 久久精品福利视频 | 亚洲成 人精品 | 久久久久一区 | 最近2019年日本中文免费字幕 | 国产黄色高清 | 久久综合影音 | 97超级碰碰碰碰久久久久 | 男女男视频 | 亚洲国产日韩一区 | 在线中文字幕播放 | 久草久草久草久草 | 国产性天天综合网 | 久久久亚洲网站 | 免费在线一区二区 | 一区三区视频在线观看 | 天天曰天天干 | 狠狠狠干狠狠 | 亚洲精品一区二区三区新线路 | 日韩,中文字幕 | 91片黄在线观看 | 最近av在线 | 久久女教师 | 在线视频久 | 日韩精品在线观看视频 | 黄色成人在线观看 | 国产精品美女免费看 | 日韩精品中文字幕av | 99久久精品电影 | 人人射人人射 | 国产午夜一区二区 | 亚洲日本va中文字幕 | 黄色三级免费观看 | 亚欧洲精品视频在线观看 | 激情综合五月婷婷 | 中文视频一区二区 | japanesexxxhd奶水 91在线精品一区二区 | 久久极品 | 开心激情网五月天 | 成人a毛片 | 日产av在线播放 | 伊人国产女 | 激情丁香综合五月 | 精品亚洲一区二区 | 国产精品一区二区免费看 | 日韩精品中文字幕久久臀 | 99亚洲国产| 国产视频在线免费观看 | 久久久久久久综合色一本 | 亚洲少妇激情 | 99九九视频 | 亚洲精品久久久久58 | 亚洲天天在线日亚洲洲精 | 国产一区二区免费看 | 97人人看| 久久久亚洲麻豆日韩精品一区三区 | 久久国产精品免费一区 | 国产一区二区观看 | 91污污视频在线观看 | 欧美日韩精品在线观看视频 | 四虎www. | 国产精品va在线播放 | 97久久精品午夜一区二区 | 一区二区三区免费在线播放 | 国产精品1区2区 | 亚洲国产av精品毛片鲁大师 | 91精品夜夜 | 国产精品久久久久久久久久新婚 | 亚洲人成在线电影 | 中文在线天堂资源 | 欧美日韩成人 | 国内久久久久 | 天天操偷偷干 | 999男人的天堂 | 中文免费在线观看 | 久久成人毛片 | 久久视频免费观看 | www.久久久久| 久久久免费电影 | 91在线亚洲| 91香蕉久久 | 欧美黑吊大战白妞欧美 | 国产不卡av在线 | 久久精品网站免费观看 | 91喷水 | 国产成人av电影在线 | 中文字幕日韩免费视频 | www.天天操 | 日韩视频在线一区 | 四季av综合网站 | 日本丶国产丶欧美色综合 | 亚洲精品资源 | 9999在线| 国产精品欧美久久久久久 | 日韩a级免费视频 | 亚洲经典视频 | 狠狠干2018| 96国产在线| 在线观看日韩精品视频 | 亚洲欧美在线综合 | 国产精品一区二区三区在线看 | 九九九九九九精品 | 久久一区二区三区日韩 | 99热这里只有精品国产首页 | 国产精品高潮呻吟久久久久 | 欧美一级片在线播放 | 亚洲热久久 | 久久 一区| 在线91精品 | 国产精品自产拍在线观看 | 国产精品一区二区在线 | 国产在线观看不卡 | 欧美a视频| 国产精品久久久久久久久搜平片 | 夜夜操天天摸 | 五月婷婷在线观看 | 久久久免费高清视频 | 色99久久 | av一级片网站 | 成全在线视频免费观看 | 国产午夜精品久久久久久久久久 | 午夜精品久久一牛影视 | 久久手机免费视频 | 国产精品videoxxxx | 蜜臀精品久久久久久蜜臀 | 色婷婷伊人 | 国产二区电影 | 国产精品高潮呻吟久久av无 | 国产午夜三级一区二区三桃花影视 | 日韩精品一区二区电影 | 中文在线字幕免费观 | 日韩一级理论片 | 日韩一级黄色片 | 美女精品国产 | 98超碰人人 | 欧美日韩亚洲一 | 久久久99精品免费观看 | 天天操网站| 97天堂网| 日韩在线三级 | 久草影视在线观看 | 天堂av网在线 | 免费进去里的视频 | 最近2019中文免费高清视频观看www99 | 又黄又色又爽 | 色五婷婷 | 国产在线黄色 | 亚洲天天看 | 天天插狠狠干 | 免费无遮挡动漫网站 | 欧美男男激情videos | 国产精品wwwwww | www.99av| 免费a一级| 在线看日韩| 香蕉久草在线 | 九草在线视频 | 91福利小视频 | 久久久精品亚洲 | 国产精品久久久久久久久久久免费看 | 一区二区三区在线免费观看 | 精品久久亚洲 | 中文字幕在线观看第一区 | 中文字幕第一 | 成人试看120秒 | av大全在线看| 天天干天天干天天干天天干天天干天天干 | 日韩精品一区二区在线观看 | 午夜视频一区二区 | 精品影院一区二区久久久 | 国产成人av免费在线观看 | 人操人 | 日韩成人在线免费观看 | 日韩三级一区 | www.色国产 | 欧美视频国产视频 | 日韩在线播放欧美字幕 | 国产 在线观看 | 国产99视频在线观看 | 特级毛片爽www免费版 | av免费黄色 | 超碰国产97 | 综合精品在线 | av女优中文字幕在线观看 | 九九免费在线观看视频 | 国产精品第十页 | 国产一区二区在线免费视频 | 911久久香蕉国产线看观看 | 99久久网站 | 丝袜av一区 | 欧美日韩中文在线观看 | 日韩黄视频| 丁香婷婷电影 | 日女人电影 | 欧美日韩亚洲国产一区 | 久久婷婷一区二区三区 | a视频免费| 精品国产伦一区二区三区观看说明 | 在线免费观看视频a | 久久国产精品一区二区三区四区 | 波多野结衣一区二区三区中文字幕 | 国产 日韩 欧美 在线 | 在线成人国产 | 91久久电影 | 日韩一区二区在线免费观看 | 又黄又刺激视频 | 久久99网站| 日韩中文字幕视频在线观看 | 高清不卡免费视频 | 韩国在线一区 | 国产精品av久久久久久无 | 日韩精品视频免费 | 欧美久久久久久久 | 男女拍拍免费视频 | 婷婷草| 亚洲第一色 | 六月婷婷久香在线视频 | 日韩乱码在线 | 午夜电影久久 | 日韩电影精品一区 | 国产免费一区二区三区最新6 | 五月天亚洲精品 | 国产精品一区二区精品视频免费看 | 99精品热视频只有精品10 | 亚洲精品成人av在线 | 亚洲精品乱码久久久久久蜜桃动漫 | 毛片的网址 | 久久婷婷一区二区三区 | www久久com| 精品产品国产在线不卡 | 成人亚洲综合 | 婷婷六月网 | 2024国产在线 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 日韩免费电影一区二区三区 | 亚洲一区二区视频 | 国产亚洲久一区二区 | 日本中文字幕在线播放 | 久久国内视频 | 久久久久久久久久久久久久电影 | 国产护士av | 成人免费电影 | 久久爱www.| 亚洲电影网站 | 网址你懂的在线观看 | 欧美精品免费一区二区 | 99久久99久久精品国产片果冰 | 日韩精品久久一区二区 | 91视频91自拍| 日韩激情精品 | 欧美日韩国产在线 | 在线观看 国产 | 九九激情视频 | 丁香色综合 | 亚洲高清在线视频 | 亚洲精品视频在线观看网站 | av在线免费网站 | av在线播放亚洲 | 久久福利小视频 | av电影在线观看 | 国产精品手机在线 | 免费国产黄线在线观看视频 | 国产五月色婷婷六月丁香视频 | 99精品欧美一区二区 | 久久涩视频| 久久精品电影网 | 视频一区二区在线观看 | 国产精品免费久久久久影院仙踪林 | 国产亚洲在线观看 | 91精品国产网站 | 久久草| 国产原创在线 | 中文字幕国产精品一区二区 | 国产一线天在线观看 | 三级黄色大片在线观看 | 在线视频 91 | 99久久一区 | 成人午夜av电影 | 久久国产精品免费一区二区三区 | 国产一线二线三线在线观看 | 国产精品1区2区在线观看 | 在线视频观看成人 | 欧美日韩免费看 | 3d黄动漫免费看 | 在线播放你懂 | 日本最新中文字幕 | 一本一本久久a久久精品综合妖精 | 国产一区二区在线免费 | 精品福利av | 午夜精品区 | www.香蕉 | 99国产精品 | 操操碰 | 99热精品国产 | 97在线免费| 久久综合色天天久久综合图片 | 九九欧美 | 三级av免费看 | 色综合久久五月天 | 亚洲一级黄色片 | 国产成人综合精品 | 日日干天天插 | 亚洲综合爱 | 福利久久久| 国产女教师精品久久av | 99热超碰在线 | 国产在线免费 | 国产精品久久久久久久久毛片 | 中文字幕一区二区三区精华液 | 五月香婷 | 丁香花在线观看免费完整版视频 | 亚洲一区二区三区在线看 | 91精品婷婷国产综合久久蝌蚪 | 狠狠狠狠狠狠天天爱 | 国产中文字幕一区二区三区 | 成人aⅴ视频 | 人人爽爽人人 | 亚洲成人精品影院 | www国产精品com | 亚州精品天堂中文字幕 | japanese黑人亚洲人4k | 人人爽人人爽av | 在线播放国产一区二区三区 | 亚洲v欧美v国产v在线观看 | 99视频偷窥在线精品国自产拍 | 亚洲免费av电影 | 麻豆极品 | 高清av免费观看 | 欧美aaa大片 | 国产玖玖在线 | 青草视频免费观看 | 青青网视频 | 国产黄色片在线 | 久久噜噜少妇网站 | 国产1区2 | 国产视频资源 | 午夜精品一区二区三区在线观看 | 欧美日本国产在线观看 | 天天操夜夜叫 | 不卡精品| 午夜久久久久久久 | 天天爱天天插 | 69精品久久久 | 中国一级片免费看 | 国产精品成人免费精品自在线观看 | 99精品久久久久久久久久综合 | 在线看的av网站 | 激情电影影院 | 成人免费大片黄在线播放 | 日日操日日 | 日韩在线免费播放 | 欧美性色xo影院 | 九九日九九操 | 丁香综合av| 2021久久 | 一级免费黄视频 | 久久久.com| 91亚洲夫妻 | 欧美a级片网站 | 日韩动漫免费观看高清完整版在线观看 | 日本一区二区不卡高清 | 精品成人久久 | 97视频一区| 国产午夜精品在线 | 一区二区三区免费网站 | 国产无遮挡又黄又爽在线观看 | 国产精品手机看片 | 国产成人免费在线观看 | 国产视频综合在线 | 国产一区二区久久久久 | 国产精品久久久久久久久久久久午夜片 | 美女视频黄免费 | 国产在线不卡一区 | 色操插| 在线视频婷婷 | 欧美91精品久久久久国产性生爱 | 成人免费在线视频 | 97视频精品 | 成人黄色小说网 | 一级片免费在线 | 久久97精品 | bbbbb女女女女女bbbbb国产 | 午夜精品久久久99热福利 | 看国产黄色片 | 亚洲mv大片欧洲mv大片免费 | 白丝av免费观看 | 最近中文字幕大全中文字幕免费 | 欧美日韩在线播放 | 国产美女精品在线 | 天天干天天做 | 麻豆国产露脸在线观看 | 色在线视频 | 精品国产一区二区三区四区在线观看 | 日韩在线观看网址 | 色婷婷综合五月 | 日本精品视频一区 | 探花视频免费观看高清视频 | 91成人网页版 | 婷婷激情影院 | 黄色一级免费网站 | 免费精品人在线二线三线 | 色狠狠一区二区 | 黄色软件在线观看免费 | 成人黄色免费在线观看 | 久久 精品一区 | 丁香狠狠 | 午夜资源站 | 最近中文字幕大全 | 91精品系列 | 日韩理论片在线观看 | 成人一区不卡 | 欧美亚洲三级 | 国产在线欧美在线 | 精品亚洲视频在线观看 | 日韩区在线观看 | 最新av在线播放 | 亚洲精品美女在线 | av免费看网站| 日韩av在线网站 | 久久久久日本精品一区二区三区 | 精品久久久久久久久久 | 夜夜天天干 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲精品美女久久17c | 国产片免费在线观看视频 | 毛片无卡免费无播放器 | 国产亚洲精品成人 | 亚洲国产精品电影在线观看 | 久久理论片 | 香蕉网站在线观看 | 国产乱码精品一区二区蜜臀 | 欧美一级片在线 | 久久免费视频播放 | 国产精品永久久久久久久www | 夜色成人网 | 久久国产免费视频 | 五月激情婷婷丁香 | 日韩av片免费在线观看 | 永久免费毛片在线观看 | 九色在线 | 欧美在线视频一区二区 | 成年美女黄网站色大片免费看 | 国产精品专区h在线观看 | 国产精品永久久久久久久www | 天天草天天插 | 27xxoo无遮挡动态视频 | 免费在线观看黄色网 | 国产高清在线视频 | 免费午夜视频在线观看 | 日韩在线国产精品 | 亚洲一区av | 成年人在线免费看视频 | 91精品视频网站 | 国产玖玖精品视频 | 欧美另类高潮 | 免费黄色av| 日韩中文字幕国产精品 | 国产免费又爽又刺激在线观看 | 人人看看人人 | 日本黄色免费大片 | 99久久夜色精品国产亚洲 | 日本中文字幕久久 | 色播五月激情五月 | 中文字幕乱码电影 | 成人激情开心网 | 天天操天天操天天干 | 99中文视频在线 | 不卡的一区二区三区 | 国产成人福利在线观看 | 婷婷综合国产 | 国产99久久久精品视频 | 婷婷激情综合五月天 | 成年人在线观看 | 国产精品久久99综合免费观看尤物 | 中文字幕在线看人 | 色5月婷婷| 日韩欧美xxxx | 天天射天天射天天射 | 在线欧美最极品的av | 97电院网手机版 | 中文字幕在线一区二区三区 | 日本久久视频 | 色综合久久久久综合体桃花网 | 久草视频手机在线 | av综合站| 日韩av成人在线 | 日韩高清dvd | 日本高清xxxx| 天天爽天天爽 | 久久人人爽人人爽人人片 | 日韩欧美一区二区三区免费观看 | 国产精品第一页在线 | 在线免费观看欧美日韩 | 在线国产视频 | 国内精品久久久久影院优 | 91av成人 | 在线观看国产区 | 欧美一区二区伦理片 | 西西44人体做爰大胆视频 | 久久国产热| 91网址在线| 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | www.五月婷婷 | 亚洲国产欧美在线人成大黄瓜 | 欧美激情综合五月色丁香 | 久久国产网 | 欧美aaa大片 | 欧美一区二区三区免费看 | 视频直播国产精品 | 欧美日本三级 | 免费黄色在线网址 | 日韩v在线91成人自拍 | 麻豆免费在线播放 | 色九色 | 欧美日韩国产二区 | 国产99在线免费 | 中文字幕 国产视频 | 日韩一区二区三区高清在线观看 | 夜夜躁狠狠躁日日躁 | 久久久久久国产一区二区三区 | 一区二区三区四区五区在线 | 欧美成人性战久久 | 91大神精品视频 | 久久不色| 久久一二三四 | 亚洲精品资源在线观看 | 99热精品在线 | 91精品一区二区三区蜜桃 | 97超视频 | 在线视频观看成人 | 超碰97免费观看 | 天堂黄色片 | 91av在线看 | 五月天激情综合 | 中文字幕一区二区三区在线观看 | 91久久精品日日躁夜夜躁国产 | 黄色三级在线观看 | 日韩在线免费电影 | 欧美日韩精品在线免费观看 | 日韩精品一区二区三区中文字幕 | 久久老司机精品视频 | 一区二区三区精品久久久 | 日韩国产欧美在线视频 | 中文字幕在线看视频 | 奇米影视在线99精品 | 国产一区二区在线观看视频 | 三级黄色免费 | 中文字幕一区在线观看视频 | 国产成本人视频在线观看 | 天天·日日日干 | 91中文字幕一区 | 成 人 免费 黄 色 视频 | 日韩在线观看视频一区二区三区 | 激情av资源网 | 亚洲午夜av电影 | 日韩av一区二区在线影视 | 欧美最新大片在线看 | 欧美日韩亚洲第一 | 国产亚洲精品av | 在线观看中文字幕av | 一区二区不卡视频在线观看 | 天天天色 | 五月天激情综合网 | 久久精品国产亚洲精品2020 | 高清久久久 | 激情在线五月天 | 国产亚洲小视频 | 中文字幕激情 | 欧美日韩国产精品一区二区亚洲 | 国产麻豆精品久久一二三 | 欧美国产一区在线 | 99久久激情 | 国产一区视频在线观看免费 | 天天激情综合 | 国内精品久久久久影院一蜜桃 | 免费a v观看 | 免费日韩三级 | 四虎影视成人精品国库在线观看 | 国产精品99久久久久久久久久久久 | 亚洲黄色免费在线 | 久热免费 | 中文字幕婷婷 | 久久精品欧美 | 黄色成年片| 久久精品国产99 | 国产午夜麻豆影院在线观看 | 黄色大片视频网站 | 久久国产精品偷 | 日韩三级精品 | 丁香六月婷婷开心 | 国产精品嫩草影院99网站 | 国产精品国产三级国产专区53 | free. 性欧美.com| 在线91av| 欧美大片在线观看一区 | 青草视频网 | 日韩av有码在线 | 午夜12点 | 激情综合网五月 | 在线观看av麻豆 | 欧美另类重口 | 久久久久99999| 在线观看成人一级片 | 在线观看av大片 | 午夜三级毛片 | 国产精品乱码久久久久 | 国产精品久久久久久久久大全 | 97在线观看免费观看高清 | 成人黄色电影视频 | 精品夜夜嗨av一区二区三区 | 二区三区在线 | 2023亚洲精品国偷拍自产在线 | 成人看片 | 久久这里有精品 | 欧美激情视频一区二区三区免费 | 亚av在线 | 99色资源| 99热精品国产一区二区在线观看 | 国产精品一区二区三区在线 | 国产一级二级三级视频 | 久久久久亚洲精品国产 | 亚洲精品免费在线观看 | 国产一线天在线观看 | 久久avav | 夜夜夜影院 | 欧美性色19p | 国产精品亚洲片在线播放 | 久久久资源 | 91精品国产福利在线观看 | 91在线porny国产在线看 | 精品一区二区三区久久久 | 91色网址| 五月婷婷黄色网 | 婷婷久久精品 | 久久成年人 | av大全在线免费观看 | 911久久| 亚洲成人av在线播放 | 五月天色丁香 | 国产欧美在线一区 | 国产精品影音先锋 | 亚洲在线日韩 | 综合在线色 | 91九色国产视频 | 久草资源在线 | 九月婷婷综合网 | 激情综合五月婷婷 | 91精品国自产在线偷拍蜜桃 | 中文字幕精品一区二区精品 | 久久99精品久久久久久清纯直播 | 97视频总站| 999国内精品永久免费视频 | 久久久99久久 | 激情www | 久久精品视频在线看 | 免费91在线| 在线欧美日韩 | 国产精品久久久久久一区二区 | 国产一级特黄电影 | 日韩av综合网站 | 中文字幕乱码电影 | 久久综合福利 | 久久免费精品一区二区三区 | 国产精品久久9 | 亚洲国产资源 | 国产黄色片在线免费观看 | 五月亚洲 | 在线亚洲人成电影网站色www | 日韩精品一区二 | 国产精品麻豆果冻传媒在线播放 | 精品在线观看一区二区 | 伊人黄 | 996久久国产精品线观看 | 亚洲国产小视频在线观看 | 人人爽人人舔 | www.色午夜,com | 在线观看免费视频 | 俺要去色综合狠狠 | 国产精品久久久久久久久久三级 | 91精品视频免费看 | 久久精品这里精品 | 91视频88av| 免费的国产精品 | 精品视频123区在线观看 | 51久久夜色精品国产麻豆 | 久草a在线 | 久久91久久久久麻豆精品 | 国产精品久久久久一区二区三区共 | 亚洲精品456在线播放第一页 | 成人a在线观看高清电影 | 日韩在线欧美在线 | 搡bbbb搡bbb视频 | 成人av在线网址 | 天天天天天天干 | 久久精品看片 | 成年人免费av网站 | 天天躁天天狠天天透 | 久久香蕉国产精品麻豆粉嫩av | 久久电影国产免费久久电影 | 精品视频久久久久久 | 黄色动态图xx | 日韩一区二区三区免费视频 | 免费av视屏 | 日韩电影久久 | 91成人精品视频 | 91视频成人免费 | 91视频在线免费下载 | 激情文学丁香 | 超碰在线94 | 99 视频 高清 | 久久精久久精 | 91精品免费看 | 亚洲精品久久在线 | 亚洲国产精品99久久久久久久久 | 久久精品国亚洲 | 日韩美女免费线视频 | 手机色在线 | 九九久久视频 | 特级a毛片 | 欧美一区日韩一区 | 在线成人免费电影 | 91大神精品视频 | 久久免费黄色 | 色综合婷婷 | 国产黄色特级片 | 99爱视频在线观看 | 夜夜夜影院| 国产精品大片免费观看 | 天天爽网站 | 国产91全国探花系列在线播放 | 在线精品观看国产 | 人人舔人人干 | 日韩成人精品一区二区 | 久久6精品| 一区二区三区精品在线视频 | 美女免费视频一区二区 | av中文字幕av | 91香蕉视频在线下载 | 国产精品久久久久久久毛片 | 亚洲视频专区在线 | 久草a视频| 中文在线免费一区三区 | 天堂网在线视频 | 在线看片日韩 |