diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2010-11-22 12:37:55 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2010-11-23 09:48:05 +0000 |
commit | f6d3d5677194ae7aaea70d43845341d91907b5ee (patch) | |
tree | 2e50bbad7ec4407127e2a9f869917da36421a3e5 /tools | |
parent | f33d899fd0900b0cfe6dbbb152ce2fcf479bd38c (diff) | |
download | libguestfs-f6d3d5677194ae7aaea70d43845341d91907b5ee.tar.gz libguestfs-f6d3d5677194ae7aaea70d43845341d91907b5ee.tar.xz libguestfs-f6d3d5677194ae7aaea70d43845341d91907b5ee.zip |
ls: Rewrite virt-ls in C.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/Makefile.am | 2 | ||||
-rwxr-xr-x | tools/test-virt-ls.sh | 20 | ||||
-rwxr-xr-x | tools/virt-ls | 263 |
3 files changed, 0 insertions, 285 deletions
diff --git a/tools/Makefile.am b/tools/Makefile.am index 651daf9b..c5131bd8 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -22,7 +22,6 @@ tools = \ edit \ list-filesystems \ list-partitions \ - ls \ make-fs \ rescue \ resize \ @@ -76,7 +75,6 @@ TESTS_ENVIRONMENT = \ TESTS = test-virt-df.sh \ test-virt-list-filesystems.sh \ - test-virt-ls.sh \ test-virt-make-fs.sh \ test-virt-resize.sh \ test-virt-tar.sh diff --git a/tools/test-virt-ls.sh b/tools/test-virt-ls.sh deleted file mode 100755 index a0c9fc53..00000000 --- a/tools/test-virt-ls.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - - -export LANG=C -set -e - -# Just a random UUID. -uuid=868b1447-0ec5-41bf-a2e5-6a77a4c9b66f - -# Read out the test directory using virt-ls. -if [ "$(./virt-ls ../images/fedora.img /bin)" != "ls -test1 -test2 -test3 -test4 -test5 -test6 -test7" ]; then - echo "$0: error: unexpected output from virt-ls" - exit 1 -fi diff --git a/tools/virt-ls b/tools/virt-ls deleted file mode 100755 index 03733f7b..00000000 --- a/tools/virt-ls +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/perl -w -# virt-ls -# Copyright (C) 2009-2010 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -use warnings; -use strict; - -use Sys::Guestfs; -use Sys::Guestfs::Lib qw(open_guest); -use Pod::Usage; -use Getopt::Long; -use File::Temp qw/tempdir/; -use File::Basename; -use Locale::TextDomain 'libguestfs'; - -=encoding utf8 - -=head1 NAME - -virt-ls - List files in a virtual machine - -=head1 SYNOPSIS - - virt-ls [--options] domname directory - - virt-ls [--options] disk.img [disk.img ...] directory - -=head1 DESCRIPTION - -C<virt-ls> is a command line tool to list the names of files in a -directory inside a virtual machine or disk image. - -C<virt-ls> is just a simple wrapper around L<libguestfs(3)> -functionality. For more complex cases you should look at the -L<guestfish(1)> tool. - -C<virt-ls> can be used in one of three modes: simple, long and -recursive. A simple listing is like the ordinary L<ls(1)> command: - - $ virt-ls myguest / - bin - boot - [etc.] - -With the C<-l> (C<--long>) option, C<virt-ls> shows more detail: - - $ virt-ls -l myguest / - total 204 - dr-xr-xr-x. 2 root root 4096 2009-08-25 19:06 bin - dr-xr-xr-x. 5 root root 3072 2009-08-25 19:06 boot - [etc.] - -With the C<-R> (C<--recursive>) option, C<virt-ls> lists the -names of files and directories recursively: - - $ virt-ls -R myguest /tmp - foo - foo/bar - [etc.] - -You I<cannot> combine these options. To do more complicated things, -use L<guestfish(1)>. - -=head1 OPTIONS - -=over 4 - -=cut - -my $help; - -=item B<--help> - -Display brief help. - -=cut - -my $version; - -=item B<--version> - -Display version number and exit. - -=cut - -my $uri; - -=item B<--connect URI> | B<-c URI> - -If using libvirt, connect to the given I<URI>. If omitted, then we -connect to the default libvirt hypervisor. - -If you specify guest block devices directly, then libvirt is not used -at all. - -=cut - -my $format; - -=item B<--format> raw - -Specify the format of disk images given on the command line. If this -is omitted then the format is autodetected from the content of the -disk image. - -If disk images are requested from libvirt, then this program asks -libvirt for this information. In this case, the value of the format -parameter is ignored. - -If working with untrusted raw-format guest disk images, you should -ensure the format is always specified. - -=cut - -my $mode; - -=item B<-l> | B<--long> - -=item B<-R> | B<--recursive> - -Select the mode. With neither of these options, C<virt-ls> -produces a simple, flat list of the files in the named directory. - -C<virt-ls -l> produces a "long listing", which shows more detail (just -like the plain C<ls -l> command). - -C<virt-ls -R> produces a recursive list of files starting at the named -directory. See the documentation for L<guestfs(3)/guestfs_find> -for precise details. - -You cannot combine these options. - -=back - -=cut - -sub set_mode_l -{ - die __"virt-ls: cannot combine -l and -R options\n" if $mode; - $mode = "l"; -} - -sub set_mode_R -{ - die __"virt-ls: cannot combine -l and -R options\n" if $mode; - $mode = "R"; -} - -GetOptions ("help|?" => \$help, - "version" => \$version, - "connect|c=s" => \$uri, - "format=s" => \$format, - "long|l" => \&set_mode_l, - "recursive|R" => \&set_mode_R, - ) or pod2usage (2); -pod2usage (1) if $help; -if ($version) { - my $g = Sys::Guestfs->new (); - my %h = $g->version (); - print "$h{major}.$h{minor}.$h{release}$h{extra}\n"; - exit -} - -pod2usage (__"virt-ls: no image, VM names or directory to list given") - if @ARGV <= 1; - -my $directory = pop @ARGV; - -my $g; -if ($uri) { - $g = open_guest (\@ARGV, address => $uri, format => $format); -} else { - $g = open_guest (\@ARGV, format => $format); -} - -$g->launch (); - -my @roots = $g->inspect_os (); -if (@roots == 0) { - die __x("{prog}: No operating system could be detected inside this disk image.\n\nThis may be because the file is not a disk image, or is not a virtual machine\nimage, or because the OS type is not understood by libguestfs.\n\nIf you feel this is an error, please file a bug report including as much\ninformation about the disk image as possible.\n", - prog => basename ($0)); -} -if (@roots > 1) { - die __x("{prog}: multiboot operating systems are not supported.\n", - prog => basename ($0)) -} -my %fses = $g->inspect_get_mountpoints ($roots[0]); -my @fses = sort { length $a <=> length $b } keys %fses; -foreach (@fses) { - $g->mount_ro ($fses{$_}, $_); -} - -unless ($mode) { - my @r = $g->ls ($directory); - print "$_\n" foreach @r; -} elsif ($mode eq "l") { - print ($g->ll ($directory)); -} else { # $mode eq "R" - my $dir = tempdir (CLEANUP => 1); - $g->find0 ($directory, "$dir/find0"); - open F, "$dir/find0" or die "$dir/find0: $!\n"; - my $r; - my $line; - while (($r = read (F, $line, 1024)) > 0) { - $line =~ tr{\0}{\n}; - print $line; - } - close F; -} - -=head1 SHELL QUOTING - -Libvirt guest names can contain arbitrary characters, some of which -have meaning to the shell such as C<#> and space. You may need to -quote or escape these characters on the command line. See the shell -manual page L<sh(1)> for details. - -=head1 SEE ALSO - -L<guestfs(3)>, -L<guestfish(1)>, -L<virt-cat(1)>, -L<virt-tar(1)>, -L<Sys::Guestfs(3)>, -L<Sys::Guestfs::Lib(3)>, -L<Sys::Virt(3)>, -L<http://libguestfs.org/>. - -=head1 AUTHOR - -Richard W.M. Jones L<http://people.redhat.com/~rjones/> - -=head1 COPYRIGHT - -Copyright (C) 2009 Red Hat Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |