第13回 シェル

今回は、Rasbperry Pi OSでよく利用する「シェル」について、実際に操作しながら理解していきます。

目次

シェル?

記事のタイトルになっている「シェル」とは何かを理解するために、前回の記事で説明したLinuxの構造から振り返ってみたいと思います。

Linuxの構造は、以下のように土台となるLinuxカーネル部分と、いろいろな機能を実現するためのモジュール部分から構成されていることを説明しました。

Linux構造2

また、Linuxカーネル自体は基本的な制御しか行わず、人間とやりとりするインターフェースすら持っていないことを説明しました。

例えばラズベリーパイを、デスクトップタイプの機器構成で使用する場合は、上の図にあるデスクトップ環境モジュールによりデスクトップ環境でいろいろな操作を行います。

WindowsやmacOSの場合では、ほとんどの操作がデスクトップ環境で済んでしまいます。ところが、Raspberry Pi OS(LinuxOS)の場合は、多くの場面でコマンドを入力して制御する必要が出てきます。

そこで、Linuxカーネルに対してコマンドで制御できるようにするために「シェル」というモジュールを使います。

シェルモジュール

この「シェル」という言葉は「殻」という意味なのですが、上の図で「殻」と説明されてもいまいちピンときませんよね。

Linuxカーネルはそれ自体では何もできませんので、以下のように「シェル」で囲んで外とのやり取りを行うというイメージなんです。

シェルのイメージ

Linuxをコマンドで制御する場合、コマンドをシェルに送ったり、処理結果をシェルから返してもらう必要があります。このシェルとのやりとりは、以下のような「ターミナル」というアプリを使用して行います。

シェルとターミナルアプリ

このように説明すると、「シェル」という特定のモジュールがあるような気がしてしまいますよね。ところが、このシェルには多くの種類があります。

シェルに多くの種類があるといわれても、ちょっとイメージがつかめないですよね。

例えばインターネットのブラウザは、ChromeやSafari、Firefoxなどいろいろな種類があります。これらのアプリはどれもウェブサイトを表示するという目的は同じですが、機能は少しずつ違っています。どれを使うかは人それぞれという感じですよね。

「シェル」も、Linuxカーネルをコマンドで操作する、という目的は同じですが、種類によって細かいところで少しずつ機能が異なります。

Raspberry Pi OSにはシェルは5種類ほどインストールされています。デフォルトは「bash」というシェルです。

普段は使っているシェルの種類はあまり意識する必要はありません。今後、ネットや書籍で調べ物をすると「bashの場合はこうしてこうして…」などとシェルの名前が出てくることがあります。そのときは「bash」は自分が使っているシェルだな、と理解するようにしてください。

ターミナルアプリ

シェルを操作するためにはターミナルアプリが必要になりますが、このターミナルアプリもいくつか種類があります。

これから、それぞれの機器構成別に代表的なターミナルアプリを説明します。

デスクトップタイプ機器構成の場合

Raspberry Pi OSのデスクトップ環境ではデフォルトで「LXTerminal」というターミナルアプリがインストールされていまスノでこのアプリを使用します。

Raspberry Pi OS(LinuxOS)ではコマンドで制御することが多いため、デスクトップ環境では以下のようによく使うアプリとしてデフォルトで登録されています。

LXterminalアイコン

それでは、LXTerminalを起動してみましょう。上の画面の「LXterminal」アイコンをクリックしてください。しばらく待っていると以下のような画面が表示されればOKです。

LXTerminalウィンドウ

なお、フォントサイズが小さい場合は以下の手順でサイズを調整してみてください。

  1. 「編集」メニュー → 「設定」メニューを選択
  2. 「端末のフォント」で現在選択されているフォントをクリック
  3. 「フォントの選択」ダイアログでサイズの値を変更後、「選択」ボタンでダイアログを閉じる

LXTerminalフォントサイズ設定

リモート接続タイプ機器構成の場合

リモート接続タイプ機器構成のOSインストールの記事で説明しましたが、Windowsはコマンドプロンプト、macOSはターミナルアプリを使用します。いずれのアプリもデフォルトでOSにインストールされています。

