第2章 Linuxコマンドを覚えよう
Linuxファイル管理で、よく使うコマンドを紹介していくよ。文字列を出力、ファイルの一覧、ファイルの作成・削除、ディレクトリの移動・コピー、ファイルの内容を確認、パーミッションを変更する方法をマスターしよう。

文字列を出力するコマンド

文字列を出力するコマンドについて解説します。

echoコマンド - 文字列を出力する

echoコマンドで文字列を出力できます。シングルクォートで囲った文字列の場合は、変数展開がされず、そのまま出力されます。

echo 'Hello $FOO \'

出力結果です。

Hello $FOO \

Perlとの違いで覚えておく必要があるのは「\」は、シェルではエスケープ記号ではないということです。

変数展開する

変数展開を行うには、ダブルクォート文字列を使用します。

echo "Hello $HOME";

出力結果のサンプルです。

Hello /home/kimoto

複数の文字列を出力する

複数の文字列を出力するには、文字列を並べます。文字列の間には、空白を含めることはできません。空白を含めると、空白が出力されます。

echo 'Hello''World'"Oh"

出力結果です。

HelloWorldOh

シングルクォートの中でシングルクォートは使えない

Perlと異なる一番の注意点は、シングルクォートの中で、シングルクォートを使う方法はないということです。

たとえば「I'd like you」と表示するためには、文字列を並べる方法を使って以下のように書きます。

echo 'I'"'"'d like you'

出力結果です。

I'd like you

カレントディレクトリを表示・変更するコマンド

カレントディレクトリを表示・変更するコマンドです。

カレントディレクトリのパスを表示する - pwdコマンド

カレントディレクトリのパスを表示するにはpwdコマンドを使用します。カレントディレクトリとは、現在作業をしているディレクトリのことです。パスとは、ファイルの場所を示す表現のことです。

# カレントディレクトリのパスを表示
pwd

出力結果のサンプルです。カレントディレクトリのパスが表示されます。

/home/kimoto

カレントディレクトリを変更する - cdコマンド

カレントディレクトリを変更するにはcdコマンドを使用します。

# カレントディレクトリをfooに変更
cd foo

カレントディレクトリが「/home/kimoto」だった場合は、上記のコマンドを実行すると、カレントディレクトリは「/home/kimoto/foo」に変わります。

「foo」のようなパスの表現を相対パスといいます。

cdコマンドの引数に絶対パスを指定することもできます。絶対パスは「/」で始まり、ルートディレクトリからのファイルの位置を表現します。

# カレントディレクトリを「/home/kimoto/foo」に変更
cd /home/kimoto/foo

Linuxのコマンドで、パスが引数になっているものは、相対パスと絶対パスの両方が受け取れるようになっています。

ホームディレクトリの表現

ホームディレクトリは「~」で表現できます。これは、シェルによって、ホームディレクトリに展開されます。ホームディレクトリへの移動は、次のように簡単に書けます。

# カレントディレクトリをホームディレクトリに変更
cd ~

ファイルやディレクトリを一覧するコマンド

ファイルやディレクトリを一覧するコマンドについて解説します。ディレクトリという言葉は、Windowsユーザーの方は聞きなれないと思います。ディレクトリは、Windowsのフォルダに該当します。

ファイルの一覧を表示する - lsコマンド

ファイルの一覧を表示するにはlsコマンドを使用します。

# ファイルの一覧を表示
ls

出力結果です。現在のディレクトリにあるファイルの一覧が表示されます。

convert_markdown.pl  giblog.conf  lib  public  README  serve.pl  templates

Linuxでは、ディレクトリのこともファイルと呼びます。Linuxでは、ディレクトリは、特別なファイルという扱いです。ですので、ファイル一覧と言ったときに、ディレクトリも含んでいるということに注意してください。

1行ずつファイルを表示する

「-1」オプション(数字の1)を使うとlsの出力結果を1行ずつにできます。

ls -1

出力結果です。1行ずつ表示しています。

convert_markdown.pl
giblog.conf
lib
public
README
serve.pl
templates

ファイル一覧の詳細表示

