اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

قدرت دستور history در bash shell لینوکس

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    قدرت دستور history در bash shell لینوکس

    ما بصورت مکرر در انجام کارهای روزانه خود برای بررسی تاریخچه دستورات و یا برای کسب اطلاعاتی در مورد دستورات اجرا شده توسط کاربران از دستور history استفاده میکنیم. در این آموزش به شما چگونگی استفاده از دستور history برای بدست آوردن دستورات اجرا شده توسط کابران در bash را نشان خواهیم داد. انجام این کارها برای اهداف نظارتی سیستم یا برای یافتن دستور اجرا شده در زمان و تاریخ خاص مفید میباشد.

    بصورت پیشفرض موقع اجرای دستور history تاریخ (date) و زمان (timestamp) اجرای دستور نشان داده نخواهند شد. اما شل bash ابزارهای CLI برای ویرایش تاریخچه دستورات کاربران فراهم میکند. حال به بررسی برخی از تواناییها و کاربردهای دستور history میپردازیم.



    1 - لیست کردن تمام دستورات یا دستوراتی که اخیرا اجرا شده اند

    با اجرای دستور history لیست کامل آخرین دستورات اجرا شده به شما نمایش داده میشود. دستورات در خطوط شماره دار لیست میشوند :
    کد PHP:
    [mohammad@linuxzone ~]$ history

        1  PS1
    ='\e[1;35m[\u@\h \w]\$ \e[m '
        
    2  PS1="\e[0;32m[\u@\h \W]\$ \e[m "
        
    3  PS1="\u@\h:\w [\j]\$ "
        
    4  ping google.com
        5  
    echo $PS1
        6   tail 
    -/var/log/messages
        7  tail 
    -/var/log/messages
        8  
    exit
        
    9  clear
       10  history
       11  clear
       12  history 


    2 - نمایش تمام دستورات با تاریخ (Date) و زمان اجرای آنها (Timestamp)

    چطور تاریخ و ساعت اجرای دستورات را پیدا کنیم؟ برای نمایش تاریخ و زمان اجرای دستورات از دستور export و متغییر HISTTIMEFORMAT استفاده مینماییم :
    کد PHP:
    [mohammad@linuxzone ~]$ export HISTTIMEFORMAT='%F %T  '

          
    1  2013-06-09 10:40:12   cat /etc/issue
          2  2013
    -06-09 10:40:12   clear
          3  2013
    -06-09 10:40:12   find /etc -name *.conf
          4  2013
    -06-09 10:40:12   clear
          5  2013
    -06-09 10:40:12   history
          6  2013
    -06-09 10:40:12   PS1='\e[1;35m[\u@\h \w]\$ \e[m '
          
    7  2013-06-09 10:40:12   PS1="\e[0;32m[\u@\h \W]\$ \e[m "
          
    8  2013-06-09 10:40:12   PS1="\u@\h:\w [\j]\$ "
          
    9  2013-06-09 10:40:12   ping google.com
         10  2013
    -06-09 10:40:12   echo $PS1 

    مفهوم متغیر های HISTTIMEFORMAT
    %F معادل تاریخ به فرمت YY-MM-DD میباشد.
    %T نیز زمان را به فرمت HH-MM_SS نمایش میدهد.



    3 - فیلتر کردن دستورات در لیست خروجی دستور History

    همانطور که میبینید در خروجی دستور بالا برخی دستورات در لیست تاریخچه چندین بار تکرار شده اند. چگونه دستورات ساده یا غیرمخرب را در History فیلتر کنیم؟ با استفاده از دستور 'export' بهمراه کامند خاص در عبارت HISTIGNORE=’ls -l:pwd:date:’ ، این دستور توسط سیستم ذخیره نشده و در دستور history نیز نمایش داده نمیشود :
    کد PHP:
    [mohammad@linuxzone ~]$ export HISTIGNORE='ls -l:pwd:date:' 


    4 - نادیده گرفتن دستورات تکراری در History :

    دستور زیر به ما کمک میکند تا دستورات تکراری وارد شده توسط کاربر را نادیده بگیریم و اگر یوزری یک کامند را چندین بار (در یک bash prompt) اجرا کند، تنها یک خط از آن دستور در history نمایش داده شود:
    کد PHP:
    [mohammad@linuxzone ~]$ export HISTCONTROL=ignoredups 


    5 - دستور Unset export

    بدون وقفه می توان متغیرهای ست شده با دستور export را حذف (Unset) کرد. برای این منظور دستور unset export را بهمراه یک به یک متغیرهایی که برای هر کامند با دستور export ست کردیم، اجرا میکنیم .
    کد PHP:
    [mohammad@linuxzone ~]$ unset export HISTCONTROL 


    6 - ذخیره دائمی دستور Export

    برای ذخیره دائمی دستور export ورودی های زیر را داخل فایل .bash_profile قرار میدهیم :
    کد PHP:
    [mohammad@linuxzone ~]$ vi .bash_profile

    # .bash_profile

    # Get the aliases and functions
    if [ -~/.bashrc ]; then
            
    . ~/.bashrc
    fi

    # User specific environment and startup programs

    export HISTCONTROL=ignoredups

    PATH
    =$PATH:$HOME/bin
    export PATH 


    7 - لیست کردن دستورات اجرا شده توسط یک کاربر خاص

    چطور history دستوراتی که توسط یک user خاص اجرا شده را ببینیم؟ Bash رکوردهای history را در یک فایل ~/.bash_history نگهداری میکند. برای دیدن history دستورات میتوانید فایل را باز و مشاهده کنید :
    کد PHP:
    [mohammad@linuxzone ~]$ vi .bash_history

    cd 
    /tmp/
    cd logstalgia-1.0.3/
    ./
    configure
    sudo passwd root
    apt
    -get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
    ./configure
    make
    apt
    -get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
    apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
    apt
    -get install make
    mysql 
    -u root -p
    apt
    -get install grsync
    apt
    -get install unison
    unison 


    8 - Disable (غیرفعال) کردن ذخیره تاریخچه(history) دستورات

    برخی سازمان ها بخاطر سیاست های امنیتی history دستورات را ذخیره نمیکنند. در این موارد میتوانیم فایل .bash_profile کاربر (که یک فایل مخفی میباشد) را ویرایش نماییم و تغییراتی مانند زیر اعمال نماییم :
    کد PHP:
    [mohammad@linuxzone ~]$ vi .bash_profile

    # .bash_profile

    # Get the aliases and functions
    if [ -~/.bashrc ]; then
            
    . ~/.bashrc
    fi

    # User specific environment and startup programs

    PATH=$PATH:$HOME/bin
    HISTSIZE
    =0
    export PATH
    .bash_profile (END

    فایل را ذخیره کرده و با دستور زیر تغییرات جدید را اعمال کنید :
    کد PHP:
    [mohammad@linuxzone ~]$ source .bash_profile 
    نکته 1 : اگر نمیخواهید سیستم دستوراتی را که تایپ نموده اید را ذخیره کند، بسادگی دستور زیر را اجرا نمایید و بی وقفه ذخیره کردن دستورات را غیرفعال یا متوقف خواهد کرد:
    کد PHP:
    [mohammad@linuxzone ~]$ export HISTSIZE=
    نکته 2 : با دسترسی root در فایل /etc/profile عبارت HISTSIZE را جستجو نمایید و تغیرات لازم را اعمال نمایید تا این تغییرات در این فایل، روی کل سیستم اعمال شود.



    9 - Delete یا clear کردن History دستورات در Linux

    با استفاده از کلید های up و down شما میتوانید دستورات قبلی را ببینید که ممکن است برای شما مفید باشد یا اینکه ممکن است شما را خشمگین کند (تجربه حذف ناخواسته ی یک فایل مهم). با آپشن –c میتوانید تمام رکوردها را از لیست bash history پاک نمایید :
    کد PHP:
    [mohammad@linuxzone ~]$ history -


    10 - جستجوی دستورات در History با استفاده از دستور grep

    برای جستجوی یک دستور در فایل .bash_history میتوانید این فایل را به عنوان ورودی به دستور grep بصورت زیر ارسال نمایید. برای مثال دستور زیر به جستجو و یافتن دستور pwd در لیست history میپردازد :
    کد PHP:
    [mohammad@linuxzone ~]$ history grep pwd

      113  2013
    -06-09 10:40:12     pwd
      141  2013
    -06-09 10:40:12     pwd
      198  2013
    -06-09 15:46:23     history grep pwd
      202  2013
    -06-09 15:47:39     history grep pwd 


    11 - جستجوی آخرین دستور اجرا شده در لینوکس

    برای یافتن آخرین دستورات اجرا شده، دستور ‘Ctrl+r’ را اجرا نمایید. بعد از پیدا کردن دستور مورد نظر برای اجرای دستور کلید 'Enter' را فشار دهید در غیر اینصورت کلید 'ESC' رای برای cancle کردن دستور فشار دهید :
    کد PHP:
    (reverse-i-search)`source ': source .bash_profile 


    12 - فراخوانی (recall) آخرین دستور اجرا شده

    برای فراخوانی یک دستور از قبل اجرا شده، از ترکیب bang (علامت '!') ویک عدد مثلا 8 (شماره دستور اجرا شده) استفاده میکنیم دستور زیر هشتمین دستوری که اجرا کردید را نمایش میدهد:
    کد PHP:
    [mohammad@linuxzone ~]$ !


    13 - فراخوانی آخرین دستور اجرا شده خاص

    برای فراخوانی دستور خاصی که اخیرا اجرا شده مثل netstat -np | grep 22 باید از یک bang (کاراکتر '!') بهمراه چند حرف از دستور مربوطه (مثلا net که چند حرف ابتدایی دستور است) را وارد نمایید :
    کد PHP:
    [mohammad@linuxzone ~]$ !net
    netstat 
    -np grep 22
    (No info could be read for "-p"geteuid()=501 but you should be root.)
    tcp        0     68 192.168.50.2:22             192.168.50.1:1857           ESTABLISHED -
    tcp        0      0 192.168.50.2:22             192.168.50.1:2516           ESTABLISHED -
    unix  2      [ ]         DGRAM                    12284  -                   @/org/freedesktop/hal/udev_event
    unix  3      
    [ ]         STREAM     CONNECTED     14522  -
    unix  2      [ ]         DGRAM                    13622  -
    unix  3      [ ]         STREAM     CONNECTED     12250  -                   @/var/run/hald/dbus-ujAjOMNa0g
    unix  3      
    [ ]         STREAM     CONNECTED     12249  -
    unix  3      [ ]         STREAM     CONNECTED     12228  -                   /var/run/dbus/system_bus_socket
    unix  3      
    [ ]         STREAM     CONNECTED     12227  


    همچنین توصیه میشود مطالعه کنید :

    تنظیم تاریخ و زمان در لینوکس

    تنظیم timezone در لینوکس



    در این آموزش سعی کردیم نکات برجسته قدرت دستور history را به شما نشان دهیم. ولی این تمام اطلاعات موجود در مورد امکانات این دستور نیست. لطفا تجربیات خود را در مورد این دستور با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 02-01-2021, 11:52 AM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X