Linux リテラシ - 第2回 エディタ、シェルスクリプト

三浦

エディタ、シェルスクリプト

エディタ、ビューア

エディタとは文書を編集、ビューアとは閲覧するツールソフトを指します。

less

基本的に画面に収まりきらないファイルを読むときに用いるビューアです。
lessの操作中に使えるコマンドには、以下のような物があります。

v            ・・・編集用のエディタ(vi)を起動
g            ・・・ファイルの先頭へ
G            ・・・ファイルの末尾へ
/文字列      ・・・文字列の後方検索 文字列とマッチするものを検索
?文字列      ・・・文字列の前方検索 文字列とマッチするものを検索
q            ・・・終了
h            ・・・操作の簡易ヘルプを表示

vi

何故viを使うのか

viの基本操作

起動/編集

vi ファイル名

によって起動/編集することができます。
ファイル名が存在しないファイルならその名前のファイルが作成され、存在するファイルならそのファイルを編集します。

モード

viには主に、
ノーマルモード
挿入モード
コマンドラインモード
の三つのモードがあります。
最初はノーマルモードで起動し、以下の項目で説明するaまたはiのような入れ替えコマンドを入力することによって挿入モードに移行します。
挿入モードはWindowsのnotepadのように使用する事ができます。

ノーマルモード

i           ・・・カーソルの前に入力します。カーソルの後のテキストは、すべて右に移動します。
I           ・・・行の最初の文字の前に入力します。
a           ・・・現在のカーソルの後ろにテキストを入力します。カーソルは右に移動し、テキストはiと同様に挿入されます。
A           ・・・行の後ろにテキストを入力します。
o           ・・・カーソルの次の行に空行ができ、そこにテキストを入力します(小文字のo)。
O           ・・・カーソルの前の行に空行ができ、そこにテキストを入力します(大文字のO)。
lまたは[→]  ・・・カーソルを右に移動する
hまたは[←]  ・・・カーソルを左に移動する
jまたは[↓]  ・・・カーソルを上に移動する
kまたは[↑]  ・・・カーソルを下に移動する
x            ・・・カーソルで強調表示された文字を削除します。このコマンドを実行しても、挿入モードにはなりません。
nx           ・・・カーソルからn個の文字を削除します。
dw           ・・・カーソルから次の単語(または句点)までを削除します。
dd           ・・・現在の行(カーソルのある行)を削除します。
dG           ・・・現在の行(カーソルのある行)からファイルの末尾までを削除します。
行数 yy      ・・・指定した行数コピーする, 
行数 dd      ・・・指定した行数削除します,  
回数 p       ・・・コピーした内容を下の行に指定した回数貼り付ける  
回数 P       ・・・コピーした内容を上の行に指定した回数貼り付ける
u            ・・・1つ前の動作を取り消す(元に戻す)。
※ viでは「削除=切り取り」です。直前に削除した文字はpやPで貼り付けることができます。

コマンドラインモード

:q!                  ・・・変更を保存しないで、viを終了する
:w                   ・・・現在のファイルに書き込む(保存)
:wq                  ・・・ファイルに書き込んで、viを終了する
:saveas (ファイル名) ・・・(ファイル名)という名前で編集中のデータを新しく保存する。
/検索文字列          ・・・ファイルを開いている状態で文字列を検索する
n                    ・・・検索中で次を検索する
N                    ・・・検索中で前を検索する

挿入モード

文字を挿入する事ができます。
[Esc]        ・・・ノーマルモードに戻る

シェル

LinuxはOSの核にあたるカーネルと、その上で動作する数多くのプロセスによって構成されています。
シェルはプロセスの1つで、ユーザが入力した命令を解釈してカーネルに伝えます。
それに応じてカーネルは新たなプロセスを起動するなどの処理を行います。

bashとは

ユーザが利用する対話的シェルの一つでLinuxがデフォルトで利用しているのがbashです。
bashは他のシェルが持つ便利な拡張機能を持っています。

bashの補完機能

bashではコマンド/ディレクトリをタイプする時に、先頭の文字をタイプし、[TAB]キーを押せば補完してくれるという機能を持っています、ディレクトリ移動の時など便利な機能ですので使いこなせるようになると便利です。

リダイレクト

リダイレクトは標準入出力の切り替えです。
これは、標準入力をキーボード以外のファイルに指定したり、標準出力をディスプレイ以外のファイルに指定することを指します。
例えば

echo This is test > test

とし、標準出力に出力される文字列を新規に作成したtestというファイルに書き込む事ができます。

