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

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

関連情報