tag:crieit.net,2005:https://crieit.net/tags/sh/feed 「sh」の記事 - Crieit Crieitでタグ「sh」に投稿された最近の記事 2022-05-05T23:31:37+09:00 https://crieit.net/tags/sh/feed tag:crieit.net,2005:PublicArticle/17908 2022-01-01T21:51:05+09:00 2022-05-05T23:31:37+09:00 https://crieit.net/posts/Linux-61d04e3986a0e [Linux] ランダム文字列 <p>Linux環境にてパスワードやパスフレーズ等の設定に使うランダム文字列を生成</p> <p>条件:8文字構成で数字、アルファベット小文字、大文字、記号の使用かつ類似文字を除外<br /> 数字 10文字 (0 1 2 3 4 5 6 7 8 9)<br /> 小文字 23文字 (a b c d e f g h i j k m n p r s t u v w y z)、除外 (l o q)<br /> 大文字 14文字 (A B D E F G H J L M N Q R T)、除外 (C I K O S U V W X Y Z)<br /> 記号 4文字 (# ? _ !)</p> <pre><code>cat /dev/urandom | tr -dc 'a-kmnpr-zABD-HJL-NQRPT0-9#?_!' | fold -w 8 | head -n 300 | grep -v '^[#?_!]' | grep '[#?_!]' | grep [A-Z] | grep [a-z] | grep [0-9] | grep -vE '(.)\1' | uniq | shuf -n 1 </code></pre> <p>省略版 記号と数字のチェックすれば問題なさそう</p> <pre><code>cat /dev/urandom | tr -dc 'a-kmnpr-zABD-HJL-NQRPT0-9#?_!' | fold -w 8 | head -n 300 | grep -v '^[#?_!]' | grep '[#?_!]' | grep [0-9] | grep -vE '(.)\1' | shuf -n 1 </code></pre> <p><code>cat /dev/urandom</code> ランダムな文字列を生成<br /> <code>tr -dc 'a-kmnpr-zABD-HJL-NQRPT0-9#?_!'</code> 条件の含めたい文字<br /> <code>fold -w 8</code> 8文字<br /> <code>head -n 300</code> 行頭から300文字<br /> <code>grep -v '^[#?_!]'</code> 先頭記号の文字列を除く<br /> <code>grep '[#?_!]' | grep [A-Z] | grep [a-z]</code> 条件に合致しているか絞り込み<br /> <code>grep -vE '(.)\1'</code> 繰り返し文字を除く<br /> <code>uniq</code> 念のため重複行の取り除き、後のコマンドで含まれているのでいらない<br /> <code>shuf -n 1</code> ランダムの1行を出力</p> <p>実行例</p> <pre><code>$ cat /dev/urandom | tr -dc 'a-kmnpr-zABD-HJL-NQRPT0-9#?_!' | fold -w 8 | head -n 300 | grep -v '^[#?_!]' | grep '[#?_!]' | grep [0-9] | grep -vE '(.)\1' | shuf -n 1 9eD?8aiG </code></pre> dsta50