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.