lsコマンドで「-l」オプションを使用すると、ファイルの一覧を詳細表示で見れます。

# ファイル一覧 - 詳細表示
ls -l

出力結果です。ファイルの一覧を詳細表示で見れます。

-rw-r--r-- 1 kimoto kimoto 1116 Aug 15 08:28 convert_markdown.pl
-rw-r--r-- 1 kimoto kimoto  162 Sep 11 08:42 giblog.conf
drwxrwxr-x 3 kimoto kimoto 4096 Aug 10 15:01 lib
drwxrwxr-x 7 kimoto kimoto 4096 Aug 10 15:04 public
-rw-r--r-- 1 kimoto kimoto  227 Aug 10 15:01 README
-rw-r--r-- 1 kimoto kimoto  219 Aug 10 15:01 serve.pl
drwxrwxr-x 5 kimoto kimoto 4096 Aug 10 15:01 templates

一覧表示で見れる情報です。

  • ファイルパーミッション
  • (説明省略)
  • 所有者ユーザー
  • 所有者グループ
  • ファイルサイズ(単位はバイト)
  • ファイルの更新月
  • ファイルの更新日
  • ファイルの更新時刻
  • ファイル名

ファイルパーミッション、所有者ユーザー、所有者グループについては、この後に解説します。

ファイルサイズに単位をつける

ファイルサイズに単位をつけたい場合は「-h」オプションを加えます。

# ファイルサイズに単位をつける
ls -l -h

Linxuコマンドでは、一文字のオプションは、たいていの場合、次のように合体させることもできるので覚えておきましょう。

ls -lh

出力結果です。ファイルサイズに単位がつきました。

-rw-r--r-- 1 kimoto kimoto 1.1K Aug 15 08:28 convert_markdown.pl
-rw-r--r-- 1 kimoto kimoto  162 Sep 11 08:42 giblog.conf
drwxrwxr-x 3 kimoto kimoto 4.0K Aug 10 15:01 lib
drwxrwxr-x 7 kimoto kimoto 4.0K Aug 10 15:04 public
-rw-r--r-- 1 kimoto kimoto  227 Aug 10 15:01 README
-rw-r--r-- 1 kimoto kimoto  219 Aug 10 15:01 serve.pl
drwxrwxr-x 5 kimoto kimoto 4.0K Aug 10 15:01 templates

隠しファイルを表示する

Linuxでは、先頭が「.」で始まる隠しファイルを隠しファイルと呼びます。隠しファイルも含めて表示するには「-a」オプションを使用します。

ls -la

出力結果です。先頭が「.」で始まる、隠しファイルが表示されました。

drwxrwxr-x  6 kimoto kimoto 4096 Aug 14 17:51 .
drwxrwxr-x 40 kimoto kimoto 4096 Nov  9 10:08 ..
-rw-r--r--  1 kimoto kimoto 1116 Aug 15 08:28 convert_markdown.pl
-rw-r--r--  1 kimoto kimoto  162 Sep 11 08:42 giblog.conf
drwxrwxr-x  8 kimoto kimoto 4096 Oct 12 19:52 .git
-rw-r--r--  1 kimoto kimoto    8 Aug 10 15:01 .gitignore
drwxrwxr-x  3 kimoto kimoto 4096 Aug 10 15:01 lib
drwxrwxr-x  7 kimoto kimoto 4096 Aug 10 15:04 public
-rw-r--r--  1 kimoto kimoto  227 Aug 10 15:01 README
-rw-r--r--  1 kimoto kimoto  219 Aug 10 15:01 serve.pl
drwxrwxr-x  5 kimoto kimoto 4096 Aug 10 15:01 templates

Linuxでは、隠しファイルとは、単に、先頭が「.」で始まるファイルという意味です。ユーザーが、自分で作成することもできます。

「.」「..」は、特別なディレクトリです。「.」は、自分自身のディレクトリを意味し、「..」は一つ上の階層のディレクトリを意味します。

「.git」と「.gitignore」は、Gitで利用されている隠しファイルです。

サブディレクトリを含めたファイル一覧 - findコマンド

サブディレクトリをを含めたファイル一覧を取得するにはfindコマンドを使用します。

# サブディレクトリを含めたファイル一覧を取得
find /usr/local/lib

findコマンドの出力結果のサンプルです。サブディレクトリも含めたファイル一覧が表示されます。

/usr/local/lib
/usr/local/lib/liblept.so.3.0.0
/usr/local/lib/liblept.so.3
/usr/local/lib/liblept.so
/usr/local/lib/liblept.la
/usr/local/lib/liblept.a
/usr/local/lib/libtesseract.so.3.0.2
/usr/local/lib/libtesseract.so.3
/usr/local/lib/libtesseract.so
/usr/local/lib/libtesseract.la
/usr/local/lib/libtesseract.a
/usr/local/lib/pkgconfig
/usr/local/lib/pkgconfig/tesseract.pc

カレントディレクトリのファイル一覧を取得したい場合は、次のようにします。

# カレントディレクトリのファイル一覧を取得
find .

上記の方法だと、隠しファイルの表示されてしまうので、隠しファイルを除きたい場合は、ワイルドカード「*」を使います。

# 隠しファイルを除いたカレントディレクトリのファイル一覧を取得
find *

ワイルドカード

ワイルドカードは、ワイルドカードの表現にマッチした、隠しファイル以外のすべてのファイルを表現できるシェルの機能です。

たとえば、以下のように表現すると「*.txt」にマッチした、隠しファイル以外のファイルを意味します。

*.txt

ワイルドカードは、単体では、機能せずに、コマンドの引数として渡された場合に、ファイル名の一覧に展開されます。

# ワイルドカードはファイル名の一覧に展開される
ls *.txt
find *

ファイルやディレクトリを作成・削除するコマンド

ファイルやディレクトリを作成・削除するコマンドです。

ディレクトリを作成する - mkdirコマンド

ディレクトリを作成するにはmkdirコマンドを使用します。

# ディレクトリを作成
mkdir foo

「foo」ディレクトリが作成されます。

「ファイルの作成が成功しました」のようなメッセージは、Linuxでは表示されません。基本的には、Linuxのコマンドは、成功した場合に何も表示せず、エラーの場合に、エラーメッセージを表示するという動作をします。

サブディレクトリも作成 - 「-p」オプション

「-p」オプションを使用すると、サブディレクトリも作成できます。

# サブディレクトリも作成する
mkdir -p foo/bar

ディレクトリを削除する - rmdirコマンド

ディレクトリを削除するにはrmdirコマンドを使用します。

# ディレクトリを削除
rmdir foo

fooディレクトリが削除されます。fooディレクトリが空でない場合は、失敗します。fooディレクトリが空でない場合に、ディレクトリを削除したい場合は、この後で紹介する「rm -r」を使います。

ファイルを作成する - touchコマンド

ファイルを作成するにはtouchコマンドを使用します。

# ファイルを作成する
touch foo.txt

「foo.txt」という空のファイルが作成されます。

ファイルを削除する - rmコマンド

ファイルを削除するには、rmコマンドを使用します。

# ファイルを削除する
rm foo.txt

ディレクトリを削除する

ディレクトリを削除するにはrmコマンドの「-r」オプションを指定します。「-r」の意味はrecursive、再帰的という意味です。

rm -r foo

上記のコマンドを実行すると、ファイルの削除確認が、ファイルのたびに行われます。

強制的に削除するには「-f」オプションを指定します。

rm -rf 

このコマンドは、fooとfoo以下にあるすべてのファイルを削除するので、気をつけて使いましょう。この後で紹介するGitでファイル管理を行っておくと、間違って消した場合も、安心です。

ファイルやディレクトリを移動・コピーするコマンド

ファイルをコピーする - cpコマンド

ファイルをコピーするにはcpコマンドを使用します。

# ファイルをコピーする
cp foo.txt bar.txt

「foo.txt」を「bar.txt」にコピーします。

ディレクトリをコピーする

ディレクトリをコピーするにはcopyコマンドの「-r」オプションを指定します。

cp -r foo bar

「foo」ディレクトリを「bar」ディレクトリにコピーします。

