战地2aix3.0aix为什么登录帐号的时候要很久,加...

Linux和AIX主机获取主机帐号创建时间和最后一次登录时间_linux教程-织梦者
当前位置:&>&&>& > Linux和AIX主机获取主机帐号创建时间和最后一次登录时间
Linux和AIX主机获取主机帐号创建时间和最后一次登录时间
最近在获取Linux和Aix主机帐号创建时间和最后一次登录时间方法,跟大家分享下,如有不对多多指教:
首先说一下对于Linux而言没有创建时间这么一说,只能说是更新时间,
lastlog -u test
最后一次登录 Linux
awk -F: ‘3==0{print1}’ /etc/passwd 查看是否存在特权用户 Linux
-ll /home 显示用户创建时间
这种不准确,因为有些实例和用户名存在不一样的情况
awk -F “:” ‘2==!!{print1, $3}’
/etc/shadow | grep admin
查看帐号 对应1970年隔了多少天 ,在主机的密码文件中有距离1970相隔的天数,就是创建帐号的时间
date -d “ 16972 days” “+%Y/%m/%d %H:%M:%S”
格式化到当前日期 得到的就是你帐号创建的天数
last |grep root | awk ‘NR==1{print 1,4,5,6}’
aix获取某个帐号最后一次登录时间 这里提一下如果你想得到固定行的话可以awk 的NR==?这个命令来得到固定行的信息
cat /etc/security/passwd
获取帐号的更新时间,这个是针对AIX主机的,获取的密码文件有
(export LANG=en_US; lastlog |sed -n “2p” | awk ‘{print 9"-"5”-“6""7}’|sed ‘s/May/05/g’|sed ‘s/Jan/01/g’|sed ‘s/Feb/02/g’|sed ‘s/Mar/03/g’|sed ‘s/Apr/04/g’|sed ‘s/Jun/06/g’|sed ‘s/Jul/07/g’|sed ‘s/Aug/08/g’|sed ‘s/Sep/09/g’|sed ‘s/Oct/10/g’|sed ‘s/Nov/11/g’|sed ‘s/Dec/12/g’|sed ‘s/1月/01/g’|sed ‘s/2月/02/g’|sed ‘s/3月/03/g’|sed ‘s/4月/04/g’|sed ‘s/5月/05/g’|sed ‘s/6月/06/g’|sed ‘s/7月/07/g’|sed ‘s/8月/08/g’|sed ‘s/9月/09/g’|sed ‘s/10月/10/g’|sed ‘s/11 月/11/g’|sed ‘s/12月/12/g’)
针对Linux 时间格不一样的处理,sed和awk命令你可以理解成一个管道符起到一个过滤的作用,上面的sed -n “2p”代表取第二行跟awk NR==?类似。
对了,重要的一点是在取时间进行格式化的时候会遇到如下:
我用的比较笨的办法就是取第二列和第三列进行判断,因为你在用$取列元素的时候固定时间位置是不确定的,下面附上代码:
/*shadow是保存密码的,每一行分为8个字段(用冒号分隔),第一个字段是用户名(用户包括系统用户和普通用户),
*第二个字段是密码(加密格式),系统用户是不能登录的,密码字段为星号(*);两个感叹号(!!)表示这个用户被锁定了,
* awk -F ":" '{if($2!="!!")print $1,$2, $3}'
/etc/shadow 获取除了锁定帐号之外的帐号进行判断
* 无法登录;美元符号($)出现在加密格式的密码里,起到分隔作用*/
public String Str2Inputstr(String inStr,JSchCommand schCommand) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
QueryRunner runner = DBUtil.getInstanceQueryRunner();
String timeParam =
timeParam = runner.query("SELECT param from t_sys_platform_param where name = 'ZOMBIE_ACCOUNT_DATE'", new ScalarHandler&String&(1));
} catch (SQLException e) {
loger.error("查询定义僵尸帐号的时间失败:" + e);
e.printStackTrace();
cal.add(Calendar.DAY_OF_MONTH, Integer.parseInt(timeParam));
Date expireTime
= cal.getTime();//判断有没有在这个过期时间之前的登录时间,都可以定义成僵尸帐号,数据库查询出来,灵活配置
String ip = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(00?\\d|1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
Pattern pattern = pile(ip);
String result = "";
String accType = "2";//帐号类型
String createTime = "";//创建时间
String lastLoginTime = "";//=最后一次login时间
String cmdLastLoginTime = "";//=最后一次时间
BufferedReader in = new BufferedReader(new StringReader(inStr));
while ((result = in.readLine()) != null) {
String[] account = result.split(" ");
if (!("*".equals(account[1]) || "!!".equals(account[1]))) {//账号对应密码用8个:隔开第二个代表他们的是否有密码
schCommand.connect(1000 * 30);
createTime = schCommand.execCmd("date -d \" "+ account[2] +"days\" \"+%Y/%m/%d %H:%M:%S\"");
schCommand.connect(1000 * 30);
****lastLoginTime = schCommand.execCmd("(export LANG=en_US; lastlog -u "+account[0]+"|sed -n \"2p\" | awk '{print $2,$3'}) ");//这里就是取的第二列和第三列进行判断以便取相应位置的时间
if(lastLoginTime.contains("**")){//包含两个**代表从未登录过,可以认为是僵尸帐号
accType="3";
}else{//普通帐号或者管理帐号,还需判断是否为僵尸帐号
//如果不包含*,那么如果$3是ip地址话说明Username Port From
Latest每一列都有值那么
// 可以用(export LANG=en_US; lastlog -u root|sed -n "2p" | awk '{print $9"-"$5"-"$6" "$7}'|sed 's/May/05/g'|sed 's/Jan/01/g')去取值并且直接格式化时间,因为是一个标准能格式化的时间格式
String isIp = lastLoginTime.split(" ")[1];
Matcher matcher = pattern.matcher(isIp);
if(matcher.matches()){//验证如果是IP地址,格式化时间
cmdLastLoginTime = "(export LANG=en_US; lastlog -u"+ account[0]+" |sed -n \"2p\" | awk '{print $9\"-\"$5\"-\"$6\" \"$7}'|sed 's/May/05/g'|sed 's/Jan/01/g'|sed 's/Feb/02/g'|sed 's/Mar/03/g'|sed 's/Apr/04/g'|sed 's/Jun/06/g'|sed 's/Jul/07/g'|sed 's/Aug/08/g'|sed 's/Sep/09/g'|sed 's/Oct/10/g'|sed 's/Nov/11/g'|sed 's/Dec/12/g'|sed 's/1月/01/g'|se**d 's/2月/02/g'|sed 's/3月/03/g'|sed 's/4月/04/g'|sed 's/5月/05/g'|sed 's/6月/06/g'|sed 's/7月/07/g'|sed 's/8月/08/g'|sed 's/9月/09/g'|sed 's/10月/10/g'|sed 's/11 月/11/g'|sed 's/12月/12/g')";
}else{//如果不是IP地址也不包含*,读取位置需要变化(export LANG=en_US; lastlog -u root|sed -n "2p" | awk '{print $8"-"$4"-"$5" "$6}'|sed 's/May/05/g'),才能格式化时间
cmdLastLoginTime = "(export LANG=en_US; lastlog -u"+ account[0]+" |sed -n \"2p\" | awk '{print $8\"-\"$4\"-\"$5\" \"$6}'|sed 's/May/05/g'|sed 's/Jan/01/g'|sed 's/Feb/02/g'|sed 's/Mar/03/g'|sed 's/Apr/04/g'|sed 's/Jun/06/g'|sed 's/Jul/07/g'|sed 's/Aug/08/g'|sed 's/Sep/09/g'|sed 's/Oct/10/g'|sed 's/Nov/11/g'|sed 's/Dec/12/g'|sed 's/1月/01/g'|sed 's/2月/02/g'|sed 's/3月/03/g'|sed 's/4月/04/g'|sed 's/5月/05/g'|sed 's/6月/06/g'|sed 's/7月/07/g'|sed 's/8月/08/g'|sed 's/9月/09/g'|sed 's/10月/10/g'|sed 's/11 月/11/g'|sed 's/12月/12/g')";
schCommand.connect(1000 * 30);
lastLoginTime = schCommand.execCmd(cmdLastLoginTime);
Date lastLoginDate = dateFormat.parse(lastLoginTime);
int border = pareTo(expireTime);//判断是否在定义僵尸帐号时间的之前,如果是的话就是僵尸帐号不是就是普通帐号或者特权帐号**
CorpseResult += account[0] + "\n";
}else if ("*".equals(account[1])){//包含*说明是内置帐号
accType = "4";
} catch (Exception e) {
e.printStackTrace();
以上就是Linux和AIX主机获取主机帐号创建时间和最后一次登录时间的全文介绍,希望对您学习和使用linux系统开发有所帮助.
这些内容可能对你也有帮助
更多可查看linux教程列表页。
猜您也会喜欢这些文章当前位置:
>> 《战地2模组:AIX2.0》下载
战地2模组:AIX2.0
Battlefield2:AlliedIntentXtended
DigitalIllusionsCE(DICE)&
Win7/Win2003/WinXP
1421人投票
本月人气:124
累计人气:101853
游戏攻略(0)
相关资讯(0)
工具补丁(0)
相关图集(0)
《战地2模组:AIX2.0》游戏综述
AlliedIntentXtended,是BF2的一款制作精良的模组。他的前作AlliedIntend给我们留下了深刻的印象。该系列模组的闪光点在于添加了大量的新武器、载具,可以让玩家体验到更真实更激...
《战地2模组:AIX2.0》游戏攻略
《战地2模组:AIX2.0》游戏资讯
《战地2模组:AIX2.0》游戏补丁
《战地2模组:AIX2.0》相关图集
《战地2模组:AIX2.0》其它版本下载
你可能喜欢的游戏
最新推荐游戏下载
热门即时战略游戏
类型:即时战略
别人正在下载...
《BUSTED!》是一款刺激的休闲娱乐游戏。玩家的身边都是与众多...
《Abrix儿童版》(Abrixforkids)是一款解谜色彩的...
《汽车技工经理》是一款模拟经营类游戏。游戏顾名思义,你将一名汽车...
《光之矛》(Lichtspeer)是一款2D像素风横版过关动作冒...
《Xenoraid》是一款带有太空特色的射击游戏。玩家将在游戏中...
专业的单机游戏下载网站 91 () 打造不一样的 单机游戏下载基地

参考资料

 

随机推荐