The UNIX and Linux Forums  

Go Back   A UNIX és Linux Forums > Top Fórumok > Shell programozás és Scripting
.
google unix.com



Shell programozás és Scripting Post kérdések KSH, CSH, SH, Bash, Perl, PHP, SED, AWK ÉS EGYÉB shell szkriptek és shell script nyelvek itt.

Több, UNIX és Linux fórum témák Ön által talált Hasznos
Szál Thread Starter Fórum Válaszok Utolsó hozzászólás
su? Ki bejelentkezve Első? varungupta A UNIX a fejlett és szakértői Felhasználók 2 01-24-2008 04:10 PM
kijelentkezett felhasználók roshni Post Itt léphet kapcsolatba Weblap adminisztrátorok és a moderátorok 1 07-06-2007 04:02 AM
Finding utoljára bejelentkezett felhasználók jyoung A UNIX a dummies Kérdések és válaszok 11 04-20-2005 03:03 PM
tudod, aki bejelentkezett, és kijelentkezett azok időzítések vkandati A UNIX a dummies Kérdések és válaszok 3 03-09-2005 10:04 AM
Felhasználó jelentkezett be? Provo A UNIX a dummies Kérdések és válaszok 1 12-07-2001 05:41 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 04-23-2007
ughosting ughosting is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2007
Hozzászólások: 3
Utoljára bejelentkezve

Munkavállalás AIX (tehát nincs date-d)

Hogyan lehet megjeleníteni az összes felhasználó, aki nem jelentkezett be több mint 40 napig?

Egy kis gyors script lenne, én mindig a parancsfájlok hosszú végrehajtani, még mielőtt elkészült.

Nagyon köszönöm!
  #2 (permalink)  
Old 04-25-2007
Jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.769
Régi C kódot ellenőrzi a / var / adm / wtmp - mint az utolsó parancs. Lehet compile / run be a mezőbe, ha a / var / adm / wtmp létezik, és ez nem a / var / adm / wtmpx - más formában.

Kód:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <utmp.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <time.h>
#include <errno.h>

/* error macro */
#define ck(x) if ((x)==NULL) \
{barf("Memory/File error");}

/* limits */
#define USER_NAME_LEN 8
#define MAX_USERS 2000

/* array of usernames and times */
typedef struct
{
	char user[12];
	time_t logtime;
} ulog_t;
ulog_t array[MAX_USERS]={ {0x0}, 0 };

/* exit point for errors */
void barf(const char *msg)
{
	perror(msg);
	exit(EXIT_FAILURE);	
}

/* return size of file in bytes */
size_t filesize(const int fd)
{
	struct stat st;

	if(fstat(fd, &st) == (-1) )	
		barf("Cannot stat file");			

	return st.st_size;
}
/* return time_t seconds for ndays in the past */
time_t days_ago(const time_t ndays)
{
	time_t then=0;

    errno=0;
    then=time(NULL);
	if(then == (time_t)-1 && errno)	
		barf("");		
	then-=(86400 * ndays);
			
	return then;
}

/* map the utmp file into memory */
void *mappit(FILE *u, size_t ulen)
{
	void *addr=mmap((void *)0, ulen, PROT_READ, MAP_PRIVATE, fileno(u),0);

	if (addr==MAP_FAILED)
		barf("mmap failed");		
	
	return addr;
}
/* unmap file */
int unmappit(void *addr, size_t len)
{
	if( munmap(addr,len)==(-1))
		return 1;
		
	return 0;	
}
/* find user in array, change time or (if not found) add to array */
void find(const struct utmp *src, int *cnt)
{
	int i=0;
	int found=0;
	int limit=*cnt;	
	char tmp[10]={0x0};

	snprintf(tmp, USER_NAME_LEN+1, "%s",src->ut_user);
	if(strlen(tmp)> 0 )
	{
		for(i=0; !found && i < limit; i++)
		{
			if(strncmp(tmp, array[i].user, USER_NAME_LEN)==0)
			{
				found=1;
				if(src->ut_time > array[i].logtime)
					array[i].logtime=src->ut_time;					
			}
		}		
		if(found==0)
		{
			memcpy(array[limit].user, tmp, USER_NAME_LEN);			
			array[limit].logtime=src->ut_time;			
			limit++;
		}			
		*cnt=limit;
    }
}