Windowsの場合

Windowsデスクトップ左下の「Windowsメニュー」→「Windowsシステムツール」から「コマンドプロンプト」を起動します。

起動後、以下のコマンドを入力してリターンキーを押します。

ssh ユーザ名@raspberrypi.local

パスワードを聞かれますので設定したパスワードを入力、リターンキーを押します。

以下のような表示になればOKです。

Windowsコマンドプロンプト

macOSの場合

Finderから、アプリケーション → ユーティリティ → ターミナルアプリを起動します。

起動後、以下のコマンドを入力してリターンキーを押します。

ssh ユーザ名@raspberrypi.local

パスワードを聞かれますので設定したパスワードを入力、リターンキーを押します。

以下のような表示になればOKです。

macOSターミナル

「ユーザ名@raspberrypi:~ $」を理解する

ターミナルの画面には以下のような文字列が表示されていますよね。

ユーザ名@raspberrypi:~ $ 

これはシェル「bash」が表示しています。この文字列は「コマンドプロンプト」と呼ばれていて、「命令(コマンド)の入力を促す(プロンプト)」という意味です。bashがユーザからのコマンド入力を受け付けるところです。

とはいっても、そもそもこの「ユーザ名@raspberrypi:~ $」ってどういう意味があるのでしょうか。

実はこの文字列の意味を理解すると、Rasperry Pi OS(LinuxOS)の理解が深まりますので、これから一緒に解明していきたいと思います。

これ以降の説明は、「ユーザ名」を「pi」として説明を進めます。ユーザ名「pi」の部分は、ご自身で設定したユーザ名に置き換えてお読みくだい。

ユーザ名が「pi」の場合、上の表示は以下のようになります。

pi@raspberrypi:~ $ 

「pi@raspberrypi:」部分の意味

これから「pi@raspberrypi:」部分を、「pi」「@raspberrypi」「:」に分けて説明していきます。

「pi」

WindowsやmacOSでは、ユーザアカウントを複数作成して、1台のPCを複数人で利用できますよね。Raspberry Pi OS(LinuxOS)でも同様に、ユーザアカウントを複数作成することができます。

この入門シリーズでは、インストール時に設定したユーザアカウントしか使用しませんが、将来的にはユーザアカウントを追加するかもしれません。また、インストール時に作成したユーザアカウントとは別に、ユーザ名が「root」というユーザアカウントがデフォルトで作成されているんです。

このように、複数のユーザアカウントが存在するような状況では、今ログインしているアカウントがわからなくなるかもしれません、、、よね。多分、、、。

このようなときのために、コマンドプロンプトの最初の部分には、今ログインしているユーザ名が表示されています。

コマンドプロンプト_ユーザ名

せっかくターミナルを起動しましたので、ちょっと操作してみましょう。

次のように whoami というコマンドを入力してリターンキーを押してみてください。(今後の説明ではリターンキーを押す、という記述は省略します)

ユーザ名@raspberrypi: ~ $ whoami

これは「Who am I?」(私は誰?)を意味する、今ログインしているユーザ名を表示するコマンドです。自分のユーザ名が表示されたと思います。

この操作は、ターミナルを通して「whoami」というコマンドをシェル(bash)に渡して処理してもらい、シェルから返してもらった結果を表示している、という流れになります。

でもよく考えてみると、コマンドプロンプトにユーザ名が表示されているのに、「whoami」っていうコマンドがあるのは不思議ですよね。

実は、コマンドプロンプトはカスタマイズできるんです。例えば以下のようにユーザ名を表示しないようにして、コマンドプロンプトを短くすることもできます。(残りの文字はまだ説明していませんので、この段階では何を意味しているのかわかりませんが…)

raspberrypi: ~ $ 

このようにコマンドプロンプトにユーザ名を表示しないようにカスタマイズすると、そういう時に限って「あれ、今どのユーザアカウントでログインしてるんだっけ?」ということが起こります。そのような時は「whoami」コマンドを使って現在ログインしているユーザ名を確認します。

なお、Raspberry Pi OSには「グループ」という分類もあります。ユーザは必ず最低1つのグループに所属することになっています。

