【发布时间】:2015-05-14 15:03:11
【问题描述】:
我在 Bash shell 脚本中有一个函数,该函数在脚本启动时被调用。该函数对数据文件执行排序,然后调用 Perl 脚本检查是否需要执行脚本和数据文件的备份,如果需要,Perl 脚本进行备份,然后压缩备份目录中的所有备份。当我运行 Bash 脚本时,Bash 和 Perl 脚本工作正常,但是其他用户收到从 Perl 脚本返回的错误,指出他们没有写入文件的权限。 如何提升 Perl 脚本的权限,以便任何用户都可以写入目录?我有要写入文件的目录,所有用户都具有读写权限,但用户在打开 Bash 脚本时仍然会收到此错误。
tar:/absolute/path/to/file/location/filename.tar.gz:无法>打开:权限>拒绝 tar:错误不可恢复:现在退出
这是 Bash 脚本中调用 Perl 脚本的函数
sourcefile(){
# sorts the script source file in alphabetical order each time the script runs.
sort /absolute/path/to/data-file.txt -o /absolute/path/to/data-file.txt
#
# Calls a perl script to run backups of the script and data files.
/absolute/path/to/location/./scrpt_maint.prl
#
}
这是创建备份的 Perl 脚本
#!/usr/bin/perl
##
use strict;
use warnings;
##
use File::stat;
use Time::localtime;
use Time::Local;
use File::Copy;
##
my $source = "/PATH/PATH/PATH/backup/FILENAME.sh.bak";
my $today = time;
my $modtime = (stat($source)->mtime);
my $interval = 86400; #- =24 hours in seconds
my $delta = ($today - $modtime);
#
# my $interval = 30; #- =30 second intervals for testing
#
my $SRC_SCRIPTS = "/PATH/PATH/PATH/";
my $TARGET_SCPTS = "/PATH/PATH/PATH/backup/";
#
###############################
if ( $delta >= $interval ) {
&backup;
system "tar -czf /PATH/PATH/PATH/backup/compressed/FILENAME.tar.gz -C / /PATH/PATH/PATH/backup/compressed";
}
#
sub backup {
#
opendir(my $SCRIPTS, $SRC_SCRIPTS ) || die "can't opendir $SRC_SCRIPTS: $!" ;
my @SCRIPTS = readdir($SCRIPTS);
foreach my $t (@SCRIPTS)
{
if( -f "$SRC_SCRIPTS/$t" ) {
copy "$SRC_SCRIPTS/$t", "$TARGET_SCPTS/$t.bak" || warn "Copy of $t to $TARGET_SCPTS failed: $!";
}
}
}
#
exit;
我绝不是 Shell 或 Perl 专家,所以如果这些都是草率或不是最佳实践,这就是原因。我不是管理员,也没有对 linux 服务器的 root 访问权限。我在 Red Hat Enterprise Linux AS 第 4 版中写这篇文章
谢谢
【问题讨论】:
-
目录结构
/PATH/PATH/PATH/backup/compressed/FILENAME.tar.gz的权限是什么?因为这里发生的事情是您的脚本正在使用tar命令,这意味着您的 perl 很好。 -
drwxrw-rw- 2 USERNAME ncs 4096 May 14 12:46 压缩
-
好的。尝试在该目录上设置
a+x。我认为这将是问题所在。 -
对不起 Sobrique,我看错了你的问题。 Filename.tar.gz 的权限是 -rw-r--r-- 我只是将它们修改为 -rw-rw-rw-。我曾尝试将写入权限添加到/compressed/文件夹,以为文件夹中的文件会继承权限,不是这样吗?
-
Sobrique,我在文件夹上添加了 a+x,在其中的所有文件上添加了 a+w,脚本运行没有错误,备份工作正常!谢谢!!
标签: perl permissions