Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908

Пересчить UID и/или GID из слов в цифры

17.03.2018, 19:12. Показов 2589. Ответов 17

Студворк — интернет-сервис помощи студентам
Сразу скажу, я не знаю как это делается, даже теоретически, поэтому прошу не наезжать. В общем есть файл с uid/gid(root, shell,system,user и тд), надо пересчитать или перевести их в цифры. Как?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2018, 19:12
Ответы с готовыми решениями:

You must give (non-root) uid and gid
Поставил ubuntu12.04-x86 apache2 php mysql Поставил Pure-FTPd: sudo apt-get install pure-ftpd-common pure-ftpd Потом попытался...

Winbind неправильно подтягивает UID/GID от AD
Всем добра Есть сервер на WinServ2008R2 на ней стоят Hyper-V VMы. две из них, одинаково настроенные Ubuntu с Samba KRB5 и Winbind,...

Как через curlftpfs примонтировать ресурс для определённых uid и gid?
Делаю по такой команде mount: curlftpfs ftp: //login:passwd@ip/www/ /http/www -o uid=33,gid=33 root@bit:~# id www-data ...

17
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 20:39
Т.е. распарсить файл вида?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 20:43  [ТС]
Рыжий Лис, ну почти. Примерно такие строки
Было
Code
1
2
3
4
5
6
drwxr-xr-x root/root         0 2018-03-07 17:16:30 addon.d/
-rw-r--r-- root/root       690 2008-08-01 12:00:00 addon.d/50-cm.sh
-rw-r--r-- root/root       132 2008-08-01 12:00:00 addon.d/blacklist
-rwxr-xr-x root/root      6709 2018-02-15 06:43:24 addon.d/70-gapps.sh
-rwxr-xr-x root/root      1956 2018-03-07 17:16:30 addon.d/88-busybox.sh
drwxr-xr-x root/root         0 2018-02-15 06:43:22 app/
Стало
Code
1
2
3
4
5
6
drwxr-xr-x 0/0         0 2018-03-07 17:16:30 addon.d/
-rw-r--r-- 0/0       690 2008-08-01 12:00:00 addon.d/50-cm.sh
-rw-r--r-- 0/0       132 2008-08-01 12:00:00 addon.d/blacklist
-rwxr-xr-x 0/0      6709 2018-02-15 06:43:24 addon.d/70-gapps.sh
-rwxr-xr-x 0/0      1956 2018-03-07 17:16:30 addon.d/88-busybox.sh
drwxr-xr-x 0/0         0 2018-02-15 06:43:22 app/
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
17.03.2018, 20:59
Лучший ответ Сообщение было отмечено blackeangel как решение

Решение

Bash
1
2
$ id root
uid=0(root) gid=0(root) группы=0(root),4(adm),6(disk)
Добавлено через 3 минуты
Python
1
2
from pwd import getpwnam
print(getpwnam('root').pw_uid)
1
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 21:00  [ТС]
Рыжий Лис, на Винде например, баша нет. Нужен чисто питоновский код...



Во, точно, где то видел похожее... Спасибо!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.03.2018, 21:05
Цитата Сообщение от blackeangel Посмотреть сообщение
на Винде например, баша нет
На винде также нет файла passwd, который парсят данные функции - getpwnam\getpwuid.
Какой магией можно заставить винду узнать соответствия линуксовых имен пользователей и uid\gid?
На винде свои соответствия, которые к линуксовым отношения не имеют.
Максимум, можно вручную составить табличку соответствий системных имен\uid.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 21:16  [ТС]
Garry Galler, ,а откуда тогда они в tar, например? Там же есть вывод и в буквенном виде, и в числовом. Значит эти данные где то есть либо в виде справочника, либо идёт пересчёт буковок в цифры. Замечу, tar есть и под Винду.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.03.2018, 21:39
Еще раз:
1)
Цитата Сообщение от blackeangel Посмотреть сообщение
uid/gid(root, shell,system,user и тд)
это чисто линуксовая тема. Все данные записаны в спец. базе - файле passwd. Все linux утилиты берут сведения исключительно оттуда. Си функции getpwnam\getpwuid доступны только на linux системах (+ MacOS). Винда про эту базу ничего не знает. По понятным причинам.
У винды своя система идентификации пользователей и uid - все данные хранятся в реестре.
2) Модуль pwd есть только в linux дистрибутивах python. Под виндой такого модуля нет.

