Windowsではドットを使用できるので、ドットを使用せずにLinuxでファイルを非表示にしたい
これを行う方法はありますか?
Windowsではドットを使用できるので、ドットを使用せずにLinuxでファイルを非表示にしたい
これを行う方法はありますか?
回答:
できません。ファイルシステムが隠された設定を処理する方法には根本的な違いがあります。Windowsでは、ファイルシステムは、「hidden」属性と「system」属性(両方とも隠しファイルの種類)を含む、ファイルのいくつかの属性をメタデータに格納します。一般的な* nixファイルシステムでは、そのような属性は保存されません。代わりに、情報はファイル名などの別の場所に配置する必要があります。したがって、慣例では、ファイルはで始まります。(お使いのシステムによっては、おそらく_のような他のものも)デフォルトではほとんどのツールで表示されません。
これは純粋に便宜上のものです。ファイル名を開始するということは、「ユーザーはおそらくこれを常に見たくないでしょう」ということだけを意味します。確認するために、eg ls -a
を実行するとすべてのファイルが表示されます。
Linuxでリストを乱雑にしたくない場合は、ファイル名をドットで始まる名前に変更する必要があります(ボーナス:ポータブルデバイスについては、これはOS Xでも機能します)。ユーザーがファイルを見つけられないようにしたい場合は、間違っていることになります。それがアクセス許可の目的です。
ディレクトリに関連するUnixのアクセス許可は、しばしば人々を混乱させます。「読み取り」および「実行」権限(r
およびx
)は、ディレクトリの場合とファイルの場合とでは異なることを意味します。ディレクトリの場合、実行x
許可は、ディレクトリ内のiノードにアクセスするかどうかを決定します。読み取りr
許可は、ディレクトリのリストにアクセスできるかどうかを決定します。機能的にx
は、ユーザーはディレクトリ内で何かを行うことがr
できますが、許可により、その中にあるものを見ることができます。これらは異なっており、違いは混乱を招く可能性があります。例を見てみましょう:
jeanluc@login64: ~ $ mkdir example
jeanluc@login64: ~ $ echo "you can read it" > example/file
jeanluc@login64: ~ $ ls example/
file
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ chmod -x example/
jeanluc@login64: ~ $ ls example/
ls: cannot access example/file: Permission denied
file
jeanluc@login64: ~ $ cat example/file
cat: example/file: Permission denied
jeanluc@login64: ~ $ cd example/
-bash: cd: example/: Permission denied
jeanluc@login64: ~ $ chmod +x example/
jeanluc@login64: ~ $ chmod -r example/
jeanluc@login64: ~ $ ls example/
ls: cannot open directory example/: Permission denied
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ cd example/
jeanluc@login64: ~/example $ ls
ls: cannot open directory .: Permission denied
jeanluc@login64: ~/example $ cd ..
したがって、実行せずにファイルを一覧表示することはできますが(ファイルプロパティを取得できないため、lsはエラーを表示します)、ディレクトリに移動したり、その中のファイルを読み取ったりできないことに注意してください。読み取りなしではファイルを一覧表示できませんが、ディレクトリに移動することはできます。ファイルの名前がわかっていれば、引き続きアクセスできます。
ただし、読み取りアクセス許可を削除しても、あいまいさによるセキュリティしか得られないことに注意してください。ユーザーがファイル名を推測すると、その内容を読み取ることができます。
これはあなたの質問に実際には関係なかったかもしれません。ディレクトリの許可を確実に理解したかっただけです。
.hidden
非表示にするファイルの名前(各行に1つの名前)を使用して、ディレクトリにファイルを作成します。
次に、以下を追加します~/.bashrc
:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
これで、ls
コマンドはこれらのファイルをリストしません。
このテクニックを使用して__pycache__
、__init__.py
ファイルとファイルを隠します。
編集:他のコメントによると、これは少なくとも1つ(Nautilus)でそれらを隠しますが、おそらくいくつかのGUIファイルブラウザでも同様です。
ls -al
か?
Linuxでは、ドットを追加せずに実際にファイルを非表示にできます。これは実際にNautilusでそれらを隠します。ls
コマンドラインからは、まだファイルがリストされます。
.hidden
を非表示にするフォルダーに名前を付けたテキストファイルを作成します。ls
リストにはありません。
グラフィカルユーザーインターフェイスのファイルマネージャーやデスクトップ環境からのみファイルを非表示にしようとしていますか?その場合は、ファイル名の前にドットを付けるだけのオプションがあります。
私は信じているすべてのLinuxファイルマネージャによって隠さのみ追加ファイルがバックアップファイル、チルダで終わるすなわちものであり、~
または.bak
、彼らはバックアップ拡張したものであると考えているものは何でもか。いずれにせよ、ファイルマネージャからバックアップファイルを非表示にしたいだけなら、おそらく幸運でしょう。
ファイルにバックアップ拡張子を付けて非表示にしないでください。ファイルを誤って削除してしまう可能性があります。
余談ですが、コマンドSetFile -a V [file]
または編集を使用してMac OS XのFinderから/.hidden
ファイルを非表示にできますが、コマンドラインのls
プログラムからファイルが非表示にならないことは明らかです。
chflags hidden filename
。
ある程度のプログラミングスキルがあり、必要なものだけがユーザーの利便性のためにファイル名を隠して視覚空間を乱雑にしない場合は、ハッキングできます!
コマンドラインツールのみを検討します。それらは非常に均一であり、私が常に使用している唯一のツールです。
この情報を保存するには多くの方法があります。
選択したファイルに「非表示」拡張属性を保存できます。見るman attr
attr -s hidden -V true your_file
または、上記のように、ファイル名のリストをファイルに.hidden
保存できます
重要:これはロジックを実装するために必要なボックスからは機能しません。クリーンなシステムは.hidden
ファイルとhidden
拡張属性を無視します!
また、複数の可能な実装があります。
ファイルが少ない場合は、ファイルに書き込み.bashrc
ます
alias ls='ls -I filename_1 -I filename_2'
man ls
詳細については。
function ls
隠しファイルを認識し、すべての-I
エントリのリストをアセンブル/bin/ls
し、適切な無視フラグを使用して実行する
背後にあるすべてのロジックを処理するようなものを記述します。すべてのls
パラメーターを適切に処理する必要があるため、非常に骨の折れる作業です。
coreutilsのソースを取得する
git clone git://git.sv.gnu.org/coreutils
または
git clone git://git.suckless.org/sbase
隠しファイルの実装を処理するために必要な方法でパッチを適用します。そしてそれをあなたのPATH
サックレスソースを使用して5分以内にハックしましたが、diffは次のようになります。
diff --git a/ls.c b/ls.c
index cdfce4d..8197409 100644
--- a/ls.c
+++ b/ls.c
@@ -214,6 +214,17 @@ lsdir(const char *path)
first = 0;
while ((d = readdir(dp))) {
+///////////////////////////////////////////////
+// Dirty hack to implement hidden files
+// FIXME: Make proper(!) subroutine
+ char attr_command[1024] = "attr -Lqg hidden "; // Oh, dear. That's bad
+ int attr_code;
+ strcat(attr_command, d->d_name);
+ strcat(attr_command, " >/dev/null 2>&1");
+ attr_code = system(attr_command);
+ if (!attr_code)
+ continue;
+///////////////////////////////////////////////
if (d->d_name[0] == '.' && !aflag && !Aflag)
continue;
else if (Aflag)
ls.c
あるsrc
ルートディレクトリではない、と何も機能はありませんlsdir
ではls.c
。
現在では、指定された構成に従ってファイルを隠すFUSEを作成できます。
この記事では、getdir
機能を微調整する必要があると考えています。
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
これは、ディレクトリの内容を読み取ります。この操作はopendir()
、readdir()
、...、closedir()
1回の呼び出しでシーケンス。各ディレクトリエントリに対して、filldir()
関数を呼び出す必要があります。
私はプログラマーではありませんがgetdir
、(たとえば).hidden
ファイルにリストされているすべてのファイルを省略することができると思います。これを正しく実装すると、すべてのツール(GUIまたは非GUI)が影響を受けます。
グループまたはその他の「x」パーマを削除することにより、ディレクトリの内容を「隠す」ことができますchmod go-x directoryname
。正確なパスを知っていればファイルにアクセスできますが、ファイルをリストできなくなりました。これはあなたが望むもののようには聞こえません。
ドットファイルは、実際にはセキュリティのためにファイルを非表示にするのではなく、ファイルの一覧表示中のファイルの乱雑さを軽減するために便利です。それls
は他のツールに焼き付けられています。