Lib.pm: Use 'file' as replacement for 'zfile'.
[libguestfs.git] / guestfish.pod
index 56d941f..f2255f1 100644 (file)
@@ -49,13 +49,13 @@ Remove C</boot/grub/menu.lst> (in reality not such a great idea):
 =head2 As an interactive shell
 
  $ guestfish
+
  Welcome to guestfish, the libguestfs filesystem interactive shell for
  editing virtual machine filesystems.
+
  Type: 'help' for help with commands
        'quit' to quit the shell
+
  ><fs> help
 
 =head2 As a script interpreter
@@ -66,6 +66,11 @@ Remove C</boot/grub/menu.lst> (in reality not such a great idea):
  sfdisk /dev/sda 0 0 0 ,
  mkfs ext2 /dev/sda1
 
+=head2 Remote control
+
+ eval `guestfish --listen`
+ guestfish --remote cmd
+
 =head1 DESCRIPTION
 
 Guestfish is a shell and command-line tool for examining and modifying
@@ -92,6 +97,13 @@ Displays detailed help on a single command C<cmd>.
 
 Add a block device or virtual machine image to the shell.
 
+=item B<-D> | B<--no-dest-paths>
+
+Don't tab-complete paths on the guest filesystem.  It is useful to be
+able to hit the tab key to complete paths on the guest filesystem, but
+this causes extra "hidden" guestfs calls to be made, so this option is
+here to allow this feature to be disabled.
+
 =item B<-f file> | B<--file file>
 
 Read commands from C<file>.  To write pure guestfish
@@ -118,11 +130,17 @@ Typical usage is either:
 
  guestfish -i /dev/Guests/MyGuest
 
-You cannot use I<-a> or I<-m> in conjunction with this option, and
-options other than I<--ro> might not behave correctly.
+You cannot use I<-a>, I<-m>, I<--listen> or I<--remote> in conjunction
+with this option, and options other than I<--ro> might not behave
+correctly.
 
 See also: L<virt-inspector(1)>.
 
+=item B<--listen>
+
+Fork into the background and listen for remote commands.  See section
+I<REMOTE CONTROL GUESTFISH OVER A SOCKET> below.
+
 =item B<-m dev[:mountpoint]> | B<--mount dev[:mountpoint]>
 
 Mount the named partition or logical volume on the given mountpoint.
@@ -139,6 +157,11 @@ automatically launched.
 Disable autosync.  This is enabled by default.  See the discussion
 of autosync in the L<guestfs(3)> manpage.
 
+=item B<--remote[=pid]>
+
+Send remote commands to C<$GUESTFISH_PID> or C<pid>.  See section
+I<REMOTE CONTROL GUESTFISH OVER A SOCKET> below.
+
 =item B<-r> | B<--ro>
 
 This changes the C<-m> option so that mounts are done read-only
@@ -149,12 +172,13 @@ This changes the C<-m> option so that mounts are done read-only
 Enable very verbose messages.  This is particularly useful if you find
 a bug.
 
-=item B<-D> | B<--no-dest-paths>
+=item B<-V> | B<--version>
 
-Don't tab-complete paths on the guest filesystem.  It is useful to be
-able to hit the tab key to complete paths on the guest filesystem, but
-this causes extra "hidden" guestfs calls to be made, so this option is
-here to allow this feature to be disabled.
+Display the guestfish / libguestfs version number and exit.
+
+=item B<-x>
+
+Echo each command before executing it.
 
 =back
 
@@ -278,6 +302,46 @@ will create a directory C<local> on the host, and then export
 the contents of C</remote> on the mounted filesystem to
 C<local/remote-data.tar.gz>.  (See C<tgz-out>).
 
+=head1 PIPES
+
+Use C<command E<lt>spaceE<gt> | command> to pipe the output of the
+first command (a guestfish command) to the second command (any host
+command).  For example:
+
+ cat /etc/passwd | awk -F: '$3 == 0 { print }'
+
+(where C<cat> is the guestfish cat command, but C<awk> is the host awk
+program).  The above command would list all accounts in the guest
+filesystem which have UID 0, ie. root accounts including backdoors.
+Other examples:
+
+ hexdump /bin/ls | head
+ list-devices | tail -1
+
+The space before the pipe symbol is required, any space after the pipe
+symbol is optional.  Everything after the pipe symbol is just passed
+straight to the host shell, so it can contain redirections, globs and
+anything else that makes sense on the host side.
+
+To use a literal argument which begins with a pipe symbol, you have
+to quote it, eg:
+
+ echo "|"
+
+=head1 HOME DIRECTORIES
+
+If a parameter starts with the character C<~> then the tilde may be
+expanded as a home directory path (either C<~> for the current user's
+home directory, or C<~user> for another user).
+
+Note that home directory expansion happens for users known I<on the
+host>, not in the guest filesystem.
+
+To use a literal argument which begins with a tilde, you have to quote
+it, eg:
+
+ echo "~"
+
 =head1 EXIT ON ERROR BEHAVIOUR
 
 By default, guestfish will ignore any errors when in interactive mode
@@ -289,19 +353,62 @@ If you prefix a command with a I<-> character, then that command will
 not cause guestfish to exit, even if that (one) command returns an
 error.
 
-=head1 COMMANDS
+=head1 REMOTE CONTROL GUESTFISH OVER A SOCKET
 
-=head2 help
+Guestfish can be remote-controlled over a socket.  This is useful
+particularly in shell scripts where you want to make several different
+changes to a filesystem, but you don't want the overhead of starting
+up a guestfish process each time.
 
- help
- help cmd
+Start a guestfish server process using:
 