とはいっても、インストールするときにユーザ名は設定しましたが、グループは何も設定していませんでしたよね。

実は、新しくユーザアカウントを作成すると、デフォルトでユーザ名と同じ名前のグループが作成され、そのグループに所属します。ちょっとややこしいので具体例で説明します。

例えば、「pi」というユーザ名のアカウントを新規に作成すると、「pi」というグループが作成され、「pi」ユーザは自動的に「pi」グループに所属します。また、一つのユーザアカウントは複数のグループに所属することができます。

この「グルーブ」は、グループごとにファイルアクセス権を制御する、といったような場面で使用されます。

例えば、何か製品を作る時、開発チームのメンバのユーザアカウントは「development」グループに所属、企画チームメンバのユーザアカウントは「planning」グループに所属、この製品のチームリーダは両方のグループに所属する、という感じです。このようにグループを作成しておき、「development」グループのメンバのみアクセス許可するファイル、という設定ができます。(この記事の最後の方で具体例が出てきます)

それでは、自分のユーザ名はどのグループに所属しているのか確認してみましょう。所属しているグループを確認するには groups コマンドを使用します。 実際に確かめてみましょう。

ユーザ名@raspberrypi: ~ $ groups

デフォルトで、自分のユーザ名のグループだけではなく、多くのグループに所属していますよね。このように、Raspberry Pi OSではユーザアカウントを作成すると、必要と思われるグループに一通り登録してくれています。

ところで、表示されたグループをよく見ると、その中にどこかで見かけたような「gpio」というグループがあると思います。

Raspberry Pi OSでは、GPIOを制御できるのはgpioグループに所属しているユーザに制限されています。自分のユーザ名はgpioグループに所属していますので、GPIO制御をできる権限を持っていることになります。

「@raspberrypi」

Raspberry Pi OS(LinuxOS)はWindowsやmacOSと同様、コンピュータの名前が設定されています。

Raspberry Pi OSでは、このコンピュータ名のことを「ホスト名」と呼んでいます。

コマンドプロンプトの「@」以降の文字列は、今使用しているラズベリーパイのホスト名を意味しています。「@raspberrypi」は、「ホスト名が『raspberrypi』のラスベリーパイ」という意味になります。

ここまでをまとめると「pi@raspberrypi」とは、「ホスト名が『raspberrypi』のラズベリーパイを使用していて、ユーザアカウントは『pi』でログインしている」という意味になります。

コマンドプロンプト_ホスト名

今回のシリーズではラズベリーパイは1台だけ使用しますので、いちいちホスト名を確認しなくても問題ないですよね。でもホスト名を確認したいケースもあるんです。

例えば、ラズベリーパイを2台用意してリモート接続をして使用するケースを想定してみます。

2台のうち、1台はテスト用で最悪OSが壊れてしまっても問題ないように使用、もう1台は動作確認できたら、製品を仕上げるのに使用する、というように使う場合を想定してみます。

リモート接続する場合、以下のようにWindowsやMac上で複数のターミナルアプリのウィンドウを開いて、2台のラズベリーパイに接続することができます。このように使う場合、どちらのウィンドウがどちらのラズベリーパイに接続されているのかわからなくなることもあるかもしれませんよね。そこで、コマンドプロンプトに表示されているホスト名を頼りに区別するわけです。

複数ターミナル利用ケース

ここで、ホスト名を調べるコマンドも動作確認しておきます。以下のように入力するとホスト名が確認できます。

ユーザ名@raspberrypi: ~ $ hostname

「raspberrypi」と表示されればOKです。

ホスト名の説明の最後に、リモート接続タイプでSSH接続するときのホスト名について補足しておきます。

リモート接続タイプで、ラズベリーパイにSSH接続するとき、以下のように入力してラズベリーパイに接続しました。

ssh ユーザ名@raspberrypi.local

sshコマンドの仕様は、

ssh ユーザ名@ホスト名

となっています。ということは、sshコマンドでホスト名が「raspberrypi」というラズベリーパイにリモート接続する場合、

ssh ユーザ名@raspberrypi