ファイルを移動する - mvコマンド

ファイルを移動するには、mvコマンドを使用します。

# ファイルの移動
mv foo.txt bar.txt

ディレクトリも一種のファイルなので、mvコマンドで移動できます。

# ディレクトリの移動
mv foo bar

また、Linuxでは、ファイルの移動と、名前の変更は、まったく同じ操作として扱うことを覚えておきましょう。

# ファイル名の変更もmvで行う
mv foo.txt bar.txt

ファイルの内容を出力するコマンド

ファイルの内容を出力するコマンドを解説します。

ファイルの内容を出力する

ファイルの内容を出力するにはcatコマンドを使用します。

# ファイルの内容を出力
cat foo.txt

「foo.txt」に記述されている内容が出力されます。

Hello
World!

ファイルの先頭の内容を出力する - headコマンド

ファイルの先頭の内容を出力するにはheadコマンドを使用します。大きなファイルの場合に先頭だけ表示したい場合に便利です。

# ファイルの先頭を表示する
head foo.txt

表示する行数を指定するには「-20」のようにします。

# 表示する行数を指定
head -20 foo.txt

ファイルの末尾の内容を出力する - tailコマンド

ファイルの末尾の内容を出力するにはtailコマンドを使用します。大きなファイルの場合に末尾だけ表示したい場合に便利です。

# ファイルの末尾を表示する
tail foo.txt

表示する行数を指定するには「-20」のようにします。

# 表示する行数を指定
tail -20 foo.txt

ファイル末尾への出力を監視する

tailコマンドの「-f」オプションを使うと、ファイル末尾への出力を監視できます。出力されるたびに、新しい行が表示されます。ログへの出力を見たい場合に便利です。

# ファイル末尾を監視
tail -f foo.txt

ファイルの差分を確認する - diffコマンド

ファイルの差分を確認するにはdiffコマンドを使用します。

diff fruits1.txt fruits2.txt

「fruits1.txt」は以下の内容。

Orange
Banana
Peach

「fruits2.txt」は以下の内容。

Orange
Banana
Melon

この場合は、次のような差分が表示されます。

3c3
< Peach
---
> Melon

ファイルのアーカイブ化と圧縮を行うコマンド

ファイルのアーカイブ化と圧縮を行うコマンドを解説します。

ファイルのアーカイブ化 - tarコマンド

ファイルのアーカイブ化と展開を行うにはtarコマンドを使用します。アーカイブ化というのは、複数のファイルをひとつのファイルにする処理のことです。

ファイルをアーカイブ化する場合は「cf」オプションを使用します。「project」というディレクトリを「project.tar」という一つのファイルにアーカイブ化します。

# アーカイブ化
tar cf project.tar project

アーカイブ化されたファイルを展開するには「xf」オプションを使用します。「project.tar」を展開して「project」というディレクトリを作成します。

# 展開
tar xf project.tar

「z」オプションを使用すると、GZIP形式への圧縮・解凍も同時に行ってくれます。

# アーカイブ化と圧縮を同時に行う
tar cfz project.tar.gz project

# 解凍と展開を同時に行う
tar xfz project.tar.gz

ファイルの圧縮 - gzipコマンド

GZIP形式のファイルへ圧縮するにはgzipコマンドを使用します。「foo」というファイルは「foo.gz」というファイル名で圧縮されます。

gzip foo

ファイルの解凍 - gunzipコマンド

GZIP形式のファイルの解凍を行うにはgunzipコマンドを使用します。「foo.gz」という圧縮されたファイルが解凍され「foo」になります。

gunzip foo.gz

ファイル内容の検索

ファイル内容を検索するコマンドの解説です。

ファイル内容を検索する - grepコマンド

grepコマンドを使用すると、ファイルの内容を検索して必要な行を取り出すことができます。

# books.txtからPerlが含まれる行を取り出す
grep Perl books.txt

出力結果のサンプルです。

Perl Programming
Perl Web Development
Perl & Linux

検索対象のファイル名は、複数指定することができます。

# 検索対象のファイルはbooks.txtとbooks2.txt
grep Perl books.txt books2.txt

大文字・小文字を区別しない検索

大文字・小文字を区別しないで検索するには「-i」オプションを使用します。

# perlが含まれる行を取り出す、大文字・小文字の区別なし
grep -i perl books.txt

出力結果のサンプルです。

Perl Programming
perl command
Perl & Linux

Perlの正規表現を使う

Linuxのgrepコマンドでは「-P」オプションでPerlの正規表現を利用できます。

# grepコマンドでPerlの正規表現を使う
grep -P '^(foo|bar)$' foo.txt

あるディレクトリに含まれるすべてのファイルから検索する

あるディレクトリに含まれるすべてのファイルを再帰的に検索するには「-r」オプションを使用します。

# fooディレクトリ以下にあるすべてのファイルから
# Perlが含まれる行を取り出す
grep -r Perl foo

出力結果のサンプルです。ファイル名とマッチした行の内容が出力されます。

foo/bar/a.txt:Perl Programming
foo/b.txt: Perl Web Development
foo/bar/baz/c.txt: Perl & Linux

「-l」オプションを指定するとファイル名だけを取り出すことができます。

# fooディレクトリ以下にあるすべてのファイルから
# Perlが含まれるファイル一覧を取得
grep -rl Perl foo

ファイル名だけを取り出した場合の出力結果です。

foo/bar/a.txt
foo/b.txt
foo/bar/baz/c.txt

ファイル内容の置換

ファイル内容の置換を行うコマンドを解説します。ファイル内容を置換するにはsedコマンド、あるいは、perlコマンドを使用します。

置換の処理は、ファイル内容を意図しない内容に書き換えてしまう危険があるので、この後の章で解説するGitによるファイル管理を覚えてから実行することをお勧めします。

sedコマンド

sedコマンドを使って「foo.txt」に含まれるすべての「hello」を「bye」に置き換えてみます。

# sedコマンドですべてのhelloをbyeに置換
sed -e 's/hello/bye/g' foo.txt

perlコマンド

perlコマンドを使って「foo.txt」に含まれるすべての「hello」を「bye」に置き換えてみます。

# perlコマンドで複数のファイル名を指定
perl -pi -e 's/hello/bye/g' foo.txt

複数のファイル名を指定することも可能です。

# perlコマンドですべてのhelloをbyeに置換
perl -pi -e 's/hello/bye/g' foo.txt bar.txt

Perlは、プログラミング言語ですが、慣習的にワンライナーと呼ばれる機能を使って、Linuxコマンドのように、実行することができます。Perlワンライナーでは、Perlのすべてのテキスト処理・正規表現の機能が使えます。

Perlワンライナーについては、この後の章で詳しく解説します。

ファイル内容を編集する - テキストエディタ「vi」

viはCUIで利用できるテキストエディタです。viでは、マウスが使えないので、すべての操作をキーボードで行う必要があります。viエディタを使えるようになることは、Linuxを自由に扱えるようになるための難関のひとつです。最低限、viでテキストファイルを編集して、保存して、終了できるようになる方法を、ここでは紹介します。

viでテキストファイルを開く

テキストファイルを開くには次のようにします。存在しない場合は新規に作成されます。

vi テキストファイル名

foo.txtというファイルを開いてみましょう。

vi foo.txt

viが立ち上がります。

viエディタを終了する

ここで困るのは、viエディタを終了する方法がわからないということだと思うので、viエディタを終了する方法を覚えてしまいましょう。以下の手順になります。

Escを押す

Escを押すことでviはコマンドモードというモードに変わります。viには、文字を編集するための入力モードと、コマンドを実行するためのコマンドモードの二つのモードがあり、viエディタを終了するためには、まず最初にEscを押して、コマンドモードにする必要があります。

次に「:q」と入力しましょう。

:q

「:q」と入力してEnterを押してください。viエディタが終了します。qというエディタを終了させるコマンドを実行しています。コロン「:」はコマンドの前に必要になります。

保存しないで強制終了する

編集内容を保存しないで強制終了するためのコマンドも覚えておきましょう。viエディタでは、エディタの内容に変更がある場合は、qコマンドでは終了することができません。

