Использовать trap
:
$ seq 40 | xargs -i --max-procs=4 bash -c \
'trap "echo erk; exit 1" INT TERM; sleep 10; date +"%H:%M:%S {}";' fnord
16:07:39 2
16:07:39 4
erk
16:07:39 1
^C
erk
erk
erk
erk
Кроме того, переключатель от оболочки до другого языка, на котором можно также установить обработчики сигналов.
Обратите внимание также на это после bash -c foo..
необходимо указать значение это $0
должен взять (здесь, fnord
) так, чтобы первое слово, произведенное seq
не становится съеденным.
Как корень, копия filesystem.squashfs
к некоторому пустому dir, например:
cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir
Распакуйте файл, затем перемещают его где-то в другом месте (таким образом, у Вас все еще есть он как резервное копирование):
unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/
Войти squashfs-root
, добавьте/измените согласно своему вкусу, затем воссоздают filesystem.squashfs
:
cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot
скопируйте недавно созданный filesystem.squashfs
по существующему на Вашей Карте памяти, например:
cp filesystem.squashfs /mnt/clonezilla/live/
затем перезагрузка и использование Ваш ЖИВОЙ USB.
Примечание: вышеупомянутые команды являются частью squashfs-tools
.
Если ваша система поддерживает файловую систему uion -, например aufs или overlayfs , исходный файл squashfs извлекать не нужно.
Например, overlayfs используется (параметр ядра для его включения ):Сначала вы можете смонтировать файл squashfs.file в /fm или куда-нибудь еще. Подготовьте доступную для записи файловую систему с двумя каталогами, скажем, /to и /temp . подготовьте другой доступный для записи каталог /fin для объединенных результатов. Смонтируйте их вместе как наложение на вашу систему---
mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin
Теперь вы можете добавлять/изменять файлы в /fin . Когда все сделано, вы можете mksquashfs /fin в новый файл squashfs,
mksquashfs /fin newfile; umount /fin
, затем очистите/размонтируйте все другие используемые каталоги по своему усмотрению.
squashfs и некоторые unionfs обычно используются для live -cd .
Использование оверлейных файлов, как показано, является лучшим способом получить псевдо "squashfs rw" ; Однако для работы требуется ядро > 4.x (или ubuntu > 14.x trusty ).
Альтернативное решение, когда кто-то сидит на старом live cd без каких-либо overlayfs/aufs/unionfs, состоит в том, чтобы использовать собственные возможности squashfs
Важно:Без unsquashfs, поэтому это можно сделать на системе с низким объемом памяти
Пример:
Изменить каталог usr в squashfs
mount squashfs_file /mnt # 1
cp -a /mnt/usr $HOME # 2 Modify whatever $HOME/usr as needed
mksquashfs /mnt new_squashfs_file -wildcards -e usr # 3
mksquashfs $HOME/usr new_squashfs_file -keep-as-directory # 4
umount /mnt # 5 Cleanup
Строка 3 временно создает squashfsfile, исключая olddir _usr
Строка 4 добавляет измененный -usr -dir в новый _squashfsfile
См. здесь добавить squashfs
Примечание :вопрос написан в 2013 году, сейчас 2021 год, я предполагаю, чтоoverlayfs
(поддерживается одна из unionfs
файловых систем ). Этот ответ в основном представляет собой слияние двух других ответов с некоторыми явно написанными вещами, опытные пользователи Linux могут увидеть что-то столь же очевидное (, как использование sudo
), но не все находятся на этом уровне, я понял некоторые вещи по пути и написание полных инструкций (IMO ). Тексты после #
являются комментариями, копировать их не нужно, в моей системе bash
их спокойно игнорирует.
cd somefolder # some folder, no need for much free space, enough for modified data only
mkdir fm # for mounting original
mkdir to # for upper unionfs layers
mkdir temp # some overlayfs technical folder
mkdir fin # resulting folders/files would be there
sudo mount /full_path/filesystem.squashfs fm -t squashfs -o loop
sudo mount -t overlay -o lowerdir=fm,upperdir=to,workdir=temp overlay fin
Теперь можно изменять/добавлять/удалять файлы/папки в папках «to» или «fin». Изменения в них «отражаются».
Чтобы отменить удаление исходного файла, удалите «удаленный» файл из «до» с помощью sudo rm path/file
.
После внесения изменений, чтобы создать новый файл squashfs
в папке с полным _путем, там должно быть свободное место:
sudo mksquashfs fin /full_path/filesystem.squashfs
Когда рабочие файлы больше не нужны:
sudo umount fin
sudo umount fm
sudo rm -R fm fin temp to
П.С. После изменения на quashfs
я хотел воссоздать файл iso
современного дистрибутива, который поддерживает как устаревшую загрузку, так и загрузку EFI. Почему некоторые опции нижеприведенной команды genisoimage
критичны, я не знаю, для меня это был пробный -и -ошибочный путь. Загружается как EFI, так и устаревшая версия, однако запуск iso отличается :запуск 33 ed 90
вместо 45 52 08
, например. mjg59.dreamwidth.org/11285.html намекает мне, что поддержка Apple отсутствует.
mkdir iso,efi
sudo losetup --partscan --show --find original.iso
# if output of previous loop0
sudo mount /dev/loop0p1 iso
sudo mount /dev/loop0p2 efi # not necessary, just to see contents
sudo mount -t overlay -o lowerdir=iso,upperdir=to,workdir=temp overlay fin
Замените то, что необходимо в fin
. Сначала сделал sudo dd if=/dev/loop0p2 fin/EFI/BOOT/usb.efi
, чтобы сделать образ для efi, потом обнаружил, что он уже есть в папке grub
. Если взять доступный образ efi,чем losetup+mount /dev/loop
шагов можно заменить более простымиsudo mount original.iso iso
sudo genisoimage -lJr -o new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 --boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot fin
sudo isohybrid --uefi new.iso
Source directory entry bin already used! - trying bin_1
. Конечно же, в моей выходной файловой системе, у меня есть a/bin
и a/bin_1
, вместо того, чтобы объединять папку. Какие-либо идеи? Если я работаю с-noappend,
файловая система просто не работает. – Naftuli Kay 23.06.2013, 22:25/usr/bin
и переупаковка сmksquashfs
. Карта памяти загружается прекрасный, и я могу использовать свой сценарий от живой сессии. Удостоверьтесь, что у Вас больше нет старогоfilesystem.squashfs
в том же каталоге с Вашим измененнымsquashfs-root
перед выполнениемmksquashfs
. – don_crissti 23.06.2013, 22:53