Связь между процессами и пользовательскими пространствами имен

Вместо ls */*/*/*/*.jpgпопробуйте:

echo */*/*/*/*.jpg | xargs ls

xargs(1 )знает, какое максимальное количество аргументов есть в системе, и будет разбивать свой стандартный ввод, чтобы вызывать указанную строку команды -несколько раз с числом аргументов, не превышающим этот предел, каким бы он ни был (, вы также можете установить его ниже максимума ОС, используя опцию -n).

Например, предположим, что ограничение составляет 3 аргумента и у вас есть пять файлов. В этом случае xargsвыполнит lsдважды:

  1. ls 1.jpg 2.jpg 3.jpg
  2. ls 4.jpg 5.jpg

Часто это вполне подходит, но не всегда --например, вы не можете полагаться наls(1)сортировку всех записей для вас должным образом, потому что каждый отдельныйls-вызов будет сортировать только подмножество записей, переданных ему xargs.

Несмотря на то, что вы можете увеличить ограничение, как было предложено другими, ограничение все равно будет --, и когда-нибудь ваша коллекция JPG -снова перерастет его. Вы должны подготовить свой скрипт (s )для работы с бесконечным числом...

1
02.09.2019, 23:28
1 ответ

После долгих головных болей я думаю, что у меня есть некоторые ответы. Каждый процесс действительно является частью ровно одного пользовательского пространства имен (, как подтверждается здесь ), изображение в статье точно отображает это. Помимо init, процессы создаются другими процессами. Когда процесс создает дочерний процесс, у него есть возможность назначить дочерний процесс в новое пользовательское пространство имен, которое также называется «дочерним пространством имен» пользовательского пространства имен родительского процесса.

Так называемые сопоставления UID (идентификатора пользователя )и GID (идентификатора группы)позволяют процессу UID и GID для кажутся разными при проверке из другого пространства имен. Сопоставления важны, потому что процесс может, например, изменять файлы в системе, которая обрабатывает из других пространств имен захотят получить доступ, и они также захотят увидеть осмысленный UID или GID на эти файлы из-за пределов пространства имен.

Сопоставление UID (то же самое для GID )работает, используя UID процесса, который создает новое пространство имен, сопоставление этого с /proc/<Process_ID>/uid_mapи назначение сопоставленного UID для нового процесса в новом пространстве имен. Если сопоставление не указано при создании нового пользовательского пространства имен, то UID процессов в новом пространстве имен примет значение /proc/sys/kernel/overflowuidБолее подробную информацию о том, как можно определить такие отображения, можно найти в этой статье LWN .

0
28.04.2021, 23:29

Теги

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