futtathatók listázása

A script listázza ki abszolút elérési útvonallal a PATH‐on található file‐ok közül azokat, amelyeket a paraméterben megadott felhasználó futtathat akár tulajdonos jogán, akár a csoportjogán, akár mindenkimás jogán.

valami tipp esetleg?

nekem eddig ez jutott eszembe:


MyPATH=`echo $PATH | tr ":" " "`
paramgroup=`id -g $1`
GROUP=`ls -la $i | awk '{ print $4 }'`

for i in $MyPATH
do
if [ `ls -la $i | awk '{ print $3 }'` == $1 || `id -g $1` = `ls -la $i | awk '{ print $4 }'`];
then
echo "egyezik $ 1-el" ;
else
echo "nem egyezik $ 1-el"
fi
done

exit 0

ez az if lenne a lényeg de nem jó, és nem tom hogy hogy kellene jól megcsinálni

if [ `ls -la $i | awk '{ print $3 }'` == $1 || `id -g $1` = `ls -la $i | awk '{ print $4 }'`];

Hozzászólások


for DIR in ${PATH//:/ }; do

find $DIR -type f -and -user $USER -and -executable -or -type f -and -group $GROUP -and -executable -or -type f -and -executable

done

--
maszili

Gondoltam milyen kis egyszeru feladat, aztan az alabbi lett belole. De ez mar teljesiti a specifikaciot. :-)

A for ciklus ahhoz kell, hogy konvertaljuk a $PATH elemeit abszolut eleresi utvonalakra. A '-executable'-t azert melloztem, mert ahhoz kene egy 'su', hogy parameterezheto legyen a felhasznalo nevevel, illetve az ACL-eket is mashogy kezeli. Ez a megoldas csak a file-okat (linkeket nem) listazza.


#! /bin/bash

i=0
for DIR in ${PATH//:/ }
do
  cd "$DIR"
  DIRS[$((i++))]=$(pwd)
  cd - >/dev/null
done

GIDS="$(id -G $1 | sed -e 's/ / -o -gid /g' -e 's/^/\( -gid /' -e 's/$/ \)/')"

find "${DIRS[@]}" -maxdepth 1 -type f \( \
  \( -user "$1" -perm -u=x \) -o \
  \( ! -user "$1" $GIDS -perm -g=x \) -o \
  \( ! -user "$1" \( ! $GIDS \) -perm -o=x \) \
  \)