が正しいような気がしますよね。でも実際はホスト名を「raspberrypi.local」と指定しています。

これはmDNSプロトコルで接続するためです。mDNS自体の詳しい説明は省略しますが、今後何かの事情でラズベリーパイのホスト名を変更した場合、sshで接続する際にはラズベリーパイのホスト名に「.local」をつけるようにしてください。

「:」

「ユーザ名@raspberrypi : 」の最後の「 : 」は単なる区切りです。このあとに表示する情報と区分けをするため「 : 」を表示しています。

コマンドプロンプト_区切り文字

なお、以前のRaspberry Pi OSでは、この「 : 」はなく、コマンドプロンプトは以下のような表記でした。

ユーザ名@raspberrypi ~ $ 

個人的にはこちらの方がすっきりしているように感じますが、みなさんはいかがでしょうか。

「 〜 」部分の意味

結論から説明すると、この部分は現在のディレクトリ位置を示していて、これを「カレントディレクトリ」と呼びます。カレントは「現在」という意味です。

コマンドプロンプト_カレントディレクトリ

WindowsやmacOSでは、ファイルを整理するときにフォルダを作りますよね。ディレクトリはフォルダと同じ意味、と理解していただいて問題ありません。「カレントディレクトリ」は、WIndowsやmacOSでいうと「今開いているフォルダ」という感じになります。

カレントディレクトリ

でもカレントディレクトリが「〜」って意味がよくわかりませんよね。

そこで、Linuxのディレクトリ構成から理解していきましょう。

Linuxでは一番上のディレクトリはルートディレクトリと呼ばれ、

/

で表します。

Windowsでは一番上のフォルダは「C:¥」など、ドライブ名と「¥」で表現されます。
また、macOSでは一番上のフォルダはFinderでは表示されていませんが、内部ではRaspberry Pi OSと同様に「/」です。

Raspberry Pi OSでは、ルートディレクトリの下にいろいろなディレクトリが階層構造で作成されていて、それぞれ必要なファイルが格納されています。なお、ディレクトリの区切りは「/」です。

例えば、ユーザアカウントごとのディレクトリは、ルートディレクトリのすぐ下の

/home

というディレクトリの下に、ユーザ名で作成されます。

例えば「pi」というユーザ名であれば、

/home/pi

というディレクトリが作成されています。

それでは、カレントディレクトリを確認するコマンドがあるので確認してみます。

pi@raspberrypi: ~ $ pwd

pwdは “Print Working Directory” (現在作業しているディレクトリを表示する)の略です。コマンドを入力すると、

pi@raspberrypi: ~ $ pwd
/home/pi

というように表示されましたよね。ログイン直後のカレントディレクトリは、ユーザのホームディレクトリになっています。

ん?

でも、コマンドプロンプトで表示されているカレントディレクトリは「〜」でしたよね。pwdコマンドで確認したカレントディレクトリは「/home/pi」でした。

ちょっとややこしいですが、この「〜」という記号は、自分のホームディレクトリを意味しています。

同じ「〜」でも、例えばユーザ名「raspberry」でログインしている時は、「〜」は「/home/raspberry」になります。また、ユーザ名「pi」でログインしている時は、「〜」は「/home/pi」になります。

ホームディレクトリが「〜」というのはLinux系の記事ではよく出てきますので、ぜひ覚えておいてください。

それでは次に、ホームディレクトリの中身を見てみましょう。ディレクトリの中身を表示するには、「ls」コマンドを使用します。「ls」はlistの意味です。

ユーザ名@raspberrypi: ~ $ ls
Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

紫色の文字はディレクトリを意味しています。上のように、あらかじめいくつかのディレクトリが作成されています。ディレクトリをよく見ると、「Desktop」があったり「Music」「Pictures」があったり、なんかWindowsやmacOSに似てますよね。

ではMusicディレクトリの中身を見てみます。Musicディレクトリの中身を見るには、「ls」コマンドの後にスペースを入れて、ディレクトリ名を入力します。

ユーザ名@raspberrypi: ~ $ ls Music

何も表示されませんでした。ちょっと寂しいですが、Musicディレクトリの中身は空です。もしかしたら以下のように表示された方もいるかもしれません。

