体で覚えるLinuxの基本
再入門 体で覚えるLinuxの基本を読みながら手を動かして理解する。
UNIXの基本やLinuxゲリラ戦記とかぶっている内容もあるので、だいたいできるはず!
Linuxのおさらい
Linuxの歴史
UNIXの基礎のところにLinuxのことも書いてあるので参照。
Linuxの特徴
- マルチユーザー/マルチタスク
- ファイル・システム
- シェルと多様なコマンド群
- X Window System
LinuxはUNIXを真似て作っているだけあって、基本的な特徴はUNIXとほぼ同じ。
マルチユーザー/マルチタスク
マルチユーザー
「マルチユーザーに対応している」と言うのは、「複数のユーザーが同時に1台のコンピュータを利用できること」を指す。
マルチユーザーに対応したシステムでは、複数のユーザーが使用しているときでも各ユーザーからはあたかも自分だけがシステムを占有しているように使える。
これは時分割処理システム(TSS)という仕組みによるもので、微小な時間間隔(通常は,ミリ秒単位)で各ユーザーごとの処理を行っている。
マルチタスク
マルチタスクとは、「同時に複数のタスクを実行可能なこと」を指す。
もしOSにマルチタスク機能がなければ、1つずつしか処理を実行することができず、画面上に複数のウインドウを開いて異なるプログラムを実行するというようなことができない。
ユーザーとログイン/ログアウト
rootユーザーと一般ユーザー
Linuxのユーザーには rootユーザー(システム管理者)と一般ユーザーがある。
詳細は一般ユーザ/rootユーザーの記事を参照。
ログイン
Linuxのディストリビューションには,2通りのログイン方法がある。どちらのログイン方法を利用するかは,ディストリビューションのインストール時などに選択することができる(デフォルトはグラフィカル・ログイン)
※以降、コンソールログインの場合を想定して学習している。
ログイン切り替え
恒久的に変更する方法と一時的に変更する方法があり、恒久的に変更するには/etc/inittabファイル(Linuxが起動する時に実行されるプログラムの設定ファイル)を変更するinitコマンドを実行する。
恒久的に変更する手順
1. まずはコンソールログイン→グラフィカルログインに変更してみる。rootユーザーになって、/etc/inittabを開く。
1. デフォルトランレベルをid:5:initdefault:
に変更する。「5」グラフィカルログインのID。
1. システムを再起動するとグラフィカルログインになっている。
1.グラフィカルログイン→コンソールログインに戻す。idには「3」を指定して再起動。
わからなかったこと
自分のDebian環境にはには/etc/inittabファイルがないんですけど・・・。(Debian9) でも結局initコマンドでrunlevelの変更はできた。 runlevelコマンドでランレベル(システムの動作状態を表すモード。1つ目が前回のレベル、2つ目が今のレベル)の確認、initコマンドでランレベルの変更。
一時的に変更する手順
一時的に変更する場合はtelinitコマンド実行する。システムにログインし直すと元に戻る。
# telinit 5
ログアウト
ログアウトを行わないと他人に勝手にシステムを使われてしまう危険があるのでシステムの利用を終えるときには、logoutコマンドまたはexitコマンドを実行しログアウトをする。
ユーザーの追加/削除
ユーザーの追加はadduserコマンドで追加後、passwdコマンドでパスワードを設定する。
ユーザーの削除はuserdelコマンド。
それぞれのコマンドの詳細はLinuxのコマンド一覧参照。
ファイルシステム
UNIXの基礎参照。
現在Linuxでは「ext4」というファイルシステムを採用しているものが多い。*1
ファイルとディレクトリ
操作コマンドについてはLinuxのコマンド一覧参照。
ファイルの種類
ディレクトリ・ファイル
ディレクトリのこと。ディレクトリも広い意味ではファイルの1つ。
特殊ファイル*2
周辺装置(入出力装置や外部記憶装置)を仮想的なファイルとして扱えるようにしたもの。この特殊ファイルは/devディレクトリの中に存在する。
通常ファイル
テキストファイルや設定ファイルなど、上2つを除くファイル全般。一般的に「ファイル」というと通常ファイルを指す。
リムーバブル・ストレージの取り扱い
USBメモリを始めとし、外部記憶媒体をPCに接続するとWindowsOSの場合は「Dドライブ」や「Eドライブ」などのドライブレターで認識される。
しかしLinuxにはドライブレターという概念はない。Linuxのファイルシステムは「階層構造をもつディレクトリの集合」なので、この階層構造の中へ追加する必要がある。これをマウントという。
マウント、アンマウントの手順はここに詳しく載っている。
シェル
シェルの基本
ユーザーがコマンドラインから入力したコマンドを解釈し、その実行を制御するプログラムがシェル。CUIでの操作においてシェルは必要不可欠な要素である。
シェルの役割は、標準入力から入力されたコマンドを解釈し、正しいコマンドであればそれを実行し結果を標準出力に出力する。正しくないコマンドの場合は、エラーを標準出力に通知する。
また、シェルにはこのような対話形式モードの他にシェルスクリプトと呼ばれる非対話形式で実行するモードがある。
シェルスクリプトは、あらかじめ実行させたいシェルコマンドをテキストファイル記述しておき、拡張子.sh形式で保存したもの。
シェルの種類
シェルには色々な種類があるが、現在Linuxの標準シェルとなっているのがbashというシェル。 ほかにも同じくBourne シェル系のsh, ksh, zsh、 Cシェル系のcsh, tcshがあるが、まずは一番有名はbashを覚えること。
標準入力/標準出力
デフォルトでは,標準入力はキーボード,標準出力および標準エラー出力はディスプレイに割り当てられている。 つまり「キーボードから入力したコマンドの実行結果が、画面に表示される」というのがデフォルトの動きとなる。
リダイレクション
リダイレクション「>」はリダイレクトとも呼ばれる。
リダイレクションは本来標準出力に出力されるはずのコマンドの実行結果を、別のファイルに出力するなど、標準入出力を変更することをさす。
以下の例は、指定のURLから取得したHTMLデータを/dev/nullという特殊なファイルに出力している。
$ lwp-request http://www.garunimo.com/program/linux/sample/counter.php > /dev/null
パイプ
パイプ「|」はその結果を別のコマンドの入力として渡したいときに使用する。 あるコマンドの出力結果を他のコマンドの入力として、パイプで連結させることにより、あたかもプログラムのような振る舞いを実現させることができる。
パイプ機能を使えるコマンドを,Linuxでは一般にフィルタとよぶ。
以下の例は、実行中のプロセスを取得するコマンドを実行した結果を、grepコマンドの入力として渡している。
$ ps aux | grep 検索する名称
シェルスクリプト
シェルスクリプトとは、あらかじめ実行させたいシェルコマンドをテキストファイル記述しておき、拡張子.sh形式で保存したもの。対話形式ではなく、プログラムを逐次解釈して実行するインタプリタ方式で実行することができる。
簡単な説明はシェルスクリプトでプログラミングに記載してあるので参照。
システムに役立つコマンド
Linuxのコマンド一覧参照。