Unix [домашнее задание]: получить список / home / user / directory в / etc / passwd - PullRequest
1 голос
/ 29 марта 2010

Я очень новичок в Unix, и в настоящее время учусь на уроке основам системы и ее команд.

Я ищу единственную командную строку для вывода списка всех домашних каталогов пользователей в алфавитном порядке из каталога / etc / passwd. Это относится только к домашним каталогам, а не к их содержимому. Там не должно быть повторяющихся записей. Я пробовал много перестановок команд, таких как следующее:

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

Я пытался использовать -path, -name, удалить -type, использовать -prune и изменить шаблон поиска на такие вещи, как / home / * / $, но ни разу не получил хороших результатов. В лучшем случае я могу получить список моих собственных каталогов (в комплекте с каждым каталогом внутри него, что плохо) и каталогов других студентов на сервере (без содержащихся каталогов, что хорошо). Я просто не могу отобразить каталоги / home / user и ничего больше для моей учетной записи.

Большое спасибо заранее.

Ответы [ 6 ]

3 голосов
/ 29 марта 2010

/etc/passwd - это файл. домашний каталог обычно находится в поле / столбце 6, где «:» - разделитель. Когда вы имеете дело с файловой структурой, в которой в качестве разделителей используются разные символы, вам следует использовать инструмент, который может разбить ваши данные на более мелкие фрагменты для более легкой работы с полями и разделителями полей. awk / cut и т. д., даже использование оболочки с набором переменных IFS может сделать эту работу. например,

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

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

использование оболочки для чтения файла

while IFS=":" read -r a b c d e home_dir g 
do 
  echo $home_dir
done < /etc/passwd | sort
1 голос
/ 29 марта 2010

Я думаю, что вам нужны инструменты grep, tr и awk.Grep даст вам строки из файла, которые на самом деле содержат домашние каталоги.tr позволит вам разбить разделитель на пробелы, что упрощает анализ каждой строки.

Awk - это всего лишь одна программа, которая поможет вам отобразить нужные результаты.luck:)

Еще одна подсказка, попробуйте ls --color=auto /etc, passwd - это не тот файл, который вам кажется.Каталоги отображаются синим цветом.

0 голосов
/ 04 марта 2016

Я использовал что-то вроде:

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

Единственное, что я не делал, это сортировал по алфавиту, пока не понял,

0 голосов
/ 05 сентября 2014

Я думаю, что всей этой обработки можно было бы избежать. Существует утилита для просмотра содержимого каталога.

ls -1 /home

Если вы хотите изменить порядок сортировки

ls -1r /home

Конечно, этот список содержит имя только этого имени каталога и не содержит '/ home /', но его можно добавить достаточно легко, если нужно, с помощью чего-то подобного

ls -1 /home | (while read line; do echo "/home/"$line; done)
0 голосов
/ 29 марта 2010
sed 's|\(.[^:]*\):\(.[^:]*\):\(.*\):\(.[^:]*\):\(.[^:]*\)|\4|' /etc/passwd|sort
0 голосов
/ 29 марта 2010

В Unix find - это команда для поиска файлов в одном или нескольких каталогах. Я думаю, что вы ищете команду для поиска строк в файле, которые соответствуют шаблону? Посмотрите на команду grep.

...