WSL2_Linuxのパーミッションについて #189日目
Linuxは元々複数人で同時にアクセスして使用することを前提としたOSなので、ファイルに対する権限周りの設定がWindowsと異なります。
WSL2でLinux環境を作って使っていると、この辺の権限周りの違いによってエラーにハマることもあるので、少し整理しておきたいと思います。
パーミッションの3原則
勝手に原則にしましたが、パーミッションには以下3つの段階があります。
読み取り ( r ) ( 4 )
書き込み ( w ) ( 2 )
実行 ( x ) ( 1 )
()内のアルファベットや数字の意味は後述しますが、それぞれコード化するときの表現方法です。アルファベットで書く時と数字で書く時がある、というイメージですね。
ファイルのパーミッションを確認するには以下のコマンドです。
$ ls -l ファイル名orディレクトリ名
そして以下のようにして結果が返ってきます。
$ ls -l dev
total 4
drwxrwxrwx 2 root root 4096 May 31 23:37 testfolder
-rwxrwxrwx 1 root root 0 May 31 22:47 test.txt
以下のようにして見ます。
アクセス権部分は以下のように見ます。
「-」は通常ファイルを指し、ここがdだったらディレクトリ、Iだったらシンボリックリンクを指す
その後3文字ずつがワンセットで、最初の3文字が「オーナー」、次が「グループ」、最後が「その他ユーザー」に対する権限を意味する
権限はrwxで表現され、-は権限がないことを示す
権限は数字でも表現され、例えばrwx r-x r-xは 7 5 5となる(冒頭の()内の数字はここで使う)
また、書き込みや実行はファイルとディレクトリで若干内容が異なります。
パーミッションの変更方法
これ自体はとても簡単です。chmodコマンドで実行できます。
# chmod [権限] [パス]
$ chmod 755 test.txt
ディレクトリ内のパーミッションを一括変更するときは以下のようにRオプションを付けます。
# chmod -R [権限] [パス]
$ chmod -R 755 dev
もしパーミッションエラーが出たら、フォルダやファイルのオーナーや権限を確認してみてください。rootユーザーがオーナーになっていること等が考えられます。
その場合はsudoを付ければ権限の変更自体は可能です。
$ sudo chmod 755 -R dev
ちなみにsudo (スードゥー)とはsuperuser doの略で、一時的に管理者権限を持って実行する方法を指します。便利ですが、これで作成したファイルやディレクトリはオーナーがrootになってしまい、操作に毎回sudoが必要になってしまいます。
これが色んなコードを走らせる時にエラーの要因になったりするらしいので、プログラムを実行するユーザーがオーナーになっているか、権限を持っているかは要確認です。
「\\wsl$」でアクセスする時の注意点
wslを使っている人にとって、これが意外と落とし穴です。普段、Windowsだとマウス操作などでフォルダを新規作成することがほとんどだと思います。
そして「\\wsl$」でLinux環境のフォルダを開くと、いつものWindowsフォルダのように見えてしまいます。
ここでいつものノリで右クリックして「新規作成」してしまうと、そのフォルダのオーナーが「root」になってしまい、(上記で触れた通り)操作にsudoが必要になってしまうのです。
これは「\\wsl$」自体が、windowsからlinux環境をマウントしてアクセスしていることに起因していると思われます。
パーミッション関連のイメージは掴めてきたかな・・・
ここまでお読みいただきありがとうございました!!