Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 下偵測 USB 隨身碟連接狀態的三種實用方法

編輯:Linux 教學

Linux 文件系統採用異步寫入機制,數據先進緩衝區再刷入介質。若未 umount 直接拔除 USB 隨身碟,程序仍回傳成功,實際數據卻可能遺失。掌握可靠的連接狀態偵測方法,對資料安全至關重要。

方法一:/proc/scsi/usb-storage 介面(傳統內核)

USB 存儲驅動在設備插拔時會更新 /proc/scsi/usb-storage-0/0(路徑因內核版本與控制器編號而異),關鍵字段 Attached: Yes/No 直接反映連接狀態:

cat /proc/scsi/usb-storage-0/0
# 輸出片段
  Attached: Yes   # 已連接
  Attached: No    # 已拔除

注意:此狀態與是否 mount 無關,僅反映硬件連接層面。

方法二:lsusb 與 /sys/bus/usb/devices 遍歷(通用現代系統)

# 列出所有 USB 設備
lsusb -t

# 針對存儲類設備(Class=08 Mass Storage)
lsusb -d : | grep -i "mass storage"

# 內核 sysfs 介面,實時監控
watch -n 1 'ls /sys/bus/usb/devices/ | grep -E "^[0-9]+-[0-9]+"'

/sys/bus/usb/devices/ 下每個設備目錄包含 idVendor、idProduct、manufacturer、product 等屬性文件,腳本可解析判斷特定隨身碟是否在線。

方法三:udev 規則 + 系統日誌(事件驅動,推薦生產環境)

建立 /etc/udev/rules.d/99-usb-monitor.rules:

# USB 存儲設備插入
ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/usb-notify.sh add %k %n"
# USB 存儲設備拔除
ACTION=="remove", SUBSYSTEM=="block", SUBSYSTEMS=="usb", RUN+="/usr/local/bin/usb-notify.sh remove %k %n"

配套腳本 /usr/local/bin/usb-notify.sh:

#!/bin/bash
ACTION=$1
DEV=$2
PART=$3
TIMESTAMP=$(date '+%F %T')
echo "[$TIMESTAMP] USB $ACTION: /dev/$DEV$PART" >> /var/log/usb-events.log
# 可擴展:發送郵件、推送 Webhook、觸發備份腳本等

此法無需輪詢,即時響應,並留存完整審計軌跡。

進階:Python 跨平台偵測範例

import psutil, time

def list_usb_disks():
    return [p.device for p in psutil.disk_partitions() 
            if 'removable' in p.opts or 'usb' in p.device]

known = set(list_usb_disks())
while True:
    time.sleep(2)
    current = set(list_usb_disks())
    added = current - known
    removed = known - current
    if added:   print(f"[{time.ctime()}] 插入: {added}")
    if removed: print(f"[{time.ctime()}] 拔除: {removed}")
    known = current

最佳實踐:生產系統採用 方法三(udev 事件驅動) 作為核心,輔以 方法二 定期巡檢校驗,確保零遺漏。所有寫入操作務必 sync 後再 umount,養成「安全移除」肌肉記憶。

Copyright © Windows教程網 All Rights Reserved