Rm komutunu takma ad vermek ve daha güvenli hale getirmek için en iyi yöntemler


21

Bir süre önce, ana klasörümü yanlışlıkla sildim, çünkü rm -rf *çalışma dizini ana klasör olan yanlış terminalde koştum !

Keşke rmemir için bir takma adım olsaydı , ama durum böyle değildi.

Şimdi, bunun için bir takma ad olarak bir senaryo yazmayı planlıyorum rm.

Önerecek en iyi uygulamanız var mı?

Teşekkürler.


7
Sempati duymadığımdan değil, ancak rmgüvenlik için bir takma ad gerektiren tehlikeli bir komut olduğunu sanmıyorum . rVe fseçeneklerini kullanarak kabuğa , bunun tehlikeli olduğunu bildiğini ve bunun hakkında dikkatlice düşündüğümü söylüyorsunuz ve bu gerçekten yapmak istediğim şey . Bu seçenekleri kullanmazsanız, tüm ana klasörünüzü onunla silemezsiniz.
user26512


1
@grossvogel alınmadı :)! Ancak, bu komutu takma adlandırma yaygın bir uygulamadır. Her silmeyi onaylamak için birçok insan -f seçeneğini kullanır.

23
Bir takma ad rmkullanıyorsanız, söz konusu takma adıma alışacağınızı unutmayın. Sonra bir gün, takma adın olmadığı bir sistemde olacaksınız ve en azından beklediğiniz zaman yanlış olanı yapacaksınız. Muhtemelen sizin sisteminiz olmayacak.
Stefan Lasiewski

2
@puller Sadece RHEL gibi aptalca takma rmolan sistemlerde rm -i.
Daniel Beck

Yanıtlar:


30

Özelleştirilmiş bir istiyorsanız rm, demiyoruz rmama senin bir isim, myrm, deleteya da her neyse.

rm='rm -i'Takma adı, bir korku olduğunu onu kullanırken bir, beklediğiniz olacak çünkü sonra rmdosyaları çıkarmadan önce varsayılan olarak sizi isteyecek şekilde. Tabii ki, bir gün o takma adı ayarlanmamış bir hesapla çalıştıracaksınız ve neler olup bittiğini anlamadan önce, çok geç.

Her durumda, dosya kaybı veya yolsuzluk için hazırlanmanın iyi bir yolu yedekleme yapmaktır.

Sizi yanlışlıkla dosya silmeye veya üzerine yazmaya karşı koruyacak hızlı bir alternatif, ZFS gibi sınırsız anlık görüntüleri destekleyen bir dosya sistemi kullanmaktır. Sık sık anlık görüntüler otomatik olarak yapılırsa, dosyaları olaydan önceki son anlık görüntü sırasında oldukları durumda kurtarabilirsiniz.  


3
Bu korku hikayesini bizzat çekenlerden birinden duydum.
Dan D.

Katılıyorum, ancak çoğu insan tamamen farklı bir dosya sistemine geçmekte özgür değil.
Peon

Aslında, ilk önce yedekleme yapmayı önermemin nedeni, dosya sistemi yasaklayan bir özellik değil.
jlliagre

12

Eğer takma adlarına tasarruf istiyoruz ama yaparsanız devre dışı etmek yapabilirsiniz, diğerlerine göre daha sisteminizde farklı çalışma komutlara alışmak risk istemiyor rmböyle

alias rm='echo "rm is disabled, use remove or trash or /bin/rm instead."'

Sonra kendi güvenli takma adınızı oluşturabilirsiniz, örneğin

alias remove='/bin/rm -irv'

veya trashyerine kullanın.


2
(En azından bazı sürümlerde) takma adları diğer sırayla tanımlamanız gerektiğini unutmayın. Sunduğunuz sırayla yapmak removeolarak tanımlar echo "rm is disabled, use trash or /bin/rm instead." -irv. Ve, sağduyulu bir mesele olarak, mesajın rmgüvenli removeemrinize başvurmasını istemez miydiniz ?
Scott,

Haklısın, cevabı buna göre güncelleyeceğim.
Dario Seidl

5

Bunun trashyerine kullanmayı deneyebilirsiniz . Arada bir boşaltmayı unutma.


3

Herkesin profilini değiştirmek zorunda kalmadan, yapabileceğiniz şey dizinde -i adlı dosyayı yerleştirmek.

