Add 'command' and 'command-lines'. Fix args freeing in Perl bindings.
[libguestfs.git] / guestfish-actions.pod
index 00911db..2d0a045 100644 (file)
@@ -85,28 +85,28 @@ integers:
 
 =over 4
 
-=item 1 C<AUG_SAVE_BACKUP>
+=item C<AUG_SAVE_BACKUP> = 1
 
 Keep the original file with a C<.augsave> extension.
 
-=item 2 C<AUG_SAVE_NEWFILE>
+=item C<AUG_SAVE_NEWFILE> = 2
 
 Save changes into a file with extension C<.augnew>, and
 do not overwrite original.  Overrides C<AUG_SAVE_BACKUP>.
 
-=item 4 C<AUG_TYPE_CHECK>
+=item C<AUG_TYPE_CHECK> = 4
 
 Typecheck lenses (can be expensive).
 
-=item 8 C<AUG_NO_STDINC>
+=item C<AUG_NO_STDINC> = 8
 
 Do not use standard load path for modules.
 
-=item 16 C<AUG_SAVE_NOOP>
+=item C<AUG_SAVE_NOOP> = 16
 
 Make save a no-op, just record what would have been changed.
 
-=item 32 C<AUG_NO_LOAD>
+=item C<AUG_NO_LOAD> = 32
 
 Do not load the tree in C<aug_init>.
 
@@ -137,6 +137,13 @@ Load files into the tree.
 See C<aug_load> in the Augeas documentation for the full gory
 details.
 
