Получил ответ:
$ read IPETH0 IPLO <<< $(ifconfig | awk '/inet[[:space:]]/ { print $2 }' | cut -d ':' -f 2)
$ echo "${IPETH0}"
192.168.23.2
$ echo "${IPLO}"
127.0.0.1
Это принимает порядок eth0
и lo
интерфейсы, но это показывает основную идею.
awk
Можно сделать это исключительно в awk
использование split
функция:
$ read IPETH0 IPLO <<< $(ifconfig | awk '/inet[[:space:]]/ { split($2,a,":"); print a[2]}')
du
, как и любая команда, рекурсивно просматривающая деревья каталогов, работает следующим образом:
du
системный вызов stat
предоставляет тип файла (в частности, каталог) и размер. Изначально имена берутся из командной строки. DIRECTORY / ENTRY_NAME
) и действуйте рекурсивно, начиная с шага 1. Этот шаг может быть выполнен частично параллельно с предыдущим (зависит от реализации). rm
работает и удаляет файлы один за другим. Иногда du
считывает имя файла на шаге 2, но к тому времени, когда он начинает обрабатывать его на шаге 3, rm
удаляет его. Видите ли вы эту ошибку вообще и сколько раз зависит от относительной скорости rm
и du
и в значительной степени непредсказуемо.
¹ Существует только два способа прямого доступа к файлу: по пути (включая информацию о каталоге, относительную или абсолютную) или (если файл открыт) по дескриптору.
Просто проигнорируйте ошибку du command
Согласно этой ссылке, я мог бы проигнорировать ошибки du
, просто упомянув,
du 2> >(grep -v '^du: cannot \(access\|read\)' >&2)
Но мне более конкретно интересно знать, что происходит с удалением файлов. Особенно меня интересует, почему команда du
не могла указать размер и почему она сообщает об ошибке, когда команда rm
развязала файлы.
Это объясняется в ссылке на эту . Я просто перефразирую, чтобы посмотреть, что здесь произошло.
rm
развязала связь с файлом. (т.е. удалить имя файла
запись из родительской директории). du
сообщает, что
он не видит ни файла, ни каталога. Верификация
Я провел еще несколько исследований по проверке того, что файлы на самом деле не связаны.
Я получил pid
процесса rm, используя ps
команду. Теперь я выдал следующую команду, чтобы проверить, доступны ли файлы.
lsof +L | grep 11771
Команда, приведенная выше, дала мне нижеследующий вывод.
rm 11771 root 4r DIR 8,17 175882240 2 47333397 /foldername/filename
Итак, согласно вышеуказанному выводу, файл не связан.
Поскольку команда rm
все еще выполняется, команда du
сообщает об ошибке.