Saya mencoba menghapus '.' direktori. Saya pikir saya bisa menghapus direktori kerja saya tanpa harus masuk ke direktori induk.
Inti dari pertanyaan saya adalah mencari beberapa wawasan tentang bagaimana sistem linux bekerja untuk menghapus file.
filesystems
directory
rm
Goldname
sumber
sumber
rm .
danrmdir .
tidak berhasil, tetapi mengapa mereka ditetapkan sebagai tidak berfungsi, yang tidak tergantung pada keberadaan fisik tautan keras.rm -rf .*
hanya untuk menemukan ini termasuk tidak hanya.
tetapi juga..
, dan kemudian../..
, dan kemudian ...Jawaban:
Menghapus direktori saat ini tidak memengaruhi integritas sistem file atau organisasi logisnya. Mencegah
.
penghapusan dilakukan untuk mengikuti standar POSIX yang menyatakan dirmdir(2)
halaman manual:Satu alasan dapat ditemukan di
rm
halaman manual:Di sisi lain, menghapus direktori saat ini secara eksplisit (yaitu dengan menyatakan path lengkap atau relatifnya) adalah operasi yang diperbolehkan di bawah Unix, setidaknya sejak SVR3 karena itu dilarang dengan Unix versi 7 hingga SVR2. Ini sangat mirip dengan apa yang terjadi ketika Anda menghapus file yang sedang aktif dibaca atau ditulis. Proses mengakses file hapus melanjutkan operasi baca dan tulis mereka seperti jika tidak ada yang terjadi. Setelah Anda menghapus direktori proses saat ini, direktori ini tidak lagi dapat diakses melalui jalurnya tetapi inode-nya tetap ada pada sistem file hingga proses tersebut mati atau mengubah direktori sendiri.
Perhatikan bahwa proses tidak akan dapat menggunakan jalur relatif ke direktori saat ini untuk mengubah cwd-nya (misalnya
cd ..
) karena tidak ada lagi..
entri dalam direktori saat ini.Ketika jenis seseorang
rmdir .
, mereka cenderung mengharapkan masuknya direktori saat ini untuk dihapus tetapi ketika sebuah direktori dihapus (menggunakan jalurnya), tiga entri direktori yang benar-benar dihapus,.
,..
, dan direktori itu sendiri.Menghapus saja
.
dan bukan entri direktori ini akan membuat direktori yang tidak patuh tetapi sebagaimana telah dinyatakan, itu dilarang oleh standar.Seperti @Emmanuel tunjukkan dengan benar, ada alasan kedua mengapa penghapusan
.
tidak diizinkan. Setidaknya ada satu OS yang kompatibel dengan POSIX (Mac OS X dengan HFS +) yang, dengan batasan kuat, mendukung pembuatan hardlink ke direktori yang ada. Dalam kasus seperti itu, tidak ada cara yang jelas dari dalam direktori untuk mengetahui hardlink mana yang diharapkan untuk dihapus.sumber
..
terhubung ke direktori tersebut. Ini adalah kasus uniklink count > 2
untuk mayoritas OS dan sistem file sehingga "beberapa sistem file dan / atau sistem operasi" adalah pernyataan yang meremehkan. Satu-satunya pengecualian yang tidak diketahui adalah Mac OS X dengan HFS + yang menambahkan batasan tentang siapa dan apa yang dapat dilakukan. Komentar POSIX yang diberikan diarahkan ke keanehan ini. Lihat unix.stackexchange.com/questions/22394/…rm -r .*
sebelumnya dan itu menghapus segalanya di bawah direktori induk secara rekursif ... Itu lebih dari satu atau dua dekade yang lalu, tetapi senang mengetahui bahwarm
tidak lagi mengizinkan ini.Ini dilakukan seperti itu untuk integritas karena Anda saat ini di dalam direktori itu dan
.
hanya referensi-sendiri.Anda harus masuk orang tuanya atau menelepon
rmdir
dengan jalurnya, yang dapat dilakukan dengan:Jika Anda sering membutuhkannya, Anda dapat mengatur alias seperti:
.. yang bisa disebut
rmc
sendiri untuk menghapus direktori saat ini.sumber
rmdir .
perintah hipotetis membahayakan integritas sistem file dengan cara iturmdir $(pwd)
ataurmdir "$PWD"
tidak?rm *
, dan apa yang Anda maksud dengan sejarah shell? 2. Jawabannya ditujukan pada bagian mengapa , 3. Peduli untuk menguraikan?rmdir $(pwd)
, mencaripwd
tahu nama logis untuk direktori saat ini, misalnya/foo/bar/baz
, dan kemudianrmdir
, melihat jalur itu, menghapusbaz
entri dari/foo/bar
direktori, asalkan syarat terpenuhi. Ini masuk akal. Perintahrmdir .
, di sisi lain, adalah instruksi untuk menghapus.
entri dari direktori saat ini, yang tidak diperbolehkan (itu akan melanggar batasan bahwa setiap direktori memiliki.
entri yang menunjuk ke dirinya sendiri) atau berguna (itu tidak akan menghapus tautan Anda ingin dihapus).