Как я могу искать имя пользователя идентификатором в Linux?

Я рекомендовал бы http://supervisord.org/, это будет супернедостаток Ваш процесс, перезапустить его для Вас и имеет много конфигурации и должно быть выполнено как обычный пользователь.

69
17.04.2012, 23:06
6 ответов

ls уже выполняет тот поиск. Можно выполнить поиск информации о пользователе из командной строки с getent passwd.

Если ls показывает идентификатор пользователя вместо имени пользователя, это - потому что нет никакого пользователя тем именем. Файловые системы хранят идентификаторы пользователей, не имена пользователей. Если Вы монтируете файловую систему от другой системы, или если файл принадлежит теперь-удаленному-пользователю, или если Вы передали числовой идентификатор пользователя chown, у Вас может быть файл, который принадлежит идентификатору пользователя, который не имеет имени.

На общем хосте у Вас может быть доступ к некоторым файлам, которые совместно использованы между несколькими виртуальными машинами, каждым с их пользовательской базой данных. Это немного странно (почему совместно используют файлы, но не пользователей, которые владеют ими?), но это технически возможно.

36
27.01.2020, 19:31
  • 1
    я вижу число вместо имени на ls -l если имя является более чем восемью символами в длине. –  kgrittn 20.04.2017, 17:44
  • 2
    @kgrittn, Он мог бы зависеть от варианта Unix. GNU ls показывает целое имя пользователя. BusyBox ls усекает его к 8 символам (по крайней мере, на сборке, которую я имею здесь). –  Gilles 'SO- stop being evil' 20.04.2017, 19:32

Попробовать

getent passwd "$uid" | cut -d: -f1
67
27.01.2020, 19:31
  • 1
    Если это не возвращает ничего, что означает, что у меня нет доступа для перевода идентификатора в имя пользователя? –  cwd 17.04.2012, 07:07
  • 2
    Более вероятно Вы didnt set "$uid"' или что uid не существует. Делает grep ":$uid:" /etc/passwd найти его? Делает getent passwd произвести вывод? –  Mikel 17.04.2012, 07:14
  • 3
    @cwd: у Вас должен всегда быть доступ для перевода идентификатора в имя пользователя. Например, ls -l всегда делает это. –  camh 17.04.2012, 10:00
  • 4
    Просто любопытный, потому что взгляд на ls список на общем хосте показывал числа в пользователе / столбцы названия группы с ls. Возможно, это - предосторожность безопасности или jailshell вещь? –  cwd 17.04.2012, 22:50
  • 5
    @cwd Более вероятно общий хост использует /etc/passwd смонтированный / совместно использованный откуда-либо, который не был смонтирован в то время. спасибо –  jw013 17.04.2012, 22:56
  • 6
    @cwd Более вероятно общий хост использует /etc/passwd смонтированный / совместно использованный откуда-либо, который не был смонтирован в то время. спасибо –  jw013 17.04.2012, 22:56

Синтаксический анализ/etc/passwd:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu
-1
27.01.2020, 19:31
  • 1
    В отличие от этого, getent, это не работает, если система использует LDAP. –  choroba 17.04.2012, 11:51
  • 2
    это не работает или если NIS используется или безотносительно другого распределенного протокола аутентификации. –  jlliagre 18.04.2012, 04:25
  • 3
    @choroba: если бы у него было конкретное требование для LDAP или NIS, он, вероятно, упомянул бы это. Мое решение работает над типичными установками Linux. –  laebshade 18.04.2012, 05:55
  • 4
    downvote beacause это не надежно (это могло соответствовать или пользователю или группе). примечание –  Franklin Piat 29.12.2016, 12:36

Можно настроить sudo таким образом, чтобы члены группы могли выполнять команду без пароля. Используйте visudo для редактирования sudoers file:

# visudo

Добавьте в нижнюю часть файла нечто похожее на:

%mygroup ALL = (root) NOPASSWD: iwlist wlanX scan

(где mygroup - имя группы, которому предшествует символ процента).

Вы также можете разрешить одному пользователю запускать эту функцию, изменив % mygroup на myuser , где myuser является именем пользователя (обратите внимание на отсутствие символа процента).

Можно также разрешить сканирование всем пользователям, заменив % mygroup на ALL .

Использование возможностей позволяет использовать cap _ net _ admin для всех команд iwlist , в то время как использование sudo , сконфигурированных, как указано выше, ограничивает использование только одной команды с определенными опциями. Это должно быть более безопасным.

Другая (общая) причина заключается в том, что настройка sudo будет более портативной, чем использование capabilites , хотя это не имеет значения в данном случае, если вы просто используете Linux.

-121--133711-

На Mac OS X с помощью команды FreeBSD date вы можете выполнить преобразование через эпохальное время:

epoch_time="$(LANG=C TZ='EST' date -j -f "%a %b %d %T %Z %Y" "Wed Dec 25 06:35:02 EST 2013" "+%s")"
a="$(date -r $epoch_time '+%F')
echo "$a"  #  2013-12-25
-121--58631-

Вы можете насладиться этой маленькой частушкой.

$ id -nu [number]

3.17.3-1-ARCH # 1 SMP PREEMPT пт 14 ноября 22:56:01 CET 2014 i686 GNU/Linux

Могу подтвердить, что он возвращает соответствующее имя пользователя, если оно существует, на Arch Linux. Я также могу подтвердить, что он не работает на Ubuntu при запуске как обычный пользователь, хотя я не тестировал это как суперпользователь. Он также не работает на Alpine Linux. Возможно, функция безопасности препятствует работе с некоторыми системами.

43
27.01.2020, 19:31

Я понимаю, что это старый вопрос, но вот еще один ответ

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>
0
27.01.2020, 19:31
id | awk '{print $1}' | sed 's:.*(::;s:)$::'
-1
27.01.2020, 19:31

Теги

Похожие вопросы