pingの統計情報を終了しないで途中で見る方法

結構長い間pingを打っていて、「あー。今統計情報見たいなー。でも止めたくないなー」って時に、止めずに統計情報を知る方法。

因みに、統計情報は、pingの最後に出るやつ

↑の最終行。

 

続きを読む pingの統計情報を終了しないで途中で見る方法

bashのtab補完でシンボリックリンクでも後ろにスラッシュを付ける

DISK何台かあって、HOMEディレクトリ下の特定のディレクトリをシンボリックリンクで別ディスクにリンクなんかしてると

bashのtab補完で、後ろにスラッシュを追加してくれなくて困ったりする。tabをもう1回押せばスラッシュも補完してくれるけど。

結論以下。

何故かbashrcじゃなくてこっちのファイルなのだが詳細とかは調べてません。readlineだから?

実行中のコマンドをバックグラウンドにしてログアウトしても消えないように(disown)

軽い気持ちで実行したコマンドが、なかなか終わらなくて、あー。もー。帰りたいのに終わるまで帰れない。

なんて経験があったりする。ただこの disown ってコマンドを覚えておけば、そんなことを気にしないで実行したまま家に帰ることが出来る。

たぶんbash限定かもしれないけど、自分bashしか使わないので。。。

具体的には、

Ctrl-z でプロセスを一旦止めて、

bg でバックグラウンドプロセスにして。

って感じ。

ただこのままログアウトしても大丈夫なプロセスもあったりするのだが、止まるやつは止まる。

そこで、 disown %1 を実行してあげる。(%1はjob id jobsコマンドで確認出来る)

これでログアウトしても止まらないはずなので、安心して帰れる。

 

以下サンプル(cpの大量コピーとかがよくあるかと)

こんな感じ。標準出力するプログラムだと、入力が大変だが、めげずに実行する。

ログアウトすると、標準出力、標準エラーは保存できないので、そこは諦めるか別の方法

最初から、時間がかかるのがわかっているなら、 nohup を使ったほうが良い。標準出力もファイルに保存されるので。

nohupの記事も過去にちょろっと書いた。

 

findでブロックファイルやキャラクタファイルを探す

めったに無いのだが、ファイルシステムがクラッシュした時の影響か、普通のファイルがブロックファイルやキャラクタファイルになっている時がある。そいつを検索する方法。

typeオプションで、b ならブロックファイル、c ならキャラクタファイル。

 

 

lsしたかったら

 

消したかったら、、、略

Fork爆弾

とあるnetの記事を見ていたら、watchdogタイマーのテストで以下を実行すると良いとか見た。

 

 

 

なんじゃ、この顔文字みたいなのは!と困惑していたのだが、よく見てみると、

「コロン(:)を名前とした関数を定義して、その関数内で自身を再帰的に呼び出して、パイプでつないで、バックグラウンド実行している。」といった感じだ。コロンじゃなくて、aとかでも同じ

 

 

 

上でも同じことになるし、理解しやすい。

実際にサーバ上でrootで実行すると、即座に何も出来なくなり、強制的に再起動するしか復旧方法が無さそう。

heartbeat構成で、サービス監視がしっかり出来ているか確認するときに使うと便利かも。

因みにFork爆弾と言って結構有名な手法らしい。wikipediaの解説がわかりやすい。

初めて見た時は、記号だらけなんで検索しても、全然ヒットしなくて困ったが、Fork爆弾って単語にたどり着いたらスッキリした。

forとかwhileループでnohup

普段Linuxをメインで使っていると、bashで、forとかwhileループをバシバシ使って処理することがあると思う。
直ぐ終わる処理だと、特に気にしないのだが、大量のデカイファイルをコピーするなど
時間のかかる処理だと、バックグラウンドで実行したい時があるが、普通にnohup使うと
エラーになって使えない。

  • バックグラウド実行したいループ処理

 

 

 

単純に頭にnohupを付けて行末に&だと上手くいかず
以下のようにしたら上手く言った。

 

 

 

  • bachの-cオプションに処理したい内容をシングルクォート(‘)で渡す
  • 変数はダブルクォート(“)で囲む

と言った感じ

bashのeオプションを一時的に無視する

シェルスクリプトを書いていると、エラー処理を書くのが面倒で、とりあえずbashをeオプションで起動しておけばいいや程度に思っていたりします。シェルスクリプト中のどこかでエラーが出ればスクリプト自体を終了してくれるので何かと便利なんですが、途中無視できる程度のエラー処理で止まって困ることもあるので、そこを何とか無視する方法を調べました。まーmanに書いてあったんでちょっと読めば気付くんでしょうが自分は結構時間かかりました。

-e      単純なコマンド (前述の シェルの文法セクションを参照) が 0 でないステータスで終了した場合、即座に終了します。ただし 失敗したコマンドが until または while ループの一部である、 if 文の一部である、 && または ││ リストの一部である、コマンドの返り値が !  で反転されている、のいずれかの場合にはシェルは終了しません。

上の条件に当てはめてしまえばいいだけです。

サンプルとして、以下のようなスクリプト。

 

最初のfalseでは、止まらず次のfalseで止まって、最後のechoは処理されないはずです。

シェルでMACアドレスをランダムに生成

ちょっと悩んだので自分用にメモ。
表題の通り、シェルでMACアドレスをランダムに生成する方法。仮想化なんかで、ゲストを自動作成するスクリプトを書いていると、固有のMACアドレスが必要だったりするのでそのメモ。

 

 

 

エレガントでは無いけど、これだけ。
%Xを%xと小文字にすれば、小文字のアドレスが生成される。OUIを指定したかったら、最初の3オクテットを固定にするだけ。

多分自分のシェルがこれになったら泣きたくなる(rbash)

rbash

bashを-rオプションで起動するか、bashのシンボリックリンクがrbashになっているか。

多分大抵のディストリビューションでは、rbashのシンボリックリンクが作られていると思う。

結構古いbashからあった機能らしい。確認した一番古いbashでversion 2.05なのでソートー昔からある。

実際に使ってみると、

 

なんも出来ねー

一応manページによると、以下が出来無いらしい。

  • cd を使ってディレクトリを変更すること
  • SHELL, PATH, ENV, BASH_ENV の値の設定や設定取り消しを行なうこと
  • / を含むコマンド名を指定するこ
  • 組み込みコマンド .  の引き数として / を含むファイル名を指定すること
  • 組み込みコマンド hash に対するオプション -p の引数として / を含むファイル名を指定すること
  • 起動時にシェル環境から関数定義をインポートすること
  • 起動時にシェル環境から SHELLOPTS の値を展開すること
  • リダイレクション演算子 >, >|, <>, >&, &>, >> を使ってリダイレクトを行 なうこと
  • 組み込みコマンド exec を用いて、シェルを別のコマンドに置き換えること
  • 組み込みコマンド enable に対する -f オプションと -d オプションを使って、組み込みコマンドを追加・削除すること
  • 組み込みコマンド command に -p オプションを指定すること
  • set +r や set +o restricted を用いて制限モードを解除すること

かなり厳しい制限だが、共有レンタルサーバなどでユーザにshellを開放する場合は

使えるかもと思った。

chroot+sshが理想なんだろうけど、opensshにパッチあてたり、必要なコマンドをchroot下に用意したりするより

簡単なのではと思う。

特にパッチあては、パッケージ管理から外れるので、sshなんて重要なものでは極力避けたいし。

最近はディストリビューション標準パッケージで、chroot可なものもあるのだろうか。

追加

あれ?