Вопрос или проблема
как проверить, находится ли путь, из которого запускается скрипт, на жестком диске или твердотельном накопителе?
Я читал, что cat /sys/block/sda/queue/rotational
показывает 0
для SSD и 1
для HDD.
if [ "$(< /sys/block/sda/queue/rotational)" = 0 ]; then
echo "SSD"
else
echo "HDD"
fi
Но как это можно комбинировать с .
или $PWD
для проверки?
Что бы я сделал:
.
— это текущая директория.
#!/bin/bash
dev=$(df -P . | awk 'NR==2 {print $1;exit}')
res=$(lsblk -n -o ROTA $dev)
if ((res == 0)); then
printf '%s\n' 'SSD'
else
printf '%s\n' 'Не SSD'
fi
Примечание
lsblk
обычно уже установлен в ОС GNU/Linux. Это не так, например, в FreeBSD.
Более того, /sys/block/sda/queue/rotational
специфичен для Linux.
Ответ или решение
Чтобы проверить, на каком типе диска (HDD или SSD) находится текущий скрипт, вы можете использовать информацию, получаемую из системных файлов и команд Linux. Давайте более подробно рассмотрим, как это сделать.
Ваша идея о использовании команды df
для получения информации о файловой системе текущего каталога, а затем использование lsblk
для определения типа устройства, кажется правильной. Вот как вы можете реализовать это в Bash-скрипте:
#!/bin/bash
# Получаем устройство, на котором находится текущий каталог
dev=$(df -P . | awk 'NR==2 {print $1; exit}')
# Проверяем, является ли устройство SSD или HDD
res=$(lsblk -n -o ROTA $dev)
# Выводим результат
if (( res == 0 )); then
echo "SSD"
else
echo "HDD"
fi
Объяснение кода:
-
df -P .
: Эта команда выводит информацию о файловой системе, где находится текущий каталог (представленный точкой.
). Опция-P
делает вывод более предсказуемым. -
awk 'NR==2 {print $1; exit}'
: Мы берем вторую строку из выводаdf
, которая содержит информацию об устройстве. Первое поле – это имя устройства. -
lsblk -n -o ROTA $dev
: Командаlsblk
используется для получения информации о блочных устройствах. Опция-n
предотвращает вывод заголовка, а-o ROTA
показывает, является ли устройство вращающимся (HDD=1) или нет (SSD=0). -
if (( res == 0 ))
: Если результат (res
) равен 0, то диск – это SSD, иначе – HDD.
Важно учитывать:
-
Данный скрипт предназначен для работы в средах Linux. Команду
lsblk
обычно можно найти в большинстве дистрибутивов Linux, в то время как она может отсутствовать в других операционных системах (например, FreeBSD). -
Учтите, что данный подход основывается на стандартных путях и командах, специфичных для Linux. Если вы работаете с другой системой, вам, вероятно, нужно будет найти другие средства для получения аналогичной информации.
Этот скрипт обеспечивает простой и эффективный способ определения типа диска, на котором размещен текущий скрипт, и может быть использован в различных сценариях автоматизации и тестирования.