14

Я пытаюсь определить общий размер моего жесткого диска, используя df -h , но он печатает размер каждого раздела и требует sudo .

Есть ли способ получить общий размер моего жесткого диска с помощью командной строки, не требуя разрешения root?

6 ответов6

12

Хакерский способ - обойти необходимость sudo , считывая системный журнал:

dmesg | grep blocks

Обратите внимание, что это не может быть идеальным, поэтому ваш пробег может варьироваться ...

4
cat /sys/block/sda/size

Но размер в блоке на основе блока
Я нашел этот ответ здесь.
Другие решения здесь.

Или вы можете попробовать удиски

udisks --show-info /dev/sda | egrep "^[[:space:]]*size" | awk '{print $2}'
3

Если вы хотите использовать эту информацию в сценарии, например, с помощью

sudo blockdev --getsz /dev/sda

может быть проще, чем fdisk или hdparm, поскольку он только дает вам соответствующую информацию (просто умножьте на 512). Тем не менее, это также потребует sudo.

Конечно, вы можете изменить конфигурацию sudo так, чтобы она позволяла выполнять эту конкретную команду без запроса пароля (я думаю, blockdev --getsz довольно безопасен, даже если выполняется обычным непривилегированным пользователем).

Это можно сделать, добавив следующую строку в /etc/sudoers:

ALL ALL= NOPASSWD:/sbin/blockdev --getsz /dev/*

При редактировании этого файла обязательно используйте команду sudo visudo а не обычный редактор. В противном случае очень легко сделать синтаксическую ошибку, которая приведет к тому, что он больше не сможет использовать sudo (вам придется перезагрузиться в режиме восстановления, чтобы это исправить).

3

Если вы хотите размер в байтах и только значение, например, для сценариев:

lsblk -b --output SIZE -n -d /dev/sdX
12220202

-b: вывод в байтах.
-n: нет заголовков. Мы хотим только значение чистого числа.
--output SIZE: печатать только размер столбца.
-d /dev /sdXn: устройство, размер которого мы хотим знать. X, например, d, n, например, 1 для первого раздела диска d.

Преимущества:

  • привилегии root не нужны
  • grep не нужен
  • lsblk доступен на большинстве систем Linux
1

У вас либо плохая установка, либо абсурдно параноидальный системный администратор. Я никогда не слышал о том, чтобы df требовал привилегий root. И я работал с несколькими различными разновидностями Unix / Unix-подобных операционных систем.

В любом случае, это даст вам общий размер всех разделов диска (первый столбец df - /dev/hd... или /dev/sd...) в блоках (кБ):

df | grep '^/dev/[hs]d' | awk '{s+=$2} END {print s}'

или в ГБ:

df | grep '^/dev/[hs]d' | awk '{s+=$2} END {print s/1048576}'
0

Я сейчас не на своем Linux-компьютере, но вы можете попробовать:

hdparm -I /dev/sda

или же

fdisk -l

что также вероятно потребует sudo.

Я нигде не видел, чтобы df требовал root. Это странно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .