Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Права на папку и файлы после копирования  (Прочитано 1142 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
Есть папка, например /usr/share/.pki -в ней есть файлы и ее владельцем является root.
Есть скрипт который копирует даную папку в /home/user1, /home/user2 и т. д.
После копирования владельцем является root.
Нужно сделать так чтобы после копирования папки с файлами владельцем папки и файлов в ней ставал пользователь которому были скопированы файлы(другими словами владельцем папки /home/user1/.pki должен стать тот кто является владельцем папки /home/user1).

Как это можно реальзовать?

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12075
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
man chown
man chmod
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
man chown
man chmod

Уже все перечитал - там не нахожу такой инфы. Там есть просто как сменить владельца, тоисть вручную.
А мне нужно чтобы это было автоматом при копировании(нужен скрипт или чтото подобное), так как мне нужно такое копирование делать на более чем 500 ПК и на каждом по 5-10 пользователей.

Оффлайн Luca Brasi

  • Активист
  • *
  • Сообщений: 704
  • typical engineer
    • Просмотр профиля
ну да, скрипт нужен. С использованием вышеупомянутой команды . Просто так ведь 'автоматом' работать не будет.
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
ну да, скрипт нужен. С использованием вышеупомянутой команды . Просто так ведь 'автоматом' работать не будет.

Как определить скриптом кто владелец папки /home/user1 ? Чтобы потом взять оттуда даные.

Както так я получу кто владелец(пользователь и группа) папки /home/user1 ?

#!/bin/bash

owner=`ls -ld /home/user1`
user=`echo $owner | awk '{print $3}'`
echo $user

group=`echo $owner | awk '{print $4}'`
echo $group

Как теперь это прикрутить так чтобы менялся владелец, чтоб оно цыклично работало для /home/user1, /home/user2 и т. д.

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
petro25,
Вы "поехали" немного не туда…
  • Для вывода атрибутов файла существует команда stat (использовать ls да и еще и + awk совсем не "Ъ")
  • Вы проводите копирование под root'ом, поэтому и собственником он и является по умолчанию. Примените копирование от имени пользователя (используя sudo -u $(stat "$TARGET_DIR" -c %u) cp --no-preserve=ownership -R /usr/share/.pki "$TARGET_DIR")
  • у команды chown существует опция --reference=ЭФАЙЛ (использовать владельца и группу ЭФАЙЛа, вместо указанных значений ВЛАДЕЛЕЦ:ГРУППА (иногда полезно прочитать man chown до конца))
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
petro25,
Вы "поехали" немного не туда…
  • Для вывода атрибутов файла существует команда stat (использовать ls да и еще и + awk совсем не "Ъ")
  • Вы проводите копирование под root'ом, поэтому и собственником он и является по умолчанию. Примените копирование от имени пользователя (используя sudo -u $(stat "$TARGET_DIR" -c %u) cp --no-preserve=ownership -R /usr/share/.pki "$TARGET_DIR")
  • у команды chown существует опция --reference=ЭФАЙЛ (использовать владельца и группу ЭФАЙЛа, вместо указанных значений ВЛАДЕЛЕЦ:ГРУППА (иногда полезно прочитать man chown до конца))

Тут впринцыпе почти все что мне нужно. Большое спасибо.

Но, в этом случае у нас в переменной $TARGET_DIR должно быть имя папки из /home. Как сделать так чтобы посмотреть список папок в /home и поочереди их подставлять в переменную $TARGET_DIR ?

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Вы про циклы слышали?
Код: Bash
  1. for TARGET_DIR in "$HOME/"*
  2. do
  3.     if [ -d "$TARGET_DIR" ]
  4.     then
  5.         ... # что там Вы хотите делать
  6.     fi
  7. done
Другой вариант использовать мощь команды find
Код: Bash
  1. sudo find /home/* -prune -type d -exec bash -c 'sudo -u \#$(stat "{}" -c %u) cp --no-preserve=ownership -R /usr/share/.pki "{}"' \;
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн petro25

  • Автор темы
  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
Спасибо огромное. Все работает, чуть подпилил под себя.

Вот что у меня получилось.

!/bin/bash
#Copy cert8.db for FF in users profile
find /home -name "cert8.db" -exec cp /usr/lib/firefox/browser/defaults/profile/cert8.db {} \;

#Copy .pki  folder and certs to users home
for TARGET_DIR in /home/*
do
#Remove exists folder .pki
    if [ -d "$TARGET_DIR" ]
    then
     sudo -u $(stat $TARGET_DIR -c %U) rm -rf $TARGET_DIR/.pki
    fi

#Copy etaln .pki folder to users home
    if [ -d "$TARGET_DIR" ]
    then
       sudo -u $(stat $TARGET_DIR -c %U) cp -R /etc/skel/.pki $TARGET_DIR
    fi
done

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
  • Для удаления не нужно громоздить sudo -u $(stat $TARGET_DIR -c %U), удалит одним rm -rf $TARGET_DIR/.pki
  • Зачем Вы разделили на 2 проверки, если одно и то же проверяете? Сделали проверку —> rm, потом cp
  • cp имеет опцию --remove-destination, так что можно предварительно и не удалять (если названия файлов|папок одинаковые)
  • если всё же хочется провести "чистку" рекомендую сделать это ДО цикла 'rm' -rf /home/*/.pki будет гораздо быстрее
« Последнее редактирование: 05 Март 2015, 18:17:32 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.098 секунд. Запросов: 24.