Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.6

13 シェルの基本 Edit source

Linux で様々な作業を行う際、ほとんどの作業はコマンドラインインタプリタ (シェル) を使用せずに作業ができてしまいます。 Linux システムが起動すると、通常はログイン処理を促し、それ以降の作業を行うグラフィカルなユーザインターフェイスが表示されます。Linux でのグラフィカルなユーザインターフェイスは、 KDE や GNOME など、インストール時に選択したデスクトップ環境を一般的に使用します。

しかしながら、グラフィカルなインターフェイスが利用できなくなる問題に引っかかってしまったような場合などに備えて、シェルの使い方の基本を覚えておくと便利です。たとえば X Window System の問題が発生したような場合、シェルの知識を持っておかないと、コマンドの入力 1 つにしても恐る恐る実行することになってしまいます。また、問題が発生していなくても、場合によっては、コマンドラインでやってしまったほうがずっと手っ取り早い作業もあります。

Unix や Linux の場合、動作やコマンド体系が少しずつ異なる複数のシェルが用意されています。 openSUSE® Leap での既定のシェルは、 Bash (GNU Bourne-Again Shell) と呼ばれているシェルです。

下記の章では、 bash シェルのごく基本的な使い方と、コマンドラインを利用した基本的な作業のやり方について説明しています。シェルについてさらに詳しく学びたい場合や、既に パワーユーザ であるとご自身でお考えの方は、 第14章 「bash と bash スクリプト をお読みください。

13.1 シェルの起動 Edit source

基本的には、お使いのコンピュータを起動してグラフィカルユーザインターフェイスが表示されている状況からは、下記のいずれかの方法でシェルを起動することができます:

  • グラフィカルなユーザインターフェイスとは別の画面でシェルを起動する

  • グラフィカルなユーザインターフェイス でシェルを起動する

前者の方式はいつでも利用できる仕組みではありますが、既に KDE や GNOME などのデスクトップ環境にログインしている場合は、後者のほうが都合がよいでしょう。いずれの方法を選択した場合も、シェルとグラフィカルユーザインターフェイスとの間を切り替えることができます。

前者の方法でシェルを起動するには、グラフィカルユーザインターフェイスを終了するため、 CtrlAltF2 を押します。するとグラフィカルな表示が消え、テキストベースのログインプロンプトが表示されるようになります。ここからユーザ名を入力して Enter を押すと、パスワードの入力を求められますので、パスワードを入力して再度 Enter を押します。すると、下記のようなプロンプトが表示されます:

 1   2   3
tux@linux:~>

1

ログインしたユーザ名を表します。

2

コンピュータのホスト名を表します。

3

現在の (カレント) ディレクトリのパスを表します。ログインしてすぐの状態では、カレントディレクトリはホームディレクトリになっています。ホームディレクトリは~ (チルダ) で表されます。

ネットワーク上離れた場所からログインしている場合でも、上記で出力されるホスト名はログイン先のものになりますので、どこで作業を行っているのかが明らかになるようになっています。

カーソルがこのプロンプトの後ろに表示されていれば、お使いのコンピュータシステムでコマンドを入力できる状態にあることになります。たとえば ls -l のように入力すると、詳細な出力形式でカレントディレクトリの内容を表示することができます。なお、シェルの使用を終了し、元の画面に戻りたい場合は、 exit と入力して Enter を押してください。その後、 AltF7 を押すと、元のグラフィカルなユーザインターフェイスに戻ることができます。デスクトップも動作中のアプリケーションも、元のままになっているはずです。

GNOME や KDE のデスクトップ環境にログイン済みで、デスクトップ内に端末 (シェル) ウインドウを表示させたい場合は、 AltF2 を押して konsole (KDE の場合) もしくは gnome-terminal (GNOME の場合) を入力します。すると、デスクトップ内に端末ウインドウが表示されるようになります。既にデスクトップにログインしているため、上述のものと同じシステム周りの情報が表示されます。ここからコマンドを入力して実行すると、デスクトップと同時並行で処理が動作するようになります。デスクトップ内の他のアプリケーションに切り替えたい場合は、単にそれぞれのアプリケーションのウインドウをマウスで選択するか、パネル内のタスクバーなどで選択を行ってください。端末ウインドウを閉じるには、 AltF4 を押します。

13.2 コマンドの入力 Edit source

シェル内にプロンプトが表示されれば、コマンドを受け取って実行することができることになります。コマンドには複数の要素が存在しています。最初はコマンドそれ自身で、その後ろにパラメータやオプションが続きます。また、コマンドやオプションは、 , , Home , End , <— (バックスペース), Del , Space (スペース) の各キーで編集を行うことができます。入力を間違ってしまったりした場合は、これらのキーで編集作業を行うことができます。コマンドは Enter が押されるまで、実行はされません。

重要
重要: 便りが無いのは良い便り

シェルは寡黙です。グラフィカルなユーザインターフェイスとは異なり、コマンドが実行した際にも確認メッセージは表示しないのが通常です。何らかの問題やエラーが発生した場合や、コマンドの実行時に特定のオプションを指定して出力するようにした場合にのみ、メッセージが表示されます。

なお、削除をするにあたっては、特に注意する必要があります。たとえば rm というコマンドはファイルを削除するためのコマンドですが、特に何もオプションを指定しない限り確認メッセージの類は表示されず、そのまま黙って削除を実行してしまいます。

13.2.1 オプション無しでのコマンドの使用 Edit source

13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 では、最も基本的なコマンドである ls を使用しました。このコマンドはディレクトリの内容を表示するためのコマンドで、オプションを指定しても、指定しなくても実行することができます。 ls コマンドをオプション無しで実行すると、現在のディレクトリに対する内容を簡潔に出力します:

> ls
bin Desktop Documents public_html tux.txt
> 

Linux では、ファイルの拡張子は任意で、必須ではありません。上記の例では .txt という拡張子が付けられたファイルがありますが、拡張子を指定しなくてもかまいません。このような仕組みであることから、 ls の出力ではファイルとフォルダの区別が難しくなっていますが、既定の bash シェルでは色を付けて出力するようになっています (ディレクトリは青色、ファイルは黒色) ので、ここからファイルとフォルダを区別することができます。

13.2.2 オプション付きでのコマンドの使用 Edit source

ディレクトリの内容をより詳しく表示するには、 ls に文字列でオプションを指定するのが適切です。オプションはコマンドの動作を修正するための仕組みで、要件にあわせた動作を行うためのものです。コマンドとオプションの間はスペースで区切り、オプションの場合は通常ハイフンで始まります。たとえば ls -l (long (長い) の意味) を実行すると、同じディレクトリをずっと詳しく表示します:

> ls -l
drwxr-xr-x 1 tux users     48 2015-06-23 16:08 bin
drwx---r-- 1 tux users  53279 2015-06-21 13:16 Desktop
drwx------ 1 tux users    280 2015-06-23 16:08 Documents
drwxr-xr-x 1 tux users  70733 2015-06-21 09:35 public_html
-rw-r--r-- 1 tux users  47896 2015-06-21 09:46 tux.txt
> 

この出力には、各オブジェクトに対する情報が書かれています:

drwxr-xr-x1 12 tux3 users4 485 2006-06-23 16:086 bin7

1

オブジェクトの種類とアクセス権を示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。

2

このファイルに対するハードリンク数を示しています。

3

ファイルやディレクトリの所有者を示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。

4

ファイルやディレクトリに割り当てられたグループを示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。

5

バイト単位でのファイルサイズを示しています。

6

最終変更日時を示しています。

7

オブジェクトの名前を示しています。

通常は、最初のオプションに対してだけハイフンを付け、それ以降のオプションはスペースを入れずに入力することで、複数のオプションをまとめて記述することができます。たとえばディレクトリ内の全てのファイルを長い形式で出力させたい場合は、 -l-a (all (全て) の意味) を組み合わせて ls コマンドに指定し、 ls -la のようにして実行します。これでディレクトリ内の隠しファイル (ドットで始まるファイル、たとえば .hiddenfile など) をあわせて表示するようになります。

ls で出力される内容は、ファイル名のアルファベット順に並び替えられます。ですが、グラフィカルなファイルマネージャと同様に、 ls -l で出力される内容を、日付や拡張子、ファイルサイズなどで並び替えることができます:

  • 日時で並べ替えるには、 ls -lt のように指定して実行します (新しいものを先に表示します) 。

  • 拡張子で並べ替えるには、 ls -lx のように指定して実行します (拡張子の無いものが先に表示されます) 。

  • ファイルサイズで並べ替えるには、 ls -lS のように指定して実行します (大きいものが先に表示されます) 。

逆順で並び替えるには、お使いの ls コマンドに -r オプションを追加します。たとえば ls -lr のように実行すると、ディレクトリの内容一覧をアルファベットの逆順で出力します。また、 ls -ltr を実行すると古いファイルを先に表示することができます。このほかにも、 ls には多数の便利なオプションが用意されています。以下の章では、それらの調べ方を示しています。

13.2.3 bash ショートカットキー Edit source

コマンドを入力して実行していると、シェルの画面がコマンドとその出力で埋め尽くされることになります。下記の表では、シェル内のナビゲーションと編集に役立つキーを示しています。

ショートカットキー

機能

CtrlL

画面を消去し、現在の行をページの冒頭に移動します。

CtrlC

現在実行中のコマンドを中止します。

CtrlU

カーソルのある位置から行頭までを削除します。

CtrlK

カーソルのある位置から行末までを削除します。

CtrlD

シェルのセッションを閉じます。

,

過去に実行したコマンドの履歴を参照します。

13.3 ヘルプについて Edit source

コマンドの名前は覚えていたものの、オプションやコマンドの書式を忘れてしまった場合は、下記のいずれかの方法で調べることができます:

--help / -h オプション

特定のコマンドに対してオプションを確認したいだけであれば、コマンドの後ろにスペースで区切って --help と指定してください。 --help オプションは多数のコマンドに実装されています。たとえば ls --help のように入力すると、 ls コマンドに対する全てのオプションが表示されます。

マニュアルページ

様々なコマンドに対して詳しく学びたい場合は、マニュアルページを読むこともできます。マニュアルページには、コマンドの動作に関する簡単な説明も付属しています。マニュアルページは man コマンドでアクセスすることができます。マニュアルページを読みたいコマンドを、スペースで区切って指定してください。たとえば man ls のように実行します。

マニュアルページはシェル内に直接表示されます。マニュアルページ内を移動するには、下記のキーをお使いください:

  • 単純な上下移動: Page ↑ , Page ↓

  • マニュアルページの冒頭および末尾への移動: Home , End

  • マニュアルページの終了: Q

man コマンドそのものについても、マニュアルページで調べることができます。詳しくは man man と入力してください。

info ページ

info ページは、特定のコマンドに対してより詳しい説明を記述しているものです。特定のコマンドに対する info ページを読むには、 info に続いてコマンド名を指定してください (例: info ls) 。

info ページはシェル内に直接表示されます。 info ページ内を移動するには、下記のキーをお使いください:

  • セクション (ノード) 内の前もしくは後ろへの移動: Space , <—

  • 単純な上下移動: Page ↑ , Page ↓

  • info ページの終了: Q

なお、全てのコマンドに対してマニュアルページや info ページが用意されているとは限らないことに注意してください。両方が用意されているもの (主なコマンド類) のほか、マニュアルページと info ページのいずれかが用意されているものや、どちらも用意されていないものもあります。

13.4 ファイルやディレクトリの作業 Edit source

ある特定のファイルやディレクトリを指定する際、そのファイルやディレクトリへの経路 (パス) を指定する必要があります。パスの指定方法には、下記の 2 種類があります:

絶対パス

ルートディレクトリ ( / ) から、そのファイルやディレクトリに至る経路 (パス) 全体を表す方法です。たとえば、ホームディレクトリ内の Documents というディレクトリにある file.txt というファイルの絶対パスは、下記のようになります:

/home/tux/Documents/file.txt
相対パス

現在の作業ディレクトリ (カレントディレクトリ) から、そのファイルやディレクトリに至る経路 (パス) を表す方法です。カレントディレクトリが /home/tux であった場合、ホームディレクトリ内の Documents 内にある file.txt ファイルの相対パスは、下記のようになります:

Documents/file.txt

たとえばカレントディレクトリが /home/tux/Music であった場合は、ホームディレクトリにいったん戻るための経路を記述しなければ、上と同じファイルを指定することができません。この場合は、.. を指定して、一階層上のディレクトリに移動してから、残りのディレクトリやファイルの経路を指定します:

../Documents/file.txt

パスの表記では複数のディレクトリ名とファイル名を組み合わせますが、それぞれはスラッシュで区切ります。また、絶対パスは必ずスラッシュで始まりますが、相対パスはスラッシュ以外の文字で始まります。また、相対パスの場合、 1 つまたは 2 つのドットを使用することがあります。

コマンドを入力する場合、パスはどちらの方法で指定してもかまいません。いずれか入力が楽なほうをお選びください。どちらを入力しても結果は同じです。また、カレントディレクトリを変更するには、 cd コマンドを使用してパスを指定します。

注記
注記: ファイル名やディレクトリ名における空白 (スペース) の処理について

ファイル名やディレクトリ名に空白を含む場合、空白の前にバックスラッシュ (フォントによっては円マークとして描画される場合があります) ( \ ) を付けてスペースを避ける (エスケープ) 処理をするか、もしくはパス全体を引用符で括って指定します。このように指定しないと、 bash はMy Documents のようなファイル名を 2 つのファイル名もしくはディレクトリ名であるものと解釈してしまい、この例では MyDocuments の 2 つのパスになってしまいます。

なお、パスを指定する際は、下記の ショートカット を利用して、入力を省略することができます:

  • チルダ記号 ( ~ ) はホームディレクトリのショートカットです。たとえば、お使いのホームディレクトリの内容を一覧表示したい場合は、 ls ~ のように指定することができます。また、他のユーザのホームディレクトリを指定する場合は、 ls ~ユーザ名 のように入力します (このコマンドは、そのユーザのホームディレクトリを見る権限が与えられている場合にのみ出力することができます。詳しくは 13.6項 「ファイルのアクセス権」 をお読みください) 。たとえば ls ~tux のようなコマンドを実行すると、 tux というユーザ名のホームディレクトリの内容を一覧表示することになります。この仕組みは、たとえばネットワーク環境などで /home 以外のディレクトリ内にホームディレクトリが存在するような場合に、便利なショートカットとなります。

    なお、カレントディレクトリがどこであっても、ホームディレクトリに戻りたい場合は cd ~ と入力するか、もしくは単にオプション無しで cd と入力して実行してください。

  • 相対パスで指定している場合は、カレントディレクトリはドット 1 つ ( . ) で指定することができます。これは特に cp (ファイルやディレクトリのコピー) や mv (ファイルやディレクトリの移動) 等のコマンドを実行する際に便利です。

  • また、ドットを 2 つ並べる ( .. ) と、ツリー構造内で 1 段上位のディレクトリ (ルートディレクトリに 1 段だけ近いほうのディレクトリ。親ディレクトリとも呼びます) を表すことができます。たとえばカレントディレクトリの親ディレクトリに移動するには cd .. と入力して実行しますし、 2 段上位のディレクトリに移動したい場合は、 cd ../.. 等のように指定して実行します。

知識をより深めるため、下記には様々な例を示します。 bash を利用すれば、ファイルやディレクトリに対する様々な基本作業を行うことができます。

13.4.1 ファイルやディレクトリの作業例 Edit source

ここでは、ホームディレクトリ内のどこかにあるファイルを、 /tmp のサブディレクトリにコピーする流れを示しています。もちろん、コピー先のディレクトリも流れの中で作成するものとします。

手順 13.1: ディレクトリの作成と移動

カレントディレクトリがホームディレクトリであるものとして、まずは /tmp 内にサブ (1 段下位の/子の) ディレクトリを作成します:

  1. 下記のように実行します:

    > mkdir /tmp/test

    mkdirmake directory (ディレクトリの作成) の意味です。このコマンドを実行すると、新しい test という名前のディレクトリを /tmp ディレクトリ内に作成します。この場合、 test ディレクトリを作成する際に使用したパスは絶対パスです。

  2. 作成されたディレクトリを確認するには、下記のように実行します:

    > ls -l /tmp

    新しく作成した test ディレクトリが、/tmp ディレクトリ内に作成されているはずです。

  3. 新しく作成したディレクトリに移動するには、下記のように実行します:

    > cd /tmp/test
手順 13.2: ファイルの作成とコピー

次に、ホームディレクトリ内のサブディレクトリに新しいファイルを作成し、これを /tmp/test 内にコピーします。このとき、相対パスを利用して指定を行います。

重要
重要: 既存のファイルへの上書き

