Dosya kurtarılabilir mi?
Kısa cevap: Genelde değil.
@Mark Plotnick yorumlarda işaret ediyor, Uncompyle kullanarak .py
dosyaları kurtarabilirsiniz . Bu, durumunuz için mükemmel olmalıdır..pyc
Genel olarak, yine de, bu daha zordur. Teorik olarak, dosyaları geri almak için adli tıp araçlarını kullanabilirsiniz. Muhtemelen kullandığım en kolay testdisk
(aka "PhotoRec"). Sadece bazen çalışır ve yavaş bir işlemdir. Genelde buna değmez, yani evet, mümkün , ancak gerçek cevap "hayır".
Can > üzerine yazma yürütülebilir değil değiştirilebilir?
Hayır. Kabuğa asla yalnızca çalıştırılabilir olarak işaretlenmiş dosyaları yeniden yönlendirmemesini söylemenin standart bir yolu yoktur. Çalıştırılabilir olsun ya da olmasın, var olan dosyalara yönlendirmeyi engelleyen "noclobber" var ancak bu konudaki yorumlarımı gör.
Gelecekte ne yapmalı?
Bu aptalca gelebilir, ancak gelecekteki hataları önlemek için muhtemelen hiçbir şey yapmanıza gerek yoktur. Benim iddiaya göre bu dersi çoktan öğrendiniz.
Unix'i çok uzun zamandır kullanıyor ve öğretiyorum ve insanlar çoğu zaman bu hatayı bir kez yaparken nadiren tekrarlıyorlar. Neden olmasın? Muhtemelen aynı sebepten dolayı bıçakla tecrübe edilen bir insan kendini kesmiyor: insanlar öğrenmede iyidir. Sonunda, doğru olanı yapmak ikinci doğa haline gelir.
Sizin için yedekleme yapan bir metin düzenleyici kullanın. Örneğin, kullanırsanız emacs
, programınızın önceki sürümü mac_ip.py ~ içine kaydedilir. Diğer editörler de benzer şekilde çalışacak şekilde yapılandırılabilir (örneğin, "yedeklemeyi ayarla" .nanorc
). Otomatik yedeklemeyi desteklemeyen editörler için, .bashrc'nizde basit bir işlev yapabilirsiniz:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
Kopyalama işlemini kendiniz için kolaylaştırın. Örneğin, üzerinde çalıştığınız projenin dizininde, şunun gibi bir hedefi olan bir Makefile olabilir:
# Use `make tar` to backup all files in this directory.
# Tar filename will be ../<currentdirectory>-<date>.tar.gz
DIRNAME = $(shell basename `pwd`)
TIMESTAMP = $(shell date +%s)
tar:
@echo "[Tarring up ${DIRNAME}.tar.gz]"
(cd .. ; tar -zcvf "${DIRNAME}-${TIMESTAMP}.tar.gz" "${DIRNAME}")
(Not: stackexchange, yukarıdaki TAB'leri 4 boşluk olarak yanlış yapıyor.)
Benzer şekilde, erişiminiz olan rsync
uzak bir Unix ana bilgisayarına yapılan bir Makefile hedefi oluşturabilirsiniz ssh
. ( ssh-copy-id
Tekrar tekrar kullanın , şifreniz sorulmayacak.)
Kullanın git
. Başlamak için birçok mükemmel ders var. Deneyin man gittutorial
, man gittutorial-2
ve man giteveryday
. Kendi git deponuzu oluşturmak zor değildir, ancak github.com'da ücretsiz olarak uzak bir depo da oluşturabilirsiniz
Yukarıdaki çözümler çok ağırsa, küçük komut dosyalarını gist.github.com adresine kaydedebilirsiniz . Bir web tarayıcısından yapıştırmak veya yüklemek mümkün olsa da, işleri kolaylaştırmak için bir komut satırı kılavuzu arayüzü kullanmanızı öneririm .
"Noclobber" kullanmaktan kesinlikle vazgeçiyorum.
Evet, seçerseniz, set -o noclobber
varolan bir dosyanın üzerine yazmaya çalıştığınızda hata mesajları alırsınız. Bu bence kötü bir fikir. *
Kabuğun etkin olup olmadığına dair hiçbir belirti olmadan standart olmayan bir şekilde çalışmasını sağlar. Normal şeyler yapmak için farklı bir sözdizimi kullanmanız gerekir. Hepsinden kötüsü, noclobber'a alışırsanız, o zaman bir gün noclobber olmadan başka bir Unix makinesi kullanırsınız ve bu tür bir kaza yine olabilir.
Muhtemelen bildiğiniz gibi, Unix kabuğu uzmanlar için keskin bir araç olarak tasarlanmıştır. Kullanımı hızlıdır ve yolunuza çıkmaz - ve hangi ucun sivri olduğunu unutursanız sizi keser. Ancak, ne kadar çok kullanırsanız, bunun iyi bir şey olabileceğini takdir edersiniz.
* Dipnot: Belki de düşüncelerimi bir tuz tuzu ile alırım. Ayrıca bisiklet eğitim tekerleklerini kötü bir fikir olduğunu düşünen türden biriyim.
set -o noglobber
ve bash artık varolan dosyalara yönlendirilmez. Detaylar için buraya bakınız: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html