Bash で乱数を生成する:クイックガイド
bash プロンプトで乱数を簡単に生成でき、それを使用してその数値を変数として設定できます。これは、特定の種類のスクリプトの作成からテーブルトップ ロールプレイング アドベンチャーの実行まで、あらゆる用途に役立ちます。 D&D キャンペーンを作成する場合でも、強力な bash 言語でユーティリティを作成する場合でも、通常は 1 行のコードで済みます。これは、特定のセキュリティ チェックを実行しようとするときに非常に便利なツールでもありますが、優れたクラッカーはこれらの単純な数値ジェネレーターを回避できることを覚えておいてください。これらは依然として、特定の種類のパスワードやコードを生成するのに役立ち、いずれにせよ安全を保つのに役立つ可能性があります。
これを達成するにはいくつかの異なる方法があり、すべてのテクニックがすべての状況に適しているわけではありません。そのため、私たちはそれぞれの方法を検討し、それが機能することを確認するために最善を尽くしてテストしました。このためにはターミナルから作業する必要があるため、Ctrl+Alt+T または Super (Windows)+T を使用してグラフィカル ターミナルを開くか、ダッシュにターミナルと入力してターミナルを起動し、アプリケーション メニューまたはウィスカー メニューとシステム ツール メニューからターミナルを選択するか、Ctrl、Alt、および F1 と F6 の間のキーを使用して本格的に仮想ターミナルに移動します。
方法 1:完全にランダムなバイトを選択する
bash プロンプトから次のコマンドを直接実行すると、1 ~ 256 の範囲の乱数を生成できます。
od -An -N1 -tu1 /dev/urandom
このコマンドが /dev/urandom ではなく /dev/random を参照しているのを見かけることがありますが、おそらくこの方法で実行することは望ましくないでしょう。これにより、使用中に他のプログラムがランダム シード ジェネレーターを使用できなくなる可能性があります。プログラムを実行して数値を取得したら、この方法でも同様に機能することを確認できます。
ranNum=$(($(od -An -N1 -tu1 /dev/urandom)))
これにより、変数 ranNum が、実行時に選択された 1 ~ 256 の数値に設定されます。コマンドラインまたはスクリプト内から実行でき、どちらの方法でも機能します。 ranNum は任意の有効な変数名に置き換えることができることに注意してください。
方法 2:変数を 1 から任意の乱数に設定する
コマンドラインから echo $[RANDOM%40+1] を実行すると、1 から 40 までの乱数を直接標準出力に送信できますが、コマンド内の 40 を実質的に任意の数値に置き換えることもできます。最終的には、ホスト マシンのアーキテクチャで桁数が足りなくなるか、おそらく bash で桁数が足りなくなるでしょう。しかし、いずれにせよ、それほど大きな数値が必要かどうかは疑わしいです。
変数構成に対して 1 から 10 までの乱数を生成するとします。次のコマンドを実行できます:
ranNum=$[RANDOM%10+1]
10 は任意の上限値に置き換えることができることに注意してください。この値は包括的であり、10 が有効な返される数値であることを意味します。 1 ずつ減らしたい場合は、C または C++ スタイルの -1 計算を使用する代わりに、単純に値を 9 にします。これらは、このメソッドを使用して変数を設定する場合には不要ですが、実際には数字の加算または減算によって予期しない結果が生成されます。
方法 3:単一のランダム ビットを選択する
変数を 0 または 1 のランダム ビットに設定する必要がある場合は、前のコードを次のように変更するとよいでしょう。
ranNum=$(($(od -An -N1 -i /dev/urandom) % 2))
このコードは、/dev/urandom からサンプリングした数値に応じて、ranNum を 1 または 0 に設定します。 ファイルは偶数か奇数でした。これは、単純な「はい」または「いいえ」の方程式をどちらかの状態に設定する必要がある場合に役立ちます。
これが作業内容に対して十分にランダムでない場合は、次のように /proc/sys/kernel/random ディレクトリを呼び出すことで、もう少し乱数を取得できる可能性があります。
ranNum=$((0x$(cut -c1-1 /proc/sys/kernel/random/uuid) % 2))
ただし、繰り返しになりますが、これは変数を 1 または 0 に設定するだけです。これはバイナリ ロジックには最適ですが、より長い数値が必要な場合にはあまり役に立ちません。ただし、必要に応じて、bash スクリプトでこれらの行を使用できます。この 2 番目のオプションは、実際には、最初のオプションも失敗する状況に適している可能性があります。
方法 4:乱数を返す bash スクリプトを作成する
いつでも乱数を生成できる便利なツールが必要な場合は、そのためのコマンド ライン スクリプトを作成できます。 これは、ほとんどの最新の Linux プロンプトが備えている標準の bash 言語以外のものを使用していないため、ほとんどすべての最新の Linux ディストリビューションと、かなりの数の BSD ベースのオペレーティング システムがこれを問題なく処理できるはずです。次に進む前に cd ~/.local/bin を使用して、どこからでも実行できる場所にスクリプトを配置しておくことをお勧めします。
最初に「nano random」または「vi random」と入力します。ただし、必要に応じてスクリプトに別の名前を使用することもできます。必要に応じて、別のテキスト エディタを使用することもできます。コマンドラインに入力すると 1 または 0 を返すものを作成したいとします。 nano を使用している場合は、次のように入力し、Ctrl+O を押して保存します。
#!/bin/bash ranNum=$(($RANDOM % 2)) echo $ranNum
Ctrl+X を押してテキスト エディタを終了し、コマンド ラインに戻ったら chmod +x random を使用してスクリプトを使用できるようにします。もちろん、ranNum=$[RANDOM%10+1]、ranNum=$(($(od -An -N1 -tu1 /dev/urandom))) または他の行を ranNum=$(($RANDOM % 2)) の代わりに使用すると、どのような種類の数値を返すかを正確に制御できます。 1 から 50 までの数値を定期的に選択したいとします。 bash スクリプトのテキストを次のように変更します。
#!/bin/bash ranNum=$[RANDOM%50+1] echo $ranNum
乱数を生成したい場合は、「random」と入力するだけで、コマンドラインから簡単に実行できるようになりました。
著者について
ケビン・アロウズ
Kevin Arrows は、10 年以上の業界経験を持つ、経験と知識が豊富なテクノロジー スペシャリストです。彼は Microsoft Certified Technology Specialist (MCTS) 認定を取得しており、最新の技術開発について常に最新の情報を入手することに深い情熱を持っています。 Kevin は、ソフトウェア開発、サイバーセキュリティ、クラウド コンピューティングなどの分野での専門知識と専門知識を示し、テクノロジー関連の幅広いトピックについて幅広く執筆しています。テクノロジー分野への彼の貢献は同僚から広く認められ、尊敬されており、複雑な技術概念を明確かつ簡潔に説明する能力が高く評価されています。
-
ステップバイステップ ガイド:Linux システムの PCI スロットの確認
PCI スロットと PCI Express スロットはどこにでもあります。バスはネットブックやウルトラブックの内部でも使用されているため、思いがけない場所でそれらに関する少しの情報を時々チェックする必要があるでしょう。 GNU/Linux には、PCI スロットについてこれまで知りたくないほど詳しく知ることができるコマンドがいくつか含まれています。これらのコマンドは、ネットワークの問題を解決するのに最適であり、独自の機器を構築する人にも適しています。技術者は問題を修復するためにもこれらを使用します。 この方法で PCI スロットを測定するには、Linux コマンド ラインから作業する必要があ
-
Linux での「ifconfig:コマンドが見つかりません」エラーを修正 – クイックガイド
Linux のユーザーはよく「ifconfig」を実行します。 」コマンドを使用して、ネットワークインターフェイスを表示および変更します。その他の用途には、IP アドレス、ハードウェア アドレス、MTU などの表示が含まれます。一部のユーザーは、「bash:/usr/sbin/ifconfig:No such file or directory」というエラーに直面することがあります。 net-tools パッケージがシステム上に存在しない場合、このエラーが頻繁に発生します。一部のユーザーにとって、必要なパッケージをインストールした後でも機能しませんでした。 「ifconfig」コマンドについて