亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Shell腳本實(shí)戰(zhàn):從踩坑到高效自動(dòng)化運(yùn)維

Shell腳本實(shí)戰(zhàn):從踩坑到高效自動(dòng)化運(yùn)維 從事Linux運(yùn)維和開(kāi)發(fā)這些年shell腳本是我每天都會(huì)碰的東西。做日志切割、批量改文件、寫(xiě)定時(shí)任務(wù)、數(shù)據(jù)同步、環(huán)境初始化一件件看起來(lái)雞毛蒜皮的小事最后都是靠腳本把人力省下來(lái)的。這是我自己筆記的第十六篇前面寫(xiě)過(guò)系統(tǒng)啟動(dòng)、權(quán)限、磁盤(pán)、網(wǎng)絡(luò)這些基礎(chǔ)內(nèi)容這篇專(zhuān)門(mén)聊聊shell腳本把我這些年踩過(guò)的坑和覺(jué)得有價(jià)值的寫(xiě)法一次性梳理出來(lái)希望能幫正在學(xué)腳本的讀者少走幾步彎路。這篇內(nèi)容不打算從什么是變量這種教科書(shū)概念開(kāi)始而是直接以實(shí)戰(zhàn)視角切入什么時(shí)候該寫(xiě)腳本、腳本骨架怎么搭、核心語(yǔ)法怎么用才不出錯(cuò)、完整案例怎么落地、出了問(wèn)題怎么排查。適合已經(jīng)會(huì)敲基本命令、想把零散命令變成可復(fù)用工具的讀者如果你是完全零基礎(chǔ)可以先拿著基本命令練幾遍再來(lái)看這篇效果會(huì)更好。1. 什么時(shí)候真正需要?jiǎng)邮謱?xiě)腳本1.1 腳本最擅長(zhǎng)解決的幾類(lèi)問(wèn)題先說(shuō)實(shí)話不是所有事情都值得寫(xiě)成腳本。我自己判斷的標(biāo)準(zhǔn)很簡(jiǎn)單這件事是不是要重復(fù)做兩次以上是不是需要多個(gè)命令配合才能完成如果答案都是肯定的那基本就該寫(xiě)了。最常見(jiàn)的場(chǎng)景我列一下批量操作類(lèi)幾十臺(tái)機(jī)器上收集信息、幾百個(gè)文件統(tǒng)一改名、批量壓縮解壓。手工敲一條條命令又累又容易漏腳本跑一遍還能留下輸出日志。定時(shí)任務(wù)類(lèi)日志清理、數(shù)據(jù)備份、臨時(shí)文件歸檔、健康檢查告警。cron加腳本是絕配腳本負(fù)責(zé)邏輯cron負(fù)責(zé)定時(shí)觸發(fā)。部署與初始化類(lèi)新機(jī)器裝環(huán)境、初始化配置、重啟服務(wù)。這類(lèi)操作步驟多且有固定順序?qū)懗赡_本后可以反復(fù)執(zhí)行也方便在出問(wèn)題時(shí)快速重來(lái)。格式轉(zhuǎn)換與數(shù)據(jù)處理把CSV轉(zhuǎn)成另一種格式、從日志里面提取關(guān)鍵字段、批量替換文件內(nèi)容。配合awk、sed、grep這些工具一個(gè)瘦腳本就能解決很多所謂大數(shù)據(jù)需求的土辦法方案。我遇到最多的是日志相關(guān)。比如業(yè)務(wù)系統(tǒng)每天產(chǎn)生的日志文件按照日期命名超過(guò)30天的需要?jiǎng)h除磁盤(pán)空間到80%需要告警。這種需求用手工做根本不現(xiàn)實(shí)定時(shí)跑一個(gè)腳本才是正解。后面我會(huì)把這個(gè)完整腳本展開(kāi)講。即使是臨時(shí)性任務(wù)只要我開(kāi)始覺(jué)得這串命令要重復(fù)手敲兩遍也會(huì)順手寫(xiě)成腳本。寫(xiě)的時(shí)候可能只花三分鐘但后面再遇到類(lèi)似需求把腳本翻出來(lái)改兩行就能用。腳本庫(kù)就是這么一點(diǎn)一點(diǎn)攢出來(lái)的。1.2 別把腳本當(dāng)萬(wàn)能鑰匙shell腳本也不是沒(méi)有短板。遇到下面這幾類(lèi)情況我建議換個(gè)工具而不是硬撐。一是性能敏感的大數(shù)據(jù)處理。比如幾GB的日志要算統(tǒng)計(jì)指標(biāo)shell里一層層循環(huán)會(huì)慢到讓人懷疑人生這時(shí)候用Python、Go甚至直接上SQL都更合適。shell適合做膠水層面的組織和協(xié)調(diào)不適合做重計(jì)算。二是邏輯特別復(fù)雜的流程。判斷分支多了、狀態(tài)多了、需要復(fù)雜數(shù)據(jù)結(jié)構(gòu)的場(chǎng)景shell寫(xiě)起來(lái)會(huì)很痛苦調(diào)試也費(fèi)勁。腳本里出現(xiàn)幾十行嵌套if基本就是該重構(gòu)或者換更合適語(yǔ)言重寫(xiě)的信號(hào)。三是跨平臺(tái)要求高的場(chǎng)景。雖然bash在各種Linux發(fā)行版上都通用但有些命令在不同發(fā)行版上行為略有差別macOS自帶的是舊版bashWindows上更是另一套。如果腳本要在完全不同的環(huán)境里跑要么用Python這類(lèi)跨平臺(tái)解釋器要么在腳本里做足兼容判斷。我的經(jīng)驗(yàn)是能用標(biāo)準(zhǔn)命令組合解決的就用腳本感覺(jué)腳本寫(xiě)起來(lái)已經(jīng)很別扭了果斷換語(yǔ)言。工具選對(duì)了后面維護(hù)的成本才會(huì)低。1.3 動(dòng)手前先想清楚三個(gè)問(wèn)題寫(xiě)一個(gè)腳本之前先花兩分鐘想三件事輸入是什么、輸出是什么、中間有哪些約束。輸入可能是配置文件、命令行參數(shù)或環(huán)境變量輸出可能是處理后的文件、日志記錄或一個(gè)退出碼約束包括運(yùn)行權(quán)限、運(yùn)行時(shí)間窗口、磁盤(pán)空間上限等。想清楚這三件事腳本的結(jié)構(gòu)基本就出來(lái)了。然后遵循一個(gè)原則一個(gè)腳本只干一件事。把功能拆成函數(shù)每個(gè)函數(shù)只做它負(fù)責(zé)的那部分。這樣做的好處是定位問(wèn)題快、復(fù)用方便也方便以后把腳本拆成更細(xì)的模塊。我早期寫(xiě)腳本總是一個(gè)腳本解決所有問(wèn)題結(jié)果腳本越來(lái)越長(zhǎng)改一個(gè)邏輯就動(dòng)到全局線上出了故障排查得像考古。吃過(guò)虧以后才養(yǎng)成先拆功能、再動(dòng)手寫(xiě)的習(xí)慣。2. 腳本骨架搭建與變量引用的關(guān)鍵細(xì)節(jié)2.1 shebang、執(zhí)行權(quán)限和首行配置一個(gè)普通文本文件要讓系統(tǒng)當(dāng)成腳本執(zhí)行需要兩個(gè)條件第一行以#!開(kāi)頭指定解釋器并且文件要有執(zhí)行權(quán)限。第一行寫(xiě)#!/bin/bash還是#!/usr/bin/env bash兩者都能用但意義不同。直接寫(xiě)#!/bin/bash是明確指定解釋器路徑性能稍好兼容性也更容易預(yù)料。寫(xiě)#!/usr/bin/env bash是先找到bash所在路徑再執(zhí)行在bash不在標(biāo)準(zhǔn)位置的系統(tǒng)上更靈活但env本身如果找不到也會(huì)帶來(lái)問(wèn)題。我自己在服務(wù)器上習(xí)慣直接寫(xiě)#!/bin/bash因?yàn)闃?biāo)準(zhǔn)發(fā)行版上bash基本都在這個(gè)位置少一層解析也更穩(wěn)。執(zhí)行權(quán)限用chmod x script.sh加上。這一步很多人忽略導(dǎo)致明明腳本沒(méi)問(wèn)題卻提示Permission denied。另外如果在當(dāng)前目錄運(yùn)行腳本要寫(xiě)成./script.sh而不是script.sh因?yàn)楫?dāng)前目錄通常不在PATH環(huán)境變量里。這個(gè)踩坑率極高尤其是剛從Windows轉(zhuǎn)到Linux環(huán)境的讀者。首行配置我還建議加兩樣?xùn)|西一是文件頭的注釋寫(xiě)明腳本用途、創(chuàng)建時(shí)間和維護(hù)人二是set選項(xiàng)。雖然set選項(xiàng)后面詳細(xì)講但我現(xiàn)在寫(xiě)任何腳本開(kāi)頭幾乎固定是#!/bin/bash # 功能xxxx # 創(chuàng)建2024-xx-xx set -euo pipefailset -euo pipefail這一行帶來(lái)的變化我后面詳細(xì)說(shuō)先記住它能讓腳本在出錯(cuò)時(shí)立刻暴露問(wèn)題而不是帶病往下跑。2.2 變量取值與引號(hào)使用的門(mén)道變量賦值在shell里看似簡(jiǎn)單坑全藏在細(xì)節(jié)中。賦值語(yǔ)句等號(hào)兩邊不能有空格寫(xiě)成name 張三會(huì)變成執(zhí)行命令name直接報(bào)command not found。這個(gè)錯(cuò)誤我見(jiàn)新人踩過(guò)無(wú)數(shù)次。取變量值用$name但更嚴(yán)謹(jǐn)?shù)膶?xiě)法是${name}。兩者差別在變量名后面緊跟其他字符時(shí)體現(xiàn)出來(lái)echo $name_file會(huì)把name_file當(dāng)成一個(gè)變量名而echo ${name}_file才是取name變量的值再加下劃線和file。凡是變量名邊界不清晰的場(chǎng)景一律用${}包裹這是一個(gè)讓腳本更清晰、更安全的好習(xí)慣。引號(hào)的使用是shell腳本最容易出問(wèn)題的點(diǎn)。什么時(shí)候用雙引號(hào)什么時(shí)候不用規(guī)則其實(shí)很明確如果變量的值可能包含空格、通配符或其他特殊字符并且你希望它作為一個(gè)整體被處理就必須加雙引號(hào)。比如file_path/data/logs/app 2024.log if [ -f $file_path ]; then echo 文件存在 fi如果這里不加雙引號(hào)[ -f $file_path ]會(huì)被展開(kāi)成[ -f /data/logs/app 2024.log ]test命令會(huì)因?yàn)閰?shù)個(gè)數(shù)不對(duì)直接報(bào)語(yǔ)法錯(cuò)誤。雙引號(hào)的作用就是給整個(gè)值包一層不讓shell把里面的空格當(dāng)成分隔符。還有一種情況是變量的值來(lái)源不可控比如讀取外部文件內(nèi)容、命令輸出的結(jié)果這時(shí)候雙引號(hào)尤其重要。不加雙引號(hào)的話文件里如果有分號(hào)、感嘆號(hào)、星號(hào)之類(lèi)的內(nèi)容shell會(huì)做各種展開(kāi)輕則結(jié)果不對(duì)重則執(zhí)行了本不該執(zhí)行的命令。我在這上面栽過(guò)跟頭一個(gè)讀取文件內(nèi)容后再拼成命令發(fā)送的腳本文件里恰巧有分號(hào)結(jié)果一行原本正常的命令被拆成了兩條。從那以后凡是非我手寫(xiě)的字符串默認(rèn)一律加雙引號(hào)處理。命令替換是另一個(gè)常用特性$(command)會(huì)執(zhí)行命令并把輸出作為值。比如拿今天日期today$(date %F)。這里我建議優(yōu)先用$()而不是反引號(hào)因?yàn)榉匆?hào)在處理嵌套時(shí)容易出錯(cuò)$()可以嵌套可讀性也更好。注意命令替換的結(jié)果如果有換行符賦值給變量后會(huì)保留echo出來(lái)可能看到多行這在處理命令輸出時(shí)要心里有數(shù)。2.3 位置參數(shù)與入?yún)z查腳本接收外部輸入最常見(jiàn)的是位置參數(shù)$1、$2這種。比如./backup.sh /data/mysql /backup腳本里$1就是/data/mysql$2就是/backup。$#表示參數(shù)個(gè)數(shù)$表示所有參數(shù)并且每個(gè)參數(shù)獨(dú)立$也表示所有參數(shù)但視為一個(gè)整體。遍歷參數(shù)時(shí)應(yīng)該用for arg in $而不是$這樣才能正確處理帶空格的參數(shù)值。腳本里的關(guān)鍵參數(shù)我習(xí)慣加一道檢查避免用戶忘了傳參導(dǎo)致腳本在后面某個(gè)莫名其妙的位置報(bào)錯(cuò)。典型寫(xiě)法if [ $# -lt 2 ]; then echo 用法: $0 源目錄 備份目錄 exit 1 fi這樣做的好處是錯(cuò)誤信息明確而不是腳本跑了一大半才因?yàn)檎也坏轿募?。exit 1返回非零退出碼調(diào)用方可以據(jù)此判斷腳本執(zhí)行失敗。有時(shí)候參數(shù)是可選的需要默認(rèn)值。shell的參數(shù)展開(kāi)語(yǔ)法能直接處理${var:-默認(rèn)值}表示var沒(méi)設(shè)置或?yàn)榭諘r(shí)使用默認(rèn)值。比如日志保留天數(shù)支持通過(guò)參數(shù)指定不指定就默認(rèn)30天keep_days${1:-30}。這樣腳本既靈活又穩(wěn)妥。類(lèi)似地${var:默認(rèn)值}不但取默認(rèn)值還給變量賦值${var:?提示信息}在變量為空時(shí)直接退出并輸出提示適合強(qiáng)制要求參數(shù)的場(chǎng)景。3. 條件判斷與循環(huán)的實(shí)戰(zhàn)細(xì)節(jié)3.1 條件測(cè)試寫(xiě)法單中括號(hào)和雙中括號(hào)怎么選shell里做判斷本質(zhì)上是運(yùn)行一個(gè)test命令并根據(jù)它的退出碼決定分支。if [ ... ]中的方括號(hào)其實(shí)是test命令的另一種寫(xiě)法所以方括號(hào)兩邊必須有空格[ $a $b ]寫(xiě)成[ $a$b ]就會(huì)出錯(cuò)因?yàn)閟hell把整個(gè)字符串當(dāng)成了一個(gè)參數(shù)。現(xiàn)代bash里更推薦用雙中括號(hào)[[ ... ]]。它是bash內(nèi)置的關(guān)鍵詞支持更豐富的表達(dá)式比如和都可以用支持正則匹配也支持和||這種邏輯運(yùn)算符。最關(guān)鍵的是在[[ ]]內(nèi)部變量即使不加雙引號(hào)也不會(huì)被錯(cuò)誤分詞對(duì)新手友好得多。我的建議是既然用的是bash直接統(tǒng)一用[[ ]]不要再拿單中括號(hào)去踩那些邊邊角角的坑。文件判斷操作符要記牢-f判斷是不是普通文件-d判斷是不是目錄-e判斷路徑是否存在-r、-w、-x判斷讀、寫(xiě)、執(zhí)行權(quán)限-z和-n判斷字符串為空或非空。-nt和-ot可以比較文件的修改時(shí)間新舊在增量備份場(chǎng)景里很好用。數(shù)值比較用-eq、-ne、-gt、-lt而不是和因?yàn)樵趕hell里是重定向符號(hào)寫(xiě)錯(cuò)會(huì)引發(fā)文件重定向非常隱蔽。邏輯判斷的寫(xiě)法在[[ ]]里直接用和||if [[ -f $file -r $file ]]; then。在單中括號(hào)里要用-a和-o再加上各種轉(zhuǎn)義可讀性和安全性都差。所以堅(jiān)持用[[ ]]能讓代碼干凈很多。3.2 for、while、until在什么場(chǎng)景下各司其職for循環(huán)適合遍歷已知列表遍歷一組文件、一組主機(jī)名、一組參數(shù)。最典型的是遍歷當(dāng)前目錄下的所有txt文件for f in *.txt; do echo 處理文件: $f done注意*.txt在這里會(huì)先被shell展開(kāi)成文件列表如果目錄里沒(méi)有匹配的文件展開(kāi)結(jié)果會(huì)是字面的*.txt循環(huán)還是會(huì)執(zhí)行一次所以最好先判斷文件是否存在再進(jìn)循環(huán)。遍歷時(shí)如果文件名有空格for f in *.txt這種寫(xiě)法會(huì)出問(wèn)題因?yàn)榭崭駮?huì)被當(dāng)成列表分隔。處理方法是用find配合while readfind . -name *.txt -print0 | while IFS read -r -d f; do echo 處理文件: $f done-print0把文件名以null分隔-d 讓read也按null分隔讀取。這個(gè)寫(xiě)法看著繁瑣但它在處理帶空格、帶換行的文件名時(shí)百分之百可靠是處理任意文件名最穩(wěn)妥的方式。while循環(huán)適合條件驅(qū)動(dòng)的場(chǎng)景讀文件直到文件結(jié)束、等待某個(gè)條件成立、消費(fèi)某個(gè)隊(duì)列。最常見(jiàn)的while讀文件寫(xiě)法while IFS read -r line; do echo $line done input.txtIFS防止行首行尾的空白被trim掉-r防止反斜杠被解釋 input.txt把文件作為循環(huán)的輸入。這種寫(xiě)法比f(wàn)or i in $(cat input.txt)安全得多因?yàn)閒or配合$(cat)會(huì)把文件按空格、按換行全部分裂一遍文件內(nèi)容稍微有點(diǎn)特殊字符就亂套了。until循環(huán)和while結(jié)構(gòu)一樣只是條件為假時(shí)執(zhí)行。實(shí)際用得少但偶爾用來(lái)等待某個(gè)服務(wù)就緒還挺順手until nc -z 127.0.0.1 3306; do sleep 1; done一直等到數(shù)據(jù)庫(kù)端口能連通。循環(huán)里break可以提前跳出continue進(jìn)入下一輪是兩個(gè)常用的控制指令不要忘記。3.3 管道、子shell與循環(huán)變量丟失問(wèn)題這個(gè)問(wèn)題我必須單獨(dú)提因?yàn)樗舆^(guò)的絕對(duì)不止我一個(gè)人在管道后面接while循環(huán)循環(huán)內(nèi)對(duì)變量的修改在循環(huán)結(jié)束后會(huì)丟失??催@個(gè)經(jīng)典例子count0 echo -e a\nb\nc | while read line; do count$((count 1)) done echo $count輸出是0而不是3。原因在于管道會(huì)讓while循環(huán)跑在一個(gè)子shell進(jìn)程里子shell里的變量修改不會(huì)傳回父shell。我第一次遇到時(shí)百思不得其解查來(lái)查去才發(fā)現(xiàn)是shell的設(shè)計(jì)使然。解決思路有三種。第一種把輸入重定向而不是用管道while read line; do count$((count 1)) done (echo -e a\nb\nc)進(jìn)程替換(command)產(chǎn)生的輸入通過(guò)重定向進(jìn)入循環(huán)循環(huán)本身還在當(dāng)前shell里運(yùn)行變量修改就能保留。第二種是把結(jié)果寫(xiě)到文件再讀出來(lái)。第三種是把處理邏輯封裝成函數(shù)后用輸出捕獲結(jié)果但本質(zhì)上還是在子shell里靠的是函數(shù)輸出而非變量傳遞。這類(lèi)子shell邊界問(wèn)題在管道、find -exec、括號(hào)子shell里都會(huì)出現(xiàn)。遇到變量值詭異消失的現(xiàn)象第一反應(yīng)就是檢查是不是跨越了子shell邊界。排查方法也很簡(jiǎn)單在關(guān)鍵位置加echo輸出中間值看看循環(huán)內(nèi)和循環(huán)外的值是否一致不一致基本就是邊界問(wèn)題。4. 函數(shù)設(shè)計(jì)、退出碼與腳本健壯性4.1 用函數(shù)拆骨架local變量防污染腳本一長(zhǎng)組織方式就成了大問(wèn)題。我現(xiàn)在的習(xí)慣是腳本主體只保留流程調(diào)度真正的邏輯全部放進(jìn)函數(shù)。函數(shù)定義用function name() {}或者直接name() {}都可以我傾向不帶function關(guān)鍵字和POSIX兼容性更好。函數(shù)里要特別注意變量的作用域。默認(rèn)情況下函數(shù)里賦值的變量是全局的會(huì)污染腳本其他部分。所以凡是函數(shù)內(nèi)部的臨時(shí)變量一律用local聲明local tmp_file/tmp/xxx。這能避免函數(shù)間因?yàn)橥粋€(gè)變量名互相影響排查問(wèn)題時(shí)也清楚每個(gè)變量的歸屬。這個(gè)習(xí)慣和寫(xiě)代碼時(shí)不讓函數(shù)偷偷改全局狀態(tài)是同一個(gè)道理。函數(shù)內(nèi)用return返回一個(gè)整數(shù)狀態(tài)碼0表示成功非0表示失敗。return和exit容易混return只是退出當(dāng)前函數(shù)腳本還能繼續(xù)exit是直接終止整個(gè)腳本。在某個(gè)函數(shù)里判斷要不要讓整個(gè)腳本停下來(lái)就要分清楚用return還是exit。我一般是函數(shù)內(nèi)部出錯(cuò)且后續(xù)步驟依賴該函數(shù)的結(jié)果就在函數(shù)里exit 1讓腳本立刻失敗只是單一環(huán)節(jié)出錯(cuò)、不影響整體就return非零值讓調(diào)用方自行處理。函數(shù)設(shè)計(jì)上還有一個(gè)經(jīng)驗(yàn)一個(gè)函數(shù)只做一件事函數(shù)名誠(chéng)實(shí)描述行為。read_config作為一個(gè)函數(shù)就只負(fù)責(zé)讀取配置并校驗(yàn)不把別的邏輯塞進(jìn)來(lái)。這樣腳本讀起來(lái)像是一篇有目錄的文章而不是一團(tuán)糾纏的線。4.2 退出碼與set -euo pipefail的核心策略每個(gè)命令執(zhí)行完都會(huì)留下一個(gè)退出碼0是成功1到255是各種失敗原因。在條件判斷和循環(huán)里shell就是靠退出碼來(lái)決定走向。$?保存著上一個(gè)命令的退出碼但它有個(gè)致命特點(diǎn)任何命令執(zhí)行都會(huì)覆蓋$?。你想檢查某個(gè)命令的結(jié)果必須立刻取值中間不能穿插任何其他命令。下面這個(gè)寫(xiě)法就是典型的錯(cuò)grep error app.log echo grep退出碼記錄到變量: $? if [ $? -eq 0 ]; then第一次$?還是grep的退出碼第二次$?已經(jīng)是echo命令的了想判斷grep結(jié)果時(shí)早就不對(duì)了。正確做法是第一時(shí)間把退出碼存下來(lái)grep error app.log ret$? if [ $ret -eq 0 ]; thenset選項(xiàng)能大幅改變腳本的容錯(cuò)行為。set -e表示任何一條命令返回非零就立刻退出腳本避免錯(cuò)誤被掩蓋、腳本帶著錯(cuò)誤狀態(tài)繼續(xù)跑出更多問(wèn)題。初學(xué)者經(jīng)常覺(jué)得set -e太敏感但正是這種敏感讓問(wèn)題盡早暴露。set -u表示使用未定義變量時(shí)直接報(bào)錯(cuò)退出能順手抓出很多變量名拼寫(xiě)錯(cuò)誤。set -o pipefail讓管道中任何一個(gè)環(huán)節(jié)失敗都被識(shí)別為管道失敗否則bash只關(guān)心管道最后一個(gè)命令的狀態(tài)前面環(huán)節(jié)悄悄掛了你都不知道。三個(gè)選項(xiàng)拼在一起set -euo pipefail就是我現(xiàn)在所有腳本開(kāi)頭的標(biāo)配。它們改變了腳本遇到錯(cuò)誤時(shí)的默認(rèn)反應(yīng)從默默繼續(xù)變成大聲失敗。這個(gè)轉(zhuǎn)變對(duì)線上任務(wù)的意義非常大我自己是踩過(guò)腳本其實(shí)早就出錯(cuò)但還在跑的虧之后才真正體會(huì)到這行配置的價(jià)值。也要說(shuō)明set -e在某些場(chǎng)景下需要臨時(shí)關(guān)閉。比如你明確知道某條命令可能失敗且失敗是可以接受的可以用if cmd; then的寫(xiě)法把它放在條件里這樣set -e不會(huì)干涉?;蛘哂胏md || true主動(dòng)吞掉失敗狀態(tài)。但|| true相當(dāng)于告訴讀者這行失敗無(wú)所謂所以要謹(jǐn)慎使用別讓該報(bào)的錯(cuò)都被蒙混過(guò)關(guān)。4.3 trap清理與臨時(shí)文件安全管理腳本跑著跑著被中斷了留下的臨時(shí)文件、鎖文件怎么辦trap命令就是為這種場(chǎng)景準(zhǔn)備的。trap code EXIT可以讓腳本在任何方式退出時(shí)都會(huì)執(zhí)行那段清理代碼無(wú)論是正常結(jié)束、被中斷還是報(bào)錯(cuò)退出。我寫(xiě)腳本時(shí)凡是創(chuàng)建了臨時(shí)目錄必配一句tmp_dir$(mktemp -d) trap rm -rf $tmp_dir EXITmktemp -d會(huì)在/tmp下生成一個(gè)隨機(jī)命名的目錄避免用固定路徑導(dǎo)致多個(gè)實(shí)例互相覆蓋也防止了路徑被其他用戶提前猜到帶來(lái)隱患。trap清理保證腳本就算中途掛了垃圾也能被帶走。單獨(dú)看rm -rf $tmp_dir這個(gè)命令還有一個(gè)細(xì)節(jié)變量要用雙引號(hào)包住否則目錄名里有空格時(shí)會(huì)拆成多個(gè)參數(shù)甚至可能誤刪不該刪的東西。關(guān)于rm -rf的風(fēng)險(xiǎn)后面安全部分還會(huì)展開(kāi)。trap還可以監(jiān)聽(tīng)信號(hào)trap echo 收到中斷信號(hào)開(kāi)始收尾; exit 1 INT TERM讓腳本在被CtrlC時(shí)先做清理再退出。這種無(wú)論如何退出都先清理的思維是腳本健壯性的一個(gè)核心習(xí)慣建議把它內(nèi)置到自己的腳本模板里。5. 實(shí)戰(zhàn)拆解一個(gè)日志自動(dòng)清理腳本5.1 需求描述與功能拆分前面講了這么多理論現(xiàn)在用一個(gè)我真實(shí)場(chǎng)景里非常常見(jiàn)的例子把整個(gè)流程串起來(lái)。假設(shè)有一個(gè)業(yè)務(wù)日志目錄/data/app/logs里面每天生成一個(gè)以日期命名的.log文件還可能有子目錄。需求有三點(diǎn)刪除30天前的日志文件釋放磁盤(pán)空間刪除前記錄一份清理清單方便以后查賬如果目錄所在磁盤(pán)使用率超過(guò)80%輸出告警信息并留下一條醒目的記錄。這種需求如果直接寫(xiě)三坨命令也能完成大部分功能但可讀性、安全性都差。按前面說(shuō)的思路我先拆功能校驗(yàn)?zāi)夸?、?zhí)行清理、記錄日志、檢查磁盤(pán)水位。每個(gè)功能一個(gè)函數(shù)主流程簡(jiǎn)單清晰。5.2 完整腳本逐段解析先看完整代碼再逐段解釋關(guān)鍵處。這個(gè)腳本偏向通用教學(xué)你可以直接拿來(lái)改成本地路徑使用。#!/bin/bash # 功能日志目錄過(guò)期清理與磁盤(pán)水位檢查 # 用法./clean_logs.sh [保留天數(shù)] [目標(biāo)目錄](méi) set -euo pipefail LOG_DIR/data/app/logs KEEP_DAYS${1:-30} LIMIT80 CLEAN_LOG/var/log/clean_logs_history.log log_msg() { echo $(date %F %T) $* $CLEAN_LOG } check_dir() { if [ ! -d $LOG_DIR ]; then log_msg 目錄不存在: $LOG_DIR exit 1 fi } disk_usage() { local used used$(df $LOG_DIR | awk NR2 {print $5} | tr -d %) if [ $used -ge $LIMIT ]; then log_msg 磁盤(pán)使用率超限: ${used}% ${LIMIT}% echo 警告: 磁盤(pán)使用率已達(dá) ${used}% fi } do_clean() { local file while IFS read -r file; do [ -f $file ] || continue log_msg 刪除過(guò)期日志: $file rm -f $file done (find $LOG_DIR -type f -name *.log -mtime $KEEP_DAYS -print0) } main() { check_dir do_clean disk_usage log_msg 清理任務(wù)完成保留天數(shù)${KEEP_DAYS} } main逐段來(lái)說(shuō)。set -euo pipefail就是前面說(shuō)的標(biāo)配。其中-u在這里尤其重要因?yàn)槟_本引用了KEEP_DAYS、LOG_DIR這類(lèi)變量如果變量名寫(xiě)錯(cuò)或者賦值沒(méi)成功-u會(huì)立刻讓腳本報(bào)錯(cuò)而不是用空值一路帶偏后面的邏輯。LOG_DIR和KEEP_DAYS是配置區(qū)。我把可變的配置集中在腳本頂部以后要改路徑或天數(shù)只動(dòng)這幾行就行。KEEP_DAYS${1:-30}表示支持命令行參數(shù)指定天數(shù)不指定就默認(rèn)30天。這種配置集中加參數(shù)覆蓋的模式很實(shí)用。log_msg函數(shù)把所有運(yùn)行痕跡追加到CLEAN_LOG。日志統(tǒng)一記錄是運(yùn)維腳本的底線出事后能回溯也是留痕思維的體現(xiàn)。函數(shù)里的$*會(huì)把所有參數(shù)合并成一行配合前面的日期時(shí)間戳記錄的信息就很完整了。check_dir先驗(yàn)證目錄存在。在腳本一開(kāi)頭就校驗(yàn)前置條件是避免任務(wù)做到一半才發(fā)現(xiàn)環(huán)境不滿足的經(jīng)典做法。disk_usage用df拿使用率再用awk取第二行的百分比字段用tr去掉百分號(hào)最后和LIMIT比較。這里一個(gè)細(xì)節(jié)是df的輸出第一行是標(biāo)題NR2才是目標(biāo)文件系統(tǒng)的數(shù)據(jù)行。do_clean是整個(gè)腳本的核心。find $LOG_DIR -type f -name *.log -mtime $KEEP_DAYS查找指定目錄下距離修改時(shí)間超過(guò)保留天數(shù)的.log文件。-mtime 30的意思是文件修改時(shí)間在30天之前。選項(xiàng)-print0讓find以null字符分隔輸出的文件名這是為了應(yīng)對(duì)文件名里有空格或換行的極端情況。然后通過(guò)進(jìn)程替換(...)把find的結(jié)果作為while循環(huán)的輸入這樣while循環(huán)跑在當(dāng)前shell里不會(huì)遇到前面說(shuō)的子shell變量丟失問(wèn)題。循環(huán)體里先判斷[ -f $file ]再刪除主要是防止find結(jié)果因路徑變化已經(jīng)失效避免把不存在路徑當(dāng)普通參數(shù)處理。main函數(shù)把整個(gè)流程串起來(lái)腳本真正執(zhí)行的地方就一行main。這樣設(shè)計(jì)的好處是腳本的邏輯一目了然想單獨(dú)調(diào)試某個(gè)環(huán)節(jié)可以臨時(shí)注釋掉main里的某一項(xiàng)或者直接拿出某個(gè)函數(shù)單獨(dú)測(cè)試。5.3 接入crontab與運(yùn)行驗(yàn)證腳本寫(xiě)好后用crontab -e編輯定時(shí)任務(wù)添加一行30 2 * * * /usr/local/bin/clean_logs.sh 30 /data/app/logs /dev/null 21這表示每天凌晨2點(diǎn)半執(zhí)行一次第一個(gè)30是保留天數(shù)。定時(shí)任務(wù)里有一個(gè)經(jīng)典坑cron執(zhí)行環(huán)境非常精簡(jiǎn)PATH可能不包含腳本依賴的命令路徑所以腳本里的命令最好寫(xiě)全路徑或者調(diào)用時(shí)顯式帶上環(huán)境。我一般習(xí)慣在腳本里固定export PATH/usr/local/bin:/usr/bin:/bin避免cron環(huán)境下找不到命令。先手動(dòng)執(zhí)行一遍確認(rèn)退出碼為0再檢查CLEAN_LOG里有沒(méi)有正常記錄。然后用find手動(dòng)驗(yàn)證一下過(guò)期文件確實(shí)被清理了。最后再掛cron不要寫(xiě)完就直接掛上萬(wàn)一有bug定時(shí)任務(wù)會(huì)在凌晨悄悄幫你放大問(wèn)題。6. 調(diào)試技巧與高頻避坑速查6.1 調(diào)試三板斧bash -x、set -x、關(guān)鍵節(jié)點(diǎn)輸出shell腳本出了問(wèn)題怎么排查我用得最多的方法是bash -x script.sh直接以調(diào)試模式運(yùn)行。這個(gè)模式下每條命令執(zhí)行前都會(huì)把展開(kāi)后的實(shí)際命令打印到標(biāo)準(zhǔn)錯(cuò)誤前面帶一個(gè)加號(hào)??吹郊犹?hào)后面的實(shí)際命令就能立刻發(fā)現(xiàn)變量展開(kāi)是不是符合預(yù)期、某條命令是不是被拆成了兩條。比如變量沒(méi)加引號(hào)導(dǎo)致參數(shù)分裂在-x模式下會(huì)非常直觀地看到命令參數(shù)被拆開(kāi)。腳本內(nèi)部也可以用set -x開(kāi)、set x關(guān)把調(diào)試范圍限制在某個(gè)區(qū)間echo 開(kāi)始調(diào)試 set -x rm -f $file set x echo 調(diào)試結(jié)束這樣做可以避免整個(gè)腳本的輸出被調(diào)試信息淹沒(méi)。還有一種低技術(shù)含量但極有效的方法在關(guān)鍵節(jié)點(diǎn)加echo輸出。變量賦值后、分支進(jìn)入前、循環(huán)每次迭代時(shí)各打一行帶標(biāo)記的輸出比如echo DEBUG: file$file, count$count。配合bash -x基本能定位九成的邏輯問(wèn)題。再有就是trap echo line:$LINENO, ret$? ERR每行出錯(cuò)時(shí)自動(dòng)打印行號(hào)和退出碼。這個(gè)對(duì)定位到底哪條命令掛了特別有幫助。需要留意ERR觸發(fā)和set -e、命令返回非零等條件有依賴關(guān)系實(shí)際使用中配合bash -x效果更好。6.2 高頻錯(cuò)誤對(duì)照速查我整理了平時(shí)答疑時(shí)遇到最多的問(wèn)題做成一個(gè)速查表能省不少排查時(shí)間。現(xiàn)象常見(jiàn)原因解決辦法執(zhí)行腳本提示Permission denied沒(méi)有執(zhí)行權(quán)限chmod x script.sh能執(zhí)行但報(bào)command not found文件名含特殊字符或CRLF換行用file查看格式dos2unix轉(zhuǎn)換變量值不對(duì)多出奇怪內(nèi)容未加雙引號(hào)被shell分詞或擴(kuò)展變量引用一律加雙引號(hào)if判斷總是走false方括號(hào)左右缺空格[ $a $b ]每個(gè)地方留空格循環(huán)后變量值沒(méi)變子shell邊界問(wèn)題改用重定向或進(jìn)程替換整數(shù)比較報(bào)語(yǔ)法錯(cuò)誤用了 而不是-gt -lt數(shù)值比較用-eq -ne -gt -ltrm在某些文件上報(bào)參數(shù)過(guò)多find結(jié)果過(guò)多導(dǎo)致參數(shù)上限超限改用find -delete或分批處理腳本某個(gè)環(huán)節(jié)靜默失敗沒(méi)開(kāi)啟set -e和pipefail腳本開(kāi)頭加set -euo pipefail這里面CRLF換行的問(wèn)題值得單獨(dú)說(shuō)一句。在Windows上編輯過(guò)的腳本上傳到Linux文件每行末尾會(huì)帶著\r第一行shebang會(huì)變成#!/bin/bash\r系統(tǒng)會(huì)報(bào)bad interpreter錯(cuò)誤。用file script.sh看一下顯示with CRLF line terminators就知道是這個(gè)原因。解決用sed -i s/\r$// script.sh或者dos2unix命令。養(yǎng)成在Linux環(huán)境里編輯腳本、或者給編輯器設(shè)置好換行符的習(xí)慣能從根上避開(kāi)這個(gè)問(wèn)題。6.3 隱蔽風(fēng)險(xiǎn)rm -rf、通配符展開(kāi)、eval與臨時(shí)文件shell腳本因?yàn)榭梢灾苯訄?zhí)行任意系統(tǒng)命令安全上的坑比其他語(yǔ)言更需要警惕。首當(dāng)其沖的是rm -rf這類(lèi)危險(xiǎn)命令。如果變量沒(méi)設(shè)置好rm -rf $dir/里的dir是空字符串就會(huì)變成rm -rf /后果不堪設(shè)想。我的習(xí)慣是凡是涉及rm -rf先用[ -n $dir ]校驗(yàn)變量非空再用set -u兜底并且在執(zhí)行前echo出完整命令供人工檢查。雖然這次寫(xiě)的清理腳本用的是rm -f不帶-r但任何刪除操作都值得同樣的謹(jǐn)慎。另一個(gè)隱蔽風(fēng)險(xiǎn)是變量里的通配符展開(kāi)。如果文件名里帶有*號(hào)不加引號(hào)的使用會(huì)把星號(hào)按通配符展開(kāi)可能展開(kāi)成一堆文件路徑。這個(gè)問(wèn)題在讀取外部數(shù)據(jù)來(lái)源時(shí)尤其值得注意外部數(shù)據(jù)不可信你的引號(hào)就是防線。凡是對(duì)變量?jī)?nèi)容不確定默認(rèn)加雙引號(hào)這一條能擋住一大片問(wèn)題。eval命令要盡量少用。eval會(huì)先把字符串拼接成命令再執(zhí)行等于允許外部輸入直接變成命令注入風(fēng)險(xiǎn)極高。在我處理的場(chǎng)景中絕大多數(shù)eval需求都可以通過(guò)關(guān)聯(lián)數(shù)組、case分支或函數(shù)映射解決沒(méi)有必要用eval。如果你確實(shí)繞不開(kāi)至少確保eval的參數(shù)完全由腳本內(nèi)部受控內(nèi)容構(gòu)成絕不讓外部輸入直接進(jìn)eval。臨時(shí)文件的安全也要注意。腳本里別用固定的/tmp/my_temp_file這種路徑多個(gè)實(shí)例同時(shí)跑會(huì)互相覆蓋別人也可能猜到路徑做手腳。統(tǒng)一用mktemp或mktemp -d生成隨機(jī)路徑用完配合trap清理。關(guān)于腳本安全我的總原則是輸入嚴(yán)格校驗(yàn)、輸出路徑明確、權(quán)限最小化、危險(xiǎn)操作前置檢查。這些習(xí)慣不復(fù)雜但能在關(guān)鍵時(shí)候把損失控制住。7. 腳本長(zhǎng)期維護(hù)的幾點(diǎn)習(xí)慣7.1 命名、注釋與版本管理腳本命名要一看就知道用途clean_logs.sh、backup_mysql.sh、check_disk.sh都比test1.sh、new2.sh強(qiáng)一百倍。命名里建議包含動(dòng)詞表達(dá)做什么而不是是什么。腳本存放到統(tǒng)一目錄比如~/bin或/usr/local/bin按功能分目錄更清晰比如scripts/clean、scripts/backup、scripts/monitor。注釋不需要泛濫但文件頭的用途說(shuō)明、每個(gè)函數(shù)的輸入輸出說(shuō)明、以及關(guān)鍵代碼行中為什么不這樣寫(xiě)的說(shuō)明值得認(rèn)真寫(xiě)。我最重視的是為什么的注釋一行代碼解釋不了為什么需要這段邏輯而這里不直接用rm是因?yàn)?..這種注釋能幫半年后的自己快速回憶當(dāng)初的決策。版本管理方面哪怕只是個(gè)人腳本也建議納入git。腳本會(huì)不斷演進(jìn)能回溯每一次改動(dòng)、看到什么時(shí)候改了什么排查線上問(wèn)題時(shí)價(jià)值巨大。如果嫌每次提交麻煩可以只在腳本改動(dòng)達(dá)到一定規(guī)模時(shí)提交但至少要保留一份修訂記錄比如在文件頭加一行修改歷史2024-01-01 增加磁盤(pán)水位檢查。我在自己的環(huán)境里是喜歡都用git管理的腳本庫(kù)一個(gè)倉(cāng)庫(kù)分支按環(huán)境區(qū)分發(fā)布用標(biāo)簽。長(zhǎng)期下來(lái)腳本庫(kù)從一坨快看不懂的文件變成了有歷史有說(shuō)明的工具集維護(hù)成本明顯下降。7.2 冪等設(shè)計(jì)與鎖文件好的腳本應(yīng)該可以重復(fù)運(yùn)行而不產(chǎn)生壞結(jié)果這叫做冪等性。舉例說(shuō)初始化目錄的腳本mkdir -p /data/app/logs無(wú)論執(zhí)行多少次都不報(bào)錯(cuò)但如果是清空目錄的腳本不加判斷跑兩遍可能就刪掉了不該刪的東西。設(shè)計(jì)腳本時(shí)問(wèn)自己一個(gè)問(wèn)題同一個(gè)腳本跑兩遍、跑十遍結(jié)果應(yīng)該一樣嗎如果答案應(yīng)該是一樣那就要確保關(guān)鍵步驟是冪等的。常見(jiàn)做法包括創(chuàng)建目錄用mkdir -p而不是先判斷再加mkdir寫(xiě)文件前先檢查是否已存在或先備份刪除操作前先確認(rèn)目標(biāo)存在且符合預(yù)期涉及狀態(tài)變更的步驟用鎖文件避免重復(fù)執(zhí)行。鎖文件可以簡(jiǎn)單用flock實(shí)現(xiàn)exec 9${script_dir}/.lock flock -n 9 || { echo 腳本已在運(yùn)行; exit 1; }這樣能防止同一個(gè)腳本并發(fā)執(zhí)行互相干擾。定時(shí)任務(wù)和手動(dòng)任務(wù)指向同一個(gè)腳本時(shí)這種做法尤其重要。7.3 寫(xiě)給下一個(gè)自己最后聊點(diǎn)個(gè)人的體會(huì)。腳本這行功夫不是把語(yǔ)法背熟就完了真正值錢(qián)的是踩坑之后的判斷力知道什么場(chǎng)景該寫(xiě)腳本、什么場(chǎng)景不該上知道哪幾行代碼在運(yùn)行時(shí)最容易出問(wèn)題知道出問(wèn)題后第一步應(yīng)該看哪里。這些能力沒(méi)有捷徑就是多寫(xiě)多踩多總結(jié)。我現(xiàn)在的習(xí)慣是每次踩到一個(gè)不常見(jiàn)的坑就在自己的筆記里記一筆包括現(xiàn)象、原因、解決過(guò)程。久而久之這本筆記就變成了自己的排障字典。這也正是我寫(xiě)這第十六篇筆記的初衷很多經(jīng)驗(yàn)不記下來(lái)三個(gè)月后我可能還是得靠重新踩坑才能想起來(lái)。如果你剛開(kāi)始學(xué)shell腳本我的建議很樸素從改造自己昨天手工敲過(guò)的命令開(kāi)始今天把它寫(xiě)成腳本明天給腳本加參數(shù)和錯(cuò)誤處理后天再試著用函數(shù)重構(gòu)一遍。不用特意去找復(fù)雜案例你日常的重復(fù)勞動(dòng)就是最好的練習(xí)題。一次把一個(gè)小的需求做扎實(shí)腳本能力就是這么積累起來(lái)的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲美欧999| 变态乱伦伪娘灌肠一区二区| 超碰97久久观看| 亚洲熟女中文字幕在线| 久综合国内精品自在自线| 激情小说激情视频| 人妻色情天天操| 打av高清| 黑丝少妇在线观看| 毛片电影一区二区三区| 亚洲啪啪性视频| 国产在线能看的你懂的| 日本幼女18+| 91亚洲狠狠色| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 欧美黄业| 99re这里只有| 欧美热图99| 日韩精品第3页| 三级片大波波| 亚洲av总站| 日本在线一二 | 加勒比久久av| 亚洲AV色图| 色在线69堂| 日韩欧美资源| 欧美亚洲涩涩| 26uuu性物| 日韩无码a片| 国产亚洲欧美每日在线| 国产主播福利| 精品人妻一区二区视频| 一本精品日本在线视频精品| A片大香蕉在线| 国产主播福利| 亚洲黄色视频在线观看视频| 激情小说日韩无码| 欧美日韩黄片精品在线| 国产亚洲美日韩Aⅴ中文字幕无码成人| 成人毛片免费| 91碰超| 亚洲欧洲日韩天堂av| 色y情视频免费看| 国产精品毛片?v一区二区三区 | 91爱看| 天美传媒在线一区| yazhououmeizongya| 欧美激情内射| 国产久久久久久| 亚洲97| 亚洲?V无码专区在线电影| 亚洲97成人在线观看| 综合另类| 日逼逼免费看| 欧美亚洲综合色| 67194无码不卡| 狠狠操一区二区| 蜜桃色院一区久久 | 亚洲人成网站7777| 国产 日韩 欧美高清| 久久久久人妻二区精品叶可怜| 免费自拍三级综合| 一级啊性爱在线视频| 黄片在线免费在线观看| 天堂av2019| 无码人妻丰满熟妇奶水区毛片| 另类av综合久久| 91老熟女91老女人| 92一区二区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 99热日| 久久久久女教师免费一区| 久久久久久久精| а√天堂资源官网在线资源| 激情专区综合| 91麻豆天美国产| 五月天人妻综合| 久久夜夜| 日韩成人综合网| 精品人妻夜夜草| 亚州高清AV| 亚洲?V高清一区二区三区尤物| 影音先锋乱伦资源| 丝袜夫妻自拍| av橘色网站| 成年人网站在线免费观看| 自拍偷拍 日韩无码| 午夜人妻精品综合在线| 久草电影网| 狠狠色伊人亚洲综合网站色| 五月丁香综合啪啪| 色综合久久夜色精品国产天堂| 欧美综合综合| 久草免费福利在线播放| 91五月天| 性色AV蜜色av色欲av| 午夜精品视频777| 亚洲熟妇熟在线电影视频| 新91视频.cmp| 欧美系列在线一区二区| 伊人97色天使| 狠狠爱综合网| 天天干天天干天天| 激情文学小说一区二区| 九九久久一区二区伦理| 亚洲午夜蜜臀| 日韩AC| 中 文字幕一区二区三四 五 区日 日 骚 | 国产日韩欧美亚洲精品95| 一区二区三区四区五区高清无码永久视频| 综合网亚洲在线| 久草福利在线资源站| 日本久久综合| 九九综合久久中文字幕| 久久亚洲色图中文字幕| 免费观看啪视频| 久久久内射良家| 欧 美 自 拍 偷 拍| 日产中文字幕2020| 成人五级久久| 欧美78| 大香焦A片| 麻豆黄站| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 狠综合网| 一级黄色视频网| 一区二区三区日韩欧美 | 亚洲精品男人的天堂| 无码人妻丰满熟妇区毛片| 人人操人人搞人人草| 少妇人妻精品| 国产精品交换一区二区| 羞涩视频| 中文字幕版| 日本淫乱女一区二区三区视频| 久妇网| 黑人免费福利视频| 精品性爱久久视频| 国产又色又爽又舒服的三级视频| 亚州综| 欧美日韩性感| 在线人人人人人人精品超 | 日韩女模中文造逼| 国产一区二区三区高清视频| 欧美日本视频一区| 日日橹狠狠爱欧美超碰| 国产99久久99热这里只有精品15| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 91美女视频直播| 老女人爆菊| 一级二级三级黑人无码| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 中文字幕AV乱伦| 美女黄码视频午夜| 五十路熟女人妻一区二区在线观看 | 久插综合| 久久久蜜桃一区二区三区| 久久久久久性爱免费视频| 天天综合有色网| 亚洲囯产精品女人久久久| 中文无线日韩一区| 蜜桃在线观看一区二区三区| 婷婷中文字幕| 日韩一区二区精彩视频| 伊人9| 不卡人妻少妇精品毛片一区23区视频| 免费中文在线| 无码最新| 秋霞色色影院| 中文区中文字幕免费看| 91 国产丝袜在线播放-百度| 情色五月天久久久| 亚洲va综合va国产va中文| 大香蕉www.超碰| 亚洲精品国产拍免费91在线| 精品久久九| 大香蕉97久久| 久久 国产精品 一区| 亚洲av无码国产精品字幕| 久久精品国产97欧美精品亚洲| 欧美激情片一区二区| 色婷婷影视| 97人人操人人摸| 一区二区中文| 久久久四区| 91亚洲欧美综合高清在线| 欧美se亚洲| 日韩乱码Av| 国产精品亚洲一区二区三区四区| 亚洲天堂中文字| 色欲天天综合久久久无码网中文| 91熟女在线| 九九人妻| 久久久久久少妇| 成人在线视频一区| 91骚妇| 级品肉射| 美女诱惑在线一区| 日韩9999| 夜夜嗨绯色| 日韩激情视频| 国产亚洲色婷婷99精品91| 亚州成人A√| 91蜜臀熟女| 婷婷五月综合在线| 九九AV| 去干网最新版| 亚洲激情在线| 蜜臀av一区二区三区免费观看| 抽插无码高清一区| 99久久久| 色综合91| 69精品人人人人| 黄色十八禁网站| 国产熟女一区二区丰满| 欧美精品第四五页中文字幕在线观看| 欧美精品偷拍| 欧洲亚洲天堂精品| …中文字幕亚洲乱,97人妻无码费视…| 麻豆伊人网| 97人人夜夜精品视频| 亚洲一区中文精品| 中文字幕日韩人妻视频一区二区三区| 亚洲AV操| 久99热| 人妻精品综合中文字幕在线| 久久女同性恋一二区| 五月开心久久AV官网| 欧美 亚洲 综合 制服 另类| 九九九国产| 国产熟女精品一区二区| 99久久e免费热视| 亚洲综合婷婷| 91丝袜在线观看视频在线观看| 色婷婷婷五月天激情四射| 白丝少妇一区二区| 久久久久久无码人妻中文字幕| 精品人妻一区二区三区蜜桃视频| 91爱| 亚洲欧美综合区自拍另类 | 蜜臀网址在线| 精品日韩人妻精品一二三区| 亚洲四虎熟女精品| 亚洲综合888| 亚洲在钱| 欧洲性爱无码区| 亚洲av综合色区图片亚洲| 超碰成人免费| 日本一久是| 97亚洲色图| 欧美 精品国产制服第一页| 国产理论视频在线播放| 亚码激情| 国产AV线| 日本熟女免费視颖| 1区2区3区在线视频| 激情人妻另类| 国产免费一区2区3区| 国产高清无码一区三区二区| 91蜜臀熟女| 欧美国产操逼| 岛国免费黄色网址| 亚洲欧美色图片| 少妇3P性爱自拍| 亚洲欧洲小说图片视频 | 天美91| 男女激情黄色网址| 欧美日韩黄色片一区二区三区四区人与兽做爱| 性高潮久久久| 静品嫩模一区二区| 秋霞一区二区三区四区五区六区七区| 亚洲黑人在线| 精品妇女一区二区三区| 美女性91| 色婷亚洲五月在线观看| 欧美图片校园春色| 欧美日韩国产高清在线一二三区 | 新视频sss国产| 国产人妖视频一区在线观看| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 91久久国外网| 97色婷婷| 日本天堂在线播放| 一级特黄aaa大片在线观看成人一级片在线观看 | 性爱1区| 操操操操操操| 97超碰磁| 情色AV电影| 亚洲做性| 欧美日韩中文亚洲v在线综合| 欧美香蕉视xxx| 日本大香蕉综合网红本杳社区| 国产精品视频内谢女人| 欧美熟爽综合| 亚洲欧洲激情卡通另类文学四射小说网站 | 怡红院网站在线视频| 99这里只有精品国产| 精品91摸| 秋霞免费无码视频日韩A片| 红杏大香蕉| 欧美,日韩,中文,另类| 天天干夜夜一操| 人妻人人澡人人爽人人| 免费1级a做爰片观看| 亚洲欧美日韩有码| 无码外流操逼视频| 精品人妻视频一区二区三区蜜桃视频| 国产强奸乱伦欧美| 神马久久久久久久久久久久| 欧美综合娱乐久久| 国产风韵犹存熟妇三区| 五月丁香色情| 黄片www视频免费| 97精品久久久久久久| 日本三级一区二区 在线| 欧美一级久久久久久久大片动画| 久久精品男人的天堂| 成年人一级黄色毛片大全在线观看| 久久久久久久综合,国产| 天天插天天射| 操逼无码一区| 在线天堂资源亚洲| 久久久久久性爱视频| 中文字幕日韩电影人妻| 国产av色网| 综合婷婷| 欧美成人四级在线播放| 精品人妻一区二区三区四区| 亚洲天堂另类小说男人| 日韩在线观看字幕精品| 超碰欧美| 蜜桃精品视频一区二区三区| 999狠狠综合| 国产精品久久aV| 青青草日韩免费观看高清在线| 国产精品青草综合久久| 一区二区三区亚洲| 97超碰久久| 91高潮喷水美女| 亚洲色五月| 亚洲无码太久| 欧美—性—交—色| 蜜桃久久久久久久久久久久| 日本三级黄页| 亚洲精品乱码久久久久久蜜桃麻豆| 好爽视频在线观看视频| 日韩中文9| 久久综合日韩亚洲欧美| 中文字幕成人| 免费A V在线播放| 精品人妻av区天天看片| 亚洲九九视频在线观看| 丝袜美腿校园春色| 国产久久一区二区午夜| 99精品成人免费看| 日本免费专区| 国产精品视频91久久| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 丰满搜索结果 -第18页- 久久高清无码 | 国产激情av女片自拍| 国产无码成人无码| 97碰碰色| 男女一级A片大黄,一进一出| 久操网视频| 26UUU欧美日本| 欧美色蜜桃97| 黑白配性爱AV成| 美日韩一二三区| 9久久9综合| 91操人| 欧美成人一区二区三区在线播放| 国产51色综合久久免费| 色欲无码人妻日韩欧美精品| 无码不卡八戒| 国产一级特黄大片处女| 强奸乱伦亚洲第一页| 老熟女乱伦一区| 99精品国产户外露出| 久热伊人| 亚州综合网| 中国特猛少妇色xxx| 欧美宗合网| 97操b| 国产97亚洲| 女人综合网| 久久精品店| 欧美狠狠| 国产精品免费1区2区视频| 欧洲在线性爱视频| 国产一级特黄大片处女| 男人高清无码一区二区| 国产av又色又爽又黄| 亚洲天堂AV在线播放| 乳欲人妻办公室奶水| 精品人妻av在线播放| 丰满人妻无码一区二区三区| 国产小视频91| 天天做天天爽| 久久亚州高清| 亚洲少妇自拍中文字幕懂色| 91岛国动作片| 熟女乱3伦999| 性色av网站| 欧美黄色片AAAAA| 国产这里只有精品| 天堂资源欧美| 国外91| 天天肏夜夜肏| 国产午夜精品理论片a大结局| 亚洲欧美日韩制服另类| 99久久e免费热视| 亚洲色综合| 欧美大香蕉卡久久| 欧美日韩天堂| 亚洲一区二区AV| 国产狂喷潮在线精品| 国产精品久久久久无码A√| 中日韩久久久| 国产精品情侣啪啪| 激情黄色五月天| 91日产桃蜜| 日本人妻中文字幕精品| 国产67194| 后入内射蜜桃臀| 99精品丰满人妻无码| 免费试看60秒| 69精品久久久久中文字幕| 国产欧美伊人| 中文字幕免费在线观看| 十八禁的黄污污免费网站| 无码9区| 久噜噜| 97精品免费| 亚洲最新a在线观看| 91九久| 欧美在线综合| 精品人妻中文字幕4399| 欧美午夜精品久久久久久超碰| 欧美大香蕉97| 一本久道久久综合狠狠爱一密臀精| 日本性爱欧美性爱| 97色论| 高清无码人妻久久久一区二区三区aⅴ| 欧美激情视频在线一区| 综合久草| 长长久久免费视频| 香蕉国产97| 欧美日韩国产三级黄色| 欧美 传媒 麻豆 日韩 偷拍| 热热色91| 色婷婷综合网| 91欧美www| 91精品啪在线观看国产城中村| 婷婷激情一区二区三区俺也去| 国产91 丝袜在线播放 | 很很很很操| 欧美日韩国产成人高清| 国产欧美日韩在线观看麻豆传媒公司 | 熟女91网站| 免费看久久久性性| 黄色交缠性感爆操91国产精品免费一区二区三区 | 欧美人妻久久精品二区三区 | 国产成人综合在线播放| av亚洲天堂资源网站| 免费AV中文网在线观看| 爆乳免费黄网站| 91熟女丨老女人| 亚洲色欲天天人妻无码系列专区| 尤物视频偷拍免费| 偷拍自拍在线视频观看| 蜜臀99久久精品久久久久久| a在线观看| 伊人国产AV| 综合久| 欧美97免费| 成片免费播放| 91伊人| 嗯嗯啊啊用力视频免费| 岛国福利在线精品播放| 嗯,啊。舔我逼| 欧美一区二区三区蜜桃| 99久久精品国产高潮| 超碰免费欧美7| 久久久久久久国产a∨| 人人九九精| 色播五月婷婷| 69国产对白刺激| 97久久精品国产| 午夜啪啪片| 青青草导航在线视频| 丁香五月自拍| 黄色免费一级在线毛片| 精品国产久久乱码| 丁香六月婷婷久久综合| 成人性爱免费播放| 久久久神马影院| 亚洲五月丁香花狠狠干一区二区三区 | 日夜精品| 国产精品。| 日逼国产| 中日韩免费看男女操逼大全| 久久精品国产久精国产| 五月天激情小说| 免费看黄片现成| 操死我了啊啊啊| 蜜桃久久综合视频| 精品人妻一区| 久操精品| www久久精品| 日本人妻一区二区| 国内毛片无码一级毛片| 日本黄色精品专区网站| 校园春色美腿丝袜 | 又粗又长又大国产不卡| 九七人妻在线| 超碰激情808| 亚洲福利中文字幕在线| 国产91亚洲精品一区二区三区| 狠狠爱AV| 久久最新视频免费观看| 国产成人综合网| 亚洲欧美一区二区不卡视频播放 | 97日韩欧美亚洲| 96免费视频在线| 婷婷九月| 久久男女激情视频网站| 久久黄色视频一区二区三区 | 婷色五月| 国产强奸超碰AV| 丰满人妻一区二区三区性色| 日韩兔费看黄片| 中文字幕一二三av| 2017超碰| 亚洲第91页| 91AV老熟女视频| 丁香五月天社区| a天堂视频| 蜜乳AV.COM| 精品国产一区探花在线观看| 60秒不遮不挡| 加勒比99999| 中日韩久久久免费看| 久久大精品乱码视频人妻熟女| 日韩精品三区四区| 手机av天堂久久久久| 99ri视频| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 蜜桃成人1区2区3区| 色噜噜婷婷| 日韩一级欧美一级在线观看| 免费中文在线| 岛园激情| 人人操人人狠狠操| 国产热RE99久久6国产精品首| 黄页视频网站野外| 国产福利影视| 国产亚洲国产超碰| 亚洲超碰在线| 五月丁香综合网| 五月天激情网图片| 天美传媒av 在线| 日韩精品区二区三区不卡| 中文字幕在线观看丝袜| 蜜臀久久99精品久久久久久久久| 天天91~综合入口| 欧美日韩99精品麻豆传媒| 丝袜AV一二三区| ,国产乱人伦精品一区二区三区| 亚洲天天艹| 人人手机欧洲亚洲国产人妻| 午夜呻吟欧美| 超碰99热中文字幕| 日本免费一区二区不卡| 欧美草草高清日韩视频| 大香蕉综合网| 国产精品亚洲色婷婷久久久| 国产Aα| 91精品伊人久久久大香线蕉91| 亚洲国产一区二区三区四区国产| 中文字幕在线观看丝袜| 国产精品经典一卡久久久| 中国黑人三级片网站上区| 久久久久久久久久精| 久超碰这里只有精品| 日本媚薬中文字幕在线| 成人精品久久久午夜福利| 综合免费无码中文| 久久五月份| 精品视频97| 日本国产二线女色| 欧美精品三区| 日美免费黄片| 精精夜夜| 亚洲激情深爱文学小说网站| 亚洲中文字幕在现观看| 亚洲欧洲精品视频发布| 婷婷香蕉欧美在线一区二区三区| 91日产欧美| 色区97| 多毛小伙内射老太婆| 伊人激情| 国产热av| 黄色香蕉视频网站一区| 9色在线| 久久久久久久久久黄色网| 91热热色| 国产精品久久久久久久毛片1| 欧美亚洲综合色| 色五月激情AV在线| 92性色国产午夜福利在线661| 麻豆啪啪啪视频| 亚洲精品欧洲精品| 97超碰日韩| 色牛牛AV| 国产情色第一第二页在线观看| 欧美激情综合| 97人妻碰碰中文无码久热丝袜| 好看的久久不射无码影视影院| 久久久久久久唑| 探花一区在线| 亚洲欧美日韩国产丝袜自拍中文| 久久久性| 夜夜爽77777| 夜夜嗨一区| 91碰超| 97精品视频免费| 天天射夜夜操| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 精品国产无码中文| 久热伊人99re| 2017天天插| 午夜精品视频777| 2003天天干夜夜操| 18禁的网站在线| 亚洲视频二区 | 免費人妻夜夜爽天天爽爽一区| 久久精品国产亚洲av水密被窝| 丰满人妻一区二区三区大胸懂色| 97精品国产手机| 综合伊人网12色| 欧美亚洲激情小说| 精品视频在线观看精品| 玖玖97综合| 欧美狠狠| 亚洲日韩av一区二区三区百合| 大香蕉综合网| 亚洲欧洲小说图片视频| 欧美牲| 蜜桃臀 后入 一区 二区 三区 在线| 国产97亚洲| 七久久久| 污色区网站| 蜜臀AV成人精品蜜臀AV久久| 大屁股人妻女教师撅着屁股| 青青操在线亚洲视频观看欧美在线| 大二网站亚洲| 婷婷五月天无码 | 国产欧美第五页| 日韩视频中文字幕| 欧美国产视频| 激情国产乱伦Av| 亚欧美色图| 久久免费精彩视频| 国产精品九九九| 欧美日本久久精品一区 | 色眯眯av| 狠狠狠狠狠狠| 强被迫伦姧在线观看无码网站| 欧洲乱码视频| 黑人黄片在线免费观看| 欧美亚洲图片| 亚洲在高跟鞋自慰久久在色线| 色综合av男人天堂| 九九热精品视频六| 夫妻四区五区六区| 大香网站| 超碰91在线| 91天美传媒在线观看| 亚洲精品美女久久久久久久久| 五十路一区无码| 欧美v亚洲v综合v国产v妖精| 欧美熟女妇同| 国产精品国产拍高清AV| 永久电影三级在线观看| 狠狠躁日日躁夜夜躁A| 狠狠干综合| 国产日韩区| 肥臀熟女一区二区三区视频| 中文字幕日韩精品一区二区三区| 久久男女激情视频网站| 波多野结衣之双飞调教在线播放 | 亚洲一本大道中文字幕无码在线| 欧美日韩资源| 大香蕉青青9| 97九色人妻| 日本Xx性爱| 亚洲天堂久久久久久粉红视频| 国产1727欧美| 狠狠躁AV| 人人操人人狠狠操| 在线无码视频| 夜夜嗨视频| 91网站18+| 麻豆影音天美视频| 99国产人成精品| 女人 A一级| 中文字幕第9页萱萱影音先锋| 一本色道久久综合狠狠操| 欧美日韩人人早| 青青草中文-久久青草精品一区二区三| 九九精品99| 天天日天天操天天射河南省| 视频二区美腿制服人妻欧美| 日韩97视频| 五月天久久婷婷亚洲| 熟女人妻av在线资源,黄色的资源| 亚洲成?V人片在线观看福利| 综合伊人激情| 国产高清自拍视频| 韩国三级色呦呦| 床戏久久久av一区二区麻豆| 丝袜狠狠草尤物 91| 久久精品72| 不卡人妻少妇精品毛片一区23区视频| 色色色999| 男人的天堂一区三区| 韩日性爱av| WWW啪啪的com| 91精品亚洲内射孕妇| 亚洲天天综合| 97精品视频| 60秒不遮不挡| www亚洲欧美| 密臀在线一区尤物| 欧美东京热青青草| 青草一区二区| 欧美色图电影| 2017天天操| 久久精品一区二区三区不卡| 95人妻爽爽人人做人人澡| 操99| 日韩精品一二三四| 亚洲中文制服诱惑| 蜜桃臀 后入 一区 二区 三区 在线| 久都青青视频| 91色噜噜狠狠| 妇人噜噜| 91网站在线播放| 美女十八禁| 久久熟女久| 国产精品无码论坛| 一级久久性爱视频| 无码抄逼网| 91九色精品熟女内射| 乱老女人一区二区视频| 欧美精品999| 九九热精品| 欧美|91色综合| 超碰 97国产熟女| 欧美亚洲国产自久久| 精品一久久久| 超碰久久精品| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 天天射夜夜| 青青草玖玖爱| 中文字幕黄色一起草| 三久久久四久久久久| 欧美真人抽搐一进一出gif| 91精品微拍福利| 免费看欧美美女黄色大片| 人妻熟女一区在| 五月天伊人| 亚洲自拍青操视频| 97超碰超碰| 亚洲色图尤物视频| 成人短视频在线观看| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 色av中文字| 国产免费久久精品99re韩国| 青青久草| 亚洲国产精品99久久久| 丁香六月婷婷综合| 青青草精品| 综合亚州欧美| 一级特黄aaa大片在线观看成人一级片在线观看 | 五月婷婷激情网| 性生活无遮挡纯毛片在线看| 国产精品97视频| 国产日韩欧美中文在线播放| 中文子幕一二三| 精品免费囯产一区二区三区| 密臀AV在线| 久区视频| AV天堂男人的天堂| 啊啊啊啊,啊啊好多水| 天堂v无码免费视频| 大伊香蕉在线视频免费| 久久综合久久综合人久久夜精品| 九九九九免费视频| 岛国黄片网站| 久久香蕉国产传媒一区剧情天美| 高清不卡 中文 人妻| 日韩精品资源专区二区| 色色色综合网| 亚洲亚洲亚洲天堂天堂| 7777奇米影视久久| 中文字幕国产精品1区| 久久精品成人| 久干9操| 丝袜性亚洲| 骚女天天综合网| 伊人色综合网电影| 天天日美女的B| 自怕偷自怕亚洲精品| 清清一区二区三区四区不卡视频| 美女黄页网站| 第一高清av中文字幕| 东京热大香焦| 日韩国产在线观看av| 青青操在线亚洲视频观看欧美在线| 精品午夜福利| 日本三级韩国三级99| 欧美视频一区二区三区| 欧美极度丰满熟妇hd| 久久熟女久| 中日亚韩免费视频| 亚洲自拍一区夜夜操| 国内精品久久人妻性色av| 亚洲天堂另类小说男人| 欧美性爽xyxOOOO| 午夜精品99久久久久传媒| 久久激情婷婷| 婷婷色一区| 久热一区二区| 有码免费观看| A级片日韩欧美国产欧美视频精选观看| 丝袜美腿诱惑亚洲欧美视频在线观看 | 亚洲性少妇| 91精品国产日韩欧美综合| 六月丁操逼| 大香蕉黄色一级片免费看| 日韩9999| 日韩操逼HD| 国产第11页| 围产精品一区二区三区视频播放| 精品视频久久区| 伦伦成年午夜免费视频| 色眯眯av| 美女被艹尤物视频| 日本在线伊人啪啪| 久久久久精| 激情天天视频| 久久伦理视频久久大香蕉视频| 亚洲一区二区久久久久| 一区超碰一区| 欧美色五月| 91狠狠| 丝袜美腿校园春色| 国产高清成人传媒影视| 97网色| 美女97超碰| 国产久久av| 欧日韩不卡视.频| 亚洲一区二区在线观看91| 欧美色997| 久久精品国产亚洲AV高级北京| 超碰9 7女人| 韩国久久97| 无码人妻精品一区二区中文| 欧美同性恋 的搜索结果 - 91n| 欧美色五月| 大香蕉乱级| 肉丝中文无码高清| 97 亚洲 日韩 欧美 在线| 欧美日韩国产三级黄色| 久草看看看| 日本大香蕉| 看一级黄色视频| 日本羞羞的视频在线播放| 天美传媒av在线| 久热免费视频| 黄色人人| 人人妻人人澡人人爽久久av| 欧美色图成人网一区二区 | 色欧洲97| 婷婷四五区| 人人摸人人添人人操 | 欧美日韩情色一区二区| 色色色色日本| 在线综合网| 天美欧美国产| 日本一区三级韩国| 国产a级午夜毛片| 亚洲成人精品在线一区| 青青操日韩| 午夜精品久久久久久久99热影院| 大香樵伊人网| 久久国内| 久久久久久亚洲Av无码| 91熟女在线| 四虎精品一区| 国产精品久久久久久久久久久久久久久久久久| 91精品丝袜在线观看| 一区操逼| 欧美人体性爱互联网第一页婷婷日本| 欧美日韩97在线| 亚洲成人色情五月天丁香花| 久久精品免费| 99热色精品| 国产一区二区视频在线播放| 日本成人A片网站| 亚洲影院成人| 啊v在线观看视频| 蜜臀在线看片| 九九热精彩视频| 青娱乐av在线| 天综合网| 大香蕉伊人色偷偷在线| 97色干| 国产精品青草综合久久| 无码国产精品久久久久| 精品国产人成在线| www.91逼逼.com| 色操逼网| se吧提供91精品国产91久久久久久 | 国产操逼视频在线观看| 日韩成人私密一级精品av| 91春色| 91综合中文字幕| 久久东京热久久| 日日躁夜夜躁狠狠躁超爽| av2014 日韩在线中文字幕| 青青草国产一区二区三区| 亚洲drav色图| 国产 丝袜 欧美中文 另类| av在线观看不卡网站| 日韩成人无码| 91丨国产丨白浆秘 洗澡动漫| 99999亚洲| 九九九九九精品| 中文字幕第2页| 亚洲色天| 国产精品白丝在线播放| 国产操逼视频在线观看| 国产精品一区av在线| 蜜乳Av成人片网站| 免费看A片毛毛片在线播| 色香色欲天天综合网天天来吧 | 大屁股熟女一区二区三区| 日产成人久久| 国产一区二区精品久久久不卡蜜臀| 久区视频| 久久夜夜| 370p日韩欧美亚洲精品| 国产精品视频一区二区三区八戒| 爆操无码| 蜜桃视频精品一区二区| 一区二区三区男女操逼黄色小电影| 九九九九日本 | 亚洲色性情三级| 天天看,天天做| 91欧美| 精品久久久久瑟瑟| 欧美亚洲高清不卡| 欧美三四五区| 超碰91在线| 涩综合导航| 日韩精品永久在线观看| 中亚精品极乱| 丝袜美腿校园春色| 麻豆色99999| 亚洲欧美第一页| 少妇人妻好深太紧了vr91| 十八禁视频网站| 久久久久久久九九九九九九| 国产精品不卡一区二区三区| 国产麻豆91欧美一区二区久久婷婷国产精品| 天天色欧美| 色就色综合| 99热精品在线在线| 欧美视频激情久久久久久| www男人天堂| 八戒无码国产午夜福利| 久久久网站| 久久神马影院| 另类小说欧美激情校园春色| 青娱乐欧美激情一区二区| 色婷婷电影| 欧美少妇高潮久久91| 国产一区在线看| 国产亚洲精品农村妇女 | 亚洲图片欧美偷拍| 国产精品久久久久久久电影渣男| 九九99精品视频在线观看| 国产盗摄美女如厕大神作品在线观看| 91插B网站| 情趣丝袜无码操逼视频| av大香蕉| 久久久九精品| 一级做受视频免费是看美女| 91啪啪视频| 尤物视频网 刘玥| av网站免费线看| 天天弄天天操| 亚洲图片欧美另类综合免费视频大大香| 尤物网站91| 婷婷五月成人| 亚洲天天精品| 亚洲欧美在线观看无码| 伊人五月天青青草婷婷| 日本在线伊人啪啪| 手机看片1025| 欧美另类综合久久| 久久这里精品国产99丫e6| 婷婷激情四射| 六十路日本| 亚洲自拍青操视频| 综合免费无码中文| 欧美91在线+|+欧美| 操逼视频国产无套| 乱日视频| 精品一级毛片在线观看| 亚洲麻豆精品二区三区| 熟女熟妇一区二区三四区| 国产av波波国产精品| 日本大香蕉综合网| 久草成人影片| 97在线视频免费看| 五月天婷精品激情| 狠狠热这里都是精品| A 天堂| 久久久激情| 精品国产a∨一区天美传媒| 国产成人bd在线观看| 香蕉免费一区二区三区不读| 欧美色网络| 91亚洲色图| 欧美日韩超碰在线| 女性91网站| 91美女在线精品视频| 91激情| 啪啪91| 国产无码久久高清| 亚洲五区熟女| 国产不良强奸视频免费看| 天天看人人操屄犊摸阴| 亚洲国产精品99久久久| 日韩78m视频| 欧美日本国产日韩激情视频| 少妇熟女视频一区二区三区| 久久久夜夜嗨免费视频| 天天干夜夜鈤| 啊a一区在线| 久9re热视频这里只有精品| 九X超碰| 久操网线| 嗯嗯不要 视频| 天天综合色电影| 凹凸视频在线一区二区| 国产女同性恋视频| 国产三级多多影院2022国产AA一级毛片无码| 呦女网站| 九九这里只有精品| 秋霞Av理论一级在线| 性生活无遮挡纯毛片在线看| 每日更新AV| 人人妻人人澡人人爽久久av| 操我啊啊啊啊啊| 啪啪AV导航| 在线天堂资源亚洲| 欧美一区二区三区大综合| 中国女人内射6XXXXX| 亚洲 欧美综合| 亚洲 se图 欧美电影| 日韩丝袜二区| 婷婷视频网| 狠狠色丁香| 久操91视频| 欧美熟女丝袜| 99热9| 国产传媒午夜理伦精品| 后入福利| 欧美色青| 求求你操操我| 丁香五月久久| 天天日天天操心| 精品区国产区一区二区三区| 日韩精彩免费| 日韩欧美亚洲自拍偷拍| 中文字幕伊人| 久久天堂婷婷网| 国产高清无码一区三区二区| 中文字幕激情小说| 伊人久久亚洲中文字幕不卡| 99热综合| 国产精品一二三在线看| 国产一国产一级毛片古装| 玖玖爱伊人玖玖爱| 丝袜喷水在线| 丁香婷婷色五月| 中文字幕精品一区二区精| 亚洲欧美日韩偷拍色图| 大色网久久| 操操操操操操| 啊啊啊操一区| 无码精品蜜桃一区二区三区ww| 日韩欧美性吧婷婷乱伦大香蕉 | 久久成年片色大黄全免费网站| 日本高清熟女久久一区| 久热久一区二区三区| 丁香六月婷婷| 香蕉人人操tv| 在线岛| 国产精品白领在线观看| 肥佬影院91| 加勒比综合a∨| 日韩啪啪啪视频| 亚洲熟妇丝袜在线观看| 男人的天堂啪啪啪啪啪蜜桃不卡| 亚洲美女自拍偷拍视频| 免费观看性欧美一级| 人人人干干人人干| 91黄站| 国产精选视频| 色偷偷2020免费视频播放| 色拍偷亚洲| 好屌色综合| 亚洲大色堂| 美女的肌被草喷水视频| 800zy一区二区| 亚洲成人av色网| 五月丁香影视| 五月天激情四射| 日韩免费性爱视频在线观看| 8050午夜少妇无码| 日本一区二区不卡精品| 综合影视国产无码| 国产精品宅男免费| 综合免费无码中文| 在线综合色| 综合久久六月久久婷婷| 亚洲AV操| 国产超碰人人爽人人做| 国产1769在线| 5月婷婷6月六月丁香| www狠狠| av天堂影视中文在字幕在线中文 | 国产精品一区二区密臀| 97国产精品一区| 精品久9| 欧美中出| 美女熟妇色| 日韩美女操b| 无码国产精品久久久久| 女人爽到高潮潮喷18禁网站| 欧美在线视频99| 青青草原人妻| 亚洲第一页欧美| 国产亚洲精品美女| 色偷偷综合91久久噜噜|