<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Be happy with Java

    unix 高手的10個(gè)習(xí)慣,zz

    UNIX 高手的 10 個(gè)習(xí)慣

    克服不良的 UNIX 使用模式

    developerWorks
    文檔選項(xiàng)
    將此頁作為電子郵件發(fā)送

    將此頁作為電子郵件發(fā)送

    未顯示需要 JavaScript 的文檔選項(xiàng)


    拓展 Tomcat 應(yīng)用

    下載 IBM 開源 J2EE 應(yīng)用服務(wù)器 WAS CE 新版本 V1.1


    級(jí)別: 中級(jí)

    Michael Stutz (stutz@dsl.org), 作者, 顧問

    2007 年 2 月 09 日

    采用 10 個(gè)能夠提高您的 UNIX? 命令行效率的好習(xí)慣——并在此過程中擺脫不良的使用模式。本文循序漸進(jìn)地指導(dǎo)您學(xué)習(xí)幾項(xiàng)用于命令行操作的技術(shù),這些技術(shù)非常好,但是通常被忽略。了解常見錯(cuò)誤和克服它們的方法,以便您能夠確切了解為何值得采用這些 UNIX 習(xí)慣。

    引言

    當(dāng)您經(jīng)常使用某個(gè)系統(tǒng)時(shí),往往會(huì)陷入某種固定的使用模式。有時(shí),您沒有養(yǎng)成以盡可能最好的方式做事的習(xí)慣。有時(shí),您的不良習(xí)慣甚至?xí)?dǎo)致出現(xiàn)混亂。糾正此類缺點(diǎn)的最佳方法之一,就是有意識(shí)地采用抵制這些壞習(xí)慣的好習(xí)慣。本文提出了 10 個(gè)值得采用的 UNIX 命令行習(xí)慣——幫助您克服許多常見使用怪癖,并在該過程中提高命令行工作效率的好習(xí)慣。下面列出了這 10 個(gè)好習(xí)慣,之后對進(jìn)行了更詳細(xì)的描述。

    采用 10 個(gè)好習(xí)慣

    要采用的十個(gè)好習(xí)慣為:

    1. 在單個(gè)命令中創(chuàng)建目錄樹
    2. 更改路徑;不要移動(dòng)存檔
    3. 將命令與控制操作符組合使用
    4. 謹(jǐn)慎引用變量
    5. 使用轉(zhuǎn)義序列來管理較長的輸入
    6. 在列表中對命令分組
    7. find 之外使用 xargs
    8. 了解何時(shí) grep 應(yīng)該執(zhí)行計(jì)數(shù)——何時(shí)應(yīng)該繞過
    9. 匹配輸出中的某些字段,而不只是對行進(jìn)行匹配
    10. 停止對 cat 使用管道

    在單個(gè)命令中創(chuàng)建目錄樹

    清單 1 演示了最常見的 UNIX 壞習(xí)慣之一:一次定義一個(gè)目錄樹。


    清單 1. 壞習(xí)慣 1 的示例:單獨(dú)定義每個(gè)目錄樹
    	
    ~ $ mkdir tmp
    ~ $ cd tmp
    ~/tmp $ mkdir a
    ~/tmp $ cd a
    ~/tmp/a $ mkdir b
    ~/tmp/a $ cd b
    ~/tmp/a/b/ $ mkdir c
    ~/tmp/a/b/ $ cd c
    ~/tmp/a/b/c $
    

    使用 mkdir-p 選項(xiàng)并在單個(gè)命令中創(chuàng)建所有父目錄及其子目錄要容易得多。但是即使對于知道此選項(xiàng)的管理員,他們在命令行上創(chuàng)建子目錄時(shí)也仍然束縛于逐步創(chuàng)建每級(jí)子目錄。花時(shí)間有意識(shí)地養(yǎng)成這個(gè)好習(xí)慣是值得的:


    清單 2. 好習(xí)慣 1 的示例:使用一個(gè)命令來定義目錄樹
    ~ $ mkdir -p tmp/a/b/c

    您可以使用此選項(xiàng)來創(chuàng)建整個(gè)復(fù)雜的目錄樹(在腳本中使用是非常理想的),而不只是創(chuàng)建簡單的層次結(jié)構(gòu)。例如:


    清單 3. 好習(xí)慣 1 的另一個(gè)示例:使用一個(gè)命令來定義復(fù)雜的目錄樹
    ~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

    過去,單獨(dú)定義目錄的唯一借口是您的 mkdir 實(shí)現(xiàn)不支持此選項(xiàng),但是在大多數(shù)系統(tǒng)上不再是這樣了。IBM、AIX?、mkdir、GNU mkdir 和其他遵守單一 UNIX 規(guī)范 (Single UNIX Specification) 的系統(tǒng)現(xiàn)在都具有此選項(xiàng)。

    對于仍然缺乏該功能的少數(shù)系統(tǒng),您可以使用 mkdirhier 腳本(請參見參考資料),此腳本是執(zhí)行相同功能的 mkdir 的包裝:

    ~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

    更改路徑;不要移動(dòng)存檔

    另一個(gè)不良的使用模式是將 .tar 存檔文件移動(dòng)到某個(gè)目錄,因?yàn)樵撃夸浨『檬悄M谄渲刑崛?.tar 文件的目錄。其實(shí)您根本不需要這樣做。您可以隨心所欲地將任何 .tar 存檔文件解壓縮到任何目錄——這就是 -C 選項(xiàng)的用途。在解壓縮某個(gè)存檔文件時(shí),使用 -C 選項(xiàng)來指定要在其中解壓縮該文件的目錄:


    清單 4. 好習(xí)慣 2 的示例:使用選項(xiàng) -C 來解壓縮 .tar 存檔文件
    ~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

    相對于將存檔文件移動(dòng)到您希望在其中解壓縮它的位置,切換到該目錄,然后才解壓縮它,養(yǎng)成使用 -C 的習(xí)慣則更加可取——當(dāng)存檔文件位于其他某個(gè)位置時(shí)尤其如此。





    回頁首


    將命令與控制操作符組合使用

    您可能已經(jīng)知道,在大多數(shù) Shell 中,您可以在單個(gè)命令行上通過在命令之間放置一個(gè)分號(hào) (;) 來組合命令。該分號(hào)是 Shell 控制操作符,雖然它對于在單個(gè)命令行上將離散的命令串聯(lián)起來很有用,但它并不適用于所有情況。例如,假設(shè)您使用分號(hào)來組合兩個(gè)命令,其中第二個(gè)命令的正確執(zhí)行完全依賴于第一個(gè)命令的成功完成。如果第一個(gè)命令未按您預(yù)期的那樣退出,第二個(gè)命令仍然會(huì)運(yùn)行——結(jié)果會(huì)導(dǎo)致失敗。相反,應(yīng)該使用更適當(dāng)?shù)目刂撇僮鞣ū疚膶⒚枋銎渲械牟糠植僮鞣V灰?Shell 支持它們,就值得養(yǎng)成使用它們的習(xí)慣。

    僅當(dāng)另一個(gè)命令返回零退出狀態(tài)時(shí)才運(yùn)行某個(gè)命令

    使用 && 控制操作符來組合兩個(gè)命令,以便僅當(dāng) 第一個(gè)命令返回零退出狀態(tài)時(shí)才運(yùn)行第二個(gè)命令。換句話說,如果第一個(gè)命令運(yùn)行成功,則第二個(gè)命令將運(yùn)行。如果第一個(gè)命令失敗,則第二個(gè)命令根本就不運(yùn)行。例如:


    清單 5. 好習(xí)慣 3 的示例:將命令與控制操作符組合使用
    ~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

    在此例中,存檔的內(nèi)容將提取到 ~/tmp/a/b/c 目錄中,除非該目錄不存在。如果該目錄不存在,則 tar 命令不會(huì)運(yùn)行,因此不會(huì)提取任何內(nèi)容。

    僅當(dāng)另一個(gè)命令返回非零退出狀態(tài)時(shí)才運(yùn)行某個(gè)命令

    類似地,|| 控制操作符分隔兩個(gè)命令,并且僅當(dāng)?shù)谝粋€(gè)命令返回非零退出狀態(tài)時(shí)才運(yùn)行第二個(gè)命令。換句話說,如果第一個(gè)命令成功,則第二個(gè)命令不會(huì)運(yùn)行。如果第一個(gè)命令失敗,則第二個(gè)命令才會(huì) 運(yùn)行。在測試某個(gè)給定目錄是否存在時(shí),通常使用此操作符,如果該目錄不存在,則創(chuàng)建它:


    清單 6. 好習(xí)慣 3 的另一個(gè)示例:將命令與控制操作符組合使用
    ~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

    您還可以組合使用本部分中描述的控制操作符。每個(gè)操作符都影響最后的命令運(yùn)行:


    清單 7. 好習(xí)慣 3 的組合示例:將命令與控制操作符組合使用
    ~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar





    回頁首


    謹(jǐn)慎引用變量

    始終要謹(jǐn)慎使用 Shell 擴(kuò)展和變量名稱。一般最好將變量調(diào)用包括在雙引號(hào)中,除非您有不這樣做的足夠理由。類似地,如果您直接在字母數(shù)字文本后面使用變量名稱,則還要確保將該變量名稱包括在方括號(hào) ([]) 中,以使其與周圍的文本區(qū)分開來。否則,Shell 將把尾隨文本解釋為變量名稱的一部分——并且很可能返回一個(gè)空值。清單 8 提供了變量的各種引用和非引用及其影響的示例。


    清單 8. 好習(xí)慣 4 的示例:引用(和非引用)變量
    ~ $ ls tmp/
    a b
    ~ $ VAR="tmp/*"
    ~ $ echo $VAR
    tmp/a tmp/b
    ~ $ echo "$VAR"
    tmp/*
    ~ $ echo $VARa
    
    ~ $ echo "$VARa"
    
    ~ $ echo "${VAR}a"
    tmp/*a
    ~ $ echo ${VAR}a
    tmp/a
    ~ $
    





    回頁首


    使用轉(zhuǎn)義序列來管理較長的輸入

    您或許看到過使用反斜杠 (\) 來將較長的行延續(xù)到下一行的代碼示例,并且您知道大多數(shù) Shell 都將您通過反斜杠聯(lián)接的后續(xù)行上鍵入的內(nèi)容視為單個(gè)長行。然而,您可能沒有在命令行中像通常那樣利用此功能。如果您的終端無法正確處理多行回繞,或者您的命令行比通常小(例如在提示符下有長路經(jīng)的時(shí)候),反斜杠就特別有用。反斜杠對于了解鍵入的長輸入行的含義也非常有用,如以下示例所示:


    清單 9. 好習(xí)慣 5 的示例:將反斜杠用于長輸入
    ~ $ cd tmp/a/b/c || \
    > mkdir -p tmp/a/b/c && \
    > tar xvf -C tmp/a/b/c ~/archive.tar

    或者,也可以使用以下配置:


    清單 10. 好習(xí)慣 5 的替代示例:將反斜杠用于長輸入
    ~ $ cd tmp/a/b/c \
    >                 || \
    > mkdir -p tmp/a/b/c \
    >                    && \
    > tar xvf -C tmp/a/b/c ~/archive.tar

    然而,當(dāng)您將輸入行劃分到多行上時(shí),Shell 始終將其視為單個(gè)連續(xù)的行,因?yàn)樗偸莿h除所有反斜杠和額外的空格。

    注意:在大多數(shù) Shell 中,當(dāng)您按向上箭頭鍵時(shí),整個(gè)多行輸入將重繪到單個(gè)長輸入行上。





    回頁首


    在列表中對命令分組

    大多數(shù) Shell 都具有在列表中對命令分組的方法,以便您能將它們的合計(jì)輸出向下傳遞到某個(gè)管道,或者將其任何部分或全部流重定向到相同的地方。您一般可以通過在某個(gè) Subshell 中運(yùn)行一個(gè)命令列表或通過在當(dāng)前 Shell 中運(yùn)行一個(gè)命令列表來實(shí)現(xiàn)此目的。

    在 Subshell 中運(yùn)行命令列表

    使用括號(hào)將命令列表包括在單個(gè)組中。這樣做將在一個(gè)新的 Subshell 中運(yùn)行命令,并允許您重定向或收集整組命令的輸出,如以下示例所示:


    清單 11. 好習(xí)慣 6 的示例:在 Subshell 中運(yùn)行命令列表
    ~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
    > VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
    > | mailx admin -S "Archive contents"

    在此示例中,該存檔的內(nèi)容將提取到 tmp/a/b/c/ 目錄中,同時(shí)將分組命令的輸出(包括所提取文件的列表)通過郵件發(fā)送到地址 admin

    當(dāng)您在命令列表中重新定義環(huán)境變量,并且您不希望將那些定義應(yīng)用于當(dāng)前 Shell 時(shí),使用 Subshell 更可取。

    在當(dāng)前 Shell 中運(yùn)行命令列表

    將命令列表用大括號(hào) ({}) 括起來,以在當(dāng)前 Shell 中運(yùn)行。確保在括號(hào)與實(shí)際命令之間包括空格,否則 Shell 可能無法正確解釋括號(hào)。此外,還要確保列表中的最后一個(gè)命令以分號(hào)結(jié)尾,如以下示例所示:


    清單 12. 好習(xí)慣 6 的另一個(gè)示例:在當(dāng)前 Shell 中運(yùn)行命令列表
    ~ $ { cp ${VAR}a . && chown -R guest.guest a && \
    > tar cvf newarchive.tar a; } | mailx admin -S "New archive"





    回頁首


    在 find 之外使用 xargs

    使用 xargs 工具作為篩選器,以充分利用從 find 命令挑選的輸出。find 運(yùn)行通常提供與某些條件匹配的文件列表。此列表被傳遞到 xargs 上,后者然后使用該文件列表作為參數(shù)來運(yùn)行其他某些有用的命令,如以下示例所示:


    清單 13. xargs 工具的經(jīng)典用法示例
    ~ $ find some-file-criteria some-file-path | \
    > xargs some-great-command-that-needs-filename-arguments

    然而,不要將 xargs 僅看作是 find 的輔助工具;它是一個(gè)未得到充分利用的工具之一,當(dāng)您養(yǎng)成使用它的習(xí)慣時(shí),將會(huì)希望進(jìn)行所有試驗(yàn),包括以下用法。

    傳遞空格分隔的列表

    在最簡單的調(diào)用形式中,xargs 就像一個(gè)篩選器,它接受一個(gè)列表(每個(gè)成員分別在單獨(dú)的行上)作為輸入。該工具將那些成員放置在單個(gè)空格分隔的行上:


    清單 14. xargs 工具產(chǎn)生的輸出示例
    ~ $ xargsabcControl-D
    a b c
    ~ $
    

    您可以發(fā)送通過 xargs 來輸出文件名的任何工具的輸出,以便為其他某些接受文件名作為參數(shù)的工具獲得參數(shù)列表,如以下示例所示:


    清單 15. xargs 工具的使用示例
    ~/tmp $ ls -1 | xargs
    December_Report.pdf README a archive.tar mkdirhier.sh
    ~/tmp $ ls -1 | xargs file
    December_Report.pdf: PDF document, version 1.3
    README: ASCII text
    a: directory
    archive.tar: POSIX tar archive
    mkdirhier.sh: Bourne shell script text executable
    ~/tmp $
    

    xargs 命令不只用于傳遞文件名。您還可以在需要將文本篩選到單個(gè)行中的任何時(shí)候使用它:


    清單 16. 好習(xí)慣 7 的示例:使用 xargs 工具來將文本篩選到單個(gè)行中
    ~/tmp $ ls -l | xargs
    -rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
    root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
    16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
    joe joe 3239 Sep 30 12:40 mkdirhier.sh
    ~/tmp $
    

    謹(jǐn)慎使用 xargs

    從技術(shù)上講,使用 xargs 很少遇到麻煩。缺省情況下,文件結(jié)束字符串是下劃線 (_);如果將該字符作為單個(gè)輸入?yún)?shù)來發(fā)送,則它之后的所有內(nèi)容將被忽略。為了防止這種情況發(fā)生,可以使用 -e 標(biāo)志,它在不帶參數(shù)的情況下完全禁用結(jié)束字符串。





    回頁首


    了解何時(shí) grep 應(yīng)該執(zhí)行計(jì)數(shù)——何時(shí)應(yīng)該繞過

    避免通過管道將 grep 發(fā)送到 wc -l 來對輸出行數(shù)計(jì)數(shù)。grep-c 選項(xiàng)提供了對與特定模式匹配的行的計(jì)數(shù),并且一般要比通過管道發(fā)送到 wc 更快,如以下示例所示:


    清單 17. 好習(xí)慣 8 的示例:使用和不使用 grep 的行計(jì)數(shù)
    ~ $ time grep and tmp/a/longfile.txt | wc -l
    2811
    
    real    0m0.097s
    user    0m0.006s
    sys     0m0.032s
    ~ $ time grep -c and tmp/a/longfile.txt
    2811
    
    real    0m0.013s
    user    0m0.006s
    sys     0m0.005s
    ~ $ 
    

    除了速度因素外,-c 選項(xiàng)還是執(zhí)行計(jì)數(shù)的好方法。對于多個(gè)文件,帶 -c 選項(xiàng)的 grep 返回每個(gè)文件的單獨(dú)計(jì)數(shù),每行一個(gè)計(jì)數(shù),而針對 wc 的管道則提供所有文件的組合總計(jì)數(shù)。

    然而,不管是否考慮速度,此示例都表明了另一個(gè)要避免地常見錯(cuò)誤。這些計(jì)數(shù)方法僅提供包含匹配模式的行數(shù)——如果那就是您要查找的結(jié)果,這沒什么問題。但是在行中具有某個(gè)特定模式的多個(gè)實(shí)例的情況下,這些方法無法為您提供實(shí)際匹配實(shí)例數(shù)量 的真實(shí)計(jì)數(shù)。歸根結(jié)底,若要對實(shí)例計(jì)數(shù),您還是要使用 wc 來計(jì)數(shù)。首先,使用 -o 選項(xiàng)(如果您的版本支持它的話)來運(yùn)行 grep 命令。此選項(xiàng) 輸出匹配的模式,每行一個(gè)模式,而不輸出行本身。但是您不能將它與 -c 選項(xiàng)結(jié)合使用,因此要使用 wc -l 來對行計(jì)數(shù),如以下示例所示:


    清單 18. 好習(xí)慣 8 的示例:使用 grep 對模式實(shí)例計(jì)數(shù)
    ~ $ grep -o and tmp/a/longfile.txt | wc -l
    3402
    ~ $
    

    在此例中,調(diào)用 wc 要比第二次調(diào)用 grep 并插入一個(gè)虛擬模式(例如 grep -c)來對行進(jìn)行匹配和計(jì)數(shù)稍快一點(diǎn)。





    回頁首


    匹配輸出中的某些字段,而不只是對行進(jìn)行匹配

    當(dāng)您只希望匹配輸出行中特定字段 中的模式時(shí),諸如 awk 等工具要優(yōu)于 grep

    下面經(jīng)過簡化的示例演示了如何僅列出 12 月修改過的文件。


    清單 19. 壞習(xí)慣 9 的示例:使用 grep 來查找特定字段中的模式
    ~/tmp $ ls -l /tmp/a/b/c | grep Dec
    -rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
    -rw-r--r--  1 root root  238 Dec 03 08:19 README
    -rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
    ~/tmp $
    

    在此示例中,grep 對行進(jìn)行篩選,并輸出其修改日期和名稱中帶 Dec 的所有文件。因此,諸如 December_Report.pdf 等文件是匹配的,即使它自從一月份以來還未修改過。這可能不是您希望的結(jié)果。為了匹配特定字段中的模式,最好使用 awk,其中的一個(gè)關(guān)系運(yùn)算符對確切的字段進(jìn)行匹配,如以下示例所示:


    清單 20. 好習(xí)慣 9 的示例:使用 awk 來查找特定字段中的模式
    ~/tmp $ ls -l | awk '$6 == "Dec"'
    -rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
    -rw-r--r--  1 root root  238 Dec 03 08:19 README
    ~/tmp $
    

    有關(guān)如何使用 awk 的更多詳細(xì)信息,請參見參考資料





    回頁首


    停止對 cat 使用管道

    grep 的一個(gè)常見的基本用法錯(cuò)誤是通過管道將 cat 的輸出發(fā)送到 grep 以搜索單個(gè)文件的內(nèi)容。這絕對是不必要的,純粹是浪費(fèi)時(shí)間,因?yàn)橹T如 grep 這樣的工具接受文件名作為參數(shù)。您根本不需要在這種情況下使用 cat,如以下示例所示:


    清單 21. 好習(xí)慣和壞習(xí)慣 10 的示例:使用帶和不帶 cat 的 grep
    	
    ~ $ time cat tmp/a/longfile.txt | grep and
    2811
    
    real    0m0.015s
    user    0m0.003s
    sys     0m0.013s
    ~ $ time grep and tmp/a/longfile.txt
    2811
    
    real    0m0.010s
    user    0m0.006s
    sys     0m0.004s
    ~ $ 
    

    此錯(cuò)誤存在于許多工具中。由于大多數(shù)工具都接受使用連字符 (-) 的標(biāo)準(zhǔn)輸入作為一個(gè)參數(shù),因此即使使用 cat 來分散 stdin 中的多個(gè)文件,參數(shù)也通常是無效的。僅當(dāng)您使用帶多個(gè)篩選選項(xiàng)之一的 cat 時(shí),才真正有必要在管道前首先執(zhí)行連接。





    回頁首


    結(jié)束語:養(yǎng)成好習(xí)慣

    最好檢查一下您的命令行習(xí)慣中的任何不良的使用模式。不良的使用模式會(huì)降低您的速度,并且通常會(huì)導(dǎo)致意外錯(cuò)誤。本文介紹了 10 個(gè)新習(xí)慣,它們可以幫助您擺脫許多最常見的使用錯(cuò)誤。養(yǎng)成這些好習(xí)慣是加強(qiáng)您的 UNIX 命令行技能的積極步驟。

    posted on 2007-02-12 17:39 SYBIL@BLOGJAVA 閱讀(150) 評(píng)論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 麻豆精品成人免费国产片| 免费无遮挡无码视频在线观看| 中文字幕乱码免费看电影| 亚洲日韩精品无码专区网站| www亚洲精品久久久乳| 国产一精品一aⅴ一免费| 国产亚洲精品欧洲在线观看| 日本中文一区二区三区亚洲 | 91亚洲va在线天线va天堂va国产| 成人爽a毛片免费| 亚洲综合日韩中文字幕v在线| 免费人成在线观看网站品爱网 | 亚洲av无码一区二区乱子伦as| 国产一精品一av一免费爽爽| 亚洲AV日韩精品久久久久久| 最近中文字幕mv免费高清在线| 亚洲免费视频网址| 国产高清在线免费| 国产成人无码免费看片软件| 亚洲av色影在线| 黄页免费的网站勿入免费直接进入| 亚洲成av人片在www鸭子| 亚洲精品国精品久久99热| 三年片免费高清版 | 免费看搞黄视频网站| 亚洲一级毛片免费观看| 国产成人免费全部网站| 中文字幕一区二区免费| 亚洲色欲色欲www| 亚洲精品无码永久在线观看| 热久久这里是精品6免费观看| 亚洲成a人不卡在线观看| 国产网站在线免费观看| 美女视频黄的免费视频网页| 成人亚洲国产va天堂| 国产成人精品亚洲精品| 免费精品国产自产拍在线观看图片| 精品亚洲视频在线| 亚洲综合国产精品| 亚洲一区二区三区乱码A| 国产成人精品免费视频动漫 |