世の中には「XKCD パスワード」ジェネレーターがいくつかありますが、タスクは非常に簡単なので、コンパクトでシンプルなソリューションが欲しかったのです。私の要件は次のとおりです。
- 1行のエイリアス(または数行の関数)を記述する
.profile
- 標準 Unix コマンド (パッケージは不要)
- 列出力( など
pwgen
) - タイトルケースの単語(読みやすさのため)
(私は、シンプルさのためにコマンドライン オプションを放棄することに満足しています。)
for i in {1..32}; do grep -E "^[a-z]{4,8}$" /usr/share/dict/words | gshuf -n4 | gsed 's/.*/\u&/' | tr -d '\n' | awk '{print $1}'; done | column
現在の問題:
shuf
brew install coreutils
macOS(私も使用しています)では必要ですsed
必要brew install gnu-sed
(同上)tr -d '\n' | awk '{print $1}'
馬鹿げているようだ。
Linux と macOS の両方で動作する、短くて読みやすいコマンドラインを作成するにはどうすればよいでしょうか?
余談ですが、一般的な名前の短い単語リストから難解な単語の長い単語リストまで幅広い SCOWL を使用すると、記憶しやすさとエントロピーのバランスをとることができることがわかりました。
答え1
私は現在 Mac にアクセスできませんが、OS X 10.4.11 を実行しているため、あなたの環境と比較できるかどうかはわかりません。以下は FreeBSD で単一のパスワードを生成するために機能します。これがあなたのニーズを満たさない場合は、コメントで何が足りないかを遠慮なく教えてください。
(sort -R /usr/share/dict/words \
| head -n 4 \
| awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }' \
; echo)
FreeBSD および私の Arch Linux システムでは、sort -R
入力をランダムに順序付けします。これは疑似ランダムに過ぎませんが、他のほとんどのプログラムでもこれくらいの精度で実行できます。次に、 を使用してそのセットから 4 つの単語を選択しますhead
。GNU の代わりにsed
、awk
を使用して各行の最初の文字を大文字にすることができます。最後に、echo
を使用して終了改行を配置します。これはすべてサブシェル内にあるため、ループ、パイプ、またはその他の構造に簡単に組み込むことができます。