<![CDATA[Cybermilitia - Sebil Programcılık Notları]]>Sun, 13 Aug 2017 20:49:37 -0700Weebly<![CDATA[BASH SCRIPTING NOTLARI]]>Thu, 16 Jan 2014 16:39:00 GMThttp://cybermilitia.org/sebil-programc305l305k-notlar305/bash-script-notlari1) Tek tirnak literal olarak gorur. Yani:
ckarahan@CUMHUR-KARAHAN ~/Desktop/ffmpeg-2.1.1
$ str=world

ckarahan@CUMHUR-KARAHAN ~/Desktop/ffmpeg-2.1.1
$ echo "Hello $str"
Hello world

ckarahan@CUMHUR-KARAHAN ~/Desktop/ffmpeg-2.1.1
$ echo 'Hello $str'
Hello $str


2) .. isareti arasindaki hersey anlamina gelir.

ckarahan@CUMHUR-KARAHAN ~/Desktop/ffmpeg-2.1.1
$ echo {1..5}
1 2 3 4 5

ckarahan@CUMHUR-KARAHAN ~/Desktop/ffmpeg-2.1.1
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z

3) File yaratmak icin
$ touch file.txt

4)touch file{1..5}.txt dersek
-rw-r--r--+ 1 ckarahan mcsngrp       0 Jan  2 14:33 file1.txt
-rw-r--r--+ 1 ckarahan mcsngrp       0 Jan  2 14:33 file3.txt
-rw-r--r--+ 1 ckarahan mcsngrp       0 Jan  2 14:33 file2.txt
-rw-r--r--+ 1 ckarahan mcsngrp       0 Jan  2 14:33 file5.txt
-rw-r--r--+ 1 ckarahan mcsngrp       0 Jan  2 14:33 file4.txt

olusur.

5) cp file{.txt,.bck} dersek

$ ls
file.bck  file.txt

6) test komutu islemin sonucunu bulur ve ona gore tavir aldirabilirsin.

ckarahan@CUMHUR-KARAHAN ~/Desktop/bash_deneme
$ a=10; test $a -gt 2 && echo "success"
success

ckarahan@CUMHUR-KARAHAN ~/Desktop/bash_deneme
$ a=10; test $a -gt 12 && echo "success"

7) Ama illa testi kullanmak zorunda degiliz.

ckarahan@CUMHUR-KARAHAN ~/Desktop/bash_deneme
$ [ $a -gt 2 ] && echo success
success

ckarahan@CUMHUR-KARAHAN ~/Desktop/bash_deneme
$ if [ $a -gt 2 ]; then echo success; fi
success

8) 7. ornekteki && yerine || de kullanilabilir. sonucta logic operatorler bunlar.

9) jot komutu uc parametreli bir komut. Istedigimiz kadar sayi elde edebilmek icin. Ilk parametre kac adet sayi bulacagini, ikinci ve ucuncu ise alt ve ust sinirlarini soyluyor. ama yalnizca Macde kosuyor.

jot 10 1 100        -> 1'den 100'e kadar 10 tane sayi verir.
jot -r 10 10 100    -> 10'dan 100'e kadar 10 tane random sayi verir.

$RANDOM
echo $(($RANDOM % 10))
for i in {1..10}; do echo $(($RANDOM % 10)); done

10) | pipeline ile bir onceki islemin ciktisini bir sonraki islemin paramtresi olarak kullanabiliyoruz.

jot -r 10 10 100 | cat -n
jot -r 10 10 100 | sort          ->string sort
jot -r 10 10 100 | sort -n      ->numbering sort
         

11) `` turu tirnaklar, iceridekini execute et demektir.

xargs echo `echo hello world`
 
bash-3.2$ l=ls
bash-3.2$ `echo $l`
1ACCDMO                                 DMORMV                  H323HUR240            intermitent                       parseCR                    STEP
...

12)parantez kullanarak da execution mumkun.
echo $( jot 10 1 10 )

13)Daha once tanimlanmis bir stringin bir bolumunu gormek istersek s:a:b gibi bir yapiyla bunu yapabiliyoruz.
bash-3.2$ str="this is a test string"
bash-3.2$ echo ${str:0:4}
this
bash-3.2$ echo ${str:10:4}
test

14)Daha once tanimlanmis bir stringin bir bolumunu degistirmek istersek s/a/b ya da s//a/b gibi bir yapiyla bunu yapabiliyoruz.

bash-3.2$ b=abc1234abc
bash-3.2$ echo ${b/abc/xyz}
xyz1234abc
bash-3.2$ echo ${b//abc/xyz}
xyz1234xyz

15)> ile >> arasindaki fark: > ile bir dosyaya yazariz. >> ile ise o dosyanin sonuna bizim ciktimiz eklenir.
bash-3.2$ echo $b > file.txt
bash-3.2$ echo $str >> file.txt
bash-3.2$ more file.txt
abc1234abc
this is a test string
bash-3.2$ echo $b > file.txt
bash-3.2$ more file.txt
abc1234abc

16)awk ilginc bir komut.

bash-3.2$ more stats.txt
1 2 3
4 5 6
7 8 9
10 11 12
bash-3.2$ cat stats.txt | awk 'BEGIN {print "start;a=0"} {print $1;++a} END{print "end;a="a}'
start;a=0
1
4
7
10
end;a=4
bash-3.2$   

17) tr komutu ile bir karakter digeriyle yer degistirilebiliyor.
bash-3.2$ cat stats.txt | tr ' ' ','
1,2,3
4,5,6
7,8,9
10,11,12

bash-3.2$ cat stats.txt | tr '1' 'A'
A 2 3
4 5 6
7 8 9
A0 AA A2

Ama:
bash-3.2$ cat stats.txt | tr ' ' ',' >> stats.txt
bash-3.2$ more stats.txt
1 2 3
4 5 6
7 8 9
10 11 12
1,2,3
4,5,6
7,8,9
10,11,12

Oysa:
bash-3.2$ cat stats.txt | tr ' ' ',' > stats.txt
bash-3.2$ more stats.txt
bash-3.2$   

Bu noktada bir tur hata var!!!

18) vi kullanarak script yazabiliyoruz.
Ilk basta comment gibi gorunse de ilk satir, scriptin hangi shell'e ait oldugunu gosteren satir.
..........
#!/bin/bash
ls
ls -l
..........
yazip ESC-wq-ENTER ile kaydedip "chmod 755 script.sh" ile file'i executable hale getirmeli.

19)
$# execute sirasinda gelen parametrelerin sayisi anlamina geliyor.
$@ ise o parametrelerin kendisi.

Deneme icin:
..............
#!/bin/bash
if [ $# -gt 3 ] ;then
echo $@
fi
.............

bash-3.2$ chmod 755 script.sh
bash-3.2$ ./script.sh
bash-3.2$ ./script.sh q
bash-3.2$ ./script.sh q w
bash-3.2$ ./script.sh q w e
bash-3.2$ ./script.sh q w e r
q w e r
bash-3.2$ ./script.sh q w e r t
q w e r t
bash-3.2$ ./script.sh q w e r t y
q w e r t y
bash-3.2$

20) $1, $2, $3 vs ile de parametreleri tek tek alabiliyoruz.
..............
#!/bin/bash
if [ $# -gt 3 ] ;then
echo $@
echo "1. parametre:" $1
echo "2. parametre:" $2
echo "3. parametre:" $3
fi
..............

bash-3.2$ ./script.sh q w e r t y
q w e r t y
1. parametre: q
2. parametre: w
3. parametre: e

21) Bu scriptler satir satir olmasa bile blok blok execute ediliyor. Dolayisiyla "sleep 10" gibi bir komutu kullanip, scriptin icerigini degistirirsek ve yeterince buyukse script degistirilmis sekliyle execute olur.

22) for dongusu su sekilde:
for i in 1 2 3 4
do
    echo bisey bisey
done

Burada i degiskenimiz. in den sonra gelense degisken uzayimiz.

Mesela for i in {1..10} dedigimizde i 1 ile 10 arasinda iken anlamina geliyor.

23)while dongusu su sekilde:
............
#!/bin/bash
y=1
while [ $y -le 10 ]
do
    y = $(($y + 1))
done
..............

Aslinda (()) yani cift parantezler aritmetik islemler icin kullanilir, fakat burada y'ye atamayi bir turlu yaptiramadim.


24)$1 ve ${1} 1. parametreye bak demek.
    
    
25)func() fonksiyon tanimi:

func()
{
echo $1
}

Burada $1 scriptin degil, fonksiyonun ilk parametresidir!
...................
#!/bin/bash
y=1
func()
{
echo $1
return 10
}

