超初歩的 Linux の作法~ SOCKET SERVER 'HAL'

Windows や Macintosh といった手厚いユーザーインターフェイスに慣れ親しんでいると、初めての Linux というのはワケがわからないことでしょう。特に、Linux 関係の WEB記事は大抵コマンドラインでの操作で説明されていて、そこで躓いてしまう事もあるかと思います。

実際に、普段使うコマンドというのは本当に少しだけで、あとは必要になった時に調べれば済むものばかりです。

ですからこのページでは、Linux の基本概念と頻繁に利用するコマンドについて説明し、第一歩を踏み出す為の障壁を取り除こうと思います。

超初歩的 Linux の作法

 Windows や Macintosh といった手厚いユーザーインターフェイスに慣れ親しんでいると、初めての Linux というのはワケがわからないことでしょう。特に、Linux 関係の WEB記事は大抵コマンドラインでの操作で説明されていて、そこで躓いてしまう事もあるかと思います。

 実際に、普段使うコマンドというのは本当に少しだけで、あとは必要になった時に調べれば済むものばかりです。

 ですからこのページでは、Linux の基本概念と頻繁に利用するコマンドについて説明し、第一歩を踏み出す為の障壁を取り除こうと思います。

最初に覚えておきたい、大文字と小文字

 特にプログラミングを行う場合に重要になってくるのですが、Windows ではファイル名の大文字と小文字を区別しません。例えば、同じディレクトリ内に a.txt と A.txt は共存できないようになっています。ファイルシステムとして a と A を同じ文字として扱うため、ファイルの重複となってしまうからです。これはディレクトリも同じです。

 一方、Linux ではファイル名の大文字・小文字の違いを認識します。つまり、a.txt と A.txt は共存できます。

 このため、Windows 環境で作ったシステムが、Linux 環境で動作しないケースが生まれます。例えば画像ファイルのアップローダー等で、システムでは *.jpg のみに対応する実装をしていたが、ユーザーからは *.JPG がアップロードされ、Windows システムでは同一ファイルとして認識されたが Linux では別ファイルとなり、存在しないファイルとしてエラーになった、等が、比較的頻繁に起こるケースです。

Linux のディレクトリ構造

 一般的な Windows は ドライブというハードディスク(またはSSD等)があって、その中にディレクトリとファイルが階層構造になって入っています。このディレクトリを指定するアドレスは、

C:\Program Files\NetBeans802\LICENSE.txt

といった感じで、バックスラッシュ(日本語環境では半角の¥マーク)で区切られています。別のハードディスク、例えば D ドライブにあるファイルは、C ドライブの階層構造とは別のものになります。

 一方、Linux はどうかというと、ドライブに関係なく、全てのディレクトリとファイルは、ルートディレクトリ / を頂点とした階層構造で表現されています。いくつかのドライブをマウント(OSから読み書きできるようにすること)したとしても、Windows のように ○ドライブとなることはなく、/ 以下の、マウント時に指定したどこかの階層に登録されます。

 なお、ディレクトリってフォルダと違うのか?というと、同じものだと思って構いません。フォルダというのはいわゆるファイルの入れ物そのものですが、ディレクトリとはある特定の場所を指す位置情報です。

 例えば、

/home/pi/

では、home も pi もフォルダですが、階層構造を示した /home/pi/ というのはディレクトリです。

 ですが「homeフォルダ内のpiフォルダ」を「/home/pi/ フォルダ」と言っても意味がわからない人はいないでしょう。ですから、ディレクトリと言っていたらフォルダの事だと思ってもあまり問題はありません。

Linux の拡張子

 Windows では、拡張子と呼ばれるファイル名の末尾の .(ドット)以降の文字によってファイルの種類が判断され、ファイルをダブルクリック(実行)した場合にどのアプリケーションで開くかは Windows が判断します。

 Linux のファイルにおいても拡張子という考え方は存在しますが、これは基本的には人間が判断するためのもので、OS としては拡張子はそれほど意味を持っていません。Windows 同様に登録されていいるアプリケーションで開くことはしますが、例えば Linux のスクリプトファイル用の拡張子である .sh にしたからといって、ダブルクリックすれば実行されるわけではありません。これは Windows の .exe や .bat 等とは決定的に違います。