ユーザ名@raspberrypi: ~ $ ls music
ls: 'music' にアクセスできません:そのようなファイルやディレクトリはありません

上の例はコマンドを「music」というように、最初のmを小文字で入力しています。Linuxではディレクトリ名、ファイル名は大文字小文字を区別します。「Music」と「music」は別物になりますので注意が必要です。

もうちょっとディレクトリに慣れておきましょう。

次に「Bookshelf」ディレクトリの中身を確認してみます。

もしかして、こんな長い文字列打つのって面倒だよね、って心の中で思いませんでしたか?それは普通の感覚ですので安心してください。100%の人がそう思うだろう、ということで、ちょっと工夫がされています。

以下のように、「ls」コマンドのあとにスペースを入れて、「B」(大文字)だけ入力してください。

ユーザ名@raspberrypi: ~ $ ls B

この状態でTABキーを押してみてください。

ユーザ名@raspberrypi: ~ $ ls Bookshelf/

入力したかった「Bookshelf」が自動入力されましたよね。この状態でリターンキーをー押すと、Bookshelfディレクトリの中身が表示されます(今度は何かのファイルが表示されましたよね)。

このように先頭の文字を入力した後にTABキーを押すと補完してくれる機能があります。

カレントディレクトリを見ると、Bで始まるものは「Bookshelf」しかないですよね。ということでTABキーを押すと「Bookshelfって入力しようとしてるんだな」ってことで自動的に補完してくれます。なお、最後に「/」が付いていますが、これはディレクトリであることを示しています。「/」の入力はしなくても問題ありません。

ではもう一つやってみましょう。「Documents」ディレクトリの中身を見てみます。先ほどと同じように「ls」のあとに「D」だけ入力します。

ユーザ名@raspberrypi: ~ $ ls D

ここまで入力したらTABキーを押して、、、なんか警告音が鳴っただけですよね?

ディレクトリをよく見てみると、確かにこれを補完するのは人間でも難しいです。というのは、カレントディレクトリには D で始まるディレクトリは「Desktop」「Documents」「Downloads」があります。「Dで始まる『あれ』」って言ってもわからないですよね。それではもう一回TABキーを押してみてください。

ユーザ名@raspberrypi: ~ $ ls D
Desktop/   Documents/   Downloads/

これは、Dだけじゃわからないのに、もう一回TABキーが押されてウザいので、仕方ないからDで始まるディレクトリを表示してやった、というイメージでしょうか。

ディレクトリ名の「Documents」を表示してもらうのにどこまで入力する必要があるかというと、「Documents」と「Downloads」がありますので、「Doc」までの入力は必要ですよね。ということで、Docまで入力してTABキーを押してみます。

pi@raspberrypi: ~ $ ls Doc (ここでTABキーを押す)

無事補完されましたよね。この状態でリターンキーを押すと、Documentsディレクトリの中身が表示されます(このフォルダも空ですね)。

なお、TABキーを使った補完機能は、ディレクトリだけでなくファイル名やコマンドでも有効です。これはかなり多用するのでぜひ慣れておいてください。

ちょっと例としては強引ですが、また「Music」フォルダの中身が見たくなりました(中身が空ですが…)。この場合は「ls M」まで入力してTABキーを押せば入力の手間が省けますよね。

ここで、入力の手間をさらに省く他の方法もご紹介しておきます。

「ls Music」は先ほど練習で一度入力しましたが、それを呼び出す方法があります。上矢印キーを一度押してみてください。

pi@raspberrypi: ~ $ ls Documents/

こんな感じになりましたか?

上矢印キーを1回押すたびに、過去に入力したコマンドを呼び出すことができます。上矢印キーを何回か押すと、「ls Music」が出てきましたよね。出てきたらリターンキーを押せばOKです。なお、行きすぎた場合は下矢印キーを押せばOKです。この機能もよく使いますので、ぜひ慣れておきましょう。

「$」部分の意味

これも結論から先に説明すると、コマンドプロンプトの最後の文字は、現在ログインしているユーザの権限を表現しています。権限は「$」や「#」などの記号で表現されています。