func 20
echo $?
...................

bash-3.2$ ./script.sh 30
20
10
bash-3.2$     


26) Burada dikkat edilmesi gereken nokta, return degerinin echo $? ile alinmasi. Bu deger, en son yapilan islemin sonucunu gosterir.


27) Arrayler:
................
#!/bin/bash
a=( 1 2 3 4 5 )
echo ${a[@]}
echo ${#a[@]}
...............
bash-3.2$ ./script.sh
1 2 3 4 5
5

a[7]=7 dedigimizde bir array tanimlamis ve 7. elemana 7 degerini koymus oluruz.


28)a+=(8) ise arrayimize eleman yerlestirmek anlamina gelir.
a+=(0)
a+=(1)
a+=(2)

diyerek 3 elemanli bir array kurup, degerlerini 0,1 ve 2 olarak belirledik demektir.   


29)Bu arrayin tum elemanlarini gostermek icin
echo ${a[6]}
demek yeterlidir.

echo ${#a[@]} ile de o dizideki deger atanmis eleman sayisini bulabiliriz.]]>
<![CDATA[FFMPEG ve WINDOWS]]>Tue, 31 Dec 2013 09:12:46 GMThttp://cybermilitia.org/sebil-programc305l305k-notlar305/ffmpeg-ve-windowsPicture










FFMPEG for Windows debug build icin gerekli adimlar:

  1. MS Studio 10, Python 27, Win DDK, Microsoft SDK ve Cmake'i kurup PATH'e yerleştirin.

  2. http://sourceforge.net/projects/mingw/files/latest/download?source=files linkine gir, dosyayi karsidan yukle de, mingw-get-setup.exe dosyasini masa ustune kaydet kaydet. Dosyayi calistir. Install ve ardindan Continue’larla ilerle. MinGW Installation Manager acilacak. Pencerenin solundan “Basic Setup” packagelarin tumunu isaretle. Installation menusunden Apply Changes’I sec. Acilan Schedule of Pending Actions penceresinde Apply de. VMWare altinda 8 dakika civari bir hizla indirme ve yukleme yapiyor. Close deyip kapa.

  3. C:\MinGW\msys\1.0 directorysi altinda msys.bat dosyasinin olup olmadigina bak.

  4. Command Prompt’ta C:\Program Files\Microsoft Visual Studio 10.0\VC\bin>vcvars32.bat I execute et.


  1. Bilgisayar->Gelismis Sistem ayarlari -> Ortam Degiskenleri -> Sistem Degiskenleri -> Path ’e “;C:\Users\<kullanıcı adı>\Desktop\ffmpeg-2.1.1; C:\Program Files\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE; C:\Program Files\Microsoft Visual Studio 10.0\VC\lib” ekle.

  2. Bilgisayar->Gelismis Sistem ayarlari -> Ortam Degiskenleri -> Sistem Degiskenleri icinde INCLUDE adinda bir parametre yarat ve deger olarak “C:\Program Files\Microsoft Visual Studio 10.0\VC\include; C:\Program Files\Microsoft SDKs\Windows\v7.1\Include” ekle.

  3. Bilgisayar->Gelismis Sistem ayarlari -> Ortam Degiskenleri -> Sistem Degiskenleri icinde LIB adinda bir parametre yarat ve deger olarak “C:\Program Files\Microsoft Visual Studio 10.0\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib” ekle.

  4. http://www.ffmpeg.org/releases/ffmpeg-2.1.1.tar.gz linkindeki ffpmeg’in son versiyonunu indir. Su anki versiyonu Fourier. Daha sonra http://www.ffmpeg.org/download.html linkini son yuk icin check etmeyi unutma.

  5. Gelen ffmpeg-2.1.1.tar.gz dosyasini 7Z ile acarak Desktop’a ffmpeg-2.1.1 folderi olarak extract et. (Tar ve GZ ayri ayri cozuluyor.)

  6. C:\MinGW\msys\1.0 directorysi altinda msys.bat dosyasini calistir. Acilan pencerede sol ustteki iconu tiklayarak ozellikleri ac ve Duzenleme Seceneklerinde Hizli Duzenleme Modu’nu tikla. Tamam de.

  7. https://github.com/downloads/libav/c99-to-c89/c99-to-c89-1.0.zip den indirdigin zipin icindeki uc dosyayi (c99wrap.exe, c99conv.exe ve makedef) ffmpeg-2.1.1 directorysinin altina kopyala.

  8. “$ which link” dediginde  /bin/link.exe yi verecektir. “$ mv /bin/link.exe /bin/link_old.exe” yi execute et. Ardindan yine “$ which link” dediginde /c/Program Files/Microsoft Visual Studio 10.0/VC/bin/link.exe vermeli. Vermemisse ln –s komutlarini kullanarak bunu sagla.

  9. http://msinttypes.googlecode.com/files/msinttypes-r26.zip  dan indirdigin msinttypes-r26.zip’teki  dosyalari (stdint.h ve inttypes.h onemli) yine ffmpeg-2.1.1 directorysinin altina kopyala.

  10. http://www.tortall.net/projects/yasm/releases/yasm-1.2.0-win32.exe dosyasini indir ve C:\ altinda “yasm” adli bir klasor yaratarak altina kopyala.

  11. http://win32builder.gnome.org/gtk+-bundle_3.6.4-20130921_win32.zip dosyasini indir. C:\ altinda “gtk” adiyla bir folder olustur. Gelen zip’I buraya extract et.

  12. Bilgisayar->Gelismis Sistem ayarlari -> Ortam Degiskenleri -> Sistem Degiskenleri -> Path I editle ve sonuna “;C:\gtk\bin” ekle.

  13. <Loglar icin bir baska msys.bat acarak $ cd /c/Users/<kullanıcı adı>/Desktop/ffmpeg-2.1.1; tail -f config.log>

  14. $ ./configure --prefix=ffmpeg/ -- extra-cflags=-I/c/MinGW/bin --yasmexe='C:/yasm/yasm-1.2.0-win32.exe' --cpu=i686 --toolchain=msvc --enable-debug --enable-shared

  15. $ make; make install

  16. Yardım için cybermilitia@cybermilitia.org adresine config.log dosyasını, make koşturduysanız configure ve make loglarınızı, msys.bat konsolundan şu komutlarla elde ettiğiniz outputları da koyarak mail atın:

    > echo $PATH

    > echo $INCLUDE

    > echo $LIB
]]>
<![CDATA[Mause Zahn ile trafik toolu]]>Mon, 30 Dec 2013 10:31:13 GMThttp://cybermilitia.org/sebil-programc305l305k-notlar305/mause-zahn-ile-trafik-tooluPicture





