Rex::Commands::Fs - File system commands
With this module you can do file system tasks like creating directories, deleting or moving files, and more.
my @files = list_files "/etc"; unlink("/tmp/file"); rmdir("/tmp"); mkdir("/tmp"); my %stat = stat("/etc/passwd"); my $link = readlink("/path/to/a/link"); symlink("/source", "/dest"); rename("oldname", "newname"); chdir("/tmp"); is_file("/etc/passwd"); is_dir("/etc"); is_writeable("/tmp"); is_writable("/tmp"); chmod 755, "/tmp"; chown "user", "/tmp"; chgrp "group", "/tmp";
These commands are supposed to change the contents of the file system.
This function will create a symbolic link from $from to $to.
$from
$to
task "symlink", "server01", sub { symlink("/var/www/versions/1.0.0", "/var/www/html"); };
ln is an alias for symlink
ln
symlink
This function will remove the given $file.
$file
task "unlink", "server01", sub { unlink("/tmp/testfile"); };
This is an alias for unlink.
unlink
This function will remove the given directory.
task "rmdir", "server01", sub { rmdir("/tmp"); };
With Rex-0.45 and newer, please use the file resource instead.
task "prepare", sub { file "/tmp", ensure => "absent"; };
This function will create a new directory.
The following options are supported:
owner
group
mode
on_change
task "prepare", sub { file "/tmp", ensure => "directory", owner => "root", group => "root", mode => 1777; };
Direct usage:
task "mkdir", "server01", sub { mkdir "/tmp"; mkdir "/tmp", owner => "root", group => "root", mode => 1777; };
Change the owner of a file or a directory.
chown "www-data", "/var/www/html"; chown "www-data", "/var/www/html", recursive => 1;
This command will not be reported.
If you want to use reports, please use the file resource instead.
Change the group of a file or a directory.
chgrp "nogroup", "/var/www/html"; chgrp "nogroup", "/var/www/html", recursive => 1;
Change the permissions of a file or a directory.
chmod 755, "/var/www/html"; chmod 755, "/var/www/html", recursive => 1;
This function will rename $old to $new. Will return 1 on success and 0 on failure.
$old
$new
task "rename", "server01", sub { rename("/tmp/old", "/tmp/new"); };
mv is an alias for rename.
mv
rename
cp will copy $source to $destination recursively.
cp
$source
$destination
task "cp", "server01", sub { cp("/var/www", "/var/www.old"); };
These commands should not change the contents of the file system.
This function lists all entries (files, directories, ...) in a given directory and returns them as an array.
task "ls-etc", "server01", sub { my @tmp_files = grep { /\.tmp$/ } list_files("/etc"); };
Just an alias for list_files.
list_files
This function will return a hash with the following information about a file or directory:
task "stat", "server01", sub { my %file_stat = stat("/etc/passwd"); };
This function tests if $path is a file. Returns 1 if true, 0 if false.
$path
task "isfile", "server01", sub { if( is_file("/etc/passwd") ) { say "it is a file."; } else { say "hm, this is not a file."; } };
This function tests if $path is a directory. Returns 1 if true, 0 if false.
task "isdir", "server01", sub { if( is_dir("/etc") ) { say "it is a directory."; } else { say "hm, this is not a directory."; } };
This function tests if $path is a symbolic link. Returns 1 if true, 0 if false.
task "issym", "server01", sub { if( is_symlink("/etc/foo.txt") ) { say "it is a symlink."; } else { say "hm, this is not a symlink."; } };
This function tests if $path is readable. It returns 1 if true, 0 if false.
task "readable", "server01", sub { if( is_readable("/etc/passwd") ) { say "passwd is readable"; } else { say "not readable."; } };
This function tests if $path is writable. It returns 1 if true, 0 if false.
task "writable", "server01", sub { if( is_writable("/etc/passwd") ) { say "passwd is writable"; } else { say "not writable."; } };
This is only an alias for is_writable.
is_writable
If $link is a symbolic link, returns the path it resolves to, and die()s otherwise.
$link
die()
task "islink", "server01", sub { my $link; eval { $link = readlink("/tmp/testlink"); }; say "this is a link" if($link); };
This function will change the working directory to $newdir. This function currently works only locally.
$newdir
task "chdir", "server01", sub { chdir("/tmp"); };
This is an alias of chdir.
chdir
This function returns a hash reference which reflects the output of df.
df
task "df", "server01", sub { my $df = df(); my $df_on_sda1 = df("/dev/sda1"); };
Returns the disk usage of $path.
task "du", "server01", sub { say "size of /var/www: " . du("/var/www"); };
Mount devices.
task "mount", "server01", sub { mount "/dev/sda5", "/tmp"; mount "/dev/sda6", "/mnt/sda6", ensure => "present", type => "ext3", options => [qw/noatime async/], on_change => sub { say "device mounted"; }; # # mount persistent with entry in /etc/fstab mount "/dev/sda6", "/mnt/sda6", ensure => "persistent", type => "ext3", options => [qw/noatime async/], on_change => sub { say "device mounted"; }; # to umount a device mount "/dev/sda6", "/mnt/sda6", ensure => "absent"; };
In order to be more aligned with mount terminology, the previously used fs option has been deprecated in favor of the type option. The fs option is still supported and works as previously, but Rex prints a warning if it is being used. There's also a warning if both fs and type options are specified, and in this case type will be used.
mount
fs
type
Unmount device.
task "umount", "server01", sub { umount "/tmp"; };
Returns the list of filename expansions for $glob as Perl's built-in glob would do.
$glob
task "glob", "server1", sub { my @files_with_p = grep { is_file($_) } glob("/etc/p*"); };
To install Rex, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Rex
CPAN shell
perl -MCPAN -e shell install Rex
For more information on module installation, please visit the detailed CPAN module installation guide.