Linux で様々な作業を行う際、ほとんどの作業はコマンドラインインタプリタ (シェル) を使用せずに作業ができてしまいます。 Linux システムが起動すると、通常はログイン処理を促し、それ以降の作業を行うグラフィカルなユーザインターフェイスが表示されます。Linux でのグラフィカルなユーザインターフェイスは、 KDE や GNOME など、インストール時に選択したデスクトップ環境を一般的に使用します。
しかしながら、グラフィカルなインターフェイスが利用できなくなる問題に引っかかってしまったような場合などに備えて、シェルの使い方の基本を覚えておくと便利です。たとえば X Window System の問題が発生したような場合、シェルの知識を持っておかないと、コマンドの入力 1 つにしても恐る恐る実行することになってしまいます。また、問題が発生していなくても、場合によっては、コマンドラインでやってしまったほうがずっと手っ取り早い作業もあります。
Unix や Linux の場合、動作やコマンド体系が少しずつ異なる複数のシェルが用意されています。 openSUSE® Leap での既定のシェルは、 Bash (GNU Bourne-Again Shell) と呼ばれているシェルです。
下記の章では、 bash シェルのごく基本的な使い方と、コマンドラインを利用した基本的な作業のやり方について説明しています。シェルについてさらに詳しく学びたい場合や、既に 「パワーユーザ」 であるとご自身でお考えの方は、 第14章 「bash と bash スクリプト」 をお読みください。
基本的には、お使いのコンピュータを起動してグラフィカルユーザインターフェイスが表示されている状況からは、下記のいずれかの方法でシェルを起動することができます:
グラフィカルなユーザインターフェイスとは別の画面でシェルを起動する
グラフィカルなユーザインターフェイス 内 でシェルを起動する
前者の方式はいつでも利用できる仕組みではありますが、既に KDE や GNOME などのデスクトップ環境にログインしている場合は、後者のほうが都合がよいでしょう。いずれの方法を選択した場合も、シェルとグラフィカルユーザインターフェイスとの間を切り替えることができます。
前者の方法でシェルを起動するには、グラフィカルユーザインターフェイスを終了するため、 Ctrl–Alt–F2 を押します。するとグラフィカルな表示が消え、テキストベースのログインプロンプトが表示されるようになります。ここからユーザ名を入力して Enter を押すと、パスワードの入力を求められますので、パスワードを入力して再度 Enter を押します。すると、下記のようなプロンプトが表示されます:
1 2 3 tux@linux:~>
ログインしたユーザ名を表します。 | |
コンピュータのホスト名を表します。 | |
現在の (カレント) ディレクトリのパスを表します。ログインしてすぐの状態では、カレントディレクトリはホームディレクトリになっています。ホームディレクトリは |
ネットワーク上離れた場所からログインしている場合でも、上記で出力されるホスト名はログイン先のものになりますので、どこで作業を行っているのかが明らかになるようになっています。
カーソルがこのプロンプトの後ろに表示されていれば、お使いのコンピュータシステムでコマンドを入力できる状態にあることになります。たとえば ls
-l
のように入力すると、詳細な出力形式でカレントディレクトリの内容を表示することができます。なお、シェルの使用を終了し、元の画面に戻りたい場合は、 exit
と入力して Enter を押してください。その後、 Alt–F7 を押すと、元のグラフィカルなユーザインターフェイスに戻ることができます。デスクトップも動作中のアプリケーションも、元のままになっているはずです。
GNOME や KDE のデスクトップ環境にログイン済みで、デスクトップ内に端末 (シェル) ウインドウを表示させたい場合は、 Alt–F2 を押して konsole
(KDE の場合) もしくは gnome-terminal
(GNOME の場合) を入力します。すると、デスクトップ内に端末ウインドウが表示されるようになります。既にデスクトップにログインしているため、上述のものと同じシステム周りの情報が表示されます。ここからコマンドを入力して実行すると、デスクトップと同時並行で処理が動作するようになります。デスクトップ内の他のアプリケーションに切り替えたい場合は、単にそれぞれのアプリケーションのウインドウをマウスで選択するか、パネル内のタスクバーなどで選択を行ってください。端末ウインドウを閉じるには、 Alt–F4 を押します。
シェル内にプロンプトが表示されれば、コマンドを受け取って実行することができることになります。コマンドには複数の要素が存在しています。最初はコマンドそれ自身で、その後ろにパラメータやオプションが続きます。また、コマンドやオプションは、← , → , Home , End , <— (バックスペース), Del , Space (スペース) の各キーで編集を行うことができます。入力を間違ってしまったりした場合は、これらのキーで編集作業を行うことができます。コマンドは Enter が押されるまで、実行はされません。
シェルは寡黙です。グラフィカルなユーザインターフェイスとは異なり、コマンドが実行した際にも確認メッセージは表示しないのが通常です。何らかの問題やエラーが発生した場合や、コマンドの実行時に特定のオプションを指定して出力するようにした場合にのみ、メッセージが表示されます。
なお、削除をするにあたっては、特に注意する必要があります。たとえば rm
というコマンドはファイルを削除するためのコマンドですが、特に何もオプションを指定しない限り確認メッセージの類は表示されず、そのまま黙って削除を実行してしまいます。
13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 では、最も基本的なコマンドである ls
を使用しました。このコマンドはディレクトリの内容を表示するためのコマンドで、オプションを指定しても、指定しなくても実行することができます。 ls
コマンドをオプション無しで実行すると、現在のディレクトリに対する内容を簡潔に出力します:
>
ls bin Desktop Documents public_html tux.txt>
Linux では、ファイルの拡張子は任意で、必須ではありません。上記の例では .txt
という拡張子が付けられたファイルがありますが、拡張子を指定しなくてもかまいません。このような仕組みであることから、 ls
の出力ではファイルとフォルダの区別が難しくなっていますが、既定の bash シェルでは色を付けて出力するようになっています (ディレクトリは青色、ファイルは黒色) ので、ここからファイルとフォルダを区別することができます。
ディレクトリの内容をより詳しく表示するには、 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
オブジェクトの種類とアクセス権を示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。 | |
このファイルに対するハードリンク数を示しています。 | |
ファイルやディレクトリの所有者を示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。 | |
ファイルやディレクトリに割り当てられたグループを示しています。詳しくは 13.6.1項 「ユーザ/グループ/その他に対するパーミッション」 をお読みください。 | |
バイト単位でのファイルサイズを示しています。 | |
最終変更日時を示しています。 | |
オブジェクトの名前を示しています。 |
通常は、最初のオプションに対してだけハイフンを付け、それ以降のオプションはスペースを入れずに入力することで、複数のオプションをまとめて記述することができます。たとえばディレクトリ内の全てのファイルを長い形式で出力させたい場合は、 -l
と -a
(「all」 (全て) の意味) を組み合わせて ls
コマンドに指定し、 ls
-la
のようにして実行します。これでディレクトリ内の隠しファイル (ドットで始まるファイル、たとえば .hiddenfile
など) をあわせて表示するようになります。
ls
で出力される内容は、ファイル名のアルファベット順に並び替えられます。ですが、グラフィカルなファイルマネージャと同様に、 ls
-l
で出力される内容を、日付や拡張子、ファイルサイズなどで並び替えることができます:
日時で並べ替えるには、 ls
-lt
のように指定して実行します (新しいものを先に表示します) 。
拡張子で並べ替えるには、 ls
-lx
のように指定して実行します (拡張子の無いものが先に表示されます) 。
ファイルサイズで並べ替えるには、 ls
-lS
のように指定して実行します (大きいものが先に表示されます) 。
逆順で並び替えるには、お使いの ls
コマンドに -r
オプションを追加します。たとえば ls
-lr
のように実行すると、ディレクトリの内容一覧をアルファベットの逆順で出力します。また、 ls
-ltr
を実行すると古いファイルを先に表示することができます。このほかにも、 ls
には多数の便利なオプションが用意されています。以下の章では、それらの調べ方を示しています。
コマンドを入力して実行していると、シェルの画面がコマンドとその出力で埋め尽くされることになります。下記の表では、シェル内のナビゲーションと編集に役立つキーを示しています。
ショートカットキー |
機能 |
---|---|
Ctrl–L |
画面を消去し、現在の行をページの冒頭に移動します。 |
Ctrl–C |
現在実行中のコマンドを中止します。 |
Ctrl–U |
カーソルのある位置から行頭までを削除します。 |
Ctrl–K |
カーソルのある位置から行末までを削除します。 |
Ctrl–D |
シェルのセッションを閉じます。 |
↑ , ↓ |
過去に実行したコマンドの履歴を参照します。 |
コマンドの名前は覚えていたものの、オプションやコマンドの書式を忘れてしまった場合は、下記のいずれかの方法で調べることができます:
--help
/ -h
オプション特定のコマンドに対してオプションを確認したいだけであれば、コマンドの後ろにスペースで区切って --help
と指定してください。 --help
オプションは多数のコマンドに実装されています。たとえば ls
--help
のように入力すると、 ls
コマンドに対する全てのオプションが表示されます。
様々なコマンドに対して詳しく学びたい場合は、マニュアルページを読むこともできます。マニュアルページには、コマンドの動作に関する簡単な説明も付属しています。マニュアルページは man
コマンドでアクセスすることができます。マニュアルページを読みたいコマンドを、スペースで区切って指定してください。たとえば man ls
のように実行します。
マニュアルページはシェル内に直接表示されます。マニュアルページ内を移動するには、下記のキーをお使いください:
単純な上下移動: Page ↑ , Page ↓
マニュアルページの冒頭および末尾への移動: Home , End
マニュアルページの終了: Q
man
コマンドそのものについても、マニュアルページで調べることができます。詳しくは man man
と入力してください。
info ページは、特定のコマンドに対してより詳しい説明を記述しているものです。特定のコマンドに対する info ページを読むには、 info
に続いてコマンド名を指定してください (例: info ls
) 。
info ページはシェル内に直接表示されます。 info ページ内を移動するには、下記のキーをお使いください:
セクション (ノード) 内の前もしくは後ろへの移動: Space , <—
単純な上下移動: Page ↑ , Page ↓
info ページの終了: Q
なお、全てのコマンドに対してマニュアルページや info ページが用意されているとは限らないことに注意してください。両方が用意されているもの (主なコマンド類) のほか、マニュアルページと info ページのいずれかが用意されているものや、どちらも用意されていないものもあります。
ある特定のファイルやディレクトリを指定する際、そのファイルやディレクトリへの経路 (パス) を指定する必要があります。パスの指定方法には、下記の 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 つのファイル名もしくはディレクトリ名であるものと解釈してしまい、この例では My
と Documents
の 2 つのパスになってしまいます。
なお、パスを指定する際は、下記の 「ショートカット」 を利用して、入力を省略することができます:
チルダ記号 ( ~
) はホームディレクトリのショートカットです。たとえば、お使いのホームディレクトリの内容を一覧表示したい場合は、 ls
~
のように指定することができます。また、他のユーザのホームディレクトリを指定する場合は、 ls
~ユーザ名
のように入力します (このコマンドは、そのユーザのホームディレクトリを見る権限が与えられている場合にのみ出力することができます。詳しくは 13.6項 「ファイルのアクセス権」 をお読みください) 。たとえば ls ~tux
のようなコマンドを実行すると、 tux
というユーザ名のホームディレクトリの内容を一覧表示することになります。この仕組みは、たとえばネットワーク環境などで /home
以外のディレクトリ内にホームディレクトリが存在するような場合に、便利なショートカットとなります。
なお、カレントディレクトリがどこであっても、ホームディレクトリに戻りたい場合は cd ~
と入力するか、もしくは単にオプション無しで cd
と入力して実行してください。
相対パスで指定している場合は、カレントディレクトリはドット 1 つ ( .
) で指定することができます。これは特に cp
(ファイルやディレクトリのコピー) や mv
(ファイルやディレクトリの移動) 等のコマンドを実行する際に便利です。
また、ドットを 2 つ並べる ( ..
) と、ツリー構造内で 1 段上位のディレクトリ (ルートディレクトリに 1 段だけ近いほうのディレクトリ。親ディレクトリとも呼びます) を表すことができます。たとえばカレントディレクトリの親ディレクトリに移動するには cd ..
と入力して実行しますし、 2 段上位のディレクトリに移動したい場合は、 cd ../..
等のように指定して実行します。
知識をより深めるため、下記には様々な例を示します。 bash を利用すれば、ファイルやディレクトリに対する様々な基本作業を行うことができます。
ここでは、ホームディレクトリ内のどこかにあるファイルを、 /tmp
のサブディレクトリにコピーする流れを示しています。もちろん、コピー先のディレクトリも流れの中で作成するものとします。
カレントディレクトリがホームディレクトリであるものとして、まずは /tmp
内にサブ (1 段下位の/子の) ディレクトリを作成します:
下記のように実行します:
>
mkdir /tmp/test
mkdir
は 「make directory」 (ディレクトリの作成) の意味です。このコマンドを実行すると、新しい test
という名前のディレクトリを /tmp
ディレクトリ内に作成します。この場合、 test
ディレクトリを作成する際に使用したパスは絶対パスです。
作成されたディレクトリを確認するには、下記のように実行します:
>
ls -l /tmp
新しく作成した test
ディレクトリが、/tmp
ディレクトリ内に作成されているはずです。
新しく作成したディレクトリに移動するには、下記のように実行します:
>
cd /tmp/test
次に、ホームディレクトリ内のサブディレクトリに新しいファイルを作成し、これを /tmp/test
内にコピーします。このとき、相対パスを利用して指定を行います。
ファイルのコピーや移動、名前変更を行う前に、宛先となるディレクトリ内に同じ名前のファイルが存在していないかどうかをご確認ください。存在している場合は、別のファイル名でコピーや移動、名前変更を行うか、もしくは cp
や mv
などのコマンドに -i
のようなオプションを追加してください。これにより、既存のファイルに上書きする際に、確認プロンプトが表示されるようになります。オプションを設定しないと、 bash は何も確認を行うことなくファイルを上書きしてしまいます。
まずはホームディレクトリの内容を一覧表示します。下記のように入力して実行します:
>
ls -l ~
まずは新しいディレクトリ Documents
を、ホームディレクトリ内に作成します:
>
mkdir ~/Documents
続いて、作成した Documents
ディレクトリ内に myfile.txt
という空のファイルを作成します:
>
touch ~/Documents/myfile.txt
通常、 touch
コマンドは、既存のファイルに対して最終更新日時とアクセス日時を更新させるためのコマンドです。ですが、存在しないファイルに対して touch
コマンドを実行すると、新しくファイルを作成する処理を行います。
下記のように実行します:
>
ls -l ~/Documents
新しく作成したファイルが、一覧内に現れるようになります。
新しく作成したファイルをコピーするには、下記のように実行します:
>
cp ~/Documents/myfile.txt .
なお、末尾のドットを忘れずに入力してください。
このコマンドは bash に対して、ホームディレクトリ内の Documents
サブディレクトリにある myfile.txt
を、カレントディレクトリに名前を変更せずにコピーするよう指示しているものです。
下記のように入力すると、結果を確認することができます:
>
ls -l
/tmp/test
の一覧の中に、 myfile.txt
が現れるようになっているはずです。
ここでは、 myfile.txt
を tuxfile.txt
という名前に変更する作業を行います。最後はそのファイルと、 test
サブディレクトリを削除します。
ファイルの名前を変更するには、下記のように実行します:
>
mv myfile.txt tuxfile.txt
結果を確認するには、下記のように実行します:
>
ls -l
内容の一覧には、 myfile.txt
ではなく tuxfile.txt
が現れているはずです。
mv
は move
(移動) の意味で、 2 つのパラメータを指定します: 1 つめは移動元の指定で、 2 つめは移動先の指定です。また、 mv
には 2 種類の動作があります:
ファイルやディレクトリの名前変更
ファイルやディレクトリの新しい場所への移動
上記 2 つの一括実行
最後に、ファイルが不要であるという結論に至ったら、下記のように実行することで削除を行うことができます:
>
rm tuxfile.txt
bash は削除の際、何も確認メッセージを表示しません。
cd ..
のように実行すると、 1 階層上のディレクトリに移動することができます。移動の結果は、下記を実行すると確認することができます:
>
ls -l test
上記を実行して、 test
ディレクトリ内に何も残っていないことを確認します。
何も残っていなければ、下記を実行することで test
ディレクトリを削除することができます:
>
rmdir test
root
での作業 #Edit sourceroot
はスーパーユーザとも呼ばれ、システムの全てに対してアクセスし、様々な管理作業を実行する権限を持っています。システムに対する変更は無制限に行うことができるほか、全てのファイルに対するアクセス権も持っています。そのため、様々な管理作業のほか、 YaST のような管理を行うアプリケーションを実行する場合には、 root
の権限が必要となります。
su
の使用 #Edit sourceシェル内で一時的に root
になるには、下記の手順で行います:
su
コマンドを実行します。これで root
のパスワードを尋ねられます。
パスワードを入力します。 root
のパスワードが誤っていると、シェルはその旨を表すメッセージを出力します。この場合は、パスワードの再入力は求められず、 su
コマンドの入力からやり直す必要があります。パスワードの入力が正しい場合、プロンプトが変化してハッシュ記号 #
が表示されるようになります。これにより、 root
であることがわかるようになっています。
あとは必要な作業を行います。たとえばファイルの所有権を変更するような作業は、 root
しか行うことができません。たとえば下記のように実行します:
>
chownwilber
kde_quick.xml
root
での作業が終わったら、通常の一般ユーザに戻ります。戻るには、下記のように実行します:
>
exit
プロンプトからハッシュ記号が消え、 「一般の」 ユーザに戻ったことがわかります。
sudo
の使用 #Edit sourcesu
以外の方法としては、 sudo
というコマンドもあります。これは superuser do (「スーパーユーザで何かを行う」 の意味) の略で、 root
のみが実施できる作業を、 su
と同様に行うことができるコマンドです。 sudo の場合は、 su と異なり、管理者側であらかじめ設定した特定のユーザに対して、特定のコマンドのみを実行できるように設定することができます。また、システム側の設定に依存しますが、 sudo では一般のユーザが root
になるにあたって、自分自身の (root
のものではない) パスワード入力で root
のコマンドを実行するように設定することもできます。さらに sudo では、パスワードの入力時に 「チケット」 を発行する仕組みになっていて、一定の時間 (通常は数分程度) が経過するまでは再度パスワード入力を求めないようにもなっています。なお openSUSE では、既定で root
のパスワードの入力を求めるようになっています (システム管理者が設定を変更した場合を除きます) 。
一般ユーザにとっては、アカウントを切り替える (root
になって作業を行い、終わったら一般ユーザに戻る) 手間を省くことができる点がメリットとなります。たとえばファイルの所有権を sudo で変更する場合、コマンドは 3 つではなく 1 つだけで済みます:
>
sudo
chownwilber
kde_quick.xml
尋ねられたとおりパスワードの入力を行うと、コマンドが実行されます。なお、実行直後に root
での作業を行っても、パスワードの再入力は求められません。これはチケットが発行されていることによるもので、有効期限が切れるまでの間はパスワードの再入力無しでコマンドを実行することができるためです。ただし、一定の時間が経過すると、パスワードの再入力が必要となります。このような仕組みにより、一般ユーザが root
になって作業を行っていて、一般ユーザに戻るのを忘れてマシンを放置してしまったような場合、悪意のあるユーザが横からその権限を奪取してしまうような問題を防ぐことができます。
Linux では、ファイルやディレクトリ、プロセスなどは、作成したユーザに属するものとして扱われます。このルールには例外もありますが、例外については 第19章 「Linux でのアクセス制御リスト」 をお読みください。また、ファイルやディレクトリに対して割り当てられているグループは、そのユーザがそれらを作成する際、ユーザが属していたプライマリグループに設定されます。
新しいファイルやディレクトリを作成する際、それらに対するアクセス権 (パーミッション) は、事前に定義された方式で設定されます。ファイルやディレクトリの所有者である場合、それらに対するアクセス権を変更することができます。たとえば他のユーザから機密情報を読み取られたくない場合、同じグループ内のユーザや他のユーザに対して、読み込みや書き込み、実行などの制限を設定することができます。なお、 root
については例外で、このユーザであればファイルやフォルダの所有権を自由に変更することができます。
Linux システムでは、ファイルやフォルダなどに対して 3 種類のパーミッションセット (読み込み, 書き込み, 実行) が定義されています。また、ユーザの種類にも 3 種類 (所有者, グループ, その他のユーザ) が用意されています。
下記の例はシェル内で ls
-l
を実行した場合の例です。このコマンドは、ディレクトリの内容を一覧表示するコマンドで、ディレクトリ内の詳細な情報も表示することができるものです。
-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
のアクセス権をご覧ください:
種類 |
ユーザに対するパーミッション |
グループに対するパーミッション |
その他に対するパーミッション |
|
|
|
|
一番左の列は、最初の 1 文字に続いて、 3 つのブロックに分割できる 9 文字が書かれています。最初の 1 文字はオブジェクトの種類を示すもので、この場合はハイフン ( –
) であるため、 kde-start.xml
がファイルであることがわかります。ここの部分が d
になっている場合は、そのオブジェクトがディレクトリであることになります。たとえば 例13.1「ファイルやフォルダに対するアクセス権」 の local
ディレクトリがそれにあたります。
続く 3 つのブロックは、それぞれ左から所有者、グループ、その他に対するアクセス権を示しています。各ブロックはそれぞれ左から読み込み許可 ( r
) 、書き込み許可 ( w
) 、実行許可 ( x
) の 3 文字が書かれます。アクセス権がない場合は、 -
が書かれます。たとえば kde-start.xml
の例では、所有者は読み込みと書き込みの両方ができるものの、実行の許可が無いことになります。また、 users
グループとその他のユーザには読み込みの許可のみで、書き込みと実行の許可が無いことになります。
アクセス許可の効果は、そのオブジェクトの種類 (ファイル/ディレクトリ) によって少し異なります。下記の表では、アクセス許可の効果を示しています:
アクセス権 |
ファイルの場合 |
ディレクトリの場合 |
---|---|---|
読み込み (r) |
対象のユーザは、ファイルを開いて読み込むことができるようになります。 |
対象のユーザは、ディレクトリの内容を閲覧できるようになります。このアクセス許可がないと、ユーザは |
書き込み (w) |
対象のユーザは、ファイルの内容を変更することができます。データの追加や削除だけでなく、ファイルの内容を消去することもできます。ただし、ファイルの存在するディレクトリにおいて、対象のユーザが書き込み権限を持たない限り、ファイル自身を削除することはできません。 |
対象のユーザは、そのディレクトリ内にファイルを作成したり、名前変更や削除を行ったりすることができるようになります。 |
実行 (x) |
対象のユーザはファイルを実行することができます。このアクセス許可は、プログラムやシェルスクリプトなどの場合に意味のあるものであって、テキストファイルなどでは意味がありません。また、プログラムを直接実行する場合は、対象のユーザが読み込み権限を持たなくても、実行することはできてしまいます。ただし、シェルスクリプトや Perl スクリプトなどのプログラムの場合は、読み込んで解釈する必要があることから、同時に読み込み権限も必要となります。 |
対象のユーザは、そのディレクトリに移動してファイルを実行することができます。そのディレクトリに対して読み込み権限がない場合、ディレクトリ内のファイルの一覧を取得することはできませんが、ファイル名が分かっていればアクセスすることは可能です。 |
なお、特定のファイルに対するアクセス権は、ファイル自身に対するアクセス権と、ディレクトリに対するアクセス権の 両方 が必要となることに注意してください。
Linux では、ファイルやディレクトリ、プロセスなどは、作成したユーザに属するものとして扱われます。また、ファイルやディレクトリに対して割り当てられているグループは、そのユーザがそれらを作成する際、ユーザが属していたプライマリグループに設定されます。また、新しいファイルやディレクトリを作成する際、それらに対するアクセス権 (パーミッション) は、事前に定義された方式で設定されます。詳しくは 13.6項 「ファイルのアクセス権」 をお読みください。
ファイルやディレクトリの所有者 (および root
) であれば、それらのアクセス権を変更することができます。
ファイルやディレクトリに対するアクセス権を変更するには、 chmod
コマンドを利用して、下記のパラメータを指定します:
設定するアクセス許可の対象
追加もしくは削除するアクセス権の種類
アクセス権を変更するファイルやディレクトリ (スペースで区切って指定します)
アクセス許可の対象としては、下記のいずれかを指定します: ファイルの所有者 (u
(user)), ファイルを所有するグループ (g
(group)), その他のユーザ (o
(others)) 。また、アクセス権の種類としては、読み込み (r) 、書き込み (w) 、実行 (x) のいずれか (複数も可) を指定します。
root
であれば、ファイルの所有者を変更することもできます。 chown
(CHange OWNer; 所有者の変更) コマンドを利用すると、異なるユーザに所有者を変更することができます。
下記はシェル内での ls
-l
の実行例です。
-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
グループと同じで、読み込みだけができるようになっています。
自分自身が tux
である場合、ファイルのアクセス権を変更するには、下記のようにして行います:
kde-start.xml
ファイルに対して、 users
グループからの書き込みを許可するには、下記のように実行します:
>
chmod g+w kde-start.xml
kde-start.xml
ファイルに対して、 users
グループとその他のユーザからの書き込みを許可するには、下記のように実行します:
>
chmod go+w kde-start.xml
全てのユーザに対して、書き込み権限を削除するには、下記のように実行します:
>
chmod -w kde-start.xml
何もユーザの種類を指定しない場合は、全てのユーザに対して適用されます。具体的には、ファイルの所有者と所有グループ、そしてその他のユーザそれぞれに適用されます。ただし、所有者である tux
の場合は、書き込み許可を与えることなく書き込むことができます。
ディレクトリ local
に対して、 users
とその他のユーザからの移動を禁止するには、下記のように実行します:
>
chmod go-x local
kde_quick.xml
と gnome_quick.xml
の 2 つのファイルに対して書き込み許可を与えたい場合は、下記のように実行します:
>
chmod o+w kde_quick.xml gnome_quick.xml
自分自身が tux
である場合で、 kde_quick.xml
ファイルの所有者を他のユーザ wilber
に切り替えるには、下記のように実行します:
su
などを利用して、 root
になります。
下記のように実行します:
#
chownwilber
kde_quick.xml
下記を実行すると結果を確認することができます:
>
ls -l kde_quick.xml
下記のように出力されるはずです:
-rw-r--r-- 1 wilber users 47896 6月 21 09:46 kde_quick.xml
所有者の変更が終わったら、忘れずに元の一般ユーザに戻っておいてください。
bash でコマンド入力を行うにあたっては、数多くのキーボード入力が必要となります。この章では、入力の手間と時間を省くためのさまざまな機能を紹介しています。
既定では、 bash は入力したコマンドを 「記憶」 します。この機能は 履歴 機能と呼ばれます。履歴には参照する機能だけでなく、再実行する機能も備わっています。履歴から実行するには、 ↑ を何回も押して再実行したい履歴を探します。なお、 ↓ を押すと、新しいほうに向かって履歴を探ることができます。コマンドの冒頭部分を覚えている場合は、冒頭部分を入力して Page ↑ を押すと、該当する履歴を検索することができます。
必要な履歴が見つかったら、 Enter を押して実行するまでの間であれば、そこからコマンドラインの編集を行うことができます (たとえばファイル名やパスなどを変えたりすることができます) 。編集はカーソルキーを利用して行い、入力は通常通りの入力で行います。
また、履歴内の特定のコマンドを検索することもできます。この場合は、 Ctrl–R を押して、インクリメンタル検索機能をお使いください。機能が起動すると、下記のようなプロンプトになります:
>
(reverse-i-search)`':
あとは検索したい文字列を入力するだけです。文字を入力するごとに検索範囲が狭められます。入力した内容はコロン (:
) の左側に、検索結果はコロンの右側にそれぞれ表示されます。検索結果を受け入れるには、 Esc を押します。これでプロンプトが元の表示に戻りますので、あとは必要に応じてコマンドラインを編集し、 Enter を押すと実行することができます。
bash ではもう 1 つ便利な機能があります。それはファイル名やディレクトリ名を補完する機能です。ファイル名やディレクトリ名の一部を入力して <Tab> を押すと、該当するものが 1 つしかなかった場合は、そのままファイル名やディレクトリ名の残りが自動的に入力され、カーソルがファイル名やディレクトリ名の末尾に移動します。このような仕組みにより、残りのオプションもすぐに入力できるようになっています。逆に、該当するものが複数存在する場合 (たとえば同じ文字で始まるファイルが複数あるような場合) は、名前が異なる箇所まで自動的に入力が行われます。ここからさらに <Tab> を押すと、該当するもの全てを一覧表示することができます。あとはどれを選択するのかをキー入力で選んで、さらに <Tab> を押して範囲を狭めていってください。このような仕組みは、ファイルやディレクトリが実際に存在しているかどうか (および、正しいスペルで入力しているかどうか) を確認する手段としても、利用することができます。
パスを指定する箇所では、 1 つもしくは複数の文字をワイルドカードにすることができます。ワイルドカードとは、他の文字に置き換えることのできる文字で、 bash では下記の 3 種類のワイルドカード機能を提供しています:
ワイルドカード |
機能 |
|
任意の 1 文字と置き換えることのできる文字です |
|
任意の長さの文字列と置き換えることのできる文字です |
|
[] の内側で指定したグループのいずれかの文字に置き換えることのできる指定です |
下記の例では、 bash におけるこれらの使用方法を説明しています。
既に 13.4.1項 「ファイルやディレクトリの作業例」 の流れに従って作業を行っていた場合、履歴機能としていくつかのコマンドラインが記憶されているはずです。下記では、既に上述の流れを実施していて、履歴が存在する場合の手順を示しています。
まずは cd ~
が現れるまで、 ↑ を何度も押していきます。
Enter を押してコマンドを実行すると、ホームディレクトリへの移動が行われます。
たとえば、お使いのホームディレクトリ内に Documents
と Desktop
というディレクトリがあるものとします。
まずは cd D
まで入力して <Tab> を押します。
押しても特に何も起こりません。 bash は複数のディレクトリが存在することを知っているためです。
再度 <Tab> を押すと、選択肢が表示されます:
>
cd D
Desktop/ Documents/ Downloads/>
cd D
プロンプトは入力した時点のままの表示になっています。ここからさらに文字を入力して <Tab> を押します。
これで bash は残りの文字を埋めるようになります。
コマンドラインの入力が終わったら、 Enter を押すと実行することができます。
この例では、お使いのホームディレクトリ内に様々な拡張子のファイルが存在していて、myfile1.txt
, myfile2.txt
など、異なるファイル名で複数のバージョンのファイルが保存されているものとします。このときのワイルドカードの使い方を説明しています。
まずはホームディレクトリ内に、いくつかのテストファイルを作成します:
touch
コマンドを利用して、いくつかの (中身が空の) ファイルを作成します。たとえば .pdf
, .xml
, .jpg
などの拡張子で作成します。
ファイルの作成は、 bash の履歴機能を利用すれば繰り返し (ファイル名を変えながら) 実行できますし、 touch
コマンドは複数のファイルを指定することができますので、スペース区切りでファイル名を複数指定して、一括で実行してもかまいません。
また、同じ拡張子 (たとえば .html
) のファイルを 2 つ用意します。
さらに、連続した数字を付与したファイルを複数作成します。下記のように実行します:
>
touch myfile{1..5}.txt
上記のコマンドを実行すると、 myfile1.txt
, …, myfile5.txt
をそれぞれ作成します。
まずはディレクトリの内容を一覧表示します。下記のような出力になるはずです:
>
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
ワイルドカードを使用すると、様々な条件を指定して一部のファイルを効率的に指定することができます:
.html
という拡張子のファイルを全て表示するには、下記のように実行します:
>
ls -l *.html
myfile数字.txt
のファイルを一覧表示するには、下記のように実行します:
>
ls -l myfile?.txt
上記の例では ?
というワイルドカードを使用していますが、これはファイルの数字部分が 1 桁のものしか表示することができないことに注意してください。たとえば myfile10.txt
というファイルが存在する場合、このファイルを含めるには ?
を *
に変更する必要があります。また、数字部分が 2 桁のもののみを一覧表示するには、 myfile??.txt
となります。
myfile1.txt
, myfile2.txt
, myfile3.txt
, myfile5.txt
をそれぞれ削除するには、下記のように実行します:
>
rm myfile[1-3,5].txt
下記を実行すると、結果を確認することができます:
>
ls -l
削除を行った後は、 myfile4.txt
ファイルだけが残っているはずです。
なお、複数のワイルドカードを同時に指定することもできます。たとえば上記の例では、 rm myfile[1-3,5].*
と実行しても、 rm myfile[1-3,5].txt
と同じ結果になります。これは、該当するファイルが全て .txt
という拡張子であるためです。
rm
コマンドでのワイルドカードについてrm
コマンドを使用する際、ワイルドカードの使用は非常に便利なものですが、その反面として危険性もはらんでいます。場合によっては、必要以上にファイルを削除してしまうこともあります。何が削除されるのかを事前に確認するため、まずは rm
の前に ls
を利用して、ワイルドカードを指定しておくことをお勧めします。
コマンドラインからファイルを編集するには、 vi エディタの使用方法を知っておく必要があります。 vi はほとんどの UNIX/Linux システムで利用できる既定のエディタです。 vi ではモードと呼ばれる概念があり、これによってキーを入力しても異なる動作になるようになっています。ただし、初心者には少しわかりにくい仕組みであることから、本章でごく基本的な操作方法を説明しています。なお、場合によっては vi エディタしか利用できない状況もあります。
基本的には、 vi には 3 種類の操作モードがあります:
このモードでは、 vi はキーの組み合わせをコマンドとして解釈します。単語の検索や行の削除などの作業を行うことができます。
このモードでは、通常のテキストをそのまま入力することができます。
このモードは、切り替える際に :
を入力することから、コロンモードとも呼ばれ、テキストの検索や置換などのより複雑な処理を行うことができます。
下記の (非常にシンプルな) 例では、 vi でファイルを開いて編集し、保存を行って終了するまでの流れを説明しています。
下記の例では様々なコマンドを入力していますが、 vi でのキー入力は基本的に小文字で行います。下記の説明では、敢えて大文字を必要とする場合に限り、 Shift を含めたキー入力で表しています。
vi で新しくファイルを作成して開くには、下記のように実行します:
>
vi textfile.txt
既定では、 vi は コマンド モードで起動します。ここでは、直接テキストを入力することはできません。
I を押して挿入モードに切り替えます。最下行の表示が変化しますので、テキストを挿入できる状態になっていることが分かります。
何かテキストを記述します。改行を挿入したい場合は、まず Esc を押してコマンドモードに戻り、 O を押して改行を入れ、再度挿入モードに戻ります。
挿入モードでは、矢印 (カーソル) キーと Del でテキストを編集することができます。
vi を終了するには、まず Esc を押してコマンドモードに切り替えます。そこから : を押して拡張モードに切り替えます。最下行にコロンが表示されるようになります。
記入した内容を保存して vi を終了するには、 wq
( w
は write
(書き込む) の意味、 q
は quit
(終了) の意味 ) と入力して Enter を押します。ファイル名を変えて保存したい場合は、 w ファイル名
のように入力して Enter を押します。
保存せずに vi を終了するには、 q!
と入力して Enter を押します。
bash には、ファイル名やファイルの内容を検索する方法がいくつか用意されています:
find
find
は指定したディレクトリ内でファイルを検索するためのコマンドです。最初のパラメータで検索を開始するディレクトリを指定します。以降はオプションで、 -name
はファイル名に対する条件を指定します (ワイルドカードでも指定できます) 。なお、データベースを使用する locate
コマンドとは異なり、 find
は実際のディレクトリをそのまま検索します。
grep
grep
はファイルの内容を検索するためのコマンドで、主にテキストファイル内の検索を行います。検索文字列に合致した箇所が見つかると、このコマンドはファイル名と行全体を表示します。必要であれば、ファイル名にワイルドカードを指定することもできます。
ホームディレクトリ内のファイルを検索し、 .txt
という拡張子のファイルだけを表示するには、下記のように実行します:
>
find ~ -name '*.txt' -print
たとえば music
という文字列を内容に含むファイルを、ホームディレクトリ以下から検索するには、下記のように実行します:
>
grep music ~/*
grep
は既定では大文字と小文字を区別して動作します。そのため、上記のコマンドでは Music
という文字列は検索に該当しないことになります。大文字と小文字を区別しない場合は、 -i
オプションを指定してください。
複数の単語からなる文字列を検索する場合は、文字列を引用符で括ってください。たとえば下記のようになります:
>
grep "music is great" ~/*
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
にはスクロールのような機能がないので、非常に使いづらく思えてしまいますが、しばしば他のコマンドと組み合わせて使用するためのコマンドです。
作業内容によっては、コマンドの出力した結果をファイルに出力したり、複数のコマンドを組み合わせて、一方のコマンドの出力を他方のコマンドの入力として使用したりしたい場合があります。シェルでは、このような仕組みをリダイレクトやパイプとして提供しています。
通常、シェルの標準的な出力先 (標準出力) は画面 (シェルのウインドウ) に、標準的な入力元 (標準入力) はキーボードにそれぞれ設定されています。それぞれ対応するシンボルを指定することで、入出力を他のファイルやコマンドに流すことができます。
>
というシンボルを指定すると、出力結果をファイルに流す (リダイレクトする) ことができます (出力リダイレクト) 。また、 <
というシンボルを指定すると、逆にファイルの内容を入力として使用することができます (入力リダイレクト) 。
パイプ記号 (|
) を使用しても、出力をリダイレクトすることができます。ただし、パイプ記号の場合、出力先はファイルではなく次のコマンドになります。つまり、複数のコマンドをパイプで繋げて指定すれば、前のコマンドの出力を次のコマンドの入力として使用できることになります。
ls
の出力をファイルに保存するには、下記のように実行します:
>
ls -l > filelist.txt
このコマンドを実行すると、カレントディレクトリに filelist.txt
というファイルが作成され、 ls
の出力結果が書き込まれます。
ただし、コマンドの実行よりも前に filelist.txt
というファイルが存在していると、このコマンドを実行することでファイルが上書きされてしまいます。これを防ぐには、 > ではなく >>
と指定します。たとえば下記のようになります:
>
ls -l >> filelist.txt
上記を実行すると、 ls
コマンドの出力が、既存の filelist.txt
ファイルに追記されるようになります。なお、ファイルが存在しない場合は、新規に作成されます。
リダイレクトは逆方向にも使用することができます。キーボードからの入力ではなく、ファイルからの入力を行いたい場合は、たとえば下記のように実行します:
>
sort < filelist.txt
上記を実行すると、 filelist.txt
の内容を読み込んで、それを並べ替え (sort) て出力します。出力先は画面になります。リダイレクトを組み合わせれば、結果を他のファイルに流すこともできます:
>
sort < filelist.txt > sorted_filelist.txt
たとえば ls
-l
など、コマンドが長い出力を生成するような場合、パイプを利用して less
のようなコマンドに流すことで、出力結果をスクロールしながら読むことができるようになります。たとえば下記のようになります:
>
ls -l | less
上記のように実行することで、カレントディレクトリの内容を less
で読むことができるようになります。
パイプは、しばしば grep
コマンドとも併用します。これは、出力された内容から特定の文字列を含む箇所だけを抜き出して表示する際に利用するもので、たとえば下記を実行すると、 tux
が所有するファイルだけを出力することができます:
>
ls -l | grep tux
13.8項 「テキストの編集」 で示しているとおり、シェルからは様々なプログラムを起動することができます。プログラムによっては、 X Window System のようなグラフィカルユーザインターフェイス (GUI) を持つものもあります。たとえば KDE や GNOME をお使いの環境で、ホームディレクトリ内にある vacation.pdf
というファイルを読みたい場合、 okular ~/vacation.pdf
(もしくは evince ~/vacation.pdf
) と入力すると、 PDF ビューアが起動して PDF ファイルを表示することができます。
PDF ビューアを開いている間、端末ウインドウのほうをご覧ください。プロンプトが表示されていないことに気がつくかと思います。つまり、この時点では何もコマンドを受け付けなくなっています。 PDF ビューアを終了すると、再度プロンプトが表示されるようになり、コマンドも実行できるようになります。このような問題を回避するには、プログラム (例: PDF ビューア) を起動している間に Ctrl–Z を押してプロセス (処理) を一時停止し、 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項 「プロセス」 も合わせてお読みになることをお勧めします。
Linux では、 2 種類のコマンドを使用してデータを転送しやすい形にすることができます:
1 つは書庫プログラムと呼ばれ、複数の (一般的には多数の) ファイルを 1 つのファイルにまとめます。一般的には tar
や cpio
などを使用します。
もう 1 つはデータ圧縮プログラムと呼ばれ、元のデータに展開できる状態を維持しながら、よりファイルを小さくします。一般的には gzip
や bzip2
を使用します。
上記 2 種類のコマンドを組み合わせて使用することで、データ圧縮型書庫を実現することができます。他のオペレーティングシステムでは ZIP
や RAR
などと呼ばれるファイルです。
たとえば test
ディレクトリ以下の全てのファイルとサブディレクトリを、 testarchive.tar
というファイルにまとめたい場合は、下記のように実行します:
シェルを開きます。
cd
コマンドを利用して、 test
ディレクトリのある場所まで移動します。
下記のように入力して実行し、ファイルを書庫に格納します:
>
tar -cvf testarchive.tar test
-c
オプションは書庫の作成を、 -v
オプションは処理したファイルの情報を出力する指示を、 -f
オプションは出力先のファイルの指定を、それぞれ行っています。
test
ディレクトリに存在していたファイルやディレクトリは、そのまま削除されずそのまま保持されます。
書庫ファイルの内容を表示するには、下記のように実行します:
>
tar -tf testarchive.tar
書庫の内容を展開するには、下記のように実行します:
>
tar -xvf testarchive.tar
なお、カレントディレクトリ以下に書庫内と同じファイルやディレクトリが存在する場合、それらは何も警告されることなく上書きされます。
ファイルを圧縮するには、 gzip
または bzip2
コマンドを使用します。後者のほうが、より高い圧縮率になります。
下記の例では、 手順13.8「ファイルの書庫の作成」 で作成した書庫をそのまま使用しています。
書庫を圧縮するには、下記のように実行します:
>
gzip testarchive.tar
ls
コマンドを実行するとわかりますが、上記のコマンドを実行すると testarchive.tar
というファイルが削除され、その代わりに testarchive.tar.gz
というファイルが作成されます。
上記以外にも、 bzip2 testarchive.tar
のように実行すると、より高い圧縮率で圧縮を行うことができます。
今度は圧縮を展開して、書庫からファイルを取り出してみます:
書庫を作成して圧縮した手順とは逆に、圧縮を展開してから書庫の内容を取り出します:
>
gzip --decompress testarchive.tar.gz
>
tar -xvf testarchive.tar
展開と取り出しを一括で行うこともできます:
>
tar -xvf testarchive.tar
ls
を実行すると、新しく test
というディレクトリが作成され、ホームディレクトリにある test
ディレクトリと同じ内容が作成されます。
本章では、主要な Linux コマンドについて、その概要を示しています。実際には、ここで掲載しているものよりもずっと多くのコマンドが存在しています。なお、コマンドの紹介では、パラメータの一覧のほか、一般的な使い方についても説明しています。
パラメータは必要に応じて変えてください。たとえば file
という名前のファイルが存在していなければ、 ls file
を実行しても意味がありません。また、パラメータは複数を組み合わせて使用することもできます。たとえば ls -l -a
を短くして、 ls -la
のように実行することもできます。
この章では、ファイルを管理するための主要なコマンドを紹介しています。一般的なファイル管理のほか、ファイルシステムのアクセス制御リスト (ACL) の操作に関するコマンドも含まれています。
ls
オプション ファイル何もパラメータを指定せずに ls
を実行すると、このプログラムはカレントディレクトリの内容を短い形式で出力します。
-l
詳細な形式で出力します
-a
隠しファイルを表示します
cp
オプション コピー元 コピー先コピー元
から コピー先
にファイルをコピーします。
コピー先
が既に存在する場合、確認メッセージを表示して待機します。
コピーを再帰的に実行します (サブディレクトリを含めてコピーします)
mv
オプション 移動元 移動先移動元
から 移動先
にコピーを行い、成功すれば 移動元
を削除します。
移動を行う前に、 移動元
のバックアップコピーを作成します
移動先
が既に存在する場合、確認メッセージを表示して待機します。
rm
オプション ファイルシステムから指定したファイルを削除します。ディレクトリについては、 -r
オプションを指定しない限り、削除されません。
-r
既存のサブディレクトリについても削除します。
-i
各ファイルを削除する際に、確認メッセージを表示して待機します。
ln
オプション リンク元 リンク先リンク元 から リンク先 に対して、内部リンクを作成します。通常、リンクは同じファイルシステム内のものに対してのみ設定することができますが、 ln
に -s
オプションを付けて実行すると、ファイルシステムを跨いでリンクを行うことができるシンボリックリンクを作成することができます。
シンボリックリンクを作成します。
cd
オプション ディレクトリカレント (現在作業中の) ディレクトリを変更します。何もパラメータを付けずに cd
を実行すると、ホームディレクトリに移動します。
mkdir
オプション ディレクトリ新しいディレクトリを作成します。
rmdir
オプション ディレクトリディレクトリ内に何も残っていない場合にのみ、指定したディレクトリを削除します。
chown
オプション ユーザ名[:グループ]
ファイルファイルの所有者を、指定したユーザに変更します。
-R
全てのサブディレクトリ内のファイルとディレクトリに対して、この変更を行います。
chgrp
オプション グループ名 ファイル名ファイルの所有グループを、指定したグループに変更します。なお、ファイルの所有者は、現時点で設定されているグループと新しいグループの両方に所属している場合にのみ、グループを変更することができます。
chmod
オプション モード ファイルアクセス権を変更します。
モード
は 3 種類の部分 (対象
, アクセス
, アクセス種別
) から構成されています。 対象
には下記の文字を指定することができます:
ユーザ
グループ
その他
アクセス
には +
(アクセスを許可する) もしくは -
(アクセスを拒否する) のいずれかを指定します。
アクセス種別
には下記の文字を指定することができます:
読み込み
書き込み
実行 (ファイルに対しては実行を、ディレクトリに対してはそのディレクトリへの移動を表します)
setuid ビット (アプリケーションやプログラムに対して、そのファイルの所有者に成り代わって実行するかどうかを示すビットです)
上記の方法以外にも、数値で指定することができます。数値の場合は 4 桁で指定し、それぞれの桁は 1, 2, 4 の数値を必要に応じて足した値を指定します。できあがった数値はバイナリマスクと呼ばれます。 1 桁目は setuid (4), setgid (2), sticky (1) を表し、 2 桁目はファイルの所有者に対するアクセス権を、 3 桁目はグループに対するアクセス権を、 4 桁目はその他に対するアクセス権をそれぞれ指定します。 2 桁目以降は、読み込み (4), 書き込み (2), 実行 (1) の意味になります。ファイルの所有者に対しては、実行可能なファイルの場合 6 か 7 の数値を指定します。
gzip
パラメータ ファイルこのプログラムは、複雑な数学的アルゴリズムを利用して、ファイルの内容を圧縮します。圧縮されたファイルには、拡張子 .gz
が付けられ、通常通り使用する場合には、あらかじめ展開処理を行わなければならなくなります。なお、このコマンドでは、複数のファイルやディレクトリをまとめることはできません。複数のファイルやディレクトリをまとめる場合は、 tar
コマンドをお使いください。
以前に 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
は実際のディレクトリ内を検索します。
file
オプション ファイルLinux ではファイル名に拡張子を付けることができますが、必ずしも必要となるものではありません。 file
コマンドでは、指定したファイルの種類を判別することができます。 file
コマンドの出力を元にすることで、ファイルを開くことのできるアプリケーションを判断することができます。
圧縮ファイルの内容を展開して判別します。
cat
オプション ファイルcat
コマンドはファイルの内容を出力するためのコマンドです。ただし、ファイルの内容全体を一時停止することなく一括で出力してしまうことに注意してください。
左側に行番号を出力します。
less
オプション ファイルこのコマンドは、指定したファイルの内容を見やすく表示するためのコマンドです。Page ↑ や Page ↓ でそれぞれ半ページずつ前もしくは後ろに移動することができるほか、 Space で 1 ページ分後ろに移動することもできます。また、 Home と End で、それぞれファイルの冒頭と末尾に移動することもできます。プログラムを終了するには、 Q を押します。
grep
オプション 検索文字列 ファイルgrep
コマンドは、指定したファイルの内容を検索するためのコマンドです。検索文字列に該当する箇所が見つかると、 検索文字列 を含む行が表示されます。
-i
大文字と小文字を区別せずに検索します。
-H
該当する行を表示せず、該当したファイルの名前のみを表示します。
-n
該当した箇所を表示する際、行番号も合わせて表示します。
-l
検索文字列 に該当していないファイルのファイル名のみを表示します。
diff
オプション ファイル_1 ファイル_2diff
コマンドは 2 つのファイルの内容を比較し、違いのあった箇所だけを出力します。これはプログラマがよく使用するコマンドで、ソースコード内の変更箇所だけを抽出する際に使用します。
-q
2 つのファイルに差異があるかどうかだけを表示します。
-u
「Unified」 形式の差分を出力します。これにより、より読みやすい出力になります。
mount
オプション デバイス マウントポイントこのコマンドは、ハードディスクや CD-ROM ドライブなどのデータメディアを、 Linux ファイルシステムのディレクトリ内に割り当てる (マウントする) ことができるコマンドです。
-r
読み込み専用でマウントします。
-t ファイルシステム
ファイルシステムの種類を指定します。 Linux で使用しているハードディスクの場合、 ext4
, xfs
, btrfs
などがよく使われます。
/etc/fstab
に定義されていないハードディスクの場合、デバイスの種類も指定しなければなりません。この場合、 root
だけがマウントすることができます。一般ユーザからファイルシステムをマウントできるようにするには、/etc/fstab
内の適切な箇所に、カンマ区切りで user
というオプションを追加する必要があります。詳しくは mount(1)
のマニュアルページをお読みください。
umount
オプション マウントポイントこのコマンドは、ファイルシステムから特定のドライブをマウント解除 (アンマウント) します。データの損失を防ぐため、リムーバブルメディアをお使いの場合は、メディアを取り出す前に、このコマンドを実行してください。通常は mount
コマンドと同様に、 umount
も root
だけが実行できます。一般ユーザからファイルシステムをマウントできるようにするには、/etc/fstab
内の適切な箇所に、カンマ区切りで user
というオプションを追加する必要があります。
この章では、システムの情報を表示したりプロセスやネットワークを制御したりする際に必要となる、最も重要なコマンドをいくつか紹介しています。
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) のマニュアルページをお読みください。
top
オプションtop
コマンドは、現在動作中のプロセスに関する概要を表示することができます。 H を押すと、プログラムをカスタマイズするための簡潔な説明が表示されます。
ps
オプション プロセス_ID何もオプションを付けずに実行すると、自身が所有する (=開始した) 全てのプログラムやプロセスの一覧表が表示されます。なお、このコマンドに対するオプションは、ハイフンを付けずに指定します。
自分自身が所有するものだけでなく、全てのプロセスを詳細に表示します。
kill
オプション プロセス_ID時によっては、プログラムを通常の方法で終了させることができない場合があります。ほとんどの場合、 kill
の後ろにプロセス ID (top
コマンドや ps
コマンドで取得することができます) を指定することで、プログラムを終了することができます。 kill
コマンドは通常、 TERM というシグナルを送信して、プログラム側に終了を依頼します。これでもうまく終了できない場合は、下記のパラメータを試してみてください:
TERM ではなく KILL シグナルを送信します。このシグナルであれば、ほぼ全ての場合においてプロセスを強制終了することができます。
killall
オプション プロセス名このコマンドは kill
に似たコマンドですが、プロセス ID ではなくプロセス名を指定して実行します。このコマンドでは、同じ名前のプロセス全てに対して、シグナルを送信します。
ping
オプション ホスト名または_IP_アドレスping
コマンドは TCP/IP ネットワークの基本的な動作をテストするための標準的なツールで、宛先のホストに対して小さなデータパケットを送信し、その応答を待ちます。相手側から応答があれば、 ping
コマンドはその旨を示すメッセージを表示しますので、これによってネットワークリンクが確立できていることがわかるようになっています。
-c
回数データパケットの送信回数を指定します。ここで指定した回数を送信したのち、しばらくしてプログラムが終了します (既定では、何度もパケットを送り続けます) 。
-f
flood ping と呼ばれる ping の送信方法を実施します。この方法では、できる限り多くのパケットを送信してネットワークのテストを行います。 root
のみに提供されている機能です。
-i
間隔2 つのデータパケットの送信間隔を指定します (既定値: 1 秒) 。
host
オプション ホスト名 サーバドメインネームシステム (DNS) に対して、ホスト名を IP アドレスに変換するように依頼します。このツールを利用することで、ネームサーバに対する問い合わせを送信することができます。
ssh
オプション [ユーザ名@]ホスト名
コマンドSSH はネットワークを介して特定のホスト内で作業を行うことができる、インターネットプロトコルです。 SSH は Linux プログラムの名前でもあり、 SSH プロトコルを利用してリモートのコンピュータのシェルに接続します。
passwd
オプション ユーザ名ユーザは自分自身のパスワードを任意の時点で変更することができます。管理者である root
の場合、このコマンドでユーザ名を指定することで、システム内の任意のユーザに対するパスワードを変更することができます。
su
オプション ユーザ名su
は現在のセッション内で、他のユーザに成り代わる (Switch User) ためのコマンドです。ユーザ名を指定して実行すると、対応するパスワードの入力を求められます。なお、 root
から実行している場合は、パスワードの入力は求められません。これは、 root
が全てのユーザの管理者であるためです。ユーザ名を指定せずに実行した場合、 root
のパスワード入力を求められ、パスワードが適合していれば root
になることができます。また、 su -
のように実行すると、異なるユーザ向けにログインシェルを起動するようになります。
halt
オプションデータの損失を避けるため、このプログラムでシステムをシャットダウンしてください。
reboot
オプションhalt
コマンドと似た仕組みで、こちらはシステムを再起動します。
clear
このコマンドは、端末内の可視領域を消去します。オプションはありません。
本章で記述しているよりもずっと多くのコマンドが、システムには存在しています。他のコマンドに関する情報や、さらに詳しい情報については、 O'Reilly 社発行の書籍 Linux in a Nutshell をお読みになることをお勧めします。