Какое отношение tar имеет к этой теме? tar на linux читает данные из атрибутов файла. tar под windows также будет читать их из атрибутов файла.

Добавлено через 1 минуту
Code
1
2
D:\temp>tar -tvf archive.tar
-rw-r--r-- Garry/Администраторы 26 2017-02-11 15:22 1.txt
Добавлено через 38 секунд
О том как перевести буковки в циферки - ему неведомо.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 21:45  [ТС]
Garry Galler, вот незадача
Code
1
2
3
4
tar --numeric-owner -tvf archive.tar
drwxr-xr-x 0/0         0 2018-03-07 17:16:30 addon.d/
-rw-r--r-- 0/0       690 2008-08-01 12:00:00 addon.d/50-cm.sh
-rw-r--r-- 0/0       132 2008-08-01 12:00:00 addon.d/blacklist
Code
1
2
3
4
tar -tvf archive.tar
drwxr-xr-x root/root         0 2018-03-07 17:16:30 addon.d/
-rw-r--r-- root/root       690 2008-08-01 12:00:00 addon.d/50-cm.sh
-rw-r--r-- root/root       132 2008-08-01 12:00:00 addon.d/blacklist
И все это под виндой с отдельно вынесенным tar из cygwin, без установленного cygwin.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.03.2018, 22:14
blackeangel,
Смешно. Вы еще раз прочитайте то, что я написал - может дойдет.
Ваш архив создан под linux - естественно виндовый tar выведет атрибуты файлов так, как они там записаны.
Но он понятия не имеет как их перевести в цифровой uid.
На винде это называется SID - Security Identifier. И они не совпадают с линуксовыми.

Добавлено через 2 минуты
P.S Насчет --numeric-owner - это это уже не UID, а SID.
О чем я уже писал выше.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 22:19  [ТС]
Garry Galler, ещё раз объясняю. Для тех кто не верит. Создаю архив tar под минтом, захожу в Винду набираю
Code
1
tar --numeric-owner -tvf archive.tar
Вижу
Code
1
2
3
drwxr-xr-x 0/0         0 2018-03-07 17:16:30 addon.d/
-rw-r--r-- 0/0       690 2008-08-01 12:00:00 addon.d/50-cm.sh
-rw-r--r-- 0/0       132 2008-08-01 12:00:00 addon.d/blacklist
То же самое с этим же архивом делаю в смете, получаю тот же результат.
Тоже самое видно и без использования numeric-owner.
Совпадение? Не думаю.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.03.2018, 23:02
Для
Цитата Сообщение от blackeangel Посмотреть сообщение
ещё раз объясняю. Для тех кто не
понимает.
1) UID на linux != SID на windows.
2) tar имеет представление о системных UID и SID, которые на обоих системах (linux и windows) являются статическими, то есть закрепленными за строго определенными учетками. И виндовый tar знает, что на linux 0 это root, а root это 0 (Алиса это пудинг. Пудинг это Алиса). Но на винде 0 это нечто совсем иное.
На linux системные uid это uid от 0 и до 100 (соглашение, которое впрочем нифига не соблюдается, например в Red Hat)
На windows системные SID это системные от 0 до 1000 (причем админы начинаются с 500).
На linux root (суперюзер) имеет uid 0, на linux встроенный админ имеет SID 500.
На linux пользователь автоматически получает группу своего же имени (с тем же номером gid), на windows группы строго определены и имеют свою нумерацию SID.
Все учетки не системного характера (пользователи) получают uid\sid выше этих диапазонов и являются динамическими.
И сделать трансфер таких учеток с одной ОС в нумерацию учеток другой ОС - нельзя.
Вот вам для просвещения
-------------------------------
Вы все еще не понимаете что tar - не при чем касательно вашей темы?
Потому что никаких соответствий между учетками обычных пользователей linux и их uid - на windows выполнить нельзя.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 23:16  [ТС]
Garry Galler, сами же говорите, что tar берет атрибуты файла из архива. Атрибут там один (для конкретной задачи),занимает он там n байт. Но, возвращаюсь к тому что у нас в задаче, он может отображать один и тот же атрибут в двух видах, и на систему ему абсолютно наплевать. Теперь понятно в какую сторону мыслительный процесс идёт? Не надо привязываться к системе, это очень плохо. К тому же, вы сами написали
виндовый tar знает, что на linux 0 это root, а root это 0
Что собственно уже конвертирование.
Мне не надо запаковывать в одной системе и получать права от другой. Нет, мне надо лишь в текстовом файле пересчитать unix юзер/группа из буквенных в числовые. Не больше не меньше.
Так что цитата выше, то есть ваши слова, подтверждают что это возможно.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.03.2018, 23:26
Насчет использования tar атрибутов файла я ошибся:
GNU tar и, возможно, другие версии tar , также (кроме цифровых uid\gid) сохраняют имена пользователей и групп, если не используется --numeric-owner
Так что ничего никуда не конвертируется: что он сохранил в своем архиве, то и выдает.

