بگذارید کمی مقدمه چینی کنم تا به اصل قضیه برسم و اسکریپت مربوطه رو که حتی یک 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– نام کاربری خود را پاس نمایید.
با سلام.
در نامه ای که برای لیست پستی فرستاده بودید یک نکته پسندیده و جالب دیدم مبنی بر درخواست مقاله! کاش محلی بود (مثلا یک صفحه) که هر فردی درخواست مقاله ای داشت ثبت می کرد و حتی بقیه به آن رای می دادند. اینطوری برای همه نیز مشخص می شد که مطالبات کاربران بیشتر در چه زمینه ای است. اگر حتی ترتیب اثر هم ندهید باز مفید و جالب است.
درخواست این حقیر: من به یک مقاله در مورد چک لیست امنیتی برای ادمین لینوکس احتیاج دارم.
البته این موضوع می تواند لایه ها و پیچیدگی های فراوانی داشته باشد اما برای شروع فکر می کنم یک الگوی ساده و مهم و رایج و کار راه بینداز مفید باشد تا …
با تشکر
دوست گرامی، چنین سرفصلی رو میتونم در بیارم ولی نه با جزییات، بلکه فقط سرفصلهاش رو و اینکه خود جزییات رو باید خودتون در بیارید. البته سعی میکنم در مواردی هم صحبت کنم. ولی قول الان رو نمیدم.