パーミッション

 では、Linux での実行ファイルはどうかというと、ファイル自体ににアクセス権限(パーミッション)というものが有ります。

 まず、メニューから矢印のアイコンで「ターミナル」を開いて下さい。

ターミナル起動

 この黒い画面で、

cd ~

ls -la

を実行してみて下さい。

pi@raspberrypi:~ $ ls -la
合計 132
drwxr-xr-x 20 pi pi 4096 12月 6 20:32 .
drwxr-xr-x 3 root root 4096 11月 26 02:24 ..
-rw------- 1 pi pi 56 12月 6 15:35 .Xauthority
-rw------- 1 pi pi 721 12月 6 19:53 .bash_history
-rw-r--r-- 1 pi pi 220 11月 26 02:24 .bash_logout
-rw-r--r-- 1 pi pi 3512 11月 26 02:24 .bashrc
drwxr-xr-x 5 pi pi 4096 12月 6 15:05 .cache
drwx------ 10 pi pi 4096 12月 6 15:06 .config
drwx------ 3 pi pi 4096 11月 26 03:09 .dbus
-rw-r--r-- 1 pi pi 35 12月 6 15:33 .dmrc
drwxr-xr-x 2 pi pi 4096 12月 6 15:05 .gstreamer-0.10
drwxr-xr-x 3 pi pi 4096 11月 26 02:55 .local
-rw-r--r-- 1 pi pi 675 11月 26 02:24 .profile
drwx------ 2 pi pi 4096 12月 6 18:00 .ssh
drwxr-xr-x 3 pi pi 4096 11月 26 02:55 .themes
drwx------ 4 pi pi 4096 12月 6 15:06 .thumbnails
-rw------- 1 pi pi 353 12月 6 15:35 .xsession-errors
-rw------- 1 pi pi 353 12月 6 15:33 .xsession-errors.old
drwxr-xr-x 2 pi pi 4096 11月 26 02:55 Desktop
drwxr-xr-x 5 pi pi 4096 11月 26 02:55 Documents
drwxr-xr-x 2 pi pi 4096 12月 6 20:31 Downloads
drwxr-xr-x 2 pi pi 4096 11月 26 03:09 Music
drwxr-xr-x 2 pi pi 4096 12月 6 18:49 Pictures
drwxr-xr-x 2 pi pi 4096 11月 26 03:09 Public
drwxr-xr-x 2 pi pi 4096 11月 26 03:09 Templates
drwxr-xr-x 2 pi pi 4096 11月 26 03:09 Videos
drwxr-xr-x 12 pi pi 4096 12月 6 19:19 netbeans
drwxr-xr-x 2 pi pi 4096 11月 26 02:55 python_games
-rw-r--r-- 1 pi pi 18496 12月 6 20:32 setup_trial.sh

 お使いの環境では上記とは違うでしょうが、このようなリストが表示されますね。このリストのうち、最初の方にある . は、現在のディレクトリそのもの、.. は、このディレクトリの親ディレクトリ(一つ上のディレクトリ)を示します。

 このリストのうちの、先頭の方の rwx という文字に注目して下さい。

 対象がファイル(先頭が - で始まる物)の場合、これはそれぞれ

  • r:読み取り
  • w:書き込み
  • x:実行

の権限(パーミッション)があることを意味しています。

 この rwx は 3 つでセットになっていて、前からそれぞれ、ファイルの所有者:所有者グループに所属するユーザー:その他のユーザー のアクセス権限を示しています。

-rw-r--r--  1 pi   pi   18496 12月  6 20:32 setup_trial.sh

は - で始まるのでファイルであることが分かりますが、rw-r--r-- なので、所有者は読み書き可、グループのユーザーとそれ以外は読み取りだけしか出来ないという設定になっているわけです。

 ですから、このファイルをダブルクリックしても実行されることはなく Raspbian 標準の Leafpad というテキストエディタで、ただのテキストファイルとして開かれます。