ファイルのコピーや移動、名前変更を行う前に、宛先となるディレクトリ内に同じ名前のファイルが存在していないかどうかをご確認ください。存在している場合は、別のファイル名でコピーや移動、名前変更を行うか、もしくは cpmv などのコマンドに -i のようなオプションを追加してください。これにより、既存のファイルに上書きする際に、確認プロンプトが表示されるようになります。オプションを設定しないと、 bash は何も確認を行うことなくファイルを上書きしてしまいます。

  1. まずはホームディレクトリの内容を一覧表示します。下記のように入力して実行します:

    > ls -l ~

    まずは新しいディレクトリ Documents を、ホームディレクトリ内に作成します:

    > mkdir ~/Documents
  2. 続いて、作成した Documents ディレクトリ内に myfile.txt という空のファイルを作成します:

    > touch ~/Documents/myfile.txt

    通常、 touch コマンドは、既存のファイルに対して最終更新日時とアクセス日時を更新させるためのコマンドです。ですが、存在しないファイルに対して touch コマンドを実行すると、新しくファイルを作成する処理を行います。

  3. 下記のように実行します:

    > ls -l ~/Documents

    新しく作成したファイルが、一覧内に現れるようになります。

  4. 新しく作成したファイルをコピーするには、下記のように実行します:

    > cp ~/Documents/myfile.txt .

    なお、末尾のドットを忘れずに入力してください。

    このコマンドは bash に対して、ホームディレクトリ内の Documents サブディレクトリにある myfile.txt を、カレントディレクトリに名前を変更せずにコピーするよう指示しているものです。

  5. 下記のように入力すると、結果を確認することができます:

    > ls -l

    /tmp/test の一覧の中に、 myfile.txt が現れるようになっているはずです。

手順 13.3: ファイルやディレクトリの名前変更と削除

ここでは、 myfile.txttuxfile.txt という名前に変更する作業を行います。最後はそのファイルと、 test サブディレクトリを削除します。

  1. ファイルの名前を変更するには、下記のように実行します:

    > mv myfile.txt tuxfile.txt
  2. 結果を確認するには、下記のように実行します:

    > ls -l

    内容の一覧には、 myfile.txt ではなく tuxfile.txt が現れているはずです。

    mvmove (移動) の意味で、 2 つのパラメータを指定します: 1 つめは移動元の指定で、 2 つめは移動先の指定です。また、 mv には 2 種類の動作があります:

    • ファイルやディレクトリの名前変更

    • ファイルやディレクトリの新しい場所への移動

    • 上記 2 つの一括実行

  3. 最後に、ファイルが不要であるという結論に至ったら、下記のように実行することで削除を行うことができます:

    > rm tuxfile.txt

    bash は削除の際、何も確認メッセージを表示しません。

  4. cd .. のように実行すると、 1 階層上のディレクトリに移動することができます。移動の結果は、下記を実行すると確認することができます:

    > ls -l test

    上記を実行して、 test ディレクトリ内に何も残っていないことを確認します。

  5. 何も残っていなければ、下記を実行することで test ディレクトリを削除することができます:

    > rmdir test

13.5 root での作業 Edit source

root はスーパーユーザとも呼ばれ、システムの全てに対してアクセスし、様々な管理作業を実行する権限を持っています。システムに対する変更は無制限に行うことができるほか、全てのファイルに対するアクセス権も持っています。そのため、様々な管理作業のほか、 YaST のような管理を行うアプリケーションを実行する場合には、 root の権限が必要となります。

13.5.1 su の使用 Edit source

シェル内で一時的に root になるには、下記の手順で行います:

  1. su コマンドを実行します。これで root のパスワードを尋ねられます。

  2. パスワードを入力します。 root のパスワードが誤っていると、シェルはその旨を表すメッセージを出力します。この場合は、パスワードの再入力は求められず、 su コマンドの入力からやり直す必要があります。パスワードの入力が正しい場合、プロンプトが変化してハッシュ記号 # が表示されるようになります。これにより、 root であることがわかるようになっています。

  3. あとは必要な作業を行います。たとえばファイルの所有権を変更するような作業は、 root しか行うことができません。たとえば下記のように実行します:

    > chown wilber kde_quick.xml
  4. root での作業が終わったら、通常の一般ユーザに戻ります。戻るには、下記のように実行します:

    > exit

    プロンプトからハッシュ記号が消え、 一般の ユーザに戻ったことがわかります。

13.5.2 sudo の使用 Edit source

su 以外の方法としては、 sudo というコマンドもあります。これは superuser do (スーパーユーザで何かを行う の意味) の略で、 root のみが実施できる作業を、 su と同様に行うことができるコマンドです。 sudo の場合は、 su と異なり、管理者側であらかじめ設定した特定のユーザに対して、特定のコマンドのみを実行できるように設定することができます。また、システム側の設定に依存しますが、 sudo では一般のユーザが root になるにあたって、自分自身の (root のものではない) パスワード入力で root のコマンドを実行するように設定することもできます。さらに sudo では、パスワードの入力時に チケット を発行する仕組みになっていて、一定の時間 (通常は数分程度) が経過するまでは再度パスワード入力を求めないようにもなっています。なお openSUSE では、既定で root のパスワードの入力を求めるようになっています (システム管理者が設定を変更した場合を除きます) 。

一般ユーザにとっては、アカウントを切り替える (root になって作業を行い、終わったら一般ユーザに戻る) 手間を省くことができる点がメリットとなります。たとえばファイルの所有権を sudo で変更する場合、コマンドは 3 つではなく 1 つだけで済みます:

> sudo chown wilber kde_quick.xml

尋ねられたとおりパスワードの入力を行うと、コマンドが実行されます。なお、実行直後に root での作業を行っても、パスワードの再入力は求められません。これはチケットが発行されていることによるもので、有効期限が切れるまでの間はパスワードの再入力無しでコマンドを実行することができるためです。ただし、一定の時間が経過すると、パスワードの再入力が必要となります。このような仕組みにより、一般ユーザが root になって作業を行っていて、一般ユーザに戻るのを忘れてマシンを放置してしまったような場合、悪意のあるユーザが横からその権限を奪取してしまうような問題を防ぐことができます。

13.6 ファイルのアクセス権 Edit source

Linux では、ファイルやディレクトリ、プロセスなどは、作成したユーザに属するものとして扱われます。このルールには例外もありますが、例外については 第19章 「Linux でのアクセス制御リスト をお読みください。また、ファイルやディレクトリに対して割り当てられているグループは、そのユーザがそれらを作成する際、ユーザが属していたプライマリグループに設定されます。

新しいファイルやディレクトリを作成する際、それらに対するアクセス権 (パーミッション) は、事前に定義された方式で設定されます。ファイルやディレクトリの所有者である場合、それらに対するアクセス権を変更することができます。たとえば他のユーザから機密情報を読み取られたくない場合、同じグループ内のユーザや他のユーザに対して、読み込みや書き込み、実行などの制限を設定することができます。なお、 root については例外で、このユーザであればファイルやフォルダの所有権を自由に変更することができます。

13.6.1 ユーザ/グループ/その他に対するパーミッション Edit source

Linux システムでは、ファイルやフォルダなどに対して 3 種類のパーミッションセット (読み込み, 書き込み, 実行) が定義されています。また、ユーザの種類にも 3 種類 (所有者, グループ, その他のユーザ) が用意されています。

下記の例はシェル内で ls -l を実行した場合の例です。このコマンドは、ディレクトリの内容を一覧表示するコマンドで、ディレクトリ内の詳細な情報も表示することができるものです。

例 13.1: ファイルやフォルダに対するアクセス権
-rw-r----- 1 tux users      0  6月 23 16:08 checklist.txt
-rw-r--r-- 1 tux users  53279  6月 21 13:16 gnome_quick.xml
-rw-rw---- 1 tux users      0  6月 23 16:08 index.htm
-rw-r--r-- 1 tux users  70733  6月 21 09:35 kde-start.xml
-rw-r--r-- 1 tux users  47896  6月 21 09:46 kde_quick.xml
drwxr-xr-x 2 tux users     48  6月 23 16:09 local
-rwxr--r-- 1 tux users 624398  6月 23 15:43 tux.sh

左から 3 列目に書かれているのが所有者で、この例では tux になっています。左から 4 列目がグループで、この例では tux がプライマリグループとして属する users になっています。アクセス権は一番左の列に書かれていますので、ここに注目します。上記の例で、 kde-start.xml のアクセス権をご覧ください:

種類

ユーザに対するパーミッション

グループに対するパーミッション

その他に対するパーミッション

-

rw-

r--

r--

一番左の列は、最初の 1 文字に続いて、 3 つのブロックに分割できる 9 文字が書かれています。最初の 1 文字はオブジェクトの種類を示すもので、この場合はハイフン ( ) であるため、 kde-start.xml がファイルであることがわかります。ここの部分が d になっている場合は、そのオブジェクトがディレクトリであることになります。たとえば 例13.1「ファイルやフォルダに対するアクセス権」local ディレクトリがそれにあたります。

