Câu trả lời:
Để kiểm tra xem một thiết bị cụ thể có được kết nối hay không, bạn có thể sử dụng grep
với -q
tùy chọn để tìm kiếm đầu ra của lsusb
, hoặc lsblk
, ví dụ
uuid=f9035fce-b3a1-4aee-80ef-44e432b78fdb
lsblk -f | grep -wq $uuid && echo yes || echo no
devicename="some Inc. Keyboard"
lsusb | grep -q "$devicename" && echo yes || echo no
hoặc với if
:
uuid=f9035fce-b3a1-4aee-80ef-44e432b78fdb
if lsblk -f | grep -wq $uuid; then
echo yes
else
echo no
fi
Cả hai có thể được sử dụng cho dù thiết bị được gắn.
/dev/disk/
chứa các thư mục sau, chứa liên kết tượng trưng đến các thiết bị thực. Các liên kết này được tạo và xóa một cách linh hoạt bởi udev
vì vậy chúng luôn được cập nhật:
Vì vậy, kiểm tra sự tồn tại của symlink sẽ sử dụng ít tài nguyên hơn.
Dưới đây là một ví dụ kiểm tra sự hiện diện của đĩa bằng số sê-ri của nó:
test -e /dev/disk/by-id/wwn-0x5002538d408be9e0 && echo yes || echo no
Trong tập lệnh sao lưu của tôi, tôi thậm chí không kiểm tra sự hiện diện của đĩa, tôi chỉ kiểm tra kết quả của mount
lệnh như thế này:
mount -o noatime $DESTINATION_PARTITION $DESTINATION_DIR || exit 1
lsusb
để liệt kê thiết bị usb được kết nối nếu đĩa ngoài của bạn được kết nối qua giao diện USB.
lsblk -f
để liệt kê các thiết bị khối, UUID và các điểm gắn kết của chúng vì đĩa bên ngoài của bạn là một thiết bị khối.
-f
liệt kê các điểm gắn kết? Đầu ra mặc định liệt kê chúng bằng mọi cách
findfs
được làm cho điều này. Bạn có thể tìm kiếm bằng cách:
Nhãn FS
findfs LABEL="Ubuntu" &>/dev/null
Uuid
findfs UUID="f9035fce-b3a1-4aee-80ef-44e432b78fdb" &>/dev/null
Nhãn GPT
findfs PARTLABEL="EFI system partition" &>/dev/null
findfs PARTUUID="85e66d2f-3709-4060-938e-ffe836433cc9" &>/dev/null
Tìm kiếm là trường hợp nhạy cảm. Nếu nhiều phân vùng khớp, chỉ có cái cuối cùng được hiển thị.
lsblk -f | grep f9035fce-b3a1-4aee-80ef-44e432b78fdb | grep / -q && echo yes || echo no
.