cat < test

また、以上のように、catコマンドにtestファイルの内容を入力することで、testファイルの内容を標準出力に出力する事ができます。

標準入出力とは

つまり標準入出力とは、キーボードからの入力がLinux(カーネル)に送られ、それが文字などとして画面に出力される動作全般のことを指します。

出力のリダイレクト

出力のリダイレクトを行う際には2通りの方法があります。

>          ・・・新しくファイルを作成し、それに出力する
>>         ・・・既存のファイルに追加書き出しを行う
echo test1 > test
cat test
echo test2 >> test
cat test
echo test3 > test
cat test

を順次実行することによって、出力のリダイレクトの仕組みを理解する事ができます。

パイプライン処理

一つのプログラムの標準出力をそのまま他のプログラムの標準入力に送るためのしくみです。

ファイルグロブ

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

表記効果
*すべての文字列を表す。
?任意の1文字を表す。
[...]鉤括弧内のどれか1文字を表す。
[!...]鉤括弧内に含まれない文字を表す。

文字列が使用されている行を探す

grep test file[1-9]

とすれば、file1~file9というファイルの中から文字列testが記述されている行だけを表示する事ができます。

コマンド"|"コマンド

"|"記号は、左側のコマンドの標準出力を、右側のコマンドの標準入力に流すという動作を行います。
例えば

grep test file[1-9] | sort

とすれば、file1~file9というファイルの中から文字列testが記述されている行だけを抜き出し、アルファベット順に並べ替えて表示させる事ができます。

別名機能

頻繁に行う作業がある時、そのコマンド名が長い場合や入力が長くなりすぎる場合、別名機能を用います。
別名を定義するにはコマンド"alias"を使います

alias 別名='文字列'

逆に別名を取り消す場合は、コマンド"unalias"を使います。

unalias 別名

という形で表記します。

パーミッション

パーミッションはファイルの保護モードのことを指します。
読み込み、書き込み、実行の3つのパーミッションによって構成されており、それらがファイル所有者(u)、グループユーザ(g)、その他のユーザ(o)のそれぞれに対して設定される権限をいいます。

自分 グループ 他人
読むr-- --- ------ r-- ------ --- r--
書く-w- --- ------ -w- ------ --- -w-
実行--x --- ------ --x ------ --- --x

パーミッションの確認は

ls -l

を用いて確認する事ができます。

-rw-rw-r--

の先頭一文字は

-       ・・・ファイル
d       ・・・ディレクトリ

を表しています。
ファイルtestのパーミッションがrw-r--r--のグループに書き込み権を与えるには、

chmod g+w test

と書けばrw-rw-r--と変更することができます。

またこのrwxは数字で表す事も可能です。それぞれ3桁の2進数で表すことができ、
r→4
w→2
x→1
と考え、
rw-r--r--であれば644と表す事が可能です。
ファイルtestのパーミッションを644に変更するには

chmod 644 test

と書けば変更する事ができます。

シェルスクリプト

シェルスクリプトとはコマンドやシェルの組み込みコマンドなどをファイルに記述し、実行できるようにしたものです。

bashの設定ファイル

~/.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の中身を見て理解してみてください。

基礎コマンド説明

echo (options)[文字列]

echo          ・・・文字列の内容を標準出力に出力する。
(options)
      -n      ・・・最後の改行を出力しない
      -e      ・・・エスケープコードを使用可能にする。

sort (options)[ファイル]

sort          ・・・ファイルの内容を並べ替える。
(options)
      -r      ・・・ファイル内容を逆順に並べ替える。
      -u      ・・・ファイル内容を並べ替え、同一行を削除する。

grep (options) PATTERN [ファイル...]

grep          ・・・ファイルで指定された入力ファイルの中からパターンがマッチする行を表示する。
      -v      ・・・パターンにマッチしない行を選択する。
      -c      ・・・通常の表示はせず、パターンがマッチした行数を出力します。       

chmod (options)[権限記述] [ファイル]

chmod         ・・・ファイル・ディレクトリのアクセス権限を変更する。
権限記述の書式
 [対象]±[属性] ・・・対象(u:所有者、g:グループ、o:他人、a:すべて)の属性(r:読み取り、w:書き込み、x:実行)を変更する。
 [数値]         ・・・数値で対象の属性を変更する。

alias (options)[別名='コマンド列']

alias         ・・・コマンドにエイリアス(別名)を付ける

which (options)[コマンド名]

which         ・・・コマンドのフルパスを表示

課題