1) http://www.perihel.at/sec/mz/mz-0.40.tar.gz 'dan dosyayı indirin.
2) Cmake'i http://www.cmake.org/files/v2.8/cmake-2.8.12.1-win32-x86.exe linkinden kurun.

Cmake'i PATH'e doğru girdiğinizden emin olun.
3) CygWin'i http://cygwin.com/setup-x86.exe linkinden kurun. Çalıştırdıktan sonra "> echo $PATH" ile PATH'e doğru girildiğinden emin olun.
4) mz-0.40.tar.gz dosyasını açıp uygun bir yere yerleştirin.

5) CygWin'i açın ve Mause Zahn'ı yerleştirdiğiniz yere gidin. " cmake ." komutunu çalıştırın. Visual Studio 12 kurmuşsanız PATH'den okuyup ona göre solution yaratacaktır. Diğer Visual Studio versiyonlarını denemedim.
6) http://sourceforge.net/projects/libnet/files/libnet/0.10.11/libnet-0.10.11.zip/download linkinden libnet folderını indirin. C'nin altında bir yere kopyalayın. Ve PATH'in içine ekleyin. Bizim için önemli olan libnet.h dosyası. İsterseniz yalnızca bu dosyayı folderdaki include subfolderından alıp, solution'a ekleyebilirsiniz.
7) Mausezahn solution'ını açın. Ve build edin.
#include <unistd.h>
#include <pcap.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>

Dosyalarında sorun çıkacaktır. Mausezahn directorysinin içine gerekli olan netinet, net, arpa, sys folderlarını internetten download edip ekleyin. Sonra mz subsolutionının Properties'ini açıp, aşağıdaki gibi bu directoryleri include olarak girin.
8) Bu eklemelerin ardından build edin.
PS: Mause Zahn'da örneğin RTCP packeti yoktur. Yapmanız gereken rtp için yapılmış fonksiyonları incelemek ve rtcp için de aynı tür fonksiyonları yaratmak.
]]>