mkdir в /cgroup создает файлы вместе с каталогами

Потому что вы заменили слово шаблоном ; вам нужно что-то вроде:

...
case "$header" in
    HEADER*) tail -n +2 rubbish.txt > rubbish.txt.out
    header="TRUE"
    ;;
    *) echo no HEADER present ;;
esac
...

Другой способ достичь вашей цели - использовать sed для удаления строки заголовка, только если она существует (здесь используется расширение GNU -i для редактирования на месте):

sed -i '1{/^HEADER/d}' rubbish.txt

Аналогичный пример для потенциальной строки нижнего колонтитула на последней ( $ ) строке файла:

sed -i '${/^TOTAL IS:/d}'  rubbish.txt
2
16.03.2016, 22:42
1 ответ

Это функция файловой системы cgroup , а не функция команды mkdir . Команда mkdir просто вызывает системный вызов mkdir . Системный вызов mkdir вызывает уровень VFS в ядре, который выполняет некоторый анализ команды и, в частности, определяет, в какой файловой системе должен быть создан каталог, анализируя иерархию монтирования. точки в дереве каталогов. Затем уровень VFS вызывает код драйвера для этой файловой системы, которым является драйвер файловой системы cgroup .

Что делает драйвер файловой системы для каждой операции файловой системы (открытие файла, чтение, запись, создание каталога, удаление каталога и т. Д.), Зависит от этого драйвера файловой системы. Файловая система для хранения на диске изменит содержимое диска, чтобы записать существование каталога в соответствии с указаниями. Сетевая файловая система отправит команду по сети. Файловая система proc сообщает информацию о процессах и ядре , а файловая система cgroup делает нечто подобное.

Поведение файловой системы cgroup описано в документации ядра .

Новые контрольные группы создаются с помощью системного вызова mkdir или команды оболочки . Свойства контрольной группы, такие как ее флаги, изменяются путем записи в соответствующий файл в этом каталоге контрольных групп , как указано выше.

Когда драйвер файловой системы cgroup получает команду mkdir на этом уровне иерархии, он интерпретирует это как «создать новую cgroup» с заданным именем. Когда он получает команду readdir (системный вызов, который перечисляет записи каталога) в / cgroup / cpu0 , он перечисляет контрольные группы на этом процессоре. Когда он получает команду readdir в / cgroup / cpu0 / group0 , он сообщает фиксированный набор файлов, которые отражают параметры этой cgroup, хранящиеся в памяти. Когда он получает команду чтения или записи для этих файлов, он сообщает или изменяет соответствующий параметр.

Разработчики cgroup предпочли полностью контролировать ее через файловую систему, а не добавлять новые системные вызовы. Это упрощает использование без необходимости разработки большого количества библиотечного кода и множества утилит.

5
27.01.2020, 21:59

Теги

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