Вопрос или проблема
Как проверить, сколько свободного места в текущем рабочем каталоге на системе Linux?
У меня есть файл filesize
, который содержит 1073741824
, что является объемом дискового пространства в байтах, которое необходимо.
Мне нужно что-то, чтобы проверить в скрипте, что в папке есть достаточно свободного места, равного содержимому filesize * 1,25 байт. Как это сделать?
pwd
может напечатать путь к текущей папке, но как это объединить с df
?
С помощью GNU df
:
if
df --output=avail --block-size=1 . | awk '
BEGIN {getline size < "filesize"; size *= 1.25}
NR == 2 {exit !($0 >= size)}'
then
echo 'В файловой системе, в которой находится текущий рабочий каталог, достаточно доступного дискового пространства.'
fi
.
всегда является путем к текущему рабочему каталогу, в то время как вывод pwd
(который часто просто выводит содержимое $PWD
и в зависимости от оболочки, без проверки, все еще представляет собой путь к текущему рабочему каталогу) не всегда¹.
Столбец avail
в df
показывает количество пространства, доступного обычным пользователям. Это может быть меньше, чем пространство, доступное суперпользователю, так как часто процент дискового пространства зарезервирован для root
в целях экстренного восстановления, когда файловая система заполняется.
Чтобы получить свободное пространство, часть которого может не быть доступна вам, вы можете вычислить size
– used
вместо:
if
df --output=size,used --block-size=1 . | awk '
BEGIN {getline size < "filesize"; size *= 1.25}
NR == 2 {exit !($1 - $2 >= size)}'
then
echo 'Дискового пространства достаточно, но я могу его не использовать.'
fi
¹ Также сложно надежно получать его вывод, когда путь² к текущему рабочему каталогу может заканчиваться символами новой строки. Вы можете напрямую использовать $PWD
.
² Ну, pwd
выводит один путь к текущему рабочему каталогу, обычно тот, который получен из директорий, с которыми вы вызвали cd
, чтобы добраться туда. Из потенциально многих возможных путей, которые ведут к текущему рабочему каталогу, это не обязательно канонический путь, для которого вам нужно использовать pwd -P
, хотя это не имеет значения, когда этот путь передается в df
.
Ответ или решение
Чтобы проверить, сколько места свободно в текущем рабочем каталоге на системе Linux, можно использовать команду df
в сочетании с некоторыми дополнительными инструментами, такими как awk
и встроенные возможности оболочки. Ваша задача заключается в том, чтобы проверить, доступно ли достаточно места в файловой системе для хранения данных, размер которых указан в файле filesize
.
Для выполнения этой задачи, вы можете использовать следующий скрипт:
if df --output=avail --block-size=1 . | awk '
BEGIN {getline size < "filesize"; size *= 1.25}
NR == 2 {exit !($0 >= size)}'
then
echo 'Достаточно доступного дискового пространства в файловой системе, в которой находится текущий рабочий каталог.'
fi
В этом фрагменте:
- Команда
df --output=avail --block-size=1 .
возвращает доступное место в текущем каталоге в байтах. awk
считывает значение из файлаfilesize
и умножает его на 1.25, чтобы получить требуемый объем свободного пространства.NR == 2
указывает на вторую строку вывода командыdf
, где находится сам объем доступного места. Если доступное место больше или равно требуемому, код завершится без ошибок.
Если вам нужно подсчитать свободное место, которое может быть недоступно для обычных пользователей (например, из-за зарезервированной части диска для суперпользователя), вы можете использовать следующий вариант скрипта:
if df --output=size,used --block-size=1 . | awk '
BEGIN {getline size < "filesize"; size *= 1.25}
NR == 2 {exit !($1 - $2 >= size)}'
then
echo 'Достаточно дискового пространства, но я могу не иметь возможности его использовать.'
fi
Здесь:
df --output=size,used --block-size=1 .
возвращает общий размер диска и использованное пространство.- Мы вычитаем использованное пространство из общего размера, чтобы получить доступное место.
Пожалуйста, убедитесь, что файл filesize
существует и содержит числовое значение, обозначающее требуемый объем дискового пространства в байтах.
Таким образом, вышеуказанные методы позволяют вам эффективно проверить доступное свободное пространство в текущем рабочем каталоге и использовать полученные данные в ваших скриптах.