$ uname -a
CYGWIN_NT-10.0-19044 titan 3.3.5-341.x86_64 2022-05-13 12:27 UTC x86_64 Cygwin
####
#!/usr/bin/env perl
use strict;
use warnings;
use autodie ':all';
use constant {
OLD => 0,
NEW => 1,
};
print "OS: $^O; Perl: $^V\n";
my @filenames = 'a' .. 'd';
my %perms = (
a => [0644, 0644],
b => [0644, 0755],
c => [0644, 0440],
d => [0644, 07644],
);
print "\n*** Initial permissions (visual check):\n";
list_perms(@filenames);
print "\n*** Initial permissions (program check):\n";
check_perms(\@filenames, \%perms, OLD);
change_perms(\@filenames, \%perms, NEW);
print "\n*** Modified permissions (visual check):\n";
list_perms(@filenames);
print "\n*** Modified permissions (program check):\n";
check_perms(\@filenames, \%perms, NEW);
change_perms(\@filenames, \%perms, OLD);
print "\n*** Restored permissions (visual check):\n";
list_perms(@filenames);
print "\n*** Restored permissions (program check):\n";
check_perms(\@filenames, \%perms, OLD);
sub list_perms {
my (@files) = @_;
my @cmd_list = (ls => '-l', @files);
CORE::system {$cmd_list[0]} @cmd_list;
return;
}
sub check_perms {
my ($files, $perms, $oldnew) = @_;
for my $file (@$files) {
my $perm = (stat $file)[2] & 07777;
my $expected
= sprintf('%#5o', $perms->{$file}[$oldnew]);
print
"File: '$file'; Perm: ",
sprintf('%#5o', $perm),
'; Check: ',
(
$perm == $perms->{$file}[$oldnew]
? 'OK' : "WRONG (expected: $expected)"
),
"\n";
}
return;
}
sub change_perms {
my ($files, $perms, $oldnew) = @_;
for my $file (@$files) {
chmod $perms->{$file}[$oldnew], $file;
}
return;
}
####
$ ./perm_tasks.pl
OS: cygwin; Perl: v5.36.0
*** Initial permissions (visual check):
-rw-r--r-- 1 ken None 0 Sep 4 02:07 a
-rw-r--r-- 1 ken None 0 Sep 4 02:07 b
-rw-r--r-- 1 ken None 0 Sep 4 02:07 c
-rw-r--r-- 1 ken None 0 Sep 4 02:16 d
*** Initial permissions (program check):
File: 'a'; Perm: 0644; Check: OK
File: 'b'; Perm: 0644; Check: OK
File: 'c'; Perm: 0644; Check: OK
File: 'd'; Perm: 0644; Check: OK
*** Modified permissions (visual check):
-rw-r--r-- 1 ken None 0 Sep 4 02:07 a
-rwxr-xr-x 1 ken None 0 Sep 4 02:07 b
-r--r----- 1 ken None 0 Sep 4 02:07 c
-rwSr-Sr-T 1 ken None 0 Sep 4 02:16 d
*** Modified permissions (program check):
File: 'a'; Perm: 0644; Check: OK
File: 'b'; Perm: 0755; Check: OK
File: 'c'; Perm: 0440; Check: OK
File: 'd'; Perm: 07644; Check: OK
*** Restored permissions (visual check):
-rw-r--r-- 1 ken None 0 Sep 4 02:07 a
-rw-r--r-- 1 ken None 0 Sep 4 02:07 b
-rw-r--r-- 1 ken None 0 Sep 4 02:07 c
-rw-r--r-- 1 ken None 0 Sep 4 02:16 d
*** Restored permissions (program check):
File: 'a'; Perm: 0644; Check: OK
File: 'b'; Perm: 0644; Check: OK
File: 'c'; Perm: 0644; Check: OK
File: 'd'; Perm: 0644; Check: OK
####
Cygwin MSWin
============================= ====================
/cygdrive/c C:\
/cygdrive/d D:\
/cygdrive/c/Users/ken C:\Users\ken
/cygdrive/c/cygwin64 C:\cygwin64
/ C:\cygwin64
/cygdrive/c/cygwin64/home/ken C:\cygwin64\home\ken
/home/ken C:\cygwin64\home\ken