Цитата Сообщение от blackeangel Посмотреть сообщение
мне надо лишь в текстовом файле пересчитать unix юзер/группа из буквенных в числовые
Ну дак и делайте это на linux, если файл из linux. На windows вы это сможете сделать только для предопределенных системных uid\gid, c помощью вручную составленной таблички соответствий.
Цитата Сообщение от blackeangel Посмотреть сообщение
Не надо привязываться к системе
Можно и не привязываться, но знать как там все устроено нужно. Я - знаю.
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
17.03.2018, 23:31  [ТС]
Garry Galler, пруф первой цитаты можно?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.03.2018, 00:11
В эпоху гугла спрашивать ссылки?
http://mqserver.com/tar-x.html
0
 Аватар для blackeangel
19 / 10 / 1
Регистрация: 22.07.2015
Сообщений: 908
18.03.2018, 00:17  [ТС]
Garry Galler, каждый спрашивает гугла одно и тоже по разному, и найтись может не то.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
18.03.2018, 00:45
Можно и не у гугла спрашивать: достаточно заглянуть в исходники tar .
Файл create.c: 928 строка.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (archive_format == V7_FORMAT || numeric_owner_option)
    {
      /* header->header.[ug]name are left as the empty string.  */
    }
  else
    {
      if (uname)
    st->uname = xstrdup (uname);
      else
    uid_to_uname (st->stat.st_uid, &st->uname);
 
      if (gname)
    st->gname = xstrdup (gname);
      else
    gid_to_gname (st->stat.st_gid, &st->gname);
Думаю, тут все красноречиво.
Как и поиск grep'ом упоминаний функций для преобразования uid => gid и gid=>uid:
Code
1
2
3
4
5
6
>grep -n "getpw*" .\tar-latest\tar-1.30\src\*.c
\tar-latest\tar-1.30\src\map.c:192:  struct passwd *pw = getpwnam (name);
\tar-1.30\src\misc.c:1179:  size_t alignment = getpagesize ();
\tar-1.30\src\names.c:474:      passwd = getpwuid (uid);
\tar-latest\tar-1.30\src\names.c:534:      passwd = getpwnam (uname);
\tar-latest\tar-1.30\src\xheader.c:296:   pptr = umaxtostr (getpid (), pidbuf);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2018, 00:45
Помогаю со студенческими работами здесь

(`col1` = 'uid' OR `col2` = 'uid' OR `col3`= 'uid' ) против (`col1` OR `col2` OR `col3`) = 'uid'
Добрый вечер. (`col1` = 'uid' OR `col2` = 'uid' OR `col3`= 'uid' ) // работает, но запись длинновата (`col1` OR `col2` OR `col3`)...

Использование библиотеки STL , контейнер string. Дан массив слов.Надо удалить все цифры из слов
#include "StdAfx.h" #include <string> #include <iostream> #include <algorithm> using namespace std; int main() { string str...

При открытии браузера google chrom или mozila открывается опера и вкладка http://yamdex.net/?zid=117594701&uid=5d3a9cf4226de8d240b3ed4a47b696a6
Здравствуйте! Помогите пожалуйста решить эту проблему! Все это произошло после закачки и установки сомнительного файла Adobe Pfotoshop. То...

Нужно спарсить значение gid
Нужно спарсить значение gid <a class="fl_l group_share_club " title="Отправить в сообщество или другу"...

Просадки fps в игре gid of war
Подскажите пожалуйста, из за чего возможны просадки? В основном ФПС держит нормальный, 50-70, на средних. В боях и всяких заворушках не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru