@ -7,6 +7,20 @@ SYSCONF="${ROOTFS}${SYSCONF}"
export TEXTDOMAINDIR=/usr/share/locale
export TEXTDOMAIN=ublinux_functions
ere_quote_grep() {
# Что экранировать
sed 's/[][\.|$(){}?+*^]/\\&/g' <<< "$*"
# Что не экранировать
#sed 's/[^a-zA-Z0-9=",;/_@#%&<> -]/\\&/g' <<< "$*"
}
ere_quote_sed() {
# Что экранировать
sed 's/[][\.|$(){}!?+*^;/]/\\&/g' <<< "$*"
# Что не экранировать
#sed 's/[^a-zA-Z0-9=",_@#%&<> -]/\\&/g' <<< "$*"
}
# https://en.wikipedia.org/wiki/Crypt_(C)
# https://man.archlinux.org/man/core/libxcrypt/crypt.5.en # /etc/shadow file format
# user:$6$.n.:17736:0:99999:7:::
@ -232,10 +246,10 @@ user_add(){
local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs"
local FILE_DEFAULT_USERADD="${ROOTFS}/etc/default/useradd"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_SHADOW=$(cat ${FILE_SHADOW})
local DATA_FILE_LOGINDEFS=$(cat ${FILE_LOGINDEFS})
local DATA_FILE_DEFAULT_USERADD=$(cat ${FILE_DEFAULT_USERADD})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local DATA_FILE_SHADOW=$(< ${FILE_SHADOW})
local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS})
local DATA_FILE_DEFAULT_USERADD=$(< ${FILE_DEFAULT_USERADD})
[[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+HOME=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_HOME_USER=${BASH_REMATCH[2]:-/home}
[[ ${DATA_FILE_DEFAULT_USERADD} =~ ($'\n'|^)+SHELL=([^$'\n']*)($'\n'|$)+ ]] && local DEFAULT_SHELL_USER=${BASH_REMATCH[2]:-/bin/bash}
@ -422,13 +436,21 @@ user_add(){
|| "${SELECT_HOME}" != "${VOL_FILEP_HOME}" || "${SELECT_SHELL}" != "${VOL_FILEP_SHELL}" ]]; then
#sed "/^${SELECT_USERNAME}:/d" -i "${FILE_PASSWD}"
#printf "%s:%s:%d:%d:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" >> "${FILE_PASSWD}"
sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}"
#sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}"
#sed -e "\$a${SELECT_USERNAME}:${SELECT_PLAINPASSWORD}:${SELECT_UID}:${SELECT_GID}:${SELECT_GECOS}:${SELECT_HOME}:${SELECT_SHELL}" -i "${FILE_PASSWD}"
while [[ ${DATA_FILE_PASSWD} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_PASSWD="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done
[[ ${DATA_FILE_PASSWD} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_PASSWD="${BASH_REMATCH[1]}"
printf "%s\n%s:%s:%d:%d:%s:%s:%s\n" "${DATA_FILE_PASSWD}" "${SELECT_USERNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_GECOS}" "${SELECT_HOME}" "${SELECT_SHELL}" > "${FILE_PASSWD}"
fi
if [[ "${SELECT_PASSWORD}" != "${VOL_FILEPS_PASSWORD}" || "${SELECT_LASTCHANGED}" != "${VOL_FILEPS_LASTCHANGED}" || "${SELECT_MINDAY}" != "${VOL_FILEPS_MINDAY}" || "${SELECT_MAXDAY}" != "${VOL_FILEPS_MAXDAY}" \
|| "${SELECT_WARN}" != "${VOL_FILEPS_WARN}" || "${SELECT_INACTIVE}" != "${VOL_FILEPS_INACTIVE}" || "${SELECT_EXPIRE}" != "${VOL_FILEPS_EXPIRE}" ]]; then
#sed "/^${SELECT_USERNAME}:/d" -i "${FILE_SHADOW}"
#printf "%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" >> "${FILE_SHADOW}"
sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}"
#sed -e "/^${SELECT_USERNAME}:/d" -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}"
#sed -e "\$a${SELECT_USERNAME}:${SELECT_PASSWORD}:${SELECT_LASTCHANGED}:${SELECT_MINDAY}:${SELECT_MAXDAY}:${SELECT_WARN}:${SELECT_INACTIVE}:${SELECT_EXPIRE}:${SELECT_NOUSE}" -i "${FILE_SHADOW}"
while [[ ${DATA_FILE_SHADOW} =~ ^(.*)(^|$'\n')"${SELECT_USERNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_SHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done
[[ ${DATA_FILE_SHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_SHADOW="${BASH_REMATCH[1]}"
printf "%s\n%s:%s:%d:%s:%s:%s:%s:%s:%s\n" "${DATA_FILE_SHADOW}" "${SELECT_USERNAME}" "${SELECT_PASSWORD}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}" "${SELECT_NOUSE}" > "${FILE_SHADOW}"
fi
[[ -z ${VERBOSE} ]] || printf "%s:%s:%d:%d:%s:%s:%s:%d:%s:%s:%s:%s:%s\n" "${SELECT_USERNAME}" "${SELECT_GECOS}" "${SELECT_UID}" "${SELECT_GID}" "${SELECT_PASSWORD}" "${SELECT_HOME}" "${SELECT_SHELL}" "${SELECT_LASTCHANGED}" "${SELECT_MINDAY}" "${SELECT_MAXDAY}" "${SELECT_WARN}" "${SELECT_INACTIVE}" "${SELECT_EXPIRE}"
}
@ -444,10 +466,10 @@ user_add(){
user_del(){
local FILE_PASSWD="${ROOTFS}/etc/passwd"
local FILE_SHADOW="${ROOTFS}/etc/shadow"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local FILE_GROUP="${ROOTFS}/etc/group"
local FILE_GSHADOW="${ROOTFS}/etc/gshadow"
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GROUP=$(< ${FILE_GROUP})
local PARAM="$@"
local SELECT_USERNAME= SELECT_UID=
IFS=: read -r SELECT_USERNAME SELECT_UID NULL <<< "${PARAM}"
@ -512,9 +534,9 @@ group_add(){
local FILE_GROUP="${ROOTFS}/etc/group"
local FILE_GSHADOW="${ROOTFS}/etc/gshadow"
local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs"
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW})
local DATA_FILE_LOGINDEFS=$(cat ${FILE_LOGINDEFS})
local DATA_FILE_GROUP=$(< ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW})
local DATA_FILE_LOGINDEFS=$(< ${FILE_LOGINDEFS})
get_free_gid(){
local PARAM="$@"
local GID_MIN= GID_MAX= GID_NEW=
@ -608,13 +630,23 @@ group_add(){
if [[ "${SELECT_GROUPNAME}" != "${VOL_FILEG_GROUPNAME}" && "${SELECT_PLAINPASSWORD}" != "${VOL_FILEG_PLAINPASSWORD}" || "${SELECT_GID}" != "${VOL_FILEG_GID}" || "${SELECT_MEMBERS}" != "${VOL_FILEG_MEMBERS}" ]]; then
#sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GROUP}"
#printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" >> "${FILE_GROUP}"
sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}"
#sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PLAINPASSWORD}:${SELECT_GID}:${SELECT_MEMBERS}" -i "${FILE_GROUP}"
while [[ ${DATA_FILE_GROUP} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GROUP="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done
[[ ${DATA_FILE_GROUP} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GROUP="${BASH_REMATCH[1]}"
printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GROUP}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GROUP}"
#printf "%s:%s:%d:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}"
fi
if [[ "${SELECT_PASSWORD}" != "${VOL_FILEGS_PASSWORD}" || "${SELECT_ADMINISTRATORS}" != "${VOL_FILEGS_ADMINISTRATORS}" || "${SELECT_MEMBERS}" != "${VOL_FILEGS_MEMBERS}" ]]; then
#sed /^${SELECT_GROUPNAME}:/d -i "${FILE_GSHADOW}"
#printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}" >> "${FILE_GSHADOW}"
sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}"
#sed -e "/^${SELECT_GROUPNAME}:/d" -e "\$a${SELECT_GROUPNAME}:${SELECT_PASSWORD}:${SELECT_ADMINISTRATORS}:${SELECT_MEMBERS}" -i "${FILE_GSHADOW}"
while [[ ${DATA_FILE_GSHADOW} =~ ^(.*)(^|$'\n')"${SELECT_GROUPNAME}:"([^$'\n'])+($'\n'|$)(.*)$ ]]; do DATA_FILE_GSHADOW="${BASH_REMATCH[1]}${BASH_REMATCH[5]}"; done
[[ ${DATA_FILE_GSHADOW} =~ ^(.*)($'\n')+$ ]] && DATA_FILE_GSHADOW="${BASH_REMATCH[1]}"
printf "%s\n%s:%s:%d:%s\n" "${DATA_FILE_GSHADOW}" "${SELECT_GROUPNAME}" "${SELECT_PLAINPASSWORD}" "${SELECT_GID}" "${SELECT_MEMBERS}" > "${FILE_GSHADOW}"
#printf "%s:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}" "${SELECT_MEMBERS}"
fi
[[ -z ${VERBOSE} ]] || printf "%s:%d:%s:%s:%s\n" "${SELECT_GROUPNAME}" "${SELECT_GID}" "${SELECT_MEMBERS}" "${SELECT_PASSWORD}" "${SELECT_ADMINISTRATORS}"
@ -631,9 +663,9 @@ group_add(){
group_del(){
local FILE_GROUP="${ROOTFS}/etc/group"
local FILE_GSHADOW="${ROOTFS}/etc/gshadow"
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GROUP=$(< ${FILE_GROUP})
local FILE_PASSWD="${ROOTFS}/etc/passwd"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local PARAM="$@"
local SELECT_GROUPNAME= SELECT_GID= NULL=
IFS=: read -r SELECT_GROUPNAME SELECT_GID NULL <<< "${PARAM}"
@ -674,11 +706,11 @@ group_del(){
# Пример: user_add_group user-1:1001 wheel,lp,disk
user_add_group(){
local FILE_PASSWD="${ROOTFS}/etc/passwd"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local FILE_GROUP="${ROOTFS}/etc/group"
local FILE_GSHADOW="${ROOTFS}/etc/gshadow"
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW})
local DATA_FILE_GROUP=$(< ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW})
local SELECT_USERNAME_UID_LIST=$1
local SELECT_GROUPS=$2
while IFS= read -r SELECT_USERNAME_UID; do
@ -727,11 +759,11 @@ user_add_group(){
# Пример: user_remove_group user-1:1001 %all
user_remove_group(){
local FILE_PASSWD="${ROOTFS}/etc/passwd"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local FILE_GROUP="${ROOTFS}/etc/group"
local FILE_GSHADOW="${ROOTFS}/etc/gshadow"
local DATA_FILE_GROUP=$(cat ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW})
local DATA_FILE_GROUP=$(< ${FILE_GROUP})
local DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW})
local SELECT_USERNAME_UID_LIST=$1
local SELECT_GROUPS=$2
local SELECT_USERNAME_UID=
@ -792,8 +824,8 @@ get_conf_useradd_from_system(){
local FILE_PASSWD="${ROOTFS}/etc/passwd"
local FILE_SHADOW="${ROOTFS}/etc/shadow"
local FILE_LOGINDEFS="${ROOTFS}/etc/login.defs"
local DATA_FILE_PASSWD=$(cat ${FILE_PASSWD})
local DATA_FILE_SHADOW=$(cat ${FILE_SHADOW})
local DATA_FILE_PASSWD=$(< ${FILE_PASSWD})
local DATA_FILE_SHADOW=$(< ${FILE_SHADOW})
# Загрузить файлы которые совпадают в каталогах /usr/lib/sysusers.d/ и /usr/share/ublinux-sysusers/. И загрузить которые уникальные в /usr/lib/sysusers.d/
local DATA_SYSUSERS=$(cat \
$(comm --nocheck-order -12 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/share/ublinux-sysusers/|;s|$|.sysusers|') \
@ -863,15 +895,15 @@ get_conf_useradd_from_system(){
while IFS= read -r SELECT_PARAM; do
if [[ ${SELECT_PARAM} == "@users" ]]; then
# В с е пользователи кроме системных
UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_USER; do
show_user "${SELECT_USER}"
done < <(awk -F':' -v USER_MIN=${UID_MIN:=1000} -v USER_MAX=${UID_MAX:=65534} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD})
elif [[ ${SELECT_PARAM} == "@systems" ]]; then
# Пользователи системные
UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_USER; do
show_user "${SELECT_USER}"
done < <(awk -F':' -v USER_MIN=${UID_MIN:=500} -v USER_MAX=${UID_MAX:=999} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD})
@ -905,7 +937,7 @@ get_conf_usershadow_from_system(){
FILE_PASSWD="${ROOTFS}/etc/passwd"
FILE_SHADOW="${ROOTFS}/etc/shadow"
FILE_LOGINDEFS="${ROOTFS}/etc/login.defs"
DATA_FILE_SHADOW=$(cat ${FILE_SHADOW})
DATA_FILE_SHADOW=$(< ${FILE_SHADOW})
DATE_STARTUP_SYSTEM=$(date -d "$(cut -f1 -d. /proc/uptime) seconds ago" +'%Y-%m-%d') #"
# Дата когда был установлен пакет и впервые добавлены пользователи
DATE_SYSUSERS=$(stat --printf=%y ${ROOTFS}/usr/share/ublinux-sysusers/README | cut -d' ' -f1)
@ -936,15 +968,15 @@ get_conf_usershadow_from_system(){
while IFS= read -r SELECT_PARAM; do
if [[ ${SELECT_PARAM} == "@users" ]]; then
# В с е пользователи кроме системных
UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_USER; do
show_user "${SELECT_USER}"
done < <(awk -F':' -v USER_MIN=${UID_MIN:=1000} -v USER_MAX=${UID_MAX:=65534} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD})
elif [[ ${SELECT_PARAM} == "@systems" ]]; then
# Пользователи системные
UID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
UID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_UID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_USER; do
show_user "${SELECT_USER}"
done < <(awk -F':' -v USER_MIN=${UID_MIN:=500} -v USER_MAX=${UID_MAX:=999} '$3 >= USER_MIN && $3 <= USER_MAX && $1 != "nobody" { print $1}' ${FILE_PASSWD})
@ -978,8 +1010,8 @@ get_conf_groupadd_from_system(){
FILE_GROUP="${ROOTFS}/etc/group"
FILE_GSHADOW="${ROOTFS}/etc/gshadow"
FILE_LOGINDEFS="${ROOTFS}/etc/login.defs"
DATA_FILE_GROUP=$(cat ${FILE_GROUP})
DATA_FILE_GSHADOW=$(cat ${FILE_GSHADOW})
DATA_FILE_GROUP=$(< ${FILE_GROUP})
DATA_FILE_GSHADOW=$(< ${FILE_GSHADOW})
# Загрузить файлы которые совпадают в каталогах /usr/lib/sysusers.d/ и /usr/share/ublinux-sysusers/. И загрузить которые уникальные в /usr/lib/sysusers.d/
DATA_SYSUSERS=$(cat \
$(comm --nocheck-order -12 <(cd /usr/lib/sysusers.d/ && ls -v1 *.conf | sed "s/\.conf//g") <(cd /usr/share/ublinux-sysusers/ && ls -v1 *.sysusers | sed "s/\.sysusers//g") | sed 's|^|/usr/share/ublinux-sysusers/|;s|$|.sysusers|') \
@ -1011,15 +1043,15 @@ get_conf_groupadd_from_system(){
while IFS= read -r SELECT_PARAM; do
if [[ ${SELECT_PARAM} == "@groups" ]]; then
# В с е группы кроме системных
GID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=1000} -v GROUP_MAX=${GID_MAX:=60000} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP})
elif [[ ${SELECT_PARAM} == "@systems" ]]; then
# Группы системные
GID_MIN=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(cat "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MIN=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MIN[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
GID_MAX=$([[ $(< "${FILE_LOGINDEFS}") =~ [^#[^:blank:]]*SYS_GID_MAX[[:blank:]]+([[:digit:]]+) ]]; echo -n "${BASH_REMATCH[1]}")
while IFS= read -r SELECT_GROUP; do
show_group "${SELECT_GROUP}"
done < <(awk -F':' -v GROUP_MIN=${GID_MIN:=500} -v GROUP_MAX=${GID_MAX:=999} '$3 >= GROUP_MIN && $3 <= GROUP_MAX && $1 != "nobody" { print $1}' ${FILE_GROUP})
@ -1258,8 +1290,8 @@ show_info(){
VIDEO=$(lspci | sed -e '/VGA/!d' -e 's/^.*://')
GLXINFO=$(glxinfo | sed '2,3!d')
AUDIO=$(lspci | sed -e '/Audio/!d' -e 's/^.*://')
CMDLINE=$(cat /proc/cmdline)
VERSION=$(cat /etc/ublinux-release)
CMDLINE=$(< /proc/cmdline)
VERSION=$(< /etc/ublinux-release)
if [ $(cmdline_parameter unionfs) ] ;then
PROF_SIZE=$(df -h / |grep unionfs | awk '{print " ["$5"] total - "$2", free - "$4}')
else