Unixのパーミッション、chmod、lsを理解する



おっ!Lee、なぜターミナルコマンドを書いているのですか?私は、これがフロントエンドのブログであると思いました?
リッスン.私は、マルチを含みます.さらに、あなたはいくつかの点に関係なく、いくつかの点では、スタック内にハングアップする場所でのアクセスの問題を実行するつもりですので、なぜここで何が起こっているのか少し学ぶことはありませんか?
クール?クール.ロールしましょう.

なぜこのスクリプトを実行できないのですか。


あなたのコンピュータ上で特定のスクリプトを実行したいとしましょう.多分、あなたはどこかからそれをダウンロードしたか、スタックオーバーフローからそれをコピーしました.多分、あなたはあなた自身のスクリプトを書きました.このようなクールなスクリプトがあるとしましょう.
#!/bin/bash

echo "Have a great day!"

だから、あなたの端末にジャンプし、実行./my-script.sh そして、あなたは挨拶をしています.
$ ./my-script.sh
permission denied: ./my-script.sh

だから、スタックオーバーフローにジャンプし、'実行スクリプトのアクセス許可を拒否'または何か、そしてあなたはchmod 744 <filename> . それで、それを端末にコピーして実行してください.
$ chmod 744 ./my-script.sh
$ ./my-script.sh
Have a nice day!

満足して、お客様のビジネスについては、適切にあなたの端末によって挨拶感じてください.
しかし、あなたの潜在意識の奥で、あなたは無知に小さなコード悪魔を解き放った.この小さな悪魔は、あなたが最終的にあなたが最終的にチャンネルを作るのが難しい平和な禅の状態を見つけていて、それがあなたの脳に質問をささやくことを最終的に見つけているとき、あなたがシャワーを浴びているか、眠りに落ちるまで待ちます
しばらくの間、あなたはなぜあなたがUnixに慣れていないのか、あなた自身とあなたの能力を疑っているのだろうか.

私のdotfilesはどこに行きましたか?


分のプログラミングをしている場合は、おそらくdotfilesで働いている.プロジェクトには.env APIキーのためのファイルまたは多分あなたはGit史を.git あなたのプロジェクトのフォルダは、あなたが残した最後のオプションです.
どのような場合でも、あなたの端末にジャンプし、信頼を実行するls コマンド.
$ ls
work stuff morestuff not_file_you_want.js

フィドルレズ!私のファイルはどこですか.それはVSCODEで現れます、なぜ、それはここにありませんか?
スタックオーバーフローを1つ以上の旅行とあなたが得るls -la あなたの緑のチェックされた答えとして、これはあなたを与えます:
$ ls -la
drwxr-xr-x 15 you you 4096 Apr 24 11:16 .
drwxr-xr-x 3 root root 4096 Mar 30 12:09 ..
-rw-r--r-- 1 you you 38 Apr 24 11:04 .mydotfile
drwxr-xr-x 9 you you 4096 Apr 16 09:50 work
drwxr-xr-x 9 you you 4096 Apr 13 09:50 stuff
drwxr-xr-x 9 you you 4096 Apr 11 09:50 morestuff
-rw-r--r-- 1 you you 38 Apr 24 11:04 not_file_you_want.js

成功!私のドットファイルが適切に命名されます.mydotfile . しかし、あなたの心のその小さな魔法使いは、「最初にすべてのそれらの手紙とダッシュですか?」
アーgh!インプレッサ症候群!疑い!恐怖!暗い側!
あなたは自分自身に尋ねる、なぜ私はコンピュータを使用して悪いですか?

Unix許可を学び、あなたの疑いの悪魔を追放!


まず最初に、文字やダッシュの奇妙な文字列について話しましょう.
-rw-r--r-- 1 you you 38 Apr 24 11:04 .mydotfile

その文字列-rw-r-r--r-- はそのファイルのパーミッションのリストです!それの意味に関してより多くの.
左から右への他の情報は、そのファイル(1)、所有者、グループ所有者、ファイルサイズ(38)、日付/時刻の最後の変更、およびファイル名へのリンクの数です.
さて、その手紙について/ダッシュナンセンス?
-rw-r--r--

これは実際に情報の4つの部分集合のグループ化です.
type | owner | group | everyone else
------------------------------------
-    | rw-   | r--   | r--

タイプの場合、ダッシュはこれが通常のOL 'ファイルであることを示します.あなたはd ディレクトリとl リンクのために、そして、それらのタイプのファイルをハイライトするためにあなたの端末で異なる色を見るかもしれません.
残りの列には情報の3つ以上のビットがあり、それはシステム上のユーザのそれぞれの部分集合の特定のパーミッションである'所有者'はファイルの作成者です、'グループ'は所有者が属するユーザーのグループです、そして、最後のセクションはシステムの他のすべてのユーザーです.
手紙自体に関しては、彼らは(r)EAD(w)儀式とE(X)ecuteを意味します.上の例では以下のようにします:
type | owner | group | everyone else
------------------------------------
-    | rw-   | r--   | r--
file | read/ | read  | read
       write

