Unix [Homework]:获取/ etc / passwd中的/ home / user /目录列表

时间:2010-03-29 05:07:47

标签: unix command-line find etcpasswd

我是Unix的新手,目前正在上课,学习系统及其命令的基础知识。

我正在寻找一个命令行来从/ etc / passwd目录按字母顺序列出所有用户主目录。这仅适用于主目录,而不适用于其中的内容。应该没有重复的条目。我尝试了许多命令的排列,如下所示:

sort -d | find /etc/passwd /home/* -type -d | uniq | less

我尝试过使用-path,-name,删除-type,使用-prune,并将搜索模式更改为/ home / * / $之类的内容,但一次没有得到好的结果。我最多可以得到一个我自己的目录列表(包含其中的每个目录,这都是坏的),以及服务器上其他学生的目录(没有包含的目录,这很好)。我只是不能让它显示/ home / user目录,而不是我自己的帐户。

非常感谢提前。

6 个答案:

答案 0 :(得分:3)

/etc/passwd是一个文件。主目录通常位于字段/列6,其中“:”是分隔符。当您处理具有不同字符作为分隔符的文件结构时,您应该使用一种工具,可以将数据分解为更小的块,以便使用字段和字段分隔符更轻松地进行操作。 awk / cut等,即使使用带有IFS变量集的shell也可以完成这项工作。例如

awk -F":" '{print $6}' /etc/passwd | sort

cut -d":" -f6 /etc/passwd |sort

使用shell读取文件

while IFS=":" read -r a b c d e home_dir g 
do 
  echo $home_dir
done < /etc/passwd | sort

答案 1 :(得分:1)

我认为你想要的工具是grep,tr和awk。 Grep将为您提供实际包含主目录的文件中的行。 tr将允许您将分隔符拆分为空格,这使得每行更容易解析。

Awk只是一个可以帮助您显示所需结果的程序。

祝你好运:)

另一个提示,请尝试ls --color=auto /etcpasswd不是您认为的那种文件。目录以蓝色显示。

答案 2 :(得分:0)

在Unix中,find是用于在一个或多个目录下查找文件的命令。我想你正在寻找一个命令来查找文件中与模式匹配的行?查看命令grep

答案 3 :(得分:0)

sed 's|\(.[^:]*\):\(.[^:]*\):\(.*\):\(.[^:]*\):\(.[^:]*\)|\4|' /etc/passwd|sort

答案 4 :(得分:0)

我认为可以避免所有这些处理。有一个列出目录内容的实用程序。

ls -1 /home

如果您希望排序顺序颠倒

ls -1r /home

当然,这列出了该目录名称的名称,但不包括'/ home /',但如果需要,可以很容易地添加回来

ls -1 /home | (while read line; do echo "/home/"$line; done)

答案 5 :(得分:0)

我使用了类似的东西:

ls -l -d $(cut -d':' -f6 /etc/passwd) 2>/dev/null | sort -u

我唯一没做的就是按字母顺序排序,还没有想到呢