続く 3 つのブロックは、それぞれ左から所有者、グループ、その他に対するアクセス権を示しています。各ブロックはそれぞれ左から読み込み許可 ( r ) 、書き込み許可 ( w ) 、実行許可 ( x ) の 3 文字が書かれます。アクセス権がない場合は、 - が書かれます。たとえば kde-start.xml の例では、所有者は読み込みと書き込みの両方ができるものの、実行の許可が無いことになります。また、 users グループとその他のユーザには読み込みの許可のみで、書き込みと実行の許可が無いことになります。

13.6.2 ファイルとディレクトリ Edit source

アクセス許可の効果は、そのオブジェクトの種類 (ファイル/ディレクトリ) によって少し異なります。下記の表では、アクセス許可の効果を示しています:

表 13.1: ファイルとディレクトリに対するアクセス許可

アクセス権

ファイルの場合

ディレクトリの場合

読み込み (r)

対象のユーザは、ファイルを開いて読み込むことができるようになります。

対象のユーザは、ディレクトリの内容を閲覧できるようになります。このアクセス許可がないと、ユーザは ls -l などでディレクトリの内容の一覧を取得することができません。しかしながら、ディレクトリに対して実行のアクセス権が設定されていて、ファイル名が分かっていれば、そのファイルにアクセスすることはできてしまいます。

書き込み (w)

対象のユーザは、ファイルの内容を変更することができます。データの追加や削除だけでなく、ファイルの内容を消去することもできます。ただし、ファイルの存在するディレクトリにおいて、対象のユーザが書き込み権限を持たない限り、ファイル自身を削除することはできません。

対象のユーザは、そのディレクトリ内にファイルを作成したり、名前変更や削除を行ったりすることができるようになります。

実行 (x)

対象のユーザはファイルを実行することができます。このアクセス許可は、プログラムやシェルスクリプトなどの場合に意味のあるものであって、テキストファイルなどでは意味がありません。また、プログラムを直接実行する場合は、対象のユーザが読み込み権限を持たなくても、実行することはできてしまいます。ただし、シェルスクリプトや Perl スクリプトなどのプログラムの場合は、読み込んで解釈する必要があることから、同時に読み込み権限も必要となります。

対象のユーザは、そのディレクトリに移動してファイルを実行することができます。そのディレクトリに対して読み込み権限がない場合、ディレクトリ内のファイルの一覧を取得することはできませんが、ファイル名が分かっていればアクセスすることは可能です。

なお、特定のファイルに対するアクセス権は、ファイル自身に対するアクセス権と、ディレクトリに対するアクセス権の 両方 が必要となることに注意してください。

13.6.3 ファイルのアクセス権の変更 Edit source

Linux では、ファイルやディレクトリ、プロセスなどは、作成したユーザに属するものとして扱われます。また、ファイルやディレクトリに対して割り当てられているグループは、そのユーザがそれらを作成する際、ユーザが属していたプライマリグループに設定されます。また、新しいファイルやディレクトリを作成する際、それらに対するアクセス権 (パーミッション) は、事前に定義された方式で設定されます。詳しくは 13.6項 「ファイルのアクセス権」 をお読みください。

ファイルやディレクトリの所有者 (および root) であれば、それらのアクセス権を変更することができます。

ファイルやディレクトリに対するアクセス権を変更するには、 chmod コマンドを利用して、下記のパラメータを指定します:

  • 設定するアクセス許可の対象

  • 追加もしくは削除するアクセス権の種類

  • アクセス権を変更するファイルやディレクトリ (スペースで区切って指定します)

アクセス許可の対象としては、下記のいずれかを指定します: ファイルの所有者 (u (user)), ファイルを所有するグループ (g (group)), その他のユーザ (o (others)) 。また、アクセス権の種類としては、読み込み (r) 、書き込み (w) 、実行 (x) のいずれか (複数も可) を指定します。

root であれば、ファイルの所有者を変更することもできます。 chown (CHange OWNer; 所有者の変更) コマンドを利用すると、異なるユーザに所有者を変更することができます。

13.6.3.1 アクセス権と所有者の変更例 Edit source

下記はシェル内での ls -l の実行例です。

例 13.2: ファイルやフォルダに対するアクセス権
-rw-r----- 1 tux users      0  6月 23 16:08 checklist.txt
-rw-r--r-- 1 tux users  53279  6月 21 13:16 gnome_quick.xml
-rw-rw---- 1 tux users      0  6月 23 16:08 index.htm
-rw-r--r-- 1 tux users  70733  6月 21 09:35 kde-start.xml
-rw-r--r-- 1 tux users  47896  6月 21 09:46 kde_quick.xml
drwxr-xr-x 2 tux users     48  6月 23 16:09 local
-r-xr-xr-x 1 tux users 624398  6月 23 15:43 tux.jpg

上記の例では、 tux がファイル kde-start.xml を所有していて、読み込みと書き込みができるものの、実行することはできなくなっています。また、 users グループは読み込みだけができるものの、書き込みと実行はできなくなっています。その他のユーザは users グループと同じで、読み込みだけができるようになっています。

手順 13.4: アクセス権の変更

自分自身が tux である場合、ファイルのアクセス権を変更するには、下記のようにして行います:

  1. kde-start.xml ファイルに対して、 users グループからの書き込みを許可するには、下記のように実行します:

    > chmod g+w kde-start.xml
  2. kde-start.xml ファイルに対して、 users グループとその他のユーザからの書き込みを許可するには、下記のように実行します:

    > chmod go+w kde-start.xml
  3. 全てのユーザに対して、書き込み権限を削除するには、下記のように実行します:

    > chmod -w kde-start.xml

    何もユーザの種類を指定しない場合は、全てのユーザに対して適用されます。具体的には、ファイルの所有者と所有グループ、そしてその他のユーザそれぞれに適用されます。ただし、所有者である tux の場合は、書き込み許可を与えることなく書き込むことができます。

  4. ディレクトリ local に対して、 users とその他のユーザからの移動を禁止するには、下記のように実行します:

    > chmod go-x local
  5. kde_quick.xmlgnome_quick.xml の 2 つのファイルに対して書き込み許可を与えたい場合は、下記のように実行します:

    > chmod o+w  kde_quick.xml gnome_quick.xml
手順 13.5: 所有者の変更

自分自身が tux である場合で、 kde_quick.xml ファイルの所有者を他のユーザ wilber に切り替えるには、下記のように実行します:

  1. su などを利用して、 root になります。

  2. 下記のように実行します:

    # chown wilber kde_quick.xml
  3. 下記を実行すると結果を確認することができます:

    > ls -l kde_quick.xml

    下記のように出力されるはずです:

    -rw-r--r-- 1 wilber users  47896  6月 21 09:46 kde_quick.xml
  4. 所有者の変更が終わったら、忘れずに元の一般ユーザに戻っておいてください。

13.7 bash の省力化機能 Edit source

bash でコマンド入力を行うにあたっては、数多くのキーボード入力が必要となります。この章では、入力の手間と時間を省くためのさまざまな機能を紹介しています。

履歴

既定では、 bash は入力したコマンドを 記憶 します。この機能は 履歴 機能と呼ばれます。履歴には参照する機能だけでなく、再実行する機能も備わっています。履歴から実行するには、 を何回も押して再実行したい履歴を探します。なお、 を押すと、新しいほうに向かって履歴を探ることができます。コマンドの冒頭部分を覚えている場合は、冒頭部分を入力して Page ↑ を押すと、該当する履歴を検索することができます。

必要な履歴が見つかったら、 Enter を押して実行するまでの間であれば、そこからコマンドラインの編集を行うことができます (たとえばファイル名やパスなどを変えたりすることができます) 。編集はカーソルキーを利用して行い、入力は通常通りの入力で行います。

また、履歴内の特定のコマンドを検索することもできます。この場合は、 CtrlR を押して、インクリメンタル検索機能をお使いください。機能が起動すると、下記のようなプロンプトになります:

