Linux系のマシン(今回はCentOS)の情報を取得する方法で
よく使うもの+αをまとめてみました
proc配下には色々あるから自分でちょっとした
ツール作る時とかに役に立つかも

各コマンド

  • CPU情報を確認する

    cat /proc/cpuinfo
    
  • メモリ情報を確認する

    cat /proc/meminfo
    
  • カーネルのバージョンを確認する

    cat /proc/version
    
  • OSのバージョンを確認する

    CentOS(RedHat系)

    cat /etc/redhat-release
    
  • ファイルシステムの情報を確認する

    マウント中のファイルシステムを参照できる。
    マウント元、サイズ、使用量、空き容量、使用率、マウント先が確認できる。
    -hオプションで各デバイスの容量を見やすくできる。

    df -h
    

    または

    cat /etc/fstab
    
  • デバイスのパーティション情報を確認する

    sudo fdisk -l /dev/xxx
    
  • マシンにマウントされているファイルシステムを確認する

    cat /proc/mounts
    
  • ロードアベレージを確認する

    CPU数で割ったりとかしてくれないのでtopとかで見た方が無難
    自分用のモニタリングツールとか作る時に使えるかも

    cat /proc/loadavg
    
  • 実行中プロセスを確認する

    /proc/[number]の各ディレクトリの番号はプロセスIDになっている
    例えば以下のコマンドでそのプロセスの環境変数が確認できる

    cat /proc/[number]/environ
    

他にも色々あるけど、とりあえずこの辺で


シェルコマンドでsqlのgroup by xxx order by count(1)をやってみる

apacheのアクセスログのIPの種類とそれぞれのカウントをとってみる。

sqlだったらこんな感じになる。(apacheログを格納するhttpdlogテーブルがあると仮定して)

select count(1),ipaddr from httpdlog group by ipaddr order by count(1);

これをシェルコマンドだけでやるとしたらこんな感じ。

awk '{print $1}' httpd.log | sort | uniq -c | sort -nr

ちょっとしたログの確認とかに便利。


例えばこんなテキストがあって

# regex.txt
key1 aaa
aaa key2
key1 aaa key2
key3 aaa
aaa key4

それぞれこんな条件でgrepをするケースを想定

  • OR条件(key1で始まるかkey2で終わる)

    grep -E '^key1|key2$' regex.txt
    
  • 否定のOR条件(key1以外で始まるかkey2以外で終わる)

    grep -v -e '^key1' -e 'key2$' regex.txt
    # perl互換 正規表現
    grep -P '^(?!key1)|^.*(?<!key2)$' regex.txt
    
  • AND条件(key1で始まりkey2で終わる)

    grep '^key1.*key2$' regex.txt
    
  • 否定のAND条件(key1以外で始まりkey2以外で終わる)

    grep -v '^key1' regex.txt | grep -v 'key2$'
    # perl互換 正規表現
    grep -P '^(?!key1).*(?<!key2)$' regex.txt
    

否定系のOR/AND条件を実現しようとすると-eオプションを複数書いたり、
パイプで別のgrepをつなげたりする必要が出てくる。
上のようにPオプションでperl互換(PCRE)に対応させると先後読みが
使えるようになるのでgrep一発でやりたい場合はいいかも。

mac(Mountain Lion)にGNU grepを導入

ちなみに、macのgrepはデフォルトがBSD grepなので-Pオプションが使えない。。。
のでGNU grepを導入する

$ brew update
$ brew tap homebrew/dupes
$ brew versions grep
$ brew install homebrew/dupes/grep
# GNU grepはggrepコマンドになる
$ ggrep -V

上の例でPオプションを使っている例でgrepをggrepと読み替えて実行出来ればOK

rubyのワンライナーでgrep

自分は、正規表現の方言とかに悩まされるのが嫌なのでちょっと複雑な正規表現が
必要な時はrubyの使い捨てワンライナーで処理したりしてる
ruby(その他の言語もほぼそうだけど)の正規表現はほぼPCRE互換なので
正規表現の方言で悩む事もほぼ無いと思う。

上と同じOR/ANDのgrepをrubyのワンライナーでやるとこんな感じ

  • OR条件(key1で始まるかkey2で終わる)

    ruby -e 'puts $<.grep /^key1|key2$/' regex.txt
    
  • 否定のOR条件(key1以外で始まるかkey2以外で終わる)

    ruby -e 'puts $<.grep /^(?!key1)|^.*(?<!key2)$/' regex.txt
    
  • AND条件(key1で始まりkey2で終わる)

    ruby -e 'puts $<.grep /^key1.*key2$/' regex.txt
    
  • 否定のAND条件(key1以外で始まりkey2以外で終わる)

    ruby -e 'puts $<.grep /^(?!key1).*(?<!key2)$/' regex.txt
    

mysqldumpのオプションとか圧縮/転送の方法までまとめました

まずは普通にdumpをとる。
これは指定したデータベース丸ごとdumpをとる

mysqldump -u ユーザ名 -p データベース名 > xxx.sql

全てのデータベースをdumpする場合は

mysqldump -u ユーザ名 -p -A > xxx.sql

テーブルを指定してdumpする場合は

mysqldump -u ユーザ名 -p データベース名 テーブル名 > xxx.sql

複数テーブルでもOK

mysqldump -u ユーザ名 -p データベース名 テーブル名 テーブル名 > xxx.sql

レコードのみdumpする場合はtオプションを指定

mysqldump -u ユーザ名 -p -t データベース名 テーブル名 > xxx.sql

逆にテーブル定義のみdumpする場合はdオプションを指定

mysqldump -u ユーザ名 -p -d データベース名 テーブル名 > xxx.sql

where句を指定して条件を満たすレコードのみ抽出する場合
(この例はidが10より小さいレコードが対象)

mysqldump -u ユーザ名 -p "-wid<10" データベース名 テーブル名 > xxx.sql

取得したdumpをgzipで圧縮する

mysqldump -u ユーザ名 -p データベース名 テーブル名 | gzip > xxx.sql.gz

さらに別サーバに転送する

mysqldump -u ユーザ名 -p データベース名 テーブル名 | gzip | ssh xxx@xxx.com 'cat > ~/xxx.sql.gz'

特に最後のやつは大量データを処理する時は便利。


ssh接続を鍵認証で行う手順

手順

クライアント側で鍵ペアを作成する

cd ~/.ssh
ssh-keygen -t rsa
# 鍵の名前を指定、パスフレーズを2回要求されるので必要に応じて
# デフォルトではid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が.ssh内に作成される

作成した公開鍵をサーバ側にコピー

scp id_rsa.pub xxx@xxxxxx:

サーバ側で公開鍵を登録する

ssh xxx@xxxxxx
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

クライアントからsshを試してみる

ssh xxx@xxxxxx

無事接続できれば成功