Чи можна відновити файл?
Коротка відповідь: Не зазвичай.
@Mark Plotnick вказує у коментарях, ви можете відновити .py
файли за .pyc
допомогою Uncompyle . Це має бути ідеально підходить для вашої ситуації.
Взагалі, однак, це набагато складніше. Теоретично ви можете використовувати інструменти криміналістики для відновлення файлів. Напевно, найпростішим я користувався testdisk
(він же "PhotoRec"). Це працює лише іноді, і це повільний процес. Зазвичай це не варто, так що так, це можливо , але справжня відповідь - «ні».
Чи можна > змінити, щоб не перезаписати виконувані файли?
Ні. Не існує стандартного способу сказати оболонці ніколи не перенаправляти лише файли, позначені виконуваними. Існує "noclobber", який запобіжить перенаправлення на існуючі файли, виконувані чи ні, але дивіться мої коментарі до цього нижче.
Що робити в майбутньому?
Це може здатися дурним, але, щоб запобігти майбутнім помилкам, вам, мабуть, нічого не потрібно робити. Моя справа, що ви вже засвоїли цей урок.
Я використовую і викладаю Unix дуже давно, і хоча люди часто роблять цю помилку один раз, вони рідко її повторюють. Чому ні? Ймовірно, з тієї ж причини людина, досвідчена з ножами, не ріже себе: люди добре навчаються. Зрештою, правильно робити щось стає другою природою.
Використовуйте текстовий редактор, який робить резервні копії для вас. Наприклад, якщо ви використовуєте emacs
, попередня версія вашої програми зберігається у mac_ip.py ~. Інші редактори можуть бути налаштовані так само (наприклад, "встановити резервну копію" .nanorc
). Для редакторів, які не підтримують автоматичне резервне копіювання, ви можете зробити спрощену функцію у своєму .bashrc:
myeditor() { cp -p "$1" "$1~"; editor "$1"; }
Полегшіть собі копії. Наприклад, у каталозі проекту, над яким ви працюєте, ви можете мати Makefile з цільовою ціллю:
# 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}")
(Примітка: stackexchange неправильно відображає таблицю TAB вище як 4 пробіли.)
Так само ви можете створити ціль Makefile, яка виконує rsync
віддалений хост Unix, до якого ви маєте ssh
доступ. (Використовуйте, ssh-copy-id
щоб вас не запитали пароль повторно.)
Використовуйте git
. Існує багато чудових навчальних посібників з початку роботи. Спробуйте man gittutorial
, man gittutorial-2
і man giteveryday
. Налаштування власного сховища git не є складним, але ви також можете безкоштовно і безкоштовно створити віддалене сховище на github.com
Якщо вищезазначені рішення мають занадто велику вагу, ви можете зберегти невеликі сценарії на gist.github.com . Хоча можна вставити або завантажити з веб-браузера, я рекомендую використовувати інтерфейс суті командного рядка, щоб зробити речі дуже простими.
Я рішуче перешкоджаю використанню "noclobber".
Так, якщо ви вирішите, ви можете зробити це, set -o noclobber
щоб ви отримували повідомлення про помилки, коли намагаєтесь перезаписати наявний файл. На мою думку, це погана ідея. *
Це змушує оболонку працювати нестандартним способом, не маючи видимих ознак, чи включена вона. Ви повинні використовувати інший синтаксис, щоб робити звичайні речі. Найгірше, якщо ви звикнете до noclobber, то одного дня ви будете користуватися іншим автоматом Unix без noclobber, і така аварія може повторитися.
Як ви, напевно, знаєте, оболонка Unix була розроблена як гострий інструмент для експертів. Він швидкий у використанні і не зашкодить вам - і він скоротить вас, якщо ви забудете, який кінець - точковий. Але, чим більше ти його використовуєш, тим більше, я думаю, ти оціниш, що це може бути хорошою справою.
* Зноска: можливо, прийміть мою думку із зерном солі. Я також та людина, яка вважає, що велосипедні тренажери - це погана ідея.
set -o noglobber
і bash більше не буде перенаправляти в існуючі файли. Детальніше дивіться тут: cyberciti.biz/tips/howto-keep-file-safe-from-overwriting.html