# touch -- -i
# ll
total 0
-rw-r--r-- 1 root users  0 Jan 26 19:24 files
drwxr-xr-x 2 root users 40 Jan 26 19:24 folder_of_power
-rw-r--r-- 1 root root   0 Jan 26 19:25 -i
-rw-r--r-- 1 root users  0 Jan 26 19:24 important
-rw-r--r-- 1 root users  0 Jan 26 19:24 very
# rm -rf *
rm: remove regular empty file `files'? 

Kullanıcı * kullanmaya karar verirse işe yaramaz. * sadece * yerine. Ama yine de düzgün bir numara.
Peon

1
afaik rm -rf. ne de rm -rf .. başaramazsınız çünkü rehberde sizsiniz.
Peon

@Peon: (Daha yaygın olduğuna inandığım) veya (söylediğiniz) .* *yerine demek istediğine * .*inanıyorum * . *. …………………………………………………………………… Bu tekniğin gerçekten, küresel olarak etkili olması için yazma izninizin olduğu her dizinde yapmanız gerekir. . Ama katılıyorum, düzgün bir hiledir.
Scott,

1

Aşağıdaki betiği kullanıyorum.

#!/bin/sh

trash=$HOME/tmp
mv "$@" $trash
nohup find "$trash" -type f -atime +7 -exec /bin/rm '{}' \; 2>&1 &

Bir dosyayı yanlışlıkla silerseniz, onu kurtarmak $HOME/tmp.

Komut dosyası, silinen dosyaları bir tmpdizine taşır ve erişim süresi 7 gün sonraysa ( $HOME/tmpdizinin yarı otomatik olarak temizlenmesi ) silme komut dosyası çalıştırıldığında bunları siler .


-2

Profilinde,

alias rm="rm -i"

3
Aliasing rm, bence, oldukça zayıf bir tavsiye ve kesinlikle çektirmenin durumunda yardımcı olmaz.
jlliagre

rm -IHer iki dünyanın en iyisini verir, jlliagre.
Tamara Wijsman,

@Tom Wijsman, kısmen. Kritik bir standart Unix komutunun davranışını değiştirmek hala burada potansiyel bir risktir. Etkileşimli olmasını istiyorsanız, takma adı farklı bir ad verin.
jlliagre

@jlliagre: Hmm, yani senaryoların bu değişikliği yakaladığını mı söylüyorsunuz?
Tamara Wijsman,

Lütfen puanımı almak için cevabımı superuser.com/a/382498/19279 okuyun .
jlliagre

-2

dİçeriği olan bir script denir mv $* /tmp.

düzenleme: Bu kötü bir fikirdir; aşağıya bakınız. Şu anda alias d='mv -t /tmp'benim .profileyerine var.


2
Bu öneri tehlikelidir ve a) zaten aynı isimde çöpe atılan dosyaları geçersiz kılabilir veya b) tamamen yanlış dosyaları d "foo bar"silebilir (dosyaları foove dosyaları silecektir bar). Daha güvenli bir şey olabilir #!/bin/bash TRASH="$( mktemp -d -t trashed.XXX )"; echo "Moving to trash $TRASH"; mv -v -- "$@" "$TRASH"( mktempve mvsözdizimi sisteminize bağlı, bu Linux için çalışıyor).
Daniel Beck

2
Açıklama için teşekkürler. A) sorununda iyiyim ama b) sorunu büyük bir sorun. Benim değişti dkomutu alias d='mv -t /tmp'skinTenimde .profile; Sanırım aradığım basit çözüm bu.
beefus

-2

Bu bash kodu işlevini ekler rmsizin için ~/.bash_profileyapılandırma dosyası. Bunu çalıştırdıktan sonra yazarsanız rm file, o dosyayı/tmp

cat << EOF >> ~/.bash_profile
rm () {
  mv $1 /tmp
}
EOF

1
Bu kod / kod ne yapar? Lütfen açıklayınız ki daha az teknik olan kullanıcılar cevabınızı anlayabilecektir.
Vylix

2
Bu soruya cevap verebilse de, neden böyle olduğunu açıklayabilirseniz daha iyi bir cevap olabilir .
DavidPostill

1
Bu soruya bir cevap veriyor, ama çok zayıf bir soru. Bu cevabın daha iyi iki versiyonu zaten gönderildi.
Scott

Bu bash kodu işlevini ekler rmsizin için ~/.bash_profileyapılandırma dosyası. Bu dosyayı çalıştırdıktan sonra yazarsanız rm file, o dosyayı /tmp.
Vicente Gonzalez,

Açıkladığınız için teşekkürler. Lütfen cevabınızı yazıya dahil etmek için lütfen cevabınızı düzenler misiniz ?
Ben N
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.