精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux Shell 使用 Trap 命令優雅處理程序中斷: Shell 中的回調、鎖與事務、以及 Debug 調試

系統 Linux
通過這些高級用法,我們可以構建更健壯、更可靠的 shell 腳本。無論是處理意外中斷、實現鎖機制,還是進行調試,trap 都是一個強大的工具。

來看一個常見的場景

假設你正在開發一個數據備份腳本。這個腳本需要執行以下操作:

  • 創建臨時工作目錄
  • 將數據復制到臨時目錄
  • 壓縮打包
  • 清理臨時文件
#!/bin/bash

WORK_DIR="/tmp/backup_$(date +%Y%m%d)"

echo "開始備份..."
mkdir -p "$WORK_DIR"
echo "創建臨時目錄: $WORK_DIR"

echo "復制文件中..."
cp -r /path/to/data "$WORK_DIR/"
sleep 5  # 模擬耗時操作

echo "壓縮打包..."
tar -czf backup.tar.gz "$WORK_DIR"
sleep 3  # 模擬耗時操作

echo "清理臨時文件..."
rm -rf "$WORK_DIR"

echo "備份完成!"

如果我中斷了腳本怎么辦!

當我們運行這個腳本時,如果在執行過程中按下 Ctrl+C 中斷操作,會發生什么?

臨時目錄 $WORK_DIR 將被遺留在系統中,因為清理步驟沒有被執行。長期積累下來,這些未清理的臨時文件會占用大量磁盤空間。

使用 trap 命令改善程序

這時,trap 命令就派上用場了。trap 可以捕獲特定的信號并執行相應的處理函數。SIGINT(通常由 Ctrl+C 觸發)就是最常見的信號之一。

首先,我們定義一個中斷處理函數:

on_interrupt() {
    echo -e "\n程序被中斷!"
    echo "清理臨時文件..."
    rm -rf "$WORK_DIR"
    exit 1
}

然后,在腳本開頭使用 trap 設置信號處理:

trap on_interrupt SIGINT

完整的改進版腳本如下:

#!/bin/bash

WORK_DIR="/tmp/backup_$(date +%Y%m%d)"

# 定義中斷處理函數
on_interrupt() {
    echo -e "\n程序被中斷!"
    echo "清理臨時文件..."
    rm -rf "$WORK_DIR"
    exit 1
}

# 設置 trap
trap on_interrupt SIGINT

echo "開始備份..."
mkdir -p "$WORK_DIR"
echo "創建臨時目錄: $WORK_DIR"

echo "復制文件中..."
cp -r /path/to/data "$WORK_DIR/"
sleep 5  # 模擬耗時操作

echo "壓縮打包..."
tar -czf backup.tar.gz "$WORK_DIR"
sleep 3  # 模擬耗時操作

echo "清理臨時文件..."
rm -rf "$WORK_DIR"

echo "備份完成!"

trap 命令說明

trap 命令的基本語法是:

trap command signal

其中:

  • command 可以是函數名或直接的命令
  • signal 是要捕獲的信號名稱,如 SIGINT、SIGTERM 等

常見的信號包括:

  • SIGINT (2):用戶按下 Ctrl+C
  • SIGTERM (15):終止信號
  • EXIT:腳本退出時

你還可以同時捕獲多個信號:

trap on_interrupt SIGINT SIGTERM

通過使用 trap 命令和 on_interrupt 函數,我們實現了:

  • 優雅地處理程序中斷
  • 確保臨時資源被正確清理
  • 提供了友好的用戶提示

這種模式不僅適用于備份腳本,還可以用在任何需要資源清理的腳本中,比如:

  • 臨時文件處理
  • 數據庫連接清理
  • 鎖文件刪除
  • 進程清理

擴展:trap 命令的高級應用

多信號處理

有時我們需要對不同的信號進行不同的處理。比如在一個數據處理腳本中:

#!/bin/bash

# 定義變量
DATA_FILE="data.txt"
TEMP_FILE="temp.txt"
LOG_FILE="process.log"

# 處理 Ctrl+C
on_interrupt() {
    echo -e "\n收到 SIGINT,正在優雅關閉..."
    cleanup
    exit 1
}

# 處理 SIGTERM
on_terminate() {
    echo -e "\n收到 SIGTERM,保存進度后退出..."
    save_progress
    cleanup
    exit 1
}

