Sembunyikan file di Linux tanpa menggunakan titik

32

Saya ingin menyembunyikan file di Linux tanpa menggunakan titik, karena itu mungkin di Windows.

Apakah ada cara untuk melakukan ini?

aWebDeveloper
sumber
6
Ingatlah bahwa menyembunyikan file (kebingungan) bukan pengganti untuk keamanan (membatasi akses)
uSlackr

Jawaban:

26

Kamu tidak bisa. Ada perbedaan mendasar dalam cara sistem file menangani pengaturan tersembunyi. Di Windows, sistem file menyimpan beberapa atribut untuk file dalam metadata, termasuk atribut "tersembunyi" dan "sistem" (keduanya adalah jenis file tersembunyi). Dalam sistem file * nix yang umum, tidak ada atribut yang disimpan. Sebagai gantinya, informasi tersebut harus diletakkan di tempat lain, seperti dalam nama file. Konvensi dengan demikian adalah file yang dimulai dengan. (dan tergantung pada sistem Anda, mungkin beberapa lainnya seperti _) tidak akan ditampilkan oleh sebagian besar alat secara default.

Ini murni untuk kenyamanan, a. Memulai nama file tidak berarti apa-apa selain "pengguna mungkin tidak ingin melihat ini sepanjang waktu." Untuk memastikan bahwa Anda tahu, menjalankan mis ls -aakan menampilkan semua file.

Jika Anda tidak ingin file mengacak daftar Anda di Linux, Anda harus mengganti nama file itu untuk memulai dengan titik (Bonus: ini juga akan berfungsi untuk OS X, jika kita berbicara tentang perangkat portabel). Jika Anda tidak ingin pengguna dapat menemukan file, Anda melakukan kesalahan - itulah gunanya izin.

Izin Unix karena berkaitan dengan direktori sering membingungkan orang, dan mungkin memahaminya lebih baik akan membantu Anda. Izin "membaca" dan "mengeksekusi" ( rdan x) berarti sesuatu yang berbeda untuk direktori daripada yang mereka lakukan untuk file. Untuk direktori, xizin eksekusi menentukan apakah Anda mengakses inode dalam direktori atau tidak. rIzin baca menentukan apakah Anda dapat mengakses daftar direktori atau tidak. Secara fungsional, xmemungkinkan pengguna untuk melakukan hal-hal dalam direktori, sementara rizin memungkinkan mereka untuk melihat apa yang ada di dalamnya. Ini berbeda, dan perbedaannya bisa membingungkan. Mari kita lihat sebuah contoh:


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

Jadi, perhatikan bahwa tanpa mengeksekusi saya masih bisa membuat daftar file (meskipun ls menunjukkan kesalahan karena tidak bisa mendapatkan properti file), tetapi saya tidak dapat mengubah ke direktori atau membaca file di dalamnya. Tanpa membaca saya tidak bisa mendaftar file, tetapi saya masih bisa berubah ke direktori dan jika saya tahu nama file saya masih bisa mengaksesnya.

Namun, perlu diketahui bahwa menghapus izin baca hanya memberi Anda keamanan dengan ketidakjelasan. Jika pengguna menebak nama file, mereka akan dapat membaca isinya.

Ini mungkin tidak benar-benar relevan dengan pertanyaan Anda, saya hanya ingin memastikan Anda memahami izin direktori.

jcrawfordor
sumber
26

Buat file .hiddendi direktori dengan nama file yang akan disembunyikan (satu nama setiap baris).

Kemudian tambahkan yang berikut ke Anda ~/.bashrc:

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

Sekarang lsperintah Anda tidak mencantumkan file-file ini.

Saya menggunakan teknik ini untuk menyembunyikan file saya __pycache__dan __init__.py.


EDIT: sesuai komentar lain ini juga menyembunyikan mereka di setidaknya satu (Nautilus), tetapi mungkin beberapa browser file GUI juga.

A Sz
sumber
ini menarik. Apakah itu berfungsi juga di nautilus atau alat gui lainnya? Apakah Anda dapat melihat file ls -al?
Jakuje
1
kode tidak ada '' di akhir. (dan jika Anda bertanya-tanya dari mana upvotes berasal: askubuntu.com/a/713591/15811 ) ;-)
Rinzwind
14

Anda sebenarnya dapat menyembunyikan file di Linux tanpa menambahkan titik. Ini sebenarnya menyembunyikan mereka di Nautilus; sebuah lsdari baris perintah masih akan mencantumkan file.

  1. Buat file teks bernama .hiddendalam folder tempat Anda ingin menyembunyikan file.
  2. Tambahkan nama file atau folder yang ingin Anda sembunyikan, satu per baris, ke file.
  3. Refresh browser file Anda.
Melakukan
sumber
2
tidak bekerja di sini dengan "ls" di debian 5.0. Apakah ini khusus untuk nautilus atau lumba-lumba atau ...?
Tim Haegele
2
File disembunyikan di Nautilus; tidak ada dalam lsdaftar.
To Do
1
solusi yang luar biasa! :)
Merianos Nikos
4

Sebuah titik digunakan untuk menyembunyikan file di linux, dan itu tidak dapat diubah.

Namun, Anda bisa bermain dengan izin file untuk mencegah pengguna dari memiliki akses ke folder / file yang diberikan. Coba bereksperimen dengan chmodperintah.

bbaja42
sumber
2

