Как я могу узнать, является ли локальный жесткий диск или USB-ключ? Я бы предпочел способ сделать это без прав root./dev/sdX
ОК, очень udevadm
помогло:
Для локального жесткого диска:
udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
Для USB-ключа:
udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
bash
hardware
hard-disk
administration
маргаритка
источник
источник
Ответы:
Есть несколько способов сказать без привилегий root, многие из них хитрые / хакерские:
Использование
/dev/disk/by-id
:Если это отвечает чем-то вроде
/dev/disk/by-id/usb-blah-blah-blah
, то это USB-диск. Другие префиксовata
,dm
,memstick
,scsi
и т.д.Использование
/dev/disk/by-path
существенно не отличается:Вы получите что-то вроде
/dev/disk/by-path/pci-0000:00:1d.7-usb-0:1:1.0-scsi-0:0:0:0
. Это показывает путь устройства, ведущий к диску. В этом случае грубым путем является PCI → USB → диск. (обратите внимание-usb-
).Использование udev (я запускаю Debian. Мой
udevadm
находится в том,/sbin
что не на моем$PATH
- ваш может быть в другом месте, на вашем или без$PATH
):Вы получите тип шины, на которой включено устройство. Удалите
| grep ID_BUS
для полного списка информации (может потребоваться добавить|less
).Если вы
lshw
установили, ответ Гюйгенс также может работать:И просмотрите вывод для вашего диска. В
less
, попробуйте /sdX и посмотрите на предыдущиеbus info
строки - первая просто скажетscsi@…
, а та, что за несколько строк до нее, будет более поучительной. Тем не менее, вы действительно должны запустить это как суперпользователь, так что он может не подойти. (Симптомы: на ноутбуке, который я пробовал, был указан диск SATA, но не USB-диск - работает сsudo
обоими списками)Есть и другие, более или менее прямые, чем эти.
источник
esatap
?Я знаю решение, но, к сожалению, оно требует прав суперпользователя. В любом случае, вы все равно можете найти это полезным:
Для каждого устройства будет напечатано логическое имя (например,
/dev/sda
) и информация о шине, которая в случае устройства USB будет выглядеть примерно так: «usb @ 1: 2».Пример вывода:
источник
Вы можете использовать
lsblk
:где
-d
или--nodeps
означает, что не печатаются ведомые устройства, и-o name,tran
или--output name,tran
означает, что в списке указано только имя устройства и тип транспорта устройства. Добавьтеrm
в список выходных столбцов, чтобы увидеть, какие устройства являются съемными (1
еслиtrue
):источник
Для этого не нужны привилегии root (но многие из этих команд используют и зависят от bashisms, поэтому они не будут работать во всех POSIX-совместимых оболочках):
Есть быстрый способ спросить о :
sdX
Действительно интересный файл
capability
. На моем Debian у меня естьgenhd.h
файл, поэтому:В общем, только для того, чтобы знать, установлен ли флаг
removable
:так
работает, проверяя, имеет ли
capability
значение (которое в моемsda
примере выше 52 ) установленный1
бит (т. е. является ли оно нечетным числом).Но Linux отображает все флаги
/sys
, так что просить/sys/block/sdX/removable
намного проще! ;-)Таким образом , ключ USB может быть
removable
, но так как есть много съемных устройств, я бы предпочел , чтобы убедиться , что размер среды больше 0 (как незагруженном лоток CD-ROM, для образца) и что устройство находится не в использование: при просмотреsdX/trace/enable
не привязано:Примечание: все это хорошо протестировано на bash v4.2 +.
В bash вы можете использовать этот очень быстрый и эффективный способ:
В моей системе есть 4 USB-ключа, но один из них (
sde
) уже смонтирован, поэтому вывод предыдущей команды:Мой сценарий:
Я написал небольшую функцию bash для установки обновленного Debian Live.
# Первая часть отображает только читаемый размер. Функция начинается там.
Это присваивает ответ в виде массива переменной, заданной в качестве первого аргумента, или переменной
$REPLY
:(Последнее поле может содержать пробелы.)
источник
…,device/{model,type,vendor,uevent}
? (2) Можете ли вы объяснить ваши команды GENHD и ваши команды «трассировки / включения»? (3) Ваш[ $(( $(< $file ) & 1 )) -ne 0 ]
тест может быть упрощен (сокращен) до(( $(< $file ) & 1 ))
./usr/src/*/include/linux
. Попробуйsed -ne 's/#define.*GENHD_FL_\([A-Z0-9_]*\)[ \t]*\([0-9]*\) \?.*$/GENHD_FLAGS[\2]="\1"/p;' /usr/src/*/include/linux/genhd.h
. (3) Да.Я предлагаю просто использовать
hdparm
илиlshw
(что вам может потребоваться установить) и использоватьsudo
для запуска его от имени пользователя root.все должны дать вам информацию.
источник
hdparm -i /dev/sda /dev/sda: HDIO_DRIVE_CMD(identify) failed: Invalid exchange HDIO_GET_IDENTITY failed: Invalid argument
Просто прочитайте стоимость
/sys/block/sdX/removable
.Например:
/dev/sdc
USB-ключ (это может быть SD-карта или любой другой съемный носитель).источник
dmesg
это самый простой метод:( будучи именем вашего устройства, например, )
sdX
sda
Из приведенной выше команды вы увидите следующее:
источник
dmesg
читает буфер кольцевых сообщений ядра, так что это решение будет работать относительно недавно после перезагрузкиВы можете использовать приведенные ниже команды для получения узлов устройств SD, USB и SATA.
источник
/dev/sdX
Как я могу узнать, является ли это локальный жесткий диск или USB-ключ?». Пожалуйста, объясните, как ОП может использовать ваши команды, чтобы сделать это. определение. (2) Мы предпочитаем ответы, которые дают команды и объясняют их, а не ответы, которые предоставляют только команды. Пожалуйста, объясните, что вы делаете. Пожалуйста, не отвечайте в комментариях; отредактируйте свой ответ, чтобы сделать его более понятным и полным. … (Продолжение)awk
очень мощный инструмент. Многие новички публикуют ответы, которые делаютgrep
и направляют свои результатыawk
. Это редко необходимо;awk
может сделать сопоставление с образцом и может выбрать нужный ввод без помощиgrep
. У вас есть конвейер из двухgrep
команд, переданных по каналуawk
, а затем втораяawk
команда. Это может быть значительно упрощено; пожалуйста, попробуй. (4) Кроме того , для ясности, вы можете захотеть изменить`…`
на$(…)
- см это , это и это .Я ленивый, Инси говорит мне это легко:
Я считаю, что это также говорит мне, если это FireWire и, возможно, еще один тип, но я должен был бы перепроверить, не использовал эти типы в какое-то время.
Он также сообщает мне, используя -p, если разделы являются удаленными, например, samba или nfs mounts.
источник
После подключения USB-устройства запустите
dmesg
окно консоли. Вам будут предоставлены некоторые подсказки.Например, он говорит что-то вроде «Устройство подключено, запоминающее устройство / dev / sdd».
источник