بگذارید کمی مقدمه چینی کنم تا به اصل قضیه برسم و اسکریپت مربوطه رو که حتی یک grep هم نداره توضیح بدم. تمام پراسسها در دایرکتوری /proc دارای یک دایرکتوری هستند با نام PID خودشون، که خیلی از منابع اون پراسس در اون داریکتوری ذخیره میشن. اگر برای اون پراسس حداقل یک متغیر محیطی ایجاد شده باشه، در همون دایرکتوری فایلی با نام environ ایجاد میشه. به مثال زیر توجه کنید، این مثال در مورد PID فرمان bash هست که کلی متغیر داره:
1 |
XDG_VTNR=7ORBIT_SOCKETDIR=/tmp/orbit-mohsenSSH_AGENT_PID=1861XDG_SESSION_ID=1TERMINATOR_UUID=urn:uuid:9f556e84-4e5d-4987-baca-c7462d88eaddSHELL=/bin/bashTERM=xtermWINDOWID=12582915USER=rootLS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:SSH_AUTH_SOCK=/tmp/ssh-07uwLKkYBGkz/agent.1818USERNAME=mohsenPAGER=mostPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binDESKTOP_SESSION=awesomePWD=/home/mohsenLANG=en_US.UTF-8GDM_LANG=en_US.UTF-8GDMSESSION=awesomeSHLVL=1XDG_SEAT=seat0HOME=/root_JAVA_AWT_WM_NONREPARENTING=1LOGNAME=rootXDG_SESSION_DESKTOP=awesomeDBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-pP6Bq1NhOn,guid=e3731706c3c73c553bd1638a5519c1d1WINDOWPATH=7DISPLAY=:0XDG_RUNTIME_DIR=/run/user/1000XAUTHORITY=/var/run/gdm3/auth-for-mohsen-hZ2pPq/databaseCOLORTERM=gnome-terminal_=/bin/suLANGUAGE=en_US:enMAIL=/var/mail/rootroot@debian:/home |
این هم از اسکریپت زیر:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/bash # --value PATTERN -o PS_COMMAND_OPTIONS ##########investagiting argumens ###################### function help(){ echo "Usage: -h: help --help: help --velue PATTERN : specify a patern for looking for (mandatory) -o PS_COMMAND_OPTIONS: specifying a set of options for process management (mandatory)" } #############arg_process########################################## if [ "$1" = "--value" -a "$3" != "-o" -o "$1" != "--value" -a "$3" = "-o" -o ! $# -eq 4 ]; then help; exit; fi; ################################# for i in `ls -d /proc/*[0-9]*`; do number_of_used=`cat $i/environ 2> /dev/null | xargs -0 |awk -v e_v2=$2 'BEGIN{}{for (i = 0; i < NF; i++) print $i}' |awk -F= '{print $2}' |awk -v e_patt=$2 '{for (i = 0 ; i<NF; i++){if (match($1,e_patt)) num++;} }END{print num;}'` if [ ! -z $number_of_used ]; then echo -------------------Number of variables: $number_of_used------------------------------------------------------------------------------------------------------------------------- pid=`echo $i |awk -F/ '{print $3}'` header=`echo $4 |sed 's/,/ /g' ` echo $header ps_content=`ps --no-headers -p $pid -o $4 2> /dev/null` if [ $? -ne 0 ]; then help exit fi; echo $ps_content fi; done; |
برای استفاده از آن میتوان از عبارت زیر استفاده کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
root@debian:/home/mohsen/codes/grepenv# ./grepenv.sh --value mohsen -o cmd,user -------------------Number of variables: 3------------------------------------------------------------------------------------------------------------------------- cmd user /lib/systemd/systemd --user mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user awesome mohsen -------------------Number of variables: 7------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/ssh-agent /usr/bin mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/dbus-launch --exit mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/dbus-daemon --fork mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/python /usr/bin/te mohsen -------------------Number of variables: 5------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/x86_64-linux-gnu/g mohsen -------------------Number of variables: 5------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/gvfs/gvfsd mohsen -------------------Number of variables: 5------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/gvfs/gvfsd-fuse /r mohsen -------------------Number of variables: 9------------------------------------------------------------------------------------------------------------------------- cmd user gnome-pty-helper mohsen -------------------Number of variables: 7------------------------------------------------------------------------------------------------------------------------- cmd user /bin/bash mohsen -------------------Number of variables: 7------------------------------------------------------------------------------------------------------------------------- cmd user su root -------------------Number of variables: 4------------------------------------------------------------------------------------------------------------------------- cmd user bash root -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user iceweasel mohsen -------------------Number of variables: 5------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/at-spi2-core/at-sp mohsen -------------------Number of variables: 4------------------------------------------------------------------------------------------------------------------------- cmd user /opt/zebedee-2.4.1A/zebedee root -------------------Number of variables: 9------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/pulseaudio --start mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/chromium/chrome-sa mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /opt/Telegram/Telegram mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/python /usr/bin/zi mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/bin/python /usr/bin/zi mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/libreoffice/progra mohsen -------------------Number of variables: 8------------------------------------------------------------------------------------------------------------------------- cmd user /usr/lib/libreoffice/progra mohsen -------------------Number of variables: 4------------------------------------------------------------------------------------------------------------------------- cmd user /bin/bash ./grepenv.sh --va root |
پارامتر اول یک عبارت برای جستجو میگیرد و پارامتر دوم همان option ها در فرمان ps هستند که برای شما نمایش داده شوند.
درواقع این فرمان در کل سیستم میگردد و این عبارت را در کل متغیرهای محیطی جسجتو میکند و اما چه برگرداند:
۱. پراسس هایی که آن را استفاده کردهاند.
۲. تعداد استفاده آن پراسسها از این عبارت.
نکته: کد ساده است و شما خود میتوانید آن را به دلخواه و نیاز خود تغییر دهید.
تمرین: برای چگونگی استفاده این اسکریپت برای پارامتر value– نام کاربری خود را پاس نمایید.