ITエンジニア勉強会:Linuxを触ってみよう Part①
はじめに
こんにちは、ロニーです。
今や業務でよく触れるLinuxのOSなのですが、初めて触った約2年半前、「OS=Windows」という認識だった当時の自分には、新鮮というか、新鮮すぎてチンプンカンプンでした。
現場ではターミナルエミュレータであるTera termで接続してCUI(CLI)で操作する形だったので、視覚的に把握しにくいCUI操作に慣れるまで苦労しました。
さて、そんなLinuxですが、ある程度基礎的な情報を頭に入れておくことで、
初回の不安や困惑を軽くし、
経験が浅くてもスタートダッシュできるようになると考えます。
大まかな概念やコマンド、調べ方などを理解しておけば、
右も左もわからなくて立往生。。。
先輩や上司を質問攻め。。。
ググったはいいけど出てきた情報がそもそも理解できない。。。
なんて状況を、さすがに「避けられる」、というのは言い過ぎかもしれませんが、
少なくとも「減らす」ことは可能だと思います。
というわけで、Linux(リナックス)OSを使うにあたり、
最初に戸惑う部分についてざっとまとめます。
今回は初歩的・基礎的な内容ですので、経験者には無用かもしれません。
管理者権限「root」と一般ユーザ
Linux OSでは、サーバすべての権限を有する管理者として、「root」と呼ばれるユーザが存在します。
「ルート」と呼びます。
英単語の通り「根っこ」「根本」を意味するわけですが、WindowsのAdministratorに該当するといえばわかりやすいでしょうか。
rootはOS自体を操作、編集することも破壊することもできます。
そのため、誤操作やスキル不足等によりOSを台無しにしてしまわないよう、root権限時の操作は慎重を期し、乱用は避けるのが基本です。
ファイルやディレクトリにはそれぞれ権限が割り当てられているので、
rootでないと見ることができない、編集できない、実行できないものは多いです。
とりわけ、OSの根幹である、「kernel」(カーネル)と呼ばれる中枢機能にはrootですら編集が推奨されないため、一般ユーザは触れないのが賢明です。
そうはいっても、root以外のユーザの作成や削除だとか、パスワード管理、ファイルやディレクトリの権限操作など、rootにしか許されない操作は多いのです。
ミドルウェアの導入や削除や更新、
機器のパーティション変更やデバイスの管理、
OS電源操作などもそうですね。
そのため、OSインストールやLinuxサーバ構築、ミドルウェア導入などに携わる場合はroot昇格、もしくはroot権限を一時的に付与する「sudo」コマンドの使用は避けられません。
操作していく中で何か想定外のエラーが出たり操作ができなかったりするときには、
権限の問題をまず疑うのが定石となります。
常に、今自分は何ユーザなのか、自分が作ったり操作したりするファイル、プログラム、ディレクトリはどのユーザにどこまでの操作を強化しているのかを意識していてください。
自分がrootであるか否かを判断する簡単な判別法として、コマンドプロンプトの最下行の記号を見る方法があります。
ベーシックな設定ですとコマンドラインは以下のように、
[user@server001 ~] $
と表示されます。
これは、
[<ログインしているユーザ名>@<ログインしているホスト名> <今いるディレクトリ名>] <ユーザ識別記号>
を示しています。
つまり、「どのユーザでログインしたか」、「どのサーバにログインしているか」「今どの階層にいるのか」「ユーザはrootか一般ユーザか」が一目でわかるわけです。
このうちの、「ユーザはrootか一般ユーザか」を判別するのがユーザ識別記号で、
rootの場合は「#」、その他の一般ユーザの場合には「$」または「%」が表示されるので、
[root@server001 ~] #
となっていればrootであることがはっきりします。
この場合はそのままrootという名称が表示されていますが。(笑)
各ユーザにはホームディレクトリが割り当てられる
基本的には、rootも一般ユーザも、ホームディレクトリというものを持ちます。
これはログインしたときの起点となるディレクトリです。
ホームディレクトリ自体は、ユーザ作成時に任意のパスを指定できますし、ホームディレクトリを作らないパターンもありますが、基本的には以下のようになります。
rootユーザの場合:/root
一般ユーザの場合:/home/<ユーザ名>
ホームディレクトリは、「~」(チルダ)で表すこともできます。
ディレクトリを移動するcdコマンドで「cd ~」とすればログインしている現ユーザのホームディレクトリへ移動できますし、
先ほど記載したように
[root@server001 ~] #
と表示されていれば、カレントディレクトリ(今いるディレクトリ階層)は、
rootユーザの「~」、すなわち「/root」であることがわかります。
最下層も「root」と呼ぶ
紛らわしい名称の一つに、OSの最下層であるパス、「/」もrootと呼称します。
「ルート配下にそのパッケージを置く」
「ルートに移動する」
といった文脈では、ユーザではなくパスの方のrootを指していると理解しましょう。
Linuxのディレクトリ構造
Windowsにおけるフォルダのことを、Linuxではディレクトリと呼びます。
ディレクトリの中には別のディレクトリを作成できるため、それにより階層が生まれます。
根本となる「/」(ルート)を起点として、ディレクトリ階層を経るごとに、
ディレクトリ名+「/」スラッシュを付けて以下のように書き表します。
「/usr/local/src/test.tar.gz」
上記の例では、「root配下の、usrディレクトリ配下の、local配下の、src配下の、test.tar.gz」が書き表されています。
ちなみにtest.tar.gzはtestという名前を付けた圧縮ファイル(例)です。
OSを提供しているディストリビューションによってデフォルトのディレクトリ構造には多少差がありますが、
dev、etc、home、mnt、root、tmp、usr、varなどは大抵のLinuxのOSには含まれています。
「/」配下の代表的なディレクトリをざっと紹介します。(あくまで一部です)
- dev :デバイスファイルの配置、管理
- etc :各種設定ファイル。重要なファイルが多い。
- home :ユーザ別ホームディレクトリ。
- mnt :一般的なマウントポイント。
- root :root用のホームディレクトリ。
- tmp :-一時領域。ゴミ箱のように一定期間がたつと削除される。
- usr :各種プログラムが配置される。コマンドなど。
- var :変更されるデータなど。各種システムログはこちら。
また、例えば「bin」というディレクトリも各所に存在しますが、binary(バイナリ)から来ているその名称の通り、バイナリファイル=(テキストファイル以外の)実行ファイルを主に配置するディレクトリとしてよく使われています。
「lib」はライブラリを置くのに基本的に使われますし、
「log」はログファイルを置くのに使われます。わかりやすいですよね。
「このファイルはこのディレクトリに置かないといけない」と全てが決まっているわけではありませんが、多くの場合、ディレクトリ名やファイル名がファイルパス、ディレクトリパスとして他の設定ファイル等に定義され、別のプログラムから呼び出されるため、むやみに配置や名称を変えてしまうとプログラムが正しく動作しなくなるため注意が必要です。
新規ファイルやディレクトリを配置するのはマニュアルや慣例に沿って行うのが無難でしょう。