Linux リテラシ2006 - 第3回 エディタ、シェル
テキスト処理
Section titled “テキスト処理”エディタとは文書を編集するもので、Windowsでいうメモ帳などがこれにあたります。
エディタを起動する
Section titled “エディタを起動する”vi ファイル名sample.txtというファイルを開く
Section titled “sample.txtというファイルを開く”$ vi sample.txt存在しないファイルを指定した場合、新規ファイルとして生成されます。
viには主に
- ノーマルモード
- 挿入モード
の二つのモードがあります。
起動時はノーマルモードになっていて、コマンドを入力することで挿入モードへと移行します。
挿入モードではWindows のメモ帳などと同様にvi を使用する事ができます。
挿入モードでは文字を挿入する事ができます。挿入方法はノーマルモードから移行するのに使用したコマンドに依存します。挿入モードになるとエディタの左下に’— 挿入 —‘または’— INSERT —‘と表示されます。
- 挿入モードに移行する
i ...カーソルの前に挿入するモードになります カーソルより後のテキストは、すべて右に移動しますa ...現在のカーソルの後ろにテキストを入力します カーソルは右に移動し、テキストはiと同様に挿入されますA ...行の後ろにテキストを挿入するモードになりますo ...カーソルの次の行に空行ができ、そこに挿入するモードになります- ノーマルモードに戻る
[Esc] ...ノーマルモードに戻るノーマルモード
Section titled “ノーマルモード”- カーソルを移動させる
↑ または k ...カーソルを上に移動します↓ または j ...カーソルを下に移動します← または h ...カーソルを左に移動します→ または l ...カーソルを右に移動します(小文字のLです)古いシステムでは方向キーが使えないため、h~lのキーで操作します。
- ファイルの内容を編集する
x ...カーソルで強調表示された文字を削除します(挿入モードにはならない)u ...1つ前の動作を取り消します(元に戻す)[行数] yy ...指定した行数分カーソルのある行から下をコピーします[行数] dd ...指定した行数分カーソルのある行から下を削除(切り取り)します[行数] p ...コピー、または切り取りした内容を張り付けますviでは「削除=切り取り」です。直前に削除した文字や行はpで貼り付けることができます。
- 文字列を検索する
/検索文字列 ...指定した文字列をカーソルより下の範囲で検索します?検索文字列 ...指定した文字列をカーソルより上の範囲で検索しますn ...検索された結果の次の候補に移動しますN ...検索された結果の前の候補に移動します- viを終了する
:w ・・・現在の状態をファイルに保存します:q! ...変更を保存しないで、viを終了します:wq ...ファイルに書き込んで、viを終了しますユーザの入力をカーネルと呼ばれるLinuxの核をなす部分に伝え、同時にその逆を行う仲介役のプログラムのことをシェルといいます。これはユーザから見て、カーネルを包み込んでいる「殻(shell)」のように見えることから名付けられました。
ユーザが利用できる対話的シェルの一つで、Linux の標準シェルとして主に使用されているのがbash です。
bash のオートコンプリート機能
Section titled “bash のオートコンプリート機能”bashはコマンドやファイル、ディレクトリ等を入力する際に、入力の途中で[TAB]キーを押すとその続きを補ってくれる機能を持っています。cd でのディレクトリ移動の時など役に立つので使いこなせるようになると便利です。
リダイレクト
Section titled “リダイレクト”リダイレクトとは「標準入出力の入れ換え」を行うことを指します。通常、標準入力とはキーボードからの入力を指し、標準出力とはディスプレイへの表示のことを指します。リダイレクトを行うことによって、標準入力をファイルから読み込むようにしたり、標準出力をファイルに書き出すようにすることが出来ます。
引数を標準出力に出力する
Section titled “引数を標準出力に出力する”echo 文字列文字列’Hello,world’を標準出力に出力する
Section titled “文字列’Hello,world’を標準出力に出力する”$ echo Hello,worldリダイレクトをする
Section titled “リダイレクトをする”> ファイル名 ・・・標準出力をを指定したファイルに切替えます ファイルが存在していた場合、古い内容は'''上書き'''されます>> ファイル名 ・・・標準出力をを指定したファイルに切替えます 出力データはファイルの内容に'''追記'''されます< ファイル名 ・・・標準入力を指定したファイルに切替えます文字列’Hello,world’の出力先をhello.txt に変更する
Section titled “文字列’Hello,world’の出力先をhello.txt に変更する”$ echo Hello,world > hello.txt文字列’Hello,world’の出力先をhello.txt に変更し、その内容に追記する
Section titled “文字列’Hello,world’の出力先をhello.txt に変更し、その内容に追記する”$ echo Hello,world >> hello.txthello.txt の内容を標準出力に出力する
Section titled “hello.txt の内容を標準出力に出力する”$ cat < hello.txtあるコマンドの標準出力をそのまま別のコマンドの標準入力へと送る仕組みのことをパイプといいます。
コマンド1の標準出力をコマンド2の標準入力にパイプする
Section titled “コマンド1の標準出力をコマンド2の標準入力にパイプする”コマンド1 | コマンド2コマンド2の後にもパイプを繋げてゆくことで何回でもパイプを続けることが出来ます。また、リダイレクトと連携させることも可能です。
echoの標準出力をrev にパイプする
Section titled “echoの標準出力をrev にパイプする”$ echo Hello, World | revrevは入力された文字列を逆にして表示するコマンドです。
シェルが * ? {} [] ~ 等の特殊文字を解釈し、ファイル名として展開することをグロブといいます。
複数のファイルに対して一括処理を行う場合に有効です。
* ・・・全ての文字列を表します(0文字も含む)? ・・・任意の1文字を表します$ ls samp*“samp”から始まる名前のファイルを表示します
$ ls hello.tx?“hello.tx”から始まる9文字の名前のファイルを表示します
エイリアスとはコマンドやコマンド群に略称をつける機能です。
頻繁に行う作業がある時、そのコマンド名が長い場合や入力が長くなりすぎる場合、エイリアスを用いることで作業を楽に進めることができます。
エイリアスを定義する
Section titled “エイリアスを定義する”alias 別名='コマンド列'コマンド’ls -a’に別名 la を定義する
Section titled “コマンド’ls -a’に別名 la を定義する”$ alias la='ls -a'定義されたエイリアス la を使用する
Section titled “定義されたエイリアス la を使用する”$ laまた、定義されたエイリアスにはオプションや引数をとることも出来ます。例えばこのlaの場合、
$ la -lとすることで ls -a -lと同じコマンドを表します。
現在定義しているエイリアスを確認する
Section titled “現在定義しているエイリアスを確認する”$ aliasエイリアスを取り消す
Section titled “エイリアスを取り消す”unalias エイリアス名エイリアス la を取り消す
Section titled “エイリアス la を取り消す”$ unalias laシェルスクリプト
Section titled “シェルスクリプト”シェルスクリプトとは複数のコマンドや組み込みコマンドなどをファイルに記述し、実行できるようにすることで記述したコマンドをまとめて実行できるようにしたものです。複雑な操作を繰り返し行う際などに役立ちます。
シェルスクリプトを作る
Section titled “シェルスクリプトを作る”シェルスクリプトは通常、拡張子を.sh とすることが多いのでシェルスクリプトを作る際はファイルの判別をしやすくするためにも.sh と末尾につけるようにしましょう。
シェルスクリプト ex.shを作る
Section titled “シェルスクリプト ex.shを作る”- viでex.shを作成し、開く
$ vi ex.sh- viの挿入モードを使い以下の内容を書き込み、保存する
#!/bin/sh#echo sample shell scriptbashでは# の後ろに書かれたものはコメントという、プログラムの実行自体には関係の無いソースの中の注釈として扱われます。
一行目に書いた#!/bin/sh というのは、このファイルがシェルスクリプトのファイルであることを表す”おまじない”です。
シェルスクリプトを実行する
Section titled “シェルスクリプトを実行する”実行するために、第二回で学んだchmod コマンドを使ってファイルに実行権限を与えます。
chmod +x シェルスクリプト名./シェルスクリプト名実行権限を与えていない場合でも、
sh シェルスクリプト名とすることで実行することも出来ます。
シェルスクリプト ex.shを実行する
Section titled “シェルスクリプト ex.shを実行する”$ chmod +x ex.sh$ ./ex.shbashの設定ファイル
Section titled “bashの設定ファイル”~/.bashrc~/.bash_profileにはbashの設定が含まれています。
.bash_profileはログイン時だけによみこまれるファイルで、ここには環境変数の設定などが保管されています。
.bashrcはログイン時にbash_profileからも読み込まれますが、別のシェルが起動したときにも実行されます。
そして.bash_profileの内容は
# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATHunset USERNAME以上のようになっています。#が行の最初についている部分はコメントアウトされています。
上のif~fiでくくられた部分が意味しているのは、ホームディレクトリに.bashrcがあれば.bashrcを読み込むという意味です。
PATHは環境変数(シェル変数)のことで、コロン(:)によって分けられたディレクトリのリストで構成されています。コマンドを実行しようとすると、PATH にあるディレクトリ全てを検索対象とし、ファイルが見つかるとそこで実行されます。
PATHは
echo $PATHとすることで確認する事ができます。
例えばコマンドlsを実行する時に、lsとタイプして実行される物は/bin/lsです
これはPATHの中に/binが含まれているので
その配下に配置されているlsが実行されています。
それは
which lsを実行する事で確認する事ができます。
デフォルトの.bashrcの内容は
# User specific aliases and functions
# Source global definitionsif [ -f /etc/bashrc ]; then . /etc/bashrcfi以上のようになっています。
.bashrcの内容は/etc/bashrcのファイルがあればそれを読み込む、と書かれています。
余裕がある人は/etc/bashrcの中身を見て理解してみてください。