AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1399077
Accepted
Mario Palumbo
Mario Palumbo
Asked: 2022-03-25 04:05:35 +0800 CST2022-03-25 04:05:35 +0800 CST 2022-03-25 04:05:35 +0800 CST

检查“字符串”是否是现有设备名称而不是分区名称

  • 772

例如,如果我有一个现有的设备变量/dev/sda,我想验证它不是分区的名称,而是整个磁盘的名称。
我试过这个:

[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]

但是无论var='/dev/sda'设备是否已连接,或者var='/dev/sda1'分区未安装,这都会返回 true。
因此,即使您将先前的条件与以下条件相结合:

if grep -sq "^$var " /proc/mounts; then ...

说它是磁盘名称而不是磁盘分区是不够的。

如何检查 astring是否是现有设备名称而不是分区名称?

partitioning
  • 3 3 个回答
  • 38 Views

3 个回答

  • Voted
  1. Best Answer
    steeldriver
    2022-03-25T06:47:11+08:002022-03-25T06:47:11+08:00

    您可以使用lsblk它 - 具体来说lsblk -o type应该返回part(对于分区)或disk(对于整个块设备)。

    因此,例如给出:

    $ lsblk /dev/sda
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0 238.5G  0 disk
    ├─sda1   8:1    0   9.8G  0 part
    ├─sda2   8:2    0 164.7G  0 part
    ├─sda3   8:3    0  31.1G  0 part /
    ├─sda4   8:4    0     1K  0 part
    ├─sda5   8:5    0  15.3G  0 part /usr/local
    └─sda6   8:6    0  17.7G  0 part /home
    

    然后

    $ var=/dev/sda; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
    $ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF part && echo "is a partition"
    is a partition
    

    或者

    $ var=/dev/sda; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"
    is a disk
    $ var=/dev/sda1; lsblk -ndo type "$var" | grep -qF disk && echo "is a disk"
    
    • 1
  2. pLumo
    2022-03-25T04:36:21+08:002022-03-25T04:36:21+08:00

    使用lsblk:

    var="/dev/sda"
    
    if lsblk "$var" &>/dev/null; then
       echo "Is a disk."
    else
       echo "Is not a disk."
    fi
    

    如果"$var"不是一个有效的设备,例如var="/dev/sda1",lsblk将有一个非零退出代码。


    要获取所有设备的输出:

    lsblk -dnp --output NAME
    
    • 0
  3. waltinator
    2022-03-25T04:50:24+08:002022-03-25T04:50:24+08:00

    使用mountpoint.

    来自man mountpoint:

    NAME
           mountpoint - see if a directory or file is a mountpoint
    
    SYNOPSIS
           mountpoint [-d|-q] directory | file
    
           mountpoint -x device
    
    DESCRIPTION
           mountpoint   checks   whether   the   given   directory   or  file  is  mentioned  in  the
           /proc/self/mountinfo file.
    
    • 0

相关问题

  • 是否有更好的方式为 /home/userX 构建分区/挂载

  • Linux 文件系统层次结构中的默认目录是什么意思?

  • 如何将 /usr 移动到新分区?

  • 如何从双启动计算机访问加密的主文件夹?

  • 您对台式机和家庭服务器的驱动器分区方案有什么建议?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve