Command and Tools   [Linux]

 メンテナンスやスクリプトの編集などで「このコマンドの削除はどれだっけ?」と迷うことがあります。LinuxとFreeBSDなど複数のサーバーを管理している場合など時折混乱することもあります。ここではこういった迷いを救うため(とは言え、もちろんオーナー自身が忘れっぽいための防御策)、コマンドやツールの機能、使い方などをメモして行きます。

1.基本コマンド
 もっとも基本的なコマンドとしては、
cd  カレントディレクトリの移動
ls   ディレクトリの内容表示
cp  ファイルやディレクトリのコピー
rm  ファイルやディレクトリの削除
mv  ファイルの移動、リネーム
などが上げられると思われます。私自身もこれらは頻繁に使っていると感じます。

 1) cd
 Change Directory
 カレントディレクトリを指定した場所へ移動します。
[root@server /root]# cd /home
[root@server /home]#
cd foo でfooへ移動、cd - で前にいたディレクトリへ戻る。cd ~ あるいはcd で自分のホームディレクトリへ移動。
 2) ls
 List Directory
 指定したディレクトリの内容を表示する。ディレクトリを指定しない場合はカレントディレクトリが対象。
 ls -a .(ドット)で始まるものも含めてリストする
 ls -d ディレクトリの情報表示
 ls -l 詳細表示
 ls -F ファイルの種類を区別して表示
  これらは組み合わせて使用可能。ls -al のように。
 3) cp、mv、rm
 Copy, Move, Remove
 これらのオプションは非常によく似ています。使い方を間違えると大変なことにもなりかねないので、スーパーユーザーで使用する際には十分に注意が必要です。
 cpとmvはファイルやディレクトリのコピー、移動の目的で利用しますが、
 cp(mv) 元ファイル名 先ファイル名(ディレクトリ名) のように指示します。先ファイル名を元ファイル名と異なったものにすると名前を変えてコピー(移動)することになります。
 rmは引数で指定したパスを削除することが出来ますが、よほどのことが無い限りあまり使わない方が賢明だと考えます。削除したものは復元できないからです。
 ○オプション
 cp[mv,rm] -i 確認を取ってコピー(移動、削除) ※Linuxはデフォルトのようです
 cp[mv,em] -f 確認を取らずに強制コピー(移動、削除) ※FreeBSDはこちらがデフォルトのようです
 cp[rm] -r   ディレクトリ内すべてを対象とします

 ◎引数などの補完機能
 コマンドを入力する際に、絶対パスが必要であったり、長いファイル名やディレクトリ名があると結構面倒です。こういう場合は[tab]キーを用いると補完機能が働きます。
 たとえば、
[root@server /root]# cp /h  ←ここで[tab]を押す
[root@server /root]# cp /home
 ←と、補完される


2.viエディタを使う
 設定ファイルの編集などいろんな場面で利用することが多い[vi]ですが、FreeBSDの[ee]エディタなどと異なり、どのようなコマンドやモードがあるのかヘルプ表示はありません。
 せめてよく利用するものだけでも覚えて置いた方が良いでしょう。

 viエディタは編集モードと入力モードを用意していて、機能を使い分けることが出来るようになっています。
 入力モードは[i],[a],[o]で切り替わるようです。[i]はカーソル位置に文字を挿入するモードへ、[a]はカーソル位置の右側へ文字を挿入、[o]はカーソル位置の次の行へ挿入します。私は[i]しか使っていません。
 起動時は編集モードですが、入力モードから編集モードへ戻るには[esc]キーを押します。
 [x]は一文字削除です。カーソル位置の文字を削除します。
 [/]に続けて文字を入れると、その文字を検索するモードに入ります。連続して検索する場合は[n]を入力します。
 [:w]で上書き保存、[:q]でviを終了します。

 viエディタのコマンドなどを整理しておきます。
 ○編集モード → 入力モード
  a カーソルの右側から文字を挿入
  A 行末のカーソルの右側に文字を挿入
  i カーソルのある場所から文字を挿入
  I 行頭から文字を挿入
  o カーソルのある次の行に文字を挿入
  O カーソルのある前の行に文字を挿入
 ○編集モード
  x カーソルのある場所の一文字を削除
  dd カーソルのある行を削除
  yy カーソルのある行をコピー
  p カーソルのある場所にペースト
  P カーソルの後ろにペースト
   ※直前にコピーされたものが対象
  /hoge[Enter] hogeで指定した文字列の前方検索(nで次の候補)
  ?hoge[Enter] hogeで指定した文字列の後方検索(nで次の候補)
  :$s/old/new/g[Enter] old文字列をnewへ置き換え(確認なし)
  :$s/old/new/cg[Enter] old文字列をnewへ置き換え(確認あり)
 ○ファイルの保存&終了
  :w[Enter] 上書き保存
  :q[Enter] viの終了
  :w![Enter] 強制上書き保存
  :q![Enter] 保存せず終了
 ○カーソルの移動
  j 下
  k 上
  h 前
  l 右
  w 単語単位で右
  b 単語単位で左
  $ 行末
  O 行頭
  :$[Enter] ファイルの最後へ移動
  :n[Enter] n行目へジャンプ
  [Ctrl]+b スクリーンの前方スクロール
  [Ctrl]+f スクリーンの後方スクロール


3.コマンド備忘録
 普段のメンテナンスなどで利用するコマンドのリファレンスとして記述します。

 ・fsck ファイルシステムチェック&修復
  fsck デバイス名  [EX. #fsck -y /dev/hda3]  
  前回チェック以降20回目のマウント時に自動実行。

 ・kill プロセスへのシグナル送信
  kill プロセスID  [EX. #kill -HUP 1726]
  -l 送信可能なシグナルリストの表示
  -HUP HangUpシグナルの送信。受け付けないデーモンも存在するため、killした後、手動起動が必要な場合もある。

 ・last ログイン履歴表示
  last ユーザー名 ユーザー名を指定しない場合はすべて対象。
 ・lastlog lastと同一だが、ユーザーごとの最終ログイン時刻をリストする。

 ・locate ファイル所在情報をデータベースから抽出し表示
  データベースを使用するため、findより高速。データベースのメンテナンスはcron。

 ・ln ファイル、ディレクトリの別名作成
  Windowsの「ショートカット」、MacOSの「エイリアス」と似た機能。
  1.シンボリックリンク
   別のファイルを参照する小さなファイルを作成して、別名でのファイルアクセスが出来るようにする。
   作成)
    ln -s 元のファイル リンクを作成するディレクトリ
    ln -s 元のファイル 新しい名前
  2.ハードリンク
   ディレクトリにあるファイル名のエントリをもう一つ作成し、一つのファイルの実体を参照する二つ目以降の名前を作成する。
   今ではあまり使用されていない。
    ln 元のファイル リンクを作るディレクトリ
    ln 元のファイル 新しい名前

  ※制限事項
   1.ファイルシステムをまたがってのハードリンクを作成する事は出来ない。
   2.シンボリックリンクは、リンク先のファイルの移動や削除を検出しない。
    ハードリンクはそれぞれが実体へのリンクを持つため、移動削除の影響は受けない。
   3.ディレクトリへのリンクはシンボリックリンクでしか作成できない。

 ・ps プロセスの表示
  a すべてのプロセス表示
  x 端末接続の無いデーモンなども表示
  u ユーザー形式で表示
  w 一行あたりの表示幅を広げる
  c 実行ファイル名表示

 ・top プロセス状態の監視
  ps acux を繰り返し表示し続けるイメージ。kキー操作でシグナルの送信も可能。


4.grepの活用
 grepは歴史も古いソフトですが、高機能な故非常に重宝します。その利用方法を少しだけ記述します。

grep 文字列 ファイル名
これが一般的なタイプです。ファイル内に指定した文字列が存在するかどうかの検索になります。見つかると該当する行を表示します。

grep 文字列 ファイル1 ファイル2
と書くと二つのファイルを検索します。

 ※私事ですが、自社ドメインで稼働しているサーバーを入れ替える際に、IPアドレスを指定している設定ファイルなどを検索する際に重宝した記憶があります。
 grep 192.168.1.2 /etc/*
 この記述で/etcディレクトリ内のすべてのファイルについて検索結果を得られます。

4-1.ディレクトリの再帰検索
 grepはディレクトリを再帰的にたどって検索することが出来ません。こういったケースでは[find]と連携させると便利です。
 findは、
find パス 評価式
 として検索を行います。しかし評価式の種類がとても多いためわかりにくいことが問題点です。
 そこで上述「私事」のディレクトリを再帰的に検索したい場合には、
find /etc/* -type f | xargs grep 192.168.1.2
 とエントリします。
 [-type f]は通常のファイルを検索対象とする、と言う意味のようです。[find /etc/* -type f]によって/etc以下のディレクトリの全ファイル名が出力され、その結果をxargsへ入力として引き渡します。
 さらにxargsがファイル名のリストを作成してgrepコマンドへ引き渡します。この方法で深い階層に存在するファイルも検索対象に含めることが可能となります。

方程式風には
find パス -type f | xargs grep 文字列
となります。

4-2.正規表現の活用
 「含語検索」あるいは「あいまい検索」と言う言葉を耳にしたことがあるだろう。Perlなどでは「正規表現」としてパターンマッチングを利用して、複数の文字列を一つの形式で表現することが可能である。
 その「正規表現」をgrepもサポートしている。

grep -E 'status[A-Z]' /home/foo/*
 -Eはgrepを拡張正規表現に対応させるオプション。正規表現を含む文字列は「’」で囲む。[A-Z]は正規表現でよくお目にかかる表現で、「AからZまでの大文字アルファベットの一文字」の意。
 では、たとえば「小文字や数字にも対応」と言った場合はどうするか。
grep -E 'status[A-Za-z0-9]' /home/foo/*
 となる。

5.tarのオプション

 tarとは元々テープアーカイバ。その影響でfオプション(ファイル指定)が無いとテープデバイスへ送られる。

 オプション
 c アーカイブ作成
 t リスト表示
 x アーカイブ展開
 v 経過表示
 f ファイル指定
 z 圧縮

 使い方
 tar zcf ファイル名 圧縮するディレクトリ
 tar zxf ファイル名 -c 展開(解凍)する場所
 ※展開で利用するケースが多いと思われますが、一般的には、展開したいディレクトリへ移動して、ファイル名にフルパスを用いて実行すると言う方法が採られます。こうすると、その場所で展開されます。

 例:
 tar xvzf /mnt/cdrom/alex/src/SystemSet.3.13.tar.gz

○tarボールから一部分だけをリストアする方法

一旦任意のディレクトリへtar玉を展開する。
展開したディレクトリの中のリストアしたいディレクトリへ移動する。
該当ディレクトリを本来のディレクトリへコピーするには、

tar cf - 元ディレクトリ | (cd 先ディレクトリ[フルパス];tar xfps - )

とエントリする。

EX:$tar cf - alexdata | (cd /usr/local/www/cgi-bin;tar xfps - )


トップへ戻る

31/May/2001