В вашем файле установлен расширенный атрибут неизменяемый
, поэтому вы не можете его удалить.
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
Я не на 100% уверен в том, будет ли работать или не хранить комбинацию имени пользователя / пароля в переменной, будет работать - это определенно не будет, если ваша настройка Sudo требует пароля, но по крайней мере, Вы можете реализовать цикл, аналогичный тем, что ниже. Если хранение имени пользователя / пароля в переменной работает, вам не нужно будет писать файл с вашими учетными данными вообще.
#!/bin/bash
VPNDIR=${HOME}/vpns
CONFIG=${VPNDIR}/login.conf
OCWD=${PWD}
cd ${VPNDIR}
OLDIFS=${IFS} ; IFS=''
CREDS="$(openssl aes-128-cbc -d < login.conf.aes)"
IFS=${OLDIFS}
for Z in live_vpn mgmt_vpn test_vpn; do
cd ${VPNDIR}/${Z}
(printf "${CREDS}\n" | sudo openvpn --config config.ovpn --auth-user-pass) &
done
unset CREDS
cd ${OCWD}