保存しないで強制終了するにはq!コマンドを使います。Escを押してコマンドモードに変更してから以下のように入力してEnterを押します。

:q!

編集内容の保存

編集内容を保存するには「w」コマンドを使用します。Escを押して、コマンドモードにしてから「:w」と打ってEnterを押すと保存できます。

:w

編集内容を保存して終了

もうひとつ保存して終了も覚えておきましょう。wqコマンドを使用します。Escを押して、コマンドモードにしてから「:wq」と打って、Enterを押すと保存して終了できます。

:wq

三つの終了方法を覚えておけば、間違ってviを起動してしまっても、何とか大丈夫でしょう。

  • q - 終了
  • q! - 保存しないで終了
  • wq - 保存して終了

入力モード

viエディタは最初は、コマンドモードで起動します。viではコマンドモードと入力モードという二つのモードがあります。最初はコマンドモードになっているので、文字を入力するには、入力モードにする必要があります。入力モードにするには、iを押します。

i

入力モードになると、文字を入力できます。abcなど、自由に文字を入力してみてください。iを押した後は、自由に編集できることがわかると思います。deleteキーで、文字を削除できます。

編集した内容を保存したいときは、コマンドモードになってからwコマンドを使います。コマンドモードになるにはまずEscキーを押すのでした。Escキーを押しましょう。次に、以下のように入力して、Enterを押すと、保存できます。

:w

編集するときはまたiを押して、入力モードに切り替えます。

保存して終了したいときは、以下のようにします。

:wq

テキストファイルを開いて、入力モードで編集して、保存できるようになりました。ここでは、紙面の都合上解説できませんでしたが、viには、他にも、さまざまな便利な機能があります。

パーミッションを変更するコマンド

パーミッションを変更するコマンドの解説です。

パーミッションを変更 - chmodコマンド

パーミッションを変更するにはchmodコマンドを使用します。

以下は、foo.txtのパーミッションを644に変更するサンプルです。

chmod 644 foo.txt

以下は、fooというディレクトリののパーミッションを755に変更するサンプルです。

chmod 755 foo

パーミッションとは?

パーミッションについて解説します。

3桁の数字は、左から順に「所有者ユーザーのパーミッション」「所有者グループのパーミッション」「ゲストのパーミッション」を8進数で表現したものです。

8進数のパーミッションは、二進数に変換すると、意味を理解しやすいです。

8進数の6は、2進数で「110」(4 + 2 + 0)です。

8進数の4は、2進数で「100」(4 + 0 + 0)です。

8進数の7は、2進数で「111」(4 + 2 + 1)です。

8進数の5は、2進数で「101」(4 + 0 + 1)です。

2進数したときの3桁は、左から「読込権限」「書込権限」「実行権限」を意味します。

実行権限というのは、ファイルを実行ファイルとして実行できるようにするための権限です。また、ディレクトリを読み書きするためには、ディレクトリに実行権限が必要です。実行権限は、実行ファイルとディレクトリにつけると覚えておきましょう。

例として、644というパーミッションは「所有者ユーザー(u)は読込権限(r)と書込権限(w)」「所有者グループ(g)は読込権限(r)」「ゲスト(o)は読込権限(r)」を持つことを意味します。

# 8進数
644

# 2進数
u        g        o
r w x    r w x    r w x
1 1 0    1 0 0    1 0 0

例として、755というパーミッションは「所有者ユーザー(u)は読込権限(r)と書込権限(w)と実行権限(x)」「所有者グループ(g)は読込権限(r)と実行権限(x)」「ゲスト(o)は読込権限(r)と実行権限(x)」を持つことを意味します。

# 8進数
755

# 2進数
u        g        o
r w x    r w x    r w x
1 1 1    1 0 1    1 0 1

所有者ユーザーを変更する - chownコマンド

所有者ユーザーを変更するには、chownコマンドを使用します。

chown kimoto foo.txt

「所有者ユーザー」と「所有者グループ」を変更するには次のように書きます。

# 所有者ユーザーと所有者グループを変更
chown kimoto:webapp foo.txt

