os_disk_symbol=$(echo $(lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/') non_os_disk_set=$(lsscsi -g |-E "ATA|TOSHIBA" |awk '{print $(NF-1)}' |grep -Ev $os_disk_symbol) if [[ -n $non_os_disk_set ]];then for i in $(echo "$non_os_disk_set") do rotationRate=$(smartctl -i $i |awk -F":" '/Rotation Rate/{print $2}') if [[ $rotationRate =~ "Solid State Device" ]];then echo $i |awk -F"/" '{print $3}' >> ssd_symbol_set elif [[ $rotationRate =~ "rpm" ]];then echo $i |awk -F"/" '{print $3}' >> hdd_symbol_set fi done fi
时间: 2024-04-26 08:23:01 浏览: 8
这是一个 Shell 脚本,主要作用是获取当前系统中所有硬盘的信息,并将非系统盘的硬盘区分为 SSD 和 HDD 两类,并将它们的设备符号分别保存在 ssd_symbol_set 和 hdd_symbol_set 两个文件中。具体实现步骤如下:
1. 使用 lsblk 命令获取当前系统中所有硬盘的信息,并通过 grep 命令过滤出包含 "part" 或 "boot" 字段的行,然后使用 awk 命令提取出硬盘设备符号,并使用 sed 命令将多个设备符号合并为一个正则表达式。
2. 使用 lsscsi 命令获取所有 SCSI 设备的信息,并通过 awk 命令提取出硬盘设备符号,并使用 grep 命令过滤掉系统盘的设备符号。
3. 遍历所有非系统盘的设备符号,使用 smartctl 命令获取硬盘信息,并使用 awk 命令提取出硬盘类型(SSD 或 HDD),然后将设备符号保存到对应的文件中。
最终,执行完该脚本后,可以通过查看 ssd_symbol_set 和 hdd_symbol_set 文件来获取系统中所有 SSD 和 HDD 的设备符号。
相关问题
process=$(ps -ef|grep -Ev "grep|$0"|grep -c $1)
process=$(ps -ef|grep -Ev "grep|$0"|grep -c $1) 是一个在bash脚本中用于获取指定进程的数量的命令。 这个命令首先使用ps命令获取系统中所有进程的信息,然后使用grep命令过滤掉包含关键词"grep"和"$0"的行,再使用grep命令统计包含关键词$1的行的数量。最后,将结果赋值给变量process。该变量process的值表示了指定进程出现的次数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [zabbix监控jar进程的状态,CPU内存占用--基于自动发现](https://blog.csdn.net/jjxws/article/details/123252769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [linux下ps命令 和 grep命令用法(原文http://blog.chedushi.com/archives/4007)](https://blog.csdn.net/chujiajia/article/details/51672222)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/'
这是一个Linux命令,用于列出所有磁盘分区的设备名称,并将其格式化为一个用竖线分隔的字符串。
具体命令解释如下:
1. `lsblk`:列出所有块设备的信息。
2. `grep -B1 -E "part|boot"`:查找包含“part”或“boot”关键字的行,并输出该行及其前一行。
3. `grep -E "^sd[a-z]+|^nvme"`:在上一步的结果中,查找以“sd”开头后面跟着一个或多个小写字母的行,或者以“nvme”开头的行。
4. `awk '{print $1}'`:提取每行的第一个字段,即设备名称。
5. `sed 's/ /|/'`:将每个设备名称中的空格替换为竖线。
最终输出的字符串格式为:“/dev/sda1|/dev/sda2|/dev/nvme0n1p1|...”