drivelist, 在所有主要操作系统中列出计算机中所有连接的驱动器

分享于 

11分钟阅读

GitHub

  繁體 雙語
List all connected drives in your computer, in all major operating systems.
  • 源代码名称:drivelist
  • 源代码网址:http://www.github.com/resin-io-modules/drivelist
  • drivelist源代码文档
  • drivelist源代码下载
  • Git URL:
    git://www.github.com/resin-io-modules/drivelist.git
    Git Clone代码到本地:
    git clone http://www.github.com/resin-io-modules/drivelist
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/resin-io-modules/drivelist
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    driveList

    在所有主要操作系统中列出计算机中所有连接的驱动器。

    Current ReleaseLicenseDownloadsTravis CI statusAppVeyor statusDependency statusGitter Chat

    注意,这里 MODULE 不需要管理员特权来获取任何支持操作系统中的驱动器。

    支持:

    • Windows。
    • gnu/linux发行版包括 linuxudev。
    • Mac OS X。

    drivelist 核心由一组使用技术构建的脚本组成,这些技术在目标操作系统( 像 Bash,VBScript等) 上默认可用。 每个脚本都尝试获得关于可用驱动程序( ( 与它们相关的元数据),等等,你可以在 scripts/ 目录中找到这些脚本)的任何方法的信息,这些信息都是关于可用驱动程序。

    这些脚本可以打印出它们以预定义的方式收集到的所有驱动器信息,基于YAML的语言。 脚本将输出一组块( 用空行分隔),每个块表示一个带有一组键/值对的驱动器。 我们期待的精确键在继续改进 MODULE 时,但是你可以看到当前所需的键通过操作系统。

    这就是在本文写作时,原始输出如何查看我的eval Pro:

    $./scripts/darwin.sh
    enumerator: diskutil
    busType: UNKNOWN
    busVersion: "0.0"device:/dev/disk0
    raw:/dev/rdisk0
    description: "APPLE SSD TS128E"error: null
    size: 121332826112
    blockSize: null
    logicalBlockSize: null
    mountpoints: []
    isReadOnly: False
    isSystem: True
    isVirtual: null
    isRemovable: null
    isCard: null
    isSCSI: null
    isUSB: null
    isUAS: null
    enumerator: diskutil
    busType: UNKNOWN
    busVersion: "0.0"device:/dev/disk2
    raw:/dev/rdisk2
    description: "SD Card Reader"error: null
    size: 31104958464
    blockSize: null
    logicalBlockSize: null
    mountpoints:
     - path: "/Volumes/Patchwork"isReadOnly: False
    isSystem: False
    isVirtual: null
    isRemovable: null
    isCard: null
    isSCSI: null
    isUSB: null
    isUAS: null

    由于模块的简单性,支持新的操作系统仅仅是为 scripts/ 添加一个新脚本,并输出上述示例。 挑战在于,我们必须确保所有平台脚本都输出一致的输出。

    用户执行 drivelist.list() 时,MODULE 检查客户端的操作系统,并将相应的驱动器扫描脚本作为子进程执行。 然后解析脚本的输出作为对象的一个,并将它返回给用户。

    示例( 根据你的机器,输出会有所不同):

    constdrivelist=require('drivelist');drivelist.list((error, drives) => {
     if (error) {
     throw error;
     }
     console.log(drives);
    });

    Mac OS X:

    [{
     enumerator: 'diskutil',
     busType: 'UNKNOWN',
     busVersion: '0.0',
     device: '/dev/disk0',
     raw: '/dev/rdisk0',
     description: 'APPLE SSD TS128E',
     error: null,
     size: 121332826112,
     blockSize: null,
     logicalBlockSize: null,
     mountpoints: [],
     isReadOnly: false,
     isSystem: true,
     isVirtual: null,
     isRemovable: null,
     isCard: null,
     isSCSI: null,
     isUSB: null,
     isUAS: null
    }, {
     enumerator: 'diskutil',
     busType: 'UNKNOWN',
     busVersion: '0.0',
     device: '/dev/disk1',
     raw: '/dev/rdisk1',
     description: 'APPLE SSD TS128E',
     error: null,
     size: 120473067520,
     blockSize: null,
     logicalBlockSize: null,
     mountpoints: [
     { path: '/' },
     { path: '/private/var/vm' }
     ],
     isReadOnly: false,
     isSystem: true,
     isVirtual: null,
     isRemovable: null,
     isCard: null,
     isSCSI: null,
     isUSB: null,
     isUAS: null
    }, {
     enumerator: 'diskutil',
     busType: 'UNKNOWN',
     busVersion: '0.0',
     device: '/dev/disk2',
     raw: '/dev/rdisk2',
     description: 'SD Card Reader',
     error: null,
     size: 31104958464,
     blockSize: null,
     logicalBlockSize: null,
     mountpoints: [
     { path: '/Volumes/Patchwork' }
     ],
     isReadOnly: false,
     isSystem: false,
     isVirtual: null,
     isRemovable: null,
     isCard: null,
     isSCSI: null,
     isUSB: null,
     isUAS: null
    }]

    gnu/linux

    [{
     enumerator: 'lsblk',
     busType: 'UNKNOWN',
     busVersion: '0.0',
     device: '/dev/sdb',
     raw: '/dev/sdb',
     description: 'Storage Device',
     error: null,
     size: 31914983424,
     blockSize: null,
     logicalBlockSize: null,
     mountpoints: [{
     path: '/media/jonas/Etcher 1.2.0' }],
     isReadOnly: false,
     isSystem: false,
     isVirtual: null,
     isRemovable: null,
     isCard: null,
     isSCSI: null,
     isUSB: null,
     isUAS: null
    }, {
     enumerator: 'lsblk',
     busType: 'UNKNOWN',
     busVersion: '0.0',
     device: '/dev/sda',
     raw: '/dev/sda',
     description: 'Samsung SSD 850',
     error: null,
     size: 120034123776,
     blockSize: null,
     logicalBlockSize: null,
     mountpoints: [{
     path: '/' }, {
     path: '/boot/efi' }],
     isReadOnly: false,
     isSystem: true,
     isVirtual: null,
     isRemovable: null,
     isCard: null,
     isSCSI: null,
     isUSB: null,
     isUAS: null
    }]

    Windows

    [{
     enumerator: 'SCSI',
     busType: 'SATA',
     busVersion: '2.0',
     device: '?scsi#disk&ven_wdc&prod_wd1600bevs-07rst#4&5a60d67&0&000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}',
     raw: '.PhysicalDrive0',
     description: 'WDC WD1600BEVS-07RST0',
     error: null,
     size: 160041885696,
     blockSize: 512,
     logicalBlockSize: 512,
     mountpoints: [{
     path: 'D:' }],
     isReadOnly: false,
     isSystem: true,
     isVirtual: false,
     isRemovable: false,
     isCard: false,
     isSCSI: true,
     isUSB: false,
     isUAS: false}, {
     enumerator: 'SD',
     busType: 'SD',
     busVersion: '2.0',
     device: '?sd#disk&generic&sc16g&8.0#5&c518b2e&0&c3964099&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}',
     raw: '.PhysicalDrive4',
     description: 'Generic SC16G SD Card',
     error: null,
     size: 15931539456,
     blockSize: 4096,
     logicalBlockSize: 512,
     mountpoints: [{
     path: 'G:' }, {
     path: 'H:' }],
     isReadOnly: false,
     isSystem: false,
     isVirtual: false,
     isRemovable: true,
     isCard: true,
     isSCSI: true,
     isUSB: false,
     isUAS: false}, {
     enumerator: 'SCSI',
     busType: 'USB',
     busVersion: '2.0',
     device: '?scsi#disk&ven_usb3.0&prod_#000000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}',
     raw: '.PhysicalDrive2',
     description: 'USB3.0 SCSI Disk Device',
     error: null,
     size: 500107862016,
     blockSize: 4096,
     logicalBlockSize: 512,
     mountpoints: [{
     path: 'E:' }],
     isReadOnly: false,
     isSystem: false,
     isVirtual: false,
     isRemovable: true,
     isCard: false,
     isSCSI: true,
     isUSB: false,
     isUAS: true}, {
     enumerator: 'SCSI',
     busType: 'SATA',
     busVersion: '2.0',
     device: '?scsi#disk&ven_samsung&prod_ssd_850_evo_m.2#4&5a60d67&0&020000#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}',
     raw: '.PhysicalDrive1',
     description: 'Samsung SSD 850 EVO M.2 120GB',
     error: null,
     size: 120034123776,
     blockSize: 512,
     logicalBlockSize: 512,
     mountpoints: [{
     path: 'C:' }],
     isReadOnly: false,
     isSystem: true,
     isVirtual: false,
     isRemovable: false,
     isCard: false,
     isSCSI: true,
     isUSB: false,
     isUAS: false}, {
     enumerator: 'USBSTOR',
     busType: 'USB',
     busVersion: '2.0',
     device: '?usbstor#disk&ven_disk&prod_name&rev_ax10#0012345667888&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}',
     raw: '.PhysicalDrive3',
     description: 'Disk Name USB Device',
     error: null,
     size: 1000204886016,
     blockSize: 512,
     logicalBlockSize: 512,
     mountpoints: [{
     path: 'F:' }],
     isReadOnly: false,
     isSystem: false,
     isVirtual: false,
     isRemovable: true,
     isCard: false,
     isSCSI: false,
     isUSB: true,
     isUAS: false}]

    安装

    通过运行以下命令安装 drivelist:

    $ npm install --save drivelist

    文档

    drivelist.list(callback )

    种类: drivelist的static 方法。
    摘要: 列出可用驱动器
    访问: public

    参数类型说明
    回拨function回调( 错误,驱动器)

    示例

    constdrivelist=require('drivelist');drivelist.list((error, drives) => {
     if (error) {
     throw error;
     }
     drives.forEach((drive) => {
     console.log(drive);
     });
    });

    测试

    执行以下操作来运行测试套件:

    $ npm test

    我们希望能支持更多的操作系统。 请提出问题或者更好,发送一个PR来增加支持 !

    提交PR之前,请确保包含测试,并且linter运行时没有任何警告:

    $ npm run lint

    对平台脚本进行任何更改后执行以下命令:

    npm run compile-scripts

    支持

    如果你遇到任何问题,请在GitHub上引发问题。

    许可证

    项目是在 Apache 2.0许可证下许可的。


    COM  SYS  系统  lis  Drive  列表  
    相关文章