Войдите на машину, которой нужны учетные записи. Станьте пользователем root
.
sudo -i
Став root
, добавьте пользователей и установите пароли. Создайте столько пользователей, сколько необходимо.
adduser $username
passwd $username
Для каждого пользователя, который должен иметь возможность стать пользователем root
, добавьте пользователя в правую группу sudo
. Это колесо
на RHEL.
usermod -aG wheel $username
Убедитесь, что ваша конфигурация sudo
позволяет группе стать root
.
visudo
Вы увидите две конфигурации для группы wheel
, как показано ниже.
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
Раскомментируйте один из параметров конфигурации и сохраните файл. Например, чтобы настроить sudo
, чтобы каждый пользователь вводил свой пароль, чтобы стать root
или выполнять команду как root
, используйте следующую строку.
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
Итак, вы создали m обычных пользователей и n привилегированных пользователей, которые могут стать root
или выполнять команду как root
.
Если вы хотите найти обычные файлы, возраст которых превышает 10 дней и которые последний раз изменялись в субботу (в часовом поясе пользователя, запустившего сценарий), с помощью GNU инструменты (и вы, похоже, работаете в системе GNU, поскольку используете специфичную для GNU опцию для date
и оболочки GNU), вы можете сделать:
find . -type f -mtime +10 -printf '%Tu%p\0' |
sed -zn 's/^6//p' |
tr '\0' '\n'
Хотя в конечном итоге GNU добавил (но другой ) stat
команда в начале 2000-х для запроса метаданных файла более гибким в сценариях способом, чем с ls
, большая часть ее функциональности уже была в GNU find
задолго до этого. и с гораздо лучшим интерфейсом, чем у GNU stat
.
Большинство других реализаций stat
могут дать вам время модификации в любом формате, GNU stat
не может (причина, по которой вы в конечном итоге прибегаете к комбинации ls
и GNU date
в вашем вопросе, я полагаю), но GNU find
может (с GNU date
вы также можете использовать date -r " $ file "+% u
).
Выше % T
- время модификации с использованием указанного формата strftime
. % Вт
- день недели в виде числа от 1 (понедельник) до 7.Это лучше в сценариях, чем использование % a
/ % A
, зависящих от локали.
Мы печатаем это число, за которым следует путь к файлу, с разделителями NUL, чтобы можно было обрабатывать имена файлов с символами новой строки, и по конвейеру к sed
, чтобы выбрать записи, начинающиеся с 6
(и удалите для них 6). Затем при выводе NUL переводятся в новую строку.
-z
был добавлен в GNU sed
в 2012 году. Если ваш sed
старше, вы можете изменить приведенное выше значение на:
find . -type f -mtime +10 -printf '%Tu%p\0' |
tr '\0\n' '\n\0'
sed -n 's/^6//p' |
tr '\0' '\n'
Обычно вы не хочу повторять вывод find
, как вы делаете в своем вопросе . Если вы хотите перебрать файлы, найденные с помощью find
в bash
, вам лучше сделать:
while IFS=/ read -d '' -ru3 day file; do
case $day in
(6) printf '"%s" was last modified on a Saturday\n' "$file";;
esac
done 3< <(find . -type f -mtime +10 -printf '%Tu/%p\0')
В zsh
вы также можете сделать:
zmodload zsh/stat # for zsh's stat builtin
last_modified_on_a_saturday() {
local -A stat
stat -LF %u -H stat -- ${1-$REPLY} &&
((stat[mtime] == 6))
}
for file in **/*(ND.m+10+last_modified_on_a_saturday); do
do-something with $file
done
Вы можете значительно упростить ситуацию, используя команду stat
вместо ls
.
#!/bin/bash
for i in $(find . -type f -mtime +10 );
do
echo "$i"
echo "ligne dans la boucle";
#il faut verifier si il a ete créer un samedi ou pas;
#///////////////////////
#jour=`ls -lrt $i| awk '{print $7}'`;
#mois=`ls -lrt $i| awk '{print $6}'`;
#annee=`ls -lrt $i| awk '{print $8}'`;
#requette="date -d '$mois $jour $annee' +'%a %u %A'";
#//////////////////////////////
# get the month, year, and day from stat-ing the file
mois_jour_annee=`stat -c '%y' "$i" | cut -d' ' -f1`
# and then...
requette="date -d '${mois_jour_annee}' +'%a %u %A'";
echo "$requette";
test=$(eval "$requette");
echo "$test";
echo " ";
done