非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

Linuxコマンド top

現在のシステム状況を表示する
デフォルトは5秒間隔で更新
CPU を多く使用しているプロセスから順に表示

psコマンドとの違い

psコマンドは、 そのコマンドを実行した瞬間のプロセスの状態を出力するだけに対して、topコマンドは実行を中止するまでと状況を表示し続ける

top -d 10

Linuxコマンド nice

プライオリティを変更して実行する


同時に複数のプロセスを実行する際、どのプロセスを優先的に実行するかを指定できる。
値が低いほどスケジューリングにおける優先度が高くなる。


プライオリティは -20 から 20 までの値を取る。
負の値のプライオリティを与えることできるのはrootユーザのみ。
-20 が最も優先順位が高く高速に動く。
逆に、重要でないプロセスの優先度を低く設定しておけば、他のプロセスが実行される機会が増える。


引数なしだと、設定された内容表示
-n 値を指定しないと優先度 10で実行される。

nice -n 5 command

関連

renice
すでに実行しているプロセスの優先度を変更する



なんでniceなんだろう…。

Linuxコマンド kill

プロセスおよびジョブを強制終了する
終了の方法はシグナルによって決まる。

kill -9 1234           # プロセスID1234番を強制終了


というわけでシグナルについて!

シグナル

プロセス間で連絡を取り合うための仕組み
プログラム自身の動作によって発生する同期シグナル、外的な要因で発生する非同期シグナルの2種類が存在する。

シグナル発生タイミング

  • ユーザがキーボードで、割り込みキーを入力
  • killコマンドを実行
  • 参照出来ないメモリを参照
  • 不正な演算を実施
  • 明示的にシグナルを送信する処理を実行

シグナルを受け取ったプロセスは?

特に指定しなければデフォルトの応答が動作する

シグナルハンドラ

プロセスは特定のシグナルを受け取った場合に呼び出す関数を用意できる

プロセスは、SIGKILL/SIGSTOP 以外のすべてのシグナルを無視するよう設定できる
SIGUSR1 と SIGUSR2 は自由に使える

シグナル一覧

下記のコマンドで確認できる

kill -l


一部抜粋一覧

番号 シグナル 意味 デフォルト通知内容
1 SIGHUP クローズされた端末上で動いていたプロセスに送られる 再起動
2 SIGINT キーボードからの割り込み、Ctrl+Cが押された 割り込み
3 SIGQUIT キーボードからの割り込み、Ctrl+\が押された 終了+コアダンプ
8 SIGFPE 浮動小数点演算のエラーおよび整数の0による割算の検出 終了+コアダンプ
9 SIGKILL プロセスを強制終了する 強制終了
11 SIGSEGV メモリアクセスについて違反があった 終了+コアダンプ
14 SIGALRM アラームタイマーの時間満了、もしくはalarm(2)からのタイマーシグナル 終了
15 SIGTERM ソフトウェア終了シグナル 終了
17 SIGCHLD 子プロセスが終了したとき親プロセスに送られる 無視
18 SIGCONT バックグラウンドに回ったプロセスを再開する 再開
19 SIGSTOP 実行を一時停止。SIGCONTシグナルによって再開 中断
20 SIGTSTP キーボードからの割り込み、Ctrl+Zが押された。 サスペンド

コアダンプ

ディスク上に生成される終了時のプロセスのメモリイメージ



プロセス管理まわりを続けて書く!

ActiveRecordとは

railsをいろいろやっていて出てきた言葉。
気になったので調べた。
Zend Frameworkがほったらかしだ…。

ActiveRecord

DBアクセスに関するデザインパターンを実装したライブラリ
データベースのテーブルをクラスとしてビジネスロジックを持たせ、テーブルの1行1行をインスタンスとして扱う考え方のデザインパターン

O/Rマッピング

Object-relational mapping オブジェクト関係マッピング
オブジェクト指向言語におけるオブジェクトと、リレーショナルデータベースにおけるレコードとを対照させること。


これにより、リレーショナルデータベースのレコードがオブジェクトとして直感的に扱えるようになり、リレーショナルデータベースにアクセスするプログラムを記述する処理を容易にできる。
オブジェクトへのデータ取得などの処理を透過的に行えるようになるので、煩雑になりがちなデータベースに関する処理の記述がスマートになり、また柔軟なアプリケーションの構築が可能となる。

O/Rマッパー

