上周我有一个脚本希望我的 USB 是 sdc,我正在使用这个命令
usb_path=`lsblk | grep sdc1 | awk '{print $7}'`
但后来我回来看到棒子是空的,因为棒子的名字是sdb。那么这根棍子的名字取决于什么呢?当它获得 sdc 时,我没有插入其他磁盘,现在它是 sdb,也没有插入其他磁盘。所以我能看到的唯一区别是时间,但这似乎很愚蠢。哦,这是与上周相同的 U 盘。
答案1
/中的字母b
/是一个计数器。c
sdb
sdc
检测到的第一个磁盘获取sda
,第二个磁盘获取sdb
,依此类推。
例如,如果您在插入 U 盘时连接暂时松动,则可能会跳过字母。首先,USB 棒获得sdb
,然后连接中断并重新建立,然后它获得sdc
,因为sdb
尚未释放。
由于您不能指望同一设备每次都获得相同的名称,Ubuntu 有一个目录,其中包含指向磁盘的符号链接,这些磁盘绑定到磁盘上文件系统的 ID:
/dev/disk/by-uuid/
您连接的每个磁盘上的每个分区都会在此目录中获得一个条目,并且对于同一分区,该条目始终保持不变。
如果您想访问插入特定 USB 端口的 USB 记忆棒而不是通过 USB 记忆棒的标识,您可以使用 中的条目/dev/disk/by-path
。
lsblk
如果您想要有关特定设备的信息,则接受参数。因此,lsblk | grep …
您可以使用例如lsblk /dev/disk/by-id/1234-5678
或lsblk /dev/disk/by-path/pci-0000:00:2.0-usb-0:1:1.0-scsi-0:0:0:0