Skip to content

Linux リテラシ2006 - 第3回 エディタ、シェル

This content is not available in your language yet.

エディタとは文書を編集するもので、Windowsでいうメモ帳などがこれにあたります。

vi ファイル名
Terminal window
$ vi sample.txt

存在しないファイルを指定した場合、新規ファイルとして生成されます。

viには主に

  • ノーマルモード
  • 挿入モード の二つのモードがあります。
    起動時はノーマルモードになっていて、コマンドを入力することで挿入モードへと移行します。
    挿入モードではWindows のメモ帳などと同様にvi を使用する事ができます。

挿入モードでは文字を挿入する事ができます。挿入方法はノーマルモードから移行するのに使用したコマンドに依存します。挿入モードになるとエディタの左下に’— 挿入 —‘または’— INSERT —‘と表示されます。

  • 挿入モードに移行する
i ...カーソルの前に挿入するモードになります
カーソルより後のテキストは、すべて右に移動します
a ...現在のカーソルの後ろにテキストを入力します
カーソルは右に移動し、テキストはiと同様に挿入されます
A ...行の後ろにテキストを挿入するモードになります
o ...カーソルの次の行に空行ができ、そこに挿入するモードになります
  • ノーマルモードに戻る
[Esc] ...ノーマルモードに戻る
  • カーソルを移動させる
↑ または 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はコマンドやファイル、ディレクトリ等を入力する際に、入力の途中で[TAB]キーを押すとその続きを補ってくれる機能を持っています。cd でのディレクトリ移動の時など役に立つので使いこなせるようになると便利です。

リダイレクトとは「標準入出力の入れ換え」を行うことを指します。通常、標準入力とはキーボードからの入力を指し、標準出力とはディスプレイへの表示のことを指します。リダイレクトを行うことによって、標準入力をファイルから読み込むようにしたり、標準出力をファイルに書き出すようにすることが出来ます。

echo 文字列

文字列’Hello,world’を標準出力に出力する

Section titled “文字列’Hello,world’を標準出力に出力する”
Terminal window
$ echo Hello,world
> ファイル名 ・・・標準出力をを指定したファイルに切替えます
ファイルが存在していた場合、古い内容は'''上書き'''されます
>> ファイル名 ・・・標準出力をを指定したファイルに切替えます
出力データはファイルの内容に'''追記'''されます
< ファイル名 ・・・標準入力を指定したファイルに切替えます

文字列’Hello,world’の出力先をhello.txt に変更する

Section titled “文字列’Hello,world’の出力先をhello.txt に変更する”
Terminal window
$ echo Hello,world > hello.txt

文字列’Hello,world’の出力先をhello.txt に変更し、その内容に追記する

Section titled “文字列’Hello,world’の出力先をhello.txt に変更し、その内容に追記する”
Terminal window
$ echo Hello,world >> hello.txt

hello.txt の内容を標準出力に出力する

Section titled “hello.txt の内容を標準出力に出力する”
Terminal window
$ cat < hello.txt

あるコマンドの標準出力をそのまま別のコマンドの標準入力へと送る仕組みのことをパイプといいます。

コマンド1の標準出力をコマンド2の標準入力にパイプする

Section titled “コマンド1の標準出力をコマンド2の標準入力にパイプする”
コマンド1 | コマンド2

コマンド2の後にもパイプを繋げてゆくことで何回でもパイプを続けることが出来ます。また、リダイレクトと連携させることも可能です。

echoの標準出力をrev にパイプする

Section titled “echoの標準出力をrev にパイプする”
Terminal window
$ echo Hello, World | rev

revは入力された文字列を逆にして表示するコマンドです。

シェルが * ? {} [] ~ 等の特殊文字を解釈し、ファイル名として展開することをグロブといいます。
複数のファイルに対して一括処理を行う場合に有効です。

* ・・・全ての文字列を表します(0文字も含む)
? ・・・任意の1文字を表します
Terminal window
$ ls samp*

“samp”から始まる名前のファイルを表示します

Terminal window
$ ls hello.tx?

“hello.tx”から始まる9文字の名前のファイルを表示します

エイリアスとはコマンドやコマンド群に略称をつける機能です。
頻繁に行う作業がある時、そのコマンド名が長い場合や入力が長くなりすぎる場合、エイリアスを用いることで作業を楽に進めることができます。

alias 別名='コマンド列'

コマンド’ls -a’に別名 la を定義する

Section titled “コマンド’ls -a’に別名 la を定義する”
Terminal window
$ alias la='ls -a'

定義されたエイリアス la を使用する

Section titled “定義されたエイリアス la を使用する”
Terminal window
$ la

また、定義されたエイリアスにはオプションや引数をとることも出来ます。例えばこのlaの場合、

Terminal window
$ la -l

とすることで ls -a -lと同じコマンドを表します。

現在定義しているエイリアスを確認する

Section titled “現在定義しているエイリアスを確認する”
Terminal window
$ alias
unalias エイリアス名
Terminal window
$ unalias la

シェルスクリプトとは複数のコマンドや組み込みコマンドなどをファイルに記述し、実行できるようにすることで記述したコマンドをまとめて実行できるようにしたものです。複雑な操作を繰り返し行う際などに役立ちます。

シェルスクリプトは通常、拡張子を.sh とすることが多いのでシェルスクリプトを作る際はファイルの判別をしやすくするためにも.sh と末尾につけるようにしましょう。

  • viでex.shを作成し、開く
Terminal window
$ vi ex.sh
  • viの挿入モードを使い以下の内容を書き込み、保存する
#!/bin/sh
#
echo sample shell script

bashでは# の後ろに書かれたものはコメントという、プログラムの実行自体には関係の無いソースの中の注釈として扱われます。
一行目に書いた#!/bin/sh というのは、このファイルがシェルスクリプトのファイルであることを表す”おまじない”です。

実行するために、第二回で学んだchmod コマンドを使ってファイルに実行権限を与えます。

chmod +x シェルスクリプト名
./シェルスクリプト名

実行権限を与えていない場合でも、

sh シェルスクリプト名

とすることで実行することも出来ます。

シェルスクリプト ex.shを実行する

Section titled “シェルスクリプト ex.shを実行する”
Terminal window
$ chmod +x ex.sh
$ ./ex.sh
~/.bashrc
~/.bash_profile

にはbashの設定が含まれています。
.bash_profileはログイン時だけによみこまれるファイルで、ここには環境変数の設定などが保管されています。
.bashrcはログイン時にbash_profileからも読み込まれますが、別のシェルが起動したときにも実行されます。

そして.bash_profileの内容は

.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME

以上のようになっています。#が行の最初についている部分はコメントアウトされています。
上のif~fiでくくられた部分が意味しているのは、ホームディレクトリに.bashrcがあれば.bashrcを読み込むという意味です。
PATHは環境変数(シェル変数)のことで、コロン(:)によって分けられたディレクトリのリストで構成されています。コマンドを実行しようとすると、PATH にあるディレクトリ全てを検索対象とし、ファイルが見つかるとそこで実行されます。

PATHは

echo $PATH

とすることで確認する事ができます。

例えばコマンドlsを実行する時に、lsとタイプして実行される物は/bin/lsです
これはPATHの中に/binが含まれているので
その配下に配置されているlsが実行されています。
それは

which ls

を実行する事で確認する事ができます。

デフォルトの.bashrcの内容は

.bashrc
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

以上のようになっています。
.bashrcの内容は/etc/bashrcのファイルがあればそれを読み込む、と書かれています。
余裕がある人は/etc/bashrcの中身を見て理解してみてください。