Слегка расширенный (но в значительной степени эквивалентный) сценарий:
{
if($0 ~ /^ora/) { # look for lines starting (^) with "ora"
split($0, temp, "."); # find the elements of the line an put in array
serverName = temp[2]; # the "middle bit" - what was found between two dots
next; # nothing else to do with this line
}
else {
print serverName, serverName$1, $3, $4; # string together the bits
# note that each $n corresponds to the nth "word"
# by default fields are separated by white space
# you can set the variable FS to something else (e.g. FS=",")
# to deal with other formate
}
}
Поместите его в файл server.awk
, и, если ваш ввод находится в log.txt
, вызовите его с помощью
awk -f server.awk log.txt
Надеюсь, объяснение добавит некоторой ценности ...
Если вы не возражаете против некоторых пользовательских сценариев, вы можете использовать OverlayFS (, включенную в ядро Linux с 2014 года ).
OverlayFS накладывает два местоположения файловой системы друг на друга :точка монтирования наложения показывает все из lower
, если только она не была изменена или затенена чем-либо в upper
. Все изменения точки монтирования оверлея записываются в upper
; lower
никогда не трогали.
Кроме того, для OverlayFS требуется каталог work
, который четко не задокументирован, но, по-видимому, служит временной областью перед переносом изменений в upper
.
Используя это, вы можете создать тип контейнера, который вы ищете (см. ниже возможные крайние случаи):
mkdir -p /var/tmp/myoverlay/{upper,work,mount}
mount -t overlay -o lowerdir=/,upperdir=/var/tmp/myoverlay/upper,workdir=/var/tmp/myoverlay/work overlayfs /var/tmp/myoverlay/mount
Чтобы «войти» в контейнер, вы можете использовать командуchroot
(«изменить корневой каталог» )для запуска командной (оболочки или другой )внутри вновь созданной/var/tmp/myoverlay/mount
:
chroot /var/tmp/myoverlay/mount
# or
chroot /var/tmp/myoverlay/mount /usr/bin/apt moo # paths are relative to the new root directory
Обратите внимание, что этого может быть недостаточно для программ, которые пытаются получить доступ к аппаратным устройствам, псевдо--терминалам, процессам или системным функциям, :которые предоставляются ядром как специальные монтируемые файловые системы — см. вывод из mount
ниже:
proc on /proc type proc
sysfs on /sys type sysfs
udev on /dev type devtmpfs
devpts on /dev/pts type devpts
Вы можете смонтировать их в точку монтирования наложения (перед входом в нее):
mount -t proc proc /var/tmp/myoverlay/mount/proc
mount -t sysfs sys /var/tmp/myoverlay/mount/sys
mount -t devtmpfs dev /var/tmp/myoverlay/mount/dev
mount -t devpts devpts /var/tmp/myoverlay/mount/dev/pts
Обратите внимание, что это даст вашему контейнеру больше доступа к системе, чем вам хотелось бы. В конечном счете, вам нужно точно знать свой вариант использования, чтобы решить, достаточно ли отделена оверлейная файловая система от вашей обычной системы для этого конкретного варианта использования.
Могут возникнуть дополнительные трудности, в зависимости от схемы вашей файловой системы :каталог lower
берется как есть, без каких-либо дополнительных файловых систем, смонтированных под ним. Если, например, ваша /home
является отдельной файловой системой, OverlayFS покажет вам только пустую точку монтирования в /home
.
В этих случаяхвам нужно будет создать отдельные оверлеи для каждой из этих точек монтирования, а затем смонтировать дополнительные оверлеи в корневой оверлей.
В этот момент вы приближаетесь к сценарию, в котором надлежащая виртуализация обычно является более разумным выбором.
Вы можете использовать файловую систему overlay
.
modprobe overlay
mkdir -p /path/data /path/work /path/mount
mount -t overlay overlay -o lowerdir=/,upperdir=/path/data,workdir=/path/work /path/mount
Теперь вы можете chroot
- /path/mount
и видеть все из вашего корневого каталога, но изменения будут записываться в /path/data
. Вы можете размонтировать /path/mount
и перемонтировать его позже с теми же параметрами.