実行権限無し

 そこで、このファイルに実行権限を与えてみようと思います。

chmod u+x setup_trial.sh

chmod はパーミッションを操作するコマンドで、u+x は「ユーザー(ファイルの所有者)に実行権限を追加する」という意味です。逆にユーザー(ファイルの所有者)から実行権限を剥奪するには u-x となります。

pi@raspberrypi:~ $ ls -la
合計 1128
drwxr-xr-x 20 pi pi 4096 12月 6 20:34 .
drwxr-xr-x 3 root root 4096 11月 26 02:24 ..
:
-rwxr--r-- 1 pi pi 18496 12月 6 20:32 setup_trial.sh

 今度は setup_trial.sh に x が追加されています。これで、このファイルは実行が可能になりました。

 このファイルをダブルクリックしてみると…

実行権限有り

このように、実行可能なファイルとして認識され、処理を選択するダイアログが表示されるようになりました。

 こうした細かな権限設定が、Linux の方が Windows よりも安全だと言われる一因になっているようです。

 なお、chmod は + や - といった権限の追加・削除の他に、直接数値を指定する方法もあります。これは、

  • 1:実行
  • 2:書き込み
  • 4:読み込み

となっていて、それぞれの和で値を指定できます。例えば、

  • 所有者:全て可能 4+2+1 = 7
  • グループ:読み書き可能 4+2 = 6
  • その他:一切アクセス不可 0

の場合、

chmod 760 setup_trial.sh

のようにしてできます。

pi@raspberrypi:~ $ ls -la
合計 132
drwxr-xr-x 20 pi pi 4096 12月 6 21:03 .
drwxr-xr-x 3 root root 4096 11月 26 02:24 ..
:
-rwxrw---- 1 pi pi 18496 12月 6 20:57 setup_trial.sh

 一般的にはこちらの説明のほうを頻繁に目にしますね。

 さて、ところで先頭が - で始まるのはファイルだと書きましたが、d というものもありますね? これは何かというと、大体おわかりかと思いますが、ディレクトリです。

 ディレクトリの場合の rwx はファイルとは少し意味合いが違い、

  • r:ディレクトリの内容の一覧表示が可能
  • w:ディレクトリ内のファイルの作成、削除が可能
  • x:ディレクトリ内のファイルの読み書き可能および cd コマンドでディレクトリ内に入ることも可能

となっています。 cd というのは操作するディレクトリを指定するコマンドで、

cd ディレクトリパス

と記述することで、任意のパスに移動できます。Windows のコマンドプロンプトでは dir と記述子ますね。

 一番最初に cd ~ で移動しましたが、この ~ は Linux ではログインしているユーザーのホームディレクトリのことです。pi ユーザーの場合は、/home/pi と ~ は同じ意味になります。

 補足として、ファイル、ディレクトリの他に、Linux では シンボリックリンクというものがあります。Windows でいうところのショートカットですが、Linux のシンボリックリンクの方が高機能です。

 シンボリックリンクの場合は l で始まります。

 ところで、先程から使っている

ls -la

 ですが、ls は恐らくリストの略かと思います。- で始まる文字はオプションと呼ぶのですが、

  • l:ファイルの詳細も同時に表示する。ファイル名,ファイル・タイプ,パーミッション,ハード・リンクの数,オーナー名,グループ名,バイト・サイズ,タイム・スタンプの順に表示する
  • a:ドット・ファイル(ファイル名の先頭にピリオドがあるファイル)を含んだすべてのファイルを表示する

となっていて、よく使います。これはセットで使うので、-la で覚えておきましょう。

 オプションを指定しないと、隠しファイルを覗いたディレクトリ、ファイル、リンクのみを表示してくれます。例えば、以下のようになります。

