Как вывести список домашних директорий пользователей в Linux?

Ответ

В Linux домашние директории пользователей обычно находятся в /home/. Для их вывода можно использовать несколько команд:

1. Прямое перечисление содержимого /home/:

ls /home/

Это покажет все поддиректории в /home/, каждая из которых обычно является домашней папкой пользователя.

2. Извлечение путей из /etc/passwd (более точный метод): Файл /etc/passwd содержит информацию о пользователях, где шестое поле — это домашний каталог.

cut -d: -f6 /etc/passwd | grep '^/home/' | sort -u

Эта команда:

  • cut -d: -f6 — извлекает шестое поле (разделитель :).
  • grep '^/home/' — фильтрует только пути, начинающиеся с /home/.
  • sort -u — сортирует и удаляет дубликаты.

3. Получение домашней директории текущего пользователя:

echo $HOME
# или
cd ~ && pwd

Практическое применение в DevOps: При написании скриптов для настройки окружения или резервного копирования я часто использую второй метод, так как он гарантированно возвращает только пути из /etc/passwd, игнорируя возможные временные или системные каталоги в /home/.

Ответ 18+ 🔞

А, ну вот, классика жанра! Сидишь такой, пишешь скрипт, а тут тебе надо всех юзеров на сервере найти, их домашние папки. Голова уже не варит, а тут ещё этот вопрос. Да ладно, разберёмся, не боги горшки обжигают.

Так, слушай сюда, ёпта. В Линуксе, если всё по-человечески настроено, эти самые «домашние папки» юзеров обычно валяются в /home/. Как в той песне — «мой адрес не дом и не улица, мой адрес — /home/vasya». Первый и самый тупой способ — просто заглянуть туда.

ls /home/

Сделал и сидишь, смотришь. Выдаст тебе список подпапок. Каждая — это, скорее всего, дом какого-то чувака. Но это, блядь, как смотреть в окно и гадать, кто где живёт. Может, там не только люди, но и какой-нибудь системный мусор затесался. Способ для ленивых, но иногда работает.

А вот если ты не полупидор, а хочешь точности, то надо лезть в святая святых — в файл /etc/passwd. Там про каждого пользователя записано, включая где его дом. Шестое поле в каждой строке — это как раз его домашняя директория. Берёшь и выковыриваешь это дело:

cut -d: -f6 /etc/passwd | grep '^/home/' | sort -u

Давай разжую, что тут происходит, а то смотришь и нихуя не понятно.

  • cut -d: -f6 — это как ножом по маслу. Берёт строку, режет её по двоеточиям (-d:) и выдёргивает шестой кусок (-f6), то есть наш путь.
  • Потом grep '^/home/' отфильтровывает всё лишнее, оставляя только те пути, которые начинаются с /home/. Вдруг там какой-нибудь системный аккаунт с домашней папкой / или /var/lib/что-то-там затесался — нам такое не надо.
  • Ну и sort -u для красоты, отсортирует и уберёт повторы, если вдруг они есть. Чтоб красиво было, а не как попало.

Этот способ — мой фаворит. Надёжный, как швейцарские часы. Особенно когда пишешь скрипты для деплоя или бэкапов. Представь: запускаешь бэкап на сервере, а он, сука, начинает копировать всё подряд из /home/, включая какую-нибудь временную папку установщика. Ёперный театр! А так — только то, что в пассвде прописано, чисто и аккуратно.

Ну и на десерт, если тебе вдруг срочно понадобилось узнать, где твоя собственная берлога, пока ты в системе:

echo $HOME
# или, для любителей классики
cd ~ && pwd

Первая команда крикнет тебе путь, вторая — тихо перейдёт в домашнюю директорию и скажет, где она теперь находится. Всё просто, как три копейки.

Вот и вся магия. Ничего сложного, главное — понимать, откуда ноги растут. А то некоторые так и тыкают команды, не вдумываясь, а потом удивляются, почему скрипт наебнулся. Э, сабака сука, думать надо!