Я не знаю дистрибутив ведьмы, Вы идете. На хинду я привык писать собственный initramfs init сценарий. Initramfs является только крошечной корневой фс только с существенными инструментами, установленными на нем, чтобы смонтировать Ваш корневой раздел и switch_root к Вашему реальному rootfs и выполнить реальный init для вступания во владение.
Поскольку ro базируется основная система, я предлагаю использовать squashfs. Это имеет полную основную поддержку ядра строки и делает Вашу систему быстро. Для Вашего наложения RAM можно использовать tmpfs, также поддерживаемый ядром.
Затем необходимо "объединить" их, чтобы быть как единственная файловая система. Я использую aufs. Это не поддерживается основным ядром строки и если это не поддерживается в патчах ядра Вашего дистрибутива, необходимо сделать исправление себя. (Нет ни одного FS объединения, поддерживаемого в основной строке),
Вы являетесь, вероятно, лучшими из записи той сами. (Я попробовал dracut и genkernel, но они не обеспечивают neccesary модули для обработки любого из моих случаев),
/usr/src/initramfs
)Загрузите статический busybox на вышеупомянутый каталог. Это - статическая оболочка, если Вы al linux_utils neccesary к fsck, смонтируйтесь и т.д.
mkdir /usr/src/initramfs/{bin,dev,lib,mnt,sbin,tmp,etc,proc,sys}
Для основной структуры
--move
Ваша точка монтирования к недавно созданному корню и umount
вещи Вам больше не нужноexec switch_root /sbin/init
очищается (удаляет) все в загруженном initramfs и переключает корень для продолжения начальной загрузки./usr/src/initramfs/lib
/usr/src/initramfs
можно использовать gz, xz, cpio или wathever, который Вы любитеДля проверки начальных загрузок системы с пользовательским изображением скомпилируйте собственное ядро также. (Действительно это не трудно): хинду документы ядра. В точке необходимо установить источники, просто заменить команду Вами диспетчер пакетов. Большинство дистрибутивов обеспечивает исходные пакеты ядра.
Если бы Вы готовы изменить дистрибутивы, чтобы сделать его, я предложил бы измениться на хинду или Arch. Они более гибки для "ручного материала" затем другие, и они оба предоставляют превосходную документацию для взламывания его в любой форме, которую Вы любите.
Я предполагаю, что вы хотите, чтобы он был рандомизирован, исходя из того, что "специальный" всегда первый. Вот гигантский хакерский способ, который делает это. ПРИМЕЧАНИЕ: Ваш сценарий - scr.bash
.
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
qT*Jyv8Y
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
QbOvX3n-
$ echo $(./scr.bash | fold -w1 | shuf | tr -d '\n')
*Q5nGgIt
Это грубо, но показывает вам подход.
Команда fold
разбивает вывод на 1 символ в строке. Есть и другие способы сделать это, но я выбрал fold
. Команда shuf
может "тасовать" строки в случайном порядке. Команда tr
удалит символы новой строки (\n
) из первоначального сгиба, который мы сделали.
Чтобы переопределить системную команду cal
и вместо этого выполнить команду, расположенную в файле /home/$ USER/bin/cal
, добавьте следующую строку alias
в файл ~/.bashrc
:
alias cal=/home/$USER/bin/cal
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/lib/ast/bin:/home/$USER/bin:.
По умолчанию псевдоним
активен только для интерактивных сеансов. Это означает, что вышеизложенное имеет то преимущество, что оно не будет активным в сценариях оболочки и, следовательно, не будет мешать любому такому сценарию, который зависит от того, является ли cal
обычной системой cal
.
Следующие действия:
cd A
B=../B # Put path to B here
for a in *_1.pdf; do b=${a%_1.pdf}; [ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf" ; done
Если код должен быть помещен в сценарий, а не введен в командной строке, он будет выглядеть лучше с разрывом и отступом строки:
cd A
B=../B # Put path to B here
for a in *_1.pdf
do
b=${a%_1.pdf}
[ -f "$B/$b.pdf" ] && cp "$B/$b.pdf" "${b}_2.pdf"
done
-121--217726- Ответ @ slm хорошо использует инструменты, доступные в оболочке, но в сочетании с вашим «scr.bash» является немного сложным. Если у вас есть Python (версия 2.7 или 3.x) вот сценарий, который делает ту же работу более читаемо:
#!/usr/bin/env python
"""
Create a formulaic but reasonably strong password.
"""
import random
def shuffled_password():
"""Using one random member of special and num and three members each
from upper and lower return a shuffled string of their concatenation.
"""
num = list('012345789')
special = list('@#$%*-+')
upper = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
lower = list('abcdefghijklmnopqrstuvwxyz')
random.shuffle(num)
random.shuffle(special)
random.shuffle(upper)
random.shuffle(lower)
letters = [special[0], num[0]]
letters.extend(lower[0:3] + upper[0:3])
random.shuffle(letters)
s = ''.join(letters) # funny way to turn list of chars into string
return s
if __name__ == '__main__':
print(shuffled_password())
Я написал этот код в ходе изучения комбинаторной сложности вашего метода. Кто-то из вышеупомянутых лиц использовал pwgen
; Я изначально думал, что это должно быть сильнее твоего домашнего метода, но я предполагал, что это неправильно.
Ваш метод, даже без перетасовки (букв)
производит 21 миллиард комбинаций. Это дает оцененную энтропию из 39 битов. Это получает неофициальную оценку от испытания на прочность:
36 - 59 bits = Reasonable; достаточно безопасные пароли для сетевых паролей и паролей компании
Добавление окончательной тасовки добавляет около 5 бит энтропии в смесь. Для справки,
pwgen --symbols --numerals
вырабатывает пароли с оценочной энтропией 37 бит. Я связываю это с попыткой pwgen создать «запоминающиеся» пароли, которые каким-то образом уменьшают набор выходных данных. Это все еще «разумно» в соответствии с категориями испытания на прочность.
Предостережение: моя комбинаторная математика, особенно в мультинабор перестановки ограничены, исправления приветствуются.
Кажется, можно упростить ...
$ echo {A..Z} {a..z} {0..9} {0..9} '!@#$%^&*()_+=-' | tr ' ' "\n" | shuf | xargs | tr -d ' ' | cut -b 1-18
WhBypH7Pvmtow60D11
Я дважды добавил цифры, чтобы гарантировать добавление их в пароль.
И с символами:
$ echo {A..Z} {a..z} {0..9} {0..9} '! @ # % ^ & * ( ) _ + = - [ ] { } " < > . / ?' | tr ' ' "\n" | shuf | xargs | tr -d ' ' | cut -b 1-18
*p6-3XbEBAJL}%>t2U