Просмотр информации о потреблении диска с помощью команды 'df' в AIX

Поведение ожидаемое, хотя и неочевидное. По крайней мере, в моей системе touch выполняет

utimensat(0, NULL, NULL, 0)

в первом случае ( touch file ) и

utimensat(0, NULL, [UTIME_OMIT, UTIME_NOW], 0)

во втором ( touch -m file ). Первый вызов сокращен для «установить время доступа и модификации на текущее время»; второй говорит: «Оставьте время доступа в покое и измените время модификации на текущее время».

POSIX говорит

futimens ( ) или utimensat () с нулевым указателем в качестве аргумента раз или с обоими полями tv_nsec , установленными на специальное значение UTIME_NOW.Только процесс с эффективным идентификатором пользователя, равным идентификатору пользователя файла или с соответствующими привилегиями, может использовать futimens () или utimensat () с ненулевым разом. аргумент, который не имеет для обоих полей tv_nsec значения UTIME_NOW и не имеет для обоих полей tv_nsec значения UTIME_OMIT.

( раз - третий аргумент utimensat () ). сенсорный файл подпадает под первый набор ограничений доступа: любой доступ для записи в файл позволяет изменить время доступа и модификации на «сейчас». touch -m file подпадает под второй набор ограничений доступа: вы должны быть root или владельцем файла, чтобы иметь возможность изменять время доступа и модификации на значения, которые ни оба «сейчас», ни оба «без изменений».

Существуют и другие способы изменения времени доступа и / или модификации на «сейчас» для файлов, которыми вы не владеете, но можете читать или писать:

  • чтение файла обновит только время доступа;
  • запись файл ( без его чтения) обновит только время модификации.

1
23.08.2017, 23:14
3 ответа

Вместо того, чтобы использовать trи awkдважды, просто используйте awk один раз:

df -g | awk '{ sub("%", "", $4); if ($4 >= 75) { print $4, $7 }}' | sort -n

Это заменяет знаки процента в поле 4 пустой строкой (, удаляя их ); если оставшееся значение не менее 75, выведите поля 4 и 7, а затем передайте их для сортировки.

Улучшение, основанное на запоминании одного из ответов Стефана:

df -g | awk '$4+0 >= 75 { print $4, $7 }' | sort -n

Добавление "+0" приводит к численному сравнению вместо строго строкового -сравнения.

Если вы хотите сохранить заголовок, измените критерии на:

df -g | awk 'NR < 2 || $4+0 >= 75 { print $4, $7 }' | sort -n
2
27.01.2020, 23:24

Сосредоточимся на коде awk:

awk '{print $5>=75}'

Вероятно, это должен быть

awk '$5 >= 75 { print }'

, который будет выводить текущую входную запись, если ее пятое поле численно больше или равно 75.

Судя по вывод, который вы получите, вы, вероятно, захотите проверить $4, а не $5, хотя, поскольку я предполагаю, что это четвертое поле, которое содержит процент:

df -g | tr -d '%' | awk '$4 >= 75 { print }' | head -4

Глядя на сообщение об ошибке: Используя awkв OpenBSD (которая, кажется, жалуется точно так же, как и ваша AIX awk), исходный код имеет синтаксическую ошибку, заключающуюся в том, что невозможно напечатать $5 >= 75(если не указано в круглых скобках, в этом случае он будет оцениваться как 0 (ложь) или 1 (истина)). mawkведет себя так же.

GNU awkпринимает синтаксис исходного кода, но это явно не то, что вам нужно.

1
27.01.2020, 23:24

Это ошибка... «Файловая система ГБ блокирует Свободно Используется Iused Iused Установлено на»

Решение:

# df -g | grep Filesystem | sed 's/%//g'| awk '{print $5>=75}' | head -4

0
27.01.2020, 23:24

Теги

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