ファイルの編集
PG,NE,SVにはエディタが必須!
正式な呼び方をすればテキストエディタですが、ここではエディタと省略して説明します。正式名称からわかるように、テキストファイルを作成したり、編集したり、保存するために使うソフトのことを指します。
マイクロソフトのWordは誰もが一度は使ったことがあるソフトだと思いますが、これは厳密に言えばエディタではありません。Windowsでいえばメモ帳などがエディタに該当します。
プログラミングはプログラムをテキストによって構築します。プログラマーの作業しているシーンを想像してみましょう。黒い画面に向かって何かを必死に打ち続けているイメージがありますよね。
これがまさにエディタを使ってプログラムを書いている場面です。
エディタと上手く付き合えるか、言い換えればエディタを使いこなせるかがプログラマーの生産性を大きく左右します。
プログラマーがエディタを使っている時間は全作業時間のうちの多くを占めます。いかにショートカットを使えているか、いかにエディタに搭載されたツールで時間短縮ができているか等、生産性に直接関わってくるものなんです。
例えば、一行まるまるコードを削除するときにDeleteキーをずーっと押し続けているプログラマーと、ショートカットで一発で消してしまうプログラマーとでは明らかに作業効率が変わるか、想像が容易ですよね。
つまり、プログラマーとして仕事をする上でエディタの存在は切っても切れない関係であり、重要なツールというわけです。
気をつけておかないといけない点として、1つのエディタをしばらく使い続けていると、他のエディタを使おうとしたときに乗り換えコストがとても大きいという問題があります。
上述したようにエディタにはショートカットコマンドや各種ツールなどが存在し、そのショートカットの方法はエディタごとで統一されていません。
つまり、Aというエディタで作業することが慣れたあとに、Bというエディタに乗り換える場合はほぼ一から使い方を覚えなければいけないわけです。
以上のお話は、サーバ技術者、ネットワーク技術者も同様です。なぜならば、サーバー技術者はエディタを使って各種サービスの設定ファイルを書き換える必要があります。ネットワーク技術者もスクリプトを作ってネットワークの監視処理等を自動化する必要があるからです。
長所
短所
CUIなので最初は操作方法に戸惑う
操作方法で覚えることが他に比べると多い
GUIと呼ばれるエディタとは異なり、VimはCUIであるためマウスなどは使わず基本的にはキーボードを使ってコマンドによる操作を行います。例えば、上の行に移動するときはマウスや矢印キーを使うのではなく「k」を使ったりします。GUIエディタに比べると操作方法に関して覚えることが非常に多いため、使いこなせるようになるまでは時間を要します。なぜそんな面倒なエディタを使う人がいるのかというと、そういったコマンドを覚えてしまえば非常に効率的に作業ができる点や、サーバーでの作業をするときにはVimの仲間であるViというエディタを使うため、その時に苦労せずに済むといった点があります。
vi スクリーンエディタ(モードの概念を有する)
vi モード変更
基本形
vi ファイルを開く
vi filename ファイルのオープンまたは作成(通常)
vi +21 filename ファイルをオープンし、行21に位置づける
vi +/hoge filename ファイルをオープンし、hogeの行に位置づける
vi 保存と終了
:w 修正内容を保存
:w! 修正内容を強制保存 → rootであれば書込み権が無くても書込み可)
:w filename 修正内容をfilenameへ書き込む
:q! 修正内容を保存せず終了(強制終了)
:wq 修正内容を保存してviを終了
:wq! 修正内容を強制保存してviを終了(強制保存&強制終了) → rootであれば書込み権が無くても書込み終了可)
vi カーソル移動
h 左へ1文字分移動(←キー)
j 下へ移動(↓キー)
k 上へ移動(↑キー)
l 右へ1文字分移動(→キー)
w 右へ1単語分移動
W 右へ1単語分移動(区切り文字を越える)
b 左へ1単語分移動
B 左へ1単語分移動(区切り文字を越える)
e 次の単語の末尾へ移動
E 次の単語の末尾へ移動 (区切り文字を越える)
[Return] 下の行へ移動
[Space Bar] 右へ1文字分移動
nG ファイル全体の最初から n 行目へ移動
:n ファイル全体の最初から n 行目へ移動
:+n カレント行からn行下に移動
:-n カレント行からn行上に移動
vi 画面スクロール
Shift+H 画面上端へ移動(High)
Shift+M 画面中段へ移動(Medium)
Shift+L 画面下端へ移動(Low)
Ctrl+F 1画面分下へスクロール(Forward)
Ctrl+D 半画面分下へスクロール(Down)
Ctrl+B 1画面分上へスクロール(Back)
Ctrl+U 半画面分上へスクロール(Up)
vi 文字・行の挿入
a カーソルの右にテキストを追加
A カーソルがある行の最後尾にテキストを追加
i カーソルの左にテキストを追加
I カーソルがある行の先頭にテキストを追加
o カーソルがある行の下の行にテキストを追加
O カーソルがある行の上の行にテキストを追加
vi 文字・行の削除
x カーソル上の1文字削除
X カーソルの左の文字を1文字削除
dd 現在の行を削除
ndd n 行、削除
dw カーソル上の一語を削除
df字 カーソル位置から指定した1文字(chr) までを削除
d$ カーソル位置から行の最後までを削除
d^ カーソル位置から行の先頭までを削除
:nn,mmd nn からmm を削除
vi 文字・行の複写
yw カーソルのある単語をバッファに複写
yy カーソルのある行をバッファに複写
nyy カーソルのある行から n 行をバッファに複写
p カーソルのある行の下にバッファから複写
P カーソルのある行の上にバッファから複写
部分コピー いったん v でビジュアルモードにして選択範囲をヤンク(y)
必要な個所でプット(p)
vi 文字の置換
r カーソルのある1文字を次に指定した文字で置換
R カーソルのある位置から複数個の文字を置換。
s カーソルのある1文字を複数個の文字で置換
S カーソルのある行全体を置換
cc カーソルのある行全体を置換
cw カーソルのある位置からこの語の最後まで置換
cf字 カーソルのある位置から指定した1文字( chr )まで置換
(自信がない間は使わないほうがよい!)
vi 文字列の検索と置換
/string stringを検索(nで下方向に検索、Nで上方向に検索)
?string stringを検索(nで上方向に検索、Nで下方向に検索)
:[範囲]s/検索文字列/置換後の文字列[オプション]
[g]オプション 同じ行の中に検索文字列が複数存在していた場合でも初期状態では最初に見つかった文字列のみが置換される
検索文字列にマッチするすべての文字列を置換したい場合は最後に[g]オプションを指定する
[c]オプション 置換時確認が行われる yで置換の実行、y以外で置換せず
:s/str1/str2/ カレント行の最初のstr1をstr2に置換
:s/str1/str2/g カレント行の全て(global)のstr1をstr2に置換
:s/str1/str2/gc カレント行の全てのstr1をstr2に確認しながら置換確認は、yで置換の実行、y以外で置換せず
:n,m s/str1/str2/ nからm行の各行内の最初のstr1をstr2に置換
:.,+n s/str1/str2/ カレント行からn行後までの行内最初のstr1をstr2に置換
:.,$ s/str1/str2/ カレント行から最終行までの行内最初のstr1をstr2に置換
:1,. s/str1/str2/ 1行目からカレント行までの行内最初のstr1をstr2に置換
:1,$ s/str1/str2/g 1行目から最終行までの全てのstr1をstr2に置換
:% s/str1/str2/g 同上
str1やstr2は正規表現が使えます 例えば % s/:[0-9][0-9][0-9]://g を実行すると :〇〇〇: 形式の行番号を削除できます
(自信がない間は使わないほうがよい!)
vi 現ファイルに新ファイルを追加
:r filename カーソルの下に指定されたファイルを挿入
vi 処理の繰り返し・取り消し
. 直前のコマンドの繰り返し
u 最後の修正を取り消す
Ctrl+R 取り消しの取り消し
U この行に対して行ったすべての修正を取り消す
vi 設定値
:set 現在のオプションを表示
:set all 全オプションの設定値を表示
:set autoindent インデントモード (:set ai)
:set number 行番号 (:set nu)
:set tabstop=n タブ間隔を n に設定する
:set autowrite ファイル保存が必要な時 は自動的に保存 (:set aw)
:set ignorecase 検索時に大小文字を区別しない (:set ic)
:set showmode 入力モードの表示をする
:set showmatch () や {} の対応の報告をする(:set sm)
:set nonumber または、:set nonuのようにnoを付けることでその機能を無効にできる。
vi 設定ファイルの作成
"#####表示設定#####
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=2 "インデントをスペース2つ分に設定
以下のファイルを作成してviの動きを確認してください
vi .vimrc
【演習1】
vi チュートリアル
まずはなにか長めの文章を作成してみましょう。
例えば(以下の546文字の文章を10分で可能なところまで入力します)
レッスン 1 開始・終了・入力・保存
1.編集開始は vi filename となります。
2.終了するには :q! とタイプします(変更を破棄)。
もしくは :wq とタイプします(変更を保存)。
3. カーソルの位置に文字を挿入するには、コマンドモードで i とタイプします。
インサートモードからESCキーを押すとコマンドモードに移行します。
i テキストの入力(カーソル位置に追加)
a テキストの入力(カーソルの右にテキストを追加)
A テキストの追加(行末に追加)
レッスン 2 行削除・文字削除・取り消し
1. 行全体を削除するには dd とタイプします。
2. モーションを繰り返すには数値を付与します→2dd→2行削除
3. カーソルの下の文字を削除するには、コマンドモードで x とタイプします。
4. 前回の動作を取消す: u (小文字 u)
行全体の変更を取消す: U (大文字 U)
取消しの取消し: CTRL-R
レッスン 3 コピー・ペースト・1文字変更
1. y コマンドはテキストを yank (コピー)し、p はそれを put (ペースト)する。
既に削除されたテキストを再配置するには、p をタイプします。これは削除されたテキストをカーソルの後に挿入します
(行単位で削除されたのならば、カーソルのある次の行に挿入されます)。
2. カーソルの下の文字を置き換えるには、r をタイプした後、それを置き換える文字をタイプします。
レッスン 4 カーソル移動
1.カーソルは矢印キーもしくは hjkl キーで移動します。
h (左) j (下) k (上) l (右)
2.G はファイルの最下行に移動します。
3.数値 G はその行に移動します。
4.gg は先頭行に移動します。
レッスン 5 語句の検索
1./ の後に語句をタイプすると前方に語句を検索します。
2.? の後に語句をタイプすると後方に語句を検索します。
3.検索の後の n は同じ方向の次の検索を、N は逆方向の検索をします。
レッスン 6 一時的なシェルコマンドの実施
1. :shell によって 一時的にシェルに戻ります。
2.再度viに戻るにはシェルからexitを入力します。
3.viが起動していないときにexitを入力すると端末が終了してしまいます。
4.viが起動しているかどうかは ls -al でswpファイルがあるかどうか確認します。
レッスン 7 viの設定
1. ":set xxx" とタイプするとオプション "xxx" が設定される。
":set number" 行番号の表示
":set noh" ハイライトを消す
これでviのチュートリアルを終わります。エディタを簡単に、しかも充分に使うことができるようにと、viの持つ概念の要点のみを伝えました。
viにはさらに多くのコマンドがあり、ここで全てを説明することはできません。使っていきながら調べてみてください。
viエディタの使い方を手っ取り早く習得するには、プログラムの作成を行うのが非常に効果的です。
以下で簡単なプログラムを作って実務での使い方を体験します。
シェルはインタープリタ型のプログラムを実行できる環境でもあります。
つまりファイル内にシェルのコマンドを記述し、ファイルに実行権を与えることで、ファイル内のコマンド群を実行することができます。
これをシェルスクリプトと呼びます。一般的にはバッチプログラムと呼ぶこともあります。
シェルスクリプトのファイルを作成、実行することでプログラムライクにコマンドを実行することが可能になります。
【演習2】
10台のLinuxホストにpingを打つシェルスクリプトを作ってみます
シェルスクリプトのファイル名は pingLinux.sh です
シェルスクリプトのファイルの頭にはシバンが必要です
(shebang)
(これはスクリプトを実行するインタープリターの指定です。)
(#! に続けてプログラムのフルパスを書いてシェルに実行するインタープリターを指定します。)
(1)viを起動(vi pingLinux.sh)し以下を入力します。
#!/bin/bash
ping -w 3 192.168.56.1
yyコマンドと9pコマンドでping行を9個コピーします
それぞれのipアドレスの第4オクテッドをrコマンドを使って1~10へ変更します
結果として次のような内容になります
#!/bin/bash
ping -w 3 192.168.56.1
ping -w 3 192.168.56.2
ping -w 3 192.168.56.3
ping -w 3 192.168.56.4
ping -w 3 192.168.56.5
ping -w 3 192.168.56.6
ping -w 3 192.168.56.7
ping -w 3 192.168.56.8
ping -w 3 192.168.56.9
ping -w 3 192.168.56.10
(2)ファイルを保存して終了ます
[esc][:][w][q]
(3)実行権を与えます
chmod 755 pingLinux.sh
(4)フルパス形式で実行します
./pingLinux.sh
ファイル名だけでコマンドとして実行できるのはファイルが /bin や /usr/bin にあるときです。
【演習3】
lコマンドを作成します
(1)まずは、viでlファイルを作ります(vi l)。以下を入力します。
#!/bin/bash
clear
ls -al
(2)保存して終了してください。これでlコマンドが出来上がります。
[esc][:][w][q]
(2)実行権を与えてください。
chmod 755 l
(3)フルパス形式で実行します。
./l
【演習4】
historyコマンドの動きを変更します
サーバは 192.168.56.10
ユーザ名は root
パスフレーズは rootwest でログインしてください
(1)viで/etc/profilelファイルを編集します(vi /etc/profile)。最後の行に以下の2行を追加入力します。
export HISTSIZE=10000
export HISTTIMEFORMAT='%F %T-'
(2)保存して終了してください。これでlコマンドが出来上がります。
[esc][:][w][q]
(2)profileを再読込します。
source /etc/profile
(3)historyを確認します。
history
(4)曜日と日付の出力を確認します。