Linuxで容量の大きいディレクトリを調べる
# du -m /home | sort -nr | head -5で容量の大きいディレクトリTOP5調べられる。
# du -m /home | sort -nr | head -5で容量の大きいディレクトリTOP5調べられる。
Webサーバがちゃんと立ち上がったかどうか、URLにアクセスしてチェックしたいので。
wget -o /dev/null -O - http://twitter.com/ > /dev/null if [ $? -eq 0 ] ; then echo "OK" else echo "Failure!!" fi
な感じかなぁ。
Unixには watch という、n秒ごとに定期的にコマンドを実行してその出力を表示するコマンドがあります。
例えば netstat -na した結果を wc で数えて現在のコネクション数を1秒ごとに表示するには
$ watch -n 1 'netstat -na | wc -l'
とやります。このコマンドを知る前までは
$ while true; do netstat -na | wc -l; sleep 1; done
とやっていてタイプするのが面倒だったので、かなり楽になりました。
補足ですが、時系列でコマンドの出力を表示させたい場合もあるので、while true; do netstat -na | wc -l; sleep 1; done のやり方も場合によっては全然有効だと思います。
最近Gitの共有リポジトリを構築する機会があったのですが、以下のような感じで運用しています。
いちいちサーバ側にユーザ追加して、gitリポジトリのディレクトリにパーミッション付与するよりこっちの方がたぶん楽。
bashには過去に実行したコマンドを履歴として残しているので、CTRL+pなどでその履歴をさかのぼり過去に実行したコマンドをそのまま実行したり、ちょこっと直して実行することができます。しかし、この便利な機能は一方で、 rm などのファイルを削除したりするような危険なコマンドを、履歴からいとも簡単に実行してしまい、結果として大切なファイルを消してしまったりするようなミスを誘発する恐れがあります。
そんなことを考える人に「特定のコマンドだけ履歴に残したくない(=.bash_historyに残さない)という技を紹介したいと思います。具体的には
export HISTIGNORE='rm*:mv*'
のように、環境変数HISTIGNOREに履歴に残したくないコマンドを設定します。:(コロン)でコマンドを区切ることで複数のコマンドを設定することが可能です。上記の例では rm と mv を履歴に残さないようにしています。
実際に試してみると
$ touch hoge $ rm hoge $ history ... 98 touch hoge 99 history
のようにrmコマンドはhistoryには残っていません。実行前にコマンドを確認しないで、うっかり履歴からrmコマンドで必要なファイルを消してしまった、というようなオペレーションミス対策になると思うので、重要なサーバではぜひ設定してみると良いと思います。
これの続編なのですが、複数人が共同で使っているサーバなどで、Apacheのプロセスを何個も起動していると、使えるセマフォがなくなるという事態に遭遇することがあります。対処方法は、Apacheを止めるか
$ for semid in `ipcs -s | grep www-data | cut -f2 -d" "`; do ipcrm -s $semid; done
としてセマフォを削除すれば解決しますが、どうしてもたくさんのApacheのプロセスを立ち上げたい場合は、kernelパラメータのkernel.semの値を大きくしてみると良いでしょう。
Ubuntu 9.04 Server版の kernel.sem のデフォルト値は
$ cat /proc/sys/kernel/sem 250 32000 32 128
となっていて、この4つの数値は左から
というものらしいです。
今回はためしにこの4つの数値を倍に設定してみましょう。設定するには /etc/sysctl.conf に以下の行を追加します。
kernel.sem = 500 64000 64 256
完了したら
$ sudo sysctl -p
を実行するとすぐに反映されます。これでApacheが意味不明な”Couldn’t create accept lock”というエラーを吐かなくなるはずです。
コメント