Linuxでドットを使用せずにファイルを非表示にする


32

Windowsではドットを使用できるので、ドットを使用せずにLinuxでファイルを非表示にしたい

これを行う方法はありますか?


6
ファイルの非表示(難読化)はセキュリティの代わりではない(アクセスを制限する)
uSlackr

回答:


26

できません。ファイルシステムが隠された設定を処理する方法には根本的な違いがあります。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はエラーを表示します)、ディレクトリに移動したり、その中のファイルを読み取ったりできないことに注意してください。読み取りなしではファイルを一覧表示できませんが、ディレクトリに移動することはできます。ファイルの名前がわかっていれば、引き続きアクセスできます。

ただし、読み取りアクセス許可を削除しても、あいまいさによるセキュリティしか得られないことに注意してください。ユーザーがファイル名を推測すると、その内容を読み取ることができます。

これはあなたの質問に実際には関係なかったかもしれません。ディレクトリの許可を確実に理解したかっただけです。


26

.hidden非表示にするファイルの名前(各行に1つの名前)を使用して、ディレクトリにファイルを作成します。

次に、以下を追加します~/.bashrc

ls () {
  if [ -f .hidden ]; then
    declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
    ls "$@"
  fi
}

これで、lsコマンドはこれらのファイルをリストしません。

このテクニックを使用して__pycache____init__.pyファイルとファイルを隠します。


編集:他のコメントによると、これは少なくとも1つ(Nautilus)でそれらを隠しますが、おそらくいくつかのGUIファイルブラウザでも同様です。


それは面白いです。nautilusやその他のGUIツールでも機能しますか?でファイルを見ることができますls -alか?
Jakuje

1
コードの最後に「」がありません(アップシュートがどこから来ているのか疑問に思う場合:askubuntu.com/a/713591/15811
;

14

Linuxでは、ドットを追加せずに実際にファイルを非表示にできます。これは実際にNautilusでそれらを隠します。lsコマンドラインからは、まだファイルがリストされます。

  1. ファイル.hiddenを非表示にするフォルダーに名前を付けたテキストファイルを作成します。
  2. 非表示にするファイルまたはフォルダーの名前を1行に1つずつファイルに追加します。
  3. ファイルブラウザを更新します。

2
ここでは、Debian 5.0の「ls」では動作しません。それはオウムガイまたはイルカに特有ですか?
ティムヘーゲル

2
Nautilusではファイルは非表示です。lsリストにはありません。
ために何

1
まさに素晴らしいソリューションです!:)
メリアーノスニコス

4

ドットは、Linuxでファイルを隠すために使用され、変更することはできません。

ただし、ユーザーが特定のフォルダー/ファイルにアクセスできないようにするために、ファイルのアクセス許可を試すことができます。chmodコマンドを試してみてください。


2

グラフィカルユーザーインターフェイスのファイルマネージャーやデスクトップ環境からのみファイルを非表示にしようとしていますか?その場合は、ファイル名の前にドットを付けるだけのオプションがあります。

私は信じているすべてのLinuxファイルマネージャによって隠さのみ追加ファイルがバックアップファイル、チルダで終わるすなわちものであり、~または.bak、彼らはバックアップ拡張したものであると考えているものは何でもか。いずれにせよ、ファイルマネージャからバックアップファイルを非表示にしたいだけなら、おそらく幸運でしょう。

ファイルにバックアップ拡張子を付けて非表示にしないでください。ファイルを誤って削除してしまう可能性があります。

余談ですが、コマンドSetFile -a V [file]または編集を使用してMac OS XのFinderから/.hiddenファイルを非表示にできますが、コマンドラインのlsプログラムからファイルが非表示にならないことは明らかです。


3
OS Xでは、ファイルを非表示にすることもできますchflags hidden filename
slhck

2

ある程度のプログラミングスキルがあり、必要なものだけがユーザーの利便性のためにファイル名を隠して視覚空間を乱雑にしない場合は、ハッキングできます!

コマンドラインツールのみを検討します。それらは非常に均一であり、私が常に使用している唯一のツールです。

この情報を保存するには多くの方法があります。

  1. 選択したファイルに「非表示」拡張属性を保存できます。見るman attr

      attr -s hidden -V true your_file
    
  2. または、上記のように、ファイル名のリストをファイルに.hidden保存できます

重要:これはロジックを実装するために必要なボックスからは機能しません。クリーンなシステムは.hiddenファイルとhidden拡張属性を無視します!

また、複数の可能な実装があります。

  1. ファイルが少ない場合は、ファイルに書き込み.bashrcます

    alias ls='ls -I filename_1 -I filename_2'
    

    man ls 詳細については。

  2. function ls隠しファイルを認識し、すべての-Iエントリのリストをアセンブル/bin/lsし、適切な無視フラグを使用して実行する 背後にあるすべてのロジックを処理するようなものを記述します。すべてのlsパラメーターを適切に処理する必要があるため、非常に骨の折れる作業です。

  3. 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
Melab

2

これは私が見つけた最高のソリューションです、あなたのプロフィールに追加してください:

alias ls="/bin/ls --color=auto --ignore='*.egg-info' --ignore='__pycache__'"

さらにパターンが必要な場合は、--ignoreフラグを追加してください。


いくつかのファイルを非表示にする必要がある場合、これは非常に長い文字列になります。複数のファイルの場合、これを行うためのより効率的な方法がありますが、それでもいくつかのファイルの場合は、優れたソリューションです。
JW0914

2

現在では、指定された構成に従ってファイルを隠すFUSEを作成できます。

この記事では、getdir機能を微調整する必要があると考えています。

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
これは、ディレクトリの内容を読み取ります。この操作はopendir()readdir()、...、closedir()1回の呼び出しでシーケンス。各ディレクトリエントリに対して、filldir()関数を呼び出す必要があります。

私はプログラマーではありませんがgetdir、(たとえば).hiddenファイルにリストされているすべてのファイルを省略することができると思います。これを正しく実装すると、すべてのツール(GUIまたは非GUI)が影響を受けます。


1

グループまたはその他の「x」パーマを削除することにより、ディレクトリの内容を「隠す」ことができますchmod go-x directoryname。正確なパスを知っていればファイルにアクセスできますが、ファイルをリストできなくなりました。これはあなたが望むもののようには聞こえません。

ドットファイルは、実際にはセキュリティのためにファイルを非表示にするのではなく、ファイルの一覧表示中のファイルの乱雑さを軽減するために便利です。それlsは他のツールに焼き付けられています。


そして、それも真実ではありません。ディレクトリから読み取りアクセス許可を削除すると、そのコンテンツのリストが表示されなくなりますが、実行アクセス許可を削除すると、ディレクトリへのアクセスがまったく拒否されます。ディレクトリを実行する権限を持っていない場合、それを超えるものにはアクセスできません。完全な権限を持つサブディレクトリがあり、そのパスを知っている場合でも。
バクサウ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.