Fiziksel bir cihazı bağlarsam, hangi cihaz dosyasının ona ait olduğunu nasıl bilebilirim?


13

Otomatik olarak takılmayan birkaç USB sürücüsünü taktığımı varsayalım. Hangi aygıt dosyasının hangi fiziksel aygıta ait olduğunu nasıl bulabilirim, örneğin onu bağlayabilirim?

Mac OS X kullanıyorum, ancak tüm (veya en azından en popüler) Unix sistemlerinde çalışan bir cevaptan hoşlanıyorum. Geçmişte Linux ile bu sorunu yaşadım.


Linux'ta cevap udev'i içeriyor. Yani OSX'te udev eşdeğerine bakmayı deneyin ; bu özellikle OSX ve OSX USB Aygıt Arabirim Kılavuzu'ndaki Alternatif Udev işlevine yol açar .
Gilles 'SO- kötü olmayı kes

MacOSX'te en basit olanı, birimleri etiketleriyle tanımlamaktır. Ancak Gilles mükemmel çözüm konusunda haklı.
peterh - Monica'yı

Yanıtlar:


14

Udev kullanma:

Yararlı bilgi sorgulaması alabilirsiniz udev(bunu kullanan sistemlerde - hemen hemen tüm masaüstü tipi Linux'lar). Örneğin, hangi bağlı sürücünün ilişkili olduğunu bilmek istiyorsanız /dev/sdb, aşağıdakileri kullanabilirsiniz:

udevadm info --query=property --name=sdb

Seri (ID_SERIAL_SHORT) dahil olmak üzere bu cihazın özelliklerinin bir listesini gösterir. Bu bilgilere sahip olarak lsusb -v, üreticinin çıktısına bakabilir ve üretici ve ürün adı gibi şeyleri öğrenebilirsiniz.

Bunu yapmanın daha kısa bir yolu

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

ve $ID_VENDOR_ID:$ID_MODEL_IDçok daha kısa çıktıda eşleşen çizgiye bakın lsusb.

Başka bir yararlı seçenek udevadm monitor. Aygıtı bağlama noktasında hangi aygıt düğümünün oluşturulduğunu bilmek istiyorsanız bunu kullanın . İlk çalıştırma

 udevadm monitor --udev --subsystem-match=block

Ardından cihazı bağlayın. Tespit edilen blok cihazların (diskler / bölümler) cihaz adlarını her bir çıktı satırının sonunda yazdırılmış olarak göreceksiniz.

Pratik bir örnek kabuk işlevi:

İşte .bashrc(veya .zshrc) içine yerleştirebileceğiniz bir işlev :

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    dsk için $ {@ - / dev / sd?}
    yapmak
        / sbin / udevadm info --query = yol --name = "$ dsk" | grep --colour = otomatik -q usb || devam et
        echo "===== $ dsk cihazı:"
        (eval $ (/ sbin / udevadm info --query = özellik --name = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && echo "Bilinmeyen" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / bağlar && echo "----- CİHAZ MONTAJ ----"
        Eko
    tamam
}

Şöyle kullanın:

  • listusbdisks- tüm /dev/sdxcihazları tanımak ;
  • listusbdisks sdbveya listusbdisks /dev/sdbveya listusbdisks sdb sdc- yalnızca belirli cihazlar hakkında bilgi almak için;
  • listusbdisks -v [optional devices as above] - ayrıntılı çıktılarını göstermek lsusb

[Düzenle]: Birçok cihazı sorgulamak, bağları kontrol etmek ve ayrıntı düzeyini kontrol etmek gibi bazı işlevler eklendi lsusb.


Gidebildiği kadar doğrudur, ancak tüm sistemler kullanmaz udev.
Caleb

@Caleb True ... Aslında lsusbisteğe bağlı bir programdır. Ancak her ikisi de son derece yaygındır.
rozcietrzewiacz

@rozcietrzewiacz Soru öncelikle OSX ile ilgili, ancak udev özünde Linux'a özgü.
Gilles 'SO- kötü olmayı kes'

@Gil Peki, doğru. OSX ile ilgili hiçbir deneyimim yok, bu yüzden cevabımı yanıltıcı olmayacak şekilde güncelledim.
rozcietrzewiacz

Genelde bu durumda yaptığım şey, cihazı takıp hemen çalıştırmak dmesg. Ancak, cihaz zaten takılıysa ve ilk cihazdan sonra daha fazla cihaz takılıysa bu yardımcı olmaz. :)
Abhishek A

3

Evrensel bir cevap yok. Linux'ta en basit yol muhtemelen sadece gnome disk yardımcı programını çalıştırmaktır ve takılı olsun ya da olmasın, algılanan tüm diskleri gösterecektir. Komut satırından blkidveya çıkışına başvurabilirsiniz udevadm info --export-db.


3

Mac OS X'te kullanmayı deneyebilirsiniz diskutil list.


1

Tüm Unix'lere gelince, bunun mümkün olduğunu düşünmüyorum.

Günümüzde olağan harici otobüsler, IDE'nin yaptığı gibi portları için sabit bir numaralandırma şeması kullanmamaktadır. Yani, ihtiyacınız olan eşleme için kalan tek veri kaynağı sürücülerin üretici adları, seri numaraları veya bölümlerin UID'leri.

Üretici adları belirli bir makinede benzersiz olmayabilir (aynı seriye ait iki harici sürücüyü bağladığınızı varsayalım - aynı şekilde tanımlayacaklardır). Seri numaraları, bölüm UID'leri gibi "dışarıdan görülemez".

Yani, aklıma gelen tek evrensel çözüm hakkında fiziksel sürücüleri seri numarası ile etiketlemek ve UDEV mevcutsa rozcietrzewiacz'ın cevabında verilen udevadm komutunu kullanmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.