#!/usr/bin/perl # http://search.cpan.org/src/DWILSON/Linux-Ext2-FileAttributes-0.01/lib/Linux/Ext2/FileAttributes.pm use strict; use warnings; use constant EXT2_IOC_GETFLAGS => 0x80046601; use constant EXT2_IOC_SETFLAGS => 0x40046602; use constant EXT2_SECRM_FL => 1; use constant EXT2_UNRM_FL => 2; use constant EXT2_COMPR_FL => 4; use constant EXT2_SYNC_FL => 8; use constant EXT2_IMMUTABLE_FL => 16; use constant EXT2_APPEND_FL => 32; use constant EXT2_NODUMP_FL => 64; # include/linux/fs.h use constant FS_SECRM_FL => 0x00000001; # Secure deletion use constant FS_UNRM_FL => 0x00000002; # Undelete use constant FS_COMPR_FL => 0x00000004; # Compress file use constant FS_SYNC_FL => 0x00000008; # Synchronous updates use constant FS_IMMUTABLE_FL => 0x00000010; # Immutable file use constant FS_APPEND_FL => 0x00000020; # writes to file may only append use constant FS_NODUMP_FL => 0x00000040; # do not dump file use constant FS_NOATIME_FL => 0x00000080; # do not update atime print "immutable? " . &is_immutable($ARGV[0]) . "\n"; sub is_immutable { my $file = shift; open my $fh, $file or die $!; my $res = pack 'i', 0; ioctl($fh, EXT2_IOC_GETFLAGS, $res); $res = unpack 'i', $res; return $res & EXT2_IMMUTABLE_FL; }