所有者グループを変更する - chgrpコマンド

所有者グループを変更するには、chgrpコマンドを使用します。

# 所有者グループを変更する
chgrp webapp foo.txt

シンボリックリンクを作成するコマンド

シンボリックリンクの作成について解説します。

シンボリックリンクを作成する - lnコマンド

シンボリックリンクを作成するにはlnコマンドを使用します。シンボリックリンクは、対象のファイル名に別名をつけることができる機能です。

# /usr/binをmybinでアクセスできるようにする
ln -s /usr/bin mybin

ディスク容量の確認

ディスク容量を確認する - dfコマンド

ディスク容量を確認するにはdfコマンドを使用します。サイズの単位はバイトです。

# ディスク容量の確認
df

dfコマンドの出力サンプルです。

Filesystem     1K-blocks    Used Available Use% Mounted on
udev              998332       0    998332   0% /dev
tmpfs             204096     648    203448   1% /run
/dev/vda3      202226664 8160052 183774432   5% /

「-h」オプションで、ファイルサイズに単位をつけて表示できます。

# ディスク容量に単位をつける
df -h

出力結果です。単位がついています。

Filesystem      Size  Used Avail Use% Mounted on
udev            975M     0  975M   0% /dev
tmpfs           200M  648K  199M   1% /run
/dev/vda3       193G  7.8G  176G   5% /

ディレクトリ容量を確認する - duコマンド

ディレクトリ容量を確認するにはduコマンドを使用します。サイズの単位はバイトです。

du .

duコマンドの出力結果のサンプルです。

5000    ./templates/blog
24      ./templates/common
20      ./templates/static/css
192     ./templates/static/js/google-code-prettify
288     ./templates/static/js
984     ./templates/static/examples/pdf
988     ./templates/static/examples
20      ./templates/static/images/ad
40      ./templates/static/images/book
64      ./templates/static/images/bottom
32      ./templates/static/images/perlbanjo
184     ./templates/static/images/strawberry_perl
32      ./templates/static/images/commandprompt
96      ./templates/static/images/active_perl
752     ./templates/static/images
2164    ./templates/static
7212    ./templates

容量の大きい順に並べ替えるにはsortコマンドとheadコマンドをパイプでつなげます。sortコマンドの「-n」オプションは、数値の大きさで並べ替え、「-r」オプションは、降順を意味しています。

# 容量の多い順に並べ替えて30位まで表示
du . | sort -nr | head -30

出力結果のサンプルです。

129096  .
96944   ./public
84172   ./public/.git
83896   ./public/.git/objects
46048   ./public/.git/objects/pack
24856   ./.git
24392   ./.git/objects
10432   ./public/blog
7376    ./.git/objects/pack
7212    ./templates

シェルスクリプトの実行方法

シェルスクリプトの実行方法を簡単に解説します。ここでは、bashと呼ばれる種類のシェルスクリプトについて解説します。シェルスクリプトを記述すると複数のコマンドを、一度に実行できます。

シェルスクリプトでは、条件分岐や繰り返しなどの文法を記述することができますが、この書籍で扱うのは、シェルスクリプトの実行方法、シェバンを記述して実行ファイルとして実行する方法です。

シェルスクリプトの実行

シェルスクリプトを記述してみます。ファイル名は「echo3.bash」です。echoコマンドを三回実行しています。

echo "Hi"

echo "Hello"

echo "World!"

シェルスクリプトを「bash」コマンドを実行してみます。

bash echo3.bash

出力結果です。echoコマンドが三回実行されています。

Hi
Hello
World!

シェルスクリプトを実行ファイルとして実行

bashコマンドなしで、プログラムを実行できるようにしてみましょう。この方法を覚えると、Linuxコマンドを実装できます。

シェバンの記述

方法は、1行目にシェバンと呼ばれる1行を追加するだけです。bashコマンドで実行する場合は、ソースコードの改行コードを気にする必要はありませんでしたが、シェバンを使って、コマンドとしてプログラムを実行する場合は、ソースコードの改行コードはLFになっている必要があるので注意しましょう。

シェバンは「#!」で1行目から始まります。

