Linux 入門2016年3月23日 | ||||||||||||||||||||
はじめにLinux は本来コマンドラインベースのシステムです。最近は GUI だけで操作できることが多いとはいえ、Windows や Mac OS X のコマンドラインが補助的なものであるのと比べると、Linux ではコマンドラインはいまだ大きな役割を果たしています。ここでは、Linux の基本と、コマンドラインの使い方を解説します。 Linux の基本ユーザーとグループLinux には、ユーザーとそれが属するグループがあります。ユーザーには管理者と一般ユーザーがあり、管理者を root と呼びます。これはファイルのアクセス権に関係しています。ふつう、一般ユーザーは自分が作ったファイルだけを書き換えることができます。一方、root はすべてのファイルを自由にできます。 ファイルとディレクトリLinux のコマンドライン上では、いわゆる "フォルダ" のことを "ディレクトリ" と呼びます。ディレクトリはファイルの一種です。 ファイルシステムLinux などのファイルシステムは、ディレクトリの中にファイルやそのまたディレクトリがあるという、ツリー構造になっています。Windows では Explorer、Mac OS X では Finder でツリーをたどっていきますが、 Linux にもそのようなものがあります。それは使っているデスクトップ環境によって異なります (GNOME では Nautilus、KDE では Konqueror や Dolphin など)。それらに対して、コマンドラインではキーボード入力のコマンドでディレクトリツリーをたどっていくことになります。 パスディレクトリツリー上のディレクトリやファイルの場所のことを "パス" といいます。パスはスラッシュで区切られます。たとえば "/usr/bin/xclock" などです。スラッシュの左にあるディレクトリを親ディレクトリ、右にあるディレクトリを子ディレクトリと呼んだりします。最上位ディレクトリ ("/") のことを "ルート" といいます。ルートからのパスを "絶対パス"、あるディレクトリからのパスを "相対パス" といいます。 カレントディレクトリファイルを操作する場合、ディレクトリツリー上のどこかに位置しなければなりません。その現在地のことを "カレントディレクトリ" とか "カレントパス" などと呼びます。 ホームディレクトリユーザーにはそのユーザー専用のディレクトリがあります。それを "ホームディレクトリ" と呼びます。コマンドラインからファイルにアクセスするとき、ふつう最初はホームディレクトリに位置します。 アクセス権すべてのファイルには、その所有者とグループ、アクセス権が設定されています。アクセス権は所有者、グループ、その他に対して設定できます。アクセス権には実行、読み取り、書き込みの 3 種類あり、それぞれに許可・不許可を設定できます。 たとえば、自分で作ったファイルであれば、自分に対して読み取り・書き込み許可、グループとその他には読み取り許可が与えられます。プログラムの場合は、実行許可も与えられます。実行許可がついていないものは実行できません。また、他人が作ったファイルは、ふつうはグループやその他に書き込み許可が与えられないため、書き換えることができません。 シェルファイルにアクセスしたり、プログラムを実行するために、ユーザーとシステムの仲立ちを行うものを "シェル" といいます。Windows の Explorer も Windows におけるシェルです。コマンドラインを扱うと言ったとき、実際に扱うものはシェルです。 Linux のシェルには主に 2 つの種類があります。B (Bourne) シェル (sh/bash) と C シェル (csh/tcsh) です。Linux はデフォルトが B シェル (bash) である場合が多いです。したがって、ここではシェルに bash を想定します。 シェルは、コマンドを羅列したテキストファイルを与えると、それらを一気に実行する機能があります。そのファイルを "シェルスクリプト" と呼びます。シェルスクリプトでバッチ処理を行うことも、シェルに対する基本設定を指示することもできます。 プロセスLinux のプログラムは、"プロセス" という単位で管理されます。Windows のタスクマネージャーで表示される "プロセス" と同じです。プログラムを強制終了させることを "プロセスを殺す (kill)" と言います。 ジョブシェルが管理しているプロセス (あるいはプロセスのまとまり) のことを "ジョブ" と呼びます。ジョブには "フォアグラウンドジョブ" と "バックグラウンドジョブ" があります。フォアグラウンドでジョブを実行する場合、そのジョブを実行している間は、そのジョブの入力要求に対する以外は入力を受け付けません。バックグラウンドでジョブを実行する場合は、ジョブを実行している間もコマンドを入力し続けることができます。 端末の起動Linux におけるコマンドラインによる操作には、「端末」 (端末エミュレータ) を使います。たとえば GNOME 2 や MATE では、デスクトップメニューの [アプリケーション]-[アクセサリ]-[端末] で起動できます。 ![]() ウインドウが現れ、キーボードで文字を入力できるようになります。 ![]() Unity では "terminal" と検索すれば「端末」が出てきます。 コマンドの実行コマンドは次の形で実行します。 $ コマンド [オプション] 引数1 引数2 ... "$" を "プロンプト (入力促進文字)" と呼びます。これはシェルが表示するもので、コマンド入力待ちであることを意味します。コマンドには "オプション" を空白区切りで指定できます。オプションは "-..." とか、"--..." などとハイフンの後に文字列という形で指定します。上の "[...]" は省略可能を意味しています。コマンドの後に引数 (たとえばファイル名など) を空白区切りで指定します。 "ls" コマンドの例を見てみましょう。 $ ls ただ "ls" とだけ入力すると、カレントディレクトリのファイルのリストが表示されます。 $ ls -l オプション "-l" をつけると、カレントディレクトリのファイルの詳細な情報が表示されます。 $ ls --help オプション "--help" をつけると、ls の使い方が表示されます。 $ ls .. ".." はカレントディレクトリの親ディレクトリのパスを意味します。これは親ディレクトリのファイルを表示させています。 特殊な文字特殊な扱いをされる文字があります。 . (ピリオド)パスとして使うと、カレントディレクトリのパスを意味します。 $ ./run コマンドとして使うと、シェルの設定の読み込みを意味します。 $ . ~/.bashrc .. (ピリオド 2 つ)カレントディレクトリの親ディレクトリのパスを意味します。 $ cd .. ~ (チルダ)ホームディレクトリのパスを意味します。たとえば "~/.bashrc" など。 $ . ~/.bashrc * (アスタリスク)文字列のパターンを指定するときに使います。なんらかの文字列を意味します。たとえば、"*.txt" だと、最後に ".txt" が付くすべてのファイル名を意味します。 $ ls *.txt ?文字列のパターンを指定するときに使います。"*" と異なり、なんらかの 1 文字を意味します。たとえば、"?.txt" だと "a.txt" や "b.txt" などがマッチします。 $ ls ?.txt " (二重引用符)"..." という形で表すと、空白を含む文字列を指定することができます。 $ grep -rin "error number" . >リダイレクト。コマンドの出力をファイルにつなげます。たとえば $ run > logとすると、run の結果が log というファイルに書き出されます。 ただし、プログラムの出力には "標準出力" と "標準エラー出力" があります。"標準エラー出力" はエラーの出力に使われます。">" では標準出力だけがファイルに書き出されます。標準エラー出力もリダイレクトするには次のようにします。 $ run > log 2>&1 >>">" の場合はファイルを新しく作りますが、">>" はコマンドの出力をファイルの末尾に追加します。 $ run >> log |パイプ。コマンドの出力を別のコマンドの入力につなぎます。たとえば $ run | grep -i errorとすると、run の出力を grep コマンドに渡して grep を実行することになります。 &コマンドの末尾につけると、バックグラウンドでの実行を意味します。 $ run & キーバインドCtrl キーを押しながらあるキーを押すような形のショートカットキーが使えます。これを "キーバインド" と呼びます。 Ctrl+Cフォアグラウンドで実行中のプログラムを強制終了します。 Ctrl+DEOF (End Of File) を入力します。Python の終了などに使うことがあります。 Ctrl+S/Ctrl+QCtrl+S で画面を停止、Ctrl+Q で再開します。ふつう使いませんが、うっかり Ctrl+S を押してしまったときは Ctrl+Q で戻ると覚えておきましょう。 Ctrl+L画面をクリアします。 Ctrl-A行頭に移動します。 Ctrl-E行末に移動します。 Ctrl+W直前の単語を削除します。 Ctrl+Uカーソル以前の文字を削除します。 Ctrl+Kカーソル以降の文字を削除します。 Ctrl+Y削除した文字を貼り付けます。 コマンドの補完コマンド入力の途中、Tab を押すと入力が補完されます。候補がいくつかあるときは候補が表示されます。 コマンド履歴実行したコマンドは記録されています。実行したコマンドを再度実行したい場合は、矢印の上下でコマンド履歴をたどることができます。 変数と環境変数シェルでは変数を定義できます。変数には "環境変数" という環境設定用の特別な変数があります。環境変数はシェルや各種プログラムが参照します。 "env" コマンドで設定されている環境変数を確認できます。 $ env 環境変数 "PATH" の値を確認するには、次のようにします。 $ echo $PATH "echo" は引数を文字列として出力するコマンドです。シェルは "$..." の形で表された単語を変数として、その値に置き換えるので、上のコマンドで変数の値を確認できます。 シェルでは、次のようにして変数を定義することができます。 $ VAR=value $ echo $VAR しかし、これは変数が定義されただけで、環境変数にはなっていません (env のリストに出てきません)。これを環境変数にするには次のようにします。 $ export VAR これで、env の出力の中に "VAR" が出てくるようになります。次のように一度で環境変数を定義することもできます。 $ export VAR=value 一番重要な環境変数は "PATH" です。PATH には実行ファイルのあるディレクトリのパスのリストが設定してあり、これらのパスに含まれる実行ファイルは、いちいちそのファイルまでのパス ("フルパス" という) を指定しなくてもファイル名だけで実行できます。PATH には ":" (コロン) で区切られたパスのリストを設定します (たとえば "/bin:/sbin:/usr/bin:/usr/sbin" など)。PATH にパスを追加するには、次のようにします。 $ export PATH=~/bin:$PATH 値に "$PATH" を使っていることに注意してください。$PATHの前に新しいパスを追加している形になっています。そうしないと既存のパスが消えます。パスを追加することを "パスを通す" と言うことがあります。コマンドが実行できないときには「パスが通っていない」と言ったりします。 設定ファイルbash の場合、ホームディレクトリの ".bashrc" が設定ファイルとして起動時に読み込まれます。PATH の設定などはこの中に書いておきます。 .bashrc を書き換えた後、設定を有効にするには、端末を再起動するか、つぎのようにします。 $ . ~/.bashrc コマンド集Linux の主要なコマンドを紹介します。以下では "file" はファイル、"dir" はディレクトリを意味しています。 基本コマンドlsディレクトリ内のファイルを表示します。 $ ls 引数なしだとカレントディレクトリのファイルを表示します。 $ ls dir ディレクトリを指定すると、指定したディレクトリのファイルを表示します。 $ ls -l オプション "-l" をつけると、ファイルのアクセス権や所有者、サイズなどを表示します。 $ ls -a ".bashrc" などの名前のはじめにピリオドが付くファイル ("ドットファイル" という) は、ls ではふつう表示されません。それらを表示するにはオプション "-a" を指定します。 cdディレクトリを移動します。 $ cd dir ディレクトリを指定すると、そのディレクトリに移動します。 $ cd .. 上に戻るには ".." を指定します。 $ cd 引数なしだとホームディレクトリに移動します。 pwdカレントディレクトリのパスを表示します。 $ pwd mkdirディレクトリを作成します。 $ mkdir dir rmファイルを削除します。 $ rm file1 file2 ファイルは複数指定できます。 $ rm -r dir オプション "-r" をつけるとディレクトリを削除できます。 mvファイルを移動します。 $ mv file dir file を dir に移動します。 $ mv file1 file2 dir 複数のファイルを指定して、最後がディレクトリだと、それ以前のファイルをそのディレクトリに移動します。 $ mv file1 file2 名前の変更もできます。 cpファイルをコピーします。 $ cp file1 file2 file1 を file2 としてコピーします。 $ cp file dir file を dir 内にコピーします。 $ cp file1 file2 dir 複数のファイルを指定して、最後がディレクトリだと、それ以前のファイルをそのディレクトリにコピーします。 cat複数のファイルを連結します。 $ cat file1 file2 > file3 file1 と file2 を連結して file3 を作成します。 chmodアクセス権を変更します。 "ls -l" でのアクセス権の確認のしかたを説明します。"ls -l" ではアクセス権は次のように表示されます。 -rw-r--r-- アクセス権は 10 文字で表されます。はじめの 1 文字はファイルなら "-"、ディレクトリなら "d"、リンクなら "l" となります。残りは 3 つずつ所有者、グループ、その他向けのアクセス権を意味します。3 つはそれぞれ読み取り "r"、書き込み "w"、実行 "x" となります。上の例では、所有者は読み取り・書き込み可能、グループのユーザーとその他は読み取りのみ可能ということを意味しています。 chmod では、"u" で所有者、"g" でグループ、"o" でその他を表します。"+" で許可を与える、"-" で許可を与えないようにします。"r" で読み取り、"w" で書き込み、"x" で実行許可を指定します。 たとえば、所有者にのみ実行許可を与える場合、つぎのようにします。 $ chmod u+x file 所有者以外から読み取り許可を外すには、つぎのようにします。 $ chmod go-r file すべてのユーザーに読み取り許可を与える場合、つぎのようにします。 $ chmod +r file アクセス権を数字で指定することもできます。所有者、グループ、その他のアクセス権それぞれを数字 1 文字で表し、アクセス権を 3 桁の数字で表します。4 が読み取り、2 が書き込み、1 が実行を意味し、読み取り・書き込み許可は 4 + 2 = 6、読み取り・実行許可は 4 + 1 = 5、すべて許可は 4 + 2 + 1 = 7 になります。 たとえば、所有者に読み取り・書き込み許可、それ以外に読み取り許可を指定するにはつぎのようにします。 $ chmod 644 file 上の例に実行許可を加える場合は以下のようになります。 $ chmod 755 file lnリンクを作成します。 $ ln -s file1 file2 file1 を指す file2 というリンク (シンボリックリンク) を作ります。リンクは、あたかもそれがリンク先のファイルであるかのように振る舞います。上の例では、file2 にアクセスすると、file1 にアクセスするのと同じことになります。 lessファイルの中身を表示します。 $ less file 操作キーはつぎのようになります。
grepファイル内から文字列を検索します。 $ grep -n error file file から "error" という文字列を探します。"-n" は文字列を含む行の番号を表示させるオプションです。 $ grep -in error file オプション "-i" をつけると、検索文字の大文字・小文字を区別しません。 $ grep -rin error . オプション "-r" をつけると、ディレクトリ内すべてのファイルに対して文字列を検索します。 findファイルを探します。 $ find 引数なしだとカレントディレクトリ以下のファイルをすべて表示します。オプション "-name" でファイルを探せます。 $ fine -name file アスタリスクも使えます。 $ fine -name "test*" tarファイルをまとめ、圧縮したり、展開したりします。 $ tar cvzf dir.tar.gz dir ディレクトリをまとめ、gzip 圧縮します。"dir.tar.gz" は圧縮ファイル名で、任意です。 $ tar xvzf dir.tar.gz 圧縮ファイルを展開します。 bzip2 の場合は、オプション z の代わりに j を使います。 $ tar cvjf dir.tar.bz2 dir $ tar xvjf dir.tar.bz2 xz の場合は、オプション J を使います。 $ tar cvJf dir.tar.xz dir $ tar xvJf dir.tar.xz 圧縮については、オプション a を使えば拡張子から圧縮形式を自動判別してくれます。 $ tar cvaf dir.tar.gz 展開については、オプションなしで圧縮形式を自動判別してくれます。 $ tar xvf dir.tar.gz 圧縮ファイルの内容を知りたいだけであれば、オプション x の代りに t を使います。 $ tar tvzf dir.tar.gz duファイルのサイズを表示します。 $ du -h file file のサイズを表示します。オプション "-h" をつけると、わかりやすく単位をつけてくれます。 $ du -sh dir ディレクトリのサイズを表示します。 manコマンドのマニュアルを表示します。 $ man less less コマンドのマニュアルを表示します。操作は less と同じです。 プロセス管理jobs実行中のジョブを表示します。 $ jobs ジョブの番号が表示されます。番号に "+" がついたものは "カレントジョブ" を表します。 bg停止中のジョブをバックグラウンドで実行します。 $ bg %1 フォアグラウンドジョブが実行中に Ctrl+Z を入力すると、ジョブが停止します。bg はそのジョブをバックグラウンドで実行させます。引数の番号は jobs で表示されるジョブの番号です。引数なしだとカレントジョブに操作が適用されます。 fg実行中のバックグラウンドジョブ、あるいは停止中のジョブをフォアグラウンドで実行します。 $ fg %1 引数の番号は jobs で表示されるジョブの番号です。引数なしだとカレントジョブに操作が適用されます。 nohupシェルが終了してもコマンドが実行し続けるようにします。 $ nohup run & コマンドをバックグラウンドで実行しても、シェルを終了する (端末を閉じる) と、コマンドは終了します。nohup は nohup 以下をコマンドとして、シェルのジョブではなくシステムのプロセスとして実行します。 ps実行中のプロセスを表示します。 $ ps 引数なしだとシェルが実行中のプロセスを表示します。 $ ps u 自分が実行中のプロセスを他のシェルが実行中のものも含めて表示します。 $ ps ux 自分が実行中のプロセスをシェルに結びついていないものも含めて表示します。 $ ps aux 自分以外のユーザーのプロセスも含めて表示します。 killプロセスを停止します。 $ kill 1234 プロセス ID を指定してプロセスを停止します。プロセス ID は ps コマンドで取得できます。 $ kill %1 ジョブ番号で停止するプロセスを指定することもできます。 kill コマンドはプログラムに "シグナル" を送るプログラムです。シグナルの指定なしではシグナル "TERM" (terminate) を送りますが、これは "終了してください" というニュアンスです。これで止まらないプログラムもあり、その場合はつぎのようにシグナル "KILL" を送ります。 $ kill -KILL 1234 こちらがほんとうの強制終了です。 システム情報dfファイルシステムの容量を表示します。 $ df -h オプション "-h" でわかりやすく単位をつけてくれます。 freeメモリの容量を表示します。 $ free -m オプション "-m" で MB 単位で表示します。 /proc/cpuinfoコマンドではありませんが、CPU 情報を取得できるファイルです (ほんとうのファイルではなく、ファイルのふりをしたもの)。 $ less /proc/cpuinfo ifconfigネットワークインターフェイスの情報を表示します。 $ ifconfig IP アドレスや MAC アドレスを取得できます。 システム管理suユーザーを変更します。 $ su 引数なしだと root に変わろうとします。パスワードを聞かれます。システムによっては root になれないものもあります (Ubuntu など)。 sudoroot としてコマンドを実行します。 $ sudo vi /etc/rc.local sudo 以下を root のコマンドとして実行します。パスワードを聞かれます。sudo を使うには設定が必要です (はじめから使えるように設定されているシステムもある)。sudo でしか root のコマンドを実行できないシステムもあります (Ubuntu など)。 | ||||||||||||||||||||
PENGUINITIS |