WindowsやmacOSではユーザアカウント(権限)の種類として、「管理者」や「一般ユーザ」がありますよね。

Linuxの場合はユーザ権限に2種類あります。一般ユーザ(一般権限)とrootユーザ(管理者ユーザ)です。記号は以下のようになっています。

記号 意味
$ 一般ユーザ権限(一般権限)
# root権限(管理者権限)

以上が「pi@raspberrypi:~ $」の意味になります。いったんここまでの内容をまとめておきましょう。

コマンドプロンプト_権限

ここまで、ターミナルアプリでコマンドによりシェルを操作してきました。少しは慣れてきましたでしょうか。

Raspberry Pi OSを含むLinuxOSでは、このようにコマンドでOSを制御することが非常に多いので、最初はちょっと大変かもしれません。ぜひ少しずつ慣れていくようにしてください。

ユーザの権限

今後、ラズベリーパイについて書籍やネットを調べる必要が出てくると思います。検索結果の内容を見ると、多くのケースでターミナルでの操作が説明がされています。特にコマンド入力の説明で、

$ pwd

とか

# apt update

という記述を見ることがあります。

この2つは先頭の文字が異なっている点に注目してください。

コマンドの最初に「$」と書かれている場合は「このコマンドは一般ユーザ権限で実行してください」という意味で、「#」の場合は「このコマンドはroot権限で実行してください」という意味になります。いずれの場合も「$」や「#」は入力せず、それ以降が入力するコマンドになっていますので、入力する場合は注意してください。

説明文では「次のコマンドはスーパーユーザ権限で実行してください」などと明示的に書かず、このようにコマンド入力時の記号で表現している人も多いので、このように書き方にも慣れておきましょう。

それでは、「ls」コマンドを使って、権限の種類などによって、何がどのように制御されているのか確認していきます。

先ほどは「ls」コマンドをそのまま使用しましたが、オプションをつけると表示内容を変えることができます。今回は「ls」コマンドで詳細情報まで表示させてみます。

詳細情報まで表示するには、以下のように「ls」に続いてスペース、ハイフン、ローマ字小文字のエルを入力します。

ユーザ名@raspberrypi: ~ $ ls -l

コマンドを実行すると以下のように細かい情報が表示されたと思います。(「pi」の部分はご自身で設定したユーザ名になっています)

pi@raspberrypi: ~ $ ls -l
合計 36
drwxr-xr-x 2 pi pi 4096  4月  4 23:36 Bookshelf
drwxr-xr-x 2 pi pi 4096  4月 10 18:14 Desktop
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Documents
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Downloads
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Music
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Pictures
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Public
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Templates
drwxr-xr-x 2 pi pi 4096  4月 10 18:15 Videos

「ls」のみ入力した時はディレクトリ名が表示されただけですが、今回は各ディレクトリの詳細情報が表示されています。オプションの「-l」はロング形式(詳細形式)で表示する、という意味になります。

結果の1行目は「合計 36」と表示されていますが、これはリストされたファイルサイズの合計ブロック数で、Raspberry Pi OSの場合は1ブロック=1kバイトで表示されています。つまり、表示されたファイルは合計で36ブロック(36kバイト)という意味です。

次の行からはどの行も同じフォーマットですので、Desktopディレクトリを例に説明します。

ls -lコマンド

行の最後から説明したほうが都合がよいので、「Desktop」から説明します。といっても「Desktop」は説明するまでもないですよね。オプションなしで「ls」コマンドを入力したときに表示されたディレクトリ名の「Desktop」です。行の最後はディレクトリやファイルなどの名称が表示されます。

右から2番目の「4月 10 18:14」という部分は、このディレクトリの更新日時になります。年号がない場合は現在の年になります。この例ですと「今年の4月10日 18:14」ということになります。

その左側の数字「4096」はサイズを表していて、単位はバイトです。Raspberry Pi OSでは、ディレクトリのサイズは一律4096バイト(=4kバイト=4ブロック)になります。最初の行に表示されていたの「合計 36」という数字は、4ブロックのサイズのディレクトリが9個あるので、合計36ブロックと表示されていたわけです。

