1.)/sys
не является реальной файловой системой -диска :это представление и средство доступа к внутреннему состоянию ядра в виде виртуальной файловой системы. Он полностью основан на оперативной памяти -, и нет смысла хранить содержимое /sys
на диске.
В определенном смысле можно сказать, что /sys
создается заново каждый раз при загрузке ядра и обнаружении оборудования; в другом смысле вы могли бы сказать, что вещи в файловой системе /sys
на самом деле вообще не существуют постоянно, а генерируются только по запросу, всякий раз, когда вы пытаетесь получить к ним доступ, на основе фактического состояния ядра, в котором они должны находиться. представлять.
Пока вы находитесь в процессе установки Gentoo, новая установка еще не имеет своего собственного работающего ядра, поэтому новая установка не может иметь своего отдельного ядра /sys
. Но среда установщика имеет свою собственную /sys
, и выполнение монтирования привязки заставляет «систему в стадии разработки» заимствовать дерево файловой системы /sys
среды установки. Это делает некоторые задачи при установке точно такими же, как и при обновлении существующей системы, и поэтому одни и те же сценарии могут использоваться для обоих случаев :при обновлении, они используются так же, как -, но во время установки они просто нужно запустить chroot в /mnt/gentoo
.
2. )В соответствии с /sys
может быть или не быть debugfs
смонтированным как /sys/kernel/debug
, efivarfs
хранилище переменных UEFI псевдо -файловая система как /sys/firmware/efi/efivars
,и, возможно, несколько файловых систем на базе RAM -для управления различными контрольными группами в /sys/fs/cgroup/*
.
Под /dev
могут быть по крайней мере /dev/pts
, /dev/shm
, /dev/hugepages
и/или /dev/mqueue
, все различные специальные -целевые ОЗУ -на основе файловых систем.
Таким образом, использование rbind явно упростит ситуацию.
Похоже, вы неправильно поняли, что 4,6
делает в sed
. Единственный способ, которым старый вопрос и новый не отличаются полностью, - это если вы хотите извлечь строки на основе содержимого (, ограниченного начальным и конечным шаблоном ), а не номерами строк. Использование seq
делает формулировку очень двусмысленной.
Если вы действительно хотели извлечь строки на основе номера строки, ответы Nate T и они являются единственными, которые действительно обобщают. Однако, если вы хотите фильтровать на основе содержимого строки (, как предлагает ваш обновленный вопрос ), вы ищете диапазоны шаблонов. В частности, если вы хотите извлечь то, что находится между строками, которые заканчиваются на 4
, и следующей строкой, которая заканчивается на 6
, вы ищете:
seq 35 | sed -n "/4$/,/6$/p"
Начальный шаблон (, т. е. 4$
), и конечный шаблон (, т. е. 6$
), могут быть сделаны произвольно сложными в соответствии с вашими потребностями (, такими как hello
и world
).
Это действительно зависит от вашего варианта использования, но если вы хотите фильтровать по содержимому, а не по номеру строки, и не хотите делать никаких предположений о порядке содержимого, вот пример диапазонов шаблонов в действие:
sed -n "/4$/,/6$/p" <<EOF
heredoc> 1
heredoc> 2
heredoc> 3
heredoc> 4
heredoc> 14
heredoc> 15
heredoc> 5
heredoc> 6
heredoc> 7
heredoc> 14
heredoc> 14
heredoc> 14
heredoc> 16
heredoc> 16
heredoc> 15
heredoc> EOF
4
14
15
5
6
14
14
14
16
Обратите внимание, что sed
всегда выбирает первое вхождение начального и конечного шаблонов для диапазона, а это означает, что диапазон может содержать несколько строк, соответствующих начальному шаблону, но только одно вхождение конечного шаблона.
seq 20 | sed -e '/[0-37-9]$/d'
Вам нужно удалить ненужные строки.
Решение, которое я придумал, очень похоже на решение, опубликованное @they, но на самом деле использует другую технику. Я использовал формат двойного адреса. Вместо того, чтобы использовать первый адрес для вывода 4, 5, & 6
, я использовал его для сопоставления с 4, 14, etc.
, а затем использовал синтаксис +N
для второго, чтобы напечатать соответствующие *5
и *6
для каждого экземпляра.
Получившаяся команда была
seq 20 | sed -n 4~10,+2p