LinuxのハードウェアとかOSの情報を確認する
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をやってみる
シェルコマンドで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
ちょっとしたログの確認とかに便利。
grepでORとかANDとか否定条件を実現する正規表現パターン
例えばこんなテキストがあって
# 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で条件指定とか圧縮転送まとめ
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で鍵認証する
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
無事接続できれば成功