我如何知道使用root帐户登录的次数是多少?
以下是我目前在python中使用的代码:
myFile = open('file','r')
count_rr = 0
for line in myFile.readlines():
list_of_line = line.split(' ')
if 'root' in list_of_line[?]
print 'root'
count_rr = counter_rt + 1
以下是我试图阅读的文件的两行:
Jan 10 09:32:46 j4-be03 sshd[3885]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=218.241.173.35 user=root
Jan 10 09:32:48 j4-be03 sshd[3885]: Failed password for root from 218.241.173.35 port 50212 ssh2
答案 0 :(得分:4)
它绝对不是最紧凑或python-y方式,但它应该工作。我只是不确定[?]在你的代码中做了什么,用冒号代替它:它应该有效。
你可能会得到一些误报!
(我个人会在bash中这样做:
grep -c 'sshd\[.*authentication failure.* user=root ' file
应该做的伎俩(并且更强大)
答案 1 :(得分:1)
这里的几个答案将为您提供所需的信息,但如果您想更有效地做到这一点:
from __future__ import with_statement # needed in python 2.5 and earlier
import re
from itertools import ifilter
def count_root(file, regex=re.compile('root')):
count = 0
with open(file, 'r') as src:
for i in ifilter(regex.search, src):
count += 1
return count
print count_root('file')
虽然您可以调整该正则表达式,以便为您提供更准确的结果。如果你能够大大缩小它(比如root必须在最后30个字符中,或者你有什么),那么有针对性的字符串方法会更快。
答案 2 :(得分:0)
这样的事情应该有效 - 您可能需要调整regular expression以满足您的确切需求:
myFile = open('file')
count_rr = 0
for line in myFile:
if re.search('pam_unix\(sshd:auth\): .* user=root ', line):
count_rr += 1
答案 3 :(得分:0)
我认为你可以尝试这样的事情:
count_rr = len(line for line in myFile
if 'Failed password for root' in line)
注意:
readlines
,只需遍历文件对象以避免将整个文件存入内存。in
运算符直接查找子字符串,无需拆分该行。