Saya ingin menyembunyikan file di Linux tanpa menggunakan titik, karena itu mungkin di Windows.
Apakah ada cara untuk melakukan ini?
Saya ingin menyembunyikan file di Linux tanpa menggunakan titik, karena itu mungkin di Windows.
Apakah ada cara untuk melakukan ini?
Jawaban:
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 -a
akan 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" ( r
dan x
) berarti sesuatu yang berbeda untuk direktori daripada yang mereka lakukan untuk file. Untuk direktori, x
izin eksekusi menentukan apakah Anda mengakses inode dalam direktori atau tidak. r
Izin baca menentukan apakah Anda dapat mengakses daftar direktori atau tidak. Secara fungsional, x
memungkinkan pengguna untuk melakukan hal-hal dalam direktori, sementara r
izin 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.
Buat file .hidden
di 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 ls
perintah 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.
ls -al
?
Anda sebenarnya dapat menyembunyikan file di Linux tanpa menambahkan titik. Ini sebenarnya menyembunyikan mereka di Nautilus; sebuah ls
dari baris perintah masih akan mencantumkan file.
.hidden
dalam folder tempat Anda ingin menyembunyikan file.ls
daftar.
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 .bak
atau 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 /.hidden
tetapi jelas ini tidak akan menyembunyikan file dari program baris perintah ls
.
chflags hidden filename
.
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:
Anda dapat menyimpan atribut "tersembunyi" dalam file yang dipilih. Lihatman attr
attr -s hidden -V true your_file
Atau seperti yang disebutkan di atas Anda dapat menyimpan daftar nama .hidden
file dalam file
Penting: Ini tidak akan berfungsi di luar kotak Anda harus menerapkan logika, sistem bersih hanya akan mengabaikan .hidden
file dan hidden
atribut yang diperluas!
Juga ada beberapa implementasi yang mungkin:
Jika Anda hanya memiliki sedikit file, tulis di .bashrc
file Anda
alias ls='ls -I filename_1 -I filename_2'
man ls
untuk informasi lebih lanjut.
Tulis function ls
seperti itu menangani semua logika di belakang mengenali file yang tersembunyi dan menyusun daftar semua -I
entri, dan kemudian menjalankan
/bin/ls
dengan mengabaikan bendera yang tepat. Tugas yang sangat melelahkan, karena Anda harus menangani semua ls
parameter dengan benar.
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)
ls.c
terletak di src
, bukan direktori root, dan tidak ada fungsi lsdir
di ls.c
.
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 --ignore
bendera.
Saat ini Anda dapat menulis FUSE yang menyembunyikan file sesuai dengan konfigurasi yang diberikan.
Artikel ini membuat saya yakin Anda perlu mengubah getdir
fungsi:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Ini membaca isi direktori. Operasi ini adalahopendir()
,readdir()
, ...,closedir()
urutan dalam satu panggilan. Untuk setiap entri direktori,filldir()
fungsi harus dipanggil.
Saya bukan seorang programmer tetapi saya membayangkan orang bisa getdir
menghilangkan semua file yang tercantum dalam file (misalnya) .hidden
. Jika Anda menerapkan ini dengan benar maka setiap alat (GUI atau tidak) akan terpengaruh.
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 ls
dan alat lainnya.