Перенаправления выполняются через dup семейство системных функций. dup
- это сокращение от дублирование , и когда вы это делаете, например:
3>&2
вы дублируете ( dup2
) файловый дескриптор 2 на файловый дескриптор 3, возможно, закрывая файловый дескриптор 3, если он уже open (что не повлияет на ваш родительский процесс, потому что это происходит в fork
, удаленном от дочернего (если это не так (перенаправление на функции оболочки в определенных контекстах), оболочка заставит его выглядеть как бы и делал)).
Когда вы выполните:
1
, он откроет
someFile
в новом дескрипторе файла (это то, что обычно делает системный вызов open
), а затем dup2
этот файловый дескриптор на 1.
В руководстве говорится, что если один из перечисленных специальных файлов dev занимает место someFile
, оболочка пропустит шаг open
-on-a-new-fd. и вместо этого перейдите непосредственно к dup2
, вставив соответствующий файловый дескриптор (например, 1 для / dev / stdout и т. д.) в цель (файловый дескриптор с левой стороны перенаправления).
Я не знаю ни одного программного обеспечения, способного добиться этого, но вы можете сделать это с помощью loopdevices.
# Create an image file (100 M in the example, change the count to 1000 for 1G, etc)
dd if=/dev/urandom of=/path/to/image.img bs=1M count=100
# Now we use it as a loop device
sudo losetup /dev/loop0 /path/to/image.img
# Format it using the filesystem of your choice (I'm using ext4 here for the example).
mkfs.ext4 /dev/loop0
# Mount that new filesystem.
mkdir /mnt/loop && mount /dev/loop0 /mnt/loop
# Now we can transfer things to the image using rsync (for example /var/log content)
rsync -avz /var/log/ /mnt/loop/
# Unmount the filesystem and remove the loop device.
umount /mnt/loop
losetup -D /dev/loop0
Теперь вы можете переместить файл image.img и использовать его в другом месте (или просто сохранить на удаленном устройстве, как обычный файл ).
Чтобы использовать его, например, на другом компьютере:
# Copy image.img using the tool you want (scp, etc...)
# Mount the image
mount -o loop /path/to/image.img /mnt/loop
# Alter content of the image
# Safely unmount the filesystem
umount /mnt/loop