pi@raspberrypi:~ $ ls
Desktop Downloads Pictures Templates netbeans setup_trial.sh
Documents Music Public Videos python_games

 ファイルの存在確認をしたいだけの場合は、こちらを使いましょう。

 なお、上記を比較するとわかると思いますが、Linux では、ドット . で始まるファイルは隠しファイル扱いになります。

オーナー、グループ、全員

 先程のパーミッションの説明で、グループという表現が出てきましたが、これも Linux 特有の概念です。

 Linux ではおおまかに言うと root という管理者とそれ以外のユーザーに分かれるのですが、このユーザーは、最低一つ、どこかのグループに所属することになります。

 例えば pi ユーザーを見てみると、

pi@raspberrypi:~ $ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio)

このようなグループに所属していることが分かります。id コマンドはユーザーIDやグループIDを表示するコマンドです。

 先程の

-rwxr--r--  1 pi   pi     18496 12月  6 20:32 setup_trial.sh

の 「pi pi」は、ファイルの所有者を表していて、前の pi は所有者(オーナー)、後ろの pi はグループです。

 ここでは、試しに新規ユーザー、新規グループである hal を作成してみます。

sudo adduser hal

 テストなので、パスワードは簡単なもの、ユーザー情報は全てエンターにしました。

ユーザ 'hal' を追加しています...
新しいグループ 'hal' (1001) を追加しています...
新しいユーザ 'hal' (1001) をグループ 'hal' として追加しています...
ホームディレクトリ '/home/hal' を作成しています...
'/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました
hal のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []:
部屋番号 []:
職場電話番号 []:
自宅電話番号 []:
その他 []:
以上で正しいですか? [Y/n]

ユーザー情報を見てみると

pi@raspberrypi:~ $ id hal
uid=1001(hal) gid=1001(hal) groups=1001(hal)

このように、hal グループに所属しています。

ここで一旦 Raspberry Pi ボタンから Shutdown > Exit to command line で PIXEL を抜け、exit とタイプして pi ユーザーをログアウトします。

そして、hal ユーザーログインして、

startx

で、PIXEL を開始します。

 この状態で、先程のファイルをダブルクリックしてみます。

halユーザーでの実行

 再び、ただのテキストファイルとして開かれました。このように、ファイル所有者でない場合は実行が出来ません。

 今度は再び pi ユーザーに戻り、このファイルの所有者を変えてみます。

sudo chown hal.hal setup_trial.sh

chown は、ファイルやディレクトリの所有者を変更するコマンドです。

pi@raspberrypi:~ $ ls -la
合計 132
drwxr-xr-x 20 pi pi 4096 12月 6 21:03 .
drwxr-xr-x 4 root root 4096 12月 6 21:25 ..
:
-rwxr--r-- 1 hal hal 18496 12月 6 20:57 setup_trial.sh

 この状態で、hal ユーザーで再び setup_trial.sh を実行すると…

halユーザーでの実行2

このように、実行可能になっています。

 ここでさらに、今度はファイルの所有者 pi、グループ hal にしてみると、

sudo chown pi.hal setup_trial.sh
pi@raspberrypi:~ $ ls -la
合計 132
drwxr-xr-x 20 pi pi 4096 12月 6 21:03 .
drwxr-xr-x 4 root root 4096 12月 6 21:25 ..
:
-rwxr--r-- 1 pi hal 18496 12月 6 20:57 setup_trial.sh

halユーザーでの実行3

 このように、実行できません。グループのユーザーには実行権限が無いからです。

 そこで、今度は pi ユーザーで chmod で、グループに実行権限を追加してみます。g+x は、グループに実行権限を追加です。

chmod g+x setup_trial.sh
pi@raspberrypi:~ $ ls -la
合計 132
drwxr-xr-x 20 pi pi 4096 12月 6 21:03 .
drwxr-xr-x 4 root root 4096 12月 6 21:25 ..
:
-rwxr-xr-- 1 pi hal 18496 12月 6 20:57 setup_trial.sh

 2 番目の rwx に x が追加されました。これを、hal ユーザーで実行してみると、

halユーザーでの実行4

