skip to Main Content

linuxde klasör altındaki en büyük boyutlu dosyaları bulmak

find . -printf ‘%s %p\n’| sort -nr | head -10

ile en büyük 10 dosya aranmış olur.

root@cicekpc:/boot# find . -printf '%s %p\n'| sort -nr | head -10
59562456 ./initrd.img-4.13.0-46-generic
59549708 ./initrd.img-4.13.0-45-generic
43531219 ./initrd.img-4.10.0-32-generic
7870224 ./vmlinuz-4.13.0-46-generic
7870224 ./vmlinuz-4.13.0-45-generic
7579408 ./vmlinuz-4.10.0-32-generic
3884611 ./System.map-4.13.0-46-generic
3884611 ./System.map-4.13.0-45-generic
3719197 ./System.map-4.10.0-32-generic
2397909 ./grub/unicode.pf2

raspberry pi sıcaklığının değerinin öğrenilmesi ve rrd ile izlenmesi

basit bir örnekle raspberry pi üzerinde rrdtool kullanımı yazıda rrd kullanımına değinmiştim. yazıdaki örnekte kayseri şehrinin sıcaklık değeri kullanılmıştı.

bu yazıda ise raspberry pi nin iç sıcaklık değerlerini kullanalım. kit üzerinden sıcaklık değerini iki yöntemle öğrenebiliriz.

1. yöntem vcgencmd komutunu kullanarak

pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd measure_temp
temp=56.2'C

çıktısı yukarıdan görüldüğü gibi doğrudan rrd veritabanına göndermeye uygun değil bunun için aşağıdaki şekilde çıktımızı kırpalım.

pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd measure_temp | cut -d "=" -f2 | cut -d "'" -f1
56.2

pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd measure_temp | cut -c6-9
56.2

2. yöntem ise cpu log çıktısına bakmak.

pi@raspberrypi ~ $ cat /sys/class/thermal/thermal_zone0/temp
56224

bu yapıda tam işimize yaramayabilir. çıktıyı okunabilir bir duruma getirmemiz gerekiyor.

root@raspberrypi:~# /opt/vc/bin/vcgencmd measure_temp | sed "s/temp=\([0-9]\+\.[0-9]\+\)'C/\1/"
56.2

root@raspberrypi:~# awk '{printf("%.1f\n",$1/1e3)}' /sys/class/thermal/thermal_zone0/temp
56.2

artık raspberry nin sıcaklık değerinin nasıl öğrenileceğini bildiğimize göre örneğimizde yer alan

sicaklik ="curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
grep -Po ' M?\d{2} ' |  \
sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'";

satırı yerine uygun kodu yazarak raspberrynin sıcaklık değerini rrd grafikleri üzerinden takip edebiliriz.

linux makinelerde cpu log dizin yapısından ufak farklılıklar olabilir ancak 2. yöntemle linux kullanan tüm cihazlarda cpu sıcaklık değeri öğrenebiliriz.

basit bir örnekle raspberry pi üzerinde rrdtool kullanımı

rrdtool un kullanma mantığının temel olarak

  • veri tabanının oluşturulması.
  • veriyi toplayacak yazılımın gerçekleştirilmesi
  • düzenli aralıklarla bu veriyi toplanması ve veri tabanına eklenmesi
  • veri tabanına giriş yapıldıktan sonra görüntülenmesi istenilen grafikleri oluştur
  • oluşturulan grafiklerin görüntüleneceği bir arayüz meydana getirilmesi

adımlarından oluşturuğu söylenebilir. şimdi bu adımları uygulayacağımız basit bir sıcaklık uygulaması örneği yapalım. rrd uygulamamızda kullanacağımız rdd veri tabanı yapısını oluşturalım.

#!/bin/bash
rrdtool create sicaklik_rrd.rrd --start N --step 300 \
DS:sicaklik_veri:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:12 \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:12:168 \
RRA:AVERAGE:0.5:12:720 \
RRA:AVERAGE:0.5:288:365

sıra geldi veri toplama ve elde edilen veriyi veritabanına ekleyecek yazılım kısmına.

#!/bin/bash
DIZIN="/var/www/sicaklik"

sicaklik ="curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
grep -Po ' M?\d{2} ' |  \
sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'";

$rrd = `/usr/bin/rrdtool update $DIZIN/sicaklik_rrd.rrd N:$sicaklik`;

ile kayseri-erkilet için sıcaklık bilgisi çekilerek rrd dosyasına ekleniyor. şimdi sıra bu işlemi otomatik olarak yaptırmaya geldi.

