Показать статистику
0 голосов
от (130 баллов)
редактировать от

Мне нужно поменять местами группы одной зоны с помощью bash

сбиваются пользователи и их группы, например:

drwx------   2 Ted   Alex  62 May  4 02:01 Alex
drwx------   2 Mason Alex  62 May  4 02:01 Mason
drwx------   2 Alex  Alex  62 May  4 02:01 Ted

а скрипт должен из выстроить правильно: 

drwx------   2 Alex   Alex  62 May  4 02:01 Alex
drwx------   2 Mason Mason  62 May  4 02:01 Mason
drwx------   2 Ted  Ted  62 May  4 02:01 Ted
641 просмотров 2 ответов
от (17.4тыс. баллов)
+1

Можете показать пример что бы лучше понять вашу конкретную задачу?

Например, есть файл /etc/group.

Формат файла:

nobody:*:-2:
nogroup:*:-1:
wheel:*:0:root
daemon:*:1:root
kmem:*:2:root
sys:*:3:root
tty:*:4:root
operator:*:5:root
mail:*:6:_teamsserver
bin:*:7:

Что именно в таком файле нужно изменить?

от (130 баллов)
0

сбиваются пользователи и их группы, например:

пользователь:guest-группа:user
пользователь:admin-группа:guest
пользователь:user-группа:admin


а скрипт должен из выстроить правильно: 

пользователь:guest-группа:guest
пользователь:admin-группа:admin     
пользователь:user-группа:user
от (17.4тыс. баллов)
0
Скрипт сейчас сделаем. Но перед тем как давать скрипт, хочу уточнить - почему группы сбиваются? Вы перешли с локальной автризации на какой нибудь LDAP? Каким образом возникла такая проблема?
от (130 баллов)
0
Мы и не уходили с локали, это часть прохождения в лабе! До меня не как не может дойти концепция.
Буду очень признателен любой помощи.
от (17.4тыс. баллов)
0

Есть несколько вариантов решения этой задачи. Предлагаю самый простой (но самый действенный и быстрый).

#!/bin/bash

cat myfile.txt  | cut -d ':' -f 2 | sort > group.tmp
cat myfile.txt  | cut -d ':' -f 3 | sort > user.tmp

paste group.tmp user.tmp > result.txt

Пару слов о том что происходит в скрипте.

Сначала, я создал файл myfile.txt на основе вашего образца:

пользователь:guest-группа:user
пользователь:admin-группа:guest
пользователь:user-группа:admin

Далее, через команду cat перенаправил содержимое в cut что бы выделить группу и юзера и сохранил вывод в двух временных файлах group.tmp и user.tmp

Так как имя пользователя является частью имени группы (guest-группа:user), то я отсортировал вывод в алфавитном порядке через sort.

Далее, осталось только соединить построчно оба временных файла, что я и сделал с помощью утилиты paste в файле result.txt

В итоге вывод моего скрипта будет таким: 

admin-группа admin
guest-группа guest
user-группа user

Вроде, это то что вам нужно? 

Если нужен иной подход - напишите, есть масса способов добиться такого же результата иначе.

P.S. если вам нужно слово "пользователь" вначале каждой строки, то достаточно добавить в скрипт sed конструкцию: 

paste group.tmp user.tmp | sed s'/.*/пользователь:&/'g  > result.txt

После чего финальная версия скрипта будет:

#!/bin/bash

cat myfile.txt  | cut -d ':' -f 2 | sort > group.tmp
cat myfile.txt  | cut -d ':' -f 3 | sort > user.tmp

paste group.tmp user.tmp | sed s'/.*/пользователь:&/'g > result.txt

2 Ответы

+1 голос
от (17.4тыс. баллов)
#!/bin/bash

cat myfile.txt  | cut -d ':' -f 2 | sort > group.tmp
cat myfile.txt  | cut -d ':' -f 3 | sort > user.tmp

paste group.tmp user.tmp | sed s'/.*/пользователь:&/'g > result.txt
0 голосов
от (4.5тыс. баллов)

Чтобы исправить права доступа для файлов, вы можете использовать следующий bash-скрипт:

#!/bin/bash

# Замените путь на путь к вашему каталогу с файлами
dir_path="/path/to/your/directory"

# Обход всех подкаталогов
for subdir in "$dir_path"/*; do
    # Получение имени подкаталога без пути
    subdir_name=$(basename "$subdir")
    
    # Изменение владельца и группы для подкаталога
    chown "$subdir_name:$subdir_name" "$subdir"
done

Сохраните содержимое скрипта в файле, например, fix_permissions.sh. Затем сделайте файл исполняемым и запустите его:

chmod +x fix_permissions.sh
./fix_permissions.sh

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

Обратите внимание, что для выполнения команды chown вам может потребоваться root-доступ. Если это так, запустите скрипт с sudo:  

sudo ./fix_permissions.sh
...