このように、実行ファイルとして認識されました。

 以上で大体、パーミッション、所有者、グループの概念がお分かりいただけるかと思います。

 最後に Raspberry Pi を再起動し、pi ユーザーでログインし直してから、

sudo userdel -r hal

 で、hal ユーザーを削除してしまいましょう。–r はユーザー削除にあたりホーム・ディレクトリも同時に削除するオプションです。

 なお、chmod で利用した u g の他に、その他のユーザーについては o(other の意)、ugo の全てを示すには a(all の意)が利用できます。

sudo って何?

 頻繁に目にすることになる sudo とは何でしょうか? これは、ユーザーがコマンドを管理者権限で実行する場合に、最初に宣言します。

 勿論、誰でも sudo できるわけではなく、/etc/sudoers というファイルに登録されている人だけが実行できます。

 そして注意点ですが、/etc/sudoers は、絶対に直接編集しないで下さい。誤って設定を間違えると、OS に関する重要な操作が一切できなくなったりします。この場合は他の Linux でディスクをマウントしてファイルを修正するなど、かなり大変な作業になります。

 sudoers を操作する場合は専用のコマンド

sudo visudo

 を使って下さい。Raspbian の場合、編集用のエディタとしては nano で開きます。

 初期状態ではこのような内容になっています。

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

簡単な説明としては

who  where=(as_whom)  what 

となっていて、「誰が」「どのホスト(ホスト名またはIP アドレス等)で」「誰になれるか:どのグループになれるか」「何が出来るか」を記してあります。

 「誰が」の部分について、% で始まるものはグループ指定です。

pi@raspberrypi:~ $ id pi
uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),101(input),108(netdev),999(spi),998(i2c),997(gpio)

をみると、pi ユーザーは sudo グループに所属しています。

%sudo   ALL=(ALL:ALL) ALL

 このように、sudo グループのユーザーは、sudo をつければこの Raspbian 上のすべての操作が管理者権限で実行できるようになっています。

 そして、#includedir /etc/sudoers.d の記述にある

cat /etc/sudoers.d/010_pi-nopasswd

には、

pi ALL=(ALL) NOPASSWD: ALL

 が記述されているため、pi ユーザーで sudo をつけて実行すると全ての操作を管理者権限で実行出来、パスワードも求められない(NOPASSWD)ようになっています。

cat コマンドでファイル内容を表示

 cat コマンドは、ファイルの内容をただ、出力します。編集はできないので役に立たなそうに見えますが、例えば

cat fileA.txt > fileB.txt

 のようにすると、fileA.txt の内容を fileB.txt として書き出してくれます。この > は、上書きモードです。では、追記したい場合はどうするかというと、

cat fileA.txt >> fileB.txt

となります。簡単ですね。

Vim エディタと nano エディタ

 Raspbian のデフォルトのテキストエディタは、vim-tiny と nano が入っています。vim-tiny は機能が最低限でとても使いづらいので、正規版の Vim を入れたほうが良いでしょう。

参考)設定ファイルの編集方法

 一般的な Raspbian の WEB記事では vim を使った説明が多いので、Vim を入れておくにこしたことはないでしょう。

 一方、nano は最初から普通に使えるでしょう。Vim は使い方を知らない人には使い方が全くわからないのに対し、nano は大抵、誰でも編集はできます。唯一わからないのはファイルの保存方法くらいでしょうが、これは画面下にメニューが表示されているのでそれを見て、Ctrl + X を押し、あとは表示されるメニューに従って操作すればよいだけです。

ファイルのダウンロード

 Windows の場合、ブラウザで WEB サイトを開いて Download ボタンをクリック~、というのが一般的なダウンロードですが、Linux ではコマンドラインでダウンロードを行うケースが多くあります(勿論、Linux でもブラウザのダウンロードボタンからダウンロードはできます)

 古くから使われているダウンロード用のコマンドは wget です。発音は「ダブリュゲット」です。facebook の創設者ザッカーバーグをモチーフにした映画「ソーシャル・ネットワーク」で主人公が「wget で手に入った」といったセリフを言いますので、一度観てみてください。

 例えば、以下のようにします。

