これはMacにありますが、Unixyの問題のようです。
私はGithubリポジトリをフォークしました(これ)USBスティック(ストレージを作成したデバイスに付属のUSBスティック)に複製します。 ingの後、ls
README.mdが赤で強調表示されることを確認しました。もちろん、権限は次のとおりです。
-rwxrwxrwx 1 me staff 133B 15 Jun 08:59 README.md*
走ってみましたが、chmod 644 README.md
何も変わりませんでした。ここで何が起こっているのでしょうか?
ベストアンサー1
これは、ファイルの「実行可能性」は、Windowsなどのファイルタイプではなく、UNIXシステムのファイルエントリの属性であるためです。
つまり、ls
所有者、グループ、または全員がファイルに対する実行権限を持っている場合、ファイルは実行可能ファイルとしてリストされます。ファイル形式が何であるかは重要ではなく、権限だけが何であるかは重要ではありません。この動作には2つの重要な利点があります。
- 新しい実行可能ファイル形式を処理するために特別な作業を行う必要はありません。これは
#!
、ファイルの上部に1行でインタプリタを埋め込むことができるスクリプト言語に特に便利です。.py
権限によってわかるので、カーネルはファイルが実行可能であることを知る必要はありません。 Linuxサポートと組み合わせると、binfmt_misc
Wineがインストールされている場合は、Windowsコンソールプログラムをデフォルトのバイナリとして扱うなど、きちんとした作業を行うことができます。 - 技術的には、マシンコードである特定のファイルを実行できないか、実行できないと言うことができます。また、ファイル形式の形式の実行可能ファイルに関して区別できないライブラリを持つことは、まれなスクリプト言語で主に使用されます。したがって、上記のPythonの例を使用すると、拡張子があってもPython標準ライブラリから任意のモジュールを直接実行することはできません
.py
。
ただし、POSIX権限(またはユーザーマッピングを設定していない場合はNTFS)をサポートしていないFATなどのファイルシステムを検出すると、これらすべてが破棄されます。ファイルシステムがPOSIX権限を保存しない場合、オペレーティングシステムはそれをエミュレートする必要があります。 Linuxでは、ユーザーがファイルに対して必要な操作を実行できるように、読み取り、書き込み、および実行権限がすべての人にデフォルトで設定されています。これがないと、カーネルはそのファイルシステムに対するファイル固有の権限の変更を許可しないため、USBフラッシュドライブでスクリプトまたはバイナリを実行できません。
場合によっては、コミットgit
時にファイルに表示されるプロパティが格納され、README.mdファイルの元のコミット(または後続のコミットの1つ)は、おそらくこれらの操作が非常に異なる方法で処理されるWindowsシステムで発生した可能性があります。したがって、git
Linuxが権限をサポートせずにファイルシステムを処理する方法と同様に、権限をすべての人へのフルアクセスとして保存するだけです。