Apakah Anda hanya berusaha menyembunyikan file dari manajer file dan / atau lingkungan desktop antarmuka pengguna grafis Anda? Jika demikian, mungkin ada opsi di luar hanya awalan nama file dengan titik.

Saya percaya file hanya tambahan disembunyikan oleh file manager Linux adalah file backup, yaitu mereka yang berakhir dengan tilde ~atau .bakatau apa pun yang mereka percaya adalah ekstensi cadangan. Bagaimanapun, Anda mungkin beruntung jika semua yang ingin Anda lakukan adalah menyembunyikan file cadangan dari manajer file.

Jangan berikan file Anda ekstensi cadangan untuk disembunyikan atau mereka mungkin terhapus secara tidak sengaja !!

Sebagai tambahan, Anda dapat menyembunyikan file dari Finder di Mac OS X menggunakan perintah SetFile -a V [file]atau mengedit /.hiddentetapi jelas ini tidak akan menyembunyikan file dari program baris perintah ls.

Jeff Burdges
sumber
3
Di OS X Anda juga dapat menyembunyikan file dengan chflags hidden filename.
slhck
2

Jika Anda memiliki beberapa keterampilan pemrograman dan jika hanya yang Anda butuhkan adalah menyembunyikan nama file untuk kenyamanan pengguna untuk berhenti mengacaukan ruang visual Anda dapat meretasnya!

Saya akan mempertimbangkan alat baris perintah saja, karena mereka cukup seragam dan satu-satunya alat yang selalu digunakan adalah saya.

Ada banyak cara untuk menyimpan informasi ini:

  1. Anda dapat menyimpan atribut "tersembunyi" dalam file yang dipilih. Lihatman attr

      attr -s hidden -V true your_file
    
  2. Atau seperti yang disebutkan di atas Anda dapat menyimpan daftar nama .hiddenfile dalam file

Penting: Ini tidak akan berfungsi di luar kotak Anda harus menerapkan logika, sistem bersih hanya akan mengabaikan .hiddenfile dan hiddenatribut yang diperluas!

Juga ada beberapa implementasi yang mungkin:

  1. Jika Anda hanya memiliki sedikit file, tulis di .bashrcfile Anda

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

    man ls untuk informasi lebih lanjut.

  2. Tulis function lsseperti itu menangani semua logika di belakang mengenali file yang tersembunyi dan menyusun daftar semua -Ientri, dan kemudian menjalankan /bin/lsdengan mengabaikan bendera yang tepat. Tugas yang sangat melelahkan, karena Anda harus menangani semua lsparameter dengan benar.

  3. Dapatkan sumber coreutils

    git clone git://git.sv.gnu.org/coreutils
    

    atau

    git clone git://git.suckless.org/sbase
    

    Tambalkan dengan cara yang Anda butuhkan untuk menangani implementasi file tersembunyi Anda. Dan letakkan diPATH

    Saya meretasnya dalam waktu kurang dari 5 menit menggunakan sumber tanpa pengisap dan diff adalah seperti ini:

     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)
    
Aleksy Grabowski
sumber
ls.cterletak di src, bukan direktori root, dan tidak ada fungsi lsdirdi ls.c.
Melab
2

Ini adalah solusi terbaik yang saya temukan, tambahkan ke profil Anda :

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

Jika Anda membutuhkan lebih banyak pola, tambahkan saja lebih banyak --ignorebendera.

jsmedmar
sumber
Ini akan mengarah ke string yang sangat, sangat panjang jika lebih dari beberapa file perlu disembunyikan. Untuk banyak file, ada cara yang lebih efisien untuk melakukan ini, tetapi untuk beberapa file, tetap ada solusi yang bagus.
JW0914
2

Saat ini Anda dapat menulis FUSE yang menyembunyikan file sesuai dengan konfigurasi yang diberikan.

Artikel ini membuat saya yakin Anda perlu mengubah getdirfungsi:

getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Ini membaca isi direktori. Operasi ini adalah opendir(), readdir(), ..., closedir()urutan dalam satu panggilan. Untuk setiap entri direktori, filldir()fungsi harus dipanggil.

Saya bukan seorang programmer tetapi saya membayangkan orang bisa getdirmenghilangkan semua file yang tercantum dalam file (misalnya) .hidden. Jika Anda menerapkan ini dengan benar maka setiap alat (GUI atau tidak) akan terpengaruh.

Kamil Maciorowski
sumber
1

Anda dapat 'menyembunyikan' isi direktori dengan mengambil pergi 'x' perms untuk kelompok, atau lainnya: chmod go-x directoryname. Anda tidak lagi dapat mendaftar file, meskipun Anda dapat mengakses file jika Anda tahu jalur yang tepat. Ini tidak terdengar seperti yang Anda inginkan.

Perlu diingat bahwa hal dotfile adalah kenyamanan, tidak benar-benar menyembunyikan file demi keamanan, tetapi untuk mengurangi kekacauan file selama daftar file. Ini dimasukkan ke dalam lsdan alat lainnya.

Homolka yang kaya
sumber
Dan itu juga tidak benar. Saat menghapus izin baca dari direktori menghentikan Anda dari mencantumkan kontennya, menghapus izin eksekusi akan menolak akses ke direktori sama sekali. Ketika Anda tidak memiliki izin untuk menjalankan direktori, Anda tidak akan memiliki akses ke apa pun di luarnya. Bahkan jika ada subdirektori dengan hak penuh di dalamnya dan Anda tahu jalannya.
Bachsau