Why is editing a file by renaming the new one safer?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Why is editing a file by renaming the new one safer?
# 1  
Why is editing a file by renaming the new one safer?

Hello:
I've been reading about ways to edit files from the command line, and I've found two websites which state that the following is the safest way to edit a file:
Code:
command original > new
mv new original

That is, renaming the newer file to the previous one. This is what the websites I mentioned state:
Quote:
Before you start, be warned that editing files is a really bad idea. The preferred way to modify a file is to create a new file within the same file system, write the modified content into it, and then mv it to the original name. This is the only way to prevent data loss in the event of a crash while writing. However, using a temp file and mv means that you break hardlinks to the file (unavoidably), that you would convert a symlink to hard file, and that you may need to take extra steps to transfer the ownership and permissions (and possible other metadata) of the original file to the new file. Some people prefer to roll the dice and accept the tiny possibility of data loss versus the greater possibility of hardlink loss and the inconvenience of chown/chmod (and potentially setfattr, setfacl, chattr...).
(Source: BashFAQ/021 - Greg's Wiki)

Quote:
So, generally speaking, to accomplish almost any editing task on a file, temporary files should be used. Sure, if the file is big, creating a temporary file becomes more and more inefficient, and requires that an amount of available free space roughly the same size of the original file is available. Nonetheless, it's by far the only right and sane way to do the job. Modern machines should have no disk space problems.

[...]

In any case, for our purposes the important thing to remember of these methods is that the old file stays around (whether under its original name or a different one) until the new one has been completely written, so errors can be detected and the old file rolled back. This makes them the preferred method for changing a file safely.
(Source: “In-place” editing of files << \1)

What I don't understand is: what makes it safer? Why is it safer in the case the machine stops unexpectedly once the file was renamed? What's the logic behind this?

Thanks in advance.
# 2  
I don't understand what point they're making either.

All you need to be is "professional". That is, before you edit a file, copy it (backup).

Quote:
cp existing existing.bck
That way if you make a lot of (bad) changes and you want to see what it was like before you started, no problem.

Also, never delete any file that you're not sure about. Yes, this is where mv comes in (as they suggest).
I think that I need to delete this configuration file..............

mv existing existing.old

Whoops......shouldn't have deleted that? No problem, mv it back.
NEVER delete anything you're not sure about.

If the system crashes whilst you're editing a file, no problem, you've got an original copy.

Just be professional and you won't go wrong.

Last edited by hicksd8; 12-21-2019 at 01:59 PM..
# 3  
Hi
If I correctly understood the decribed method for file system without copy-on-write on disk and logging
# 4  
Seems illogical to me.

When working on complex programming, I often take the backup even more seriously. I sequentially number versions to help me go back and find prior logic.
cp GreatScript GreatScript.v001
then continue editing GreatScript, until I get to another good spot and
cp GreatScript GreatScript.v002
and continue with this process.
Eventually, I often create an Archive folder, and then mv GreatScript.v* ../Archive

Sometimes, it is only apparent much later on that there was a major mistake in coding - and a need to go back further than only one version. Plus, while developing, I always feel better knowing more than one backup copy.

Last edited by Peasant; 12-30-2019 at 12:11 PM.. Reason: Added some icode tags.
This User Gave Thanks to joeyg For This Post:
# 5  
They mean: copying a file, especially a big file, is done in steps. If there is a power loss in between, the status of the file is unknown: can be empty or partially copied.
In contrast, renaming/moving a file is "atomic": after a power loss it's either 100% the new file or 100% the old file.

But with a copy speed of >100 Mbyte per second and "journaling" it is a bit paranoid to assume a power loss within these microseconds, IMHO.
So that's why I prefer to keep the inode intact (including attributes and link count), and simply assume that power will last for the next microseconds.
This User Gave Thanks to MadeInGermany For This Post:
# 6  
Practically speaking,

It depends on your risk management model.

If your system is prone to crashing or locking up, then it might be a better idea to copy the file to another server and do the edits, then load it up to the server and move it into place.

Sounds fishy, however, if your server is so unstable that it is prone to crashing or has such resource problems.

Normally, and I mean everyday on remote, production servers, I copy the file I want to edit and add a ".backup" or ".neo" extension on it, or something like that. But I generally edit the original file and save it to disk when I'm done.

When editing, you are editing a copy in memory, not the copy on disk; so if the system crashes while you are editing, you only lose the changes in the editor, not the file on disk.

I guess, one could say that when you cross the street, you should look right, then left, then up, and then down, and to be safe, look behind you too. However, most of us look right and left. If you want to edit copies and move them that's cool but it is not going to change much in your life compared to editing the original and saving it.

What is important, as mentioned by others and also by me again here, is to make a quick backup copy of a file before . you edit. I do this most of the time, even when I have offsite backups.

Making a copy, editing the copy, and moving it to replace the original file is still "not perfect" because you have still written over your original. You should at least make a copy, edit the original, and save it, knowing you have a fresh backup. If you copy the original, edit the copy, and move it to overwrite the original, where is your fresh backup? You don't have one (in this scenario). Ditto if you copy the file you just edited over the original, you then have two potentially "fat fingered" copies.

So, what's the point? What is the risk? What is the system vulnerability you are trying to mitigate?

Last edited by hicksd8; 12-30-2019 at 02:10 PM..
This User Gave Thanks to Neo For This Post:
# 7  
I am largely with Neo - depending on what file you are modifying, you might not even need a backup copy at all. For example, I often create feeding files for loops - and afterwards modify them (add or remove things) - these are my very own files and I usually can recreate them very easily if I ever have to - so these I modify without any backups. System files however should always be modified after a copy - ideally a copy where ownership and permissions are the same as the original - so if anything ever goes wrong - all you have to do is rename the original file to something like .old and your copy to the original filename.
BTW - in 32 years, I have not lost a single file to a system crash.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #75
Difficulty: Easy
Apple's Mac OS X was based on NeXTStep, but iOS was not based on Mac OS X.
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert vi editing to text editing

Dear Guru's I'm using Putty and want to edit a file. I know we generally use vi editor to do it. As I'm not good in using vi editor, I want to convert the vi into something like text pad. Is there any option in Putty to do the same ? Thanks for your response. Srini (6 Replies)
Discussion started by: thummi9090
6 Replies

2. UNIX for Dummies Questions & Answers

# /UNIX.org file deleting is safer or not

Hi All, Please tell me the use of # /Unix.org file it has reserved a huge disk space, I want to know is it safer to truncate or delete. Thanks - Rukshan.:) (1 Reply)
Discussion started by: rukshan4u2c
1 Replies

3. Shell Programming and Scripting

Need help in editing a file

I have a file which has 10 million records in it. When am trying to edit the file with vi, the following error occurs: ~ ~ ~ ~ ~ ~ ~ ~ "file1" Value too large for defined data type Is there any way that I can edit this file without using vi? Any help would be really appreciated.... (8 Replies)
Discussion started by: bobby1015
8 Replies

4. Shell Programming and Scripting

editing line in text file adding number to value in file

I have a text file that has data like: Data "12345#22" Fred ID 12345 Age 45 Wilma Dino Data "123#22" Tarzan ID 123 Age 33 Jane I need to figure out a way of adding 1,000,000 to the specific lines (always same format) in the file, so it becomes: Data "1012345#22" Fred ID... (16 Replies)
Discussion started by: say170
16 Replies

5. Shell Programming and Scripting

Help with file editing while keeping file format intact

Hi, I am having a file which is fix length and comma seperated. And I want to replace values for one column. I am reading file line by line in variable $LINE and then replacing the string. Problem is after changing value and writing new file temp5.txt, formating of original file is getting... (8 Replies)
Discussion started by: Mruda
8 Replies

6. Solaris

metaset - renaming /editing the set name - possible ?

Hi all I need to change my current metaset setname from lh-rms02ds to lh-lgwrms01ds. Is it possible ?? I know within veritas I do a vxedit, is there a way in SVM ? I notice theres a metarename, but this is for the metadevice level. Any tips ? help ?? Or do I need to delete /... (2 Replies)
Discussion started by: sbk1972
2 Replies

7. What is on Your Mind?

Is M$ safer than UN*X(-LIKE)??

I know that you already know the answer to the question. It just springed in my mind after what happened yesterday. I was getting some books off of Amazon.com, since they are cheeper than bookstore, and my mother said something that made me laugh 'till I couldn't breathe. I have a Debian Lenny... (12 Replies)
Discussion started by: Texasone
12 Replies

8. What is on Your Mind?

Nuclear Elephant iPhone Wipe making your iPhone Safer for Resale

For those with the iPhones here might read up how to wipe your personal data off the phone before reselling or trade-in. ;) source: Nuclear Elephant: iPhone Wipe June 1, 2008: Making your iPhone Safe for Resale Since my posts regarding the iPhone restore mode being insufficient for wiping... (0 Replies)
Discussion started by: sparcguy
0 Replies

9. UNIX for Advanced & Expert Users

Editing the end of the file without loading the entire file

hi! I am a newbee. I would really appreciate if you can answer the following question: I have a huge data file, 214MB with several coloumns. I need to delete the very last line of the file. Everything I know takes a lot of time to do it ( because I have to open the file in an editor or run a... (3 Replies)
Discussion started by: Garuda
3 Replies

Featured Tech Videos