久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

CLI-Anything:用命令行重構(gòu)你的終端高效工作流

CLI-Anything:用命令行重構(gòu)你的終端高效工作流 第一次看到CLI-Anything這個(gè)名字時(shí)我愣了一會(huì)兒——Anything什么東西都能用命令行搞定后來(lái)我發(fā)現(xiàn)這不是夸張而是一種相當(dāng)務(wù)實(shí)的工作哲學(xué)把那些你每天重復(fù)點(diǎn)擊、反復(fù)切換窗口的操作全部收斂成一條可復(fù)用、可記錄、可自動(dòng)化的命令。這個(gè)項(xiàng)目名字背后代表的東西其實(shí)是一套全終端化的思路不管你是開發(fā)、運(yùn)維、數(shù)據(jù)分析還是單純喜歡折騰電腦的效率控只要你能把日常任務(wù)拆成輸入-處理-輸出的原子單元就一定能從這套思路里拿走點(diǎn)什么。這篇內(nèi)容圍繞我在本地構(gòu)建一個(gè)CLI-Anything工作臺(tái)的過(guò)程展開從理念、模塊拆解、核心代碼到問(wèn)題排查全部是基于實(shí)際踩坑后的總結(jié)。如果你也想把日常工作命令化或者正在設(shè)計(jì)自己的終端工具集這篇文章能幫你少走不少?gòu)澛贰?. 內(nèi)容整體設(shè)計(jì)與思路拆解1.1 不是工具而是一種工作范式很多人第一次聽(tīng)到CLI-Anything會(huì)下意識(shí)去找那個(gè)唯一的軟件結(jié)果往往是搜到一個(gè)倉(cāng)庫(kù)、一堆腳本或者一篇文檔然后更迷惑了。我的理解是CLI-Anything并不是某個(gè)固定工具的代稱而是一類方法論的總和把任意可被計(jì)算機(jī)完成的任務(wù)全部抽象成命令行接口。你不需要一個(gè)統(tǒng)一的GUI來(lái)承載所有功能你需要的是一個(gè)入口、一套規(guī)則和一批實(shí)現(xiàn)特定動(dòng)作的小程序。這套范式解決的核心問(wèn)題有三個(gè)。第一是上下文切換成本人類從編輯器切到瀏覽器再切到終端每次切換注意力損失大約在十幾秒到幾分鐘而終端里通過(guò)管道和別名可以完成百分之八十的跨應(yīng)用操作注意力始終在同一個(gè)地方。第二是操作可記錄在圖形界面里點(diǎn)的每一步幾乎無(wú)法沉淀但命令行天然是文本天然可歸檔、可回溯、可轉(zhuǎn)述給同事。第三是組合能力單個(gè)CLI工具往往只做一件事但通過(guò)管道、腳本和調(diào)度器組合起來(lái)就可以完成極其復(fù)雜的業(yè)務(wù)流程。我見(jiàn)過(guò)很多團(tuán)隊(duì)把CLI化誤解為把所有功能塞進(jìn)同一個(gè)命令。結(jié)果就是一條命令需要二十個(gè)參數(shù)最后一個(gè)參數(shù)錯(cuò)了就全盤崩潰。真正合理的做法是讓每一個(gè)命令足夠單一、足夠聚焦再通過(guò)統(tǒng)一入口把它們組織起來(lái)。這也是CLI-Anything這類設(shè)計(jì)給我最大的啟發(fā)優(yōu)先考慮命令之間的協(xié)作而不是單條命令的萬(wàn)能程度。1.2 為什么選擇全鏈路終端化對(duì)于一個(gè)日常重度使用電腦的人來(lái)說(shuō)全鏈路終端化意味著什么我用一個(gè)對(duì)比場(chǎng)景說(shuō)明。以前我處理一批圖片先打開資源管理器篩選出需要壓縮的文件拖進(jìn)某個(gè)壓縮工具再打開FTP工具上傳最后打開瀏覽器進(jìn)后臺(tái)改配置。整個(gè)流程至少涉及四五個(gè)應(yīng)用窗口任何一步做錯(cuò)都要來(lái)回切換。現(xiàn)在我用CLI-Anything的方式一條push_images --target articles --compress 80命令內(nèi)部依次執(zhí)行篩選、壓縮、上傳和配置更新所有過(guò)程輸出到同一個(gè)終端失敗時(shí)退出碼非零并打印具體錯(cuò)在哪一步。為什么我最終選擇這種方案而不是繼續(xù)用圖形工具最重要的原因是可自動(dòng)化。圖形界面的一切操作依賴人的實(shí)時(shí)參與一旦涉及定時(shí)任務(wù)、批量處理、跨設(shè)備執(zhí)行GUI就束手無(wú)策。而命令行的每一段邏輯都可以被腳本再次調(diào)用可以被調(diào)度器定時(shí)觸發(fā)也可以被遠(yuǎn)程執(zhí)行。第二個(gè)原因是環(huán)境一致性終端命令在不同機(jī)器上只要能裝齊依賴行為基本一致不會(huì)出現(xiàn)我本地能用換臺(tái)機(jī)器就沒(méi)按鈕的尷尬。第三個(gè)原因是心智負(fù)擔(dān)降低命令比圖標(biāo)更精確backup --full --dest /mnt/disk2這個(gè)動(dòng)作任何人讀一遍就知道它要干什么而圖形界面的按鈕位置和層級(jí)關(guān)系每次都要重新找。當(dāng)然不是所有人都適合這套思路。如果你只用電腦做輕度文檔處理完全沒(méi)必要搭命令行工作臺(tái)如果你團(tuán)隊(duì)里的大多數(shù)人沒(méi)有終端基礎(chǔ)強(qiáng)推CLI化的維護(hù)成本可能高于收益。我的經(jīng)驗(yàn)是先在個(gè)人工作流里小范圍驗(yàn)證把最痛、最重復(fù)的幾個(gè)操作命令化等收益明顯了再逐步推廣到團(tuán)隊(duì)不要一步跨太大。2. 核心功能模塊與命令體系設(shè)計(jì)2.1 功能模塊拆解從日常任務(wù)清單出發(fā)設(shè)計(jì)CLI-Anything的第一步不是寫代碼而是梳理你日常到底在電腦上反復(fù)做什么。我自己列過(guò)一個(gè)清單最終歸成以下幾大模塊任務(wù)管理記錄待辦事項(xiàng)、查看任務(wù)列表、設(shè)置截止日、標(biāo)記完成。文件處理批量重命名、格式轉(zhuǎn)換、壓縮解壓、目錄整理。文本與筆記快速記錄想法、搜索關(guān)鍵字、管理筆記文件。網(wǎng)絡(luò)請(qǐng)求HTTP接口調(diào)試、API信息聚合、上傳下載。系統(tǒng)操作磁盤清理、進(jìn)程查看、定時(shí)任務(wù)管理、系統(tǒng)信息查詢。消息通知把任務(wù)執(zhí)行結(jié)果推送到通知服務(wù)或?qū)懭胱约旱南㈥?duì)列。這些模塊有一個(gè)共同特征高頻、重復(fù)、規(guī)則明確。凡是符合這三個(gè)特征的操作都值得命令化。反過(guò)來(lái)說(shuō)那些需要大量人工判斷、視覺(jué)參與的操作比如精修一張圖片、設(shè)計(jì)一份PPT暫時(shí)就不要強(qiáng)行CLI化效率和體驗(yàn)都跟不上。模塊拆完后我建議給每個(gè)模塊分配一個(gè)獨(dú)立的子命令前綴。例如任務(wù)管理都用task開頭文件處理都用file開頭。這樣不僅讓命令表有規(guī)律、好記憶還方便后續(xù)補(bǔ)全腳本和幫助文檔的自動(dòng)生成。CLI-Anything里的Anything就體現(xiàn)在這里模塊列表永遠(yuǎn)不是封閉的你隨時(shí)可以往里加新的子命令但規(guī)則始終統(tǒng)一。2.2 命令命名與參數(shù)設(shè)計(jì)的三個(gè)原則命令寫得好不好用一半靠執(zhí)行邏輯一半靠命令本身的設(shè)計(jì)。我踩過(guò)不少坑之后總結(jié)出三個(gè)原則。第一個(gè)原則是**動(dòng)詞開頭對(duì)象隨后**。task add、file compress、note search都比add task、compress file、search note更符合終端用戶直覺(jué)——先告訴程序你要做什么動(dòng)作再告訴它操作對(duì)象是什么。這個(gè)順序也為程序解析命令提供了更好的可預(yù)期性因?yàn)榈谝欢斡肋h(yuǎn)是動(dòng)作第二段永遠(yuǎn)是對(duì)象不太會(huì)出現(xiàn)歧義。第二個(gè)原則是**全局參數(shù)統(tǒng)一局部參數(shù)收斂**。全局參數(shù)包括--config、--verbose、--quiet這類對(duì)任何子命令都生效的開關(guān)應(yīng)該由頂層解析器統(tǒng)一處理不讓每個(gè)子命令各自實(shí)現(xiàn)一套。局部參數(shù)則是某個(gè)具體操作獨(dú)有的比如file compress里的--level 9只在當(dāng)前子命令下有效。把兩類參數(shù)混在一起最容易導(dǎo)致這條命令在這個(gè)模塊能用--verbose換到那個(gè)模塊怎么又報(bào)錯(cuò)的混亂。第三個(gè)原則是**短選項(xiàng)只在高頻場(chǎng)景使用**。-v、-q這類短選項(xiàng)確實(shí)敲起來(lái)快但濫用之后會(huì)變得毫無(wú)記憶點(diǎn)。我只給使用頻率最高、最不容易與其他含義沖突的參數(shù)設(shè)置短選項(xiàng)其余一律用長(zhǎng)選項(xiàng)。這樣做的直接收益是即便幾周沒(méi)看幫助文檔也能靠長(zhǎng)選項(xiàng)的名字推測(cè)它的作用不需要頻繁--help。2.3 輸出與退出碼規(guī)范讓機(jī)器和人同時(shí)可讀CLI設(shè)計(jì)里最容易忽略的其實(shí)是輸出的規(guī)范性。一個(gè)命令如果只在人類懶散地看一眼時(shí)輸出正常卻沒(méi)法被腳本穩(wěn)定解析那就失去了可組合的意義。我在CLI-Anything的結(jié)構(gòu)里引入了三層輸出約定。第一層是標(biāo)準(zhǔn)輸出只放機(jī)器可解析的內(nèi)容。默認(rèn)情況下命令運(yùn)行成功后的核心數(shù)據(jù)任務(wù)ID、文件路徑、上傳狀態(tài)等以簡(jiǎn)單的鍵值對(duì)或JSON數(shù)組輸出不摻入任何裝飾性文字。第二層是人類友好信息全部走標(biāo)準(zhǔn)錯(cuò)誤輸出stderr前綴加上級(jí)別標(biāo)識(shí)如[INFO]、[WARN]、[ERROR]。這樣當(dāng)命令被管道接入下一個(gè)工具時(shí)不會(huì)因?yàn)槎嘤嗟倪^(guò)程提示污染數(shù)據(jù)流。第三層是退出碼嚴(yán)格遵循約定0代表成功非0代表失敗并且不同的非0值對(duì)應(yīng)不同的失敗類型比如1參數(shù)錯(cuò)誤、2執(zhí)行失敗、3依賴缺失。有了這層約定調(diào)度器或CI系統(tǒng)根本不需要解析日文字只看退出碼就能決定下一步動(dòng)作。為了把這套規(guī)范落地我寫了一個(gè)很小的輸出輔助模塊。它暴露ok()、fail()、log()三個(gè)方法分別負(fù)責(zé)輸出結(jié)果對(duì)象、輸出錯(cuò)誤并退出、輸出分級(jí)日志。所有子命令統(tǒng)一調(diào)用這三個(gè)方法從源頭上保證輸出風(fēng)格一致而不是靠每個(gè)開發(fā)者自己記得規(guī)范。3. 實(shí)操過(guò)程從零搭建一個(gè)CLI-Anything工作臺(tái)3.1 環(huán)境準(zhǔn)備與項(xiàng)目骨架我選擇用Python來(lái)實(shí)現(xiàn)這套CLI-Anything工作臺(tái)理由是Python標(biāo)準(zhǔn)庫(kù)足夠豐富、第三方生態(tài)齊全、單文件腳本即可運(yùn)行非常適合快速迭代。如果你更喜歡Go或Node.js思路完全一樣只是語(yǔ)法層面的差別。環(huán)境準(zhǔn)備階段需要確認(rèn)三件事Python版本不低于3.9主要是為了享受較新的類型注解和語(yǔ)法糖安裝了Click庫(kù)用于命令解析PyYAML用于配置文件讀取有pipenv或uv之類的虛擬環(huán)境管理工具。我個(gè)人習(xí)慣是每個(gè)CLI項(xiàng)目一個(gè)獨(dú)立虛擬環(huán)境避免不同項(xiàng)目的依賴互相打架。項(xiàng)目骨架我建議按以下方式組織cli_anything/ ├── cli.py # 入口文件負(fù)責(zé)組裝所有子命令 ├── config.yaml # 全局配置文件 ├── modules/ │ ├── __init__.py │ ├── task.py # 任務(wù)管理模塊 │ ├── file_ops.py # 文件處理模塊 │ ├── note.py # 筆記模塊 │ └── http_ops.py # 網(wǎng)絡(luò)請(qǐng)求模塊 ├── core/ │ ├── __init__.py │ ├── output.py # 統(tǒng)一輸出與退出碼 │ └── config.py # 配置加載與校驗(yàn) └── scripts/ └── setup.sh # 安裝與符號(hào)鏈接腳本入口文件cli.py非常簡(jiǎn)單只做三件事加載配置、注冊(cè)各模塊子命令、調(diào)用Click的cli()啟動(dòng)命令循環(huán)。模塊文件各自接收頂層傳入的配置對(duì)象并實(shí)現(xiàn)自己的子命令集合。核心層不依賴任何業(yè)務(wù)模塊只提供通用的工具函數(shù)。3.2 實(shí)現(xiàn)任務(wù)管理與筆記模塊任務(wù)管理模塊是整個(gè)工作臺(tái)里最基礎(chǔ)也最好演示的一部分。這里我用Click提供的click.group來(lái)組織命令組組內(nèi)再掛add、list、done等子命令。任務(wù)數(shù)據(jù)我選擇存成一個(gè)JSON文件默認(rèn)路徑由配置文件指定比如~/.cli_anything/tasks.json。JSON的好處是不需要額外安裝數(shù)據(jù)庫(kù)讀寫也都?jí)蚝?jiǎn)單適合個(gè)人級(jí)的任務(wù)量。# modules/task.py import json import click from core.output import ok, fail TASKS_FILE ~/.cli_anything/tasks.json def load_tasks(): path expanduser(TASKS_FILE) if not path.exists(): return [] with open(path, r, encodingutf-8) as f: return json.load(f) def save_tasks(tasks): path expanduser(TASKS_FILE) path.parent.mkdir(parentsTrue, exist_okTrue) with open(path, w, encodingutf-8) as f: json.dump(tasks, f, ensure_asciiFalse, indent2) click.group() def task(): 任務(wù)管理命令組 task.command() click.argument(content) click.option(--due, defaultNone, help截止日期如 2025-03-01) def add(content, due): 新增一條待辦事項(xiàng) tasks load_tasks() tasks.append({id: len(tasks) 1, content: content, due: due, done: False}) save_tasks(tasks) ok({action: add, status: success, id: len(tasks), content: content})這段代碼里最值得留意的兩個(gè)地方一個(gè)是load_tasks()和save_tasks()被拆成獨(dú)立函數(shù)后續(xù)done子命令也復(fù)用它們不用到處重復(fù)寫文件讀寫邏輯另一個(gè)是成功時(shí)調(diào)用ok()輸出JSON結(jié)果而不是用print(添加成功)這種不可解析的文本。我在實(shí)際使用中發(fā)現(xiàn)任務(wù)模塊的add命令經(jīng)常被腳本調(diào)用如果輸出的是人類語(yǔ)言腳本想獲取新任務(wù)的ID就要做文本解析非常脆弱統(tǒng)一JSON之后就穩(wěn)定多了。筆記模塊的設(shè)計(jì)思路類似但存儲(chǔ)方式稍微不同——每條筆記是一個(gè)獨(dú)立的Markdown文件文件名由時(shí)間戳和簡(jiǎn)短標(biāo)簽組成。這樣不僅CLI自己可以管理你還能用其他任何編輯器直接打開這些文件數(shù)據(jù)的可移植性更好。筆記搜索功能用grep的思路掃描目錄下所有Markdown文件按關(guān)鍵詞過(guò)濾后列出匹配文件和上下文摘要。3.3 用三條命令搞定HTTP接口調(diào)試與信息聚合網(wǎng)絡(luò)請(qǐng)求是日常開發(fā)里絕對(duì)繞不開的模塊。市面上有專用的圖形接口調(diào)試工具但在自動(dòng)化場(chǎng)景里一個(gè)能直接組合進(jìn)腳本的CLI版本反而更順手。我在CLI-Anything里實(shí)現(xiàn)了兩條核心命令http get和http post。# modules/http_ops.py import requests import click from core.output import ok, fail click.group() def http(): HTTP 請(qǐng)求命令組 http.command() click.argument(url) click.option(--params, defaultNone, help查詢參數(shù)如 a1b2) click.option(--headers, defaultNone, help請(qǐng)求頭如 Cookiexxx) click.option(--timeout, default10, typeint, help請(qǐng)求超時(shí)秒數(shù)) def get(url, params, headers, timeout): 發(fā)起 GET 請(qǐng)求 try: query dict(item.split(, 1) for item in params.split()) if params else None hdrs dict(item.split(, 1) for item in headers.split()) if headers else None resp requests.get(url, paramsquery, headershdrs, timeouttimeout) resp.raise_for_status() ok({status: resp.status_code, url: resp.url, body: resp.text[:500]}) except requests.exceptions.RequestException as e: fail(2, f請(qǐng)求失敗: {e})這里有一個(gè)細(xì)節(jié)值得展開為什么用a1b2這種字符串來(lái)傳查詢參數(shù)而不是讓用戶直接輸入JSON對(duì)象因?yàn)榻K端里輸入JSON要處理引號(hào)嵌套極易出錯(cuò)而keyvaluekey2value2這種純文本格式雖然簡(jiǎn)樸但不需要任何轉(zhuǎn)義輸入體驗(yàn)最好。實(shí)戰(zhàn)中我還會(huì)用第三方CLI工具或標(biāo)準(zhǔn)庫(kù)里的JSON解析器去處理返回結(jié)果配合jq把接口返回壓縮成自己關(guān)心的字段。信息聚合則是把多個(gè)接口的返回拼成一份報(bào)告輸出。我的做法是先寫一個(gè)數(shù)據(jù)獲取函數(shù)依次請(qǐng)求幾個(gè)業(yè)務(wù)接口把結(jié)果組裝成列表再統(tǒng)一格式化。這樣做的好處是如果某個(gè)接口臨時(shí)不可用聚合命令不會(huì)整體失敗而是把失敗信息作為一條記錄輸出保住了其余成功數(shù)據(jù)。剛開始我圖省事一個(gè)接口異常就讓整個(gè)命令崩潰結(jié)果誤報(bào)率極高后來(lái)改成部分成功模式后穩(wěn)定了很多。3.4 文件監(jiān)控與自動(dòng)處理CLI-Anything第三個(gè)讓我覺(jué)得真正省心的模塊是文件監(jiān)控。比如我習(xí)慣把桌面當(dāng)作臨時(shí)收集箱截圖、下載的壓縮包、臨時(shí)文檔全都堆在上面時(shí)間久了就亂成一團(tuán)。用CLI命令配合文件監(jiān)控模塊可以在新文件出現(xiàn)的第一時(shí)間自動(dòng)歸檔圖片進(jìn)Pictures/inbox、文檔進(jìn)Documents/inbox、壓縮包進(jìn)Downloads/packages并按日期建子目錄。我用的是watchdog庫(kù)的Observer機(jī)制核心原理其實(shí)很簡(jiǎn)單——對(duì)指定目錄開啟一個(gè)事件監(jiān)聽(tīng)循環(huán)當(dāng)文件的創(chuàng)建、修改、移動(dòng)事件發(fā)生時(shí)回調(diào)注冊(cè)好的處理器。為了避免每個(gè)事件都觸發(fā)一次完整邏輯處理器內(nèi)部加了一個(gè)小型的防抖隊(duì)列文件事件產(chǎn)生后延遲3秒執(zhí)行動(dòng)作期間如果同一個(gè)文件再次觸發(fā)事件則重置定時(shí)器從而防止批量拷貝文件時(shí)每個(gè)文件單獨(dú)跑一遍歸檔邏輯。from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import time, shutil from pathlib import Path class InboxHandler(FileSystemEventHandler): def on_created(self, event): if event.is_directory: return self._schedule_process(event.src_path) def _schedule_process(self, src_path): # 防抖處理3秒內(nèi)同一路徑不重復(fù)執(zhí)行 time.sleep(3) process_file(src_path) def process_file(src_path): src Path(src_path) if not src.exists(): return suffix src.suffix.lower() target_dir decide_target_dir(suffix) dest_dir Path(target_dir) / time.strftime(%Y-%m-%d) dest_dir.mkdir(parentsTrue, exist_okTrue) shutil.move(str(src), str(dest_dir / src.name))這里踩過(guò)一個(gè)常見(jiàn)的坑如果用shutil.move把文件從桌面移動(dòng)到別的目錄watchdog會(huì)在目標(biāo)目錄也觸發(fā)一個(gè)創(chuàng)建事件如果監(jiān)聽(tīng)范圍沒(méi)限制好就會(huì)造成歸檔后的文件再次被當(dāng)成新文件處理一遍甚至無(wú)限循環(huán)。解決辦法是只監(jiān)聽(tīng)源目錄并且在process_file里檢查文件是否還在源目錄內(nèi)或者直接排除目標(biāo)目錄的監(jiān)聽(tīng)。這類邊界問(wèn)題在圖形界面下根本不會(huì)暴露但一旦自動(dòng)化細(xì)節(jié)不到位就是連環(huán)事故。3.5 配置管理與多環(huán)境適配一套CLI工具如果不支持配置文件用起來(lái)會(huì)非常痛苦因?yàn)槊看蚊疃家v出一堆重復(fù)參數(shù)。我在項(xiàng)目里用了一個(gè)全局配置文件config.yaml里面保存了任務(wù)文件路徑、筆記目錄、監(jiān)控目標(biāo)目錄、請(qǐng)求超時(shí)時(shí)間、以及各模塊的默認(rèn)參數(shù)。核心思想是三態(tài)覆蓋默認(rèn)值兜底配置文件覆蓋默認(rèn)值命令行參數(shù)覆蓋配置文件。每一級(jí)都比上一級(jí)優(yōu)先這樣既保證了開箱即用又允許通過(guò)具體的命令參數(shù)做臨時(shí)調(diào)整而且完全不需要在代碼里寫一坨if-else來(lái)判斷參數(shù)到底在哪一層被設(shè)置了。配置加載函數(shù)我在項(xiàng)目里單獨(dú)放在core/config.py它會(huì)讀取配置文件后返回一個(gè)字典對(duì)象入口程序把這個(gè)對(duì)象傳給所有子命令。很多模塊并不真正關(guān)心配置是怎么加載的它們只需要在內(nèi)部讀取config.get(task.file_path, DEFAULT)這樣新增配置項(xiàng)時(shí)所有模塊都不需要重復(fù)修改只改默認(rèn)配置和文檔就夠了。這里提醒一句配置文件里別存明文密碼和密鑰。個(gè)人工具很容易犯這個(gè)毛病圖方便把API密鑰寫進(jìn)YAML結(jié)果一不留神就把配置文件提交到了公開倉(cāng)庫(kù)。我在CLI-Anything里用環(huán)境變量配合配置文件一起工作——敏感信息一律從環(huán)境變量讀取配置文件里只放非敏感的路徑和閾值參數(shù)。程序在啟動(dòng)時(shí)校驗(yàn)必需環(huán)境變量是否存在不齊就直接報(bào)錯(cuò)并提示缺哪些不會(huì)等到發(fā)起請(qǐng)求時(shí)才掛掉。3.6 權(quán)限與安全策略自動(dòng)化也要有邊界命令行自動(dòng)化還有一個(gè)很容易被忽略的維度權(quán)限邊界。一個(gè)CLI工具擁有多少權(quán)限應(yīng)該嚴(yán)格遵循最小化原則。我在設(shè)計(jì)文件處理模塊時(shí)加了一道保護(hù)刪除類操作一律要求二次確認(rèn)除非傳入--force移動(dòng)文件后如果不經(jīng)過(guò)確認(rèn)不允許覆蓋已存在的文件。另外凡是要在系統(tǒng)級(jí)目錄寫入的命令我都會(huì)在命令開頭打印完整的將要執(zhí)行的動(dòng)作列表讓用戶在自動(dòng)化腳本里也能看到它準(zhǔn)備做什么。還有一個(gè)很容易踩雷的場(chǎng)景是命令注入。當(dāng)你把用戶輸入拼進(jìn)shell命令字符串時(shí)一旦輸入包含;、|、$()等特殊字符就可能把一條本意簡(jiǎn)單的命令變成惡意執(zhí)行鏈。我在CLI-Anything內(nèi)部約定凡是涉及外部命令的操作一律用subprocess.run的列表形式傳遞參數(shù)絕不把用戶輸入直接拼進(jìn)shell字符串。這個(gè)習(xí)慣一開始會(huì)讓人多寫幾行代碼但它是自動(dòng)化工具能否在生產(chǎn)環(huán)境站住腳的分水嶺。4. 實(shí)戰(zhàn)案例一條命令跑完一次發(fā)布流程4.1 場(chǎng)景拆解從手工操作到命令編排光有模塊還不能體現(xiàn)CLI-Anything的價(jià)值真正厲害的是把模塊組合成一條流程級(jí)的命令。我拿自己每次發(fā)布一個(gè)內(nèi)部工具更新為例拆解一下原先的手工流程再看看命令化之后發(fā)生了什么。原先發(fā)布一次要做的動(dòng)作包括運(yùn)行測(cè)試、構(gòu)建打包、備份線上配置、上傳產(chǎn)物、記錄版本號(hào)、通知相關(guān)同事。這些動(dòng)作涉及至少四個(gè)窗口、兩三個(gè)平臺(tái)頁(yè)面操作順序基本固定但沒(méi)有任何腳本守衛(wèi)偶爾會(huì)漏掉某一步。整套流程走完沒(méi)有形成可追溯的記錄下次依然靠人腦記住流程。命令行編排的核心思路是把流程拆成可以驗(yàn)證的步驟節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)有明確的輸入、輸出和失敗處理策略。在CLI-Anything框架下我用任務(wù)模塊記錄發(fā)布待辦用文件模塊處理打包產(chǎn)物用HTTP模塊調(diào)用發(fā)布接口用筆記模塊追加版本變更記錄。最后把這些步驟封裝進(jìn)一條release命令。4.2 核心實(shí)現(xiàn)代碼編排與失敗處理以下是我在項(xiàng)目中實(shí)現(xiàn)的一條簡(jiǎn)化版發(fā)布命令邏輯# modules/release.py import subprocess import click from core.output import ok, fail click.group() def release(): 發(fā)布流程命令組 release.command() click.option(--build-dir, default./dist) click.option(--target-env, defaultstaging) def run(build_dir, target_env): 執(zhí)行完整發(fā)布流程 steps [ {name: run_tests, cmd: [pytest, -q]}, {name: build, cmd: [python, -m, build, --outdir, build_dir]}, {name: backup_config, cmd: [./scripts/backup.sh, target_env]}, {name: upload_artifact, cmd: [./scripts/upload.sh, build_dir, target_env]}, ] for step in steps: click.echo(f[INFO] 執(zhí)行步驟: {step[name]}, errTrue) result subprocess.run(step[cmd], capture_outputTrue) if result.returncode ! 0: fail(2, f步驟 {step[name]} 失敗: {result.stderr.decode()}) ok({status: release_done, env: target_env, build_dir: build_dir})這段代碼值得注意的點(diǎn)有三個(gè)。第一我用列表形式傳參給subprocess.run和前面提到的命令注入防范一致。第二每個(gè)步驟執(zhí)行前都打印步驟名執(zhí)行后檢查退出碼失敗立即停止并返回非零退出碼這樣調(diào)度系統(tǒng)可以清楚知道發(fā)布在哪個(gè)節(jié)點(diǎn)斷了。第三我沒(méi)有在代碼里處理版本號(hào)的生成邏輯而是把它提前放在build腳本里保持CLI命令層足夠薄避免把復(fù)雜的業(yè)務(wù)規(guī)則堆在入口層。實(shí)際跑下來(lái)這條命令把發(fā)布流程從十五分鐘左右壓縮到四十秒左右而且多了一個(gè)非常大的優(yōu)勢(shì)每一步都有日志失敗時(shí)能直接定位到具體步驟。以前發(fā)布出問(wèn)題靠大家回憶我剛才點(diǎn)了哪些按鈕現(xiàn)在直接看終端輸出和退出碼就能復(fù)現(xiàn)問(wèn)題排查時(shí)間縮短了一個(gè)量級(jí)。4.3 組合命令、別名與系統(tǒng)級(jí)調(diào)度CLI-Anything的最后一塊拼圖是讓它進(jìn)入系統(tǒng)級(jí)調(diào)度。我給你兩個(gè)最常用的落地方式。方式一是在~/.bashrc或~/.zshrc里配置別名。比如我會(huì)把python ~/cli_anything/cli.py縮成一個(gè)ca再加幾個(gè)高頻的快捷別名alias capython ~/cli_anything/cli.py alias cataskca task add alias cadoca task done alias calistca task list alias cameca note add alias casearchca note search這樣做的收益很快就能感受到。以前我想記錄一個(gè)想法要先打開筆記軟件、新建文檔、填標(biāo)題、寫正文現(xiàn)在就是came 下周評(píng)審材料要用紅頭模板回車完事。這些高頻操作節(jié)省的單次時(shí)間不多但一天發(fā)生幾十次累積效果相當(dāng)可觀。方式二是放在系統(tǒng)調(diào)度器里。得益于CLI工具退出碼和日志的規(guī)范性cron或系統(tǒng)啟動(dòng)任務(wù)都可以直接調(diào)度。比如我每天下午六點(diǎn)半跑一條備份命令再配合內(nèi)置的通知模塊把結(jié)果推送到自己的消息服務(wù)30 18 * * * cd /path/to/cli_anything python cli.py backup run --full --notify logs/backup.log 21這條cron的關(guān)鍵是最后的重定向標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都寫進(jìn)同一個(gè)日志文件而且命令失敗時(shí)非零退出碼會(huì)觸發(fā)cron的郵件或系統(tǒng)通知機(jī)制。我在實(shí)際使用中會(huì)有意保留完整的日志而不做清理因?yàn)槊看闻挪閱?wèn)題最有效的第一步永遠(yuǎn)是去日志里看第一條[ERROR]之前發(fā)生了什么。5. 常見(jiàn)問(wèn)題與排查實(shí)錄5.1 參數(shù)解析與子命令沖突Click框架本身對(duì)子命令的處理比較穩(wěn)妥但如果你自己手寫解析邏輯最容易出問(wèn)題的就是全局參數(shù)和子命令參數(shù)混在一起。比如cli.py --verbose task add 寫周報(bào)和cli.py task add 寫周報(bào) --verbose這兩條命令理論上都應(yīng)該是合法的但如果解析代碼寫得不嚴(yán)謹(jǐn)就會(huì)出現(xiàn)在一種寫法里成功、另一種寫法里報(bào)沒(méi)有這個(gè)參數(shù)的怪現(xiàn)象。我的排查經(jīng)驗(yàn)是無(wú)論用什么語(yǔ)言實(shí)現(xiàn)都要優(yōu)先使用成熟的命令行解析框架并在項(xiàng)目文檔里明確參數(shù)位置全局參數(shù)放在子命令之前子命令參數(shù)放在子命令之后。如果自己手寫一定要在解析前先做一次完整的參數(shù)歸類把全局參數(shù)單獨(dú)抽出來(lái)。這個(gè)坑在腳本里往往隱藏很深因?yàn)樗辉谀承﹨?shù)組合下才觸發(fā)。5.2 環(huán)境變量缺失導(dǎo)致命令靜默失敗我在開發(fā)初期遇到過(guò)一類很頭疼的問(wèn)題某些命令在本地跑得好好的換一臺(tái)機(jī)器或者由cron執(zhí)行時(shí)就突然什么都不做地退出。后來(lái)一查是代碼里讀取環(huán)境變量時(shí)用了os.getenv(SOME_KEY)當(dāng)這個(gè)變量不存在時(shí)返回None然后后續(xù)邏輯用了一個(gè)None值去拼接路徑或請(qǐng)求地址動(dòng)作全都執(zhí)行了但結(jié)果全亂套了。排查思路其實(shí)很簡(jiǎn)單在配置加載階段就做嚴(yán)格校驗(yàn)列出所有必需的環(huán)境變量缺少任何一個(gè)就直接報(bào)錯(cuò)退出。不要等到業(yè)務(wù)邏輯中用到時(shí)才被動(dòng)感知。我現(xiàn)在會(huì)在CLI-Anything啟動(dòng)時(shí)打印配置摘要包括路徑參數(shù)、超時(shí)參數(shù)、目標(biāo)環(huán)境等一眼就能看出當(dāng)前配置是不是一個(gè)已知的正確狀態(tài)。5.3 文件監(jiān)控漏報(bào)與重復(fù)觸發(fā)文件監(jiān)控模塊的實(shí)際表現(xiàn)比想象中更容易出問(wèn)題。watchdog默認(rèn)的事件粒度是文件系統(tǒng)底層事件部分編輯器在保存文件時(shí)會(huì)先寫臨時(shí)文件再原子替換可能會(huì)導(dǎo)致創(chuàng)建事件在最終文件名上只觸發(fā)一次但修改事件可能觸發(fā)多次。如果你只監(jiān)聽(tīng)on_created可能會(huì)漏掉某些由.tmp文件改名而來(lái)的目標(biāo)文件。我的方案是同時(shí)監(jiān)聽(tīng)創(chuàng)建和修改事件并在處理器內(nèi)部維護(hù)一個(gè)已經(jīng)處理過(guò)的路徑集合加上防抖延遲雙保險(xiǎn)降低重復(fù)處理的概率。漏報(bào)的問(wèn)題則需要靠驗(yàn)收測(cè)試驅(qū)動(dòng)造一批不同類型文件丟進(jìn)監(jiān)聽(tīng)目錄確認(rèn)每個(gè)文件都只被處理一次。這類問(wèn)題的難度不在修復(fù)而在于你沒(méi)有意識(shí)到它會(huì)觸發(fā)從而根本沒(méi)往那方面排查。5.4 大任務(wù)阻塞與超時(shí)控制CLI工具如果執(zhí)行一個(gè)大文件上傳或批量處理任務(wù)且代碼里沒(méi)有設(shè)置超時(shí)一旦上游網(wǎng)絡(luò)異?;蛭募w積超出預(yù)期命令可能掛在那一動(dòng)不動(dòng)。更難受的是在管道場(chǎng)景下你甚至?xí)詾槌绦蜻€在正常處理實(shí)際它已經(jīng)進(jìn)入了毫無(wú)進(jìn)展的等待。我的做法是給所有涉及外部I/O的地方顯式加超時(shí)參數(shù)并且在核心輸出函數(shù)里打印已耗時(shí)信息。比如HTTP請(qǐng)求的超時(shí)設(shè)置為10秒文件移動(dòng)操作本身很快但批量復(fù)制的總耗時(shí)超過(guò)預(yù)期時(shí)會(huì)輸出警告。代碼層面我會(huì)把所有可能長(zhǎng)時(shí)間運(yùn)行的步驟放進(jìn)獨(dú)立的執(zhí)行函數(shù)通過(guò)ThreadPoolExecutor配合as_completed來(lái)控制整體并發(fā)和單步超時(shí)。這樣即使某個(gè)環(huán)節(jié)卡死整個(gè)命令也能在超時(shí)后主動(dòng)放棄并輸出錯(cuò)誤詳情而不是無(wú)限期停等。為了方便排查我整理過(guò)一個(gè)高頻問(wèn)題速查表分享在這里現(xiàn)象可能原因排查步驟命令無(wú)任何輸出直接退出環(huán)境變量缺失、參數(shù)未匹配檢查啟動(dòng)時(shí)的配置摘要、檢查退出碼相同命令在不同機(jī)器行為不一致配置文件路徑不同、依賴版本差異對(duì)比兩邊的config.yaml和依賴鎖文件定時(shí)任務(wù)不執(zhí)行調(diào)度器環(huán)境變量不對(duì)、腳本未加可執(zhí)行權(quán)限手動(dòng)執(zhí)行一遍腳本確認(rèn)非交互式運(yùn)行正常輸出包含多余提示導(dǎo)致管道解析失敗提示文本寫入了標(biāo)準(zhǔn)輸出改用標(biāo)準(zhǔn)錯(cuò)誤輸出或改動(dòng)日志級(jí)別文件監(jiān)聽(tīng)事件漏報(bào)編輯器原子替換、只監(jiān)聽(tīng)了單一事件同時(shí)監(jiān)聽(tīng)創(chuàng)建與修改加防抖隊(duì)列日志越來(lái)越膨脹沒(méi)有做日志輪轉(zhuǎn)使用系統(tǒng)級(jí)日志輪轉(zhuǎn)或按日期拆日志文件6. 擴(kuò)展方向與生態(tài)思考6.1 插件化設(shè)計(jì)讓每個(gè)人只裝自己需要的模塊我目前實(shí)現(xiàn)的CLI-Anything工作臺(tái)是單倉(cāng)庫(kù)結(jié)構(gòu)所有模塊都放在一起。但當(dāng)一個(gè)工具的受眾變多、功能變雜之后更合理的做法是插件化核心框架只負(fù)責(zé)命令注冊(cè)、配置分發(fā)和輸出規(guī)范具體功能模塊通過(guò)固定的接口注冊(cè)進(jìn)來(lái)。插件化設(shè)計(jì)的關(guān)鍵點(diǎn)是入口協(xié)議統(tǒng)一。我在設(shè)計(jì)時(shí)預(yù)留了一個(gè)load_plugin函數(shù)約定每個(gè)插件模塊必須暴露一個(gè)register(cli_group)方法由入口程序掃描插件目錄下的所有模塊并動(dòng)態(tài)掛載。這個(gè)過(guò)程很像一個(gè)手機(jī)應(yīng)用商店——核心系統(tǒng)是主框架插件商店則是獨(dú)立模塊。用戶只要把插件文件夾放進(jìn)來(lái)再在配置文件里聲明啟用新功能就自動(dòng)出現(xiàn)在幫助列表里。這一步的意義在于打破了CLI工具是開發(fā)者一個(gè)人在自嗨的局限。一旦把注冊(cè)機(jī)制定義清楚你就可以把任務(wù)管理、筆記、健康檢查、數(shù)據(jù)拉取等模塊分享給團(tuán)隊(duì)里的其他人大家按需裝載互不干擾主倉(cāng)庫(kù)也保持精簡(jiǎn)。6.2 從純命令到交互體驗(yàn)的平滑過(guò)渡純命令行的優(yōu)勢(shì)是穩(wěn)定、可腳本化但缺點(diǎn)是新手學(xué)習(xí)門檻高。我在實(shí)際使用中發(fā)現(xiàn)讓一個(gè)平時(shí)只用鼠標(biāo)點(diǎn)按鈕的同事直接記命令短語(yǔ)幾乎是不可能的。因此我逐漸在CLI-Anything里加了幾個(gè)提升交互體驗(yàn)的能力。第一是交互式補(bǔ)全不給用戶一堆參數(shù)讓他們自己拼而是進(jìn)入一個(gè)問(wèn)答模式一個(gè)問(wèn)題一個(gè)問(wèn)題地問(wèn)每個(gè)問(wèn)題都有默認(rèn)值回車就能跳過(guò)。這個(gè)模式本質(zhì)上是把圖形表單移植到終端里底層依然是CLI核心但對(duì)新手友好得多。第二是富文本輸出在保證標(biāo)準(zhǔn)輸出機(jī)器可讀的前提下實(shí)現(xiàn)了一層人類可讀模式在這個(gè)模式下會(huì)用表格、進(jìn)度條、彩色狀態(tài)標(biāo)識(shí)來(lái)展示執(zhí)行結(jié)果適合在終端里人肉觀察。第三是動(dòng)態(tài)狀態(tài)提示對(duì)于長(zhǎng)任務(wù)用click.progressbar顯示進(jìn)度讓用戶知道程序還活著、大概會(huì)等多久。這幾種能力不是替代關(guān)系而是服務(wù)于不同的使用場(chǎng)景。腳本調(diào)用時(shí)走標(biāo)準(zhǔn)輸出靜默模式日常終端操作時(shí)走富文本模式自動(dòng)化任務(wù)只需要退出碼正常、關(guān)鍵輸出可解析其他什么都不用展示。6.3 與現(xiàn)有工具鏈的組合Makefile、just、cronCLI-Anything的最終形態(tài)不一定是獨(dú)立王國(guó)它完全可以嵌入到現(xiàn)有工具鏈里。我在工作臺(tái)里最常用的組合方式是配合Makefile或just這類任務(wù)編排工具使用。Makefile本質(zhì)上也是一個(gè)命令調(diào)度器但它多了依賴關(guān)系和文件時(shí)間戳判斷適合處理構(gòu)建類任務(wù)CLI-Anything里的業(yè)務(wù)模塊則更擅長(zhǎng)處理需要邏輯判斷和數(shù)據(jù)加工的動(dòng)作。以我的日常為例Makefile負(fù)責(zé)哪些目標(biāo)依賴哪些文件先跑哪一步后跑哪一步CLI-Anything負(fù)責(zé)具體怎么執(zhí)行每個(gè)動(dòng)作.PHONY: build test deploy build: ca release build --build-dir ./dist test: ca task add 運(yùn)行測(cè)試完畢后的檢查 --due today pytest -q deploy: ca release run --target-env production這樣的分工很清晰Makefile是流程骨架CLI是動(dòng)作實(shí)現(xiàn)cron是觸發(fā)機(jī)制。三者疊加之后整個(gè)工作臺(tái)就變得非常像一條小型生產(chǎn)線而不再是散落各處的零散腳本。做完整套CLI-Anything工作臺(tái)之后我自己最大的感悟是這個(gè)項(xiàng)目的價(jià)值不在某一條命令上而在于它逼你把工作流程想清楚了。每寫下一條命令你都需要明確它的輸入是什么、輸出是什么、失敗時(shí)該怎么辦、由誰(shuí)來(lái)觸發(fā)。這些思考在圖形界面操作里是永遠(yuǎn)不會(huì)發(fā)生的因?yàn)镚UI把流程和狀態(tài)全藏了起來(lái)。我自己的使用習(xí)慣也從剛開始的什么都想命令化調(diào)整成了現(xiàn)在的高頻重復(fù)才命令化——凡是需要大量視覺(jué)判斷的任務(wù)比如精修一張圖、做一份PPT繼續(xù)用專門的圖形工具凡是規(guī)則明確、高頻反復(fù)的操作比如備份、發(fā)布、歸檔、接口聚合全部收進(jìn)CLI-Anything。這種取舍不是妥協(xié)反而讓我既保住了效率又避開了一切皆命令行的偏執(zhí)。如果你也想搭一套自己的終端工作臺(tái)我建議不要想著一次到位先從最痛的一兩個(gè)操作開始命令化跑順了再繼續(xù)往外擴(kuò)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
少妇人妻在线| 人人看黄色视频| 精品一区二区三区蜜桃臀赵总 | 超碰国产在线| 97色碰| 欧美亚洲丝袜美女电影| 免费综合亚洲中文| 精品人妻视频入口| 91亚洲欧洲| av久日| 国产精品老熟女一区二区| 天天欧美| www.acm成人黄色毛片| 91亚洲精品青草| 啪啪资源网| 天美麻豆黄色录像| 五十路二区在线| 狠狠干狠狠色| 国产51色综合久久免费| 超清中文乱码字幕| 色色九区| 精品久久久一本一道| 强奸少妇AV导航网| 五月天综合网| 毛片电影一区二区三区| 精品亚洲国产成人av网站| 日本黄页视频在线观看| 欧亚日韩三区| 精品久久久久瑟瑟| 久久一区无码| 婷婷丁香成人| 欧美日韩香蕉| 26UUU欧美激情一区二区| 亚洲性少妇| 日韩AV电影网站| 国产精品三级视频网站| 操逼网站视频漫画国产| 一本大道不卡一二三区| 一级特级aaaa毛片免费观看| 国产又黄又爽又刺激久久久久久| 蜜乳中文字幕a在线| 涩亚洲欧洲| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 婷婷丁香五月激情啪啪| 日本一本道A级黄色毛片试看60分钟| www.久久制服糖| 伊人网高清| 日韩成人人妻网站| 2024年最新色情网站在线观看| 人妻人久久精品中文字幕| 色色色色色色色色综合| 日本久久999| 99久热精品99re6热| juliaann丝袜大战黑鬼| 少妇内射www在线观看视频| 超碰碰激情97+久| 香港成人一级视频在线青青草| 日韩在线视频1234| 国产夫妻一区二区| 亚州高清色综合| 欧美日韩人妻精品一区二区三区| 久久久久久十| 97超碰色色| 97在线免费视频| 视频一区二区免费在线| 五十路六十路素人熟女| 欧亚乱色熟女一区二区| 99这里都是精品| 久久久久成人蜜桃精品| 熟女天天干| 亚州久久9| av久日| 欧色网址| 成人小说视频在线精品欧美| 国产呦精品一区二区三区下载| 亚洲欧洲网站免费观看| 久久国色天香香蕉| 国产风韵犹存熟妇三区| 午夜精品久久久久久久久久久久久| 欧美激情 亚洲色图| 人妻少妇精品视频一区二区三区| 国产一区二区二区按摩精品啪视频| 欧美精品宗合| 蜜桃视频成a人v在线| 久久精品国产72国产精品福利| 白嫩国模丰满一二三区| av优播| 亚洲自拍欧美色综合| 日韩91网| 亚洲情色视频| 18禁的网站在线| 99这里只有精品| 国产一级久久久| 天天超级碰碰碰| 人人操人人肉久久精品| 天天日天天爽| 曰韩少妇无码| 嗯啊抽插大香蕉网页| 亚洲欧美精品91| 久久、1234| 97综合国产| 中文字幕精品一区二区精| 五月婷婷激情综合| 大香蕉伊人75| 亚洲一区二区三区欧美日韩| 色五月天AV| 97超碰精品图片| 99e久久国产精品| 欧美精品999| 天堂涩涩| 自拍偷拍亚洲熟女妇人精品| 大稥蕉免费视频这里只有精品| 日韩中文字幕av在线播放| 男人的天堂Va| 成人午夜无码视频| 我爱操| 夜夜骑夜夜操| 玖玖爱一区在线| 精品黄色电影| 婷婷在线视频| 大奶的诱惑| 92午夜免费福利视频| 91人妻视频在线| 日本一二区不卡| 91九九| 亚洲日本天堂| 国产中文字幕曰本毛片| 久久久熟女一区| 精品成人动漫一区二区| 二三四区精品| 日韩性爱免费视频在线网站| 激情终合网| 久久黄片国产一区二区| 亚洲91色| 黑丝内射一区二区三区| 一区二区视频在看| 免费看毛片操穴| 一本久久久精品| 黄片直播三级黄片两女一男| 992视频一区| 日韩人妻资源在线看| 人人操人人肉久久精品| 天天日老熟妇| 日韩啊V| 成人日韩中文字幕| 久久人人爽爽人人爽人人片αV| 污污污8888| 久久夜夜| av线电影| 天天色粽合合合合合合合| 国产传媒av天美传媒在线| 欧美天天插| 国产捆绑一区| 欧美日本天堂| 成人精品在线| 大香蕉免费3| 狠狠躁AV| 欧美性生活男人的天堂| 久久久国产精品亚洲精品| 51一区二区三区| 精品二区久久| 青青青青草av在线观看| www.色五月| 超碰免费人妻在线| 亚州高清色综合| 久久欧美性爱视频| 狠狠操狠狠操操| 九一综合精品视品av| 久久e6只有精品| 色欲Av人妻精品一区二| Julia Annxxxxx| 色婷网| 丁香婷婷五月| 青青草综合在线| 天堂精品在线| 色青青久久影视| 亚洲国产精品无石码久久| 啊啊啊好湿国产一二| 亚洲1区2区三区高清中文字幕| av日韩中文字幕| 天美传媒国产原创中文字幕亚洲欧美另类 | 在线啊v一区| 91丝袜美女视频| 日韩国产十八禁| 免费精品福利在线观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 天天综和| 99热亚洲| 激情干在线| 尤物视频视频官网| 亚洲自拍小说| 亚洲涩图欧美| 亚洲精品欧洲精品| 五月天色综合| 欧美老妇综合网| 大香蕉手机视频| 人人摸人人干| 婷婷日韩一区二区三区中文字幕在线| 国产97视频免费观看| 日韩少妇无码| 97精品免费| 欧美爱国产综合、| 97在线无精品| 乱伦熟女专区| 台湾佬大香蕉| 国语精品av| 日本精品免费一区二区三区四区| 国产天天骚| 日本色色色| 国产av又色又爽又黄| 亚洲春色一区二区三区| 天美传媒婬乱| 大香蕉78| 一区二区乱码福利| 加勒比五月天| 天天综合欧美综合| 二区熟妇韩日| 天天弄欧美| 91久久国产综合久久| 午夜大香蕉| www.色婷婷色综合| 激情综合网五月婷婷| 韩国一级做A片免费的| 日韩激情小说一区二区| 99久久婷婷丁香| 美女写真| 久热伊人| 国产av高清版| 国产传媒一区日韩| 国产人妻一区二区三区欧美毛片| 操曰本熟女| 久久国产精品熟女人妻| 中文字幕第23区| 中文字幕人乱码中文字的预防方法| 久久av网| 亚洲欧洲第二视频在线观看色图| 久久久久9999精品九九九| 欧美精品偷拍| 五月天亚洲网| 欧美综合91| 国产传媒午夜理伦精品| 国产精品久久久久亚洲av| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 日本熟妇人妻中出视频| 爱我干综合| 中文无码一二三区| 久久嫩草国产成人一区| surenchaopeng| 亚洲天堂日本| 96精品久久久久久久久久| 日韩操逼HD| 狠狠色婷婷7777久| 日韩电影天堂视频一区二区| 天天综合色图| 韩国嫰模上门援交视频| 精品人妻一区二区三区日产| 色情乱伦AV| 91大学精品激情戏| 精品成人女人久久| 亚洲影视高清第一页| 少妇色综合| 亚洲区 欧美区| 影音先锋少妇| 91综合在线| 欧美亚男人的天堂| 日韩三级av片| 久久无码成人| 啪啪视频mP4| 嗯,啊。舔我逼| 日本熟妇人妻一区二区三区| 免费日韩黄片| 3571色综合一区二区二区| 国产不卡中文字幕免费avi| 玖玖无码超碰| 亚洲中文国际强奸字幕| 歐美一級亂黃99在綫精品| 亚洲城人男人的天堂| 天天综合网亚洲综合网| 欧美精品久久久久久久丰满| 久久久久久大| 精品久久久久久久| 亚洲一二三精品久久网| 老熟女91视频| 亚洲综合色男人网| 老熟乱一区二区三区四区| 日韩性爱毛片操骚逼| 亚洲精品久| 色妇综合网| 狠狠色婷婷| 欧美草草| 992这里有精品| 校园春色美腿丝袜 | 草草网站影院白丝内射| 97欧美日韩中文| 国产不良强奸视频免费看| 夜夜一区二区| 国产成人拍国产亚洲精品| 国产精品青青草| 97天天摸天天爽| 综合色图区| 男人久久天堂| 美女啊啊啊啊pc| 91香蕉国产尤物视频| 丁香六月婷| 亚洲欧美清纯| 91色综| 欧美日韩在线小说| 好吊色一区| 免费一级精品啪啪视频| 国产AV线| 深爱激情五月天| 26uuu欧美| 欧美精品激情| 精品久久99| 亚洲春色一区二区三区| 91九色丰满高潮| 色五月大香蕉| 久久专区| 久久久久久久久久精| 欧美日韩一区二区三区四区蜜桃| 中文字幕午夜精品久久久| 久久九九网| 欧美中文综合| 99蜜月精品久久| 99热亚洲| 女人被男人桶爽视频网站| 亚洲风情综合网| 91 亚洲 欧洲| 成人免费看吃奶视频网站| 超碰午夜| 精品久久青青草| 久久久久亚洲AV无码专区少妇| 一级黄碟| 蜜臀精品1区2区| 亚洲一区二区三区中文字幕| 操一对老熟妇爽上天视频| 中美日韩毛片| 91黑人无码激情在线| 大色综合| 色综合1991| 天美传媒一二三区永久网站| 久久精品性| 国产高清亚洲日韩一区| 91老妇女| 熟妇激情| 综合久欧洲| 综合一区中亚洲国产成人综合精品 | 操美女人妻| 国产亚洲精品自在线亚洲情侣| 七月丁香婷婷| 欧美日韩不卡传媒| 亚洲情色图片区| 亚洲中文字幕97久久精品少妇| 被男人吃奶很爽的毛片| 五十路三区在线| 天天舔天天日天天射| 玖玖综合.com| 无码少妇精品一区二区60岁老人| 成人三一级一片aaa| 白丝一区| 亚州性9| 四虎免费视频| 亚欧美色图| 粉嫩AV一区夜夜嗨| 波多野结衣之双飞调教在线播放 | 少妇一区二区三区高速| 亚州熟女乱伦| 色欧美亚洲| 天天碰久久入| 久夜操| 中文字幕av一区二区三区人妻少妇| 色狠人在线99| 青青草视频爽一爽| 一区二区三区 丝袜 高跟 美腿| 久久久国产成人一区二区三区在线| 伦激情人妻另类人妻| 看日韩黄片| 肏逼视频日本| 17c嫩草51久久91嫩草| 99999国产| 久久一二三四五六七八九区| 成人久久久精品| 美日韩一二三区| 狠狠搞 亚洲91| 亚洲精品国产精品乱码不卡| 亚91亚洲网| 国产男女无套97| 99国产精品在线观看| 蜜桃传媒一区二区亚洲| 91中文精品日韩欧美在线 | 理论久久婷婷网8| 一本色道久久综合精品婷婷| 99re99| 久草免费在线视频| 亚洲自拍97| 欧美色综合| 亚洲熟女精品| 性久久| 操逼逼无码| 国产精品视频精品一二| 亚洲夜色在线| 青青草精玖玖69精品| 中文字幕78| 97 国产精品| 久啪视频| A级在线视频| 亚洲 日本 国产 综合| 巨爆乳一区二区爆乳区| 日韩免费看黄片| 色哟哟的毛片| 麻豆精品A片免费观看| 嗯嗯嗯啊啊啊干死我吧| 日韩十八禁| 人妻三级在线中文字幕| 白嫩国模丰满一二三区| 小草精彩毛片| 亚洲诱惑天堂 | 天天综合有色网| 美女AV一区二区| 在线电影亚洲色图| 蜜臀久久99精品久久久久| 日本潮催一卡操| 黄色视频特级毛片| 综合色图区| 欧美天堂超碰97| 婷婷激情丁香| 伦伦成年午夜免费视频| 免费观看欧美日韩操逼视频| 亚州日韩97| 9丨久久九九九| 日韩中文字幕人妻视频| 日韩啪啪啪啪啪| 2000亚洲男人天堂| 欧美精品97| 51一区二区三区| 熟女啪啪视频| 国产三级中文字幕粉嫩| 精品亚洲成人免费在线| 99视频内射三四| A啊啊在线观看| 亚洲资源站| 欧美视频一区二区在线| 超碰国产情侣自拍网| 高潮9999外国| 日韩人成网站在线播放| 色第一页| 91色拍| 欧美极度丰满熟妇hd| 啊啊啊不要啊啊受不了了视频在线 | 欧美日韩小说| 亚洲色图殴美色图激情乱伦| 99操| 亚洲一区二区三区春色| 97天天搞在线| 欧美综合色,www| 多乙久久久久久| 久久超碰免费的| 92久久| 97人人草| 欧美激情视频一区二区| 久9视频| 国产后入内射| 性色生活片久久毛片婬片免费放女人一级毛片| 久久国色天香香蕉| 呦呦一区| 欧美日韩人人精品| 岛国黄片网站| 91红杏| a'v在线资源| 日韩亚洲美州欧洲综三区一品在线| 久久久一二三四区| 免费看一级a性色生活片久久无| 无码久| 国产日逼视频| 精品人妻一区二区三区夜夜| 国产精品久久99日日| 夜夜操美女| 看黑人AV不卡| 伊人丁香五月婷婷| 精品人妻一区二区三区视频| 国产一进一出视频网站| 大香蕉之青青草原| 国产精品午夜高潮呻吟久久av| 超碰一区二区| 九久9精品| 十八禁黄色| 思思热在线| 亚州男人天堂| 4虎在线视频| 欧洲一级性爱视频在线观看| 偷拍新久久| 少妇超碰在线| 日本精品一级二级三级| 亚洲 另类 丝袜 自拍 动漫| 国产精品一区二区 尿失禁| 日韩中文9| 高清无码网址| 国产黄色视频久久| 91精品婷婷国产综合久久| 国模精品一区二区三区苹果色戒| 好吊色综合| 青草香蕉网| 亚洲欧美在线观看2021| 超碰欧美| 日韩中文字幕宗合在线| 久久久五月天| 成人aⅴ一区二区三区| 日韩黄色小说| 久插综合| 9999久久久久| 免费福利视频中文字幕| 2019男人的天堂| 99国产精品在线观看| 精品视频免费在线一区| 99re98| 久久久久元码视频| 99热色精品| 天天操天天干一区二区 | 综合色欧美| 伦在线97| 欧美日韩国产传媒在线精品| 99久久精品国产高潮| 97久久超碰| 爱丝福利| 91少妇香蕉久久精品| 97WW精品| 国产日韩欧美三级片| 欧美熟妇成人一区二区| 60秒不遮不挡| 欧美综色欧| 性性久久| 亚洲美女色图| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 亚洲欧美日韩制服另类| 偷偷人人精品女女久久| 日韩精彩视频| 国产亚洲精品美女| 欧洲射精91| 操少妇很爽av| 婷色五月| 国产精品亚洲免费| 思思性爱| 天天躁日日躁xxxxx| CCYY草草影院地址入口| 蜜臀久久99精品久久久| 久久丝袜| 亚洲欧美洲综合| 老司机福利社视频在线观看| 美女网站黄页| 国产免费一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美在线干| 91精品免费| 亚洲第91页| 日韩欧美被操黄免费观看| 丝袜制服字幕在线| 黄色二级片网站| 好湿好紧好爽 视频| 超碰资源亚洲97| 农村妇女一级二级三级视频| 亚洲日本成人动漫| 99这里有精品| 日韩精品熟妇| 精品无码一二三四区| 一区| 欧美亚洲国产日本在线,久久精品国产| 四季AV综合网址| 色爱欲亚洲| 精品999日本| 蜜桃丰满熟妇av无码区不卡| 欧美黑人168页欧美黑人167| 干妹子| 一区二区播放| 久久久久99999| 免费精品无码一级毛片牛牛影视 | 啊啊啊操一区| 色哟哟-国产专区| 欧美日本久久精品一区| 久啪| 欧美肥臀在线| 99中文字幕| a片自拍直播视频| 亚洲日本激情| 亚洲各类熟们中文字幕| 天天综合网站| 国模不卡一本二本三电影| 欧美色图 人妻| 人人操人人精品影片| 麻豆av一区二区| 中文字幕久久婷婷丁香五月天| 色黄污美女啪啪啪免费网站| 欧亚性爱视频免费看| 99精品在线观看| 国产农村妇女精品一| 日韩久草| 日韩精品中文字幕人妻| 午夜影美女日鸡鸡天天视频国产| 激情丁香五月| 中 文字幕一区二区三四 五 区日 日 骚| 青青草中日韩在线| 91久久久亚洲| 黄色av一区二区在线| 亚洲 中文 女同| 天天操天天日青青草超碰av| 一级性爱网| 韩国三级理论在线| 麻豆AV一区二区| 欧美日韩精品久久久久东北老熟妇| 精品日韩| 5278欧美一区二区三区| 丝袜性亚洲| 欧美亚洲中文字幕| 久综合国内精品自在自线| 日本三级中国三级99人妇网站| 超碰 另类 欧美 | 亚洲AV无码黄色强奸| 无码人妻一区二区一牛影视| 加勒比综合a∨| 久久人妻四季| 超碰97极品9| 18禁中文字幕| 精彩久久中文| 99蜜桃臀久久久欧美精品网站| 久久久蜜桃一区二区三区| 十八禁av无码免费网站APP| 91网站18禁| 亚洲国产成人精品无码专区| 亚洲国产综合久久久性感熟妇| 91美女视频电影| 日熟女| 中出91| 粉嫩久久久极品| 91亚洲色人| 麻豆黄色五月天| 啊啊啊啊啊啊在线| 日本污ww视频网站| 熟女91网| 中国一区二区亚洲人妻| 欧美 亚洲 另类 综合| 性爱综合一区二区| 啊a一区在线| 亚洲在线91| 久久乐| 久热精品在线| 久久 国产精品 一区| 日韩青久久| 九九无码视频| 色噜噜日韩精品| 国产亚洲综合欧美一区| 啊啊啊啊免费视频| 欧美婷婷| 亚洲97在线观看| 欧美 亚洲 综合 制服| 国产女人视频三四五区| 嗯啊啊啊轻点视频 | 天天爱综合网| 久久男女激情视频网站| 老鸭窝成人| 色综合婷婷| 久久久日本电影| 91久精品| 日韩av不卡在线看| 亚洲精品97中文字幕| 亚洲一本大道中文字幕无码在线| 人妻少妇久久| 五月天社区| 超碰欧美| 日韩天天本| 91男同| 亚洲激情在线一区二区| 亚洲中文sv| 国模限制级电影| 免费a级毛片av无码久久精品中文字幕| 97色欧州| 无码国产精品久久久久| 97欧美日韩综合| 91色女| 成人av影院在线观看| 伊人久久亚洲色欲综合网站 | av橘色网站| 日本欧美韩国日产片片在线看免| 日韩日本欧美在线观看| 亚洲欧美日韩电影网站一区| 人妻22p| 国产捆绑一区| 十八禁一区二区无码观看| 天堂岛av| 日韩无码黄色片| 加勒比综合在线| 蜜奶av| 亚洲最大无码中文字幕网站| 美女久久久久久久久久久| 青女在线| 超碰97欧美在线| 国产精品久久99日日| 怡红院成人视频| 亚洲 欧美 另类 日韩 人妻一区| 超碰九色| 亚欧成人综合影院| 欧美性暴力| 97视频在线视频| 天天干2019| 无码日韩网站| 久久双插| 欧美姓爱综合网| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 日韩性爱播放| 国产精品一区av在线| 天天干人人乐| 最新9久久久9免费视频| 亚洲成人贴图| 曰韩香蕉97| 大香蕉 222| 婷婷色色五月天| 综合操逼| 在线观看无码三级少妇| 99热在线观看| 在线看污网站| 97爱啪| 色天堂综合| 污到发麻的视频 国产| 超碰99在线观看| 日本性爱网址| 中文字幕一区电影在线观看| 另类图片欧美激情综合| 欧美日韩久久精品爱爱| 99超碰网| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 26uuu国产免费观看| 久久久久亚洲av综合波多野制衣| 中文字幕丰满子伦无码专区在线视频最新| 久久久久久99999国产精品| 天天日天天操VV| 中出789在线视频| 蜜臀亚洲中文| 综合干干干av久久久综合网| 欧美专区第一页| 久久久精品日本一道| 乱人伦 国语对白:视频直接看| 精品超碰国产| 静品嫩模一区二区| www.人人cao| 久久免费精品视频免一| 全球成人中文在线| 人人射人人操人人摸| JIZZJIZZ国产精品喷水| 黑人黄片在线免费观看| 国产CHASE男男GAYGA 毛多色婷婷| 男人高清无码一区二区| 久久九九视频九九视频| 爱av免费| 99视频只有精品| 国产丝袜视频| 中文字幕丝袜人妻| 欧美亚洲日韩16色| 欧洲自拍色图gif在线| 超碰到97情色| 青青草这里只有精品| 91爱啪| 操逼操2| 亚洲春色欧美激情自拍| 熟妇的味道HD中文字幕| 久久久久久久久久久久九| 97就爱干| 肥臀熟女一区二区三区视频| 少妇久久久久久久久| 91视频精品| 亚洲精品一区二区精品| 日本在线播放不卡一区| 国产刺激视频| 熟妇一区二区三区| 91精品人妻啪啪间| 欧美性爱一区二区三区| 日韩激情电影中文字幕| 岛国黄| 99热| 九九国产热| 综合少妇网| 看日韩黄片| 51一区二区三区| 丁香激情网| 婷婷丁香一区二区三区| 欧美综合色综合| 欧美91精品国产自产| 一级@啪啪视频| 亚洲操操操| 亚洲AV不卡在线观看尤物| 欧美激情一| 色欲天天综合久久久无码网中文| 综合欧美激情网| 成人 日韩欧美一区| 艳尻美人妻| 亚洲中文字幕av| 国产中文字幕在线点播| 国产精选三级在线观看| 天堂麻豆天美| 国产精品欧美在线观看| 欧美成人四级在线播放| 欧美天天拍| 97少妇人妻中文字幕久久 | 亚洲精品丝袜-不卡成人免费……| 日韩国产十八禁| 亚洲人妻日日日| 人人妻人射| 91丨国产丨白浆| 91老妇女| 免费看A片毛毛片在线播| 久久本道| 熟女91网站| 国产一区二区三区导航| 春色校园综合网| 亚洲欧美伦综合| 亚洲欧美日韩精品久| 麻豆AV短剧| 97干在线| 人妻AV在线| 骚熟女AV网| 肉嘟嘟www视频在线观看高清| 亚洲天堂性爱| 五月天亚洲色图| 大香蕉综合在线| 国产风韵犹存熟妇三区| www.91人妻.com| 97人人中文网| 超碰欧美| 射 色综合| 97这里有精品| 中文字幕一区二区三区视频播放| 色网1| 性影在线视频| www.高清无码诱惑一区.com | 色操逼网| 久久久久久中文版| 黄色片A级一区二区三区| 天无日色综合| 超碰95| 99啪| 国产91av在线播放| 国产熟妇一区二区| 午夜福利无毒不卡| 狠狠图片青青草| 日日插夜夜| 青青欧美| 7777欧美成是人在线观看| 日日干夜夜骑| 欧美性爱在线无码| 青青草一本道福利视频| 免费黄色片子| 欧美在线91| 少妇毛片久久| 亚洲天堂一区二区久久| 狠狠躁天天躁日日躁| 亚洲天堂中文字| 97天天插| 精品久久久久久亚洲| 综合97| 99热导航| 成人免费在线网站| 麻豆av一区二区| 亚洲精品97在线| 在线观看无码三级少妇| 91精品少妇搡搡搡| AV九九| 中文字幕一区二区视频在线观看| 性色高清在线| 家庭乱伦性爱av| 大香蕉99re| 在线观看十八禁| 2017人人操,人人摸| 污电影在线观看| 丁香六月激情| 黑人美精品 A片| 亚洲少妇自拍中文字幕懂色| 五月婷婷深深爱| 日韩欧美操逼xxx| 国产精品毛片| 中文啪啪视频| 国产精品成人福利在线| 91丰满| 久久爽爽精品| www.99视频| 麻豆国产视频精品观看| 哑洲在线| 欧美色图亚洲特色| 日韩不卡a级视频专区| 国产400孕妇孕交群| 91天射| 激情综合97| xxx0国产在线播放| …亚洲黄色厕厕女女在线播…| 级品肉射| 日韩在线视频1234| 91精品人妻电影| 国产色产精品在线观看 | 黄色电影观看久久9| 国产路线专区| 天天天操天天天爱| 色婷婷蜜臀av| 色久综合| 伊人黄色视频免费观看| 久久伊人最新网址视频| 密臀在线视频| 97超碰中文| 午夜天堂网| 亚洲精品男人的天堂| 操操逼操操逼操操逼逼| 看日韩黄片| 操熟女91| 97 国产精品| 91精品国久久久久久无码| 丰满人妻-区二区三区免费| 无码免费精品高清| 成人性爱AV在线免费观看| 91 欧美| 啊啊啊啊嗯嗯在线久久久| 国产精品午夜福利视频| 色天堂综合| 厕所偷拍在线| 日韩99神马视频播放片在线播放| 久久久夜夜嗨免费视频| 超碰成人最新最好看| 国产一级特黄大片处女| 亚洲色婷婷久久91| 91亚州| 激情综合网亚洲| 99精品人妻| 美女91| 亚洲综合20p| 国产免费内射视频| 欧美在线电影| 日韩本不卡视频在线观看 | 日韩人妻制服丝袜av| 无码操逼视频一下| 嫩草美女久久| 91丨九色丨国产丨人妻在线 | 色呦呦、国产精品| 国产精品久久久视频| 国产一区二区三区中文字幕| 男人的天堂亚洲| 91人妻爽爽人人做人人澡| 伊人成人中文字幕久久网| 婷婷综合激情| 黑操B| 国产乱婷婷精品二区三区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 91久久精品美女高潮喷水| 99re在线视频这里只有精品| 后入式五六区| 一区二区无码视频| 欧美高清91| 综合久久97| 日韩精品一区二区高清| 国产成年女人免费视频播放a| 国产成人午夜视频网址| 三级三级三级a级全黄三| 人人操人人叉人人插人人| 动漫爆乳3D奶水一区在线观看| 国产日本久久免费精品| 丝袜 亚洲 偷拍| 97精品国产97久久久久久户外免费| 日韩在线AB| 噜噜噜久久亚洲精品色情| 亚洲人码13| 天堂亚洲欧美| 人人搞人人插人人操| AV和黑人在线播放| 五月综合婷婷久久网站| 久久性爱视频| 刺激精品视频| 婷婷九月丁香| 97欧美超碰| 被男人添B超爽视频| 日本精品高清一二区一本到| 屌色在线97视频| 麻豆精品A片免费观看| 蜜乳av一区二区三区| 欧美色网络| 人人贴人人摸| 99在线精品观看99| 91亚州欧美| 国产丝袜高跟美女av免费观看| 亚洲欧美色图片| 淫荡少妇免费| 亚洲第一页色| 色综合久久夜色精品国产天堂| 欧美亚洲清纯| 欧美日韩大香蕉| 探花一区在线| 人人澡综合涩| 诱惑网综合| 国产精品美女在线一区| 夜夜嗨一区二区| 久久久久大香青草精品综合| 欧美在线天堂| 大香蕉久| 欧美无圣光在线| JuliaAnn丝袜熟女系列| 中国少妇XXXX做受| 曰韩欧美国产传媒麻豆第一区| 97网址97| 男女做爰猛烈动高潮A片免费应用| 亚洲精品无码少妇久久| 日本天天人人狠狠在线日美女| 色拍偷亚洲| 欧美天天综合网| 成人午夜无码视频| 欧美影音在线| 中文字幕精品免费一区二区| 日本日皮视频逼| 欧美精品偷拍| 亚洲一区日韩精品中文字幕| www黄片免费看com| 激情综合av| 精品三级在线专区| 婷婷激情综合网| 久久久久久裸体| 美女视频尤物网在线看| 中文字幕黑人大片| 麻豆天美在线| 两性综合网| 中文字幕十五区| 国产肏逼网站| 亚洲AV免费在线观看| 高清肉丝中文无码| 欧美呦呦性爱| 97天天做| 日韩一级久久毛片| 蜜臀av一区二区三区免费观看| 91精品国| 自拍大香蕉乱插| 啊啊啊啊操死我了| 熟妇xxxxx性春色| 亚洲棕合电彰| 丝袜美腿亚洲| 青娱乐亚洲热| 精品国产一区探花在线观看| 99在线免费公开视频| 国产白嫩精品久久| 国产操逼网站亚洲一级黄色| 中文啪啪视频| 久久这里只有精品9| 亚州国产精品乱| 精品人妻一区二区三区日产| 激情五月天丁香| 中国少妇啪啪视频| 亚洲男人的天堂亚洲| 97资源站国产精品| 五月综合色| 青春草莓视频在线观看网址| 色妺妺在线视频| 久热一区二区| 欧美天天谢综合网| 免费观看性欧美一级| 91电影色诱| 精品少妇人妻av久久免费| x97av| 夜间福利片1000无码| 妇女乱色二区| 婷婷久久综合| 一起草三级AV电影在线观看 | AⅤ片水多多| 久久婷婷视频| 麻豆一区二区AV天美| 国产三级多多影院2022国产AA一级毛片无码 | 91超碰在线观看| 久热91| 成人线上超碰| 日本久久综合| 韩国三级理论在线| 五十路三区在线| 天操老女人| 久久五十路熟女人妻| 天天草AV| 男人天堂2019亚洲| 999精品国产高清一区二区| 国产五码丝袜屁眼| 丝袜熟女一区二区三区| 欧美性暴力猛交| 人妻久久久久久| 韩国三级一线观看久| 九九九九97| 五月天婷婷色| 天天日天天干天天色| 天天大干大香蕉| 亚洲中文字幕妇伦久久| 中文字幕乱码人妻二区三区| 懂色av中文字幕一区二区三区天美| 国产免费一区二区在线A片视频| 久久男人天堂| 日韩精品电影| 五月天婷婷欧美三区| 韩国黄片aaaa| 亚洲精品97久久中文字幕| 资源在线观一 二| 操逼不卡中文字幕| 69一区二区三区| 婷婷美人网| 久久天天性久久伊人| 三级网色| 边做饭边操逼逼| 啊啊啊啊啊舒服| 96AV久久久| 激情色色| 欧美的性爱网站免费| 花花AV导航| 999九九九九国产动| 亚洲国产剧情少妇激情| 在线强奷到舒服的无码视频 | 亚洲美乱| 国产尹人在线视频免费| 久久精品国产亚洲妲己影视| 色97干| 香蕉av一区二区三区| 中文字幕在线观看网页| 五月婷婷影院| 91强热人妻| 嫩呦国产一区二区三区AV| 婷婷久久五月综合激情| 欧美性高潮在线| 欧美暴力猛交| 久草资源在线视频官方总站日韩丝袜美腿| 久久婷综合| 国产精品久久成人免费| 波多野42部激情无码喷潮| 亚洲色阁| 97综合激情| 大香蕉性欧美| 中文字幕久久亚州无码| 国产丰满熟夫69mpp| 在线天堂999| 中文一区二区婷婷视频| 婷婷丁香五月激情啪啪| 久久性爱大全| 色爱三区| 久久一区二区三区入口| 三级AV入口| 操B视频日韩无码| 蜜臀AV秘一区翔田千里| 自拍偷拍草一草| 91骚熟女| 国产成人在线观看网址| 久久久97| 亚拍在线| 少妇久久久免费| 在线 欧美 亚洲| 人妻美腿丝袜日韩| 爱欲AV| 日本99一区二区| 亚洲男人的天堂网| 91日日夜夜| 青娱乐 成人娱乐在线| 国产原创精品| 激情文学欧美| 一直超碰| 超碰性爱97| 麻豆国产原创AV色哟哟 | 999热这里只有精品| 欧亚日韩中文在线| 欲香欲色| 午夜a成v人电影|