怎么运行的

怎么运行的

是否有一个用户友好的命令可以用来在 Ubuntu 系统的控制台中列出用户?

当我cat /etc/passwd得到一个难以阅读的用户列表时。如果能看到按字母顺序排列的列表,其中的条目按列排列,并且组名称位于组 ID 旁边的括号中,那就太好了。

答案1

/etc/passwd 文件的良好输出的好方法:

$ column -nts: /etc/passwd

现在您可以对其进行排序:

$ column -nts: /etc/passwd | sort

最后一列中包含组名称(无括号):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort

答案2

如果您拥有计算机的 root 访问权限,则可以执行以下操作:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

怎么运行的

成为 root 来读取影子文件。如果您想检查用户是否设置了密码(人类用户),则仅需要 root 权限,否则您可以直接cat /etc/passwd代替sudo grep ...

sudo 

仅显示设置了密码的用户:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

按用户名排序:

sort 

丢弃除用户名之外的所有信息:

cut -d: -f1

迭代用户名并用组信息丰富它:

while read user; do id $user; done

将输入格式化为列:

column -ts' ,'

使用vi查看结果:

vi '+set nowrap' - 

如果您没有 root 访问权限,

尝试这样的事情:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

它的输出有点不同,但我将其作为练习留给读者,将这个答案中的两个部分组合成完全适合工作的内容。 (你不就是爱吗sed?)

答案3

我所做的并且对我的目的有用的事情是

ls /home

当然,这并没有真正为您提供用户列表,而是用户主目录和过去用户目录的列表,但是您想要对不存在终端的用户执行的任何命令都会告诉您,并且可能是删除的提示没有用户的主文件或移动它!

答案4

我以为这很容易join,但是join需要对文件进行排序在连接字段上。所以它需要(?)一个临时文件的解决方法。输出按用户排序,并显示用户、组和组 ID。

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

tr使用;将一个字符翻译成另一个字符sort根据关键字段-k,输出到文件-o;将第一个 ( -1) 文件和第二个 ( ) 文件中的字段进行连接,输出第一个文件 ( ) 和第二个文件 ( )-2中的某些字段。-o 1.1,2.1,2.3

相关内容