Получите свободное пространство, доступное в текущем каталоге в Bash

Это там, потому что это - гарантия, сделанная Unix: каждый каталог содержит две записи, . который относится к себе, и .. который относится к родителю.

Корневой каталог текущего пространства имен является особенным в этом .. точки к тому же самому как ., но не настолько особенный для повреждения гарантии, сделанной ОС к программам. Когда те условия контракта нарушены, вещи идут не так, как надо, и все указывают пальцами.

Корневой каталог, который Вы видите, мог бы, в файловой системе на диске, на самом деле иметь другой родительский каталог. Представление файловых систем, обеспеченных в смонтированном пространстве имен, - то, что осуществляет .. = . правило для /. Таким образом, если Вы находитесь в a chroot() тюрьма, Вы будете видеть /.. = / даже при том, что кто-то за пределами тюрьмы, смотрящей на /path/to/jail/.. будет видеть /path/to вместо этого.

25
18.01.2011, 09:00
2 ответа

Вывод может быть сделан немного легче проанализировать при помощи -P опция, которая гарантирует что:

  1. Информация о каждой файловой системе всегда печатается точно на одной строке; устройство монтирования никогда не помещается на строку отдельно. Это означает, что, если имя устройства монтирования является больше чем 20 символами долго (например, для некоторой сети монтируется), столбцы неправильно выравниваются.

Это делает намного легче получить просто доступное свободное пространство:

$ df -Ph . | tail -1 | awk '{print $4}'

(-h мегабайты использования, гигабайты и так далее. Если Ваша система не имеет его, использовать -k для килобайтов только.)

Если мы передаем df путь, это только собирается возвратить 2 строки: строка заголовка и затем данные о файловой системе, которая содержит путь. Мы можем использовать хвост для захвата просто второй строки. Мы знаем, что доступное пространство находится в 4-м столбце, таким образом, мы захватываем это с awk. Это все могло быть, покончили awk:

$ df -Ph . | awk 'NR==2 {print $4}'

или много других наборов фильтров.

45
27.01.2020, 19:40
  • 1
    Можно оптимизировать команду при помощи переменной среды $PWD вместо того, чтобы использовать замену команды и устранить необходимость хвоста: df -Ph $PWD | awk 'NR==2{print $4}' –  SiegeX 18.01.2011, 06:17
  • 2
    @SiegeX: Я согласовываю выполнение во всем этом awk лучше. Я включал более длительную команду, потому что я хотел иметь пример того, как можно создать цепочку из простых команд, чтобы сделать что-то более сложное. Я обновил ответ для включения улучшения. –  Steven D 18.01.2011, 06:41
  • 3
    -P является стандартным ( P для POSIX). Но -h расширение GNU (также существующий в некоторых других системах, но например, на OpenBSD это является несовместимым с -P). –  Gilles 'SO- stop being evil' 19.01.2011, 00:55

Как насчет выполнения df -h .. Это даст Вам доступное бесплатно пространство раздела, в котором находится Ваш текущий рабочий каталог.

Небольшой пример:

 /usr/local/nagios/libexec # df -h .
 Filesystem            Size  Used Avail Use% Mounted on
 /dev/mapper/vg00-lvol1
                       9.9G  6.1G  3.4G  65% /
10
27.01.2020, 19:40

Теги

Похожие вопросы