wget -O setup_trial.sh "http://feijoa.jp/getFile/?place=products&filename=setup_trial.sh"

 "http://feijoa.jp/getFile/?place=products&filename=setup_trial.sh" が、ダウンロードするファイルの URL です。ダブルクオートで囲わなければならないわけではありませんが、囲わない場合、ファイル名に空白文字などがあると正しくダウンロード出来ません。ですから、ダブルクオートかシングルクオートで囲ってしまう方が無難です。

 -O オプションは、その後に記述したパスでダウンロードしたファイルを保存します。先程の空白文字のような理由で、ダウンロードしたファイルが名前が変わったり正しく保存されない場合があります。-O オプションで、ダウンロードした後のパス・ファイル名を指定すれば、間違いなくそのパスで保存されます。ネットの記事では -O オプションを省いているものが多くありますが、このために問題があるケースが稀にあります。

ファイルの解凍

 ファイルをダウンロードしてくる場合、多くは圧縮されています。これは Windows 同様、解凍して利用する必要があります。

zip ファイル

unzip ファイル名

tar.gz ファイル

tar xfvz ファイル名

 殆どの場合このどちらかで解凍できます。

ディレクトリの作成

 ディレクトリの作成は、mkdir です。

mkdir  ディレクトリ名

で、現在のディレクトリ内に「ディレクトリ名」のディレクトリを作成します。パス指定することで、別のディレクトリ内にも作成できます。

mkdir /var/www/ディレクトリ名

ファイル、ディレクトリの移動

 移動は mv コマンドです。以下で、同ディレクトリ内の fileA.txt が test ディレクトリ内に移動されます。

mv fileA.txt test/

 注意点として、mv コマンドは存在しないディレクトリには移動できません。あらかじめ、mkdir でディレクトリを作成して下さい。

ファイル、ディレクトリのコピー

 コピーは cp コマンドです。

cp -r test test2

 オプションの -r は再帰的にコピーを行うので、test 内に階層的な構造がある場合でも全てコピーされます。

ファイル、ディレクトリの削除

 削除は rm コマンドです。

rm -rf test

 オプションの -r はディレクトリ内を再帰的に削除します。 -f は削除の警告メッセージを表示しません。このように -rf オプションを指定すると、確認メッセージなしにディレクトリごと完全に削除できます。

 ところで、Linux では全てのファイル・ディレクトリが / を頂点とする階層構造になっていることは既に説明したとおりです。

 では、

rm -rf / 

 としたらどうなるでしょう?

 システムの全てのファイル・ディレクトリが綺麗サッパリ削除…、とは、なりません。昔の Unix(Linux の元になったOS)では確かに削除されたようですが、現在の Unix / Linux ではこのような誤操作からくる重大なファイル操作を防止するため、上記コマンドでは確認メッセージが表示されるだけで、実際には削除されなくなっています。

 では、それでも削除したい場合は? 上記コマンドを実行してみれば、OS がその方法を教えてくれます。

まとめ

 大体、以上のような知識だけあれば、一通りの操作はできるでしょう。あとは分からなかっ時に google で検索して理解を深めていって下さい。

 


ご購入

もう少々お待ち下さい。

体験版

version 1.5 から、IPアドレス制限が無くなり、ライセンス制になりました。ライセンスされていない場合、起動後30時間後に自動的に HAL を終了します。

体験版のインストーラー・スクリプトをダウンロード インストーラー・スクリプト
SHA-1: dd2a390b4f0f8c15301eaee23cd92bd5e831da91
※インストール方法については ソケットサーバー「HAL」の概要 (version 2.0対応版)~導入方法 を御覧ください。

体験版パッケージ
HAL_trial_2_0.tar.gz | version 2.0 | SHA-1: ce31802a5b423a9b0d73721a3d43e0585b009a6f
試用期限 2017/1/31 まで

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


この記事に返信

このコメントに返信