Как/Где узнать о ядре Linux? [закрытый]

Вам нужно добавить PID_FILE и SIG_NUM в dnsmasq.conf, подобное так:

# logfilename          [owner:group]    mode count size   when  flags [/pid_file]           [sig_num]
/var/log/dnsmasq.log   nobody:admin     640  5     10000  *     Z     /var/run/dnsmasq.pid  31

SIG_NUM 31 - SIGUSR2, который скажет DNSMASQ, чтобы закрыть и открыть свой файл журнала.

-121--146195-

Рекурсируя в подкаталоги

Разборки выхода Найти не является удаленным. Что, если в нем было имя файла с новой строкой? Использование Найти ... -Exec ... , который гарантирует надежную обработку.

find . -type f -exec sh -c '…' {} \;

Shell Snippet ... получает имя файла в $ 0 . Обратите внимание, что это отдельный процесс оболочки, он не наследует переменные или функции из сценария дедушка. Вы можете ускорить обработку, используя тот же подпроцесс оболочки для обработки нескольких файлов.

find . -type f -exec sh -c 'for x; do … done' _ {} +

На этот раз внутри цикла имени файла находится в переменной x .

Разбие имя файла

, вызывающее внешние утилиты, такие как , , , , вырезан и т. Д. Хрупкая: вы должны быть чрезвычайно осторожны Вам не нужно: встроенные функции обработки строки оболочки достаточно для того, что вы хотите сделать здесь. Учитывая имя файла $ x :

directory=${x%/*}
basename=${x##*/}
extension=…
if [ -n "$extension" ]; then
  mkdir -p "$directory/extension"
  mv "$x" "$directory/extension"
fi

Расширение

Что такое расширение файла? Это часть после одного из . в именах. Там нет стандарта, который говорит, какой. Вам решать, что вы считаете расширением в таких случаях, как Foo.tar.gz или BAR-1.2 .

Вот какой-то пример кода, который рассматривает общие расширения сжатия в гнездо, и это требует расширений для содержания буквы, так что Foo-1.2.tar.gz считается расширением TAR. Гз .

extension=
while case "${basename##*.}" in
        gz|bz2|xz) extension=.${basename##*.}$extension;; # stackable extension
        *) false;;
do
  basename=${basename%.*}
done
case "${basename##*.}" in
  "$basename") :;; # no . ==> no extension
  *[!0-9A-Za-z]*) :;; # only allow alphanumeric characters
  *[A-Za-z]*) extension=${basename##*.}$extension;; # non-stackable extension
  *) false;; # require at least one letter
esac
extension=${extension#.}
0
20.02.2015, 18:26
2 ответа

Что касается модулей ядра / драйверов устройств, «Драйверы устройств Linux, 3-е издание» доступны бесплатно онлайн. Есть более поздние и более глубокие книги по теме, но это хорошее начало. Одним из авторов является Грег Корух-Хартман, разработчик свинцовой ядра, у которого есть еще одна бесплатная онлайн-книга, «Ядро Linux в двух словах» .

Что касается дизайна и внутренней работы самого ядра, «Профессиональная архитектура ядра Linux» Wolfgang Mauerer - это потрясающая, очень подробная книга. Это и другие ссылки сосредоточены на ядре 2.6, но большая часть информации по-прежнему относится к 3.x.

Интерактивная карта также интересна и ссылается на перекрестную ссылку исходного кода.

1
28.01.2020, 02:36

Официальный сайт Kernel.org . Много связей для дальнейшего чтения. HOWTO может быть хорошей отправной точкой.

1
28.01.2020, 02:36

Теги

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