その左側の「pi」はこのディレクトリを所有しているグループ名になります。

さらに左側の「pi」は、このファイルを所有しているユーザ名です。

その左の数字はリンク数を示しています。リンクについては必要なところで詳しく説明します。

ここまでの説明で「ls -l」コマンドにより、ディレクトリのサイズや、どのグループ、どのユーザが所有しているかが表示されることがわかりました。

ところで「所有」って具体的にどのような意味なのでしょうか。

上の例の場合「Desktop」ディレクトリは「pi」ユーザが所有しているわけですから、「pi」ユーザは「Desktop」ディレクトリに対してなんでもできそうな気がしますよね。

実は「所有」といっても、常になんでもできるわけではなく、制限がかけられていることがあります。その制限は、一番左に書かれている文字列「drwxr-xr-x」で表現されています。

最初はとても理解できない感じですが、今後この文字列の確認をする機会が出てきますので、この文字列について詳しくみていきましょう。

この文字列は以下のように「種別」と「権限」に分かれています。

drwxr-xr-xの区分

それぞれについて説明します。

種別

最初の一文字目は「ディレクトリ」や「ファイル」といった種別を表してします。

記号 意味
ファイル
d ディレクトリ
l (エル) リンク

※他にもありますが、よく出てくる記号は上の3つです。

「ls -l」で確認した例では、先頭の文字は「d」ですので、ディレクトリであることがわかります。

権限

次の9文字は、3文字ずつセットで以下の意味となっています。

パーミッション

今まで「権限」と呼んできましたが、「パーミッション」とも呼ばれることも多いので、ぜひ覚えておいてください。

各権限の3文字の意味は、ファイルとディレクトリでは異なっていて、以下のようになっています。

ファイルの権限

記号 意味
r ファイル読み出し権限
w ファイル書き込み権限
x ファイル実行権限

ディレクトリの権限

記号 意味
r ディレクトリの中身表示の権限(lsコマンドで中身を確認できる)
w ディレクトリ内にファイル新規作成、ファイル削除、サブディレクトリ作成の権限
x このディレクトリへの移動、検索の権限

かなりややこしくなってしまいました…

それでは今までの内容を元に、「ls -l」の結果が以下のような場合、どのように解釈すればよいかまとめます。

drwxr-xr-x 2 pi pi 4096  4月 10 18:14 Desktop

種別

「drwxr-xr-x」の先頭文字が「d」ですので、「Desktop」はディレクトリであることがわかります。

所有者と所有グループ

「pi pi」と表示されていますので、Desktopディレクトリを所有しているユーザは「pi」ユーザ、所有しているグループは「pi」グループであることがわかります。

権限(パーミッション)

「drwxr-xr-x」から、「pi」ユーザの権限は「wrx」、「pi」グループの権限は「r-x」、その他のユーザの権限は「r-x」であることがわかります。それぞれの意味をまとめると以下のようになります。

ユーザ 権限
「pi」ユーザ r : ディレクトリの中身表示の権限あり
w : ディレクトリ内にファイル新規作成、ファイル削除、サブディレクトリ作成の権限あり
x : ディレクトリへの移動、検索の権限あり
「pi」グループ r : ディレクトリの中身表示の権限あり
: ディレクトリ内にファイル新規作成、ファイル削除、サブディレクトリ作成の権限なし
x : ディレクトリへの移動、検索の権限あり
その他ユーザ r : ディレクトリの中身表示の権限あり
: ディレクトリ内にファイル新規作成、ファイル削除、サブディレクトリ作成の権限なし
x : ディレクトリへの移動、検索の権限あり

なんでこんな細かいところまで理解しなくちゃいけないの?という気もしますよね。

例えばGPIOを制御しようとしてうまく制御できない場合がたまにあるんです。そのような時は権限に原因がある可能性もあるので、このように「ls -l」コマンドでファイルの権限を確認して、制御できる権限があるのか、など調べたりすることがあります。

すぐにすべて理解するのは難しいと思いますが、このようなことがある、という概要は把握していただければと思います。

更新履歴

日付 内容
2022.4.19 新規投稿
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
目次
閉じる