ユーザーとカレントディレクトリ・ホームディレクトリ
UNIXにはユーザーやパーミッションという考え方があり、シェルにログインしプログラムを実行するユーザーによってプログラムが実行される「権限」が決められる。
また、UNIXのコマンドラインシェルには「カレントディレクトリ」という考え方がある。これは、今の作業ディレクトリを意味しており、シェルには常にカレントディレクトリがどこであるか、という情報とともに、プログラムを「環境として」実行することができる。
また、各ユーザーには「ホームディレクトリ」というディレクトリが与えられる。これは/home/usernameに存在する。この中で、ユーザーは自由なデータやファイルを保管し、自由に作業することが出来る。
また、システムには管理権限を持つrootユーザーが一人存在し、システムを変更・破壊する権限を持つ。パッケージ管理システムなどでシステムをアップデートする場合は、root権限が必要な場合がある。シェルでrootユーザーになるためには、
$ su - (rootユーザーのパスワードを入力) #
と実行する。一般的に、通常ユーザーのシェルは$から、rootユーザーのシェルは#から始まる。コマンド入力例などでこの例があった時、$や#を入力する必要はない。(上の例では、通常ユーザーのシェルにsu -と入力すれば良い。$を入力する必要はない。)
sudoというコマンドを使うことで、いちいちrootユーザーにならなくても、特定のコマンドをrootユーザーで実行することが出来る。Ubuntuなどの一部の初心者向けディストリビューションではこちらのスタイルがとられる場合もある。
パイプとリダイレクト
あるコマンドを実行した結果の出力を、他のコマンドの入力として渡せる「パイプ」と、入出力とファイルを変換できる「リダイレクト」。
たとえば
find ~ | grep "2012"
とすることで、ホームディレクトリにある、「2012」を名前とパスに含むファイルを列挙出来る。
findで~の中を「サブディレクトリまで含めて」列挙し、そこからgrepで名前を検索する。
パイプは、使うとやみつきになる。UNIXは、こうした多数のコマンドプログラムに分けながら、ユーザーが自分の力で環境を操作することを哲学としている。
シェルスクリプト
基本的に、コマンドをそのまま列挙したファイルを作って、実行すればシェルスクリプト。
だが、引数や関数定義が使えたり、if文なども出来るなど、応用範囲は多い。
UNIXでは、何でもかんでも再利用することで、応用性のあるシステム設計を行っている。
シェル変数と環境変数
コマンドライン環境の中で利用できる、変数のようなもの。
シェル変数と環境変数がある。シェル変数はシェルの中だけで保たれ、起動したプロセスには引き継がれない。シェル変数は、
$ FOO=foo
と設定する。
一度シェル変数を設定した上でexportすることで、環境変数を設定できる。
$ export FOO
コマンドのバイナリファイルを探すPATHやユーザーのホームディレクトリを探すHOMEなどが有名である。
コマンドの詳細
コマンドの詳細は、manと言うコマンドで見ることが出来る。
man ls
コマンドラインオプションは、例えば、詳細表示をしたい時は、以下のように使う。
ls -al
それ以上のコマンドの詳しいことは、manを参照のこと。manは、設定ファイルについても調べることが出来る。
PATHを通す
PATHを通すことで、新しいバイナリをインストールしたフォルダを追加することが出来ます。
エイリアス
エイリアスとは、コマンドの別名。
$ alias rm='rm -i'
このようにすると、rmコマンドを入力して実行した際、rm -iコマンドとして扱ってくれる。引数を指定せずにaliasを実行するとエイリアス一覧が見れる。
後日注記:面倒な長いシェルコマンドは、エイリアスにするのが楽。
ログイン・ネットワーク・セキュリティ
UNIXではマルチユーザーという仕組みを採用している。これによって、端末にログインし、その中のリソースにどのようにアクセスするかを、パーミッションという仕組みで管理することができる。
Windowsなどに慣れたユーザーからは考えづらいかもしれないが、Linuxはユーザーにログインして作業する、ということが一般的である。
ログインはローカル資源だけではなく、ネットワーク資源についても言える。SSHなどを使ってネットワークログインし、ネットワーク上で作業することもある。また、Apache httpdなどでは、外部ユーザーにネットワークからプロセス実行要求することもある。
ログインとパーミッションでは、コマンドを実行するユーザーに対して、そのファイルにどれだけアクセスできるのか、という考え方をする。一般ユーザーは/usr/binなどのシステムディレクトリは「破壊」することはできないが、自分の作業ディレクトリの中で自分のファイルを操作・処理するために「利用」することはできる。
ユーザーにはホームディレクトリが与えられ、この中にデータを保存して作業する。だが、大切な顧客のデータをホームディレクトリに保存することはできるだけ避けたい。SQLの関係データベース管理システムを用いて、バックアップも定期的にとることが勧められる。ホームディレクトリを簡単な作業のために使うか、あるいは大事なデータの置き場所にも使うかは議論の分かれるところであるが、SQLサーバーなどを使うこともできるし、専用のユーザーを作って普段そのユーザーを使わないようにしても良いだろう。ApacheはホームページデータをDocumentRootで指定するが、/var/www/htmlなどを指定することが多い。
このほか、システムを「破壊」できるrootユーザーに制限をかけたり、HTTPなどのプロセス単位で制限をすることのできる、SELinuxというセキュアなLinuxも利用することができる。
UNIX系のOSでは、ログイン端末とユーザーの使うコンピュータを分けるなど、「コンピュータの分業化」が比較的やりやすいと言われる。ネットワーク透過なX端末のような発想はここから生まれている。だが、現代的な「パーソナルユーザー」が使うパソコン用OSとしては、少し古びて見えるかもしれない。だが、今日のGNOME/KDEなどは、Windowsの統合などを大きく超えている。GmailやGoogle Driveのようなネットワーク上のサービスにログインしてファイルマネージャからアクセスしたりすることは容易である。だが、伝統的な仕組みも今なお提供されており、NFSなどを用いてネットワーク上にファイルサーバーを作ることも簡単にできる。