Linuxのコマンドは、シェルと呼ばれるプログラムによって起動/制御され、カーネルと呼ばれるプログラムによって実行/管理される。シェルは、端末(ターミナル)と呼ばれるプログラム内で動作する。端末、シェル、カーネルの概要と例は以下。
項目 | 概要 | 例 |
---|---|---|
端末 | キーボードなどによって入力された文字列(?)をシェルに渡す。 | xterm, kterm, GNOME 端末 |
シェル | 端末から渡される文字列を解釈し、コマンドとしてカーネルに実行するようにお願いする。 | sh, bash, csh, tcsh, ksh, pdksh, zsh, ash |
カーネル | コンピュータの中核。CPU、メモリ、ハードディスクとかハードウェアを管理し、シェルからの要求に答える。 | Linuxカーネル, UNIXのカーネル達 |
ユーザーは上記のうち好きなもの選び使用することが出来る。よって、xterm内でbashを用いたり、GNOME 端末内でcshを用いたりすることが出来る。以下では、bash, Linuxカーネル, GNOME 端末を使用することを考える。
Linuxコマンドの実体は、主にC言語などで書かれコンパイルされたプログラムであり、/binといったディレクトリ内に置いてある。シェルは、入力されたコマンドと同じ名前のプログラムを、/binといったディレクトリ内から探し出し、起動する。よって、実行できるコマンドは、使用するシェルの種類とは無関係である(?)。すなわち、bashもcshも実行できるコマンドは変わらない(?)。シェルの種類の違いが顕著に現れるのは、シェルスクリプトなどを書いたときである(?)。ただし、シェル固有の内部コマンドというものが存在し、このコマンドはシェルによって異なる。
メモ) ここで言う端末とは、正式には端末エミュレータと呼ぶ?コマンドがどのディレクトリにあるかを探すコマンドは以下。
$ which コマンド名
シェルがコマンドを探してくるディレクトリ、すなわちパスの確認は以下の様に打つ。
$ echo $PATH bash: /usr/local/bin:/usr/bin:/bin
例えば、lsというコマンドが端末に入力された場合のコマンド実行の流れを予想する。(勘。おそらく間違っている。これはソフトの面から見た解釈?)
コマンドについてのマニュアル/ヘルプの読み方を書く。マニュアル/ヘルプを表示するには、以下のように打つ。
$ man コマンド # manコマンドで、コマンドのマニュアルを表示。 $ コマンド --help # コマンドのヘルプを表示。
$ man ln と打つと、lnのマニュアルが以下のように表示される。
NAME ln - make links between files SYNOPSIS ln [options] source [dest] ln [options] source... directory POSIX options: [-f][--] GNU options (shortest form): [-bdfinsvF][-S backup-suffix][-V{num- bered,existing,simple}][--help][--version][--] ...続く
上記のSYNOPSISのところに、コマンドの使い方の決まり、すなわち書式が書かれている。上記の例では、lnの書式は2種あることがわかる。
[ ]で囲まれた部分は書かなくもよいことを示す。逆に[ ]で囲まれていない部分を書かないとエラーになる。souce... の"..."は引数を2個以上書いてもよいことを示す。すなわち、
$ ln source_1 source_2 source_3 directory_1
のように書いてもよい。
メモ)gftpのマニュアルには、
SYNOPSIS gftp [options] [[proto://][ user : [pass] @] site [: port ][/ directory ]]
とあるが、実際にコマンドを書くときは、スペースを入れてはならない。
$ gftp ssh2:// user_1 : pass_1 @ site_1/ directory_1 # これはうまくいかない。 $ gftp ssh2://user_1:pass_1@site_1/directory_1 # これはうまくいく。
網羅しない。
ディレクトリを移動には、cdコマンドを使う。
$ cd directory # directoryに移動したいディレクトリの相対/絶対パスを指定する。 $ cd # ホームディレクトリに移動する。 $ cd / # ルートディレクトリに移動する。 $ cd .. # 一つ上位のディレクトリに移動する。 $ cd ../../.. # 三つ上位のディレクトリに移動する。
ディレクトリ内のファイル一覧を表示するには、lsコマンドを使う。
$ ls # カレントディレクトリにあるファイル名一覧を表示。 $ ls -la # カレントディレクトリにあるファイルをその付加情報を含め一覧表示。
ファイルが多くlsコマンドの出力がたくさんになりそうなときは、以下のように出力をlessコマンドに渡してファイル一覧を表示させる。終了するときは、qを入力する。
$ ls -la | less
ファイルまたはディレクトリをコピーするには、cpコマンドを使う。
$ cp ファイル1 ファイル2
カレントディレクトリにあるファイル1をファイル2と名づけて同じディレクトリにコピー。
$ cp -r ディレクトリ1 ディレクトリ2
カレントディレクトリの中にあるディレクトリ1を新たにディレクトリ2と名づけて、同じディレクトリ内に丸ごと(再帰的に)コピー。この結果、カレントディレクトリ内には、ディレクトリ1、ディレクトリ2という二つのディレクトリができ、それぞれの中身は同じ。
$ cp file path
fileをpathとしてコピー。fileにはコピー元ファイルの相対パス/絶対パスを指定する。pathには、コピーによって新たに作られるファイルの相対パス/絶対パスを指定する。
$ cp file... directory
file達を既に存在するdirectoryにコピー。fileにはコピー元ファイルの相対パス/絶対パスをいくつか指定する。directoryには、ディレクトリの相対パス/絶対パスを指定する。コピーされたファイルはdirectoryの中にコピー元と同名で保存される。
以上より、二番目の引数が(1)既に存在するディレクトリのパスを示すときと、(2)存在しないファイルパス(またはディレクトリパス)を示すときで、cpコマンドの動作が変わる。(1)のときは、既に存在するディレクトリにファイルがコピー元と同名でコピーされる。(2)のときは、二番目の引数が示すファイルパスを持つファイルが新たに作られる。
ファイルまたはディレクトリを削除するには、rmコマンドを使う。
$ rm ファイル1
カレントディレクトリにあるファイル1を削除。
$ rm -r ディレクトリ1
カレントディレクトリにあるディレクトリ1をディレクトリ内のファイルも含め、丸ごと(再帰的に)削除。
$ rm file...
file...には、複数のファイルの相対/絶対パスを指定可能。それらのファイルがすべて削除される。-r オプションをつけると、ディレクトリも丸ごと削除できる。
ファイルのパーミッションを変更するには、chmodコマンドを使う。ここで、user: ファイル所有者, group: 所有者の属するグループ, others: 他のグループの人, read: 読み込み, write: 書き込み, execute: 実行である。
$ chmod ugo+rwx ファイル名 # user, group, othersの、read、write、executeを許可する。 $ chmod +rwx ファイル名 # 上記と同じ。 $ chmod o-rx ファイル名 # othersの、read, executeを許可しない。
ファイルの所有者/グループを変更するには、chownコマンドを使う。
$ chmod [OPTION]... [OWNER][:[GROUP]] FILE... # 書式 $ chmod ユーザー名 ファイル名 # ファイルの所有者をユーザー名に変更。 $ chmod :グループ名 ファイル名 # ファイルのグループをグループ名に変更。
パスワードを変更するには、passwdコマンドを使う。例えば、ユーザー: username_1がパスワードを変更するとき。username_1としてログインしたら、以下のコマンドを打つ。
$ passwd Changing password for username_1 (current) UNIX password: 現在のパスワード入力 Enter new UNIX password: 新しいパスワード入力 Retype new UNIX password: 新しいパスワードをもっかい入力
ファイルにリンクを張るには、lnコマンドを使う。
$ ln -s TARGET LINK_NAME # TARGETへのシンボリックリンクをLINK_NAMEと名づけてカレントディレクトに作る。 # TARGETはリンクを張りたいファイルのパスを示す。 # LINK_NAMEを省略すると、TARGETと同名のリンクがカレントディレクトに出来る。
メモ) リンクにはシンボリックとハードリンクの2種類あるが、ハードリンクはあまり利用しない。シンボリックリンクを張るときは、-sオプションをつけ、ハードリンクを張るときは、-s オプションをつけない。リンクを消しても元のファイルは消えない。シンボリックリンクを張った場合、元のファイルを消すと、シンボリックリンクは意味をなさなくなる。一方ハードリンクを張った場合、元のファイルを消してもハードリンクを消さぬ限り、ファイルは存在する。すなわち、ハードリンクはあるファイルのファイルパスを二つ(または多重)に増やす操作である?
ファイル内の文字列を検索するには、grepコマンドを用いる。
$ grep 検索文字列 ファイル名 # ファイル内で検索文字列を検索し、あったらその行を表示する。 $ grep 検索文字列 # ファイル名が省略され場合、標準入力から検索文字列を検索し、あったらその行を表示する。
二行目の例は以下のような使い方が可能。lsコマンドの出力するファイル名の中から、文字列"abc"を含むファイル名を探し、表示する。
$ ls -la | grep abc
書庫解凍にはtarコマンドを用いる。オプションのfは書庫ファイルを使用、x (extract?)は書庫からファイルを抽出(解凍、展開)という意味?拡張子が.tar.gzまたは.tgzの時はzオプションを、拡張子が.tar.bz2または.tbzの時はjオプションをつける。
$ tar zxf filename.tar.gz $ tar zxf filename.tgz $ tar jxf filename.tar.bz2 $ tar jxf filename.tbz $ tar zxvf filename.tar.gz # vオプションは進行状況を長々表示。なくても良い。
メモ1) tarコマンドの種類によっては、zオプションとかが使えないときがあるかも?$ tar --versionでバージョンを確認し、GNU tarであれば大丈夫かも。
メモ2) z,jオプションがなくても.tar.gzやtar.bz2が解凍できたかも。z,jオプションて必要なんだろうか。最小限のオプションは、以下のとおりかも?
$ tar xf filename.tar.gz $ tar xf filename.tar.bz2
網羅しない。
短いファイルを端末内で見たいときに用いる。長いファイルはlessで見ると便利。
$ cat ファイル名 # ファイルの内容を表示。
長いファイルを端末内で1ページずつ読みたいときに用いる。短いファイルはcatで手軽に見れる。
$ less ファイル名 # ファイルの内容を1ページずつ表示。 $ ls -la | less # lessコマンドは引数を省略すると、標準入力の内容を表示する。
メモ1) 終了はqを入力。/文字列で末尾方向に検索し、移動。?文字列で文字列を先頭方向に検索し、移動。nで末尾方向にさらに検索し、移動していく。スペースまたはfで次のページ、bで前のページ。矢印キーや、Page Up/Page Downキーも使える。
メモ2) moreコマンドより高機能なのがlessコマンド、lessコマンドの日本語対応版がlvコマンドらしい。more, less, lv などをpagerというらしい。moreは前のページに戻れない(?)ので不便かも?moreはいらない子?manコマンドの出力はlvをつかってるかも?
書体 | 意味 | 例 |
---|---|---|
AaBbCc123 | 端末の表示する文字。またはコードなど。 | $ You have mail. |
AaBbCc123 | ユーザーが入力する文字。 端末の表示する文字と区別する。 | $ su password: |
AaBbCc123 | コマンドの引数やコードの可変部分。 実際の名前や値と置き換える。 | $ rm filename |