Too many inode usage [duplicate]

[ команда возвращает нулевой статус выхода, если выражение, содержащееся в его аргументах, считается истинным и ненулевым статусом выхода, если выражение, содержащееся в его аргументах, считается ложным. Он также выдает сообщение об ошибке, если его последний аргумент не ] (это сделано исключительно из эстетических соображений).

Например:

[ hello ]
echo "Exit-status of [ hello ] is:" $?
[ abc = abc ]
echo "Exit-status of [ abc = abc ] is:" $?
[ ]
echo "Exit-status of [ ] is:" $?
[ abc = def ]
echo "Exit-status of [ abc = def ] is:" $?

… выведет:

Exit-status of [ hello ] is: 0      — because non-empty string is considered true
Exit-status of [ abc = abc ] is: 0  — because 'abc' really is same as 'abc'
Exit-status of [ ] is: 1            — because empty string is considered false
Exit-status of [ abc = def ] is: 1  — because 'abc' really differs from 'def'

Однако bash и многие другие оболочки обычно не вызывают / bin / [ (или / usr / bin / [) в этих случаях, но вместо этого вызовите встроенную команду с точно таким же поведением (исключительно из соображений производительности). Чтобы вызвать / bin / [ (не встроенный суррогат оболочки), вам нужно либо явно указать его путь (например, / bin / [hello] ; вам не нужно добавлять префикс ] с именем каталога, хотя ☺ ), или настроить оболочку так, чтобы она не использовала встроенный суррогат (например, enable -n [ в bash).

С.С .: Как было сказано в других ответах, [ относится к тесту . Но test , в отличие от [, не требует ] в качестве последнего аргумента (и не ожидает этого вообще; добавление дополнительных ]] - аргументы test могут привести к сбою с сообщением об ошибке или возврату неправильного результата) . / bin / test и / bin / [ могут разрешаться в один и тот же файл (например, один связан символической ссылкой ); в этом случае изменение поведения вероятно, реализовано путем анализа вызываемой в настоящее время команды в рамках тестового / [ кода) или в различных файлах. Для test оболочка также обычно вызывает встроенный суррогат, если путь не указан явно ( / bin / test ) или не настроен так ( enable -n test ).

стр. П. С .: В отличие от test и [, современный if никогда не является реальным файлом. Это часть синтаксиса оболочки (например, bash): if commandA; затем commandB; fi (символы новой строки могут использоваться вместо точки с запятой) вызывает выполнение commandB , если и только если commandA завершился с нулевым статусом. Это идеально соответствует поведению теста или [, позволяя комбинировать их как if ["$ a" = foo]; тогда …; fi (или , если test "$ a" = foo; тогда…; fi - просто менее читаемый) .Однако современные скрипты часто используют [[ вместо test или [], которые (как if ) никогда не являются реальным файлом,но всегда является частью синтаксиса оболочки.

стр. П. П. С .: Что касается man - никогда не ожидайте, что man будет иметь статью о каждой команде в вашей файловой системе. Информация о некоторых (даже «настоящих», файловых) командах может отсутствовать, информация о некоторых встроенных оболочках может присутствовать не только в статье, посвященной конкретной оболочке (это место, где вы наверняка найдете информацию о ] тест , [, , если , [[). Тем не менее, во многих дистрибутивах есть явные man -статьи для теста и [. (О - help , он не распознается тестом по очевидной причине: он должен спокойно обрабатывать такие случаи, как a = - help; test «$ a» ]; в некоторых дистрибутивах [--help (без закрытия ] ) по-прежнему отображается справка, в некоторых - нет.)

2
06.09.2017, 11:36
1 ответ

По сравнению с моей системой у вас много файлов в /usr, поэтому я бы посоветовал продолжить поиск там, если вы просто измените / От *до *в команде будет работать в любом каталоге. Однако, если вам не с чем сравнить цифры, это может стать трудным. Вот количество файлов, которые у меня есть в подкаталогах /usr:

bin 2397
games 32
include 4607
lib 27379
local 34
sbin 271
share 1
src 22971

(сделано с для i в *; do echo -n "$i "; find $i |wc -l ; сделано)

0
27.01.2020, 22:36

Теги

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