chsh
Обычно можно использовать команду chsh
изменить Вашу оболочку, не имея необходимость иметь доступ к /etc/passwd
. Это - файл, который обычно перечисляет Вашу оболочку по умолчанию, например:
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
Обычный пользователь может только изменить оболочку входа в систему для его собственной учетной записи, суперпользователь т.е. пользователь root могут изменить оболочку входа в систему для любой учетной записи. Вы видите, какие оболочки доступны в Вашей системе с этой командой:
$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh
Для изменения оболочки, можно использовать эту команду:
$ chsh -s /bin/zsh saml
Changing shell for saml.
Password:
Shell changed.
Эффект очевиден, если Вы заглядываете /etc/passwd
файл:
$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
Вы не будете сразу видеть изменения. Необходимо будет выйти из системы/войти для наблюдения его:
[saml@grinchy]~% echo $SHELL
/bin/zsh
/usr/bin/passwd -e
Если у Вас нет доступа к команде chsh
который, по-видимому, Вы не делаете на Солярисе, и у Вас нет корневого доступа для изменения его в /etc/passwd
, Вы смогли все еще делать то же с этой командой:
$ /usr/bin/passwd -e
Если ни один из вышеупомянутых методов не является опцией, Вас в основном оставляют с этой последней опцией, которая должна добавить одно из следующих к файлам входа в систему Вашей существующей оболочки:
оболочка по умолчанию:/bin/csh или/bin/tcsh
Добавьте следующие строки к $HOME/.login
:
setenv SHELL=/bin/bash
exec $SHELL
оболочка по умолчанию:/bin/bash
Добавьте следующее к $HOME/.bash_profile
:
export SHELL=/bin/zsh
exec $SHELL
Некоторые дополнительные вещи рассмотреть с вышеупомянутым, можно сделать их более пуленепробиваемыми путем выполнения проверки, чтобы видеть, ли текущий $SHELL уже /bin/bash
например, до установки его. Если это, ничего не сделайте, иначе идите вперед и выполните exec $SHELL
.
Я почти уверен, что вам не обойтись без btrfs-send / btrfs-receive. Другой вариант - скопировать вложенные тома и затем дедуплицировать их в месте назначения, но это займет много времени.
Что касается проблемы только для чтения: поскольку это ежедневные снимки, разве большинство томов не доступны только для чтения?
Я бы сделал
$btrfs subvolume create /subvolumeA/source
$for i in /filesystemA/subvolume*; do btrfs subvolume snapshot -r $i /filesystemA/source/$i; done
Теперь у вас есть все подтомы в / filesystemA / source / readonly.
Теперь вы можете посылать их в цикле постепенно с помощью btrfs-send с родительским оператором в пункт назначения.
Если некоторые из снимков снова должны быть доступны для записи, вы можете скопировать их содержимое в новый доступный для записи подтом, используя cp --reflink
.
Надеюсь, вы попали куда-нибудь со своим списком.Вы уверены, что команды property
не задокументированы в этой версии? В этом ответе предлагается использовать команду типа btrfs property set -ts /path/to/snapshot ro true
, чтобы исправить проблему.
Для будущих читателей: установите для новых моментальных снимков доступ только для чтения с параметром -r
при их создании. Я использую что-то вроде этого в своем сценарии:
comm -23 \
<(btrfs subvolume list -ors --sort=path /fsA/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/') \
<(btrfs subvolume list -ors --sort=path /fsB/ | perl -ne 'print if s/.+?\spath\s+(.+)/\1/')
Это должно предоставить список доступных только для чтения томов моментальных снимков в файловой системе A, которые не в файловой системе В. Вы можете перебирать список, выполняя отправку/получение для каждого из них для синхронизации.