【问题标题】:How to get all the users from /etc/passwd which doesn't have a home directory如何从没有主目录的 /etc/passwd 获取所有用户
【发布时间】:2020-08-17 21:40:06
【问题描述】:

我正在尝试获取其主目录在 /etc/passwd 中提及但不存在于 /home 中的所有用户。

下面的代码为我提供了 /home 中不存在但 /etc/passwd 中存在的所有主目录。

cut -d":" -f6 /etc/passwd | grep home | sort | 
    while read dir; do [ -e "$dir" ] || echo Missing $dir; done 

如何从第一列获取对应用户的列表,并从列表中逐个使用mkhomedir_helper(user)创建对应的/home目录?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    Barmar 解决方案的其他实现:

    getent passwd | sort -t: -k6 | while IFS=: read -r u _ _ _ _ d _
    do
      if [[ "$d" =~ ^/home/ ]] && ! [[ -d "$d" ]]
        then printf 'Directory %q missing for user: %q\n' "$d" "$u"
      fi
    done
    

    使用getent 允许在文件或 NIS(网络信息服务)时提取相同的数据。

    [[ "$d" =~ ^/home/ ]] 确保主目录以/home 开头,方法是将其与扩展正则表达式匹配。 ^/home/

    【讨论】:

    • 谢谢...我认为您需要输入“!”在 if 语句中让它找到丢失的目录。
    【解决方案2】:

    您必须将用户名保留在您阅读的数据中。你不需要使用cutread 可以将输入拆分为字段并分配给变量。

    grep /home/ /etc/passwd | sort -t: -k6 | while IFS=: read -r username _ _ _ _ dir _
    do
        if ! [ -d "$dir" ]
        then 
            echo "Username $username missing $dir"
            mkhomedir_helper "$username"
        fi
    done
    

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 2018-03-09
      • 2021-09-08
      • 2021-06-09
      • 1970-01-01
      • 2019-04-10
      相关资源
      最近更新 更多