1

我对 Unix 很陌生,目前正在上课学习系统及其命令的基础知识。

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

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

我尝试过使用-path、-name、删除-type、使用-prune,并将搜索模式更改为/home/*/$ 之类的东西,但一次都没有得到好的结果。充其量我可以得到一个我自己的目录列表(包括里面的每个目录,这很糟糕),以及服务器上其他学生的目录(没有包含的目录,这很好)。我只是无法让它显示 /home/user 目录,而我自己的帐户则没有其他任何东西。

提前谢谢了。

4

6 回答 6

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
于 2010-03-29T05:29:41.120 回答
1

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

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

祝你好运 :)

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

于 2010-03-29T05:13:59.810 回答
0

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

于 2010-03-29T05:14:30.070 回答
0
sed 's|\(.[^:]*\):\(.[^:]*\):\(.*\):\(.[^:]*\):\(.[^:]*\)|\4|' /etc/passwd|sort
于 2010-03-29T13:37:13.410 回答
0

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

ls -1 /home

如果您想颠倒排序顺序

ls -1r /home

当然,此列表仅列出该目录名称的名称,不包括“/ home /”,但如果需要,可以使用类似这样的内容轻松添加

ls -1 /home | (while read line; do echo "/home/"$line; done)
于 2014-09-04T21:49:19.043 回答
0

我使用了类似的东西:

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

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

于 2016-03-04T15:35:48.803 回答