Tilde (~) di dalam direktori unix yang berfungsi

22

Jadi, saya bekerja di lingkungan UNIX dan saya perhatikan di dalam direktori kerja saya, yang berjarak beberapa mil dari rumah UNIX saya, ada a ~.

Sekarang, sekali di masa lalu, saya lakukan rm -rf ~dari direktori kerja saya dan akhirnya menghapus direktori home saya sepenuhnya dan harus melibatkan IT.

Saya tidak ingin melakukannya lagi. Pada saat yang sama, saya ingin tahu

  1. Mengapa ~dibuat di direktori kerja saya? Apakah itu slip jari yang salah saat menyimpan ( :w!tetapi apa yang terjadi :w~? !!)

  2. Sebelum check-in, ada skrip yang mencari file atau folder tambahan yang p4 tidak sadari sehingga def ini ~dapat menyebabkan masalah. Jadi bagaimana saya bisa menghapus ~dari direktori kerja saya dan pada saat yang sama tidak menghapus rumah saya?

Saya memiliki perintah cadangan yang disebut delyang saya gunakan sebagai ganti rm -rf. Itu hanya menempatkan barang-barang di lokasi sementara. Saya bisa menggunakannya dan menyingkirkan ~. Tetapi saya lebih tertarik mengetahui mengapa ini terjadi, dan bagaimana saya bisa menghapusnya?

pengguna73631
sumber
Biasanya, shell ganti ~ di awal lintasan dengan direktori home Anda. Gunakan path lengkap /home/yourUserName/~untuk mengakses direktori yang disebut ~.
jofel
Dan ~ pengguna lain / file dapat digunakan untuk referensi direktori home pengguna lain, demi kelengkapan.
godlygeek
Tampak seperti lelucon!
Xolve

Jawaban:

36

Baik mengutipnya:

rm -i '~'
rm -i "~"
rm -i \~

Atau rujuk dengan jalur, alih-alih hanya nama kecil:

rm -i ./~
rm -i /path/to/~

Perhatikan bahwa, meskipun merupakan nama karakter tunggal yang tampak lucu, secara konsep ini tidak berbeda dengan jika Anda telah membuat file bernama SOME$PATHdengan melakukan

touch 'SOME$PATH'

Dan mencoba menghapusnya dengan melakukan:

rm -i SOME$PATH

( Peringatan: variabel SOME$PATH tidak dikutip untuk contoh di sini. Biasanya akan dilampirkan dalam tanda kutip 'SOME$PATH' )

Dalam kedua kasus, shell memperluas nama yang Anda berikan, dan Anda perlu mencegahnya.

Juga: Jangan gunakan rm -rfuntuk menghapus file! Seluruh tujuan rm -radalah untuk mengatakan rmtidak apa-apa untuk menghapus direktori. Jika Anda tidak ingin menghapus seluruh direktori tanpa sengaja saat mencoba menghapus file, jangan lewat begitu saja -r!

godlygeek
sumber
12
Saya baru saja menguji ini. :w~di vim memang membuat file bernama ~. rm ~dikembalikan cannot remove /home/seth it is a directory. rm "~"memang menghapus file . Hanya untuk menggarisbawahi tidak lulus -rfsecara otomatis .
Seth
4
+1 untuk merekomendasikan untuk menghilangkan opsi kekerasan secara default. Ini mirip dengan melakukan kill -9secara default, yang saya lihat.
Celada
Saya melihat bahwa contoh rm -i $FOOsengaja tidak mengutip variabel demi contoh, tetapi tetap: menunjukkan contoh shell yang melibatkan rmdan variabel tidak dikutip sebagai argumen SANGAT BURUK , eh, maaf, terlepas dari konteks. Saya yakin itu bisa prooven :) Saya akan menambahkan beberapa catatan - tapi mungkin Anda bisa mengubah contoh, sedikit?
Volker Siegel
@VolkerSiegel, Point mengambil - Saya mengambil bagian dari suntingan Anda, tetapi catatan kaki sepertinya agak terlalu berat. Saya juga beralih ke nama variabel yang lebih kecil kemungkinannya untuk menyebabkan masalah - kebanyakan orang tidak memiliki file yang dinamai di SOME/bin:/usr/binmana pun pada sistem file mereka. :)
godlygeek
Ya, terlihat bagus! (Saya hampir akan menjawab: Apa? Tangan berat? Apakah Anda pernah mengalami masalah mengutip nyata dalam hidup Anda?;) Hanya agak jengkel tentang jumlah contoh shell yang salah di luar sana, secara umum ... Hei, sulit untuk memahami bahkan tanpa contoh yang salah! )
Volker Siegel
1

Tilde ketika digunakan sendiri dalam konteks ls ~akan menampilkan dir home Anda ~ adalah jalan pintas ke dir home Anda. Jika Anda melakukannya ls ~brownmaka Anda akan daftar isi home dir brown.

VIM, kecuali diberitahu sebaliknya, akan membuat salinan cadangan file yang diubah: myFile myFile ~.

Perilaku ini baik karena ia membuat cadangan tetapi jika Anda tidak menginginkannya, tambahkan file .vimrc: setel tanpa cadangan (yang baru saja saya akses vi ~/.vimrc).

Dan tentu saja seperti yang dikatakan orang lain, jika Anda memiliki file bernama ~ maka cukup lepaskan char sebagai \ ~

me 217 % vi this      (saved as :w~)
me 218 % ls
this  ~
me 219 % cat \~
kfdkdfk
me 220 % \rm \~
me 221 % ls
this
pengguna2592248
sumber
0

Ini bisa dipengaruhi oleh salah ketik. Jika TERM=xtermkonfigurasi Anda sama seperti milik saya, maka praktis setiap tombol fungsi di keyboard Anda akan mengirim urutan pelarian seperti ...

infocmp -1 | grep -n \~ | tail -n3
138:    kich1=\E[2~,
141:    knp=\E[6~,
142:    kpp=\E[5~,

Lebih dari setengah dari output dari infocmp -1mengandung ~tilde lolos pada mesin saya - dan saya bingung untuk memahami apa yang kebanyakan mereka. Saya tahu bahwa zshsetidaknya benar-benar memakan bagian tali yang lolos dalam banyak kasus - dan hanya menyisakan ~tilde .

Misalnya, mengetik echomaka <space>kemudian F6dan <return>cetakan ...

/home/mikeserv

Urutan melarikan diri sebenarnya yang dikirim adalah ...

kf6=\E[17~

Menariknya, ada beberapa urutan pelarian yang mengandung >karakter.

infocmp -1 | grep \>
is2=\E[!p\E[?3;4l\E[4l\E>,
rmkx=\E[?1l\E>,
rs2=\E[!p\E[?3;4l\E[4l\E>,

Itu biasanya digunakan lolos - reset dan inisialisasi string. Tidak sulit untuk membayangkan bahwa keyboard atau tombol-smash yang terjatuh dari semacam ketika shell interaktif sedang menunggu input dapat mengakibatkan ~file terpotong secara acak terjadi di seluruh sistem file Anda. Setidaknya, kadang-kadang muncul di tambang.

mikeserv
sumber