Это что вывод ldd /bin/ls
мог бы быть похожим:
linux-vdso.so.1 (0x00007fff2cffe000)
libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f87e978f000)
libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f87e9586000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f87e91d9000)
libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f87e8fd4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f87e9993000)
Это что вывод ldd /bin/ls /bin/cat
мог бы быть похожим:
/bin/ls:
linux-vdso.so.1 (0x00007fffd25df000)
libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f28f8d09000)
libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f28f8b00000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f28f8753000)
libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f28f854e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f28f8f0d000)
/bin/cat:
linux-vdso.so.1 (0x00007ffff9dfe000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007fc44208a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc442437000)
Попробуйте это вместо этого:
ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
cp --parents "$i" "$CHROOT"
done
Выше, мы используем grep
удалить /bin/ls:
и /bin/cat:
строки. :$
регулярное выражение, которое соответствует двоеточиям в концах строк.
Обратите внимание, что я внес несколько других изменений в Ваш сценарий. Стиль передачи по каналу к циклу более идиоматичен. sort
обычно имеет a -u
опция удалить дубликаты. Обычно предпочтительно использовать "$@"
вместо $*
поскольку это расширится до имен файлов с пробелами и специальными символами правильно. Это не должно иметь значения в этом случае все же.
Для копирования и команд и их библиотек добавьте второй вызов к cp
ниже цикла.
ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
cp --parents "$i" "$CHROOT"
done
cp --parents "$@" "$CHROOT"
Ряд возможностей:
-rwSr-s---.
указывают расширенные права доступа, либо в SE Linux (подтвердить с помощью ls -lZ
), либо в ACL-стиле (подтвердить с помощью getfacl
), которые могут блокировать переопределения корня. chattr
; подтвердите атрибуты файловой системы с помощью lsattr
root_squash
, которая повторно отправляет удаленного пользователя root под непривилегированной учетной записью. Вместо этого выполните команду rm
в качестве фактического владельца файла, например, выполните команду rm
. sudo -u rm имя файла
mount
или /proc/mounts
proc
и sysfs
, так ли это? В вашем файле установлен расширенный атрибут неизменяемый
, поэтому вы не можете его удалить.
lsattr
возвращает расширенные атрибуты файла:
$ lsattr model/DailyUpdateClass.class
-u-Diad--j------ DailyUpdateClass.class
Вам нужно будет расшифровать все буквы ( -u-Diad - j
)
Справочная страница для lsattr
предложит вам просмотреть справочную страницу для chattr
для описания расширенных атрибутов. Здесь я перечислил соответствующие:
Когда файл с установленным атрибутом
u
удаляется, его содержимое сохранен. Это позволяет пользователю запрашивать его восстановление. Примечание: пожалуйста обязательно прочтите раздел об ошибках и ограничениях в конце этого документ.При изменении каталога с установленным атрибутом
D
изменения записываются синхронно на диск; это эквивалентноdirsync
параметр монтирования, примененный к подмножеству файлов.
Один D
немного беспокоит - он явно используется только в каталогах, но у вас есть файл.
Файл с атрибутом
i
не может быть изменен: его нельзя удален или переименован, на этот файл нельзя создать ссылку и данные можно записать в файл. Только суперпользователь или процесс обладание возможностью CAP_LINUX_IMMUTABLE может установить или сбросить это атрибут.Файл с установленным атрибутом
a
может быть открыт только в режиме добавления для письмо. Только суперпользователь или процесс, обладающийВозможность CAP_LINUX_IMMUTABLE
может устанавливать или очищать этот атрибут.Файл с установленным атрибутом
d
не является кандидатом для резервного копирования, когда запускается программа dump (8).Файл с атрибутом
j
имеет все данные, записанные в ext3 или ext4 journal перед записью в сам файл, если файловая система смонтирована с помощьюdata = order
илиdata = writeback
опции. Когда файловая система смонтирована сdata = journal
опция все данные файла уже занесены в журнал, и этот атрибут не имеет эффект. Только суперпользователь или процесс, обладающийВозможность CAP_SYS_RESOURCE
может устанавливать или очищать этот атрибут.
Чтобы исправить это, используйте chattr
. Например, чтобы удалить атрибуты immutable и append:
# chattr -ia model/DailyUpdateClass.class