+=head2 aug-ls
+
+ aug-ls path
+
+This is just a shortcut for listing C<aug_match>
+C<path/*> and sorting the resulting nodes into alphabetical order.
+
 =head2 aug-match
 
  aug-match path
@@ -186,6 +193,59 @@ Note that this function cannot correctly handle binary files
 as end of string).  For those you need to use the C<read_file>
 function which has a more complex interface.
 
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+
+=head2 chmod
+
+ chmod mode path
+
+Change the mode (permissions) of C<path> to C<mode>.  Only
+numeric modes are supported.
+
+=head2 chown
+
+ chown owner group path
+
+Change the file owner to C<owner> and group to C<group>.
+
+Only numeric uid and gid are supported.  If you want to use
+names, you will need to locate and parse the password file
+yourself (Augeas support makes this relatively easy).
+
+=head2 command
+
+ command arguments,...
+
+This calls runs a command from the guest filesystem.  The
+filesystem must be mounted, and must contain a compatible
+operating system (ie. something Linux, with the same
+or compatible processor architecture).
+
+The single parameter is an argv-style list of arguments.
+The first element is the name of the program to run.
+Subsequent elements are parameters.  The list must be
+non-empty (ie. must contain a program name).
+
+The C<$PATH> environment variable will contain at least
+C</usr/bin> and C</bin>.  If you require a program from
+another location, you should provide the full path in the
+first parameter.
+
+Shared libraries and data files required by the program
+must be available on filesystems which are mounted in the
+correct places.  It is the caller's responsibility to ensure
+all filesystems that are needed are mounted at the right
+locations.
+
+=head2 command-lines
+
+ command-lines arguments,...
+
+This is the same as C<command>, but splits the
+result into a list of lines.
+
 =head2 config
 
  config qemuparam qemuvalue
@@ -199,6 +259,27 @@ The first character of C<param> string must be a C<-> (dash).
 
 C<value> can be NULL.
 
+=head2 exists
+
+ exists path
+
+This returns C<true> if and only if there is a file, directory
+(or anything) with the given C<path> name.
+
+See also C<is_file>, C<is_dir>, C<stat>.
+
+=head2 file
+
+ file path
+
+This call uses the standard L<file(1)> command to determine
+the type or contents of the file.  This also works on devices,
+for example to find out whether a partition contains a filesystem.
+
+The exact command which runs is C<file -bsL path>.  Note in
+particular that the filename is not prepended to the output
+(the C<-b> option).
+
 =head2 get-autosync
 
  get-autosync
@@ -220,6 +301,26 @@ return the default path.
 
 This returns the verbose messages flag.
 
+=head2 is-dir
+
+ is-dir path
+
+This returns C<true> if and only if there is a directory
+with the given C<path> name.  Note that it returns false for
+other objects like files.
+
+See also C<stat>.
+
+=head2 is-file
+
+ is-file path
+
+This returns C<true> if and only if there is a file
+with the given C<path> name.  Note that it returns false for
+other objects like directories.
+
+See also C<stat>.
+
 =head2 kill-subprocess
 
  kill-subprocess
@@ -276,6 +377,23 @@ hidden files are shown.
 This command is mostly useful for interactive sessions.  Programs
 should probably use C<readdir> instead.
 
+=head2 lvcreate
+
+ lvcreate logvol volgroup mbytes
+
+This creates an LVM volume group called C<logvol>
+on the volume group C<volgroup>, with C<size> megabytes.
+
+=head2 lvm-remove-all
+
+ lvm-remove-all
+
+This command removes all LVM logical volumes, volume groups
+and physical volumes.
+
+B<This command is dangerous.  Without careful use you
+can easily destroy all your data>.
+
 =head2 lvs
 
  lvs
@@ -295,6 +413,27 @@ See also C<lvs_full>.
 List all the logical volumes detected.  This is the equivalent
 of the L<lvs(8)> command.  The "full" version includes all fields.
 
+=head2 mkdir
+
+ mkdir path
+
+Create a directory named C<path>.
+
+=head2 mkdir-p
+
+ mkdir-p path
+
+Create a directory named C<path>, creating any parent directories
+as necessary.  This is like the C<mkdir -p> shell command.
+
+=head2 mkfs
+
+ mkfs fstype device
+
+This creates a filesystem on C<device> (usually a partition
+of LVM logical volume).  The filesystem type is C<fstype>, for
+example C<ext3>.
+
 =head2 mount
 
  mount device mountpoint
@@ -316,6 +455,23 @@ on the underlying device.
 The filesystem options C<sync> and C<noatime> are set with this
 call, in order to improve reliability.
 
+=head2 mounts
+
+ mounts
+
+This returns the list of currently mounted filesystems.  It returns
+the list of devices (eg. C</dev/sda1>, C</dev/VG/LV>).
+
+Some internal mounts are not shown.
+
+=head2 pvcreate
+
+ pvcreate device
+
+This creates an LVM physical volume on the named C<device>,
+where C<device> should usually be a partition name such
+as C</dev/sda1>.
+
 =head2 pvs
 
  pvs
@@ -349,6 +505,26 @@ Note that this function cannot correctly handle binary files
 as end of line).  For those you need to use the C<read_file>
 function which has a more complex interface.
 
+=head2 rm
+
+ rm path
+
+Remove the single file C<path>.
+
+=head2 rm-rf
+
+ rm-rf path
+
+Remove the file or directory C<path>, recursively removing the
+contents if its a directory.  This is like the C<rm -rf> shell
+command.
+
+=head2 rmdir
+
+ rmdir path
+
+Remove the single directory C<path>.
+
 =head2 set-autosync | autosync
 
  set-autosync true|false
@@ -380,6 +556,33 @@ If C<verbose> is true, this turns on verbose messages (to C<stderr>).
 Verbose messages are disabled unless the environment variable
 C<LIBGUESTFS_DEBUG> is defined and set to C<1>.
 
+=head2 sfdisk
+
+ sfdisk device cyls heads sectors lines,...
+
+This is a direct interface to the L<sfdisk(8)> program for creating
+partitions on block devices.
+
+C<device> should be a block device, for example C</dev/sda>.
+
+C<cyls>, C<heads> and C<sectors> are the number of cylinders, heads
+and sectors on the device, which are passed directly to sfdisk as
+the I<-C>, I<-H> and I<-S> parameters.  If you pass C<0> for any
+of these, then the corresponding parameter is omitted.  Usually for
+'large' disks, you can just pass C<0> for these, but for small
+(floppy-sized) disks, sfdisk (or rather, the kernel) cannot work
+out the right geometry and you will need to tell it.
+
+C<lines> is a list of lines that we feed to C<sfdisk>.  For more
+information refer to the L<sfdisk(8)> manpage.
+
+To create a single partition occupying the whole disk, you would
+pass C<lines> as a single element list, when the single element being
+the string C<,> (comma).
+
+B<This command is dangerous.  Without careful use you
+can easily destroy all your data>.
+
 =head2 sync
 
  sync
@@ -398,6 +601,29 @@ Touch acts like the L<touch(1)> command.  It can be used to
 update the timestamps on a file, or, if the file does not exist,
 to create a new zero-length file.
 
+=head2 umount | unmount
+
+ umount pathordevice
+
+This unmounts the given filesystem.  The filesystem may be
+specified either by its mountpoint (path) or the device which
+contains the filesystem.
+
+=head2 umount-all | unmount-all
+
+ umount-all
+
+This unmounts all mounted filesystems.
+
+Some internal mounts are not unmounted by this call.
+
+=head2 vgcreate
+
+ vgcreate volgroup physvols,...
+
+This creates an LVM volume group called C<volgroup>
+from the non-empty list of physical volumes C<physvols>.
+
 =head2 vgs
 
  vgs
@@ -417,3 +643,19 @@ See also C<vgs_full>.
 List all the volumes groups detected.  This is the equivalent
 of the L<vgs(8)> command.  The "full" version includes all fields.
 
+=head2 write-file
+
+ write-file path content size
+
+This call creates a file called C<path>.  The contents of the
+file is the string C<content> (which can contain any 8 bit data),
+with length C<size>.
+
+As a special case, if C<size> is C<0>
+then the length is calculated using C<strlen> (so in this case
+the content cannot contain embedded ASCII NULs).
+
+Because of the message protocol, there is a transfer limit 
+of somewhere between 2MB and 4MB.  To transfer large files you should use
+FTP.
+