30일 동안 로그인하지 않은 모든 사용자의 목록을 얻으려고 하는데 코드가 작동하지 않습니다.

30일 동안 로그인하지 않은 모든 사용자의 목록을 얻으려고 하는데 코드가 작동하지 않습니다.
echo here is a list of the users who have not logged in for a month
olduser="who | grep | -u, -q +30"
if $olduser
then
 echo these users havent been logged in for thirty 30 days
else
 echo user is active
;;

답변1

한 가지 제안 ...보다 철저하고 관련성 높은 답변을 얻으려면 다음으로 질문을 편집하십시오.

  • 운영 체제(즉, Solaris는 계정 관리 측면에서 RHEL과 매우 다릅니다)
  • 스크립트/코드 유형(Bash, csh, ksh 등)은 스크립트의 일부일 뿐 전체가 아닌 것처럼 보이므로 shebang(#!/bin/bash, 등.).

내가 가장 먼저 알아차린 것은 변수가$이전 사용자명령 대체로 설정되지 않았지만 리터럴 문자열로 설정되었습니다."누구 | grep | -u, -q +30"

명령 대체는 일반적으로 $(command_to_be_run)또는 등의 백틱을 사용하여 수행 됩니다 `command_to_be_run`. 나는 당신이 찾고 있는 것이 아니라 위에서 언급한 것처럼 로그 파일과 같은 who회계 명령을 찾아야 한다고 생각합니다.loginslast

for 루프와 같은 사용자 목록을 생성한 다음 마지막 및 변수 대체를 사용하여 각 사용자의 마지막 로그인 날짜를 생성하면 해당 사용자가 35일보다 오래되었는지 평가하는 if-then-fi 문과 같은 작업을 수행할 수 있습니다.

예를 들어 Solaris 10에서는 Bash를 사용합니다.

LAST_LOGON_DATE=$(last $user | awk 'NR==1{print $5,$6}' | custom_date_convert_cmd )

if [[ ${LAST_LOGON_DATE} -ge 35 ]]; then
    echo "${user} is expired. Last logon: ${LAST_LOGON_DATE} days ago"
    important_commands_here
fi

분명히 sed/perl은 처리 속도 측면에서 AWK보다 빠르지만, 막혀서 약간의 작업이 필요한 경우 여기가 시작하기에 좋은 곳일 수 있습니다.

일반적으로 이를 수행하는 명령이 포함되어 있으므로 DISA에서 시스템 STIG를 찾으십시오. 사용자의 마지막 로그인, 비밀번호가 없는 사용자 등을 확인하십시오.
https://www.stigviewer.com/stigs

관련 정보