その後に、bashコマンドを記述します。「/usr/bin/env」コマンドは、その環境における指定したコマンドを実行してくれます。「/usr/bin/env bash」と書くことで、その環境におけるbashを実行してくれます。

bashコマンドなしで実行できる「echo3」です。コマンドらしくみせるために、拡張子もなくしてみました。

#!/usr/bin/env bash

echo "Hi"

echo "Hello"

echo "World!"

実行権限の追加

次に、chmodコマンドを使って、プログラムに実行権限を追加します。実行権限があれば単独のコマンドとして実行できます。

chmod +x echo3

lsコマンドで、パーミッションを確認してみましょう。

-rwxrwxr-x 1 kimoto kimoto  148 Oct  1 17:17 echo3

「x」という実行権限が追加されています。

コマンドの実行

コマンドを実行してみましょう。コマンドを実行するためには、PATH環境変数で指定されているディレクトリにコマンドが存在するか、「/」が含まれている必要があります。絶対パスで指定する場合は、問題ないのですが、カレントディレクトリのコマンドを実行するには、以下のように記述します。

# コマンドを実行
./echo3

出力結果です。bashコマンドの指定なしで、コマンドが実行できました。

Hi
Hello
World!

環境変数

環境変数と環境変数を表示・設定するコマンドについて解説します。

環境変数とは

環境変数とは、簡単に書くと、OSが持っている変数のことです。Linuxでは、環境変数は、ユーザー単位で設定することができます。また、プログラムを実行する場合に、一時的に変更することもできます。

環境変数を表示する - envコマンド

# 環境変数を表示する
env

環境変数の出力結果のサンプルです。環境変数は「変数名=値」という形で記録されています。

PERLBREW_SHELLRC_VERSION=0.88
MANPATH=/home/kimoto/perl5/perlbrew/perls/perl-5.28.0/man:/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man
PERLBREW_VERSION=0.88
HOSTNAME=www7402u.sakura.ne.jp
PERLBREW_PERL=perl-5.28.0
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=119.243.98.202 48719 22
OLDPWD=/home/kimoto/labo
SSH_TTY=/dev/pts/0
USER=kimoto
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
PERLBREW_ROOT=/home/kimoto/perl5/perlbrew
MAIL=/var/spool/mail/kimoto
PATH=/home/kimoto/perl5/perlbrew/bin:/home/kimoto/perl5/perlbrew/perls/perl-5.28.0/bin:/usr/lib/oracle/11.2/client64/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/kimoto/bin:/sbin:/usr/sbin:/usr/local/sbin
C_INCLUDE_PATH=/usr/include/oracle/11.2/client64
INPUTRC=/etc/inputrc
PWD=/home/kimoto/labo/perlzemilinux
LANG=en_US.UTF-8
PERLBREW_HOME=/home/kimoto/.perlbrew
SHLVL=1
HOME=/home/kimoto
PERLBREW_MANPATH=/home/kimoto/perl5/perlbrew/perls/perl-5.28.0/man
PERLBREW_PATH=/home/kimoto/perl5/perlbrew/bin:/home/kimoto/perl5/perlbrew/perls/perl-5.28.0/bin
LOGNAME=kimoto
CVS_RSH=ssh
SSH_CONNECTION=119.243.98.202 48719 59.106.185.196 22
SPVM_TEST_ENABLE_WARNINGS=1
LESSOPEN=|/usr/bin/lesspipe.sh %s
ORACLE_HOME=/usr/lib/oracle/11.2/client64
G_BROKEN_FILENAMES=1
_=/bin/env

環境変数を設定する

環境変数を設定する場合は、Bシェル系(sh, bash, ksh)呼ばれるシェルと、Cシェル系(csh)と呼ばれるシェルで設定方法に違いがあります。Linuxの場合は、Bシェル系であると考えましょう。UNIXのひとつである、FreeBSDはCシェル系(csh)です。環境変数名は、大文字で記述するのが、慣習となっています。

Bシェル系

# Bシェル系
export FOO=3

Cシェル系

# Cシェル系
setenv FOO 3

業務に役立つPerl

関連情報