Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:написанные программы / задание №3 — 4 / lab3
.odt
Лабораторная работа № 3
Работа с правами доступа
Работу выполнил
студент гр. 2100
Голубцов Евгений
Работу принял
Дергачёв А. М.
2008
Задание
Написать программу, выдающую список пользователей, имеющих право выполнения заданного файла.
Текст программы
#!/bin/bash echo "Please enter file name:" read name if test -f "$name" then : else echo "File doesn't exist!" echo "Searching for such directory..." if test -d "$name" then sw=1 else echo "No such directory was found!" exit 0 fi fi if [ "$sw" = "1" ] then comm="ld" else comm="l" fi u=$( ls -$comm "$name" 2>>errlog3 | awk '{print substr($1,4,1)}') g=$( ls -$comm "$name" 2>>errlog3 | awk '{print substr($1,7,1)}') o=$( ls -$comm "$name" 2>>errlog3 | awk '{print substr($1,10,1)}') echo $u echo $g echo $o if [[ "$u" = "x" && "$g" = "x" && "$o" = "x" ]] then (cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '{print $1}' elif [[ "$u" = "x" && "$g" = "x" && "$o" = "-" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') grouprtemp=$( ls -$comm "$name" | awk '{print $4}') grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' ) echo $grouprtempid1 1>tmp3_1 grouprtempid=`awk '{print $1}' tmp3_1` rm tmp3_1 echo "root" (cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '$4~'"/^$grouprtempid"'$/{print $1}' | awk '$1!~/^root$/ {print $1}' (cat /etc/group & niscat group.org_dir) | awk -F: '$3~'"/^$grouprtempid"'$/{print $4}' elif [[ "$u" = "x" && "$g" = "-" && "$o" = "x" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') grouprtemp=$( ls -$comm "$name" | awk '{print $4}') grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' ) echo $grouprtempid1 1>tmp3_1 grouprtempid=`awk '{print $1}' tmp3_1` rm tmp3_1 echo $usertemp (cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '$4!~'"/^$grouprtempid"'$/{print $1}' elif [[ "$u" = "x" && "$g" = "-" && "$o" = "-" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') echo "root" echo $usertemp elif [[ "$u" = "-" && "$g" = "x" && "$o" = "x" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') (cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '$1!~'"/^$usertemp"'$/{print $1}' elif [[ "$u" = "-" && "$g" = "x" && "$o" = "-" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') grouprtemp=$( ls -$comm "$name" | awk '{print $4}') grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' ) #grouprtempid2=$((cat niscatgroup) | awk -F: "/^$grouprtemp/"'{print $3}') echo $grouprtempid1 1>tmp3_1 grouprtempid=`awk '{print $1}' tmp3_1` rm tmp3_1 #echo $grouprtempid find=`(cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '$4~'"/^$grouprtempid"'$/{print $1}' | awk -F: '$1!~'"/^$usertemp"'$/{print $1}'` declare -a massive i=0 for findname in $find do massive[$i]="$findname" let "i += 1" done numberofel=${#massive[@]} i=0 while [ "$i" -ne "$numberofel" ] do if [ ${massive[$i]} = "root" ] then level=1 else echo ${massive[$i]} fi let "i +=1" done if [ "level" != "1" ] then echo "root" fi (cat /etc/group & niscat group.org_dir) | awk -F: '$3~'"/^$grouprtempid"'$/{print $4}' 1>tmp3_2 testing=`cat tmp3_2` if [ "$usertemp" = "$testnig" ] then (cat /etc/group & niscat group.org_dir) | awk -F: '$3~'"/^$grouprtempid"'$/{print $4}' fi elif [[ "$u" = "-" && "$g" = "-" && "$o" = "x" ]] then usertemp=$( ls -$comm "$name" | awk '{print $3}') grouprtemp=$( ls -$comm "$name" | awk '{print $4}') grouprtempid1=$((cat /etc/group & niscat group.org_dir) | awk -F: "/^$grouprtemp/"'{print $3}' ) echo $grouprtempid1 1>tmp3_1 grouprtempid=`awk '{print $1}' tmp3_1` rm tmp3_1 (cat /etc/passwd & niscat passwd.org_dir ) | awk -F: '$4!~'"/^$grouprtempid"'$/{print $1}' | awk -F: '$1!~'"/^$usertemp"'$/{print $1}' elif [[ "$u" = "-" && "$g" = "-" && "$o" = "-" ]] then echo "root"
fi