これは、(所有者)ファイルを読み書きできることを意味しますが、他のユーザーはファイルを読むことができます.
以下に、ディレクトリでしばしば表示されるパーミッションの別のセットを示します.
type      | owner   | group   | everyone else
------------------------------------------
d         | rwx     | r-x     | r-x
directory | read/   | read/   | read/
            write/    execute   execute
            execute

これは、(再び、所有者)すべてを行うことができますが、他の人が読むことができるということですcd ディレクトリに移動します.

パーミッションの変更


すごい!だから今、すべてのそれらの狂気の手紙の意味を知っている.しかし、それらを変更する方法は?
我々が走ったとき、上から我々の例ディレクトリを見ましょうls -la :
$ ls -la
drwxr-xr-x 15 you you 4096 Apr 24 11:16 .
drwxr-xr-x 3 root root 4096 Mar 30 12:09 ..
-rw-r--r-- 1 you you 38 Apr 24 11:04 .mydotfile
drwxr-xr-x 9 you you 4096 Apr 16 09:50 work
drwxr-xr-x 9 you you 4096 Apr 13 09:50 stuff
drwxr-xr-x 9 you you 4096 Apr 11 09:50 morestuff
-rw-r--r-- 1 you you 38 Apr 24 11:04 not_file_you_want.js

の許可を変更したいとしましょうnot_file_you_want.js ファイルを追加します.
これを行うには、chmod コマンド
$ chmod u+x not_file_you_want.js

ヒアu+x 一部はあなたを旅行するかもしれません、しかし、もう一つの観察をしてください.それは、(u)ser + e(x)ecute、またはユーザーに実行許可を追加することです.
より粒状のパーミッションについてはどうですか?どのような場合は、他のユーザーからすべてのアクセス許可を削除したいですか?
私たちは超特異的であるchmod :
$ chmod u=rwx,g-rwx,o-rwx not_file_you_want.js

したがって、このコマンドは( u ) serパーミッションは( r ) ead , ( w ) rite , e ( x ) ecuteと等しくなければなりません.グループからすべてのパーミッションを削除し、他のすべてのユーザーからすべてのパーミッションを削除します.

バイナリショートカット



ですから、明示的に任意のファイルパーミッションを設定することができます.しかし、その小さい脳デーモンは、まだ我々の最初のスタックオーバーフロー答えについて悲鳴を上げるかもしれません.
$ chmod 744 ./my-script.sh

何がHeckは744を意味しますか?
これは実際にはShorthand-rwxr--r-- . 各番号はユーザのサブセットを表します.最初の数( 7 )はユーザーで、中央はグループです、そして、我々は以前に我々の内訳で見せたように、最後は他のすべてのユーザーです:rwx | r-- | r-- .
各番号は、実際に3つのアクセス許可の組み合わせのバイナリ表現です.ユーザ権限を見てみましょう.
2^2  | 2^1   | 2^0
read | write | execute
---------------------------
1    | 1     | 1

ここでは、すべての3つのパーミッション(RWX)が欲しいということを示していますので、2 ^ 2、2 ^ 1、2 ^ 0を一緒に7にします.
その他のグループ
2^2  | 2^1   | 2^0
read | write | execute
---------------------------
1    | 0     | 0

我々は、グループと他のパーミッションのために4に等しい2 ^ 2を数えます.
以下に例を示します.
777 = 111 111 111 = rwxrwxrwx
666 = 110 110 110 = rw-rw-rw-
644 = 110 100 100 = rw-r--r--
600 = 110 000 000 = rw-------

かなり野生の権利?
さて、次のコマンドを見てください.
$ chmod 700 my-file.sh

あなたは、あなたがユーザーにすべてのパーミッションを与えていて、他の皆からすべての許可を取り除くことを意味するということを知っています.あなたを見てください、小さいLinux😎.

考えを捨てる


私の同僚のクレイベンソンへの特別な感謝の電話会議で私にこれを説明するため.私はそれらの小さな文字列をじっと見つめたrwx 何年もの間、彼らが彼らが意味するものを調べるために悩んでいて、ちょうど端末魔法にそれをチョークして、無知に私自身を取り戻すこと.私は実際にUNIXのファイルパーミッションのデザインが実際にどのように論理的に唖然としていました、そして、私がそれを学んだとき、バイト数学は絶対に私をフローリングして、私にこのポストを書くように促しました.
次回のスタックオーバーフローLinuxのウィザードを行うには、少し研究を行うと、あなたはどのくらい学ぶことが驚きかもしれない.私は知っている.