pi@raspberrypi $ cat /etc/crontab 
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/5 *  * * *   root    /var/www/sicaklik/sicaklik.sh

artık 5 dakikada bir bu script çalışarak rrd veritabanı dosyamız güncellenecek. şimdi sıra veritabanından kullanacağımız grafiklerin oluşturulmasına geldi.

#!/bin/bash
DIZIN="/var/www/sicaklik"

sicaklik_birimi="C"
sicaklik_cizgi_rengi="#0000FF"

#saat
rrdtool graph $DIZIN/sicaklik_saat.png --start -4h \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \
GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s"

#gun
rrdtool graph $DIZIN/sicaklik_gun.png --start -1d \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \
GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s" \
GPRINT:sicaklik_veri:MAX:"Maksimum Sicaklik\:%8.2lf %s" \
GPRINT:sicaklik_veri:MIN:"Minimum Sicaklik\:%8.2lf %s"

#hafta
rrdtool graph $DIZIN/sicaklik_hafta.png --start -1w \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

#ay
rrdtool graph $DIZIN/sicaklik_ay.png --start -1m \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

#yil
rrdtool graph $DIZIN/sicaklik_yil.png --start -1y \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

artık işlem neredeyse bitti. burada grafik oluşturmayı farklı bir dosya gibi gösterdim ancak sicaklik verisini çektiğimiz ve veritabanına eklediğimiz script içinde olması işimi kolaylaştıracaktır. aksi halde bu dosyası da belirli zaman aralıkları ile çalıştırmamız gerekecektir.

şimdi sıra oluşturdugumuz grafikleri göstereceğimiz html dosyasını oluşturmaya geldi.



  

Raspberry Pi ile RRD örneği

Last Modified: < ?=$lastmod?>

Hourly

Daily

Weekly

Monthly

Yearly

olay aslında bu kadar basit. daha dinamik bir arayüz vb istiyorsak yapımızı buna göre oluşturmamız gerekmektedir. elde edeceğimiz günlük grafik ise aşağıdaki gibi olacaktır.

sicaklik_gun

hava durumu : linux komut satırı

linuxde komut satırından hava durumu bilgisine nasıl ulaşacağımızı ve bunu nasıl kullanacağımıza bakalım.

ücretli ve ücretsiz olarak hava durumu bilgisini sunan bir çok servis mevcut. yük doğruluk lu veri istiyorsanız bir miktar ücreti gözden çıkarmanız da fayda var. bu örnekte “National Weather Service” tarafından herkese açık olan kaynaklardan faydalanacağız. akıllı telefonlar ile hava durumu uygulamaları oldukça popüler hale geldi. her cihazda arka planda çalışan bir hava durumu uygulaması mevcut. bu şekilde bir uygulama yapmak geçiyorsa aklınızdan yapılacak temel işlemler aynı.

http://weather.noaa.gov/weather/TR_cc.html adresinden ülkemizde bilgi alınabilecek yerlerin listesini bulabilirsiniz. ben örneğimde Kayseri – Erkilet havaalanı için verileri kullanacağım.  http://weather.noaa.gov/weather/current/LTAU.html adresinden gün sayfalara ulaşabilirsiniz. burada LTAU kodu istasyona ait verilmiş özel bir kod.

buradaki kullanılan dosya formatları konusunda http://www.ofcm.gov/fmh-1/fmh1.htm adresinden detaylı bilgi alabilirsiniz.

biz tabiki bu html dosyasını kullanmayacağız. yukarıda belirtilen standart çerçevesinde  http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.txt adresinde dosya her 5 dakika bir güncellenmektedir.

2015/07/05 14:20
LTAU 051420Z 27007KT 240V300 9999 FEW040 28/08 Q1016 NOSIG

dosyanın içeriği yukarı şekilde. 28/08 yazan kısımdaki 28 bizim sıcaklık değerimiz. bu verinin doğruluğunu kontrol etmek için akıllı telefondan alınan ekran görüntüsünüde aşağıda paylaşalım

2015-07-05-17-45-54-1_resized

şimdi sıra LTAU.TXT dosyasından veriyi almak gerekli scripti yazmaya geldi.

curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
grep -Po ' M?\d{2}/M?\d{2} ' |  \
sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'

ben yukarıdaki gibi bir script yazdım. sizde farklı yöntemlerle istediğiniz veriyi ( nem, rüzgar gibi ) tabiki alabilirsiniz..

pi@raspberrypi ~ $ curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
> grep -Po ' M?\d{2}/M?\d{2} ' |  \
> sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'
 28 
