2011/08/31

viエディタ、初級編8(vimtutor)

viエディタ、初級編8(vimtutor)
viの使い方、tutor

viは、vimのエイリアスになっています。そのvimの初心者向けtutor(家庭教師)テキストがあります。CentOS 5.5では日本語になっていますのでぜひ一度読んで下さい。作業時間は流して見て30分程度です。もしvi操作に慣れていないなら、操作しながらだと2時間以上かかるかもしれません。でも、このテキストでviの使い方の概略がわかるようになります。もちろん、途中で止めてもテキストは毎回変更がクリアされるので安心です。
一度に2時間が無理なら、15分くらいに分けて最後まで一通り操作することをお勧めします。そうすれば、viのキー操作や、viで何が出来るか、やりたいがあったとき何をすれば良いか、概略が理解できます。

$ vimtutor

出力例
===============================================================================
=    V I M 教 本 (チュートリアル) へ よ う こ そ        -    Version 1.7      =
===============================================================================

     Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常
     に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ
     ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう
     なっています。

     チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ
     け時間を使うのかにもよりますが、およそ25から30分です。

     ATTENTION:
     以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前
     にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。

     このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し
     ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ
     ならないのです。文章を読んだだけならば、きっと忘れてしまいます!。

     さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に
     レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま
     しょう。
"/tmp/tutorCb9398" 975 行, 43875 文字

終了するときは、viエディタと同様に、escキーでコマンドモードにして「:q!(enter)」(保存せずに終了)です。

viエディタが使えるとlinux上での作業が楽になります。
vimtutorの練習は出来れば2回以上やることをお勧めします。

なお、linux上で日本語入力が出来ないときは英語版で作業しましょう。
$ vimtutor en



viエディタ、初級編7(tips)

viエディタ、初級編7(tips)
viエディタを使うとき知っておくと便利な操作

viエディタを使うとき知っておくと便利な操作がいくつかあります。

起動オプション
vi +20 tmp.txt
viエディタの起動時に、行指定ができます。
また「+/abcd」とすることで文字(abcd)を検索したあと、カーソルをその行でとめることも出来ます。

コマンドもあります。
u
コマンドモードで編集中に、直前の操作を取り消す。 あまり多用すると何をやっているのか混乱するのでほどほどに。

xp
コマンドモードで編集中に、カーソルの下の文字とカーソルの次の文字を入れ換える。 スペルミスなどで文字の順番を入れ替えるときに便利です。

ddp
コマンドモードで編集中に、カーソルの下の行とカーソルの次行を入れ換える。 入力ミスなどで行の順番を入れ替えるときに便利です。

ctrl-G
ファイル内のカーソル位置を表示します。大きいファイルを編集しているとき、編集箇所を確認するために使います。

:set number
テキストの行番号を表示
表示を消すときは、「:set nonoumber」

2011/08/30

viエディタ、初級編6(man,help)

viエディタ、初級編6(man,help)
viエディタのマニュアル

viエディタのマニュアルは、「man vi」で呼び出すとviコマンドの使い方の説明が表示されます。
また、viは、現在vimのエイリアスになっています。
例 manコマンドで表示されるviの説明
VIM(1)                                                                  VIM(1)

NAME
       vim - Vi IMproved, a programmers text editor

SYNOPSIS
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]

       ex
       view
       gvim gview evim eview
       rvim rview rgvim rgview

DESCRIPTION
       Vim  is a text editor that is upwards compatible to Vi.  It can be used
       to edit all kinds of plain text.  It is especially useful  for  editing
       programs.

       There  are a lot of enhancements above Vi: multi level undo, multi win-
       dows and buffers, syntax highlighting, command line  editing,  filename
:

viエディタの操作方法を知りたい場合、viエディタを起動したあと、コマンドモードにて以下の操作をして下さい。また、F1キーを押してヘルプ画面が出る設定になっていることもあります。
$ vi tmp.txt             # viエディタを起動

画面がリフレッシュされて、ファイルの内容が表示されたら、コマンドモードの状態で
「:help (enter)」
: help

vi操作のヘルプが開きます。
help.txt*      For Vim version 7.0.  Last change: 2006 Jun 16

                        VIM - main help file
                                                                         k
      Move around:  Use the cursor keys, or "h" to go left,            h   l
                    "j" to go down, "k" to go up, "l" to go right.       j
Close this window:  Use ":q".
   Get out of Vim:  Use ":qa!" (careful, all changes are lost!).

Jump to a subject:  Position the cursor on a tag (e.g. |bars|) and hit CTRL-].
   With the mouse:  ":set mouse=a" to enable the mouse (in xterm or GUI).
                    Double-click the left mouse button on a tag, e.g. |bars|.
        Jump back:  Type CTRL-T or CTRL-O (repeat to go further back).