オブジェクトとリレーショナルデータベースをつなぐもの
主な、O/Rマッパーとして、
Java言語向けのHibernateRuby言語向けのActiveRecordなどがある。

vimカラーをSolarizedに変更する

カラーがきつくて、見づらいなぁと思っていたので、変更してみる。

見た結果、Solarizedというのがよさげだったので、それにする。

ダウンロード

下記サイトからダウンロード
http://ethanschoonover.com/solarized/vim-colors-solarized

ファイル配置

解凍して、下記のフォルダに移動
autoload、 colors、docが対象

/usr/share/vim/vim72

設定ファイル編集

追記する

# vi /etc/vimrc

syntax enable
set background=dark
let g:solarized_termcolors=256
colorscheme solarized

256色対応

puttyの設定を変更する。

接続>データ>端末の詳細>端末タイプを表す文字列

ここのxtermを下記に変更

xterm-256color

無事表示された!イイネ!

ftpサーバ設定

そういえばやってなかった気がするので、設定する。

インストール

# yum -y install vsftpd

設定ファイル編集

下記を編集する。

# vi /etc/vsftpd/vsftpd.conf

匿名ユーザのログイン禁止

anonymous_enable=NO

ログの設定をする

xferlog_file=/var/log/vsftpd.log
xferlog_std_format=NO

タイムアウト時間を設定

idle_session_timeout=600
data_connection_timeout=60

アスキーモードでアップロード/ダウンロードを許可する

ascii_upload_enable=YES
ascii_download_enable=YES

アスキーモードとは
テキストファイル転送用モードのこと。
アスキーモードでファイルをアップロードすると、異なる改行コードを自動的に修正してくれる。

ホームディレクトリより上層へのアクセスを禁止(デフォルト)

chroot_local_user=YES

ホームディレクトリ上部のアクセス禁止ユーザーリストの有効化とファイル名

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

ディレクトリ削除を許可

ls_recurse_enable=YES

タイムスタンプを日本時間に合わせる

use_localtime=YES

パッシブモードの有効と設定

pasv_promiscuous=YES
pasv_min_port=60000
pasv_max_port=60030

パッシブモードとは
インターネット上のFTPサーバが、ファイアウォールの設定で、20番ポートからのコネクション確立を許可するようなっていない場合でもデータコネクションが確立できるようにするための方法。
この場合、クライアントはPORTコマンドの代わりにPASVコマンドを送信する。

ユーザーリスト作成

それぞれ、上部ディレクトリ禁止ユーザーリスト、ftpアクセス禁止リスト

# vi /etc/vsftpd/chroot_list
# vi /etc/vsftpd/user_list

接続できるクライアントを制限する

許可設定

プライベートアドレスとサーバ自身を指定

# vi /etc/hosts.allow

vsftpd : 192.168.XXX.XXX 127.0.0.1

拒否設定

上記以外すべて拒否するようにする

# vi /etc/hosts.deny

vsftpd : ALL

vsFTPDの起動と設定

起動時にvsFTPDをを起動するようにも設定する。

# /etc/rc.d/init.d/vsftpd start
# chkconfig vsftpd on

設定を確認

# chkconfig --list vsftpd

vsftpd          0:off   1:off   2:on    3:on    4:on    5:on    6:off

アクセスしてみる

というわけで無事アクセス完了!
ユーザーのパスワードを忘れたか指定してなかったので、passwdで設定したけど…。

メタ言語less

とても便利なので、入れておこうと思います。

cssと異なり、
入れ子にできる、変数が使え、数値計算ができ、簡単な関数のようなものが作成できる。

すっきりかける

@color: #4D926F;

#header {
    color: @color;
    h2 {
        color: @color;
    }
}

node.jsインストール

サイトから安定版をダウンロード。

$ wget http://nodejs.org/dist/v0.6.14/node-v0.6.14.tar.gz
$ tar zxvf node-v0.6.14.tar.gz
$ cd node-v0.6.14
$ ./configure

ここでエラー。いろいろ不足しているのでインストール

# yum install gcc-c++
# yum install make

そしてインストールの続き

$ make
# make install
$ node -v               # v0.6.14
$ which node            # /user/local/bin/node

curlをインストール

# curl http://npmjs.org/install.sh | sh

lessをインストール

# npm install -g less

$ lessc styles.less > styles.css

こんな感じで使える。
のちのち使う予定~。