# 處理正常退出
on_exit() {
    echo "程序正常結束,執行清理..."
    cleanup
}

# 清理函數
cleanup() {
    rm -f "$TEMP_FILE"
    echo "清理完成"
}

# 保存進度
save_progress() {
    echo "保存當前進度到 $LOG_FILE"
    echo "Progress saved at $(date)" >> "$LOG_FILE"
}

# 設置多重信號處理
trap on_interrupt SIGINT
trap on_terminate SIGTERM
trap on_exit EXIT

# 主程序
echo "開始處理數據..."
while true; do
    echo "處理中..."
    sleep 1
done

臨時禁用和恢復信號處理

有時我們需要臨時禁用信號處理,比如在執行關鍵操作時:

#!/bin/bash

critical_operation() {
    # 臨時禁用 Ctrl+C
    trap '' SIGINT
    
    echo "執行關鍵操作,這段時間按 Ctrl+C 無效..."
    sleep 5
    
    # 恢復信號處理
    trap on_interrupt SIGINT
    echo "關鍵操作完成,恢復正常信號處理"
}

on_interrupt() {
    echo -e "\n操作被中斷!"
    exit 1
}

trap on_interrupt SIGINT

echo "開始執行..."
critical_operation
echo "繼續其他操作..."

DEBUG 信號與調試處理

DEBUG 并不是中斷信號,而是 Bash 的一個特殊 trap 事件。它在執行每個命令之前觸發,主要用于調試目的。讓我們看一個更實用的例子:

#!/bin/bash

# 定義調試處理函數
on_debug() {
    # $1 是行號,$BASH_COMMAND 是即將執行的命令
    echo "[DEBUG] 行 $1: 準備執行 -> $BASH_COMMAND"
}

# 錯誤處理函數
on_error() {
    echo "[ERROR] 行 $1 執行失敗"
    echo "命令: $2"
    echo "錯誤碼: $?"
}

# 啟用調試跟蹤
enable_debug() {
    # -T 選項可以顯示函數調用跟蹤
    set -T
    # 設置 DEBUG trap,傳入行號參數
    trap 'on_debug ${LINENO}' DEBUG
    trap 'on_error ${LINENO} "$BASH_COMMAND"' ERR
}

# 通過環境變量控制是否開啟調試
if [[ "${ENABLE_DEBUG}" == "true" ]]; then
    enable_debug
fi

# 測試函數
test_function() {
    echo "執行測試函數"
    local result=$((2 + 2))
    echo "計算結果: $result"
}

# 主程序
echo "開始執行..."
test_function
echo "嘗試訪問不存在的文件..."
cat nonexistent_file.txt 2>/dev/null || echo "文件不存在"

使用方式:

# 普通執行
./script.sh

# 開啟調試模式執行
ENABLE_DEBUG=true ./script.sh

DEBUG 模式輸出:

[DEBUG] 行 22: 準備執行 -> trap 'on_error ${LINENO} "$BASH_COMMAND"' ERR
[DEBUG] 行 38: 準備執行 -> echo "開始執行..."
開始執行...
[DEBUG] 行 39: 準備執行 -> test_function
[DEBUG] 行 31: 準備執行 -> test_function
[DEBUG] 行 32: 準備執行 -> echo "執行測試函數"
執行測試函數
[DEBUG] 行 33: 準備執行 -> local result=$((2 + 2))
[DEBUG] 行 34: 準備執行 -> echo "計算結果: $result"
計算結果: 4
[DEBUG] 行 40: 準備執行 -> echo "嘗試訪問不存在的文件..."
嘗試訪問不存在的文件...
[DEBUG] 行 41: 準備執行 -> cat nonexistent_file.txt 2> /dev/null
[DEBUG] 行 41: 準備執行 -> echo "文件不存在"
文件不存在

文件鎖機制 trap vs flock

讓我們比較 trap 和 flock 的鎖機制:

使用 trap 的文件鎖

#!/bin/bash

LOCK_FILE="/tmp/script.lock"
PID_FILE="/tmp/script.pid"

cleanup() {
    rm -f "$LOCK_FILE" "$PID_FILE"
    echo "清理鎖文件和PID文件"
}

