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