Автор Гілка: визначення USB  (Прочитано 1504 раз)

Відсутній crchemist

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
  • I Love YaBB 2!
визначення USB
« : 2009-02-05 15:18:58 »
Привіт. Маю зробити лаборотарну і суть її така щоб знайти всі підключені usb-пристрої і на якийсь з них скопіювати файл. На чому буде написана для мене нема різниці. В мене проблема - не знаю як визначити usb-пристрої. питання: може є якась функція в стандартній бібліотеці (в libc чи як вона називається) яка поверне список usb пристроїв? або хоча б якась шелівська команда яка вміє повертати такий список? і ще одне питання - як мені визначити куда той пристрій замонтований? є файл /etc/fstab (в мене федора9) але його тра парсити ше якось - може є якась команда яка для заданого пристрою повертає стрічку в якій написано куди він замонтований (шелівська к-да або з ф-ція з libc)?

Praporshic

  • Гість
Re: визначення USB
« Відповідей #1 : 2009-02-05 15:31:04 »
man lsusb до просвітління. Для отримання подібної інформації у Linux достатньо вміти читати вміст текстових файлів що лежать у відповідних місцях /proc та /sys

Відсутній crchemist

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
  • I Love YaBB 2!
Re: визначення USB
« Відповідей #2 : 2009-02-05 15:47:27 »
Спасибі. Але то троха не те що я хотів. Вона мені видає: [crchemist@test PyUSB-1.6]$ /sbin/lsusb
Bus 001 Device 004: ID 0421:007b Nokia Mobile Phones
Bus 001 Device 003: ID 0db0:6877 Micro Star International RT2573
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 09da:022b A4 Tech Co., Ltd
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
[crchemist@test PyUSB-1.6]$
Але мені потрібно тільки шляхи до пристроїв (наприклад /dev/sdb). (наскільки я знаю кожен пристрій має свій файл в /dev/). Коли я буду мати шось типу /dev/sdb я зможу подивитись куди він змонтований в /etc/fstab. Я знаю що вся інформація про систему знаходиться в /proc але навіть уявлення не маю де шукати потрібну мені інформацію. Проблемою пошукати за стрічкою  /dev/sdb в fstab не буде бо напишу на пітоні. Єдине що мені потрібно - список usb пристоїв в вигляді "/dev/sdb\n /dev/usb2\n....". Зліплю скриптик з шелівських команд і пітона.

Praporshic

  • Гість
Re: визначення USB
« Відповідей #3 : 2009-02-05 15:48:57 »
Тоді треба лізти у /proc та /sys.

Відсутній crchemist

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
  • I Love YaBB 2!
Re: визначення USB
« Відповідей #4 : 2009-02-05 16:00:59 »
знайшов замінник /etc/fstab - /proc/mounts
[crchemist@test ~]$ cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,relatime,errors=continue,user_xattr,acl,data=ordered 0 0
/dev /dev tmpfs rw,relatime,mode=755 0 0
/proc /proc proc rw,relatime 0 0
/sys /sys sysfs rw,relatime 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620 0 0
/dev/sda1 /boot ext3 rw,relatime,errors=continue,user_xattr,acl,data=ordered 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
gvfs-fuse-daemon /home/crchemist/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,relatime,user_id=500,group_id=500 0 0
/dev/sdb1 /media/Memory\040card vfat rw,nosuid,nodev,relatime,uid=500,fmask....
Останній пристрій є флешкою. Задам питання з іншого боку - як мені визначити  чи /dev/sdb1 часом не є usb? я знаю що то можна знайти в /proc але для того треба мати якесь уявлення про розміщення файлів в ньому - в мене його нема а кожен файл я не можу переглянути.

Praporshic

  • Гість
Re: визначення USB
« Відповідей #5 : 2009-02-05 16:33:40 »
Проблема: не факт що пристрій буде змонтовано.
Тому: ліземо до /sys/block та шукаємо там.
Ще дуже приємна програма - lsscsi. Ось її вивід (з -vv) для USB Flash Drive:
Цитата
[5:0:0:0]    disk    8192MB   flash drive      1.0   /dev/sdb
  dir: /sys/bus/scsi/devices/5:0:0:0  [/sys/devices/pci0000:00/0000:00:02.1/usb2/2-6/2-6:1.0/host5/target5:0:0/5:0:0:0]

Відсутній crchemist

  • Новачок
  • *
  • дописів: 3
  • Карма: +0/-0
  • I Love YaBB 2!
Re: визначення USB
« Відповідей #6 : 2009-02-05 17:09:46 »
Проблема: не факт що пристрій буде змонтовано.
Тому: ліземо до /sys/block та шукаємо там.
Ну для мене то не проблема. я писав що це лише лабораторна з ~периферійних пристроїв~ ну і крім того самому хочеться троха розібратись з лінуксом. в мене федора все автоматично монтує. Проблема в тому що в мене нема команди lsscsi (locate lsscsi нічо не видає. дивився також в /usr/sbin/ і /sbin). Тут я собі подумав що не туда дивлюсь. Маю інше питання: федора ж вміє якось автоматично при втикання флешки визначати її і монтувати. ну то напевно не федора а гном (в мене гном але кде теж так вміє) - то повинен робити напевно якийсь скрипт який можна десь подивитись. де той скрипт шукати?

Praporshic

  • Гість
Re: визначення USB
« Відповідей #7 : 2009-02-05 20:49:51 »
Проблема в тому що в мене нема команди lsscsi (locate lsscsi нічо не видає. дивився також в /usr/sbin/ і /sbin).
Так, бо її треба встановлювати. Вона є у дистрибутиві, але встановлюється лише за запитом.
Тут я собі подумав що не туда дивлюсь. Маю інше питання: федора ж вміє якось автоматично при втикання флешки визначати її і монтувати. ну то напевно не федора а гном (в мене гном але кде теж так вміє) - то повинен робити напевно якийсь скрипт який можна десь подивитись. де той скрипт шукати?
Це, здебільшого, не скрипт а udev. Можна полізти у його правила та з них дізнатись як він відрізняє пристрої.