Как эффективно удалить 2-байтовую подпись в начале 10-мегабайтного файла журнала и cat одновременно

arch-chroot не просто создает chroot: он также создает пространство имен PID .

unshare --fork --pid chroot "$ chrootdir" "$ @"

Как следует из названия, пространство имен PID имеет собственный набор идентификаторов процессов, отличный от остальной системы. Это означает, что процессы внутри пространства имен не могут видеть процессы вне пространства имен (и, в частности, не могут их уничтожать или отслеживать), а процессы вне пространства имен видят их с разными PID.

Для получения дополнительной информации о пространствах имен прочтите мое резюме здесь и серию LWN Майкла Керриска , особенно Часть 3: Пространства имен PID и Часть 4: подробнее о пространствах имен PID , а также в более ранней статье Павла Емельянова и Кира Колышкина . как узнать пространство имен конкретного процесса? и Также может быть интересен надежный способ заключения дочерних процессов в тюрьму с помощью `nsenter:` .

Если вы хотите что-то сделать с процессом, запущенным в пространстве имен извне, вы можете использовать утилиту nsenter ; см. Есть ли команда для переключения в существующее пространство имен? . Вы также можете использовать nsenter пакет Python . Или вы можете организовать выполнение этих операций из пространства имен (это может быть или не быть хорошим решением в зависимости от вашей архитектуры и требований безопасности); легче получить доступ к чему-либо в chroot извне (просто префикс правильного пути к каталогу), чем в пространстве имен PID.

Обратите внимание, что пространства имен PID и chroot независимы.Если вы переходите к одному и тому же каталогу независимо, это не позволит вам достичь того же пространства имен PID. Если вы дважды запустите arch-chroot в одном и том же каталоге, вы закончите работу в одном каталоге, но в двух разных пространствах имен PID.

¹ Точнее, в пространстве имен предка. (Пространства имен имеют древовидную структуру, в которой дочерние элементы ограничены родительским элементом.)

0
30.04.2018, 14:10
2 ответа

Если вы хотите удалить первые 2 байта, вы можете попробовать:

dd if=orginal_file of=new_file ibs=2 skip=1

Это выведет new_fileс пропущенными первыми 2 байтами.

1
28.01.2020, 02:43

Если вы пытаетесь удалить только первые два байта, вы можете сделать это с помощью tail -c +3. Например:

$ printf 'hello\n' >> file1
$ tail -c +3 file1
llo
$ _
0
28.01.2020, 02:43

Теги

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