naobe @ ウィキ
UNIX共通
最終更新:
naobe
-
view
Unix/Linuxに戻る
ロック
スピンロック
lock(){
while(m) //永久ループ
;
m=TRUE;
}
unlock(){
m=FALSE;
}
ファイルの権限
ls -lを実行すると以下のように表示する。
-rwxr-xr-x 1 root root 1249 1月 7 2007 xmkmf -rwsr-xr-x 1 root root 22984 1月 7 2007 passwd -rwxr-xr-x 1 root root 603696 1月 7 2007 cdrdao -rwxr-xr-x 1 root root 19668 1月 7 2007 cue2toc
-rwsr-xr-xを説明する。最初の-はファイルの種類を表す(d:ディレクトリ、s:ソケット、p:パイプ、l:ロック)。3文字で区切った部分が、ユーザ、グループ、他者の権限を表す。rwsはユーザが読み、書き、実行、SetUIDの権限を持っていることを表す。次のr-xはグループが読み、実行の権限を持つことを表す。r-sなら実行権限とSetGID権限を持つ。最後のr-xは他者が読み、実行の権限を持つことを表す。
Sが表示されると、実行権がなくて、SetUID or SetGIDがセットされていることを表す(不正な状況)。
8進で表示すると各ビットは、SetUID,SetGID,ステッキービット,ユーザ読み,ユーザ書き,ユーザ実行,・・・となる。
プロセスの配置
a.out
ヒープ領域はアドレスの大きい方向に成長する。スタックはアドレスの小さい方向に成長する。bssは初期値のない大域変数が割り当てられるセグメント。最初にロードしたときに0クリアされる。
ELF
スタックセグメントはコードセグメントの前にあってアドレスの小さい方向に成長する。ヒープセグメントはa.outと同様。
UNIXオブジェクトファイル形式
UTC(Coordinate Universal Time)
http://e-words.jp/w/UTC.html 参照
協定世界時間。全世界で時刻を記録する際に使われる公式な時刻。GMTとほぼ同じ。GMTは天体観測をもとに決定するが、UTCはSI単位系の1秒を原子時計で計測して決定している。GMTにおける1958年1月1日0時0分0秒からの経過時間を原子時計でカウントして定めた時刻である「国際原子時」に、GMTとのずれを調整するための「閏秒」を追加したものがUTCである。
海の潮汐運動がブレーキとなり、地球の自転周期は年々長くなっているため、放っておけばGMTとUTCは100年で約18秒ずれてしまう。このずれを1秒以下に抑えるため、ずれが0.8秒を超えるとUTCに閏秒を追加して、GMTとの差を詰める。
協定世界時間。全世界で時刻を記録する際に使われる公式な時刻。GMTとほぼ同じ。GMTは天体観測をもとに決定するが、UTCはSI単位系の1秒を原子時計で計測して決定している。GMTにおける1958年1月1日0時0分0秒からの経過時間を原子時計でカウントして定めた時刻である「国際原子時」に、GMTとのずれを調整するための「閏秒」を追加したものがUTCである。
海の潮汐運動がブレーキとなり、地球の自転周期は年々長くなっているため、放っておけばGMTとUTCは100年で約18秒ずれてしまう。このずれを1秒以下に抑えるため、ずれが0.8秒を超えるとUTCに閏秒を追加して、GMTとの差を詰める。
メタ文字
以下の文字はメタ文字として扱われ、表示したい場合はバックスラッシュを使う。
" $ @ & ' ( ) ^ | [ ] { } ; * ? < > ` \ スペース 改行,タブといったエスケープ・シーケンス
端末エスケープシーケンス
http://archive.linux.or.jp/JF/JFdocs/Bash-Prompt-HOWTO-5.html 参照
http://www14.ocn.ne.jp/~bkclass/doc_vt100.html
http://www14.ocn.ne.jp/~bkclass/doc_vt100.html
端末にエスケープシーケンスを出力すると、色、カーソル位置を変更できる
エスケープシーケンスは0x1Bで始まる。
エスケープシーケンスは0x1Bで始まる。
| エスケープシーケンス | 色 |
|---|---|
| ESC[0;30m | 黒 |
| ESC[0;31m | 赤 |
| ESC[0;32m | 緑 |
| ESC[0;33m | 茶 |
| ESC[0;34m | 青 |
| ESC[0;35m | Purple |
| ESC[0;36m | 水色 |
| ESC[0;37m | 薄灰色(light grey) |
上記でESCは0x1B(10進の27)
CentOSのinitシェルの中に以下の記述がある
SETCOLOR_SUCCESS="echo -en \\033[0;32m"
033は8進(10進では27)。
033は8進(10進では27)。
ロケール
言語、国、文字コードで表される。メッセージ、日付、数値、ソート順等を、国、言語ごとに異なる書式で表示するために設定する。全てを同じロケールに設定するには、LC_ALLまたはLANGのみ設定しておけばよい。ロケールの設定一覧を見るには、localeコマンドを引数なしで実行する。
ロケール名
language(_territory)(.encoding)(@modifier)
【例】
ja_JP.UTF-8 言語:ja, 地域:JP, エンコード:UTF-8
【例】
ja_JP.UTF-8 言語:ja, 地域:JP, エンコード:UTF-8
umask
ファイルパーミッションを禁じるビットを設定する。666に対して、umaskを引いた値が、ファイルのパーミッションになる。
引くといってもビット(0,2,4)を0にするということ。
引くといってもビット(0,2,4)を0にするということ。
パーティション分割
最低限以下のパーティションに分割すべき。/と/usrは変化しない。/varと/homeは日々変化する。バックアップの観点から、日々変化するところのみバックアップしておけば良いということか。
- /
- /var
- /home
権限
プロセスがファイルを読み/書き/実行するときに、プロセスの実効ユーザID、実効グループIDとファイルに割り当てられた権限から許可されるか判定し読み/書き/実行する。以下の順番で判定する。
- プロセスの実効ユーザIDとファイルのユーザ権限を比較
- プロセスの実効グループIDとファイルのグループ権限を比較
- ファイルのその他権限を適用
ディレクトリの扱い
UNIXではディレクトリは特殊なファイルとして取り扱われ、ファイルの作成や削除は、そのファイルが存在するディレクトリの内容を変更することを意味する。
| ディレクトリパーミッション | ディレクトリ |
| r | ディレクトリの内容を一覧できる |
| w | ディレクトリ内にファイルを追加/削除/リネームできる |
| x | ディレクトリ内のファイルを操作できる。サブディレクトリを作成できる。 |
| 操作 | ディレクトリパーミッション |
| ディレクトリに含まれるファイルの一覧を表示する | r-x |
| ディレクトリにファイルを新規作成する | -wx |
| ディレクトリからファイルを削除する | -wx |
| ディレクトリに含まれるファイルを読み出す | --x |
| ディレクトリに含まれるファイルを上書きする | --x |
| ディレクトリに含まれるファイルをリネームする | -wx |
| ディレクトリにサブディレクトリを作成する | -wx |
| ディレクトリからサブディレクトリを削除する | -wx |
プロセス
プロセスグループ
jobコントロールなどを行う為に、パイプライン等で繋げられた複数のプロセスをグループ化したもの。
spawn
Solarisではq、fork()-exec()によるプロセスの生成をspawnと言う。
ジョブ
http://www.q-eng.imat.eng.osaka-cu.ac.jp/~ippei/unix-tips/jobs-process.html 参照
「ジョブ」というのはシェルが管理する仕事の単位。 シェルは自分が起動したコマンド一つ一つを「ジョブ」という単位として扱い、そしてジョブの状態を常に把握、管理する。仕事の実体は一つだけど、「ジョブはシェルによって」「プロセスは OS によって」と管理される主体が違う。
「ジョブ」というのはシェルが管理する仕事の単位。 シェルは自分が起動したコマンド一つ一つを「ジョブ」という単位として扱い、そしてジョブの状態を常に把握、管理する。仕事の実体は一つだけど、「ジョブはシェルによって」「プロセスは OS によって」と管理される主体が違う。
UNIXの起動とプロセス
vi 制御文字入力
たとえば、Ctrl+D なら、EOT(0x04) が入力される。Dは0x44で、Ctrlキーは0x40減算する。
ttyが高機能になってASCII制御文字だけでは足りなくなると、エスケープシーケンスが使われるようになる。エスケープシーケンス
は、ESC(0x1b)に続けて複数のコードを送り、それでひとつのコマンドとする。
ttyが高機能になってASCII制御文字だけでは足りなくなると、エスケープシーケンスが使われるようになる。エスケープシーケンス
は、ESC(0x1b)に続けて複数のコードを送り、それでひとつのコマンドとする。
vimで制御文字をファイルに入力するには Ctrl+V に続けて、制御文字を入力する。たとえば、ESC(0x1b)を入力するには、Ctrl+V
Ctrl+[
Ctrl+[
拡張子
| 拡張子 | 説明 | 備考 |
| la | 動的リンクライブラリ | |
| a | 静的リンクライブラリ | |
| so | 動的リンクライブラリ |
MANページの設定
/etc/man.config
ハッシュの作成
openssl dgst [-md5|-sha1] ファイル名
シェルを使わせたくないユーザに割り当てるシェル
/bin/false 常に終了コードに1を返す
smartd
ハードディスクの状況を調べるデーモン
ATAではサポートされていない機種が多いため、起動スクリプトを無効にしておく。
ハードディスクが、smartdをサポートするかどうかは、#smartctl -i /dev/hdaを使う
ハードディスクが、smartdをサポートするかどうかは、#smartctl -i /dev/hdaを使う
シグナル
以下のコマンドでプロセスに対してシグナル(割り込み)を伝える
kill -s シグナル名|シグナル番号 プロセスID1 [プロセスID2 ...]
| シグナル番号 | シグナル名 | 説明 | デフォルトアクション | 発生方法 |
| 1 | SIGHUP | 制御端末(controlling terminal)のハングアップ検出、または制御しているプロセスの死 | プロセスを停止 | |
| 2 | SIGINT | キーボードからの割り込み | プロセスを停止 | ctrl + C |
| 3 | SIGQUIT | キーボードによる中止 | コアを吐いて停止する | ctrl + \ |
| 5 | SIGTRAP | |||
| 6 | SIGABRT | abort(3) からの中断 (Abort) シグナル | コアを吐いて停止する | |
| 8 | SIGFPE | 0による除算 | コアを吐いて停止する | |
| 9 | SIGKILL | 無視したり捕捉することができない。 | プロセスを停止 | |
| 10 | SIGUSR1 | ユーザ定義シグナル1 | ||
| 11 | SIGSEGV | 権限のないメモリアクセス | コアを吐いて停止する | |
| 12 | SIGUSR2 | ユーザ定義シグナル2 | ||
| 13 | SIGPIPE | Broken pipe. 閉じられたパイプやソケットに書き込むと発生。 | プロセスを停止 | |
| 14 | SIGALARM | alarm(2) からのタイマーシグナル。ジョブコントロール | プロセスを停止 | |
| 15 | SIGTERM | 終了 (termination) シグナル | プロセスを停止 | |
| 18 | SIGCONT | 保留されたプロセスを再開 | ||
| 19 | SIGSTOP | プロセスの一旦停止。無視したり捕捉することができない。 | プロセスを保留 | |
| 20 | SIGTSTP | 端末 (tty) より入力された一旦停止 (stop) | プロセスを保留 | ctrl + Z |
CDROMのマウント
その他
| デフォルトのファイル許可モード | 666 |
| umask | 002 |
| 端末を終了しても継続してコマンドを実行する | nohup command & |
| 優先度を下げてコマンドを実行する(優先度を10下げる) | nice command & |
| 環境変数の一覧を表示する | export |
| 環境変数とは | 子プロセスに伝搬する変数。シェル変数は当該のシェルのみ使える(子プロセスは使えない)。環境変数は親子関係のないプロセス間で共用できない。 |
| Ctrl-D | ログオフ |
