Bash Shell'de Linux'un Gücü "Tarih Komutanlığı"


Komut geçmişini kontrol etmek veya kullanıcı tarafından yürütülen komut hakkında bilgi almak için günlük rutin işlerimizde history komutunu sıklıkla kullanırız. Bu yazıda, Bash kabuğunda kullanıcılar tarafından yürütülen komutu çıkarmak için History komutunu etkili bir şekilde nasıl kullanabileceğimizi göreceğiz. Bu, denetim amacıyla veya hangi komutun hangi tarihte ve saatte yürütüldüğünü öğrenmek açısından yararlı olabilir.

Varsayılan olarak tarih ve zaman damgası, geçmiş komutu yürütülürken görülmez. Ancak bash kabuğu, kullanıcının komut geçmişini düzenlemek için CLI araçları sağlar. Bazı kullanışlı ipuçlarını, püf noktalarını ve history komutunun gücünü görelim.

1. Linux'ta Son/Tüm Yürütülen Komutları Listeleyin

Terminalden basit history komutunu çalıştırmak, size satır numaralarıyla birlikte son yürütülen komutların tam listesini gösterecektir.

[narad@tecmint ~]$ 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 -f /var/log/messages
    7  tail -f /var/log/messages
    8  exit
    9  clear
   10  history
   11  clear
   12  history

2. Tüm Komutları Tarih ve Zaman Damgasıyla Listeleyin

Komuta göre tarihve zaman damgası nasıl bulunur? Değişkenli 'dışa aktarma' komutu kullanıldığında, komut yürütüldüğünde ilgili zaman damgasıyla birlikte geçmiş komutu görüntülenir.

[narad@tecmint ~]$ 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 değişkenlerinin anlamı
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. Tarihteki Filtre Komutları

Gördüğümüz gibi yukarıdaki çıktıda aynı komut defalarca tekrarlanıyor. Tarihte basit veya yıkıcı olmayan komutlar nasıl filtrelenir? Komutu HISTIGNORE='ls -l:pwd:date:''de belirterek aşağıdaki 'dışa aktar' komutunu kullanın, sistem tarafından kaydedilmeyecek ve geçmiş komutunda gösterilmeyecektir.

[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. Geçmişteki Yinelenen Komutları Yoksay

Aşağıdaki komut, kullanıcı tarafından yapılan yinelenen komut girişlerini göz ardı etmemize yardımcı olacaktır. Kullanıcı aynı komutu Bash İsteminde birden çok kez çalıştırırsa, geçmişte yalnızca tek bir giriş gösterilecektir.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. Dışa aktarma komutunun ayarını kaldır

Dışa aktarma komutunu anında kaldırın. export komutu tarafından dışa aktarılan komutlar ne olursa olsun, unset Export komutunu değişkenle tek tek yürütün.

[narad@tecmint ~]$ unset export HISTCONTROL

6. Dışa Aktarma Komutunu Kalıcı Olarak Kaydet

export komutunu kalıcı olarak kaydetmek için .bash_profile dosyasına aşağıdaki gibi bir giriş yapın.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

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

User specific environment and startup programs

export HISTCONTROL=ignoredups

PATH=$PATH:$HOME/bin
export PATH

7. Belirli Kullanıcının Yürüttüğü Komutları Listeleyin

Belirli bir kullanıcı tarafından yürütülen komut geçmişi nasıl görüntülenir? Bash, geçmişin kayıtlarını bir '~/.bash_history' dosyasında tutar. Komut geçmişini görmek için dosyayı görüntüleyebilir veya açabiliriz.

[narad@tecmint ~]$ 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. Komut Geçmişinin Saklanmasını Devre Dışı Bırakın

Bazı kuruluşlar, kuruluşun güvenlik politikası nedeniyle komutların geçmişini tutmaz. Bu durumda kullanıcının .bash_profile dosyasını (Gizli dosyadır) düzenleyip aşağıdaki gibi bir giriş yapabiliriz.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

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

User specific environment and startup programs

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

Aşağıdaki komutla dosyayı kaydedin ve değişiklikleri yükleyin.

[narad@tecmint ~]$ source .bash_profile

Not: Sistemin yazdığınız komutları hatırlamasını istemiyorsanız, anında kayıt geçmişini devre dışı bırakacak veya durduracak aşağıdaki komutu uygulamanız yeterlidir.

[narad@tecmint ~]$ export HISTSIZE=0

İpuçları: "HISTSIZE" araması yapın ve "/etc/profile" dosyasını süper kullanıcıyla düzenleyin. Dosyadaki değişiklik genel olarak etkili olacaktır.

9. Komut Geçmişini Silin veya Temizleyin

Yukarı ve aşağı oklarla daha önce kullanılmış olan ve size yardımcı olabilecek veya sizi kızdırabilecek komutu görebiliriz. '-c' seçenekleriyle bash geçmiş listesindeki tüm girişleri silme veya silme.

[narad@tecmint ~]$ history -c

10. Grep Komutunu Kullanarak Tarihte Komutları Arayın

Geçmiş dosyanızı aşağıdaki gibi 'grep' içerisine aktararak '.bash_history' üzerinden komut arayın. Örneğin, aşağıdaki komut geçmiş listesinden 'pwd' komutunu arayacak ve bulacaktır.

[narad@tecmint ~]$ 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. Son Çalıştırılan Komutu Ara

Daha önce yürütülen komutu 'Ctrl+r' komutuyla arayın. Aradığınız komutu bulduğunuzda, aynı işlemi yürütmek için 'Enter' tuşuna basın, aksi takdirde iptal etmek için 'esc' tuşuna basın.

(reverse-i-search)`source ': source .bash_profile

12. Son Çalıştırılan Komutu Geri Çağır

Daha önce kullanılmış belirli bir komutu hatırlayın. Bang ve 8 (!8) komutunun birleşimi, yürüttüğünüz 8 numaralı komutu geri çağıracaktır.

[narad@tecmint ~]$ !8

13. Son Yürütülen Özel Komutu Geri Çağırma

Daha önce kullanılan komutu (netstat -np | grep 22) '!' ile ve ardından söz konusu komutun bazı harfleriyle hatırlayın.

[narad@tecmint ~]$ !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  -

Tarihin komuta gücünü vurgulamaya çalıştık. Ancak bu bununla sınırlı değil. Lütfen aşağıdaki yorum kutumuz aracılığıyla tarih komutanlığı deneyiminizi bizimle paylaşın.