Bash脚本last_sudo以在auth.log中显示最后一个sudo条目

Bash脚本last_sudo以在auth.log中显示最后一个sudo条目,bash,Bash,我正在/usr/local/bin中寻找一个bash脚本,它执行以下操作 如果当前用户是普通用户,脚本将在auth.log中显示该用户的最后一个sudo条目。如果当前用户是root用户,则需要一个参数,即在auth.log中为其显示最后一个sudo条目的用户名。对脚本使用情况执行必要的检查。作为普通用户(甚至作为“测试”或未来用户)运行此脚本不需要在它前面加sudo 示例执行: $ /usr/local/bin/last_sudo (or, # /usr/local/bin/last_sudo

我正在/usr/local/bin中寻找一个bash脚本,它执行以下操作

如果当前用户是普通用户,脚本将在auth.log中显示该用户的最后一个sudo条目。如果当前用户是root用户,则需要一个参数,即在auth.log中为其显示最后一个sudo条目的用户名。对脚本使用情况执行必要的检查。作为普通用户(甚至作为“测试”或未来用户)运行此脚本不需要在它前面加sudo

示例执行:

$ /usr/local/bin/last_sudo (or, # /usr/local/bin/last_sudo john) 
Dec 20 16:05:16 john-linux sudo:    john : TTY=pts/0 ; PWD=/home/john/Desktop ; USER=root ; COMMAND=/sbin/reboot now


不存在这样的脚本,您必须编写一个

以下是一个(未经测试的)骨架:

#!/usr/bin/env bash

if [[ -v SUDO_UID ]]; then
  grep '/bin/sudo' /var/log/auth.log | grep "$SUDO_USER" | tail -1
else
  if [[ $# -lt 1 ]]; then
    echo "You're running this script as root, please provide a username" >&2
    echo "usage: $0 USERNAME"
  else
    grep '/bin/sudo' /var/log/auth.log | grep "$1" | tail -1
  fi
fi

此脚本需要通过sudo运行,因为默认情况下,
/var/log/auth.log
和cossins是不可读的。

临时修改您所写的内容:

#!/bin/bash

me=$(whoami)
log=/var/log/auth.log
if [[ "$me" = "root" ]]; then
  [[ -z "$1" ]] && printf "Usage: $0 username\n" >&2 && exit 2
  user="$1"
fi

grep '/bin/sudo/' "$log" | grep "$user" | tail -1
exit 0
谢谢大家。。。我想这是我想要的剧本


codeforester。。我修改了一点。。这就是我想要的。。谢谢你

我已经删除了15%。。。错抄了。。。是的,我知道。。最后但我只想从/var/log/auth.log grep为什么不
if[“$EUID”-ne'0'”;然后grep“$USER”“/var/log/auth.log”;fi | tail-n1
(假设您的
auth.log
是纯文本文件,而不是
wtmp
格式——否则您将需要建议的
last
)是。。谢谢david amd chooroba………如果当前用户是根用户,它需要一个参数,我该怎么做?或者,#/usr/local/bin/last_sudo john您可以创建第二个帮助程序脚本,或者只编写一个
函数
。测试
$UID
(或
$EUID
,此处应相同),然后if
root
调用
函数
否则调用
函数sudo
(将
sudo
作为第一个参数传递)。(您的
函数
可能只是调用
/usr/local/bin/last_sudo
我有chmod 0777/var/log/auth.log只是为了学习…输出不正确…尝试使用“arapi”和root执行时也不起作用。什么不正确?您期望的输出是什么,您得到的输出是什么?“/usr/local/bin/last_sudo john”12月20日16:05:16 john linux sudo:john:TTY=pts/0;PWD=/home/john/Desktop;USER=root;COMMAND=/sbin/reboot now输出我期待上面的结果..当我键入“last_sudo test”时“作为root用户,我应该得到如上所述的输出。很抱歉。您的脚本也有些工作。我改为grep'sudo'/var/log/auth.log此脚本可能无法在大多数Linux设备上工作,因为/var/log/auth.log通常只能由root用户读取。因此,您的脚本的最后一位将为您提供拒绝权限或类似的内容。
#!/bin/bash

me=$(whoami)
log=/var/log/auth.log
if [[ "$me" = "root" ]]; then
  [[ -z "$1" ]] && printf "Usage: $0 username\n" >&2 && exit 2
  user="$1"
fi

grep '/bin/sudo/' "$log" | grep "$user" | tail -1
exit 0
#!/bin/bash
me=$(whoami)
log=/var/log/auth.log
if [[ "$me" = "root" ]]; then
[[ -z "$1" ]] && printf "Usage: $0 username\n" >&2 && exit 2
user="$1"
fi
grep -e 'sudo.*COMMAND' $log | tail -n 1
exit 0