pi@raspberrypi ~ $

bu veriyi raspberry ile yapacağımız diğer uygulamalarda kullanacağımız için not etmekte fayda var.

raspberry pi – raspbian ssh aktif edilmesi

raspberry ile çalışıyorsanız ssh in aktif olması olmazsa olmazlardan biridir. şimdi raspberry üzerine ssh sunucusu nasıl aktif edeceğimize bakalım.

raspberry nin konfigürasyon arayüzünü aktif çalıştıralım. bu arayüz ile konfigürasyon dosyaları ile uğraşmaya gerek kalmayacak. yazılım sürümüne göre ekran görüntüleri farklılık gösterebilir.

pi@raspberrypi ~ $ sudo raspi-config

açılan arayüzden “advanced options” seçilir

raspiconfigssh1

yeni açılan pencereden ssh seçilerek
raspiconfigssh2

açılan pencereler takip edilerek ssh aktif edilir.

raspiconfigssh3

raspiconfigssh4

ssh ımız aktif oldu. artk arayüzden “finish” diyerek çıkabilir.

raspiconfigssh5

arayüzden çıktıktan sonra komut satırını aşagıdaki şekilde göreceğiz.

pi@raspberrypi ~ $ sudo raspi-config 
update-rc.d: using dependency based boot sequencing
[ ok ] Starting OpenBSD Secure Shell server: sshd.

herşey güzel.. gerçekten ssh sunucumuz aktif mi kontrol edelim.

pi@raspberrypi ~ $ /etc/init.d/ssh status 
[ ok ] sshd is running.

ile sunucumuzun çalıştığı bilgisi alıyoruz. ip bilgisini ögrenelim ve gerçek bağlantı testimizi yapalım.

pi@raspberrypi ~ $ ifconfig
eth0 Link encap:Ethernet HWaddr 11:11:11:11:11:11
 inet addr:192.168.2.37 Bcast:192.168.2.255 Mask:255.255.255.0
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:777 errors:0 dropped:1 overruns:0 frame:0
 TX packets:557 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:60040 (58.6 KiB) TX bytes:89779 (87.6 KiB)

bundan sonra ssh bağlantımızı yapalım…

[c:\~]$ ssh pi@192.168.2.37


Connecting to 192.168.2.37:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Linux raspberrypi 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 30 20:39:17 2015 from fcicek.local


pi@raspberrypi ~ $

artık raspberry de diğer işlerle uğraşabiliriz.

linux – ip adresinin öğrenilmesi

linux de bir ethernet arayüzünün ip adresinin ifconfig çıktısından inceleyerek bulabiliriz. ancak nokta atışı yapılması gereken zamanlar olabilir.

aşagıdaki örnekte adım adım incelenebilir.

fcicek@ubuntu:~$ ifconfig eth0 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:68:00:00  
          inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe68:0000/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:388668 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226787 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:506708018 (506.7 MB)  TX bytes:22826593 (22.8 MB)
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:'
          inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:' | awk '{print$2}' 
addr:192.168.126.128
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:' | awk '{print$2}' | cut -d: -f2
192.168.126.128

linuxte iç ve dış ip adresi değişimlerinin twitter hesabına gönderilmesi

dış dünyaya dinamik bir ip adresi ile çıkıyor ve olası ip değişimlerinden haberdar olmak istiyorsanız elbette bunun yapmanın çok fazla yöntemi var.

bu örnekte dhcp tarafından ip değişimlerinin alğılanarak twitter üzerinden gönderilmesi konusunda ufak bir örnek yapacağız.

twitter için yeniden bir yazılım yapmayacağız.. mevcut linux cli uygulamalarını kullanabiliriz. Bu örnekte tuby ile geliştirilen T yi kullancağız. https://github.com/sferik/t adresinden yazlım hakkında gerekli bilgilendirme alınabilir..

ruby nin installer yazılımını yükleyelim ve sonrasında ise T yazılımını yükleyelim.

fcicek@ubuntu:~$ sudo apt-get install ruby-dev
fcicek@ubuntu:~$ gem install t

twitter üzerinden bu işlem için kullanacağımız bir twitter hesabı oluşturalım ve bu hesap ile http://dev.twitter.com/apps/new adresinden yeni bir uygulama oluşturalım.

ve sonrasında uygulama erişim ayarlarını yönergeleri izleyerek yapalım.

fcicek@ubuntu:~$ t authorize
It looks like you ve already registered an application with Twitter.
To authorize a new account, just follow the steps below:
  1. Sign in to the Twitter Developer site.
  2. Select the application for which you d like to authorize an account.
  3. Copy and paste the consumer key and secret below when prompted.

Press [Enter] to open the Twitter Developer site. 

authorize işlemi tamamlandıktan sonra

fcicek@ubuntu:~$ t account

fcicek@ubuntu:~$ t whoami

ile hesap kontrollerini gerçekleştirelim. ve sonrasında test için mesaj gönderelim

fcicek@ubuntu:~$ t dm ferhatcicek test
Direct Message sent from @fcicekcli to @ferhatcicek.

twitterin istemci yazılımı ile ilgili kısımları tamamladıktan sonra en önemli kısıma geldi. dhcp nin olduğu bölümü ögrendikten sonra dhclient.conf konfigürasyon dosyası içinde gerekli düzenlemeleri yapalım.

fcicek@ubuntu:~$ whereis dhcp
dhcp: /etc/dhcp

dhclient.conf dosyası /etc/dhcp/ dizini altında yer almaktadır. konfigürasyon dosyası içerisinde dhclient-script dosyasının aktif edilmesi gerekmektedir. (dizin yapısı ile ilgili sorun olabilir. )

fcicek@ubuntu:/etc/dhcp$ whereis dhclient-script
dhclient-script: /sbin/dhclient-script /usr/share/man/man8/dhclient-script.8.gz

dosyanın doğru yerini ögrendikten sonra dhclient.conf dosyası içinde

fcicek@ubuntu:/etc/dhcp$ vi dhclient.conf 

script "/sbin/dhclient-script";

gerekli düzenlemeyi tamamlayalım ve bir sonraki adıma geçelim.

fcicek@ubuntu:/etc/dhcp$ ls
dhclient.conf  dhclient-enter-hooks.d  dhclient-exit-hooks.d

dhclient-enter-hooks.d dizini içine çalışacak olan scriptimiz yarattığınız zaman olay tamamlanmıştır..

vi tt

PRIVATE_IP=$(ifconfig |grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }')
PUBLIC_IP=$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)

/usr/local/bin/t   dm @ferhatcicek "$PRIVATE_IP \n ip: $PUBLIC_IP"

linuxte komut satırından gerçek ip adresinin ögrenilmesi

linuxte shell script yazarken veya komut satırın dayken gerçek ip adresi (extarnal ip) bilgisine ihtiyaç duyabilirsiniz. bunun için farklı yöntemler vardır. temel olarak internette, size sizin bağlantı kurduğunuz ip adresini geri gönderecek bir servisin olmasıdır. bu servisler http, telnet, ssh veya başka bir servis olabilir. bunlardan bir kaçına hızlıca göz atalım

çok fazla bilinen bir çok sitenin bu işler için hazırlanmış api leri v.b. mevcuttur.

CURL ve WGET ile

fcicek@ubuntu:~$ curl bot.whatismyipaddress.com
78.168.67.209
fcicek@ubuntu:~$ wget http://smart-ip.net/myip -O - -q ; echo
78.168.67.209

fcicek@ubuntu:~$ curl http://smart-ip.net/myip
78.168.67.209
fcicek@ubuntu:~$ curl -s "http://api.hostip.info/get_html.php" 
Country: TURKEY (TR)
City: Karaman
IP: 78.168.67.209

fcicek@ubuntu:~$ curl -s "http://api.hostip.info/get_html.php" | grep 'IP:' | awk '{print $2}'
78.168.67.209
fcicek@ubuntu:~$ curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/< .*$//'  
78.168.67.209
fcicek@ubuntu:~$ curl ident.me
78.168.67.209

EXEC

fcicek@ubuntu:~$ exec 3<> /dev/tcp/icanhazip.com/80 && # open connection
>   echo 'GET /' >&3 &&                   # send http 0.9 request
>   read -u 3 && echo $REPLY &&           # read response
>   exec 3>&-                             # close fd
78.168.67.209

LWP-REQUEST

fcicek@ubuntu:~$ lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
78.168.67.209

DIG

fcicek@ubuntu:~$ dig +short myip.opendns.com @resolver1.opendns.com
78.168.67.209

fcicek@ubuntu:~$ alias wanip='dig +short myip.opendns.com @resolver1.opendns.com'
fcicek@ubuntu:~$ wanip
78.168.67.209
fcicek@ubuntu:~$ dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
"78.168.67.209"
fcicek@ubuntu:~$ dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
78.168.67.209

NETCAT

fcicek@ubuntu:~$ netcat icanhazip.com 80 < << $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
78.168.67.209
Back To Top