Get specific help:  It is possible to go directly to whatever you want help
                    on, by giving an argument to the |:help| command.
                    It is possible to further specify the context:
                                                        *help-context*
                          WHAT                  PREPEND    EXAMPLE      ~
                      Normal mode command      (nothing)   :help x
help.txt [ヘルプ][RO]                                         1,1           先頭
abcdef
tmp.txt                                                      2,1            20%
"help.txt" [読込専用] 214L, 7883C

help画面の終了は、「:q (enter)」です。これで、viの編集画面に戻れます。
ヘルプ画面で編集モードになっていることもありますので、「esc」キーを押したあとに「:q (enter)」の操作をする方が安全です。


なお、 vi のtutorもあります。日本語表記なのでこちらの方が見やすいかもしれません。
$ vimtutor

viエディタ、初級編5(変更)

viエディタ、初級編5(変更)
テキストの変更操作

以下のコマンドモードのとき、テキストを変更することが出来ます。
訂正箇所が一部のときに、モードを切り替えなくていいので便利です。

r(x)
カーソルの文字を1文字置き換える、(x)は任意の文字です。実行後は、コマンドモードになる。(挿入モードではありません)

cw
カーソルの文字を1単語置き換える。実行後は、挿入モードになるのでカーソル移動のためには、コマンドモードにするためキーを押して下さい。

c$
カーソル以降行末までの文字を置き換える。実行後は、挿入モードになるのでカーソル移動のためには、コマンドモードにするためキーを押して下さい。

2011/08/29

viエディタ、初級編4(取り消し、再実行)

viエディタ、初級編4(取り消し、再実行)
viエディタの入力作業で、変更を取り消しすることが出来ます

u
直前の変更を取り消し
U
直前の変更を1行分まとめて取り消し

ctrl-R
直前の変更を取り消ししたものの再実行

viエディタ、初級編3(繰り返し)

viエディタ、初級編3(繰り返し)
viエディタを使うとき知っていると効率が上がる操作

viエディタのコマンドは、以下の構成になっています。
「繰り返し回数」「コマンド」「モーション」

ここではviエディタで効率を上げる機能のうち、繰り返し回数の指定について説明します。
viエディタは各操作を行う上で、繰り返し回数の指定が出来ます。指定回数nは数字です。

n「x」
n文字分削除

n「w」
n回分後方に単語単位で移動

n「yy」またはn「Y」
カーソルからn行分をヤンクバッファにコピー

その他各操作で回数の指定が出来ます。

2011/08/28

viエディタ、初級編2(ヤンクバッファ)

viエディタ、初級編2(ヤンクバッファ)
viエディタの編集コマンド2

windowsで使用するコピー&ペーストのバッファーを、viエディタではヤンクバッファと呼びます。
コマンドモードで、ヤンクバッファを使った行単位のコピーペースト機能があります。

「yy」または「Y」
カーソルの行をヤンクバッファに保存
「p」
カーソルの行の下にヤンクバッファの内容をペースト
「P」
カーソルの行の上にヤンクバッファの内容をペースト

2011/08/27

viエディタ、初級編1(挿入モード、削除、移動)

viエディタ 初級編1(挿入モード)
viエディタで入力編集のコマンド

viエディタでコマンドモードのときに使える編集用コマンド
  1. 挿入
  2. 削除
  3. 移動
  1. 挿入(テキストを入力するためのモードです)
    コマンドモードから挿入の操作では、この操作のあと挿入モードになります。
    「i」キー
    カーソルの前に文字を挿入
    「a」キー
    カーソルの後に文字を挿入
    「I」キー
    行の先頭に移動し文字を挿入
    「A」キー
    行末に移動し文字を挿入
    「o」キー
    カーソルの上に1行挿入
    「O」キー
    カーソルの下に1行挿入
  2. 削除
    削除の操作後もコマンドモードのままです。
    「x」キー
    カーソルの下にある文字を1文字削除
    「d0」キー
    カーソルから行頭まで削除
    「dw」キー
    カーソルからスペースを含む次の単語の区切りまで削除
    「de」キー
    カーソルからスペースを含まない次の単語の区切りまで削除
    「df?」キー
    次の「?」キーまで削除
    「D」キー、「d$」
    カーソルから行末まで削除

  3. 移動
    移動操作のあともコマンドモードのままです。
    「H」キー
    ファイルの先頭に移動
    「G」キー
    ファイルの最後に移動
    「w」キー
    単語単位でファイルの後方に移動
    「b」キー
    単語単位でファイルの前方に移動
    「0」キー
    行頭に移動
    キーボードがら手が離れてしまいますが、「HOME」キーでも同じ動作をします
    「$」キー
    行末に移動
    キーボードがら手が離れてしまいますが、「END」キーでも同じ動作をします
    「/文字列」キー
    文字列を検索
    「?文字列」キー
    文字列を逆方向に検索
    「n」キー
    文字列を再検索
    「N」キー
    文字列を逆方向に再検索

2011/08/26

正規表現の演算子

正規表現の演算子には以下のものがあります。


.「ドット」 1文字に相当
$            行末
^            行頭
*            0文字以上の繰り返し
\            エスケープ(特殊文字の前に置くことで特殊文字の機能を打ち消す)
[文字]     括弧内の文字に該当
              たとえば[0-9]なら[0123456789]と同じで、数字を表します。 
[^文字]    括弧内の文字以外に該当
              たとえば[^0-9]なら[0-9]以外と同じです。数字以外を表します。 

正規表現は、シェルを扱うときなどに使います。必要なときに思い出して下さい。
ファイルを扱うときのメタキャラとは異なります。

2011/08/25

bash

bash
bash(Bourneアゲインシェル)は、KornシェルとCシェルの機能を取り込んでいます。
さらに、KornシェルはBourneシェルの機能が取り込まれています。

CentOSでは、標準のログインシェルはbashです。
現在のシェルを知る方法
[user@localhost ~]$ ps
  PID TTY          TIME CMD
 7197 pts/1    00:00:00 bash
 7225 pts/1    00:00:00 ps

bashのプロンプト

bashのプロンプト
bashのプロンプトについて

telnetで接続したときの端末画面では、bashのシェルによりコマンドの入力を受け付けられるようになっています。
このコマンド入力待ちの表示がプロンプトです。

[user@localhost ~]$ id 
uid=500(user) gid=500(user) 所属グループ=10(wheel),500(user) 
[user@localhost ~]$ pwd 
/home/user 

プロンプトは、一般ユーザと、rootユーザでは異なっています。

[root@localhost ~]# id 
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) 
[root@localhost ~]# pwd
/root 

一般ユーザでは「#」、rootユーザでは「#」が使われます。
linuxでは、どのユーザで作業しているか常に意識しましょう。

また、bashのプロンプトは環境変数PS1に設定されています。
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
特殊記号の意味は、以下の通りです。
\u ユーザ名
\h ホスト名
\W カレントディレクトリ
\$ rootユーザなら「#」一般ユーザなら「$」

その他有用なもの
\w カレントディレクトリ(フルパス)
\d 日付
\t 時刻
\! ヒストリ番号

2011/08/24

su、その2

su
他のユーザでログイン、コマンド実行

ログインしているユーザを切り替えてコマンドを実行するなど作業したいときに使用、多くはrootユーザへの切り替えに使用する。
「-」は、ログオン後に新しいユーザの環境変数を使用します。
「-」をつけない場合、su実行前のユーザの環境変数が使われます。

また、「-c」オプションでコマンド実行も可能
[user@localhost ~]$ su - -c 'service httpd restart'
パスワード:
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

head

head
ファイルの先頭行を表示

ファイルの先頭行だけを表示したいとき、headコマンドを使います。
catコマンドだとファイルが大きいと画面が流れてしまいます。ファイルの先頭だけを確認したいならheadコマンドを使います。
もちろんlessコマンドでも最初に先頭が表示され、さらに全体も確認できます。
コマンドは、以下のとおり。
head -行数 ファイル

例 「.bash_profile」ファイルの先頭5行を表示
[user@localhost ~]$ head -5 .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
行の指定がないときは、10行表示されます。

2011/08/23

tail

tail
ファイルの最後の行を表示

シスログなど、サイズの大きいファイルを見るとき、catコマンドで表示させると画面が流れて今います。こんなときファイルの最後だけ表示させるコマンドがtailです。
コマンドは、以下のとおり。
tail -行数 ファイル

例 ファイルのサイズを確認して、最後を20行表示
[user@localhost ~]$ ll /etc/syslog.conf
-rw-r--r-- 1 root root 694  4月  3  2010 /etc/syslog.conf
[user@localhost ~]$ wc /etc/syslog.conf
 26  93 694 /etc/syslog.conf
[user@localhost ~]$ tail -20 /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
wcコマンドでsyslog.confファイルの行数(この例だと26行)を確認し、ファイルの最後を表示します。
行数の指定がないときは、tailコマンドは最後の10行を表示します。

その他の使い方として、ログファイルの監視をするときに「-f」オプションがあります。
ログファイルの最後を表示したあと、そのまま、ログが追記されるに従い表示されます。
ログが書かれるタイミングと、サーバの動きを同期させて確認したいときに有効です。
表示を終了するときは、ctrl-cを押します。
[root@localhost ~]# tail -f /var/log/messages

viエディタ、入門編3

viエディタ、入門編3
最初によくやる間違いの対応
事象
viのあとにファイル名を入れたつもりになっていて、実は入力していないときもあります。
viエディタを起動するとき、ファイル名を指定しないで起動したため終了できない。(:q)でエラーになる。
E37: 最後の変更が保存されていません (! を追加で変更を破棄)

原因
viエディタを起動するとき、ファイル名を付けずに起動することも出来ます。
$ vi
しかし、ファイル名が決まっていないので、せっかくテキストを作成しても保存、終了できません。

解決策
(1)コマンドモードでファイル名を指定して保存(:w file.txt)。そのあとに終了(:q)する。
(2)テキストを入力していても、全て破棄して一度終了(:q!)してから、再度、ファイル名を指定してviエディタを起動する。
$ vi file.txt

2011/08/22

viエディタ、入門編2

viエディタ 入門編2
linuxで使用するviエディタの入門編です。viを使う上で最低限の機能です。

linuxでは、環境設定など設定ファイルを変更する場合viエディタでテキストの編集をします。
これから、いくつかの項目に分けてviの説明を記述します。
まず、今回は入門編で最低限の機能の紹介です。

そのエディタviは、windowsで使用するノートパッドやワードとは異なり、カーソルの移動はマウスでは出来ません。まず、マウスを使わない操作に慣れましょう。
viエディタで、マウスを使わないでカーソルを動かすためには、キー操作が必要になります。
また、viエディタはメニューがありません。メニュー操作に該当するのがviエディタのコマンドモードです。

viエディタは2つのモードがあります。
  • コマンドモード
  • 入力モード(テキスト入力モード)
コマンドモード
コマンドモードのとき、テキスト入力はできません。コマンド入力のみです。 このモードのときは、テキストの左下に何も表示されていないか、入力中のコマンドが表示されています。 入力モードに移るためには、テキスト挿入のためのキー(i,aなど)を押します
入力モード
入力モードのときは、テキストの入力が出来ます。いわゆる入力作業です。 また、テキストの左下に「-- 挿入 --」が表示されています。 コマンドモードに移るためには「esc」キーを押します。モードが判らなくなったら、とりあえず「esc」キーを押してコマンドモードに戻るクセをつけると良いです。

viエディタを使う上で、今どちらのモードで操作しているのか、常に意識している必要があります。なぜなら、同じキーを押してもモードが異なると違う意味(コマンド、動き)になるからです。
viエディタを扱うためには、このモードの理解と認識が最初のハードルです。

viエディタの起動
$ vi tmp.txt ファイル名を指定して起動すると、エディタが開きます。 viエディタを起動した直後は、コマンドモードになっています
モードの切り替え
コマンドモード→入力モードへの切り替えは、i,aキーなど 入力モード→コマンドモードへの切り替えは、「esc」キー
カーソル移動
2つ目のハードルがカーソル移動です。 コマンドモードでカーソルの移動が出来ます。カーソル移動は、次の4つのキーで行います。 「h」 カーソルを左に移動(←) 「j」 カーソルを下に移動(↓) 「k」 カーソルを上に移動(↑) 「l」 カーソルを右に移動(→)
設定によっては、矢印キーが使えることもありますが、「h」「j」「k」「l」だとキーボードから手を離さずに使えるので慣れると便利です。
カーソルの移動でテキストの入力位置がきまったら、次は入力モードへの切り替えです。

入力モードへ
入力モードへの切り替えは次の2つのキーです 「i」キーは、カーソルの位置で入力モードになります。 「a」キーは、カーソルの次の位置で入力モードになります。 間違ったテキストを作らないために、違いをよく認識して下さい。 入力モードに切り替わったら、テキストの入力ができます。 テキストを修正するときなど、カーソルを移動させたくなったら「esc」キーでコマンドモードにしてから、カーソルを移動させます。
コマンドモードへ
テキストの入力が終わったら、「esc」キーでコマンドモードへ切りかえます。
コマンドモードでのコマンド(終了)
「ZZ」(または:wq)で、編集中のテキストをファイルに保存して終了します。 「:q!」で、編集中のテキストを廃棄、テキストは保存せずに終了します。
文字の削除
間違った文字を削除したい場合は、コマンドモードで削除対象の文字にカーソルを合わせて「x」キーを押します また入力モードで、「Backspace」キーが使える場合もあります。

viエディタ、入門編

viエディタ、入門編
viエディタの超入門として起動と終了
とりあえず、起動方法と終了方法は以下のとおりです。
viエディタの使い方入門はこちら

viエディタはマウスが使えません。カーソルの移動を含めて全ての操作をキーボードからの入力で行います。まず、マウスから手を離すことから始めて下さい。

起動方法、ファイル名を指定して起動します。
$ vi  file.txt
ファイルを指定しないと、viを起動できますが、終了するときファイルを書き出ししていないというエラーが表示されます。(ファイルの書き出しが出来るユーザは初心者から卒業しています)
起動直後は、コマンドモードになっています。「i」または「a」で入力モードにしてテキストを入力します。

終了方法、コマンドモードにして終了します。
コマンドモードのときは
「ZZ」または、「:wq(enter)」  編集中のテキストを保存したあと、終了
「:q!」  編集中のテキストは保存せず終了
(viエディタは、編集中のテキストを保存するかしないか決めないでただ終了させるということはできません)

入力モードのときは、「esc」でコマンドモードにしてから終了します。
入力モードのままでは終了できません。
(プロセスを強制終了させることも出来ますが、そこまでやらなくても普通に終了させましょう)

2011/08/21

bashのhelp

bashのhelp
bashのhelpコマンド

一般ユーザがtelnet接続でログインしているとき、ユーザからのコマンド入力を処理しているものはシェルと呼ばれています。
ここで使用しているのはbashシェルですが、centosに限らずbashには、helpコマンドがありbashの組み込みコマンドが表示できます。
manコマンドでもいいのですが、簡単なことの確認ならhelpコマンドで確認可能です。
日本語にはなっていませんが簡単なので理解できるのではないでしょうか。

[user@localhost ~]$ help
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

 JOB_SPEC [&]                       (( expression ))
 . filename [arguments]             :
 [ arg... ]                         [[ expression ]]
 alias [-p] [name[=value] ... ]     bg [job_spec ...]
 bind [-lpvsPVS] [-m keymap] [-f fi break [n]
 builtin [shell-builtin [arg ...]]  caller [EXPR]
 case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
 command [-pVv] command [arg ...]   compgen [-abcdefgjksuv] [-o option
 complete [-abcdefgjksuv] [-pr] [-o continue [n]
 declare [-afFirtx] [-p] [name[=val dirs [-clpv] [+N] [-N]
 disown [-h] [-ar] [jobspec ...]    echo [-neE] [arg ...]
 enable [-pnds] [-a] [-f filename]  eval [arg ...]
 exec [-cl] [-a name] file [redirec exit [n]
 export [-nf] [name[=value] ...] or false
 fc [-e ename] [-nlr] [first] [last fg [job_spec]
 for NAME [in WORDS ... ;] do COMMA for (( exp1; exp2; exp3 )); do COM
 function NAME { COMMANDS ; } or NA getopts optstring name [arg]
 hash [-lr] [-p pathname] [-dt] [na help [-s] [pattern ...]
 history [-c] [-d offset] [n] or hi if COMMANDS; then COMMANDS; [ elif
 jobs [-lnprs] [jobspec ...] or job kill [-s sigspec | -n signum | -si
 let arg [arg ...]                  local name[=value] ...
 logout                             popd [+N | -N] [-n]
 printf [-v var] format [arguments] pushd [dir | +N | -N] [-n]
 pwd [-LP]                          read [-ers] [-u fd] [-t timeout] [
 readonly [-af] [name[=value] ...]  return [n]
 select NAME [in WORDS ... ;] do CO set [--abefhkmnptuvxBCHP] [-o opti
 shift [n]                          shopt [-pqsu] [-o long-option] opt
 source filename [arguments]        suspend [-f]
 test [expr]                        time [-p] PIPELINE
 times                              trap [-lp] [arg signal_spec ...]
 true                               type [-afptP] name [name ...]
 typeset [-afFirtx] [-p] name[=valu ulimit [-SHacdfilmnpqstuvx] [limit
 umask [-p] [-S] [mode]             unalias [-a] name [name ...]
 unset [-f] [-v] [name ...]         until COMMANDS; do COMMANDS; done
 variables - Some variable names an wait [n]
 while COMMANDS; do COMMANDS; done  { COMMANDS ; }

また、オプションの問い合わせも可能です。
例えば、aliasについてhelpコマンドは以下の通りです。

[user@localhost ~]$ help alias
alias: alias [-p] [name[=value] ... ]
    `alias' with no arguments or with the -p option prints the list
    of aliases in the form alias NAME=VALUE on standard output.
    Otherwise, an alias is defined for each NAME whose VALUE is given.
    A trailing space in VALUE causes the next word to be checked for
    alias substitution when the alias is expanded.  Alias returns
    true unless a NAME is given for which no alias has been defined.

2011/08/20

set

set
シェル変数の表示

telnetなどでログインしているとき、ログインシェルの環境で動いています。
この環境であらかじめ設定されている変数がシェル変数です。
シェル変数にはenvで表示できる環境変数も含まれます。
そのほかに、シェルの情報が保存されている特別変数と、ユーザが定義するプログラム変数があります。

例 
$ set
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
(以下省略)

参照コマンド
env

2011/08/16

date

date
日付時刻の表示と日付時刻設定

通常、linuxシステムは、起動したら落とすことはそうたびたびありません。
しかし、vmwareでlinuxを使っているとPCを停止するときは、vmwareも落ちています。vmwareを停止するときサスペンドで落とすと、次回の起動で時刻は停止前の日付時刻を引き続いて使います。
このため、日付・時刻が違ってきてしまいますので、日付・時刻を合わせることになります。

操作はrootユーザで実行します。
$ su -
パスワード:
# date
2011年  7月 28日 木曜日 05:07:52 JST
# date -s "07/28 05:09 2011"
2011年  7月 28日 木曜日 05:09:00 JST
# date
2011年  7月 28日 木曜日 05:09:02 JST
# exit
logout
$ 

2011/08/15

id

id
ユーザの情報表示

ユーザIDとグループIDを表示します。
$ id user
uid=500(user) gid=500(user) 所属グループ=500(user)
ユーザ名を省略した場合は、ログインユーザの情報が表示されます。

ユーザは以下のファイルのユーザIDとグループIDで管理されています。
/etc/passwd - ユーザーアカウント情報
/etc/group - グループ情報

2011/08/14

chmod

chmod
ファイルとディレクトリの権限変更
chmodの書式は、以下のとおりです。
chmod  mod file
  • modの書き方は、2通りあります。
    1. シンボルモードの指定
    2. 数字モードの指定
  • 2番目のパラメータが対象ファイルです。
シンボルモードの指定方法
シンボルモードの指定は、対象と演算子とアクセス権です。
対象は、u,g,o,a(省略時はa)
演算子は、+,-,=
アクセス権は、r,w,x

例 シンボルモードの指定
$ ls -l tmp.txt
-rw-rw---- 1 user user 25  7月 29 15:30 tmp.txt
$ chmod o+rw tmp.txt
$ ls -l tmp.txt
-rw-rw-rw- 1 user user 25  7月 29 15:30 tmp.txt


数字モードの指定方法
数字モードの指定は、3桁の数字で指定します。
  • 1桁目 ファイルの所有者
  • 2桁目 グループ
  • 3桁目 その他ユーザ
3桁の並びは、ファイルの権限で説明した並びと同じです。

それぞれの桁の意味は以下のとおりです。
  • 4 書き込み権限
  • 2 読み込み権限
  • 1 実行権限
そして、それぞれの権限の和が1桁を表します。
例えば、書き込み権限と読み込み権限なら6、全アクセス権限指定であれば7です。

例 数字モードの指定
$ ls -l tmp.txt
-rw-rw---- 1 user user 25  7月 29 15:30 tmp.txt
$ chmod 666 tmp.txt
$ ls -l tmp.txt
-rw-rw-rw- 1 user user 25  7月 29 15:30 tmp.txt
この例で、数字モード指定の666は以下の意味になります。
1桁目 6 ファイルの所有者は、読み込み権限と書き込み権限
2桁目 6 グループは、読み込み権限と書き込み権限
3桁目 6 その他ユーザは、読み込み権限と書き込み権限

2011/08/13

権限

権限
linuxのファイルシステムはアクセス権限が設定されています

linuxのファイルシステムはアクセス権限が設定されています。
これは、ファイルとディレクトリに設定されています。

権限は、ファイルの属性をlsコマンドで確認出来ます。
例 ファイルの属性
$ ls -l
-rw-rw-r-- 1 user user   25  7月 29 15:30 tmp.txt

権限は、最初の「-」(d:ディレクトリ)の次の「rw-rw-r--」で表現される部分です。
この部分は3桁ごとに、ファイルの所有者(ユーザ)の権限、グループの権限、他のユーザの権限です。
ファイルの所有者権限 rw- (読み取り権限あり、書き込み権限あり)
グループの権限    rw- (読み取り権限あり、書き込み権限あり)
他のユーザの権限   r-- (読み取り権限あり)
3桁の意味は、読み取り権限、書き込み権限、実行権限となっています。

ファイルの所有者とグループは、「user」と「user」の部分です。
この例では、tmp.txtは、所有者userが読み取りと書き込み権限があり、グループuserも同様に読み取りと書き込み権限があり、他のユーザは、読み取り権限があります。

例 権限のないファイルの参照
$ ls -l /var/log/messages
-rw------- 1 root root 135678  7月 29 21:03 /var/log/messages
$ cat /var/log/messages
cat: /var/log/messages: 許可がありません
ユーザuserでログインしているとき、ユーザrootではないので、ファイルmessagesに関して参照権限がありません。

2011/08/12

dirs

dirs
ディレクトリスタックの表示

ディレクトリスタックの内容を表示します。


$ dirs
~/tmp ~
この例では、現在ディレクトリ「~/tmp」にいて、ディレクトリスタックにはディレクトリ「~」(ホームディレクトリ)が保存されています。

関連コマンド
pushd
popd

2011/08/11

pushd

pushd
カレントディレクトリの変更とスタックへの追加

pushdは、cd(chdir)と同様に使えます。その上ディレクトリをスタックに保存してくれます。
linuxで作業していると、ディレクトリを移動してコマンドを実行することがたびたびあります。
その都度ディレクトリパスをメモして、カット&ペーストしてもいいのですが、ディレクトリスタックに保存しておいて再利用する方法があります。

コマンドの説明
pushd dir
ディレクトリを指定した場合は、指定したディレクトリがスタックに保存されます
pushd +1
「+」と数字を指定した場合は、指定した数字のディレクトリスタックに移動します。ディレクトリスタックは0から始まります

使用例(環境)
ユーザ user
ディレクトリ /home/user/tmp/,/home/user/tmp/dir1/,/home/user/tmp/dir2/
この場合でログイン直後は、/home/userにいます。
tmpとtmp/dir1,tmp/dir2に移動して作業することを想定した使用例です。

使用例
$ pwd
/home/user
$ pushd tmp
~/tmp ~
$ dirs
~/tmp ~
$ pushd dir1
~/tmp/dir1 ~/tmp ~
$ pushd ../dir2
~/tmp/dir2 ~/tmp/dir1 ~/tmp ~

$ pushd +1
~/tmp/dir1 ~/tmp ~ ~/tmp/dir2

最初は、「~」(/home/user)ホームディレクトリにいます。
次にtmpディレクトリに移動します。するとスタックには「~/tmp」と移動前の「~」が残ります。今いるディレクトリは、dirsで表示される先頭のディレクトリです。
そして、dir1に移動します。スタックには追加された「~/tmp/dir1」と保存されていた「~/tmp」「~」が残ります。
さらに、dir2に移動します。スタックには追加された「~/tmp/dir2」と保存されていた「~/tmp/dir1」「~/tmp」「~」が残ります。

このディレクトリ間を作業で移動する場合、たとえば「~/tmp/dir1」に戻る場合は次のいずれかです。
(1)pushd +1
(2)pushd ~/tmp/dir1
「pushd +1」は、ディレクトリスタックの「+1」番目への移動です。現在の並びが「~/tmp/dir2」「~/tmp/dir1」 「~/tmp」 「~」となっています。スタックは「+0」から始まるので「+1」番目が「~/tmp/dir1」になります。
また、「~/tmp/dir1」を指定してもいいのですが、pushdを使うメリットが少なくなります。

使い方のお勧め
cdの代わりにpushdを使用し、ディレクトリスタックに何があるかわからなくなったらdirsで確認する。

2011/08/10

touch

touch
ファイルのアクセス時刻と修正時刻を変更

ファイルの属性情報を変更するコマンドですが、空(サイズが0)のファイルを作成するときに良く使われます。

例1 空のファイルを作成
$ touch file1
$ ls -l
-rw-rw-r-- 1 user user    0  7月 28 10:35 file1

例2 ファイルの日付、時刻を変更
$ touch -t1107010000 file1
$ ls -l
-rw-rw-r-- 1 user user    0  7月  1 00:00 file1

なおファイル名は英数字のみを使い、日本語は使用しないようにしましょう。
最近のlinuxは日本語ファイル名も扱えますが、全てのプログラムが日本語ファイル名を扱えるとは限りません。思わぬ障害を発生させないためのおまじないと思って、日本語ファイル名は使わないことをお勧めします。

2011/08/09

file

file
ファイルの形式を表示

catコマンドなどで、ファイルの内容を確認しているとき、バイナリファイルを表示してしまうことがあります。このような場合には、fileコマンドで事前に確認出来ます。
$ file .bash_history
.bash_history: ASCII text

2011/08/08

sudo

sudo
管理者権限によるコマンドの実行

linuxコマンドは、一般ユーザの権限では実行できないコマンドがあります。
こんなときは、rootユーザに切り替えて作業します。しかし、決まった作業のたびにrootユーザの切り替えをしないで実行できる方法があります。
この作業は、管理情報編集(visudoコマンド)でviを使うため、viの操作に慣れていない場合は実施しないほうが安全です。どうしても使いたい場合は、viエディタの使い方に慣れてから作業しましょう。

例 権限のない操作
$ date
2011年  7月 28日 木曜日 04:27:56 JST
$ date -s "07/28 04:30 2011"
date: 日時を設定できません: 許可されていない操作です
2011年  7月 28日 木曜日 04:30:00 JST
$ date
2011年  7月 28日 木曜日 04:29:34 JST

まず、rootユーザにてvisudoで管理者権限の情報を編集します。
$ su -
パスワード:
# visudo

編集画面で、以下の情報を変更します。
<変更前>
## Allows people in group wheel to run all commands
# %wheel  ALL=(ALL)       ALL

<変更後>
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
変更したら、viと同様保存して終了(:wq)して下さい。

次に、ユーザにwheelグループを追加します。
# id user
uid=500(user) gid=500(user) 所属グループ=500(user)
# usermod -G wheel user
# id user
uid=500(user) gid=500(user) 所属グループ=500(user),10(wheel)
# exit

これで、管理者権限でコマンドが実行できるようになりました。
$ date
2011年  7月 28日 木曜日 04:50:33 JST
$ sudo date -s "07/28 04:52 2011"
[sudo] password for user:
2011年  7月 28日 木曜日 04:52:00 JST
$ date
2011年  7月 28日 木曜日 04:52:39 JST
$

2011/08/07

history

history
コマンドの入力履歴を表示
コマンドを入力した履歴の表示をすることが出来ます。

例1 コマンドの履歴を全件表示
$ history


例2 コマンドの履歴を件数を指定して表示
$ history 11


例3 コマンドの再実行
$ !10
コマンド履歴の10番目のコマンドを実行
コマンドの打ち直しをするとき、過去の入力したものを参考に再実行することが出来ます。
historyで履歴を表示して、番号を確認その番号を参考に「!」を付けて実行します。

また、コマンドの履歴は、環境変数によって設定されています。
例4 環境変数の表示
$ env
(途中略)
HISTFILE=/home/user/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000

設定値の例
コマンドの履歴ファイル /home/user/.bash_history
(前回のログアウトまでの履歴)
履歴ファイルのサイズ 1000個
保存する履歴の数   1000個

関連コマンド
fc

2011/08/06

whereis

whereis
コマンドのパスを検索

linuxコマンドの実行は、シェル変数PATHで設定されたディレクトリを参照します。このディレクトリ以外にあるコマンドは、実行してもシェルがコマンドを見つけることが出来ません。
$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/user/bin

$ ifconfig
-bash: ifconfig: command not found

whereisは、「command not found」になった場合などのとき、コマンドのパスを検索するとき使います。
全てのパスを検索するのではないので、見つからないこともあります。
whereisが検索するパスは、whereisのマニュアルを参照して下さい。
$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:192.168.226.132  Bcast:192.168.226.255  Mask:255.255.255.0
(省略)

2011/08/05

cp

cp
ファイルのコピー

ファイルのコピーコマンドです。

例1
$ cp file1 file2
ファイルfile1をファイルfile2にコピーする

例2
$ cp -R dir1 dir2
ディレクトリdir1とディレクトリに含まれるファイルを全て、dir2にコピーする

良く使うものとして、変更前のテキストのバックアップを取得するために使用。

2011/08/04

mv

mv
ファイルの移動

ファイルを移動する。また、ファイル名の変更でも使用。
linuxでは、ファイル名の変更コマンドはありません。mvコマンドで変更します。

例1 ファイルの移動
$ mv  dir1/file1 dir2/file1
ディレクトリdir1にあるファイルfile1を、ディレクトリdir2に移動する。
コピーではないので、元のディレクトリdir1にあるファイルfile1はなくなります。

例2 ファイルの移動
$ mv  dir1/file1 dir2
ディレクトリdir1にあるファイルfile1を、ディレクトリdir2に移動する。
ファイル名を省略した記述。

例3 ファイル名の変更
$mv file1  file2
ファイル名の変更、ファイルfile1のファイル名をfile2に変更する。

例4 ファイル名の変更
$ mv dir1/file1  dir1/file2
ファイル名の変更その2、ディレクトリdir1のファイルfile1のファイル名をfile2に変更する。
 (相対パス指定)

例5 ファイル名の変更
$ mv /home/user/dir1/file1  /home/user/dir1/file2
ファイル名の変更その3、ディレクトリdir1のファイルfile1のファイル名をfile2に変更する。
 (絶対パス指定)

2011/08/03

rmdir

rmdir
ディレクトリの削除

削除対象ディレクトリにファイルが残っている場合は、エラーになります。
linuxのディレクトリ削除は、windowsのフォルダ削除とは異なり、ごみ箱に入ることはありません。一度削除したものは元に戻せません。削除する前に削除してよいものかもう一度確認しましょう。

例1 空のディレクトリを削除
$ rmdir  dir1
現在のディレクトリの下位にある、空のディレクトリdir1を削除(相対パス指定)

例2 空のディレクトリを削除
$ rmdir  /home/user/dir1
空のディレクトリ「/home/user/dir1」を削除(絶対パス指定)

2011/08/02

mkdir

mkdir
ディレクトリを作成

例1 ディレクトリを作成
$ mkdir  dir1
現在のディレクトリの下にdir1ディレクトリを作成する(相対パス指定)
例えば、/home/userディレクトリでコマンドを実行したとすると、/home/user/dir1が作られる。

例2 ディレクトリを作成
$ mkdir  -p /home/user/dir1
ディレクトリ/home/user/dir1を作成する(絶対パス指定)
「-p」は、もし/home/userディレクトリが無ければ、/home/userディレクトリも作られます。

2011/08/01

df

df
ファイルシステムごとに使用量を表示

linuxのディスクは、ファイルシステムごとに管理されています。その使用量を表示するコマンドです。
開発環境ではディスク容量不足になることはほとんど有り得ませんが、最初の割り当てが少ない場合や、プログラムが暴走して極めて大きいファイルを作ってしまうことがまれにあります。
linuxシステムでは、コマンドの実行などで、一時ファイルを作るときがあります。

例 ディスク使用量の表示
$ df

オプションとして「-k」または「-m」としたほうが容量の確認がしやすい。