> (reverse-i-search)`':

あとは検索したい文字列を入力するだけです。文字を入力するごとに検索範囲が狭められます。入力した内容はコロン (:) の左側に、検索結果はコロンの右側にそれぞれ表示されます。検索結果を受け入れるには、 Esc を押します。これでプロンプトが元の表示に戻りますので、あとは必要に応じてコマンドラインを編集し、 Enter を押すと実行することができます。

補完

bash ではもう 1 つ便利な機能があります。それはファイル名やディレクトリ名を補完する機能です。ファイル名やディレクトリ名の一部を入力して <Tab> を押すと、該当するものが 1 つしかなかった場合は、そのままファイル名やディレクトリ名の残りが自動的に入力され、カーソルがファイル名やディレクトリ名の末尾に移動します。このような仕組みにより、残りのオプションもすぐに入力できるようになっています。逆に、該当するものが複数存在する場合 (たとえば同じ文字で始まるファイルが複数あるような場合) は、名前が異なる箇所まで自動的に入力が行われます。ここからさらに <Tab> を押すと、該当するもの全てを一覧表示することができます。あとはどれを選択するのかをキー入力で選んで、さらに <Tab> を押して範囲を狭めていってください。このような仕組みは、ファイルやディレクトリが実際に存在しているかどうか (および、正しいスペルで入力しているかどうか) を確認する手段としても、利用することができます。

ワイルドカード

パスを指定する箇所では、 1 つもしくは複数の文字をワイルドカードにすることができます。ワイルドカードとは、他の文字に置き換えることのできる文字で、 bash では下記の 3 種類のワイルドカード機能を提供しています:

ワイルドカード

機能

?

任意の 1 文字と置き換えることのできる文字です

*

任意の長さの文字列と置き換えることのできる文字です

[セット]

[] の内側で指定したグループのいずれかの文字に置き換えることのできる指定です

13.7.1 履歴/補完/ワイルドカードの使用例 Edit source

下記の例では、 bash におけるこれらの使用方法を説明しています。

手順 13.6: 履歴と補完の使用

既に 13.4.1項 「ファイルやディレクトリの作業例」 の流れに従って作業を行っていた場合、履歴機能としていくつかのコマンドラインが記憶されているはずです。下記では、既に上述の流れを実施していて、履歴が存在する場合の手順を示しています。

  1. まずは cd ~ が現れるまで、 を何度も押していきます。

  2. Enter を押してコマンドを実行すると、ホームディレクトリへの移動が行われます。

    たとえば、お使いのホームディレクトリ内に DocumentsDesktop というディレクトリがあるものとします。

  3. まずは cd D まで入力して <Tab> を押します。

    押しても特に何も起こりません。 bash は複数のディレクトリが存在することを知っているためです。

  4. 再度 <Tab> を押すと、選択肢が表示されます:

    > cd D
    Desktop/ Documents/ Downloads/
    > cd D
  5. プロンプトは入力した時点のままの表示になっています。ここからさらに文字を入力して <Tab> を押します。

    これで bash は残りの文字を埋めるようになります。

  6. コマンドラインの入力が終わったら、 Enter を押すと実行することができます。

手順 13.7: ワイルドカードの使用

この例では、お使いのホームディレクトリ内に様々な拡張子のファイルが存在していて、myfile1.txt , myfile2.txt など、異なるファイル名で複数のバージョンのファイルが保存されているものとします。このときのワイルドカードの使い方を説明しています。

  1. まずはホームディレクトリ内に、いくつかのテストファイルを作成します:

    1. touch コマンドを利用して、いくつかの (中身が空の) ファイルを作成します。たとえば .pdf , .xml , .jpg などの拡張子で作成します。

      ファイルの作成は、 bash の履歴機能を利用すれば繰り返し (ファイル名を変えながら) 実行できますし、 touch コマンドは複数のファイルを指定することができますので、スペース区切りでファイル名を複数指定して、一括で実行してもかまいません。

    2. また、同じ拡張子 (たとえば .html) のファイルを 2 つ用意します。

    3. さらに、連続した数字を付与したファイルを複数作成します。下記のように実行します:

      > touch myfile{1..5}.txt

      上記のコマンドを実行すると、 myfile1.txt , …, myfile5.txt をそれぞれ作成します。

    4. まずはディレクトリの内容を一覧表示します。下記のような出力になるはずです:

      > ls -l
      合計 0
      -rw-r--r-- 1 tux users 0  7月 14 13:34 foo.xml
      -rw-r--r-- 1 tux users 0  7月 14 13:47 home.html
      -rw-r--r-- 1 tux users 0  7月 14 13:47 index.html
      -rw-r--r-- 1 tux users 0  7月 14 13:47 toc.html
      -rw-r--r-- 1 tux users 0  7月 14 13:34 manual.pdf
      -rw-r--r-- 1 tux users 0  7月 14 13:49 myfile1.txt
      -rw-r--r-- 1 tux users 0  7月 14 13:49 myfile2.txt
      -rw-r--r-- 1 tux users 0  7月 14 13:49 myfile3.txt
      -rw-r--r-- 1 tux users 0  7月 14 13:49 myfile4.txt
      -rw-r--r-- 1 tux users 0  7月 14 13:49 myfile5.txt
      -rw-r--r-- 1 tux users 0  7月 14 13:32 tux.png
  2. ワイルドカードを使用すると、様々な条件を指定して一部のファイルを効率的に指定することができます:

    1. .html という拡張子のファイルを全て表示するには、下記のように実行します:

      > ls -l *.html
    2. myfile数字.txt のファイルを一覧表示するには、下記のように実行します:

      > ls -l myfile?.txt

      上記の例では ? というワイルドカードを使用していますが、これはファイルの数字部分が 1 桁のものしか表示することができないことに注意してください。たとえば myfile10.txt というファイルが存在する場合、このファイルを含めるには ?* に変更する必要があります。また、数字部分が 2 桁のもののみを一覧表示するには、 myfile??.txt となります。

    3. myfile1.txt , myfile2.txt , myfile3.txt , myfile5.txt をそれぞれ削除するには、下記のように実行します:

      > rm myfile[1-3,5].txt
    4. 下記を実行すると、結果を確認することができます:

      > ls -l

      削除を行った後は、 myfile4.txt ファイルだけが残っているはずです。

なお、複数のワイルドカードを同時に指定することもできます。たとえば上記の例では、 rm myfile[1-3,5].* と実行しても、 rm myfile[1-3,5].txt と同じ結果になります。これは、該当するファイルが全て .txt という拡張子であるためです。

注記
注記: rm コマンドでのワイルドカードについて

rm コマンドを使用する際、ワイルドカードの使用は非常に便利なものですが、その反面として危険性もはらんでいます。場合によっては、必要以上にファイルを削除してしまうこともあります。何が削除されるのかを事前に確認するため、まずは rm の前に ls を利用して、ワイルドカードを指定しておくことをお勧めします。

13.8 テキストの編集 Edit source

コマンドラインからファイルを編集するには、 vi エディタの使用方法を知っておく必要があります。 vi はほとんどの UNIX/Linux システムで利用できる既定のエディタです。 vi ではモードと呼ばれる概念があり、これによってキーを入力しても異なる動作になるようになっています。ただし、初心者には少しわかりにくい仕組みであることから、本章でごく基本的な操作方法を説明しています。なお、場合によっては vi エディタしか利用できない状況もあります。

基本的には、 vi には 3 種類の操作モードがあります:

コマンド モード

このモードでは、 vi はキーの組み合わせをコマンドとして解釈します。単語の検索や行の削除などの作業を行うことができます。

挿入 モード

このモードでは、通常のテキストをそのまま入力することができます。

拡張 モード

このモードは、切り替える際に : を入力することから、コロンモードとも呼ばれ、テキストの検索や置換などのより複雑な処理を行うことができます。

下記の (非常にシンプルな) 例では、 vi でファイルを開いて編集し、保存を行って終了するまでの流れを説明しています。

13.8.1 例: vi での編集 Edit source

注記
注記: キーの表示

下記の例では様々なコマンドを入力していますが、 vi でのキー入力は基本的に小文字で行います。下記の説明では、敢えて大文字を必要とする場合に限り、 Shift を含めたキー入力で表しています。

  1. vi で新しくファイルを作成して開くには、下記のように実行します:

    > vi textfile.txt

    既定では、 vi は コマンド モードで起動します。ここでは、直接テキストを入力することはできません。

  2. I を押して挿入モードに切り替えます。最下行の表示が変化しますので、テキストを挿入できる状態になっていることが分かります。

  3. 何かテキストを記述します。改行を挿入したい場合は、まず Esc を押してコマンドモードに戻り、 O を押して改行を入れ、再度挿入モードに戻ります。

  4. 挿入モードでは、矢印 (カーソル) キーと Del でテキストを編集することができます。

  5. vi を終了するには、まず Esc を押してコマンドモードに切り替えます。そこから : を押して拡張モードに切り替えます。最下行にコロンが表示されるようになります。

  6. 記入した内容を保存して vi を終了するには、 wq ( wwrite (書き込む) の意味、 qquit (終了) の意味 ) と入力して Enter を押します。ファイル名を変えて保存したい場合は、 w ファイル名 のように入力して Enter を押します。

    保存せずに vi を終了するには、 q! と入力して Enter を押します。

13.10 テキストファイルの表示 Edit source

grep でファイルの内容を検索した場合、検索文字列に該当したファイル名とその行のみが表示されます。ただ、場合によっては、これだけでは情報不足で、本当に目的のファイルかどうかが判断できない場合があります。このような場合に備え、 bash ではエディタを利用することなく、テキストファイルの内容を表示する機能を複数用意しています。

head

head はテキストファイルの冒頭の複数行を表示するコマンドです。特に何も指定しない場合は、テキストファイルの冒頭 10 行分を表示します。

tail

tail コマンドは head コマンドの逆で、何も指定しない場合はテキストファイルの末尾 10 行を表示します。これは特に、システムのログファイルを閲覧する場合に便利なコマンドです。ログファイルの末尾には直近のログが記録されていますので、直近の情報を取得する際にはこのコマンドを使うとよいでしょう。

less

less を使用すると、テキストファイルの全体を表示することができます。また、 Page ↑Page ↓ のキーを押すと、それぞれ半ページ単位で移動 (スクロール) することもできます。また、 Space は 1 ページ分下に移動することができるほか、 Home でファイルの冒頭に、 End でファイルの末尾にそれぞれ移動することができます。表示を終了するには、 Q を押してください。

more

less の代用として more というコマンドを使用することもできます。同じような機能を持つコマンドですが、 more はファイルの冒頭方向に戻る機能がないため、少し不便なコマンドではあります。末尾の方向に進むには Space を押します。ファイルの末尾まで到達すると、 more は自動的に終了します。

cat

cat はファイルの内容を表示するコマンドで、ファイル全体を止まることなくそのまま出力します。 cat にはスクロールのような機能がないので、非常に使いづらく思えてしまいますが、しばしば他のコマンドと組み合わせて使用するためのコマンドです。

13.11 リダイレクトとパイプ Edit source

作業内容によっては、コマンドの出力した結果をファイルに出力したり、複数のコマンドを組み合わせて、一方のコマンドの出力を他方のコマンドの入力として使用したりしたい場合があります。シェルでは、このような仕組みをリダイレクトやパイプとして提供しています。

通常、シェルの標準的な出力先 (標準出力) は画面 (シェルのウインドウ) に、標準的な入力元 (標準入力) はキーボードにそれぞれ設定されています。それぞれ対応するシンボルを指定することで、入出力を他のファイルやコマンドに流すことができます。

リダイレクト

> というシンボルを指定すると、出力結果をファイルに流す (リダイレクトする) ことができます (出力リダイレクト) 。また、 < というシンボルを指定すると、逆にファイルの内容を入力として使用することができます (入力リダイレクト) 。

パイプ

パイプ記号 (|) を使用しても、出力をリダイレクトすることができます。ただし、パイプ記号の場合、出力先はファイルではなく次のコマンドになります。つまり、複数のコマンドをパイプで繋げて指定すれば、前のコマンドの出力を次のコマンドの入力として使用できることになります。

13.11.1 リダイレクトとパイプの例 Edit source

  1. ls の出力をファイルに保存するには、下記のように実行します:

    > ls -l > filelist.txt

    このコマンドを実行すると、カレントディレクトリに filelist.txt というファイルが作成され、 ls の出力結果が書き込まれます。

    ただし、コマンドの実行よりも前に filelist.txt というファイルが存在していると、このコマンドを実行することでファイルが上書きされてしまいます。これを防ぐには、 > ではなく >> と指定します。たとえば下記のようになります:

    > ls -l >> filelist.txt

    上記を実行すると、 ls コマンドの出力が、既存の filelist.txt ファイルに追記されるようになります。なお、ファイルが存在しない場合は、新規に作成されます。

  2. リダイレクトは逆方向にも使用することができます。キーボードからの入力ではなく、ファイルからの入力を行いたい場合は、たとえば下記のように実行します:

    > sort < filelist.txt

    上記を実行すると、 filelist.txt の内容を読み込んで、それを並べ替え (sort) て出力します。出力先は画面になります。リダイレクトを組み合わせれば、結果を他のファイルに流すこともできます:

    > sort < filelist.txt > sorted_filelist.txt
  3. たとえば ls -l など、コマンドが長い出力を生成するような場合、パイプを利用して less のようなコマンドに流すことで、出力結果をスクロールしながら読むことができるようになります。たとえば下記のようになります:

    > ls -l | less

    上記のように実行することで、カレントディレクトリの内容を less で読むことができるようになります。

    パイプは、しばしば grep コマンドとも併用します。これは、出力された内容から特定の文字列を含む箇所だけを抜き出して表示する際に利用するもので、たとえば下記を実行すると、 tux が所有するファイルだけを出力することができます:

    > ls -l | grep tux

13.12 プログラムの起動とプロセスの管理 Edit source

13.8項 「テキストの編集」 で示しているとおり、シェルからは様々なプログラムを起動することができます。プログラムによっては、 X Window System のようなグラフィカルユーザインターフェイス (GUI) を持つものもあります。たとえば KDE や GNOME をお使いの環境で、ホームディレクトリ内にある vacation.pdf というファイルを読みたい場合、 okular ~/vacation.pdf (もしくは evince ~/vacation.pdf ) と入力すると、 PDF ビューアが起動して PDF ファイルを表示することができます。

PDF ビューアを開いている間、端末ウインドウのほうをご覧ください。プロンプトが表示されていないことに気がつくかと思います。つまり、この時点では何もコマンドを受け付けなくなっています。 PDF ビューアを終了すると、再度プロンプトが表示されるようになり、コマンドも実行できるようになります。このような問題を回避するには、プログラム (例: PDF ビューア) を起動している間に CtrlZ を押してプロセス (処理) を一時停止し、 bg と入力してプロセスをバックグラウンド (裏) で動作させることができます。

これで vacation.pdf を表示しながら、同じ端末でさらなるコマンドを入力できるようになりました。ただし、いちいち上記のような手順を行っても面倒なので、最初からバックグラウンドで動作させる方法もあります。これを行う場合には、コマンドの末尾にアンパサンド (&) を付けます:

> okular ~/vacation.pdf &

バックグラウンドプロセス (シェル内では ジョブ とも言います) を起動している場合、 jobs というコマンドを実行することで、存在するジョブを一覧で表示することができます。ジョブにはそれぞれ番号が付けられています ([] 内の番号がジョブ番号です):

> jobs
[1]   実行中         okular book.opensuse.startup-xep.pdf &
[2]-  停止           okular book.opensuse.reference-xep.pdf &
[3]+  停止           man jobs

ジョブを再度フォアグラウンド (表) に戻すには、 fg ジョブ番号 と入力して実行します:

job コマンドは、端末から起動したバックグラウンドプロセスのみを表示することができますが、 ps コマンドでは、何もオプションを指定しなければ、自分自身のユーザに紐付く全てのプロセスを表示することができます。たとえば下記のような出力になります:

> ps
PID TTY          TIME CMD
15500 pts/1    00:00:00 bash
28214 pts/1    00:00:00 okular
30187 pts/1    00:00:00 kwrite
30280 pts/1    00:00:00 ps

通常の手段ではプログラムを終了できなくなってしまった場合は、 kill コマンドを利用してプロセスに対応するプログラムを停止させることができます。これを行うには、 ps の出力で得られるプロセス ID (PID) を指定する必要があります。たとえば上記の出力で、 kwrite を終了させたい場合は、下記のように実行します:

> kill 30187

これでプログラムに対して TERM というシグナルが送信され、プログラムを終了するよう指示することができます。

上記の方法以外にも、 jobs コマンドで表示されるジョブ番号を指定して終了させることもできます。この場合は、ジョブ番号の前にパーセント記号 ( % ) を指定します:

> kill %ジョブ番号

場合によっては、通常の kill コマンドでも終了しなくなってしまう場合もあります。この場合は下記のように実行してみてください:

> kill -9 PID

上記を実行すると、 TERM シグナルではなく、 KILL というシグナルが送信されるようになります。通常は、これでプログラムを強制終了させることができます。

本章は、ジョブとプロセスに関するごく基本的なコマンドについて紹介してきました。システム管理者の場合は、 2.3項 「プロセス」 も合わせてお読みになることをお勧めします。

13.13 書庫 (アーカイブ) とデータ圧縮 Edit source

Linux では、 2 種類のコマンドを使用してデータを転送しやすい形にすることができます:

  • 1 つは書庫プログラムと呼ばれ、複数の (一般的には多数の) ファイルを 1 つのファイルにまとめます。一般的には tarcpio などを使用します。

  • もう 1 つはデータ圧縮プログラムと呼ばれ、元のデータに展開できる状態を維持しながら、よりファイルを小さくします。一般的には gzipbzip2 を使用します。

上記 2 種類のコマンドを組み合わせて使用することで、データ圧縮型書庫を実現することができます。他のオペレーティングシステムでは ZIPRAR などと呼ばれるファイルです。

たとえば test ディレクトリ以下の全てのファイルとサブディレクトリを、 testarchive.tar というファイルにまとめたい場合は、下記のように実行します:

手順 13.8: ファイルの書庫の作成
  1. シェルを開きます。

  2. cd コマンドを利用して、 test ディレクトリのある場所まで移動します。

  3. 下記のように入力して実行し、ファイルを書庫に格納します:

    > tar -cvf testarchive.tar test

    -c オプションは書庫の作成を、 -v オプションは処理したファイルの情報を出力する指示を、 -f オプションは出力先のファイルの指定を、それぞれ行っています。

    test ディレクトリに存在していたファイルやディレクトリは、そのまま削除されずそのまま保持されます。

  4. 書庫ファイルの内容を表示するには、下記のように実行します:

    > tar -tf testarchive.tar
  5. 書庫の内容を展開するには、下記のように実行します:

    > tar -xvf testarchive.tar

    なお、カレントディレクトリ以下に書庫内と同じファイルやディレクトリが存在する場合、それらは何も警告されることなく上書きされます。

ファイルを圧縮するには、 gzip または bzip2 コマンドを使用します。後者のほうが、より高い圧縮率になります。

手順 13.9: ファイルの圧縮
  1. 下記の例では、 手順13.8「ファイルの書庫の作成」 で作成した書庫をそのまま使用しています。

    書庫を圧縮するには、下記のように実行します:

    > gzip testarchive.tar

    ls コマンドを実行するとわかりますが、上記のコマンドを実行すると testarchive.tar というファイルが削除され、その代わりに testarchive.tar.gz というファイルが作成されます。

    上記以外にも、 bzip2 testarchive.tar のように実行すると、より高い圧縮率で圧縮を行うことができます。

  2. 今度は圧縮を展開して、書庫からファイルを取り出してみます:

    • 書庫を作成して圧縮した手順とは逆に、圧縮を展開してから書庫の内容を取り出します:

      > gzip --decompress testarchive.tar.gz
      > tar -xvf testarchive.tar
    • 展開と取り出しを一括で行うこともできます:

      > tar -xvf testarchive.tar

    ls を実行すると、新しく test というディレクトリが作成され、ホームディレクトリにある test ディレクトリと同じ内容が作成されます。

13.14 主要な Linux コマンド Edit source

本章では、主要な Linux コマンドについて、その概要を示しています。実際には、ここで掲載しているものよりもずっと多くのコマンドが存在しています。なお、コマンドの紹介では、パラメータの一覧のほか、一般的な使い方についても説明しています。

パラメータは必要に応じて変えてください。たとえば file という名前のファイルが存在していなければ、 ls file を実行しても意味がありません。また、パラメータは複数を組み合わせて使用することもできます。たとえば ls -l -a を短くして、 ls -la のように実行することもできます。

13.14.1 ファイル関連のコマンド Edit source

この章では、ファイルを管理するための主要なコマンドを紹介しています。一般的なファイル管理のほか、ファイルシステムのアクセス制御リスト (ACL) の操作に関するコマンドも含まれています。

13.14.1.1 ファイルの管理 Edit source

ls オプション ファイル

何もパラメータを指定せずに ls を実行すると、このプログラムはカレントディレクトリの内容を短い形式で出力します。

-l

詳細な形式で出力します

-a

隠しファイルを表示します

cp オプション コピー元 コピー先

コピー元 から コピー先 にファイルをコピーします。

-i

コピー先 が既に存在する場合、確認メッセージを表示して待機します。

-r

コピーを再帰的に実行します (サブディレクトリを含めてコピーします)

mv オプション 移動元 移動先

移動元 から 移動先 にコピーを行い、成功すれば 移動元 を削除します。

-b

移動を行う前に、 移動元 のバックアップコピーを作成します

-i

移動先 が既に存在する場合、確認メッセージを表示して待機します。

rm オプション ファイル

システムから指定したファイルを削除します。ディレクトリについては、 -r オプションを指定しない限り、削除されません。

-r

既存のサブディレクトリについても削除します。

-i

各ファイルを削除する際に、確認メッセージを表示して待機します。

ln オプション リンク元 リンク先

リンク元 から リンク先 に対して、内部リンクを作成します。通常、リンクは同じファイルシステム内のものに対してのみ設定することができますが、 ln-s オプションを付けて実行すると、ファイルシステムを跨いでリンクを行うことができるシンボリックリンクを作成することができます。

-s

シンボリックリンクを作成します。

cd オプション ディレクトリ

カレント (現在作業中の) ディレクトリを変更します。何もパラメータを付けずに cd を実行すると、ホームディレクトリに移動します。

mkdir オプション ディレクトリ

新しいディレクトリを作成します。

rmdir オプション ディレクトリ

ディレクトリ内に何も残っていない場合にのみ、指定したディレクトリを削除します。

chown オプション ユーザ名[:グループ] ファイル

ファイルの所有者を、指定したユーザに変更します。

-R

全てのサブディレクトリ内のファイルとディレクトリに対して、この変更を行います。

chgrp オプション グループ名 ファイル名

ファイルの所有グループを、指定したグループに変更します。なお、ファイルの所有者は、現時点で設定されているグループと新しいグループの両方に所属している場合にのみ、グループを変更することができます。

chmod オプション モード ファイル

アクセス権を変更します。

モード は 3 種類の部分 (対象 , アクセス , アクセス種別) から構成されています。 対象 には下記の文字を指定することができます:

u

ユーザ

g

グループ

o

その他

アクセス には + (アクセスを許可する) もしくは - (アクセスを拒否する) のいずれかを指定します。

アクセス種別 には下記の文字を指定することができます:

r

読み込み

w

書き込み

x

実行 (ファイルに対しては実行を、ディレクトリに対してはそのディレクトリへの移動を表します)

s

setuid ビット (アプリケーションやプログラムに対して、そのファイルの所有者に成り代わって実行するかどうかを示すビットです)

上記の方法以外にも、数値で指定することができます。数値の場合は 4 桁で指定し、それぞれの桁は 1, 2, 4 の数値を必要に応じて足した値を指定します。できあがった数値はバイナリマスクと呼ばれます。 1 桁目は setuid (4), setgid (2), sticky (1) を表し、 2 桁目はファイルの所有者に対するアクセス権を、 3 桁目はグループに対するアクセス権を、 4 桁目はその他に対するアクセス権をそれぞれ指定します。 2 桁目以降は、読み込み (4), 書き込み (2), 実行 (1) の意味になります。ファイルの所有者に対しては、実行可能なファイルの場合 6 か 7 の数値を指定します。

gzip パラメータ ファイル

このプログラムは、複雑な数学的アルゴリズムを利用して、ファイルの内容を圧縮します。圧縮されたファイルには、拡張子 .gz が付けられ、通常通り使用する場合には、あらかじめ展開処理を行わなければならなくなります。なお、このコマンドでは、複数のファイルやディレクトリをまとめることはできません。複数のファイルやディレクトリをまとめる場合は、 tar コマンドをお使いください。

-d

以前に gzip で圧縮していたファイルを展開し、元のサイズおよび内容に戻します (gunzip コマンドでも同じことを行うことができます)

tar オプション 書庫 ファイル

tar は 1 つまたは複数のファイルを書庫に配置します。必要であれば圧縮を行うこともできます。 tar は非常に複雑なコマンドで、多くのオプションが用意されています。最もよく使用されるオプションは、下記のとおりです:

-f

画面ではなくファイルに出力を行います (通常はこれを指定します) 。

-c

新しい tar 書庫を作成します。

-r

既存の書庫にファイルを追加します。

-t

書庫の内容を出力します。

-u

書庫内にあるファイルよりも新しい場合にのみ、書庫にファイルを追加します。

-x

書庫からファイルを取り出します ( 抽出 )

-z

作成もしくは展開する書庫を gzip で圧縮または展開します。

-j

作成もしくは展開する書庫を bzip2 で圧縮または展開します。

-v

処理したファイルの一覧を出力します。

tar で作成した書庫には、拡張子 .tar を付けるのが一般的です。ただし、書庫を gzip で圧縮した場合は、拡張子が .tgz または .tar.gz になります。また、 bzip2 で圧縮した場合は、拡張子が .tar.bz2 になります。

find オプション

find を使用すると、指定したディレクトリ内でファイルを探すことができます。最初のオプションには、検索を開始するディレクトリを指定します。それ以降に各種のオプションを指定しますが、たとえば -name オプションの後ろには検索文字列を指定します。ここではワイルドカードも指定することができます。なお、データベースを使用する locate とは異なり、 find は実際のディレクトリ内を検索します。

13.14.1.2 ファイルの内容へのアクセス Edit source

file オプション ファイル

Linux ではファイル名に拡張子を付けることができますが、必ずしも必要となるものではありません。 file コマンドでは、指定したファイルの種類を判別することができます。 file コマンドの出力を元にすることで、ファイルを開くことのできるアプリケーションを判断することができます。

-z

圧縮ファイルの内容を展開して判別します。

cat オプション ファイル

cat コマンドはファイルの内容を出力するためのコマンドです。ただし、ファイルの内容全体を一時停止することなく一括で出力してしまうことに注意してください。

-n

左側に行番号を出力します。

less オプション ファイル

このコマンドは、指定したファイルの内容を見やすく表示するためのコマンドです。Page ↑Page ↓ でそれぞれ半ページずつ前もしくは後ろに移動することができるほか、 Space で 1 ページ分後ろに移動することもできます。また、 HomeEnd で、それぞれファイルの冒頭と末尾に移動することもできます。プログラムを終了するには、 Q を押します。

grep オプション 検索文字列 ファイル

grep コマンドは、指定したファイルの内容を検索するためのコマンドです。検索文字列に該当する箇所が見つかると、 検索文字列 を含む行が表示されます。

-i

大文字と小文字を区別せずに検索します。

-H

該当する行を表示せず、該当したファイルの名前のみを表示します。

-n

該当した箇所を表示する際、行番号も合わせて表示します。

-l

検索文字列 に該当していないファイルのファイル名のみを表示します。

diff オプション ファイル_1 ファイル_2

diff コマンドは 2 つのファイルの内容を比較し、違いのあった箇所だけを出力します。これはプログラマがよく使用するコマンドで、ソースコード内の変更箇所だけを抽出する際に使用します。

-q

2 つのファイルに差異があるかどうかだけを表示します。

-u

Unified 形式の差分を出力します。これにより、より読みやすい出力になります。

13.14.1.3 ファイルシステム Edit source

mount オプション デバイス マウントポイント

このコマンドは、ハードディスクや CD-ROM ドライブなどのデータメディアを、 Linux ファイルシステムのディレクトリ内に割り当てる (マウントする) ことができるコマンドです。

-r

読み込み専用でマウントします。

-t ファイルシステム

ファイルシステムの種類を指定します。 Linux で使用しているハードディスクの場合、 ext4 , xfs , btrfs などがよく使われます。

/etc/fstab に定義されていないハードディスクの場合、デバイスの種類も指定しなければなりません。この場合、 root だけがマウントすることができます。一般ユーザからファイルシステムをマウントできるようにするには、/etc/fstab 内の適切な箇所に、カンマ区切りで user というオプションを追加する必要があります。詳しくは mount(1) のマニュアルページをお読みください。

umount オプション マウントポイント

このコマンドは、ファイルシステムから特定のドライブをマウント解除 (アンマウント) します。データの損失を防ぐため、リムーバブルメディアをお使いの場合は、メディアを取り出す前に、このコマンドを実行してください。通常は mount コマンドと同様に、 umountroot だけが実行できます。一般ユーザからファイルシステムをマウントできるようにするには、/etc/fstab 内の適切な箇所に、カンマ区切りで user というオプションを追加する必要があります。

13.14.2 システムコマンド Edit source

この章では、システムの情報を表示したりプロセスやネットワークを制御したりする際に必要となる、最も重要なコマンドをいくつか紹介しています。

13.14.2.1 システム情報 Edit source

df オプション ディレクトリ

df (Disk Free の略) コマンドでは、何もオプションを指定しないで実行すると、全てのマウント済みのドライブに対して、全体容量と使用中の容量、そして空き容量をそれぞれ表示します。ディレクトリを指定した場合は、そのディレクトリのあるドライブの情報だけを表示します。

-h

占有されているブロックをギガバイト, メガバイト, キロバイトなどの読みやすい形式で表示します。

-T

ファイルシステムの種類を指定します (ext2, nfs, etc.)

du オプション パス

何もオプションを付けずにこのコマンドを実行すると、カレントディレクトリ以下のサブディレクトリに対して、それぞれがファイルなどで占有するディスク領域を表示します。

-a

各ファイルのサイズを表示します。

-h

読みやすい形式で表示します。

-s

合計サイズのみを表示します。

free オプション

free コマンドは、メモリとスワップ領域に関する情報を表示します。合計サイズと使用済みのサイズの両方をそれぞれ表示します。詳しくは 15.1.7項 「free コマンド」 をお読みください。

-b

バイト単位で表示します。

-k

キロバイト単位で表示します。

-m

メガバイト単位で表示します。

date オプション

このシンプルなプログラムは、現在のシステムにおける日時を表示します。 root で実行すると、システムの時刻を修正する目的で使用することもできます。このプログラムに関する詳細は、 date(1) のマニュアルページをお読みください。

13.14.2.2 プロセス Edit source

top オプション

top コマンドは、現在動作中のプロセスに関する概要を表示することができます。 H を押すと、プログラムをカスタマイズするための簡潔な説明が表示されます。

ps オプション プロセス_ID

何もオプションを付けずに実行すると、自身が所有する (=開始した) 全てのプログラムやプロセスの一覧表が表示されます。なお、このコマンドに対するオプションは、ハイフンを付けずに指定します。

aux

自分自身が所有するものだけでなく、全てのプロセスを詳細に表示します。

kill オプション プロセス_ID

時によっては、プログラムを通常の方法で終了させることができない場合があります。ほとんどの場合、 kill の後ろにプロセス ID (top コマンドや ps コマンドで取得することができます) を指定することで、プログラムを終了することができます。 kill コマンドは通常、 TERM というシグナルを送信して、プログラム側に終了を依頼します。これでもうまく終了できない場合は、下記のパラメータを試してみてください:

-9

TERM ではなく KILL シグナルを送信します。このシグナルであれば、ほぼ全ての場合においてプロセスを強制終了することができます。

killall オプション プロセス名

このコマンドは kill に似たコマンドですが、プロセス ID ではなくプロセス名を指定して実行します。このコマンドでは、同じ名前のプロセス全てに対して、シグナルを送信します。

13.14.2.3 ネットワーク Edit source

ping オプション ホスト名または_IP_アドレス

ping コマンドは TCP/IP ネットワークの基本的な動作をテストするための標準的なツールで、宛先のホストに対して小さなデータパケットを送信し、その応答を待ちます。相手側から応答があれば、 ping コマンドはその旨を示すメッセージを表示しますので、これによってネットワークリンクが確立できていることがわかるようになっています。

-c 回数

データパケットの送信回数を指定します。ここで指定した回数を送信したのち、しばらくしてプログラムが終了します (既定では、何度もパケットを送り続けます) 。

-f

flood ping と呼ばれる ping の送信方法を実施します。この方法では、できる限り多くのパケットを送信してネットワークのテストを行います。 root のみに提供されている機能です。

-i 間隔

2 つのデータパケットの送信間隔を指定します (既定値: 1 秒) 。

host オプション ホスト名 サーバ

ドメインネームシステム (DNS) に対して、ホスト名を IP アドレスに変換するように依頼します。このツールを利用することで、ネームサーバに対する問い合わせを送信することができます。

ssh オプション [ユーザ名@]ホスト名 コマンド

SSH はネットワークを介して特定のホスト内で作業を行うことができる、インターネットプロトコルです。 SSH は Linux プログラムの名前でもあり、 SSH プロトコルを利用してリモートのコンピュータのシェルに接続します。

13.14.2.4 その他 Edit source

passwd オプション ユーザ名

ユーザは自分自身のパスワードを任意の時点で変更することができます。管理者である root の場合、このコマンドでユーザ名を指定することで、システム内の任意のユーザに対するパスワードを変更することができます。

su オプション ユーザ名

su は現在のセッション内で、他のユーザに成り代わる (Switch User) ためのコマンドです。ユーザ名を指定して実行すると、対応するパスワードの入力を求められます。なお、 root から実行している場合は、パスワードの入力は求められません。これは、 root が全てのユーザの管理者であるためです。ユーザ名を指定せずに実行した場合、 root のパスワード入力を求められ、パスワードが適合していれば root になることができます。また、 su - のように実行すると、異なるユーザ向けにログインシェルを起動するようになります。

halt オプション

データの損失を避けるため、このプログラムでシステムをシャットダウンしてください。

reboot オプション

halt コマンドと似た仕組みで、こちらはシステムを再起動します。

clear

このコマンドは、端末内の可視領域を消去します。オプションはありません。

13.14.3 さらなる情報 Edit source

本章で記述しているよりもずっと多くのコマンドが、システムには存在しています。他のコマンドに関する情報や、さらに詳しい情報については、 O'Reilly 社発行の書籍 Linux in a Nutshell をお読みになることをお勧めします。

このページを印刷