2016-11-27 90 views
2

有沒有辦法在ruby腳本中調用像last這樣的命令?我可以使用%x在腳本中調用諸如lsls -l之類的命令,但是對於由最後一個命令提供的複雜且不斷擴展的日誌信息,這可以接受嗎?在ruby腳本中調用命令

+0

請參閱http://stackoverflow.com/questions/754494/reading-the-last-n-lines-of-a-file-in-ruby獲取ruby中的'last'命令。 – knut

回答

2

下面是一個例子,來獲取用戶名,IP,啓動和持續時間:

%x(last -i).each_line do |line| 
    line.chomp!        # Removes newline 
    break if line.empty?     # last is done 

    # 3 possibilities to extract information : 
    user, *other_columns = line.split(' ') # 1. Use split 
    start = Time.parse(line[39,16])   # 2. Use known position of a column 
    ip = line[22,17].strip 
    if line =~/\((\d+):(\d+)\)/    # 3. Use a regex 
    duration = $1.to_i*60+$2.to_i 
    else 
    duration = nil 
    end 

    info={user: user, ip: ip, start: start, duration: duration} 
    #TODO: Check that user isn't "reboot" 
    puts info 
end 


# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 21:29:00 +0100, :duration=>141} 
# {:user=>"ricou", :ip=>"0.0.0.0", :start=>2016-11-01 15:21:00 +0100, :duration=>57} 

哪些信息你需要什麼呢?

+0

IP地址。我想我可以用匹配來隔離他們,一旦我想出如何得到最後的工作。 – yukimoda

+0

我更新了代碼。您可能需要檢查列與我的寬度相同。 –