-Without any parameter, this lists all commands.  With a C<cmd>
-parameter, this displays detailed help for a command.
+ eval `guestfish --listen`
 
-=head2 quit | exit
+and then send it commands by doing:
 
-This exits guestfish.  You can also use C<^D> key.
+ guestfish --remote cmd [...]
+
+To cause the server to exit, send it the exit command:
+
+ guestfish --remote exit
+
+Note that the server will normally exit if there is an error in a
+command.  You can change this in the usual way.  See section I<EXIT ON
+ERROR BEHAVIOUR>.
+
+=head2 CONTROLLING MULTIPLE GUESTFISH PROCESSES
+
+The C<eval> statement sets the environment variable C<$GUESTFISH_PID>,
+which is how the C<--remote> option knows where to send the commands.
+You can have several guestfish listener processes running using:
+
+ eval `guestfish --listen`
+ pid1=$GUESTFISH_PID
+ eval `guestfish --listen`
+ pid2=$GUESTFISH_PID
+ ...
+ guestfish --remote=$pid1 cmd
+ guestfish --remote=$pid2 cmd
+
+=head2 STANDARD OUTPUT DURING REMOTE CONTROL
+
+Because of limitations in the C<eval> statement, stdout from the
+listener is currently redirected to C</dev/null>.
+
+Stderr is unchanged.
+
+=head2 REMOTE CONTROL DETAILS
+
+Remote control happens over a Unix domain socket called
+C</tmp/.guestfish-$UID/socket-$PID>, where C<$UID> is the effective
+user ID of the process, and C<$PID> is the process ID of the server.
+
+Guestfish client and server versions must match exactly.
+
+=head1 GUESTFISH COMMANDS
+
+The commands in this section are guestfish convenience commands, in
+other words, they are not part of the L<guestfs(3)> API.
 
 =head2 alloc | allocate
 
@@ -354,6 +461,23 @@ editors.
 NOTE: This will not work reliably for large files
 (> 2 MB) or binary files containing \0 bytes.
 
+=head2 glob
+
+ glob command args...
+
+Expand wildcards in any paths in the args list, and run C<command>
+repeatedly on each matching path.
+
+See section WILDCARDS AND GLOBBING.
+
+=head2 help
+
+ help
+ help cmd
+
+Without any parameter, this lists all commands.  With a C<cmd>
+parameter, this displays detailed help for a command.
+
 =head2 lcd
 
  lcd directory
@@ -363,14 +487,40 @@ itself.
 
 Note that C<!cd> won't do what you might expect.
 
-=head2 glob
+=head2 more | less
 
- glob command args...
+ more filename
 
-Expand wildcards in any paths in the args list, and run C<command>
-repeatedly on each matching path.
+ less filename
 
-See section WILDCARDS AND GLOBBING.
+This is used to view a file.
+
+The default viewer is C<$PAGER>.  However if you use the alternate
+command C<less> you will get the C<less> command specifically.
+
+NOTE: This will not work reliably for large files
+(> 2 MB) or binary files containing \0 bytes.
+
+=head2 quit | exit
+
+This exits guestfish.  You can also use C<^D> key.
+
+=head2 reopen
+
+ reopen
+
+Close and reopen the libguestfs handle.  It is not necessary to use
+this normally, because the handle is closed properly when guestfish
+exits.  However this is occasionally useful for testing.
+
+=head2 time
+
+ time command args...
+
+Run the command as usual, but print the elapsed time afterwards.  This
+can be useful for benchmarking operations.
+
+=head1 COMMANDS
 
 @ACTIONS@
 
@@ -378,11 +528,38 @@ See section WILDCARDS AND GLOBBING.
 
 =over 4
 
+=item EDITOR
+
+The C<edit> command uses C<$EDITOR> as the editor.  If not
+set, it uses C<vi>.
+
+=item GUESTFISH_PID
+
+Used with the I<--remote> option to specify the remote guestfish
+process to control.  See section I<REMOTE CONTROL GUESTFISH OVER A
+SOCKET>.
+
+=item HOME
+
+If compiled with GNU readline support, then the command history
+is saved in C<$HOME/.guestfish>
+
+=item LIBGUESTFS_APPEND
+
+Pass additional options to the guest kernel.
+
 =item LIBGUESTFS_DEBUG
 
 Set C<LIBGUESTFS_DEBUG=1> to enable verbose messages.  This has the
 same effect as using the B<-v> option.
 
+=item LIBGUESTFS_MEMSIZE
+
+Set the memory allocated to the qemu process, in megabytes.  For
+example:
+
+ LIBGUESTFS_MEMSIZE=700
+
 =item LIBGUESTFS_PATH
 
 Set the path that guestfish uses to search for kernel and initrd.img.
@@ -394,19 +571,20 @@ Set the default qemu binary that libguestfs uses.  If not set, then
 the qemu which was found at compile time by the configure script is
 used.
 
-=item LIBGUESTFS_APPEND
+=item PAGER
 
-Pass additional options to the guest kernel.
+The C<more> command uses C<$PAGER> as the pager.  If not
+set, it uses C<more>.
 
-=item HOME
+=item TMPDIR
 
-If compiled with GNU readline support, then the command history
-is saved in C<$HOME/.guestfish>
+Location of temporary directory, defaults to C</tmp>.
 
-=item EDITOR
-
-The C<edit> command uses C<$EDITOR> as the editor.  If not
-set, it uses C<vi>.
+If libguestfs was compiled to use the supermin appliance then each
+handle will require rather a large amount of space in this directory
+for short periods of time (~ 80 MB).  You can use C<$TMPDIR> to
+configure another directory to use in case C</tmp> is not large
+enough.
 
 =back