get_lock() {
    if [ -e "$LOCK_FILE" ]; then
        local pid
        pid=$(cat "$PID_FILE" 2>/dev/null)
        if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
            echo "另一個實例(PID: $pid)正在運行"
            exit 1
        fi
        # 如果進程不存在,清理舊的鎖
        cleanup
    fi
    
    echo $$ > "$PID_FILE"
    touch "$LOCK_FILE"
    trap cleanup EXIT
}

使用 flock 的實現:

#!/bin/bash

LOCK_FILE="/tmp/script.lock"

(
    # 獲取文件鎖,等待最多5秒
    flock -w 5 200 || { echo "無法獲取鎖,另一個實例正在運行"; exit 1; }
    
    echo "獲得鎖,開始執行..."
    sleep 10
    echo "執行完成"
    
) 200>"$LOCK_FILE"

比較分析

可靠性

  • flock 更可靠,它使用內核級文件鎖
  • trap 方式可能在極端情況下(如系統崩潰)留下孤立的鎖文件

使用場景

  • flock 適合要求嚴格的生產環境
  • trap 方式適合簡單的腳本和開發環境

推薦選擇

  • 自動處理進程終止
  • 支持超時設置
  • 提供阻塞和非阻塞模式
  • 可靠性更高
  • 推薦使用 flock,因為它:

事務的實現

#!/bin/bash

# 狀態變量
TRANSACTION_ACTIVE=false

# 動態改變信號處理
update_signal_handler() {
    if $TRANSACTION_ACTIVE; then
        # 事務進行中,設置中斷處理為提示并結束
        trap 'echo "事務進行中,已被強行中斷..."; cleanup; exit 1' SIGINT
    else
        # 非事務狀態,可以安全退出
        trap 'echo "正常退出..."; exit 0' SIGINT
    fi
}

# 清理函數
cleanup() {
    echo "執行清理操作..."
    # 這里添加實際的清理代碼
}

# 模擬事務
start_transaction() {
    TRANSACTION_ACTIVE=true
    update_signal_handler
    echo "事務開始"
    
    # 模擬事務操作
    echo "執行事務步驟 1/3"
    sleep 2
    echo "執行事務步驟 2/3"
    sleep 2
    echo "執行事務步驟 3/3"
    sleep 2
    
    TRANSACTION_ACTIVE=false
    update_signal_handler
    echo "事務完成"
}

# 設置初始信號處理
update_signal_handler

# 主程序執行流程
echo "開始執行..."
start_transaction
echo "繼續其他操作..."

執行流程說明:

腳本啟動:

  • TRANSACTION_ACTIVE 初始值為 false
  • 首次調用 update_signal_handler,設置正常的中斷處理

執行 start_transaction:

  • 設置 TRANSACTION_ACTIVE 為 true
  • 更新信號處理為事務保護模式
  • 執行事務操作
  • 完成后,設置 TRANSACTION_ACTIVE 為 false
  • 恢復正常的信號處理

信號處理行為:

  • 事務進行中收到 SIGINT:顯示中斷消息,執行清理,然后退出。
  • 非事務狀態收到 SIGINT:直接安全退出。

最佳實踐建議

  • 始終在腳本開頭定義信號處理器
  • 確保清理函數是冪等的(可重復執行)
  • 關鍵操作時考慮臨時禁用信號處理
  • 合理使用 EXIT 陷阱確保清理操作
  • 在處理函數中使用 echo -e 以支持轉義字符
  • 考慮信號處理函數的執行時間,保持簡短
  • 注意信號處理函數中的命令安全性

通過這些高級用法,我們可以構建更健壯、更可靠的 shell 腳本。無論是處理意外中斷、實現鎖機制,還是進行調試,trap 都是一個強大的工具。

責任編輯:姜華 來源: Piper蛋窩
相關推薦

2023-09-07 09:44:22

Java并發

2013-06-03 11:28:05

shell命令

2009-12-25 09:49:32

LinuxShell編程運行Shell程序

2010-03-04 15:28:01

Ubuntu Shel

2019-12-01 22:59:43

Linux shell命令進程

2016-12-16 09:23:29

LinuxShell腳本

2012-01-18 10:46:33

ibmdw

2020-12-15 09:08:40

LinuxShell

2010-06-23 17:37:14

Linux Bash

2010-06-23 17:34:03

Linux Bash

2015-08-10 14:42:40

Explain SheShell 命令

2009-12-25 09:50:14

Linux的Shell編程Shell程序設計

