J'ai une question concernant les ports sous Linux. Si je connecte mon périphérique via USB et que je souhaite vérifier son port, je ne peux pas le faire à l'aide de la commande lsusb, qui spécifie uniquement le numéro de bus et le numéro de périphérique sur ce bus:
[ziga@Ziga-PC ~]$ lsusb
Bus 003 Device 007: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Existe-t-il une commande qui m'indique le port auquel le périphérique est connecté directement? Jusqu'à présent, le seul moyen de le faire était de déconnecter et de se reconnecter à l'aide de la commande:
[ziga@Ziga-PC ~]$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.929510] 00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 4.378109] systemd[1]: Starting system-getty.slice.
[ 4.378543] systemd[1]: Created slice system-getty.slice.
[ 8.786474] usb 3-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
Dans la dernière ligne, on peut voir que mon périphérique est connecté à / dev / ttyUSB0 .
usb
serial-port
dmesg
71GA
la source
la source
/dev
une entréelsusb
? Ou voulez-vous répertorier tous les périphériques/dev
dérivés d'un périphérique USB physique? Ou êtes-vous simplement en train de vouloirls /dev/ttyUSB*
?ls /dev/ttyUSB*
ne listera que les ports maybee 10, mais de cette liste, je ne peux pas dire lequel correspond à mon appareil.Réponses:
Je ne suis pas tout à fait certain de ce que vous demandez. Vous mentionnez 'port' plusieurs fois, mais dans votre exemple, vous indiquez que la réponse est
/dev/ttyUSB0
: il s'agit d'un chemin de développement de périphérique et non d'un port. Donc, cette réponse concerne la recherche du chemin de développement pour chaque périphérique.Vous trouverez ci-dessous un script rapide et malpropre qui parcourt les périphériques à la
/sys
recherche de périphériques USB dotés d'unID_SERIAL
attribut. Généralement, seuls les vrais périphériques USB auront cet attribut et nous pouvons donc filtrer avec. Si nous ne le faisons pas, vous verrez beaucoup de choses dans la liste qui ne sont pas des périphériques physiques.Sur mon système, cela se traduit par:
Explication:
Les appareils qui apparaissent dans
/dev
ont undev
fichier dans leur/sys
répertoire. Nous recherchons donc des répertoires correspondant à ces critères.Nous voulons le chemin du répertoire, alors nous nous en débarrassons
/dev
.Cela nous donne le chemin
/dev
correspondant à cet/sys
appareil.Ceci filtre les choses qui ne sont pas des appareils réels. Sinon, vous obtiendrez des choses comme des contrôleurs et des concentrateurs USB.
La
udevadm info -q property --export
commande répertorie toutes les propriétés du périphérique dans un format pouvant être analysé par le shell en variables. Nous faisons donc simplement appeleval
à cela. C’est aussi la raison pour laquelle nous encapsulons le code entre parenthèses afin que nous utilisions un sous-shell et que les variables soient effacées à chaque boucle.Plus de filtrage des choses qui ne sont pas des appareils réels.
J'espère que vous savez ce que cette ligne fait :-)
la source
Vous pouvez utiliser cette commande pour explorer votre appareil si vous êtes connecté à
usb0
:la source
Vous pouvez essayer quelque chose comme ça ci-dessous.
la source
dmesg | awk '/tty/ && /USB/ {print "/dev/"$1}'
(L'équivalent mais propre ... mais toujours étrange code; pourquoi ne pas simplement ttyUSB ensemble? Et ce qui était 2x rev pour?)rev
est utilisée pour accéder au dernier champ. Elle peut être remplacée par$NF
: donnerdmesg | awk '/tty/ && /USB/ {print "/dev/"$NF}'
Peut-être aimeriez-vous connaître le chemin de l'adaptateur USB-série qui s'est connecté en dernier?
la source
En supposant que vous sachiez quel est le périphérique branché, dans 14.04 Ubuntu au moins,
usb-devices
vous trouverez la commande que vous pouvez parcourir et trouver les informations:Et la première ligne répertorie bus et port, ainsi que le numéro de périphérique
lsusb
indiqué.la source
/dev/*
chemin