Потому что вы заменили слово
шаблоном
; вам нужно что-то вроде:
...
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
Это функция файловой системы cgroup
, а не функция команды mkdir
. Команда mkdir
просто вызывает системный вызов mkdir
. Системный вызов mkdir
вызывает уровень VFS в ядре, который выполняет некоторый анализ команды и, в частности, определяет, в какой файловой системе должен быть создан каталог, анализируя иерархию монтирования. точки в дереве каталогов. Затем уровень VFS вызывает код драйвера для этой файловой системы, которым является драйвер файловой системы cgroup
.
Что делает драйвер файловой системы для каждой операции файловой системы (открытие файла, чтение, запись, создание каталога, удаление каталога и т. Д.), Зависит от этого драйвера файловой системы. Файловая система для хранения на диске изменит содержимое диска, чтобы записать существование каталога в соответствии с указаниями. Сетевая файловая система отправит команду по сети. Файловая система proc сообщает информацию о процессах и ядре , а файловая система cgroup делает нечто подобное.
Поведение файловой системы cgroup описано в документации ядра .
Новые контрольные группы создаются с помощью системного вызова mkdir или команды оболочки . Свойства контрольной группы, такие как ее флаги, изменяются путем записи в соответствующий файл в этом каталоге контрольных групп , как указано выше.
Когда драйвер файловой системы cgroup получает команду mkdir
на этом уровне иерархии, он интерпретирует это как «создать новую cgroup» с заданным именем. Когда он получает команду readdir
(системный вызов, который перечисляет записи каталога) в / cgroup / cpu0
, он перечисляет контрольные группы на этом процессоре. Когда он получает команду readdir
в / cgroup / cpu0 / group0
, он сообщает фиксированный набор файлов, которые отражают параметры этой cgroup, хранящиеся в памяти. Когда он получает команду чтения
или записи
для этих файлов, он сообщает или изменяет соответствующий параметр.
Разработчики cgroup предпочли полностью контролировать ее через файловую систему, а не добавлять новые системные вызовы. Это упрощает использование без необходимости разработки большого количества библиотечного кода и множества утилит.