首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从hdparm输出中提取信息

从hdparm输出中提取信息
EN

Stack Overflow用户
提问于 2018-05-15 14:09:07
回答 2查看 563关注 0票数 1

如果您运行hdparm -I /dev/XX是您的SSD设备,它将打印类似于此的信息(只读操作)。

代码语言:javascript
复制
...
Security: 
    Master password revision code = 36401
        supported
    not enabled
        locked
    not frozen
        expired: security count
        supported: enhanced erase
...

因此,在not前面提取frozen应该很容易。

代码语言:javascript
复制
for d in $(ls /sys/block); do
    is_frozen=$(hdparm -I /dev/$d | awk '/frozen/ { print $1 }')
    echo $is_frozen
done

但是,它总是返回frozen,就好像not不存在一样。

问题

有人能解释一下如何从not行中提取frozen吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-26 19:01:06

在我的系统中,/dev/sda当前已冻结,/dev/sdb未冻结,如下所示:

代码语言:javascript
复制
# hdparm -I /dev/sda | grep frozen
        frozen
# hdparm -I /dev/sdb | grep frozen
    not    frozen

只需将$d添加到echo命令中,以查看设备及其正确的对应值(我冒昧地将冗长的awk命令替换为更短的grep):

代码语言:javascript
复制
# for d in $(ls /sys/block) ; do is_frozen=$(hdparm -I /dev/$d | grep frozen) ; echo $d $is_frozen ; done
 HDIO_DRIVE_CMD(identify) failed: Invalid argument
loop0
...
sda frozen
sdb not frozen

如果要清理输出,请将ls替换为find

代码语言:javascript
复制
# for d in $(find /sys/block -name 'sd*' -exec basename {} \;) ; do is_frozen=$(hdparm -I /dev/$d | grep frozen) ; echo $d $is_frozen ; done
sda frozen
sdb not frozen

或者让ls查询/dev/sd?代替:

代码语言:javascript
复制
# for d in $(ls -1 /dev/sd?) ; do is_frozen=$(hdparm -I $d | grep frozen) ; echo $d $is_frozen ; done
/dev/sda frozen
/dev/sdb not frozen
票数 1
EN

Stack Overflow用户

发布于 2018-05-17 11:35:20

一个可能的原因可能是你在屏幕上看到的不是awk的结果,而是stderr的结果。以下是您可以做的诊断:

  1. sda说,先放弃for循环,然后用一个设备进行测试。
  2. 将输出重定向到文件,例如$ sudo /dev/sda > /tmp/tempfile
  3. 看看你是否还能看到没有“冻结”屏幕的线条。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50352387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档