コマンドラインにおいてファイル一覧を表示する「ls」コマンドの「-l」オプションを使うと、ファイルやディレクトリのアクセス権限と所有者を確認することができます。
ここでは「ls -l」で権限や所有者を変更する方法や、コマンドを実行したときに表示される内容についてまとめています。
ls -lコマンドとは何か?
ファイル名一覧を表示するlsコマンド
にオプションの-l
を付けたもです。
各ファイルの実行権限や所有者、ファイルサイズなど詳細な情報を表示してくれます。
ls -lの実行例
$ ls -l
total 11
-rw-r--r-- 1 root 1796141739 7133 1 26 19:21 CHANGELOG.md
-rw-r--r-- 1 root 1796141739 3780 1 26 19:21 README.md
drwxr-xr-x 7 root 1796141739 224 1 26 19:21 app
-rwxr-xr-x 1 root 1796141739 1686 1 26 19:21 artisan
total, -rw-r–r–, 1, root, 1796141739, 7133といった見慣れない表示が並びます。
以下でそれぞれの内容について解説しています。
ls -lで表示される内容一覧
「ls -l」を実行すると、以下の11個のデータが表示されます。
表示される構造は以下のようになります。
total <①ブロック数の合計値>
<②ファイルの種類><③アクセス権> <④ハードリンク数> <⑤所有者> <⑥グループ> <➆ファイルサイズ[bite]> <⑧月> <⑨日> <⑩時刻> <⑪ファイル名>
ブロック数の合計値とは何か?
冒頭のtotalは、ディレクトリ内の全てのファイルのサイズをブロック化した合計値です。(※対象は直下のファイル/ディレクトリのみになります)
デフォルトでは 1024 バイトを1ブロックとしています。
・(参考)linuxjm LS
各ファイルは上からそれぞれ、928bite, 896bite, 928biteとなっており、1024bite以下です。
ファイルの種類
各行の冒頭の1文字目はファイルの種類を表しています。
1文字目 | 内容 |
---|---|
– | ファイル |
d | ディレクトリ |
l | シンボリックリンク |
実例
-rw-r--r-- 1 root 1796141739 3780 1 26 19:21 README.md
drwxr-xr-x 7 root 1796141739 224 1 26 19:21 app
上記の場合、1行目はファイル。2行目はディレクトリであることを意味しています。
アクセス権
冒頭2文字目からの9文字がアクセス権を指しています。3文字ずつの区切りで3つのセクションに別れています。
<(1)所有者><(2)グループ><(3)他人>
実例
rw-r--r--
(1)所有者: rw-
(2)グループ: r--
(3)他人: r--
権限の種類
r, w, xはそれぞれ与えられている権限の内容を表しています。
記号 | 権限 | 参考 |
---|---|---|
– | 権限なし | |
r | 読込み | Read |
w | 書込み & 削除 | Write |
x | 実行(ファイルがシェルスクリプトやプログラムの場合) | eXecute |
例えば、rw-
であれば、(r)読み(w)書きはできるが、(x)実行はできないという意味になります。
ハードリンク数
ハードリンクとは、別名を付けられるファイルのクローンのことです。
ハードリンクを削除するとリンク元も消えます。(シンボリックリンクの場合はリンク元が消えません)
実例
-rw-r--r-- 1 root 1796141739 3780 1 26 19:21 README.md
drwxr-xr-x 7 root 1796141739 224 1 26 19:21 app
1行目はハードリンク数が「1」, 2行目はハードリンク数が「7」となっています。
所有者、グループ
5つ目の6つ目に表示されるデータは所有者とグループです。
<②ファイルの種類><③アクセス権> <④ハードリンク数> <⑤所有者> <⑥グループ> <➆ファイルサイズ[bite]> <⑧月> <⑨日> <⑩時刻> <⑪ファイル名>
所有者とはそのPCを管理しているルートユーザーのことです。通常「root」として表示されます。
他にもユーザーがいる場合、プロジェクト毎にユーザーをグループに分類し、グループ毎にファイルやディレクトリの権限を付与することができます。
その場合に、グループが表示されます。
なお、どのグループにも属さない人を他人といいます。
所有者
デフォルトではそのファイルやディレクトリの作成者の名前が入ります。後から変更することも可能です。(chown
コマンド)
グループ
デフォルトでは所有者が属しているグループ名が入ります。
グループ名が指定されていない場合はGID(group ID)が数値で表示されます。
後から変更することも可能です。(chown
コマンド、chgrp
コマンド)
ファイルサイズ
ファイルサイズがバイトで表示されます。
実例
$ ls -l
total 10
-rw-r--r-- 1 root 1796141739 7133 1 26 19:21 CHANGELOG.md
-rw-r--r-- 1 root 1796141739 3780 1 26 19:21 README.md
drwxr-xr-x 7 root 1796141739 224 1 26 19:21 app
上記の場合から7133bite, 3780bite, 224biteとなります。
月日 時刻
⑧、⑨、⑩番目に表示される内容は「月」「日」「時刻」です。
<②ファイルの種類><③アクセス権> <④ハードリンク数> <⑤所有者> <⑥グループ> <➆ファイルサイズ[bite]> <⑧月> <⑨日> <⑩時刻> <⑪ファイル名>
実例
$ ls -l
total 10
-rw-r--r-- 1 root 1796141739 7133 1 26 19:21 CHANGELOG.md
上記であれば、「1 26 19:21」が「月 日 時刻」になります。
所有者の変更方法
所有者の変更はchown
コマンドでできます。なお、chownはchange ownerの略です。
$ chown [オプション] <所有者名> <ファイル1 ファイル2,,,>
ディレクトリに対して実行する場合
対象がディレクトリの場合、「-R」オプションをつけることで、ディレクトリの中身の所有者も変更することができます。(Rはrecrusive 再帰的の略)
グループの変更方法
グループの変更はchgrp
でできます。chgrpはchange groupの略です。
$ chgrp [オプション] <所有者名> <ファイル1 ファイル2,,,>
使えるオプションはchownと同じです。
所有者とグループを同時に変更する方法
chownコマンドでは、所有者とグループを同時に変更することもできます。
chown [オプション] <所有者:グループ> <ファイル1, ファイル
2,,>
ユーザー名の後ろに:グループ名
をつけます。
アクセス権限の変更方法
アクセス権限の変更するには、chmod
コマンドを使います。chmodはchange modeの略です。
指定方法は①シンボルモードと②数値(絶対モード)の2種類があります。
シンボルモード
使い方
r, w, xという記号を使う方法です。ユーザーを指定して、対象の権限を追加/削除/上書きを指定します。
chmod [ユーザー][記号][権限][ファイル]
▼権限の種類
記号 | 権限 |
---|---|
r | 読込み |
w | 書込み & 削除 |
x | 実行 |
▼ユーザー指定
記号 | 権限 |
---|---|
u | 所有者 |
g | グループ |
o | その他 |
a | すべて(u,g,o)。省略も同じ |
▼権限の付与
記号 | 権限 |
---|---|
+ | 後述の権限を付与 |
– | 後述の権限を削除 |
= | 後述の権限にする |
シンボルモードを使った権限の変更方法実例
$ ls -l
total 0
-rw-r--r-- 1 root 1796141739 0 1 27 10:33 hello.txt
#グループに全権限を付与
$ chmod g=rwx hello.txt
#確認
$ ls -l
total 0
-rw-rwxr-- 1 root 1796141739 0 1 27 10:33 hello.txt
ユーザーを複数指定する場合
chmodコマンドを実行するときに、ユーザーを複数指定することもできます。
chmod [ユーザー][記号][権限],[ユーザー][記号][権限][ファイル]
▼実例
$ ls -l
total 0
-rw-rwxr-- 1 root 1796141739 0 1 27 10:33 hello.txt
#権限付与(または削除)
$ chmod u+x,g-x,o=rw hello.txt
#確認
$ ls -l
total 0
-rwxrw-rw- 1 root 1796141739 0 1 27 10:33 hello.txt
絶対モード(数値)
使い方
r, w, xというシンボル以外に数値で指定することもできます。
chmod <所有者><グループ><他人> <ファイル1, ファイル2,,,>
例えば、$ chmod 744 hoge.txt
のように記述します。
3桁の数字で、1桁目が所有者、2桁目がグループ、3桁目が他人に与える権限になります。
各数値が意味する権限は以下のようになっています。
付与権限 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
内容 | — | –x | -w- | -wx | r– | r-x | rw- | rwx |
(補足) | 権限なし | 実行 | 書込み | 2 + 1 | 読込み | 4 + 1 | 4 + 2 | 4 + 2 + 1 |
–xが1、-w-が2、r–が4になっており組み合わせの合計値で指定します。
使用例
$ chmod 740 ファイル名
・所有者:すべて
・グループ:読み取りのみ
・その他:なし
注意点:2桁や1桁指定はできない
数値で指定するときは3桁それぞれを指定する必要があります。
▼2桁で指定だと所有者の権限がなくなる
$ ls -l
-r-x-wx-wx 1 root 1796141739 0 1 27 10:33 hello.txt
#権限変更
$ chmod 33 hello.txt
#確認
$ ls -l
-----wx-wx 1 root 1796141739 0 1 27 10:33 hello.txt
▼1桁だと所有者とグループの権限がなくなる
$ ls -l
-----wx-wx 1 root 1796141739 0 1 27 10:33 hello.txt
#権限変更
$ chmod 7 hello.txt
#確認
$ ls -l
-------rwx 1 s01386 1796141739 0 1 27 10:33 hello.txt
(参考)ls -lと類似のオプション
lsコマンドには「-l
」と似た表示結果になるオプションが複数存在しています。
オプション | -lとの違い |
---|---|
-o | グループを表示しない |
-g | 所有者を表示しない |
-n | 所有者とグループを数値(UIDとGID)で表示 |
実例
$ ls -l
total 0
-rwxrw-r-- 1 root groop 0 1 27 10:33 hello.txt
$ ls -n
total 0
-rwxrw-r-- 1 1058389726 1796141739 0 1 27 10:33 hello.txt
$ ls -o
total 0
-rwxrw-r-- 1 root 0 1 27 10:33 hello.txt
$ ls -g
total 0
-rwxrw-r-- 1 groop 0 1 27 10:33 hello.txt