Advertisement
Guest User

procinfoksh

a guest
Mar 25th, 2010
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.41 KB | None | 0 0
  1. #!/bin/ksh
  2. # vypis usage
  3. usage() {
  4. echo "procinfo analyzes a given program and prints required information
  5. usage: procinfo [options] program [args...]
  6. options:
  7. -e        prints executed programs
  8. -w regexp prints files opened for write access with a name matching regexp
  9. -r regexp prints files opened for read access with a name matching regexp
  10. -v regexp prints files opened for write access with a name not matching regexp
  11. -b regexp prints files opened for read access with a name not matching regexp
  12. -t file   do not run strace/truss, use file as its output";  
  13. exit 1;}
  14.  
  15. if [[ "$1" == "" ]]; then usage; fi
  16.  
  17. # defaultni nastaveni flagu
  18. EFLAG=""
  19. WFLAG=""
  20. RFLAG=""
  21. VFLAG=""
  22. BFLAG=""
  23. TFLAG=""
  24. TRAPFLAG=""
  25.  
  26. # zpracovani parametru pomoci utility getopts
  27. while getopts :w:r:v:b:t:e opt; do
  28.   case $opt in
  29.     e)  EFLAG="-e" ;;
  30.     w)  WFLAG="-w"
  31.      WREGEXP=${OPTARG} ;;
  32.     r)  RFLAG="-r"
  33.      RREGEXP=${OPTARG} ;;
  34.     v)  VFLAG="-v"
  35.      VREGEXP=${OPTARG} ;;
  36.     b)  BFLAG="-b"
  37.      BREGEXP=${OPTARG} ;;
  38.     t)  TFLAG="-t"
  39.         LOGFILE=${OPTARG} ;;
  40.     \?) echo "Invalid argument: -$OPTARG" >&2
  41.         exit 1 ;;
  42.     :)  echo "Write ./procinfo to get help." >&2
  43.         exit 1 ;;
  44.   esac
  45. done
  46.  
  47. shift $(($OPTIND - 1))
  48. ANALYZED="$@"
  49.  
  50. TMPFILE=`mktemp -t tmpfile.XXXX`
  51. if [[ $? -ne 0 ]]; then echo "Not successful when creating a tempfile..." >&2
  52. exit 1
  53. fi
  54.  
  55. # trap konstrukce
  56. trap 'TRAPFLAG="trapped"; rm -f $TMPFILE >/dev/null 2>&1; exit 0' INT TERM EXIT
  57.  
  58. # zjisteni OS a nasledne reakce analyze-utilit
  59. OSTYPE=$(uname)
  60.  
  61. if [[ "$TFLAG" == "" ]]; then
  62.   if [[ "$OSTYPE" = "Linux" ]];
  63.   then
  64.     strace -f -o $TMPFILE $ANALYZED > /dev/null 2>&1
  65.   elif [[ "$OSTYPE" = "FreeBSD" ]] || [ "$OSTYPE" = "SunOS" ];
  66.   then
  67.     truss -f -o $TMPFILE $ANALYZED > /dev/null 2>&1
  68.   else
  69.     echo "Unknown operating system. Write ./procinfo to get help."; exit 1
  70.   fi
  71. fi
  72.  
  73. # chovani dle aktivity -t parametru
  74. if [[ "$TFLAG" != "" ]]; then
  75.   SOUBOR=`cat $LOGFILE`
  76. else
  77.   SOUBOR=`cat $TMPFILE`
  78. fi
  79.  
  80. # zpracovani vylucnych parametru
  81. if [[ "$VFLAG" != "" && "$WFLAG" != "" ]]; then
  82. echo "Exclusive parameters given, write ./procinfo to get help."; exit 1
  83. fi
  84.  
  85. if [[ "$RFLAG" != "" && "$BFLAG" != "" ]]; then
  86. echo "Exclusive parameters given, write ./procinfo to get help."; exit 1
  87. fi
  88.  
  89. SOUBOR2=$(echo "$SOUBOR" | awk '{
  90. ufound = match($0,"<unfinished ...>")
  91. if (ufound != 0)
  92. {
  93.  pid = $1
  94.  parray[$pid] = $0
  95. }
  96. rfound = match($0,"resumed>")
  97. if (rfound != 0)
  98. {
  99.  if (pid == $1)
  100.    { print parray[$pid], $0 }
  101. }
  102. { print $0 }
  103. }')
  104.  
  105. # hlavni cast skriptu - vyhledavani a orezavani
  106. if [[ "$EFLAG" != "" ]]; then echo "=== Run processes ==="
  107. VYSTUP=$(echo "$SOUBOR2" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$\|unfinished>$" | sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' |
  108. grep "^execve" | sed '/execve/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
  109. if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
  110. fi
  111.  
  112. if [[ "$WFLAG" != "" ]]; then echo "=== Written files ==="
  113. VYSTUP=$(echo "$SOUBOR" | grep "$WREGEXP" |  grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
  114. sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open\|^creat" | grep "O_WRONLY\|O_RDWR\|O_CREAT\|S_I" |
  115. sed '/[open\|creat]/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
  116. if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
  117. fi
  118.  
  119. if [ "$VFLAG" != "" ]; then echo "=== Written files ==="
  120. VYSTUP=$(echo "$SOUBOR" | grep -v "$VREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
  121. sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open\|^creat" | grep "O_WRONLY\|O_RDWR\|O_CREAT\|S_I" |
  122. sed '/[open\|creat]/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
  123. if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
  124. fi
  125.  
  126. if [[ "$RFLAG" != "" ]]; then echo "=== Read files ==="
  127. VYSTUP=$(echo "$SOUBOR" > LOGRR | grep "$RREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
  128. sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open" | grep "O_RDONLY\|O_RDWR" |
  129. sed '/open/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
  130. if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
  131. fi
  132.  
  133. if [ "$BFLAG" != "" ]; then echo "=== Read files ==="
  134. VYSTUP=$(echo "$SOUBOR" | grep -v "$BREGEXP" | grep -v "\-1\|[a-zA-Z][)]*$\|[\']$" |
  135. sed 's/^[0-9][0-9]*[:]*[[:space:]]*//' | grep "^open" | grep "O_RDONLY\|O_RDWR" |  
  136. sed '/open/s/[^"]*"\([^,][^,]*\)",.*/\1/' | sort | uniq)
  137.  
  138. if [[ "$VYSTUP" != "" ]]; then echo "$VYSTUP"; fi
  139. fi
  140.  
  141. # vymazani docasneho souboru
  142. if [[ "$TFLAG" != "" && "$TRAPFLAG" == "" ]]; then
  143. rm -f $TMPFILE
  144. fi
  145.  
  146. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement