Поведение ожидаемое, хотя и неочевидное. По крайней мере, в моей системе 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
или владельцем файла, чтобы иметь возможность изменять время доступа и модификации на значения, которые ни оба «сейчас», ни оба «без изменений».
Существуют и другие способы изменения времени доступа и / или модификации на «сейчас» для файлов, которыми вы не владеете, но можете читать или писать:
Вместо того, чтобы использовать 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
Сосредоточимся на коде 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
принимает синтаксис исходного кода, но это явно не то, что вам нужно.
Это ошибка... «Файловая система ГБ блокирует Свободно Используется Iused Iused Установлено на»
Решение:
# df -g | grep Filesystem | sed 's/%//g'| awk '{print $5>=75}' | head -4