void setup_array(const void *addr, int *arrlen, const size_t ulen)
{
	
	int i=0;
	int max=ulen/sizeof(struct utmp);
	int cnt=0;
	const struct utmp *f=(const struct utmp *)addr;

	for(i=0; i<max; i++, f++)
	{
		if(f->ut_type==USER_PROCESS && strlen(f->ut_user))
		{
			find(f, &cnt);
		}
	}
	*arrlen=cnt;
}
int between(const time_t ckval, const time_t low, const time_t high)
{
	int retval=(ckval >= low && ckval <= high);
	return retval;
}

int search(const time_t low_limit, const time_t high_limit, int arrlen)
{
	int i=0;
	char tmp[80]={0x0};
	time_t lt=0;
	ulog_t *p=array;

	for(i=0; i < arrlen; i++, p++)
	{
		if( (high_limit && between(p->logtime, low_limit, high_limit)) ||
			(!high_limit && p->logtime < low_limit) )
		{
			lt=p->logtime;
			strftime(tmp, sizeof(tmp), "%c", localtime(&lt));
			printf("%s: last login %s\n", p->user, tmp);
		}
	}
	
	return 0;
}

/*************************
* 
* search for the last time each one logged on
* if logon in time range prt it
***************************/

int process(FILE *u, const time_t low_limit, const time_t high_limit)
{
	int retval=0;
	size_t ulen=filesize(fileno(u));
	int arrlen=0;
	void *addr=mappit(u, ulen);

	setup_array(addr, &arrlen, ulen);
	retval=search(low_limit, high_limit, arrlen);
	retval|=unmappit(addr, ulen);
    
	return retval;
}



/*
   first argument req'd: # days
   read from /var/adm/wtmp - (file used by last)
   print all users with last logins < low_limit or with
         last logins between low_limit and high_limit when 
         high_limit is non-zero
*/
int main(int argc, char **argv)
{
	int retval=0;
	const time_t low_limit= (argc>1) ? days_ago(atoi(argv[1])): 0;
	const time_t high_limit=(argc>2) ? days_ago(atoi(argv[2])): 0;
	FILE *u=fopen("/var/adm/wtmp", "r");

 	ck(u);
	if ( low_limit > 0 && (high_limit==0 || high_limit >= low_limit))
		retval=process(u, low_limit, high_limit);
	else
	{
		fprintf(stderr,
			"Bad parameters.\n\tONE required: <number days ago>\n\tOptional: <most recent day>\n");
		fprintf(stderr,"     usage: utmp 10 5\n");	
		retval=1;
	}
    
	return retval;
}
  #3 (permalink)  
Old 04-25-2007
jgt jgt is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2007
Helyszín: 44.21.48N 80.50.15W
Hozzászólások: 452
Van-e ". Lastlogin" fájlt a felhasználó könyvtárában. Ha ez fennáll, hogy a mérete 0 és mtime egyenlő az utolsó bejelentkezési idő.
Így feltehetőleg:
Keresés / nevét. lastlogin-mtime 40

Ha nem létezik akkor a "touch. Lastlogin" minden felhasználó. Bemutatkozása
és várjunk 40 nappal az első előfordulás
  #4 (permalink)  
Old 04-25-2007
Jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.769
Azt is szeretném hálózati bejelentkezést ...

Reading számviteli fájl nagyjából garantáltan megtalálja mindenki.
  #5 (permalink)  
Old 04-26-2007
ughosting ughosting is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2007
Hozzászólások: 3
Sok köszönet eddig!

Köszönöm a javaslatokat!

Közben már fel ezt!

Ez nem gyorsan, hanem azt a munkát!

#! / usr / bin / ksh

#####
#
# Set up globális változók
#
#####

MIN_DAYS \u003d 2
MAX_DAYS \u003d 90
DEF_GROUP \u003d "CPX"
DATECALC \u003d "<patch_to_datecalc>"

#####
#
# Előzetes vizsgálatok
#
#####

#
Tesztelt a megfelelő paraméterek kerülnek átadásra vagy jelentés használata
#

esetben $ a #

1)

NUM_DAYS \u003d $ 1
SEARCH_GROUP \u003d $ DEF_GROUP
;

2)

NUM_DAYS \u003d $ 1
SEARCH_GROUP \u003d $ 2
;

*)

echo "Usage: $ (basename $ 0) <num_days> [<group>]"
exit 1
;

esac

#
Tesztelt, hogy hány nap telt a tartomány (és ezért a szám)
#

if [$ (NUM_DAYS)-lt $ (MIN_DAYS)] | | [$ (NUM_DAYS)-gt $ (MAX_DAYS)]
majd

echo "<num_days> ($ (NUM_DAYS)) kell> $ (MIN_DAYS) & & <$ (MAX_DAYS)"
exit 1

fi

#
Tesztelt, hogy a csoport neve telt létezik
#

grep-q "^ $ (SEARCH_GROUP)" / etc / group

if [$? \u003d 1]
majd

echo "<group> ($ (SEARCH_GROUP)) nem található!
exit 1

fi

#####
#
# Nyilvánítsa helyi feladatai és benépesít tömbök
#
#####

Dateformat () (

DATE_MONTH \u003d $ (echo "Jan \ nFeb \ nMar \ napr \ nMay \ nJun \ nJul \ nAug \ nSep \ nOct \ nNov \ nDec" | grep-n $ 2 | awk-F ':' '(print $ 1)')

print "$ 5 $ (DATE_MONTH) $ 3"
return 0
)

#####
#
# Indítsa el a programot!
#
#####

SEARCH_NUM \u003d $ (grep "^ $ (SEARCH_GROUP)" / etc / group | awk-F ':' '(print $ 3)')

TODAY \u003d $ (Dateformat $ (date | awk '(print $ 1 "" $ 2 "" $ 3 "" 4 $ "" $ 6)'))

for i in $ (grep "$ (SEARCH_NUM)" / etc / passwd | awk-F ':' '(print $ 1)')
tesz

#
# Győződjön meg arról, hogy ez a felhasználó már bejelentkezett előtt próbálta feldolgozni őket
#

grep-o "^ $ (i)" / etc / security / lastlog | grep-q time_last_login

if [$? \u003d 0]
majd

LOGGED_DATE \u003d $ (perl -le 'print scalar localtime shift' $ (grep-p "^ $ (i)" / etc / security / lastlog | grep time_last_login | awk '(print $ 3)'))
LOGGED_IN \u003d $ (Dateformat $ (LOGGED_DATE))

DIFF_DAYS \u003d$(${ DATECALC $) egy (TODAY) - $ () LOGGED_IN)

if [$ (DIFF_DAYS)-ge $ (NUM_DAYS)]
majd

typeset-L9 USER \u003d "$ (i):"
typeset-R4 SZÁMA \u003d $ (DIFF_DAYS)
echo "$ (user) $ (NUMBER) nap ($ (LOGGED_DATE))"

fi

fi

kész


Természetesen én AIX kódolást egy kicsit szemét, tehát ha valaki tudja, hogyan, hogy gyorsítsák fel ezt én is érdekelhetik.

Nekem van használt a datecalc szkript ezt a fórumot, hogy elvégzi a dátum elvegyék a többi!
  #6 (permalink)  
Old 04-26-2007
ughosting ughosting is offline
Regisztrált felhasználó
  
 

Join Date: Apr 2007
Hozzászólások: 3
Saját Linux-kódot az érdeklődőket

#! / bin / bash

NUM_DAYS \u003d "0"
TODAY_CODE \u003d $ (echo "$ (date +% s) / 86400" | bc)

for i in $ (cat / etc / passwd | awk-F ':' '(print $ 1)')
tesz

utolsó | grep $ (i)> / dev / null 2> & 1

if [$? -eq 0]
majd

DATE_TEXT \u003d $ (legutolsó | grep $ (I) | head -1 | awk '(print $ 5 "" $ 6)')
DATE_CODE \u003d $ (echo "$ (date-d" $ (DATE_TEXT) "+% s) / 86400" | bc)
DIFF_DAYS \u003d $ (echo "$ (TODAY_CODE) - $ (DATE_CODE)" | bc)

if [$ (DIFF_DAYS)-ge $ (NUM_DAYS)]
majd

echo "$ (i) - $ (DIFF_DAYS)"

fi

fi

kész
Closed Thread

Könyvjelzõk

Címkék
linux, mtime, perl, perl műszak, váltás, elterelési perl

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 06:32 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0