home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 23.22 Using find to Clear Out Unneeded Files Chapter 24 Next: 24.2 Save Space with Bit Bucket Log Files and Mailboxes
 

24. Other Ways to Get Disk Space

24.1 Instead of Removing a File, Empty It

Sometimes you don't want to remove a file completely - you just want to empty it:

  • When you remove a file and create a new one with the same name, the new file will have your default permissions (22.4 ) and ownership (22.3 ) . It's better to empty the file now, then add new text later; this won't change the permissions and ownership.

  • Completely empty files (ones that ls -l says have zero characters) don't take any disk space to store (except the few bytes that the directory entry (18.2 ) uses).

  • You can use the empty files as "place markers" to remind you that something was there or belongs there. Some UNIX logging programs won't write errors to their log files unless the log files already exist. Empty files work fine for that.

  • Empty files hold a "timestamp" (just as files with text do) that shows when the file was last modified. I use empty files in some directories to remind me when I've last done something (backups, printouts (21.9 ) , etc.). The find -newer (17.8 , 17.9 ) command can compare other files to a timestamp file.

Well, you get the idea by now.

How can you empty a file? Watch out: when some editors say that a file has "no lines," they may still append a newline character when writing the file. Just one character still takes a block of disk space to store. Better:

  • In the Bourne shell, the most efficient way is to redirect the output of a null command:

    $ > afile
    
    

    If the file already exists, that command will truncate the file without needing a subprocess.

  • In the C shell copy the UNIX empty file, /dev/null (13.14 ) , on top of the file:

    % cp /dev/null afile
    
    

You can also "almost" empty the file, leaving just a few lines, this way:

tail
 

% tail afile > tmpfile


% cat tmpfile > afile


% rm tmpfile

That's especially good for log files that you never want to delete completely. Use cat and rm , not mv -mv will break the link to the original file (afile ) and replace it with the temporary file.

- JP


Previous: 23.22 Using find to Clear Out Unneeded Files UNIX Power Tools Next: 24.2 Save Space with Bit Bucket Log Files and Mailboxes
23.22 Using find to Clear Out Unneeded Files Book Index 24.2 Save Space with Bit Bucket Log Files and Mailboxes

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System