#contents

*すぐに忘れるコマンド達 [#e07f1b58]
ファイルを他のサーバーにコピーする。
 # cd /usr/local/apache2/htdocs
 # scp index.php root@192.168.0.105:/usr/local/pache2/htdocs/
ディレクトリを削除
 # rm -r -f target.file   (-r でディレクトリもOKに、-f ですべてYesで自動的に答える)
起動時のメッセージ表示(カーネルのリングバッファの内容を表示する)
 # dmesg
logなどでファイルの最後(最新logなど)を確認したいとき(数字は表示行数)
 # tail -n 20 logfilename
マッチしなかった行を表示(grep -v オプションが有効)
 # cat logfilename | grep -v 192.168.0
現在のフォルダ位置
 # pwd
ファイルのリンク(file-A を file-B としてアクセスできるリンクコピーを作成)
 # ln -s /usr/local/mypg/bin/file-A /bin/file-B
rootでも削除できないようにファイルの属性を変更
 # chattr +i file_name                           <-( -R で再帰 )
*bashの便利なコマンド [#qe2ec9c4]
CentOS では初期のシェルがバッシュで起動するようになっています。そこで、Bashの環境変数を設定する方法を説明します。Bashでは以下の順番でユーザー環境設定ファイルが読み込まれます。
+/etc/profile
+~/.bash_profile
+~/.bash_login ( .bash_profile が存在しないとき)
+~/.profile ( .bash_profile, .bash_login とも存在しないとき)
~
※〜は、ログイン時の初期フォルダ位置です。しかしながら、この bash_profileファイルはログイン時のみに読み込まれ、ログイン後に bash シェルを新たに起動した場合は読み込まれない。その場合は,~/.bashrc ファイルが読み込まれる。ちなみに、ログアウト時には~/.bash_logoutが読み込まれ実行される。~
~
通常、/etc/profileをいじることはまずないので、以下の2つのファイルを修正します。~
 # emacs ./.bash_profile
 echo Profile start                                                         <- message表示
 alias  ls='ls -al -F --color=auto'                             <- アイリアス設定
 # emacs ./.bashrc
 PS1="\033[31m[\u@\h\033[31m:\w] \\$ \033[0m"           <- コマンドプロンプトの設定

 ¥u … ユーザ名&br;
 ¥h … ホスト名&br;
 ¥W … カレントディレクトリ&br;
 ¥$ … $という文字(画面上に $ を表示させるという意味)だけじゃなくて、一般ユーザであれば『 $ 』、root ユーザ(UID が 0) であれば『 # 』を表示させます。

|動作|すべてクリア|太字|黒|赤|緑|黄|青|紫|水色|白|
|¥[033[xxm のxxの数字|0|1|30|31|32|33|34|35|36|37|

**Shellの条件分岐の引数 [#o0037180]
if [ -n $TEST ]; then などのif文の引数の説明
|-n $TEST|変数TESTの長さが0より大きいとき真|
|$TEST|変数TESTがNULLでないとき真|
|-z $TEST|変数TESTの長さが0のとき真|
|$TEST = $TEST2|2つの文字列が等しいとき真|
|$TEST != $TEST2|2つの文字列が等しくないとき真|

**history [#t30b5140]
シェルに入力した過去のコマンドに連番をつけて、再呼び出しの為の一覧表を作成できます。
 # history               <- 過去のコマンド一覧
 # !830                  <- コマンドに振られた番号のコマンドを再実行

**screen 複数の仮想コンソールを管理する [#q64d8832]
http://www.dekaino.net/screen/

**GREPでサブディレクトリも検索 [#p27307b3]
下記のコマンドは、カレントディレクトリから TARGETSTRINGを検索します。
 # find ./ -name \*.c -exec grep TARGETSTRING {} \;
または
 # find ./ -type f -print | xargs grep TARGETSTRING /dev/null
パスのコマンドの位置を確認するには、以下のコマンドが便利
 # which <command-name>

**GREPで文字列の除外もできる。 [#wf1dec2c]
ps 関数などで、自分自身が入ってしまうときなどに重宝する。

<mysql が起動しているか?>
 # ps ax | grep -v grep | grep mysqld_safe

***リダイレクトについて [#o44f5df7]
-[[とても分かりやすいリダイレクトのページ:http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8]]

***キーボードショートカット [#y33df3dc]
|CTRL-Z|プロセスを中断しbashに戻る。jobsコマンドで現在の中断プロセスを確認。bg <processID> でjobsコマンドで得たプロセスをバッググランドで再開する。|

*SH commandを作成するときに注意すること [#d110a4d9]
ファイルで新しいコマンドを作成するとき
 # emacs new-com.py
   #!/usr/local/bin/python           <- このコマンドの右にスペースを入れること
    ----
    ----
    ----
**便利なエイリアス [#k370f5f6]
 # alias lm='ls -lt -r'            <- 日付の古い順(一番下が一番新しい)
 # alias e='emacs'
 # alias pl='ps ax | grep'

**フォルダ一括処理 [#m8ff9889]
 #!/bin/sh
 for file in `ls -1`
 do
     <command> $file
 done

*** フォルダだけリスト表示 [#w39b8ac0]

 $ ls -F | grep / | sed -e 's/\///g'

*** フォルダやファイルサイズ 0 のものだけ一括削除 [#v15e8800]
 $ find . -maxdepth 0 -size 0 -ok rm {} \;          <- 確認付き
 $ find . -maxdepth 0 -empty | xargs rm             <- 確認なし

ディレクトリが空
 $ find . -maxdepth 1 -empty | xargs rm -r

*** expr コマンドの説明 [#xaf16dfe]

 足し算をする
   $ expr 1 + 5 
   6
 環境変数$val1が10以上であるかを確かめる
   $ expr $val1 >= 10 
   0   ← 偽を返しているので$val1は10より小さい
 拡張子を除く処理
   $ expr "test.txt" : "\(.*\)\."
   test
 「expr 文字列 : 正規表現」書式の正規表現中で「\(\)」が使われていた場合は、括弧で囲まれた範囲が結果として出力される。
 「.」任意の文字列「*」直前の0回以上の繰り返し「\.」ピリオド文字のため、ピリオドの直前までの文字列を取り出す。

※拡張子を除く処理は拡張子がわかっている場合は、
   $ basename test.txt .txt
でも取得できる。

**ファイル名の文字コードを一括変更 [#i42f301b]
SJISのファイル名になってしまっているものを、一括してUTF-8に変更する。
 # convmv -r -f sjis -t utf8 * --notest

**Diskの容量を確認 [#me6d0131]
 # du -sm ./* | sort -n
 # df -h
フォルダのサイズを調べたいとき
 # du -s -h


**シェルスクリプトのデバッグモード [#r44f9410]
 # sh -x <scriptfile>

**スクリプト内でよく利用される表記 [#ld9d03b1]
 if [ -x hogehoge.exe ]; then
    echo Execute OK
 else
    echo No execute
 fi
このファイル名に指定できる特別なオプションには以下の種類がある。~
|-b|指定したファイルがブロックデバイスファイルなら真|
|-c|指定したファイルがキャラクタデバイスファイルなら真|
|-d|指定したファイルがディレクトリなら真|
|-f|指定したファイルが通常ファイルなら真|
|-L|指定したファイルがシンボリックリンクなら真|
|-p|指定したファイルが名前付きパイプなら真|
|-S|指定したファイルがソケットなら真である|
|-g|指定したファイルにSGIDがセットされていれば真|
|-k|指定したファイルにスティッキービットがセットされていれば真|
|-r|指定したファイルが読み取り可能なら真|
|-u|指定したファイルにSUIDがセットされていれば真|
|-w|指定したファイルが書き込み可能なら真|
|-x|指定したファイルが実行可能なら真|
|-e|指定したファイルが存在すれば真|
|-s|指定したファイルのファイルサイズが0より大きければ真|
文字列のチェック
|-n 文字列|文字列の長さが0より大きければ真|
|-z 文字列|文字列の長さが0であれば真|
|文字列1 = 文字列2|2つの文字列が等しければ真|
|文字列1 != 文字列2|2つの文字列が等しくなければ真|
~
|Bash特別変数|説明|
|$n|nはNumeric、$0=シェルスクリプト名、$1=第1引数、$2=第2引数、第10引数以降は${10}、${11}となる。|
|$#|与えられた引数の数|
|$@|$0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1" "$2" …"のように個別に展開される。)|
|$*|$0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1 $2 …"のように展開される。)|
|$?|最後に実行したコマンドの終了ステータス|
|$!|最後に実行したバックグラウンドコマンドのPID|
|$$|シェルのPID|
|$-|現在のオプションフラグ|
~
[[http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html#2]]~
~

**Vi command [#m3582bda]
|ESC|コマンドモードに移行|
|i|インサートモードに移行|
|o|カーソル行の後に1行あけてからインサートモード|
|dd|カーソル行を1行削除|
|yy|カーソル行をコピー|
|p|カーソル行の下に貼り付け|
|d$|カーソル位置から右を行末まで削除|
|nG|ファイルの先頭からn行目の左端へ移動|
|/<文字列>|文字列を検索|
|?<文字列>|文字列を逆検索|
|n|順方向へ再検索|
|N|逆方向へ再検索|
|>|コマンドモード|
|:q|終了|
|:q!|保存せずに強制終了|
|:wq|セーブして終了|

**時間あわせ [#j96a5d80]
 # date --set="30/08/09" --set="05:44:44"
 # hwclock --systohc
 # clock                                            <- BIOS時間表示
 # date                                             <- Linux時間表示

**特定の時間以前のファイルをフォルダを移動 [#xe7ffa22]
50日以前のlogファイルをoldフォルダに移動させる。
 # find . -name "*.log" -mtime +50 -exec mv {} old \;

60分以前のlogファイルをoldフォルダに移動させる。
 # find . -name "*.log" -mmin +60 -exec mv {} old \;

**サーバーステータス情報の表示 [#l238b99e]
 # vmstat 10

見方
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache     si   so    bi    bo   in   cs  us sy  id wa st
 1  0    104 1659000  42708 2031720    0    0     0     0  990   107  0  0 100  0  0

|グループ|項目|意味|h
|procs|r|実行待ちのプロセス数。CPUの数以上ならCPU負荷が高い状態|
|~|b|割り込み不可のスリープ状態にあるプロセス数|
|~|w|スワップアウトされている、実行可能なプロセス数|
|memory|swpd|仮想メモリの容量(Kbytes)|
|~|free|空きメモリの容量(Kbytes)|
|~|buff|バッファに使用されているメモリの容量(Kbytes)|
|~|cache|キャッシュに使用されているメモリの容量(Kbytes)|
|swap|si|ディスクからスワップインされているメモリの容量(Kbytes/s)|
|~|so|ディスクにスワップアウトされているメモリの容量(Kbytes/s)|
|io|bi|ブロックデバイスに送られたブロック(blocks/s)|
|~|bo|ブロックデバイスから受け取ったブロック(blocks/s)|
|system|in|1秒当たりの割り込みの回数(クロックの割り込みも含む)|
|~|cs|1秒当たりのコンテキストスイッチの回数|
|cpu|us|CPU総時間当たりのユーザー時間の割合(%)|
|~|sy|CPU総時間当たりのシステム時間の割合(%)|
|~|id|CPU総時間当たりのアイドル時間の割合(%)|

**ファイルの圧縮・解凍 [#b12fc9e2]

***tar.gz方式 [#w3e2dd2f]
圧縮
 # tar CZVF archivefile.tar.gz /sourceDirectory/
解凍
 # tar XZVF archivefile.tar.gz
内容表示
 # tar TZVF archivefile.tar.gz

***Bz2方式 [#tb4f9372]
圧縮
 # bzip2 archivefile.bz2
解凍
 # bzip2 -d archivefile.bz2

*** 7za 方式 [#w396d46f]
圧縮
 # 7za a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=1024m xxxx.7z xxxxx
解凍
 # 7za x xxxx.7z
中身と圧縮情報の表示
 # 7za l xxxx.7z
※xxxxは、ファイル or フォルダ名

 オプション説明
|オプション引数名|選択可能値|概要|h
|-t|7z,bzip2,cab,gzip,lzma,tar,xz,Z,zip|圧縮フォーマット(Type)|
|-m0=|lzma,lzma2,BZip2,Deflate,Deflate64,7zAES|圧縮方式(Codec, Method)|
|-mx=|0-9|圧縮レベル0...最低 9...最高、初期値5|
|-mfb=|8-256|ワードサイズ。大きいほど圧縮比があがる。初期値64|
|-md=|1-65536m|辞書サイズ、別名ソリッドブロックサイズ。初期値64m。数字の後ろのmは、Megabytesの略|
|-ms=|on,off|ソリッド圧縮の on/off 初期値 on。offにすると大概圧縮比が悪くなる|
|-mqs||拡張子でソートする。メモリが小さく辞書サイズが大きく取れない場合に有効。以前の古い7zではこちらが初期値だった。指定無しの場合はファイル名でソートになる|

*リンクを確認 [#n31f10e9]
 # ldd /usr/lib/libsocket.so.1     <- 引数はコマンドでもOK

**特定のプロセスのポート確認 [#t501e205]
 # lsof -i:80

*ネットワーク関係のコマンド [#b9ffbfeb]
***ncコマンド [#rbba37f0]
nc(netcat)コマンドはtcpまたはudpのポートと標準入出力を繋げるコマンドである。通信のsshのトンネルなどの場合に利用することが多い。( 例: nc <option> サーバ名 ポート番号 )
|-e|コマンドを実行(コンパイル時の指定が必要)|
|-l|リッスンモード|
|-u|UDPモードにて通信を行う。指定しないとtcpモード|
|-n|名前解決を行わない|
|-s|ソースポートを指定|
|-z|スキャンのみを行いデータを送らない|
ポートの稼働チェック(ポートスキャン)
 # nc -z -v target-server 53      <- ポートの範囲指定は 53-55 のように指定
通信データを標準出力に出力する。
 # nc -l -p 53
-[[参考ページ:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/790usenetcat.html]]

***mknodコマンド [#oe4b398c]
mknodはネットワーク専用のコマンドではないが、tun/tapなどのインターフェイスを作成するときに利用するのでここでも紹介する。~
''tunデバイスの作成''
 # mkdir /dev/net (まだ /dev/net が存在しない場合)
 # mknod /dev/net/tun c 10 200                        <- ここでmknod
 # chmod 0700 /dev/net/tun
''mknodの引数の説明''
|記号|デバイスタイプの種類(第二引数)|
|b|ブロック・デバイス|
|c|キャラクター・デバイス|
-三番目の引数は、メジャーなデバイスタイプを指定する。 (例えば、デバイスドライバ番号)ここでは10を指定している。
-四番目の引数は、マイナー番号と呼ばれ、デバイスの位置を指定する。 (常にというわけではないが、一般的に、ユニット、ドライブ、回線番号のうちのどれか 1つか2つ以上の任意の組合わせ、または全部)。ここでは200を指定している。~
~
''作成したデバイスを登録する''~
自動でモジュールとしての登録。ここで登録しておくと/dev/net/tun がオープンされた時にモジュールは自動的にロードされる。~
 # vi /etc/modules.conf
   alias char-major-10-200 tun
 # depmod -a 
手動でモジュールの登録であれば以下のコマンド
 # modprobe tun                  <- openvpnのスクリプトにも記載されているコマンド

***depmodとmodprobe [#ae716666]
上記のmknodで利用されていたdepmodとmodprobeの2つのコマンドを説明する。基本的にはデバイスをコントロールするためのコマンドであるが、大きな違いがある。~
''depmod''~
このdepmodは-aオプションを指定することで、/etc/modules.confの設定に従い、デバイスの依存関係を整頓する機能がある。(モジュールの依存関係をファイル'/lib/modules'に作成して解決する。また依存関係ファイルをユーザーが直接意識の必要はないと思われる)~
 # /sbin/depmod -a
''modprobe''~
modprobeは内部的にはinsmodのラッパーであり、モジュールをカーネルにロードするための機能である。但しこのmodprobe単体でモジュール間の依存関係を解決するわけではないため、上記depmodとの併用利用となる。上記でも記述していたように、tun を直接手動で登録する場合などに利用される。(modprobeの設定ファイルは、/etc/modprobe.conf)~
通常は標準的なモジュールはカーネルコンパイル時に導入されているので、tunのような一般的なモジュールは、modprobe tun とするだけでカーネルにロードされ、利用できるようになる。余談だがLinuxはロードされたモジュールが一定時間利用されないと、メモリから自動的に解放される)~
 # modprobe -c                    <- 定義され利用できるモジュールの一覧(巨大)
 # modprobe tun                   <- tun モジュールをカーネルにロード

***route [#k7577a38]
ローカルのルート情報(IPの転送を決定する情報)を変更するためのコマンド。例えばVPNなどで一部のローカルセグメントは、違うゲートウェイを利用するような場合。
 # route add -net 192.168.100.0 netmask 255.255.255.0 dev tun0
削除は同じ内容でコマンドだけ変更する。
 # route delete -net 192.168.100.0 netmask 255.255.255.0 dev tun0
[[Routeコマンドのオプション説明:http://www.pochinet.org/linux2R002.htm]]
***iptables [#obd35ade]
カーネルレベルのプログラムであり、デバイスの入出力パケットをコントロールする。詳細はセキュリティ項目を参照の事。~
~
''現状のiptables の設定状況の表示コマンド''
 # iptables --list --line-numbers -v -x

*mail関係 コマンド [#xbcefb1b]
**mailの送信 [#f1268db5]
 # mail -

**受信したmailの内容確認 [#iab2c59b]
 # mail [-s SUBJECT] [-c CC] [-b BCC] [ADDRESS] 
※本文はインタラクティブで入力

<一覧表示>
 & h

<個別表示>
 & xx                                  <- xxはメール番号

<削除>
 & 100                               <- 100番のメール削除
 & 100-200                        <- 100~200番のメール削除

<終了>
 & q


*LINUXの総本山 [#i553d988]
[[Linux Foundationのページ:http://www.linuxfoundation.org/]]~
SDK のインストール
 # wget http://ftp.linux-foundation.org/pub/lsb/bundles/released-3.2.0/app-testkit/lsb-atk-manager-3.2.0-8.ia32.tar.gz
 # tar zxvf lsb-atk-manager-3.2.0-8.ia32.tar.gz
 # cd lsb-app-testkit
 # ./install.sh

*chkconfigについて [#r440ad98]
Red Hat系のディストリビューションでは、chkconfig というサービス登録のコマンドがあり、とても便利ですが、yumではなくソースコードから入れた場合、どこに設定ファイルを入れてよいか、わからない場合が多いと思います。chkconfig は以下の2つのファイルを参照します。~
 <例:named >
 # /etc/rc.d/init.d/named              <- serviceコマンドからのシェルスクリプト
 # /etc/sysconfig/named                <- 基本的なconfig設定
上記の2つのファイルを設定すると、chkconfig --list コマンドにそのサービスが登録され、サービスのランレベル等の設定が可能になります。
 # chkconfig --list | grep named
 # chkconfig --add named
 # chkconfig named on

*ルーターのグローバルIPを取得したいとき。 [#b5ea9ed8]
[[http://seo-sem.org/IPadder.php:http://seo-sem.org/IPadder.php]]このアドレスにアクセスすると、自分のIPが見れる。~

*GNU binutilsの導入 [#e2beb934]
GNUのバイナリユーティリティである、binutilsには、いろいろな便利な機能が含まれている。
**GNU binutilsのインストール [#fd669ae5]
 # wget ftp://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.gz
 # tar zxvf binutils-2.22.tar.gz
 # cd binutils-2.22
 # ./configure
 # make
 # make install

*UnixコマンドのErrorコード表 [#r5b6abf5]
|Error定数名|Errorコード|エラーの詳細|
|EPERM|1|Not super-user 送信者が struct ucred(ユーザ資格証明構造体) に不正な信任状を渡した。|
|ENOENT|2|No such file or directory 指定したファイルやディレクトリは存在しない|
|ESRCH|3|No such process そのようなプロセスは無い|
|EINTR|4|interrupted system call 関数呼び出しが割り込まれた|
|EIO|5|I/O error 入出力エラー|
|ENXIO|6|No such device or address そのようなデバイスまたはアドレスは無い|
|E2BIG|7|Arg list too long 引数リストが長すぎる|
|ENOEXEC|8|Exec format error Exec 形式のエラー|
|EBADF|9|Bad file number ファイルディスクリプタが不正|
|ECHILD|10|No children 子プロセスがない|
|EAGAIN|11|Resource temporarily unavailable リソースが一時的に利用不可|
|ENOMEM|12|Not enough core 十分なメモリが足りない|
|EACCES|13|Permission denied 権限がない|
|EFAULT|14|Bad address ユーザーメモリアドレスが不正|
|ENOTBLK|15|Block device required ブロックデバイスが必要|
|EBUSY|16|Mount device busy リソースが使用中|
|EEXIST|17|File exists ファイルが存在する|
|EXDEV|18|Cross-device link 不適切なリンク|
|ENODEV|19|No such device そのようなデバイスは無い|
|ENOTDIR|20|Not a directory ディレクトリではない|
|EISDIR|21|Is a directory ディレクトリである|
|EINVAL|22|Invalid argument 渡した引数が不正。よくある原因は、渡したアドレスの sun_type フィールドに AF_UNIX を設定しなかった、行おうとした操作に対してソケットの状態が有効ではなかったなど|
|ENFILE|23|File table overflow システム全体でオープンされているファイルが多すぎる|
|EMFILE|24|Too many open files オープンされているファイルが多すぎる|
|ENOTTY|25|Inappropriate ioctl for device I/O 制御操作が適切でない|
|ETXTBSY|26|Text file busy テキストファイルが使用中|
|EFBIG|27|File too large ファイルが大きすぎる|
|ENOSPC|28|No space left on device デバイスに空き領域が無い|
|ESPIPE|29|Illegal seek 無効なシーク|
|EROFS|30|Read only file system ファイルシステムがリードオンリー|
|EMLINK|31|Too many links リンクが多すぎる|
|EPIPE|32|Broken pipe リモートソケットがストリームソケット上でクローズされた。可能な場合は SIGPIPE も同時に送られる。これを避けるには MSG_NOSIGNAL フラグを sendmsg (2) や recvmsg (2) に渡す|
|EDOM|33|Math arg out of domain of func ドメインエラー|
|ERANGE|34|Math result not representable 結果が大きすぎる|
|ENOMSG|35|No message of desired type 指定された型のメッセージは存在しない|
|EIDRM|36|Identifier removed 識別子が除去された|
|ECHRNG|37|Channel number out of range チャネル番号が範囲を超えた|
|EL2NSYNC|38|Level 2 not synchronized レベル 2 で同期がとれていない|
|EL3HLT|39|Level 3 halted レベル 3 で終了した|
|EL3RST|40|Level 3 reset レベル 3 でリセットした|
|ELNRNG|41|Link number out of range  リンク番号が範囲外|
|EUNATCH|42|Protocol driver not attached プロトコルドライバが接続されていない|
|ENOCSI|43|No CSI structure available CSI 構造体がない|
|EL2HLT|44|Level 2 halted レベル 2 で終了した|
|EDEADLK|45|Deadlock condition. リソースがデッドロックにより拒否された|
|ENOLCK|46|No record locks available. 利用できるロックが無い|
|ECANCELED|47|Operation canceled 操作がキャンセルされた|
|ENOTSUP|48|Operation not supported サポートされていない|
|EDQUOT|49|Disc quota exceeded ディスククオータを超えた|
|EBADE|50|invalid exchange 無効な交換|
|EBADR|51|invalid request descriptor 無効なリクエストディスクリプタ|
|EXFULL|52|exchange full 変換テーブルが一杯である|
|ENOANO|53|no anode 陰極がない|
|EBADRQC|54|invalid request code 無効なリクエストコード|
|EBADSLT|55|invalid slot 無効なスロット|
|EDEADLOCK|56|file locking deadlock error ファイルロックにおけるデッドロックエラー|
|EBFONT|57|bad font file fmt フォントファイル形式が不正|
|EOWNERDEAD|58|process died with the lock ロックを保持したままプロセスが終了した|
|ENOTRECOVERABLE|59|lock is not recoverable ロックは回復不能(ロックの保持中に処理に失敗した前の所有者によって回復不能にされた)|
|ENOSTR|60|Device not a stream ストリーム型でないデバイス|
|ENODATA|61|no data (for no delay io) ストリームの読み出しキューの先頭に読み出し可能なメッセージがない|
|ETIME|62|timer expired 時間切れ|
|ENOSR|63|out of streams resources 指定されたストリーム・リソースが存在しない|
|ENONET|64|Machine is not on the network マシンがネットワーク上にない|
|ENOPKG|65|Package not installed パッケージがインストールされていない|
|EREMOTE|66|The object is remote オブジェクトがリモートにある|
|ENOLINK|67|the link has been severed リンクが切れている|
|EADV|68|advertise error Advertise エラー|
|ESRMNT|69|srmount error Srmount エラー|
|ECOMM|70|Communication error on send 送信時の通信エラー|
|EPROTO|71|Protocol error プロトコルエラー|
|ELOCKUNMAPPED|72|locked lock was unmapped ロックは前の所有者によってアンマップされた|
|ENOTACTIVE|73|Facility is not active その資源は有効ではない|
|EMULTIHOP|74|multihop attempted マルチホップ (multihop) を試みた|
|EBADMSG|77|trying to read unreadable message メッセージが不正|
|ENAMETOOLONG|78|path name is too long ファイル名が長すぎる|
|EOVERFLOW|79|value too large to be stored in data type 指定されたデータ型に格納するには値が大き過ぎる|
|ENOTUNIQ|80|given log. name not unique 名前がネットワークで一意ではない|
|EBADFD|81|f.d. invalid for this operation ファイルディスクリプタが不正な状態|
|EREMCHG|82|Remote address changed リモートアドレスが変わった|
|ELIBACC|83|Can't access a needed shared lib. 必要な共有ライブラリにアクセスできない|
|ELIBBAD|84|Accessing a corrupted shared lib. 壊れた共有ライブラリにアクセスしようとした|
|ELIBSCN|85|.lib section in a.out corrupted. a.out のライブラリセクションが壊れている|
|ELIBMAX|86|Attempting to link in too many libs. リンクしようとした共有ライブラリが多過ぎる|
|ELIBEXEC|87|Attempting to exec a shared library. 共有ライブラリを直接実行できなかった|
|EILSEQ|88|Illegal byte sequence. 不正なバイト列|
|ENOSYS|89|Unsupported file system operation 関数が実装されていない|
|ELOOP|90|Symbolic link loop シンボリック・リンクが多すぎる|
|ERESTART|91|Restartable system call システムコールが中断され再スタートが必要|
|ESTRPIPE|92|if pipe/FIFO, don't sleep in stream head ストリーム・パイプ・エラー|
|ENOTEMPTY|93|directory not empty ディレクトリが空ではない|
|EUSERS|94|Too many users (for UFS) ユーザ数が多過ぎる|
|ENOTSOCK|95|Socket operation on non-socket ソケットではない|
|EDESTADDRREQ|96|Destination address required 宛先アドレスが必要|
|EMSGSIZE|97|Message too long メッセージバッファの長さが適切でない|
|EPROTOTYPE|98|Protocol wrong type for socket ソケットに指定できないプロトコル・タイプ|
|ENOPROTOOPT|99|Protocol not available 指定されたプロトコルが利用できない|
|EPROTONOSUPPORT|120|Protocol not supported 渡されたプロトコルが PF_UNIX でない|
|ESOCKTNOSUPPORT|121|Socket type not supported 未知のソケットタイプ。EPROTOTYPE リモートソケットとローカルソケットのタイプが一致していなかった (SOCK_DGRAM と SOCK_STREAM)|
|EOPNOTSUPP|122|Operation not supported on socket ストリーム指向でないソケットに対してストリーム操作が呼び出された。または帯域外データオプションを用いようとした|
|EPFNOSUPPORT|123|Protocol family not supported サポートされていないプロトコルファミリー|
|EAFNOSUPPORT|124|Address family not supported by アドレス・ファミリーがサポートされていない|
|EADDRINUSE|125|Address already in use 選択したソケットが既に用いられていた、またはファイルシステムのソケットオブジェクトが既に存在していた|
|EADDRNOTAVAIL|126|Can't assign requested address アドレスが使用できない|
|ENETDOWN|127|Network is down ネットワークが不通|
|ENETUNREACH|128|Network is unreachable ネットワークが到達不能|
|ENETRESET|129|Network dropped connection because 接続がネットワーク側から中止された|
|ECONNABORTED|130|Software caused connection abort 接続が中止された|
|ECONNRESET|131|Connection reset by peer リモートソケットが予期しないかたちでクローズ(Reset)された|
|ENOBUFS|132|No buffer space available 使用可能なバッファ空間がない|
|EISCONN|133|Socket is already connected 既に接続されているソケットに対して connect (2) を呼んだ、または指定したターゲットアドレスが既に接続済みのソケットだった|
|ENOTCONN|134|Socket is not connected ソケット操作にターゲットアドレスが必要だが、このソケットは接続されていない|
|ESHUTDOWN|143|Can't send after socket shutdown 通信相手がシャットダウンされて送信できない|
|ETOOMANYREFS|144|Too many references: can't splice 参照が多すぎる|
|ETIMEDOUT|145|Connection timed out 操作はタイムアウトした|
|ECONNREFUSED|146|Connection refused listen 状態にないソケットオブジェクトに対して connect (2) を呼んだ。リモートソケットが存在していなかった、ファイル名がソケットではなかった、などのときに起こる|
|EHOSTDOWN|147|Host is down ホストがダウンしている|
|EHOSTUNREACH|148|No route to host ホストに到達不能である|
|EWOULDBLOCK|EAGAIN|EAGAIN と同義 リソースが一時的に利用不可|
|EALREADY|149|operation already in progress 操作は既に処理中|
|EINPROGRESS|150|operation now in progress 操作は実行中|
|ESTALE|151|Stale NFS file handle ファイルハンドルが古い状態になっている|

*PHPなどのモジュール上で、Rootコマンドの実行を行う場合。 [#wf29d7f4]
LinuxなどのUnixではroot権限がないと実行できないコマンドやアクセスできないファイルなどがあるが、apache上で動いているPHPなどから、アクセスしたい場合がある。そのような場合には以下の手順で許可を出す。
 # visudo
   apache ALL=(ALL) NOPASSWD: /bin/echo,/bin/chmod       <- 追加
   #Defaults    requiretty                               <- コメントアウト
visudoは、sudoコマンドの設定を行うツールであり、上記の2行は上から、apacheユーザーでsudoを利用する場合には、passwdを聞かずに実行でき、また/bin/echoと/bin/chmodコマンドだけroot権限を持つ。2行目はtty(端末)からログインしていなくても、sudoを実行できる。という意味になる。


*トラブルシューティング [#m92c782c]
**Linuxのルートパスワードを忘れたとき [#s1d1c5a5]
http://itpro.nikkeibp.co.jp/article/COLUMN/20061030/252224/

**Argument list too longが出て、コマンドが実行できない。 [#q2e2b4e3]
例えば、mv *.jpg dest を行い多場合。
 # find src -name "*.jpg" -exec mv {} dest \;
で代用できる。(この方法は遅い、xargsを使う事で早く行うことも可能だが、バージョン違いや、OSXなどでは、GNUの CoreUtilsなどのインストールが必要になるので、ここでは紹介しない)