E2tools is a simple set of GPL'ed utilities to read, write, and
manipulate files in an ext2/ext3 filesystem.  These utilities access a
filesystem directly using the ext2fs library.  I wrote these tools in order
to copy files into a linux filesystem on a machine that does not have ext2
support.  Of course, they can also be used on a linux machine to read/write
to disk images or floppies without having to mount them or have root
access.

Supported functionality:

copy files: e2cp
move files: e2mv
remove files: e2rm
create directory: e2mkdir
create hard links: e2ln
list files/directories: e2ls
output the last part of a file: e2tail

Requirements:

e2fsprogs-1.27 or later - http://e2fsprogs.sourceforge.net/
gcc - e2fsprogs will not compile with some proprietary compilers (ie SCO's)

If you have questions, comments, patches, or feature requests, just email
them to me.  I will do my best to respond in a timely manner.

Keith Sheffield <sheff@pobox.com>


Quickstart Documentation
------------------------

In general, to specify a directory or file on an ext2 filesystem for the
e2tools utilities, use the following form:

         filesystem:directory_path

The filesystem can be an unmounted partition or a regular file that's been
formatted to contain an ext2 filesystem.  In general, if a command takes
multiple file names on the command line, if the first one contains an ext2
file specification, the rest of the files are assumed to be on the same
filesystem until another one is explicitly stated:

/tmp/boot.img:/tmp/file1 /tmp/file2 /tmp/file3 /tmp/boot2.img:/tmp/file4

Files 1-3 are on /tmp/boot.img and the last file is on /tmp/boot2.img


e2cp
-----

This program copies files to/from an e2fs filesystem from/to the machine's
native filesystem. 

Usage:

e2cp [-0apv][-P mode][-O uid][-G gid][-d dest_dir][-s src_dir][file1..N dest]

-0      Input lines terminated by a null character
-a      Absolute directory names - create directories instead of just copying
        into the destination.  Only valid for copying into an ext2fs filesystem
-d      Destination of files to be copied.  May be in the ext2fs filesystem or
        the host filesystem.
-G      Set the default group to gid.
-O      Set the default file owner to uid.
-p      Preserve host file attributes (permissions, times, etc.) when copying
        files.
-P      Set the file permissions (ie 755, 666).
-s      The source of the files to be copied.
-v      Be verbose.

A - by itself means to use standard input/output

Examples:

Copy a file and use the default permission and ownership of the current user:

e2cp README.txt /tmp/boot.img:/tmp

Do the same thing, but keep permissions & ownership:

e2cp -p README.txt /tmp/boot.img:/tmp

Dump a file to standard out:

e2cp /tmp/boot.img:/tmp/README.txt - | wc

Get a file from standard input and put it on an unmounted partition:

tar cf - /data/logs|gzip| e2cp - /dev/hdb1:/backup/logs.tar.gz

Copy the files from one directory and put them under another directory on
an unmounted partition, keeping the original paths, permissions & ownership:

find /data -type f |tee filelist | e2cp -apv -d /dev/hdb1:/mirror

Copy files from a directory on an unmounted partition to a local directory
(Note: this does not recreate the directories in the local filesystem,
yet).  The list of files are read from standard input:

e2cp -pv -s /dev/hdb1:/mirror -d /data2 < filelist

Copy a file to a file system and make the group and ownership root

e2cp -G 0 -O 0 myfile /tmp/boot.img/boot/rootfile


e2mv
----

This program moves or renames files on an ext2fs filesystem.

Usage:

e2mv [-vfs] source1 [... sourceN] destination

-f   Force the operation to remove any existing files
-s   Swap names of the two files
-v   Be verbose

Note: The source files must be explicitly stated.  It does not use regular
expressions, yet.

Examples:

Rename a file:

e2cp -v /tmp/boot.img:/boot/grub/grub.conf /boot/grub/grub.conf.old

If /boot/grub/grub.conf.old already exists and is not a directory, this
will fail.  Use -f to force removal.

Move a file to a different directory (/data/processed):

e2cp -v /dev/hdb1:/data/input0.txt /data/processed

To swap the names of two files:

e2cp -vs /tmp/boot.img:/boot/grub/grub.conf /boot/grub/grub.conf.bk

To swap two files and use a new name for the first one:

e2cp -vs boot.img:/boot/grub/grub.conf /boot/grub/grub.c2 /boot/grub/grub.c1

/boot/grub/grub.conf is now /boot/grub/grub.c1
/boot/grub/grub.c2 is now /boot/grub/grub.conf


e2rm
----

This program removes files and directories on an ext2 filesystem.

Usage:

e2rm [-vr] filesystem:filepath ...fileN

-r  Recursively delete files if a directory name is givne
-v  Be verbose

Note: This program expects to have a full ext2 file specification for each
argument. 

Examples:

Remove a file

e2rm -v boot.img:/boot/grub/grub.c1 /boot/grub/grub.c2

Remove a directory and all the files

e2rm -r boot.img:/boot/grub


e2mkdir
-------

This program creates a directory on an ext2 filesystem.  It behaves similar
to 'mkdir -p'.


Usage:

e2mkdir [-G gid][-O uid][-P mode][-v] filesystem:directory...dirN

-G      Set the default group to gid.
-O      Set the default file owner to uid.
-P      Set the file permissions (ie 755, 666).
-v      Be verbose.

Note: This program expects to have a full ext2 file specification for each
argument. 

Examples:

This creates the directory /boot/grub with on boot.img with the current
user and group ids:

e2mkdir boot.img:/boot/grub

To override the default ownership and permissions:

e2mkdir -O 100 -P 700 /dev/hdb1:/data/backup

e2ln
----

This program is used to create hard links on an ext2 filesystem.

Usage:

e2ln [-vsf] source destination

-f   Force the operation to remove any existing files
-s   Create a symlink
-v   Be verbose

Note: creating symlinks is not operational at this time.

Examples:

This will remove /data/process_status if it exists and isn't already a hard
link to /data/info/status.

e2ln -vf /dev/hdb1:/data/info/status /data/process_status


e2ls
----

This program is used to list files and directories on an ext2 filesystem.

Usage:

e2ls [-acDfilrt][-d dir] file_specification

-a  Show hidden directories
-c  Sort by creation time (must include -t when using -l)
-d dir Open the ext2 filesystem specified by dir
-D  Show deleted files bracketed with ><.
-f  No sorting of the file list
-i  Show the inodes (very useful for the -l option)
-l  Long listing
-r  Reverse the sort order
-t  Sort by time

Note: Files deleted via e2rm sometimes will show up even without the -D
option.  It is being investigated.

Examples:

e2ls -a boot.img:.
e2ls -l /dev/hdb1:/data


e2tail
------

This program implements a basic version of the tail command.

Usage:

e2tail [-n num_lines][-fF][-s sleep_interval] file

-n  The number of lines to display
-f  Output appended data as the file grows.  This is inode dependent, so if
    the file is renamed, it will keep checking it.
-F  Output appended data as the file grows.  This is file name dependent,
    so if the file is renamed, it will check on any new files with the same
    name as the original.  This is useful for watching log files that may
    be rotated out occasionally.  This was requested by a person in the
    computer security field for monitoring 'honeypot' type machines.
-s  The number of seconds to sleep before checking if the file has grown
    while in 'follow' mode.  The default is 1.


Examples:

Check /var/log/messages on /dev/sdc1 every 10 seconds

e2tail -s 10 -F /dev/sdc1:/var/log/messages

