Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/ksh
- # vypis usage
- usage() {
- echo "procinfo analyzes a given program and prints required information
- usage: procinfo [options] program [args...]
- options:
- -e prints executed programs
- -w regexp prints files opened for write access with a name matching regexp
- -r regexp prints files opened for read access with a name matching regexp
- -v regexp prints files opened for write access with a name not matching regexp
- -b regexp prints files opened for read access with a name not matching regexp
- -t file do not run strace/truss, use file as its output";
- exit 1;}
- if [[ "$1" == "" ]]; then usage; fi
- # defaultni nastaveni flagu
- EFLAG=""
- WFLAG=""
- RFLAG=""
- VFLAG=""
- BFLAG=""
- TFLAG=""
- TRAPFLAG=""
- # zpracovani parametru pomoci utility getopts
- while getopts :w:r:v:b:t:e opt; do
- case $opt in
- e) EFLAG="-e" ;;
- w) WFLAG="-w"
- WREGEXP=${OPTARG} ;;
- r) RFLAG="-r"
- RREGEXP=${OPTARG} ;;
- v) VFLAG="-v"
- VREGEXP=${OPTARG} ;;
- b) BFLAG="-b"
- BREGEXP=${OPTARG} ;;
- t) TFLAG="-t"
- LOGFILE=${OPTARG} ;;
- \?) echo "Invalid argument: -$OPTARG" >&2
- exit 1 ;;
- :) echo "Write ./procinfo to get help." >&2
- exit 1 ;;
- esac
- done
- shift $(($OPTIND - 1))
- ANALYZED="$@"
- TMPFILE=`mktemp -t tmpfile.XXXX`
- if [[ $? -ne 0 ]]; then echo "Not successful when creating a tempfile..." >&2
- exit 1
- fi
- # trap konstrukce
- trap 'TRAPFLAG="trapped"; rm -f $TMPFILE >/dev/null 2>&1; exit 0' INT TERM EXIT
- # zjisteni OS a nasledne reakce analyze-utilit
- OSTYPE=$(uname)
- if [[ "$TFLAG" == "" ]]; then
- if [[ "$OSTYPE" = "Linux" ]];
- then
- strace -f -o $TMPFILE $ANALYZED > /dev/null 2>&1
- elif [[ "$OSTYPE" = "FreeBSD" ]] || [ "$OSTYPE" = "SunOS" ];
- then
- truss -f -o $TMPFILE $ANALYZED > /dev/null 2>&1
- else
- echo "Unknown operating system. Write ./procinfo to get help."; exit 1
- fi
- fi
- # chovani dle aktivity -t parametru
- if [[ "$TFLAG" != "" ]]; then
- SOUBOR=`cat $LOGFILE`
- else
- SOUBOR=`cat $TMPFILE`
- fi
- # zpracovani vylucnych parametru
- if [[ "$VFLAG" != "" && "$WFLAG" != "" ]]; then
- echo "Exclusive parameters given, write ./procinfo to get help."; exit 1
- fi
- if [[ "$RFLAG" != "" && "$BFLAG" != "" ]]; then
- echo "Exclusive parameters given, write ./procinfo to get help."; exit 1
- fi
- SOUBOR2=$(echo "$SOUBOR" | awk '{
- ufound = match($0,"<unfinished ...>")
- if (ufound != 0)
- {
- pid = $1
- parray[$pid] = $0
- }
- rfound = match($0,"resumed>")
- if (rfound != 0)
- {
- if (pid == $1)
- { print parray[$pid], $0 }
- }
- { print $0 }
- }')
- # hlavni cast skriptu - vyhledavani a orezavani
- if [[ "$EFLAG" != "" ]]; then echo "=== Run processes ==="
- VYSTUP=$(echo "$SOUBOR2" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$\|unfinished>$" | sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' |
- grep "^execve" | sed '/execve/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
- if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
- fi
- if [[ "$WFLAG" != "" ]]; then echo "=== Written files ==="
- VYSTUP=$(echo "$SOUBOR" | grep "$WREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
- sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open\|^creat" | grep "O_WRONLY\|O_RDWR\|O_CREAT\|S_I" |
- sed '/[open\|creat]/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
- if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
- fi
- if [ "$VFLAG" != "" ]; then echo "=== Written files ==="
- VYSTUP=$(echo "$SOUBOR" | grep -v "$VREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
- sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open\|^creat" | grep "O_WRONLY\|O_RDWR\|O_CREAT\|S_I" |
- sed '/[open\|creat]/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
- if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
- fi
- if [[ "$RFLAG" != "" ]]; then echo "=== Read files ==="
- VYSTUP=$(echo "$SOUBOR" > LOGRR | grep "$RREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
- sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open" | grep "O_RDONLY\|O_RDWR" |
- sed '/open/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
- if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
- fi
- if [ "$BFLAG" != "" ]; then echo "=== Read files ==="
- VYSTUP=$(echo "$SOUBOR" | grep -v "$BREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
- sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open" | grep "O_RDONLY\|O_RDWR" |
- sed '/open/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
- if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
- fi
- # vymazani docasneho souboru
- if [[ "$TFLAG" != "" && "$TRAPFLAG" == "" ]]; then
- rm -f $TMPFILE
- fi
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement