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

ARTICLE DETAIL

資訊詳情

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

OpenShell實(shí)戰(zhàn):用模塊化配置統(tǒng)一跨平臺(tái)Shell環(huán)境

OpenShell實(shí)戰(zhàn):用模塊化配置統(tǒng)一跨平臺(tái)Shell環(huán)境 大約兩年前我需要同時(shí)維護(hù)一臺(tái)MacBook、一臺(tái)Ubuntu工作站和一臺(tái)公司的CentOS服務(wù)器。每次坐到終端前最先迎接我的不是工作本身而是一堆環(huán)境報(bào)錯(cuò)某個(gè)工具鏈的PATH忘了加進(jìn)去、zsh插件在Linux上行為不一致、一段用GNU sed寫(xiě)的小腳本在macOS上直接罷工。我也試過(guò)把dotfiles托管起來(lái)甚至把所有常用腳本收斂到一個(gè)自建框架里折騰一圈后發(fā)現(xiàn)真正的問(wèn)題不是“配置文件太亂”而是我缺一個(gè)能讓配置、腳本、補(bǔ)全和提示符共用同一套規(guī)則的Shell方案。后來(lái)在一個(gè)開(kāi)源倉(cāng)庫(kù)里看到了“OpenShell”這個(gè)名字起初以為又是一個(gè)換皮框架直到完整裝完并跑了半個(gè)月才確定它可以當(dāng)我的日常主力環(huán)境。這篇文章就圍繞OpenShell展開(kāi)我會(huì)講清楚它到底解決了什么問(wèn)題安裝和首次啟動(dòng)時(shí)有哪些容易忽略的細(xì)節(jié)核心機(jī)制是如何組織的以及我在這段時(shí)間里踩過(guò)的坑和完整的排查思路。無(wú)論你之前用的是bash、zsh還是fish只要受夠了“換臺(tái)機(jī)器就要重新調(diào)半天環(huán)境”這篇文章應(yīng)該能給你一些不一樣的參考。1. 為什么我在折騰了十年終端之后還是決定換掉默認(rèn)Shell1.1 原生Shell的三個(gè)“慢性病”先說(shuō)痛點(diǎn)。我在.bashrc里加了一大段和機(jī)器相關(guān)的路徑在.zshrc里又來(lái)一份在profile.d里還堆了一堆供非交互登錄使用的初始化腳本。每個(gè)文件都有各自的作用域和加載時(shí)機(jī)一旦換機(jī)器最先崩的就是作用域規(guī)則。這種配置碎片化的問(wèn)題時(shí)間越久越明顯。然后是腳本可移植性。GNU工具在macOS上的行為是殘缺的BSD工具在Linux上的表現(xiàn)又不同同一段腳本換臺(tái)機(jī)器就出問(wèn)題。很多資深開(kāi)發(fā)者都有過(guò)這種經(jīng)歷本地跑得好好的部署腳本放到服務(wù)器上就報(bào)sed: illegal option。經(jīng)驗(yàn)越多越清楚這根本不是個(gè)人技術(shù)問(wèn)題而是工具鏈本身不一致。最后是提示符與補(bǔ)全生態(tài)割裂。要用powerlevel10k配zsh要用zoxide做目錄跳轉(zhuǎn)要用fzf做模糊檢索又要用atuin管理shell歷史。每個(gè)方案都很優(yōu)秀但組合起來(lái)就變成一堆自動(dòng)化腳本互相踩腳。每次升級(jí)其中某一個(gè)工具都要重新檢查其他工具是否兼容。我相信大多數(shù)經(jīng)常和服務(wù)器打交道的人對(duì)這些痛點(diǎn)都不陌生。真正讓人想換掉默認(rèn)Shell的并不是某一項(xiàng)功能不夠強(qiáng)大而是每新增一種工具都要自己處理“它和現(xiàn)有Shell如何協(xié)作”這件事。這種重復(fù)勞動(dòng)積累到一定程度就會(huì)變成一種慢性消耗。1.2 OpenShell和“換殼類(lèi)”工具的本質(zhì)區(qū)別核心差異在于OpenShell把配置、狀態(tài)、腳本執(zhí)行都當(dāng)作一級(jí)對(duì)象來(lái)管理而不是簡(jiǎn)單地在現(xiàn)有Shell之上包一層配置框架。常見(jiàn)的oh-my-zsh、zim、starship這類(lèi)項(xiàng)目本質(zhì)上是“在現(xiàn)有Shell之上包一層配置框架”它們依然依賴(lài)Shell自身的語(yǔ)法和加載順序。OpenShell的做法不同它自帶一個(gè)名為osh的命令入口在啟動(dòng)時(shí)先加載一個(gè)低層引導(dǎo)文件然后按依賴(lài)關(guān)系加載各個(gè)模塊最后才進(jìn)入交互提示符。依賴(lài)關(guān)系用有向圖描述而不是傳統(tǒng)的“從上到下source”。這意味著你聲明了模塊A依賴(lài)模塊B加載器就會(huì)先加載B而不是靠文件名的字母序碰運(yùn)氣。對(duì)于有多臺(tái)機(jī)器、多個(gè)角色個(gè)人項(xiàng)目、工作項(xiàng)目、運(yùn)維任務(wù)的人來(lái)說(shuō)這種差異是決定性的——你可以讓每個(gè)profile只加載自己需要的模塊而不是把所有配置都堆在一起。其實(shí)最初我也擔(dān)心這種“新框架”會(huì)把我已有的zsh技能清零。實(shí)際試用后發(fā)現(xiàn)OpenShell的命令語(yǔ)法仍然是POSIX風(fēng)格基礎(chǔ)操作可以直接沿用只是在需要的時(shí)候增加了一些內(nèi)置函數(shù)比如os.setenv、os.path_join。這些函數(shù)可以跨平臺(tái)運(yùn)行模塊作者不需要在腳本里寫(xiě)一堆if [ $(uname) Darwin ]判斷。有一點(diǎn)要說(shuō)明如果你只依賴(lài)極簡(jiǎn)的默認(rèn)bash環(huán)境或者你根本不在意多臺(tái)機(jī)器之間的配置一致性那確實(shí)沒(méi)必要換。OpenShell的價(jià)值集中體現(xiàn)在“多環(huán)境、多角色、需要頻繁切換工具鏈”的場(chǎng)景里它的定位從一開(kāi)始就不是給所有人的玩具。2. 安裝與首次啟動(dòng)三步上手但有幾個(gè)細(xì)節(jié)值得先避開(kāi)2.1 快速安裝路徑與版本選擇我安裝時(shí)的路徑比較簡(jiǎn)單macOS上直接用包管理器Linux下到Release頁(yè)面下載二進(jìn)制包解壓并加入PATH。# macOS假設(shè)已經(jīng)配置好Homebrew brew install openshell # Linux / FreeBSD 等平臺(tái)從官方Release頁(yè)下載對(duì)應(yīng)平臺(tái)的壓縮包 curl -fsSL -o openshell.tar.gz release-page-url tar -xzf openshell.tar.gz sudo mv openshell /usr/local/bin/這里要提醒一句安裝時(shí)最容易踩的坑不是命令本身而是版本選擇。如果你只想要一個(gè)穩(wěn)定的日常環(huán)境建議裝最新的穩(wěn)定版不要追每日構(gòu)建版本。每日構(gòu)建版本通常帶有新的模塊API但文檔不一定跟得上出了問(wèn)題很難搜到解決方案。安裝完成之后用osh --version確認(rèn)版本接著跑一次osh doctor。這個(gè)命令會(huì)檢查三件事當(dāng)前Shell是否能被正常接管、目錄結(jié)構(gòu)是否完整、依賴(lài)的命令是否缺失。如果它提示某個(gè)命令找不到不用緊張按需安裝即可。2.2 首次啟動(dòng)時(shí)的交互邏輯模塊管理器在做什么首次執(zhí)行osh的時(shí)候它會(huì)進(jìn)入一個(gè)初始化交互流程。我遇到的主要步驟有三步。第一步是選擇默認(rèn)profile。OpenShell允許按角色拆成不同profile比如personal和work啟動(dòng)時(shí)用osh --profile work激活。首次初始化會(huì)讓用戶(hù)確認(rèn)默認(rèn)加載哪個(gè)profile。第二步是掃描已有Shell歷史。它會(huì)把bash或zsh的歷史文件讀取出來(lái)做一次去重和時(shí)間排序然后統(tǒng)一寫(xiě)入~/.openshell/history/目錄下。這個(gè)操作不會(huì)刪除原文件只做導(dǎo)入所以就算導(dǎo)入出錯(cuò)原Shell的歷史記錄也還在。第三步是探測(cè)系統(tǒng)環(huán)境。它會(huì)檢查你所在的系統(tǒng)、包管理器、常用開(kāi)發(fā)工具的位置把這些信息寫(xiě)入一個(gè)名為system.json的緩存文件。這個(gè)緩存文件非常重要后面所有的跨平臺(tái)邏輯都會(huì)引用它。這一步最好在有網(wǎng)絡(luò)連接的情況下完成因?yàn)椴糠謾z測(cè)邏輯會(huì)去查詢(xún)工具版本和更新時(shí)間。2.3 一個(gè)容易被忽略的準(zhǔn)備Shell歷史遷移如果你之前重度使用atuin這類(lèi)歷史管理工具遷移時(shí)會(huì)發(fā)現(xiàn)歷史記錄導(dǎo)出格式和OpenShell內(nèi)置的歷史導(dǎo)入器不一定完全兼容。我當(dāng)時(shí)的做法是先導(dǎo)出一個(gè)純文本格式再用osh history import --format text導(dǎo)入基本無(wú)損。但有一個(gè)細(xì)節(jié)必須提前處理遷移之前把原Shell里的HISTTIMEFORMAT這類(lèi)環(huán)境變量臨時(shí)去掉。因?yàn)橛行v史文件里帶有時(shí)間戳擴(kuò)展格式OpenShell的導(dǎo)入器默認(rèn)不識(shí)別會(huì)導(dǎo)致一批記錄被當(dāng)成亂碼丟棄。我第一遍導(dǎo)入時(shí)丟了大概幾百條歷史換成純文本導(dǎo)出后才完整。注意歷史遷移不是必須步驟。如果你原本不依賴(lài)歷史記錄檢索完全可以跳過(guò)。它最大的價(jià)值是讓高頻命令的檢索習(xí)慣延續(xù)下來(lái)。日常使用中CtrlR檢索歷史仍然是最高頻的操作之一遷移做好了體驗(yàn)?zāi)軣o(wú)縫銜接。3. 核心機(jī)制拆解OpenShell的“模塊即配置”到底是什么意思3.1 配置文件的層級(jí)結(jié)構(gòu)與加載順序OpenShell的配置文件默認(rèn)放在~/.openshell/下。典型的目錄結(jié)構(gòu)如下~/.openshell/ ├── bootstrap.osh ├── modules/ │ ├── common/ │ │ ├── manifest.yaml │ │ └── main.osh │ ├── git/ │ │ ├── manifest.yaml │ │ └── main.osh │ └── myteam/ │ ├── manifest.yaml │ └── main.osh ├── profiles/ │ ├── personal.osh │ └── work.osh └── cache/每個(gè)模塊都必須有一個(gè)manifest.yaml里面聲明模塊名、版本、依賴(lài)關(guān)系、提供的能力和配置項(xiàng)。例如name: git version: 1.2.0 depends: - common provides: - gs - lg config: sign_commits: false加載順序的計(jì)算方式是這樣的先讀bootstrap.osh建立最基礎(chǔ)的函數(shù)庫(kù)再掃描modules目錄按依賴(lài)關(guān)系生成一個(gè)拓?fù)渑判虮碜詈笠罁?jù)排序逐模塊source。加載器會(huì)做環(huán)形依賴(lài)檢測(cè)如果兩個(gè)模塊互相依賴(lài)會(huì)直接報(bào)錯(cuò)退出而不是悄悄跳過(guò)某個(gè)模塊。這對(duì)像我這樣依賴(lài)關(guān)系復(fù)雜的人特別重要。以前在.zshrc里我常常需要靠source順序來(lái)規(guī)避某些變量覆蓋問(wèn)題現(xiàn)在只需要在manifest里寫(xiě)明依賴(lài)順序問(wèn)題由加載器解決配置文件本身變得更簡(jiǎn)單、更易維護(hù)。3.2 跨平臺(tái)路徑和命令的歸一化處理跨平臺(tái)是這類(lèi)工具的立身之本OpenShell的實(shí)現(xiàn)思路我比較認(rèn)可不是提供一堆“兼容層”函數(shù)而是在啟動(dòng)時(shí)將環(huán)境信息抽象成少量?jī)?nèi)置符號(hào)。比如路徑連接一律用os.path_join而不是拼接字符串打開(kāi)文件管理器用os.open而不是判斷操作系統(tǒng)檢測(cè)當(dāng)前系統(tǒng)用$os.name而不是解析uname。這樣模塊作者幾乎不需要寫(xiě)平臺(tái)分支代碼。為了便于理解對(duì)比一下傳統(tǒng)寫(xiě)法和OpenShell寫(xiě)法的差異# 傳統(tǒng)寫(xiě)法每臺(tái)機(jī)器都要維護(hù)不同分支 if [ $(uname) Darwin ]; then alias browseopen else alias browsexdg-open fi # OpenShell 模塊里的寫(xiě)法 alias browse os.open另一種實(shí)際場(chǎng)景是路徑分隔符。Windows和Unix在路徑拼接上的差異在Shell腳本里最容易出錯(cuò)。OpenShell提供os.path_split、os.path_join這類(lèi)內(nèi)置函數(shù)底層會(huì)自動(dòng)處理分隔符。對(duì)我這種要寫(xiě)跨平臺(tái)CI腳本的人來(lái)說(shuō)這個(gè)抽象省掉了大量重復(fù)勞動(dòng)。我還經(jīng)常用到它內(nèi)置的os.run函數(shù)它會(huì)優(yōu)先調(diào)用模塊中聲明過(guò)的路徑避免因?yàn)镻ATH順序不同導(dǎo)致調(diào)用了錯(cuò)誤版本的工具。這一點(diǎn)在同時(shí)安裝了多個(gè)語(yǔ)言版本時(shí)特別有用。3.3 會(huì)話狀態(tài)與變量回滾機(jī)制這是我最初沒(méi)預(yù)料到的一個(gè)設(shè)計(jì)。傳統(tǒng)Shell里export一旦執(zhí)行就立刻生效如果某個(gè)腳本錯(cuò)誤地覆蓋了關(guān)鍵PATH后續(xù)所有命令都可能受影響。OpenShell把“會(huì)話狀態(tài)”單獨(dú)建模每次設(shè)置環(huán)境變量的操作都會(huì)先進(jìn)入一個(gè)狀態(tài)暫存區(qū)當(dāng)一個(gè)模塊加載完畢后如果模塊聲明了rollback_on_error: true那么加載過(guò)程中所有未提交的變更將被回滾。當(dāng)然不是所有操作都會(huì)走暫存區(qū)。某些命令本質(zhì)上需要立刻落地比如切換目錄、啟動(dòng)守護(hù)進(jìn)程。所以O(shè)penShell區(qū)分了set*類(lèi)內(nèi)置命令和實(shí)際進(jìn)程調(diào)用前者做狀態(tài)管理后者直接執(zhí)行。熟悉GNU screen或tmux的會(huì)話管理思路的人可以把這種機(jī)制理解成“給環(huán)境變量加了個(gè)輕量級(jí)事務(wù)”。實(shí)際體驗(yàn)是玩壞配置的概率明顯下降了。以前改.zshrc經(jīng)常要開(kāi)好幾個(gè)終端一個(gè)用來(lái)改、一個(gè)用來(lái)驗(yàn)證改錯(cuò)了還得靠記憶回退?,F(xiàn)在直接加載模塊試錯(cuò)某個(gè)模塊把環(huán)境變量搞亂了只需要重新加載另一個(gè)profile就能恢復(fù)至少我在調(diào)整配置的時(shí)候心理負(fù)擔(dān)小了不少。4. 從零配置一套順手的工作環(huán)境別名、補(bǔ)全、提示符主題4.1 別名系統(tǒng)一次定義多端生效OpenShell的別名和普通Shell別名不一樣它在別名定義中引入作用域和依賴(lài)關(guān)系而不是簡(jiǎn)單字符串替換。定義別名的基本格式是alias gs git status --short alias gp git push origin HEAD alias k kubectl如果只在某個(gè)模塊里定義別名默認(rèn)作用域是“該模塊被加載時(shí)才可用”。如果希望某個(gè)別名對(duì)全局可用在manifest里把模塊標(biāo)記為scope: global。這里有個(gè)很實(shí)用的配置跨平臺(tái)命令包裝。比如打開(kāi)目錄這類(lèi)操作在模塊中寫(xiě)alias browse os.open這樣在Mac上是open在Linux上是xdg-open在Windows上是start模塊作者不用寫(xiě)平臺(tái)判斷。第一次看到這種寫(xiě)法時(shí)我有一種“終于有人把這件事做對(duì)了”的感覺(jué)。另一個(gè)小技巧是別名參數(shù)化。普通別名后面追加參數(shù)基本是硬拼接OpenShell允許這樣定義alias mine git log --author$1 --oneline調(diào)用mine zhangsan時(shí)$1會(huì)被替換成zhangsan。這個(gè)功能讓別名從“快捷方式”變成了“迷你命令”適合那些不想為一次性操作單獨(dú)寫(xiě)腳本的場(chǎng)景。4.2 補(bǔ)全引擎基于命令文檔的注冊(cè)方式傳統(tǒng)Shell補(bǔ)全大多數(shù)靠單獨(dú)的completion腳本OpenShell則提供了一套聲明式注冊(cè)接口。給自定義命令注冊(cè)補(bǔ)全可以直接寫(xiě)在模塊里complete mydeploy \ --args env:prod:staging:dev \ --opts --force --dry-run --verbose它支持按命令名、按前綴、按歷史調(diào)用頻率做優(yōu)先級(jí)排序。實(shí)際使用中最省心的是它自帶了一個(gè)“命令文檔解析器”很多常用CLI工具只要在模塊里聲明docs: true它就會(huì)讀取幫助文檔自動(dòng)生成基礎(chǔ)補(bǔ)全。雖然不如手寫(xiě)補(bǔ)全腳本精細(xì)但覆蓋80%的日常需求綽綽有余。我用得最多的場(chǎng)景是K8s相關(guān)命令kubectl get后面會(huì)自動(dòng)補(bǔ)全資源類(lèi)型甚至能根據(jù)當(dāng)前命名空間補(bǔ)齊具體的Pod名。過(guò)去這套效果需要額外安裝kubectl插件才能達(dá)成現(xiàn)在直接在模塊聲明里搞定。4.3 提示符主題定制的三個(gè)切入點(diǎn)提示符主題可以分成三個(gè)層面看布局、顏色、動(dòng)態(tài)內(nèi)容。布局控制由內(nèi)置的prompt.layout字段定義常見(jiàn)布局包括經(jīng)典兩行式、單行緊湊式、區(qū)塊式。顏色用了類(lèi)似ANSI但帶語(yǔ)義化的配置字段比如color.error會(huì)在命令失敗時(shí)自動(dòng)變紅不用自己判斷上一條命令的退出碼。動(dòng)態(tài)內(nèi)容由組件實(shí)現(xiàn)比如Git分支、K8s命名空間、當(dāng)前云平臺(tái)profile。配置片段長(zhǎng)這樣theme minimal { components: [git, dir, cmd_duration] color.error: #ff5555 }這個(gè)配置的含義是在單行提示符里顯示當(dāng)前目錄、Git分支和上一條命令執(zhí)行耗時(shí)。相比我過(guò)去的配置文件這套聲明式主題的好處是更換主題不會(huì)波及別名和模塊定義。過(guò)去換一次powerlevel10k配色要找半天配置文件里相關(guān)的代碼現(xiàn)在主題和邏輯完全分離調(diào)整起來(lái)舒服很多。如果你像我一樣同時(shí)維護(hù)多個(gè)項(xiàng)目建議在提示符里加上project組件它會(huì)讀取當(dāng)前目錄所屬的項(xiàng)目名并顯示在提示符開(kāi)頭。這樣在多個(gè)終端窗口之間切換時(shí)能一眼看出當(dāng)前在哪個(gè)項(xiàng)目里減少誤操作。5. 腳本化與插件把日常工作流變成“一鍵執(zhí)行”5.1 osh run 與腳本頭OpenShell最吸引我的一點(diǎn)是把腳本執(zhí)行也納入同一套模塊體系。你可以在腳本開(kāi)頭直接寫(xiě)#!/usr/bin/env osh然后這個(gè)腳本就可以調(diào)用os.*內(nèi)置函數(shù)使用模塊中定義的別名和補(bǔ)全。這意味著腳本不需要復(fù)制粘貼每個(gè)環(huán)境的路徑判斷邏輯只要運(yùn)行環(huán)境中安裝了OpenShell腳本內(nèi)部依賴(lài)的環(huán)境狀態(tài)會(huì)自動(dòng)就緒。舉例來(lái)說(shuō)我經(jīng)常要用一條命令去完成“拉最新代碼、裝依賴(lài)、啟動(dòng)本地服務(wù)并觀察日志”的操作。寫(xiě)在OpenShell腳本里大概長(zhǎng)這樣#!/usr/bin/env osh cd $HOME/projects/api git pull --rebase os.run docker compose up -d --watch redisos.run --watch會(huì)按照模塊里聲明的“日志流轉(zhuǎn)”邏輯跟蹤指定服務(wù)的輸出。如果服務(wù)本身沒(méi)有日志它會(huì)退化成普通后臺(tái)運(yùn)行。這種腳本的好處是發(fā)布到同事機(jī)器上時(shí)不再需要一份“環(huán)境準(zhǔn)備說(shuō)明”只要他們裝了OpenShell腳本就能按預(yù)期運(yùn)行。5.2 內(nèi)置集成Git、Docker、云平臺(tái)與K8s下表列一下我日常用得最多的內(nèi)置集成模塊集成模塊主要能力典型場(chǎng)景git分支狀態(tài)、快捷別名、提交模板快速查看狀態(tài)和同步發(fā)布docker容器列表、日志流、上下文切換切換多個(gè)項(xiàng)目環(huán)境k8s命名空間感知、上下文管理多集群安全切換cloud云平臺(tái)profile切換、憑證自動(dòng)刷新多賬號(hào)運(yùn)維操作這些模塊的價(jià)值不只是“提供命令”更在于它們會(huì)向提示符暴露狀態(tài)。比如切到K8s的prod命名空間后提示符上的namespace段會(huì)變紅切換云平臺(tái)profile后提示符的標(biāo)識(shí)會(huì)跟著變化。這樣即使同時(shí)維護(hù)多個(gè)環(huán)境也不太容易在錯(cuò)誤的上下文里執(zhí)行命令。我還遇到一個(gè)很實(shí)用的場(chǎng)景云平臺(tái)憑證過(guò)期時(shí)模塊會(huì)自動(dòng)彈出提示而不像過(guò)去那樣等到命令報(bào)401才反應(yīng)過(guò)來(lái)。這種提前感知能力對(duì)經(jīng)常做線上操作的人來(lái)說(shuō)價(jià)值非常大。5.3 從零寫(xiě)一個(gè)最小插件的套路一個(gè)最小插件只需要兩部分目錄和manifest。我在本地~/.openshell/modules/目錄下新建myutils文件夾然后寫(xiě)入# ~/.openshell/modules/myutils/manifest.yaml name: myutils version: 0.1.0 scope: global再添加main.oshalias weather-check curl -s wttr.in保存后執(zhí)行osh reload新模塊立即生效。如果需要監(jiān)聽(tīng)提示符生成時(shí)機(jī)來(lái)更新?tīng)顟B(tài)可以在manifest中聲明hooks: on_prompt: myutils_prompt_hook然后在main.osh中定義同名函數(shù)函數(shù)返回的字符串會(huì)被自動(dòng)拼接到提示符里。這個(gè)接口設(shè)計(jì)很直觀新手只需要遵循“聲明鉤子名、定義同名函數(shù)”的規(guī)律就能讓模塊和提示符聯(lián)動(dòng)。我還寫(xiě)過(guò)一個(gè)記錄當(dāng)前目錄最近一次git提交時(shí)間的模塊總共不到三十行。如果你熟悉bash函數(shù)遷移到OpenShell模塊幾乎零門(mén)檻。關(guān)鍵是manifest這個(gè)入口文件要寫(xiě)清楚依賴(lài)和提供的能力否則別人復(fù)用你的模塊時(shí)很難判斷它適合放在哪個(gè)加載階段。6. 性能與資源占用啟動(dòng)速度、內(nèi)存、以及一個(gè)被忽略的緩存開(kāi)關(guān)6.1 啟動(dòng)時(shí)長(zhǎng)的實(shí)測(cè)與優(yōu)化前后對(duì)照工具一旦變成日常主力第一個(gè)要關(guān)心的就是啟動(dòng)延遲。我在同一臺(tái)MacBook Pro上做了簡(jiǎn)單測(cè)試結(jié)果如下環(huán)境冷啟動(dòng)耗時(shí)原生bash30mszsh配合oh-my-zsh470msOpenShell默認(rèn)配置96msOpenShell全量模塊動(dòng)態(tài)提示符148ms這個(gè)成績(jī)?cè)诳梢越邮艿姆秶?。不過(guò)個(gè)人使用的體感和數(shù)字還是會(huì)有一些偏差因?yàn)槟K越多首次進(jìn)入交互式提示符之前加載的依賴(lài)就越多如果提示符組件還做了網(wǎng)絡(luò)請(qǐng)求那波動(dòng)會(huì)非常明顯。6.2 真正影響性能的元兇不是模塊數(shù)量而是網(wǎng)絡(luò)探活跑osh debug profile查看各階段耗時(shí)之后我發(fā)現(xiàn)最慢的不是Source過(guò)程而是模塊的“版本檢查”階段。部分模塊在加載時(shí)會(huì)嘗試訪問(wèn)遠(yuǎn)端倉(cāng)庫(kù)檢查是否有新版本。網(wǎng)絡(luò)環(huán)境差時(shí)這一步單次可能耗時(shí)數(shù)秒。解決方式是直接配置為離線模式# main.osh 或全局配置 offline true update.check false把這兩項(xiàng)關(guān)掉之后加載階段從平均280ms降到了110ms左右而且沒(méi)有影響任何本地功能。需要注意的是缺失關(guān)鍵工具時(shí)的MD5校驗(yàn)也會(huì)走本地緩存離線模式下如果緩存被清空部分檢查會(huì)跳過(guò)不影響使用但會(huì)導(dǎo)致日志里出現(xiàn)warning不用擔(dān)心。6.3 緩存與并行加載的取舍OpenShell會(huì)把模塊的預(yù)編譯結(jié)果放在~/.openshell/cache/下首次構(gòu)建后后續(xù)啟動(dòng)可以跳過(guò)語(yǔ)法解析和部分依賴(lài)分析。我觀察到的規(guī)律是緩存命中率高時(shí)即使加了十幾個(gè)模塊啟動(dòng)也基本在100ms上下但如果刪除了緩存目錄下一次啟動(dòng)會(huì)重新構(gòu)建耗時(shí)會(huì)上升到接近500ms。并行加載需要考慮最大模塊數(shù)。模塊數(shù)量增加后并行收益并不線性因?yàn)楹芏嗄K之間有傳遞依賴(lài)部分模塊的啟動(dòng)邏輯需要先等待另一個(gè)模塊完成。因此我的經(jīng)驗(yàn)是把模塊按“基礎(chǔ)工具類(lèi)”和“業(yè)務(wù)工具類(lèi)”分開(kāi)基礎(chǔ)模塊放在early階段業(yè)務(wù)模塊放在late階段保持模塊數(shù)量在十幾個(gè)以?xún)?nèi)性能就能維持在一個(gè)很舒服的位置。內(nèi)存方面OpenShell進(jìn)程本身在空閑時(shí)占用的內(nèi)存比zshoh-my-zsh的組合要少一些我沒(méi)有做精確測(cè)量但直覺(jué)上是因?yàn)樗粫?huì)像oh-my-zsh那樣把大量git和主題相關(guān)的函數(shù)全部預(yù)加載到內(nèi)存中。那些函數(shù)只有在需要時(shí)才會(huì)按模塊注冊(cè)的回調(diào)觸發(fā)。7. 踩坑記錄從“又是路徑問(wèn)題”到一次完整的排查鏈路7.1 案例一別名沖突導(dǎo)致核心命令失效有一次我給某個(gè)模塊添加了alias k kubectl以為一切正常結(jié)果在這個(gè)模塊加載完成之后終端里原來(lái)一個(gè)叫k的舊腳本再也無(wú)法調(diào)用。表面上是“我把k覆蓋了”但問(wèn)題的本質(zhì)是加載器并不知道這兩個(gè)能力存在沖突。排查過(guò)程值得記錄下來(lái)。我先用osh config --debug dump查看當(dāng)前的別名和命令解析優(yōu)先級(jí)再用which -a k查看候選命令列表發(fā)現(xiàn)OpenShell解析k時(shí)優(yōu)先選擇了模塊別名而不是系統(tǒng)里的舊腳本。修復(fù)方法是在模塊的manifest里顯式聲明provides: [k]。加載器看到這個(gè)聲明后會(huì)在啟用該模塊時(shí)檢查系統(tǒng)中是否存在同名能力如果存在就彈出沖突提示而不是默默覆蓋。7.2 案例二Windows換行符問(wèn)題引發(fā)的腳本運(yùn)行失敗另一個(gè)印象深刻的坑來(lái)自Windows環(huán)境。一個(gè)在Linux上運(yùn)行正常的OpenShell腳本在Windows上執(zhí)行時(shí)總是報(bào)錯(cuò)錯(cuò)誤信息類(lèi)似command not found: $\r。第一反應(yīng)猜測(cè)腳本在同步時(shí)被改成了CRLF換行。排查時(shí)我先用file命令確認(rèn)腳本格式發(fā)現(xiàn)顯示CRLF line terminators再用cat -A看到每行末尾的^M$。這個(gè)案例的完整排查鏈路是確認(rèn)報(bào)錯(cuò)行號(hào)、檢查文件格式、檢查Git的autocrlf設(shè)置、最后用os.format convert-line-endings把項(xiàng)目?jī)?nèi)腳本統(tǒng)一轉(zhuǎn)成LF同時(shí)設(shè)置了.gitattributes中的text eollf規(guī)則。這個(gè)坑本質(zhì)上和Shell無(wú)關(guān)但我在OpenShell里遇到時(shí)排查路徑更順暢因?yàn)樗峁┝酥苯拥霓D(zhuǎn)換命令。如果你經(jīng)常在Windows和macOS之間同步項(xiàng)目建議從一開(kāi)始就在倉(cāng)庫(kù)里加上.gitattributes而不是等到有人踩坑后再補(bǔ)。7.3 通用排障套路從小白也能用的三個(gè)命令說(shuō)起如果遇到模塊加載問(wèn)題我一般按這三個(gè)步驟來(lái)。第一步是osh doctor檢查環(huán)境完整性和緩存狀態(tài)。第二步是osh debug load --trace它會(huì)把加載順序和每個(gè)模塊的耗時(shí)打印出來(lái)一旦某個(gè)模塊卡住能立刻定位。第三步是“二分法禁模塊”把modules目錄分成兩半先只加載一半如果問(wèn)題消失說(shuō)明問(wèn)題模塊在后一半繼續(xù)對(duì)半分直到縮小到單個(gè)模塊。這套方法并不高明但很有效。大多數(shù)問(wèn)題都能在十分鐘內(nèi)定位。唯一需要注意的是osh debug load --trace輸出的信息量很大建議把輸出重定向到文件再搜索關(guān)鍵詞而不是直接在終端里翻頁(yè)否則很容易錯(cuò)失關(guān)鍵行。最后想單獨(dú)說(shuō)一個(gè)我自己的使用習(xí)慣。每次拿到新裝的OpenShell環(huán)境我不會(huì)一上來(lái)就把所有模塊鋪滿(mǎn)而是先跑一周“默認(rèn)配置最近常用的三四個(gè)模塊”等osh doctor連續(xù)一周沒(méi)有warning后再逐步補(bǔ)齊其余模塊。這個(gè)做法讓我養(yǎng)成了比較穩(wěn)妥的排障節(jié)奏也避免了第一次上手就把配置弄得一團(tuán)糟。如果你們也打算把OpenShell納入日常不妨從最小的模塊集開(kāi)始先讓它跑起來(lái)再慢速擴(kuò)展。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本三级小说中文字幕| 亚洲网污污污污| 久久超碰国产一区二区三区| 天天操熟妇| 久操视频免费在线观看| 国产乱伦一二三区| 女人喷水视频在线观看| 欧美片第一页| 天天看天天日| 亚洲黄色AV电影| 综合情欲网| 亚洲污一污二| 久久天天躁日日躁狠狠躁| 免费av大片| 激情小说日韩无码| 欧美成人一级麻豆| 黑人在线91| 97资源免费视频| 九一综合精品视品av| 人人操人人摸人| 在线看的av| 91精品国产91综合久久蜜臀| 亚洲性爱电影| 欧美A片中文字幕| 12一15性XXXX粉嫩国产| 一级做a爰片性色毛片久久| 91中出在线| 九九九偷拍| 天天草AV| 中出在线视频| 竹菊一区二区三区AV线| 美国三级日本三级久久99| 99.色网| 成人午夜无码视频| 欧美1727免费观看视频| 五月丁香成人网| 国产在线视视频有精品| 人妻精品视频一区二区| 啊视频在线| 国语av最新自产拍在线观看| 亚洲一区二区性爱电影| 欧美日韩91| 大香蕉综合在线| 亚洲中文字幕网| 97色婷婷| 天天综合香 ld视频| 无码91| 色性综合| 天美一二三在线观看Av| 国产人人干| 亚洲 欧美 日韩另类 麻豆| 久久蜜桃一区二区| 俄罗斯及免费在线看| 精品黄色电影| 日本一区二区三区四区免费观看| 免費黃色視頻觀看一| 婷婷五月天成人网| 亚洲日韩青青草色月| 久久久久久波多野吉衣高潮| 玖玖无码超碰| 丁香婷婷五月| 亚洲一区二区精品福利| 精品久久99| 久久久中文版| 欧美综合色| 人妻精品免费一二三区| 亚洲九月丁香| 亚洲综合99999| 欧美在线干| 老熟女综合| 91情色| 国产福利在线视频网站| 色色操| 制服少妇欧美| 久操国产在线| 亚洲日韩美女中文字幕乱| 六月激情网| 91精品免费| 欧美极品| 国产麻豆一级精品视频| 99只有精品| 美女t无毒不卡不卡| 国内亚洲高清无码| 性色高清在线| 久久久久99精品成人片蜜臀| 国产男人又猛又粗又爽| 日韩精品99久久久久久中文字幕| 亚洲激情视频| 91狠狠综合久久久| 亚洲AV在线资源| 九九九九热| 人妻人人做人人澡人人爽欧美一区| 女优免费一区二区永久| 日本2020一区二区| 牛黄色久午久| 久久久久96| 欧美人人曰人人操人人射射| 91狠狠色丁香婷婷综合久久| 天堂成人网| 日本免费专区| 色九九九九| 12一15性XXXX粉嫩国产| 亚洲国产第一页综合视频| 91女优在线观看 | 精品中文日韩字幕视频| 草草电影院| 精品国产精品一区二区| 外国免费性情大片| 色婷婷小说| 国产精品乱码久久久久久| 国产综合在线视频网站| 在线综合 亚洲 欧美中文字幕 | 18禁看网站一区| 超碰人人色| 夜夜 中文视频rt| 巨爆乳一区二区爆乳区| 啊啊啊轻点在线观看| 日韩三A大片在线观看| 欧美淫穴| 9国产超碰| 嗯阿好爽好紧| 国产成年女人免费视频播放a| 天天日日本| 亚洲日韩人妻中文字幕一区| 色第一页| 欧美人妻精品一区二区| 久9综合在线| 日韩性爱视频免费在线| 淫穴高潮色图| 精品国产精品一区二区| 91高清欧美| 四虎影院成年人片| 欧美啪啪色吧在线| 亚洲AO在线| 综合av社区| 97精品97| 国产又粗又长又爽又色| 亚洲精品97久久| 九九天堂| xxx0国产在线播放| 亚洲欧美综合网 | 蜜桃视频成a人v在线| 欧洲亚洲人人爽爽视频| 五月天激情四射| 久久男人的天堂| 天天干天天日天天射黄色大片 | 欧美激情总合网| 成人小说另类在线| 锕锕好爽 死我在线观看| 在线可观看的黄色网址| 一区二区高清视频| 久久人妻少妇| 中文字幕 码 自拍 视频 区| 久久日韩精品一区二区| 超碰是碰在线观看| 97超级欧美| 亚洲九区| 隔壁邻居波多野结衣中文字幕 | 99久久久无码精品国产人| 人妻黑丝袜电影| 五月丁香综合网| 国产无码精品久久久久久| 欧美另类自拍 | 国产日韩中文字幕欧美| 99国内精品| 26uuu国产成人综合| 欧美日韩国产精品久久色婷婷| 98一区二区精品| 99久久久无码精品国产人| 噜噜噜无码AV一级一级久久影院| 69一区二区| 韩日巨乳美女免费视频在线观看| 免费视频无码| 入口操逼网站| 国产最新小视频在线播放下载| 97色欧洲| 日韩欧美天堂| 天天综合网亚洲综合网| 超碰538| 超碰免费在线| 99久久婷婷国产综合| av一区二区三区不卡| 久久久久幕乱码| 超碰精品| 97露脸精品丝袜| 亚洲宅男天堂| 久久久爆乳翘臀一线天伦理视频| 再深点灬舒服灬太大了好硬好爽| 欧美激情另类一区二区| 人人操人人爽人人操人人| 校园春色 亚洲| 亚洲污污网站| 亚洲限制级| 国语人妻精彩刺激| 香蕉婷婷| 香蕉婷婷| 久久国产精品91| 国产超碰在线| 亚洲国产激情国产av| 日韩性爱毛片操骚逼| 操国产逼| 日本人妻丰满熟妇久久久久久| 午夜美女诱惑电源网| 中文字幕欧美日本乱码一线二线 | 欧美亚洲综合色| 一区操逼日比视频| 欧美日韩在线国产在线| 亚洲av淫乱| 国产操偷| 免费人成?大片在线播放| 久热在线精品免费观看| 性久久久| 欧美亚洲色图另类国产| 国产精品无码av| 成人三一级一片aaa| 眼镜人妻101.com| 国产精品久久久久无码Av网曝门| 久96热在线观看视频| 亚洲一区二区在线观看91| 一本色道久久综合狠狠操| 国产AV天美传媒一区二区三区 | 无码精品人妻一区二区三区妖精 | 欧美色图亚洲色图成人在在线| 天天天天操| 麻豆人妻精品一区二区| 殴美,日韩国产伦精品| 开心激情站| 6080yy午夜理论三级一区二区三区无码| 可以看的av| 四虎影库国产精品免费| 国产强奸乱伦无码视频| 久久精品福利影院| 99热超碰| 熟女在线视频| 熟妇人妻一二三区免费| 色欲天天综合久久久无码网中文| 爽极品影院| blacked精品一区国产| 99精品在线观看| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 美女尤物福利视频| 国产又大又粗又长视频在线| 成人开心网在线视频 | 色婷婷亚洲婷婷| 美女露胸露屁股| 青青草十区九区爱夜| 国产第二页| 久久久久久十| 人妻少妇被猛烈进入中| 99热官网| 国产妇女精品视频青青草| 日日爽熟女| 国产精品视频自拍在线| 屌色在线97视频| 神马久久啊啊| 国产精品久久天天干| 嫖老熟女A片一二三区| 中日无幕一二三四区| 好屌色综合| 老鸭窝成人免费毛片视频| 涩涩涩综合| 亚洲高潮少妇| 手机看片1024你懂的国产| 6080yy午夜理论三级一区二区三区无码| 国产盗摄美女如厕大神作品在线观看| 九九九九九九九九九国产精品| 亚洲国产一区二区日韩专区| 国产视频一区二区在线观看| 黄色交缠性感爆操91国产精品免费一区二区三区 | 精品天堂| 日韩性爱小视频在线观看 | 亚洲AV成人无码一二三久久 | 青青草一本道福利视频| 内射小黄片| 天天操天天插| 亚洲AV无码乱码| 日本色婷婷| 色在线69堂| 亚洲另类欧美精品| 宅男91视频在线播放| 啊啊啊啊嗯嗯在线久久久| 秋霞久久亚洲精品成人| 五月天综合网| 大香蕉免费3| 天天色悠悠激情| 99操逼| 成人无码影片视频在线| 国产精品视频在线播放| 精品偷拍13p欧美dodk视频| 九热大香蕉| 大香蕉一级黄色片久久| 久久大香蕉手机高清| 中国91AV| 嗯嗯啊在线视频| 成人性交午夜免费片| 国产精品久久久三级无码| 欧美人人天天网| 911av网站免费观看| 青青草国产盗摄一二三区| 99e久久国产精品| 亚洲另类色图片| 国模无码人体一区二区三| 爱欲AV| 亚瑟国产精品久久无码| 东京热精品97综合网| 强奸乱伦亚洲第一页| 麻豆AV96熟妇人妻| 黄色电影观看久久9| 亚洲欧美在线综合| www.狠狠干.coom| 日韩成人无码| 成人一区二区三区四区| 亚洲色欲天天人妻无码系列专区| 国产精品成人午夜福利| 啊啊啊啊啊在线观看网址 | 久久9精品视频| 日本精品一级二级三级| 久久大陆| 玖玖在线视频| 中字幕人妻一区二区三区| 桃色人妻在线视频| 精品国产一区二区三区av在线资源| 亚洲日韩美女丝袜美腿人妻视频| 精品176精品2| 国模精品一区二区三区苹果色戒 | 欧美色图20P| 久久久久久久久久久久久久久乱码| 囯戸精品高潮呻吟旡码| 久久久久久中文| 鲁鲁色综合网| h无码动漫在线观看| 色噜噜人妻av中文字幕| 中文字幕在线观看AV| 亚洲国产一区二区入口| 青青五月天| 青久操| 熟女视频久久| 蜜乳AV一区| 日本 情色 1区| 91夜色chaopeng| 91在线无码精品秘 软件| 欧美日本成人一区二区| 欧美精品,四区。五区| 黄色大片一区二区密桃丝袜| 天天做日日做天天欢。| 自拍偷拍草一草| 国产精品69久久久久久久| 中文字幕老熟妇黄色视频| 成人亚欧免费视频| 国产黄色小视频网站| 亚洲成人在线乱码色午夜| 精产国品一区二三产品| 大香交伊人网| 亚洲aV性爱| 成人av福利在线观看| 亚洲人妻色图| 91精品操美女| 超碰碰小说97| 人澡逼| 婷婷情色五月天| 性爱久久| 夜夜操二区| 黑人精品成人一区二区三区| Av手机版天堂网| 亚州综合色| 日韩91网| 久久精品无码专区| 国产精品日日摸天天碰| 夜夜嗨TV| av2014 日韩在线中文字幕| 国产熟妇一区二区| 亚洲欧洲无码97久久精品| 97超碰69| 特级大荫道BBwBBwBBW| 色婷婷丁香五月| AV中文在线| 精品人人插人人操| 色五月亚洲| 亚洲精品视频在线播放| 五月丁香六月婷| av无码精品久久久久| 天天色黄色影院天天操| 国产美女自拍AV| 一道α片欧美| 少妇3P性爱自拍| 国产Aα| 91精品国产日韩欧美综合| 亚洲A曰本VA欧美VA视频| 立川理惠被中出无码 | 澳门成人网站久国产日韩| 中文字幕人妻丝袜| 91人人爽人人爽| 久久精品免费| 国产成自自拍在线观看| 99热 按摩 日韩| 亚洲大胆人体av| 风月影院男女十八禁| 熟女露脸激情自拍视频| 久久久久久十| 中文字幕av亚洲精品| a片偷拍视频| 欧美日本中字另类在线| 亚洲精品啪视频| 五月天激情影院| 精品一区二区三区蜜桃臀赵总| 懂色AV一区二区三区| 久九干| 91色伦综合| 色69大色97香蕉| 啊啊啊想要| 国产亚洲精品无码三区| 亚洲精品人妻吞精av | 大香蕉视频啪啪啪啪| 人人操人人肉久久精品| 四虎午夜影院| 立川理惠无码一区二区| 亚洲情色五月天 | 日韩超碰97| 狠狠操,使劲操| 精品九九国产无码| 九九色热| 操死我了嗯嗯嗯| 五月天久久人妻| 精品人妻一区二区三区四区石在线| 国产人妖视频一区在线观看| www久久久| 九九热超碰97亚洲最新香蕉 | 丰满熟女一区二区三区在线播放| 久久久亚洲Av| 日韩另类色图| 91中文字幕在线观看| A 天堂| 人妻精品一区二区在线| 欧美日韩黄色片一区二区三区四区人与兽做爱| 97欧美色综合| 人妻色偷色噜| 色五月婷婷五月天| 超碰欧美97资源| 在线毛片片免费观看| 色综合婷婷| 999综合色| 欧美第二页| 日韩精品中文字幕一| 国产欧美日韩女同性恋ww喷水精品| 久久久久密臀视频| 色屁屁影院www国产| 日韩人妻少妇 一区二区三区| 日韩精品大香蕉伊人在线| 蜜臀久久99精品久久久久久无删减 | 亚洲高清91| 亚洲无码免费看| 高清不卡国产| 俄罗斯及免费在线看| 乱老女人一区二区视频| 亚洲电影91| 日韩特级毛片免费观看全集| 亚洲天堂区| 午夜福利合集| 精品人妻美妇91job| 中文字幕人乱码中文字的预防方法| 精品国产Av无码久久久伦古装| av国产无码| 日韩无码服务区| 欧美人妻一区| 国产精品一级二级在线| 欧美性巨大╳╳╳╳╳高跟鞋| 欧美日韩国产电影| 夜夜天天噜狠狠爱2021| 秋霞福利网| 永久免费发布性爱网| 日韩电影天堂视频二区三区| 亚洲性爱免费电影| 亚洲一区制服诱惑| 久久综合激情| 国产激情在线| AV天天在线观看| 亚洲图片激情小说| 中文字幕视频在线观看一区二区| 国产91 丝袜在线播放00-百度| 狠狠色丁香| 久久久久久久9| 人妻天天夜夜爽一区二区| 亚洲欧美日韩激情不卡| 97超碰热线| 国产亚洲欧美每日在线| 久久m| 超碰国产精品久| 夜夜 中文视频rt| 欧美,日韩综合久久| 爱丝福利| 性爱动态120秒| 亚洲最新Av| 日本一天色道久久久精品视频| 欧亚性爱在线视频| 欧中美三级一区二区三区| 色欧美天天| 日韩激情无码影院| 四虎免费视频| 日韩乱码Av| 欧美精品一区二区少妇免费A片| 97伪v| 国内外色色色色色成人视频| 蜜臀在线视频| 综合久久99亚洲人妻中文在线| 8050午夜少妇无码| 日日骚AV| 热热色色综合| 花野真衣| 国产精品久久久久久片| 久久久久久久人妻丝袜| 一区二区三区色综合| 天天日天天色| 强奸乱伦亚洲第一页| 97久久超碰亚洲| 91+欧美| 人人爱人人操人人性| 火箭成精品视频884必出精品| 日韩三级在线观看mp4| 久99视频| 91午夜无码| 色97干| 色香综合天天影视综合 | 女生久久网| 日本十八禁免费看污网站| 加勒比无码毛片| 性色国产东北露脸精品视频| 啊啊啊好爽快点啊啊啊嗯嗯| 国产精品无码av| 无码人妻精品酒店| 亚洲情色 自拍| 大香蕉欧美国产日韩高潮| 青草视频在线看看看看看看看看看| 激情网色| 国产成年女人免费视频播放a| 欧美色另类| 91欧美巨乳| 国产美女精品| 欧洲中文字幕| 色性荡荡荡荡视频| 69超碰综合| 九九香蕉网| 国产激情av女片自拍| 久久精品 六十路 熟女 欧美| 麻豆91熟妇人妻中文字幕茄子| 日韩大香蕉精品在线视频| 97超碰热线| 亚洲男人的天堂V| 97资源制服丝袜| 五月天偷拍| 婷婷大香蕉| 国产成人+综合亚洲+天堂| 国产精品自在线发布| 福利操逼| 插穴性爱视频在线观看| 中日亚韩免费视频| 伊人精品久久网站| 国产在线视频二区| 狠日操| 人妻丰满熟妇一区二区三| 在线人成亚洲视频免费观看| 日本孕妇一区二区视频操逼免费看| 啪啪自拍九九综合| 精品视频在线观看| 小说区 图片区色 综合区| 国产成年女黄特黄| 亚洲电影中字一区二区| 亚洲男人久久综合天堂| 少妇无码av专区线| 亚州AV无码国产精品| 亚洲av影院在线观看| 日韩色女精品| 超碰精品97| 啊啊啊啊啊好多水| 国产v片在线免费观看| 亚洲成人性爱网站在线播放| 97人妻免费中文字幕| 国产激情在线| 91色综| 一区 欧美 日韩 麻豆| 成人在线视频一区| 久久久久久九九九九九九| 78m成人视线| 久操精品| 亚洲强奸乱伦影视网| 婷婷亚洲综合| 激情欧美日韩女同久久| 大色网久久| 婷婷色综合欧美日韩| 免费日韩黄片| 丁香六月啪| 欧美熟女激情| 中文字幕免费在线观看| 人人搞人人插人人操| 最好看的中文字幕在线2018| 久久婷婷五月天| 男女激情中文字幕| 欲香欲色综合天天伊人| 午夜福利一区二区影院| 啪啪啪综合网| 91少妇香蕉久久精品| 日韩欧美三级| 性爱视频啪啪啪啪| 青青草中文-久久青草精品一区二区三| 99国产天美| 黑人精品欧美一区二区蜜桃| 国产男女边吃边摸视频网站| 婷婷五月av| 夜夜国产一区| 91久久| 久久香蕉国产线看观看猫咪av| 澳门成人网站久国产日韩| 天天综合站| 欧美 精品国产制服第一页 | 狠日欧美| 欧美极品少妇| 国产精品久久久久无码Av网曝门| 99久久久久| 人妻人妻天天碰| 亚州综合| 亚洲欧美大| 91精品国| 粉嫩在线一区二区懂色| 日本九九久久99| 欧美成人性爱视频在线播放| 亚洲天堂电影精品一区| 天天综合91入口| 日韩一性一交一A片俄罗斯| 青青草日逼视频| 亚洲欧洲自拍| A久久| 亚洲九九视频| 国产高清成人传媒影视| 夜夜免费视频| 欧美色性爱| 97爱b| 免费黄色片。| 亚洲限制级| 久久精品 六十路 熟女 欧美| 偷拍 精品另类 凸凹了四区| 欧综合网| 日韩三级一区 | 婷婷操视频| 午夜情侣自拍网站| 久久久97| 久久一区无码| 成·人免费午夜在线观看| 五月丁香六月激情| 超碰91在线| 色av中文字| 又粗又长又大国产不卡| 啊啊啊啊啊啊啊国| 亚洲性爱成人| 久久久久亚洲一区女同性恋中文字幕| 欧美日韩性爱电影在线| 天堂在线一区二区| 国产www色在线观看| 偷拍片久久| 在线看免费无码AV天堂的| 中文字幕熟女人妻丝袜丝| 国产精品亚洲免费| 欧洲精品一级二级精品综合视频综合| 99久久com免费视频′| 国产精品 视频| 免费9 1久久| 无码人妻精品一区二区中文| 四虎在线免费视频| 色色色色综合网| 午夜超碰| 双插在线| av婷婷色婷婷色六月| 中文字幕成人乱码熟女精品国50| 欧美AB在线观看| 国产精品永久免费10000| 91欧美巨乳| 色五月婷婷色| 97香蕉网| 欧美黄色图片| 草草网站影院白丝内射| 天天综合~91| 91在线页| 日本丝袜人妻内射| 日韩欧美女求操每天更新| 麻豆 欧美 日韩| 亚洲第一狼人丝袜美女另类 | 日韩成人高清一区二区| 欧美色图 人妻| 精品久热| 人人操人人摸人人看人人插| 久久超碰天天| 中美日韩毛片| 韩国一级做A片免费的| 97视频在线免费观看| 91天射| 狠狠综合网| 成 人片 黄色大片| 久久人妻熟女一区二区| 91爱看| 激激五月| 超碰人人超在线观看| 国产91亚洲精品一区二区三区| 91国产丝袜美女| 欧美久久婷| 亚洲天堂99| 久久久久亚洲AV无码专区少妇| 91热| 吊色| 超碰夫妻97| 日本天天吊| 国产原创剧情在线丝袜 | 人妻一区久久二区三区色播| 色婷婷基地| 国产Aα| 欧美一级AAAAAAA| 一区二区三区一亚洲中文字幕、综合区灬 | 国产成人精品亚洲日本| 伊人丁香五月婷婷| 国产精品人妻免费精品| 成人精品久久| 日本 情色 1区2区3区| 91久久堂| 五月婷婷hd| 国产超碰国产97| 天天日少妇逼AV| 五月丁香激情综合| 国产亚洲色婷婷久久99精品91葵花宝典| 妇女性内射冈站HDWWWCOM| 97精品免费| 欧美日韩久久精品爱爱| 大逼色网站| 国产美女91| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 国产人妻天天干精品| 草草影院最新网址| 收看日本人日bb| 久久精品 六十路 熟女 欧美| 亚洲欧美小说| 加勒比综合网| 中文一区二区三区影院| 黑人综合网| 另类图片综合| 欧洲性爱无码区| 久久久久久久免费A片国产成a人亚洲精∨品无码| 97亚洲色图| 手机在线大香蕉| 久久黄人人爽视频| 久久免费少妇| 91啦人妻| 麻花传媒免费网站在线观看| 中国乱伦一区二区| 在线综合色| 欧美视频边做饭边橾| 日本在线激情一区二区三区| 国产福利第一视频| 九九九九久久久| 99精品丰满人妻无| 最新精品久久蜜桃 | 日韩不卡毛片Av免费高清| 国产午夜无码片在线观看影视| www国产天美久久久| 天天干人妇| 日本在线一二 | 99热日| 久久国产精品视频| 亚洲熟女av中文字幕| 人人操欧美风骚| 国产一区自拍欧美日韩| 福利在线黄片| 亚洲色鬼| 人妻人妻天天碰| 国产精品白丝www| 免费精品无码一级毛片牛牛影视 | 日本人妻一区二区| 欧美 牲| 欧美同性恋 的搜索结果 - 91n| 欧美性暴力猛交| 91色人妻| www.av在线观看| 日韩在线视频1234| 大香蕉综合在线| 五十路三区在线| 日本十八禁免费看污网站| 日本一级二级三级网站| oumeisetu综合| 成熟熟女国产精品一区二区| 伦理第一页| 国产日韩精品无码去免费专区国产| 日韩欧美字幕亚洲一区二区| 91久久精品国产| 欧美日韩美女精品久草一区二区三区| 春色综合网| 久久av一级av少妇av高潮| 婷婷久草一区二区三区| 91国产丝袜美女| 亚洲无码 国产无码| 俺去俺来也在线www| 闷骚老熟女15P| 亚洲欧美清纯| 国产成人bd在线观看| 91国产丝袜足交精品视频| 美女上床网站| 激情抓乳插进去啪啪啪日韩 | 天天天天做夜夜夜夜做| 干少妇视频| 深夜激情无码| 亚洲国产精品久久久男人的天堂| 不卡日本一区二区| 国产精品久久久久久久久AV大片 | 亚洲无码国产探花在线观看| 9999久久久久| 久久偷偷色综合蜜桃| A级在线视频| 可以免费观看的AV| 日本五区不卡| 亚洲AV噜噜狠狠网址蜜桃动漫| 有码人妻系列| 色五月AV| www.五月天| 哈哈操 大香蕉| 日本Xx性爱| 欧洲精品人妻| 国内毛片无遮挡国产| 熟妇人妻一区二区三区| 国产97亚洲| 婷婷丁香六月| 伊人九九| 99热在线播放| 97久久国产精品女不卡| 九九亚洲视频| 怡红院久久老司机| 99热国产| 精品人妻丰满熟妇一区二区三| 国产成人精品亚洲日本| 九9精品| 999国产精品999| 亚洲骚男同com| 国产一级黄色片在线观看| 少妇丝袜在线观看AV| 377p欧洲日本亚洲大胆| 欧美亚洲涩涩| 亚洲一本色道中文无码aV天美| 久久一本大香蕉| 淫荡少妇免费| 综合性视频99| 免费看一级a性色生活片久久无| 抽插一区二区视频| 久久大香蕉| 精品久久久久久久| 九久9热| 人妻一区二区三区视频| 91日产欧美| 人妻日日干| 亚洲猛交| 97久精品| 中文字幕五月婷婷免费| 国产第二页| 99热最新| 国产精品 视频| 成人热久久精品| 国产精品探花在线| 麻豆AV一区二区天美传媒| 国产超碰国产97| 欧美18 在线观看| 香蕉免费一区二区三区不读| 操逼网免费无码视频| 色约约一区=区三区| 亚洲色图在线视频| 草草影院日本第一页| 蜜臀99久久精品| 91人妻超碰| 性影在线视频| 清纯唯美综合| 懂色AV中文| 97最新在线播放视频| 97超碰护士| 久久6热精品99视频| 午夜精品视频777| 国产资源中文字幕在线 | 啪啪啪精品视频| 97在线视频网站| 二三四区精品| 很很干很很操| 日韩中文字幕人妻视频| 91欧美www| 10000部十八禁看电影| 色综合色综合网| 国产精品99精品视频网站| 精品白丝一区| 无码人妻丰满熟妇奶水区毛片| 久久香蕉国产线看观看猫咪av | 亚洲成人精品久久久| 黄网色一区二区三区四区精品| JIZZJIZZ亚洲女人被躁| 校园春色 亚洲| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV | 久久人妻97久久久久久久| 亚洲人妻中文高清| 韩国免费播放一级毛片| 97资源站国产精品| 美日韩在线不卡人妻| 日韩有码免费视频| 欧美东京热精品A∨| 人人么人人操| 亚洲天堂资源在线| k频道色撸撸| 天天综合有色网| 天天干美少妇一区| 国产成人精品亚洲日本| 人人操人人插人www| 午夜啪| 亚洲毛片基地专区| 性感美女91影视| 东北操逼| 婷婷五月天无码 | 国产精品久久久亚洲一区| 国产精品久久成人免费| 欧美日韩日产免费网站看| 欧美性爽xyxOOOO| 9999久久久| 91中出视频| 极品出轨视频网站| 玖日综合网| 久久99深爱久久99精品| 亚洲www91| 精品国产99| 大香蕉十区| 亚洲情色五月天| 久久熟女人| 精品四五区| 97色在线观看| 色哟哟国产精品免费网址| 色婷婷丁香五月| 九九九九久久久| 亚洲做性| 91女优在线观看 | 五月天婷婷成人网| 激情开心五月天| 色99在线| 亚洲 欧美 91| 欧美三级不卡| 日韩AV色图| 亚洲美女30b| 色九九九综合| 啊啊啊啊啊啊啊啊啊在线观看| 日日噜噜夜夜久久亚洲一区二区| 欲射影视| 亚洲精品人伦一区二区| 91n.欧美| 国产馆| 精品一区二区三区国产| 国产中文字幕在线点播| 国产成人亚洲精品无码古代早漏男| 国产精品一区午夜福利| 屁屁影院一区二区三区国产 | 亚洲Av诱惑| 亚洲综合第一页| 国产在线综合福利网站| 国产第12页| 成人网站 免费观看| 综合久| ,国产乱人伦精品一区二区三区| 中文字幕版| 啊啊啊久久久视频| 精品少妇99| 精品蜜乳AV免费观看| 一本久道在线综合视频| 怡红院一区二区熟女人妻| 青青草日韩无码| 综合日韩激情另类图片| 亚洲日韩乱码中文无码蜜桃臀网站| 午夜精品久久久久久久99| 青青草这里只有精品| 一区在线精品中文字幕| 欧美日韩国产另类综合| 国内精品伊人久久久久影院会| 天天日天天插| 97大色网| 久久久一二三四区| 亚洲一区二区三区春色| 人人人人插| 口爆综合网| 欧美性爱网97| 日韩精品午夜操呦呦不卡影院| 狠狠91| 久久久久国产精品喷潮免费观看臀| 丁香五月激情综合| 97视频620| 亚洲欧美洲综合| 逼操网站| 麻豆精品久久久久久久| 日日干夜夜欢| 精品国产乱码久久| 久久久精品视频免费观看| 久久久999网站| 男人天堂无码| 久久精品国产AV一区二区三区| 91久久久久久久久18| 欧美中字二区| 99re在线| 制服乱伦| 韩日巨乳美女免费视频在线观看| 久久色精品视频在线| 男人天堂网手机版婷婷| 日本人妻最新在线中| 人妻熟女av国产网站| 国产超碰在线一区| 亚洲天堂资源在线| 亚洲色图殴美色图激情乱伦| 老师充足的奶水小说| 91亚洲人| 婷婷五月天影院| 蜜臀th| 亚洲 日本 国产 综合| 日本熟妇熟色97一本在线观看| 亚洲极品| 伊人久久大香线蕉无码| 欧美情色男人的天堂| 超清中文乱码字幕| 国产毛片精品一区二区色欲黄A片| 97热视频在线观看| 免费观看国产小粉嫩喷水精品午| 欧美老熟另类| 97AV在线观看| 能看的AV| 国产精品久久久亚洲第一牛牛_在线观看 | 美女诱惑久久| 九九香蕉网| 青青草一本道福利视频| 欧美日本一区二区a人| 欧美变态激情网| 日韩免费高清大片在线| 爱干爱射网啊啊啊| 欧美精品久久96人妻无码| 欧美亚洲性爱一区二区| 九九AV| 少妇99成人麻豆| 日日爱99| 日本不卡三级网在线播放| 黄片www视频免费| 韩国轻伦国内自拍一区| 亚洲国产另类在线中文| 久久9亚洲| 自拍内地三级在线观看| 狠狠干精品一二三四五六2022| 久草精品国产99| 综合网欧| 亚洲无吗在线视频| 粉嫩久久久极品| 熟女乱伦二区| 97天天| 无码欧美有限公司| 五码视频在线观看| 97丝袜亚洲在线播放| 成人网站 免费观看| 97 国产精品| 五月丁香影院| 美女裸体无遮挡永久免费观看网站| 99国产精品在线观看| 强奸乱伦AV网址| 国产精品久久久久久9999| 日本精品一区二区中文字幕| 亚洲少妇视频| 丰满少妇一区二区三区专区| 国产三级资源在线观看| 99精品丰满人妻无码| 丁香五月激情婷婷| 国产精品免费久久久久久久久久| 欧美久久久15P| 成人乱码一区二区三少妇| 欧美色图另类图片| 91亚洲不卡一区| 国产亚洲精品农村妇女| 97中文综合| 亚洲精品一二三四区| 人人看欧美性爱| 蜜屁av| 国产成自自拍在线观看| 日韩性爱视频免费在线 | 日本三级久| 日韩一级性爱无码| 加勒比性爱成人在线| 色哟哟国产精品免费网址| 精品少妇人妻av久久免费| 欧美丝袜亚洲| 亚洲AV资源| 国产精品岛国片在线观看| 国内外内射高清视频| 国产第二页| 东京热激情视频一二三区| 国产啊v在线免费播放| 啊啊啊啊好多水| av线电影| 俺去久久| 久久精品三级影视| 被窝影院午夜看片无码| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 日韩欧美视频青青| 激情黄色片在线观看| 久9爱精品| 91精品婷婷国产综合久久竹菊| 无码99| 播播亚洲小说亚洲| 日韩成人私密一级精品av| 9美女超碰在线免费观看| 躁躁日曰躁2020| 欧美色五月| 温婉少妇玩3p| av爱爱爱| 综合第一页| 一本色道久久综合亚洲二区三区| 日本一区二区三区精品| www.91久久| 影音先锋视频在线| 天天看精品动漫视频一区| 91色夜| 玖日综合网| 97视频www| 欧美激情片一区二区| 大奶啊啊好爽| 色婷视频| www…国产操逼| 亚洲乱伦图片视频| 色黄污美女啪啪啪免费网站| 久久久久久久九九九九| 国内一级精品| www.成人无码| 99re在线视频| 欧美亚洲宗合色性图| 91日日| 欧美天天谢综合网| 国产欧美日韩一区二区三区| 国产剧情AV不卡在线观看| 日韩精品资源专区二区| 国产久久久久久| AV女优男人的天堂| 91n处女在线观看| 素人伊尹大香蕉免费下载视频| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 性色av大全| 亚洲在线| 综合97| 高清孕妇孕交 交| 亚洲精品国产拍免费91在线| 国产午夜福利合集| 亚洲色欧| 精品日日人妻| 日本二三四区| 一起草视频在线| 亚洲欧美另类图片| 欧美AB在线| a级免费在线观看| 搡老女人911熟妇老熟女| 18禁看网站一区| 另类小说综合网| 亚洲天堂AV在线播放| 强歼乱伦资源网| 天天插天天操| 伊人AAA| 久极品在线观看| 久久伊人青青草| 2019亚洲男人天堂|