2010-03-23 15:24:45

Linux shell

2014-07-31 11:24:21

Linuxshell命令

2011-01-18 13:53:42

Linux Shell命令

2009-09-29 10:45:17

UnixLinuxshell

2017-03-23 14:18:30

LinuxShell命令

2017-09-04 16:20:38

Linuxshell命令

2009-12-25 09:55:18

LinuxShell編程Shell基本語法

2010-06-23 17:29:07

Linux Bash
點贊
收藏

51CTO技術棧公眾號

色94色欧美sute亚洲线路一久| 国产成人精品午夜视频免费| 中文字幕一精品亚洲无线一区| 天天干天天干天天干天天干天天干| 中文字幕在线观看日本| 国产精品69毛片高清亚洲| 欧美综合一区第一页| 性欧美疯狂猛交69hd| 色哟哟精品丝袜一区二区| 欧美日本不卡视频| 人妻少妇精品无码专区二区| www.视频在线.com| 成人午夜私人影院| 成人精品视频99在线观看免费 | 任你弄精品视频免费观看| 欧美色偷偷大香| 国产一二三区在线播放| 91青青在线视频| 99久久99久久综合| 2019国产精品视频| 黄色大全在线观看| 中日韩男男gay无套| 久久久久99精品久久久久| 国产熟妇搡bbbb搡bbbb| 视频一区在线| 欧美日韩久久不卡| 国产v亚洲v天堂无码久久久 | 日本国产精品视频| 久久亚洲av午夜福利精品一区| 精品国产一区探花在线观看 | yy6080午夜| 久久视频免费| 欧美日韩不卡视频| 亚洲这里只有精品| 吞精囗交69激情欧美| 亚洲成人一区在线| 17c丨国产丨精品视频| 黄色在线播放网站| 国产精品日韩成人| 午夜一区二区三区| 免费理论片在线观看播放老| av一区二区三区四区| 国产成人精品福利一区二区三区| 国产精品天天操| 精品在线免费视频| 成人xxxx视频| 国产精品熟女久久久久久| 久久精品久久精品| 国产精品视频最多的网站| 无码人妻一区二区三区线| 亚洲影视综合| 欧美亚洲视频在线看网址| 999这里只有精品| 亚洲视频二区| 欧美最近摘花xxxx摘花| 日本道在线观看| 国产一区二区三区久久| 5278欧美一区二区三区| 天天干天天干天天操| 久久av一区| 国产精品第100页| 最近日韩免费视频| 麻豆国产精品官网| 亚洲综合精品一区二区| 亚洲乱熟女一区二区| 成人美女在线视频| 免费国产一区二区| 国产乱理伦片a级在线观看| 欧美激情一区二区三区不卡| 一本色道久久综合亚洲二区三区| 国产剧情在线| 亚洲电影激情视频网站| 日韩精品―中文字幕| 丝袜老师在线| 欧美午夜精品一区二区蜜桃| 亚洲男人天堂2021| 久久国产精品免费精品3p| 日韩av在线免费| 日韩精品无码一区二区三区久久久 | 在线免费看黄网站| 亚洲精品视频在线观看免费| 国产一区二区三区小说| 久久91导航| 欧美一级视频精品观看| 风间由美一二三区av片| 久久在线视频| 97在线视频一区| 欧美一级黄视频| 国产a久久麻豆| 免费亚洲精品视频| 男人的天堂在线视频免费观看 | 青青青在线观看视频| 在线中文字幕播放| 欧美丰满少妇xxxbbb| 久久久久国产精品无码免费看| 深爱激情综合网| 欧美成人激情视频免费观看| 影音先锋在线国产| 国产精品一区二区在线观看不卡| 久久大片网站| 尤物在线网址| 欧美亚洲愉拍一区二区| 四虎国产精品免费| 精品一区av| 久久久久久91| 中文字幕在线播放不卡| 91亚洲永久精品| 9色视频在线观看| 香蕉成人影院| 亚洲精品美女久久久久| xxxx日本少妇| 日韩综合一区二区| 国产精品综合久久久久久| 午夜视频在线观看免费视频| 欧美日韩亚洲一区二区| 欧美熟妇精品一区二区| 成人在线免费观看网站| 91国偷自产一区二区三区的观看方式| 一区二区自拍偷拍| 久久婷婷综合激情| av网站大全免费| 中文成人激情娱乐网| 国产一区二区成人| 中文字幕亚洲精品一区| 国产成人免费在线| 视频一区亚洲| 日韩国产激情| 日韩精品免费观看| 日本三级欧美三级| 国产精品99久久久久久久vr| 一区二区精品在线| 国产精品麻豆成人av电影艾秋| 日韩av网站电影| 久久久久99精品| 国产不卡视频在线观看| avove在线观看| 电影一区中文字幕| 久久精品精品电影网| 中文字幕日韩经典| 国产精品乱人伦中文| caoporn超碰97| 成人av资源电影网站| 国产精品va在线| 久久久久久久影视| 欧美性极品少妇精品网站| 一起草在线视频| 亚洲精品欧美| 久久精品二区| 卡通欧美亚洲| 亚洲性av在线| 中文字幕91爱爱| 国产精品拍天天在线| 欧美日韩在线观看不卡| 日韩不卡一区| 成人免费网站在线观看| 成人无遮挡免费网站视频在线观看| 欧美精选午夜久久久乱码6080| 麻豆一区在线观看| 国内一区二区视频| 免费看欧美一级片| 青青一区二区| 国产精品高精视频免费| 欧美videos极品另类| 欧美一级搡bbbb搡bbbb| 精品肉丝脚一区二区三区| 91在线精品一区二区三区| 久久网站免费视频| 禁果av一区二区三区| 国产精品一区二区三区成人| v片在线观看| 精品日韩99亚洲| 影音先锋亚洲天堂| 国产精品青草久久| 黄色片子免费看| 亚洲一卡久久| 亚洲精品9999| 亚洲高清999| 欧美中文在线免费| 日本福利在线| 精品国产乱码久久久久久1区2区| 国产精品人人人人| 国产精品色在线| 国产乱国产乱老熟300部视频| 99热在线精品观看| 亚洲精品乱码视频| 盗摄牛牛av影视一区二区| 国产成人福利网站| av电影高清在线观看| 亚洲精品国产福利| 亚洲系列第一页| 亚洲超碰97人人做人人爱| 日韩影视一区二区三区| 国产成人免费av在线| 狠狠热免费视频| 欧美三级第一页| 婷婷久久五月天| 老司机aⅴ在线精品导航| 国产又爽又黄的激情精品视频| 欧美78videosex性欧美| 在线看福利67194| 蜜臀久久精品久久久久| 欧美日韩国产在线观看| 国产精品久久久免费视频| 自拍偷拍亚洲欧美日韩| 性高潮久久久久久久| 成人精品电影在线观看| 亚洲色图偷拍视频| 久久尤物视频| 国产乱淫av片杨贵妃| 99久久久久国产精品| 久久亚洲综合网| 97人人澡人人爽91综合色| 国产欧美日韩精品丝袜高跟鞋| 极品美鲍一区| 欧美成人午夜剧场免费观看| 高h视频在线| 日韩精品中文字幕久久臀| www.久久色| 欧美裸体bbwbbwbbw| 亚洲第一网站在线观看| 欧美日韩国产麻豆| 久久婷婷综合国产| 亚洲激情男女视频| 五月婷婷综合激情网| 国产色综合久久| 亚洲国产无码精品| 99久久精品国产导航| 亚洲欧洲日韩综合| 国产一区二区导航在线播放| 天堂视频免费看| 日韩二区在线观看| www.99在线| 三级欧美在线一区| 久久久久免费精品| 久久国产一二区| 日韩精品一区二区三区色欲av| 一区二区三区四区五区在线| 你懂的av在线| 亚洲精品美女91| 国产黄色一级网站| 欧美亚洲在线| 成人三级视频在线播放| 久久精品一区二区三区中文字幕| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 国产真实有声精品录音| 噜噜噜噜噜久久久久久91| 欧美性生活一级片| 久久精品日韩精品| 亚洲人成精品久久久| 欧美另类一区| 欧美猛男做受videos| 午夜精品一区二区三区在线观看| 欧美欧美黄在线二区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 欧美丝袜在线观看| 国产九色精品成人porny| 亚洲欧美激情一区二区三区| 成人午夜大片免费观看| 精品人妻一区二区三区日产乱码卜| 99久久精品一区二区| 国产又爽又黄无码无遮挡在线观看| 国产亚洲短视频| 手机av在线不卡| 亚洲码国产岛国毛片在线| 国产亚洲第一页| 欧美日韩国产在线| 蜜臀尤物一区二区三区直播| 欧美日韩激情一区二区三区| 国产女同91疯狂高潮互磨| 亚洲大胆人体在线| 九九九伊在人线综合| 中文字幕欧美国内| 污污视频在线看| 欧美最顶级丰满的aⅴ艳星| 久久麻豆视频| 国产 高清 精品 在线 a| 亚洲尤物av| 97超碰免费观看| 最新国产拍偷乱拍精品| 亚洲少妇久久久| 国产成人免费xxxxxxxx| 人妻精品久久久久中文字幕| 国产精品久久久久久一区二区三区| 国产高潮国产高潮久久久91| 欧美日韩亚洲视频一区| 国产毛片一区二区三区va在线| 亚洲国产精品热久久| 香蕉视频在线看| 91国产视频在线播放| 天堂综合在线播放| 精品久久sese| 97人人精品| 高清在线观看免费| 国产精品一区二区视频| 37p粉嫩大胆色噜噜噜| 一区二区视频免费在线观看| 怡红院av久久久久久久| 精品国产麻豆免费人成网站| 成年人在线免费观看| 国内精品美女av在线播放| 成人看片网页| 狠狠色噜噜狠狠狠狠色吗综合| 成人情趣视频网站| 九色自拍视频在线观看| 韩国午夜理伦三级不卡影院| av网站免费在线播放| 一区二区三区欧美亚洲| 中文字幕男人天堂| 日韩电影第一页| 丰满诱人av在线播放| 国产欧美一区二区| 精品理论电影| 97超碰青青草| 成人高清在线视频| 久久国产精品国语对白| 欧美三级在线视频| 加勒比一区二区三区在线| 国外色69视频在线观看| 国产亚洲观看| 正义之心1992免费观看全集完整版| 亚洲欧美成人| av黄色一级片| 洋洋av久久久久久久一区| 亚洲一区二区视频在线播放| 亚洲色图五月天| 国产日韩电影| 蜜桃精品久久久久久久免费影院 | 日本www.色| 久久人人爽爽爽人久久久| 国产乡下妇女做爰| 欧美不卡一区二区三区四区| h视频在线免费观看| 成人中心免费视频| 91综合久久一区二区| 超碰在线播放91| 欧美国产激情一区二区三区蜜月| 国产精品久久久久久人| 亚洲精选在线观看| 自拍视频在线看| 欧美欧美一区二区| 西西人体一区二区| 91久久免费视频| 91福利国产成人精品照片| 可以在线观看的av网站| 国产国语刺激对白av不卡| 国产欧美日韩在线一区二区| 国产在线青青草| 久久亚洲精品小早川怜子| 探花视频在线观看| 国产一区二区三区在线观看视频 | 国产自产精品| 亚洲影音先锋| 国产精品久久久久久久av| 欧美在线观看视频一区二区三区| 成人三级黄色免费网站| 国产美女91呻吟求| 7777久久香蕉成人影院| 亚洲av无码久久精品色欲| 亚洲最大成人综合| 手机看片1024日韩| 日本国产欧美一区二区三区| 欧美日韩国产免费观看视频| 男生操女生视频在线观看| 一区二区三区丝袜| 婷婷伊人综合中文字幕| 国产97在线观看| 亚洲欧洲美洲一区二区三区| 2025中文字幕| 色老头久久综合| 超碰电影在线播放| 国内精品久久国产| 日本欧美韩国一区三区| 欧产日产国产v| 日韩av在线一区| 亚洲ww精品| 欧美日韩精品在线一区二区| 欧美国产日韩在线观看| 精品久久人妻av中文字幕| 欧美亚洲激情在线| 香蕉久久网站| 日本黄色动态图| 欧美日韩一二区| av蜜臀在线| 日韩福利二区| 成人涩涩免费视频| 中文字幕日产av| 国内精品小视频| 天天综合网91| 少妇光屁股影院| 日韩三级中文字幕| 国产超碰精品| 国产激情在线看| 国产欧美视频一区二区| 亚洲爆乳无码一区二区三区| 日本中文字幕久久看| 欧美日韩国产高清| 亚洲一级片在线播放| 亚洲电影免费观看| 亚洲欧洲专区| 欧美精品一区二区三区免费播放|