koffi@bsu-cs.bsu.edu (There will be enough room in HEAVENS for all of US) (09/07/90)
Hello Cybersapce, I am looking for a shell script that could do the following task: 1) Create a file of users (login name followed by the real life name) who haven't logged on the system since the year 1988. Koffi
lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (09/07/90)
In article <11722@bsu-cs.bsu.edu> koffi@bsu-cs.bsu.edu (There will be enough room in HEAVENS for all of US) writes: : I am looking for a shell script that could do the following task: : : 1) Create a file of users (login name followed by the real life name) : who haven't logged on the system since the year 1988. Mmm. Since it's cross-posted to comp.lang.perl, I presume a solution in Perl would be acceptable. This one works on my machines. As you can see, there's a lot of other information that you could print out too. #!/usr/bin/perl $lastlog_t = "L a8 a16"; # Your struct lastlog may differ $LEN = length(pack($lastlog_t, 0, '','')); open(LASTLOG, "/usr/adm/lastlog"); while (($login, $pass, $uid, $gid, $j, $j, $gcos) = getpwent) { seek(LASTLOG, $uid * $LEN, 0); read(LASTLOG, $lastlog, $LEN); ($time, $line, $host) = unpack($lastlog_t, $lastlog); ($sec,$min,$hour,$mday,$mon,$year) = localtime($time); if ($year <= 88) { ($fullname) = split(/,/,$gcos); # BSDism here print "$login $fullname\n"; } } It can probably also be done on some machines with finger -s -m `awk -F: '{print $1}' /etc/passwd` | \ sed -n -e '/:..>/d' -e '/1990>/d' -e '/1989>/d' -e '/>/p' but that takes about 30 seconds on my machine. The Perl script takes about 2 seconds. Larry Wall lwall@jpl-devvax.jpl.nasa.gov