Если ваша версия read
не поддерживает -s
, попробуйте POSIX-совместимый способ, описанный в этом ответе .
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; set +a; stty -echo; read passwd; command <<<"$passwd"; set -a; stty echo; echo
passwd= # get rid of passwd possibly only necessary if running outside of a script
Предполагается, что set +a
предотвращает автоматический «экспорт» переменной в среду. Вы должны проверить man-страницы для stty
, там доступно множество опций. <<<"$passwd"
взят в кавычки, потому что в хороших паролях могут быть пробелы. Последним echo
после включения stty echo
является запуск следующей команды/вывода с новой строки.
Причина наличия нескольких уровней — экономия места.
Подумайте, что было бы необходимо, если бы не было нескольких уровней. Если имеется 48-битное адресное пространство (нет текущего процессора x86 _64, который дает вам полные 64 бита ), и вы используете размер страницы 4 КБ (12 бит ), тогда у вас есть 2 в степени 36 страниц.
Если бы вы могли уместить информацию об отображении в 64 бита (8 байтов ), то вам потребовалось бы 8 *2 **36 байт или 512 ГБ памяти только для хранения таблицы перевода.
Почти во всей этой таблице будет установлено значение, представляющее «Неверный адрес».
Наличие нескольких уровней позволяет уменьшить требования к пространству для таблицы перевода. Если 64-битное адресное пространство разделено на 16/9/9/9/9/12 бит для текущего _неиспользуемого/PML4/PDPT/PD/PT/адреса _на странице _, вам потребуется всего 512 записей. для таблицы PML4, из которых 510, вероятно, являются значением, представляющим «Неверный адрес», а остальные 2 указывают на два массива из 512 записей PDPT. Если мы остановимся на этом, то сократим необходимое пространство с 2 **36 записей до примерно 2 + 2 **27 записей, что составляет менее 0,2% от первоначального линейного требования. Конечно, это не останавливается на достигнутом, есть 3 дополнительных уровня, хотя они, как правило, не дают такой большой экономии.