Linux Komutları Temel Linux Komutları - Sed ve Awk, Kabuk Programlama - Bash / Csh, Süreç Otomasyonu - crontab vb.
ls komutu ls [dizin] : Dizin içeriğini gösterir. Dizin verilmezse içinde bulunulan dizini gösterir. Mesela Root (/) dizinin içeriğini görmek için: $ ls / bin boot cdrom dev etc home lib lost+found media mnt opt proc root sbin selinux srv sub sys tmp usr var Ancak sadece ls dersek: $ ls Desktop Documents Downloads examples.desktop namaz ncnn Pictures Public Templates tezim Videos
pwd komutu pwd : İçerisinde bulunulan dizinin adını/yolunu gösterir. $ pwd /home/mercan ls /home/mercan dersek: $ ls /home/mercan Desktop Documents Downloads examples.desktop namaz ncnn Pictures Public Templates tezim Videos
Ev (Home) Dizini Sisteme girince (login olunca) kendi ev dizinimizde başlarız. Her kullanıcının ev dizini kendi kontrolündedir. Bu dizinde kullanıcı yeni dosyalar ve dizinler oluşturabilir. ~ işareti, Ev dizini için bir kısa yoldur. $ ls ~ Desktop Documents Downloads examples.desktop namaz ncnn Pictures Public Templates tezim Videos
cd komutu cd [dizin] : Verilen dizine gider. Dizin adı verilmezse ev dizinine gider. $ pwd /home/mercan $ cd Desktop $ pwd /home/mercan/desktop
$ pwd /home/mercan $ cd Desktop $ pwd /home/mercan/desktop $ cd / $ cd Desktop -bash: cd: Desktop: No such file or directory Tam Yol /Göreli Yol (Path) $ pwd / $ ls bin dev lost+found mnt root srv tmp boot etc opt sbin sub usr cdrom home lib media proc selinux sys var $ cd /home/mercan/desktop $ pwd /home/mercan/desktop
Dizin Kısa yolları (./ ve../ ) Bulunulan Dizin Kısa yolu (. ): $ ls. Desktop Documents Downloads examples.desktop namaz ncnn Pictures Public Templates tezim Videos Bir üst dizin kısayolu (.. ): $ ls.. mercan
cp komutu cp { -r dizin dosya } hedefdizin : Dizin / Dosya 'yı hedefdizin'e kopyalar. -r Dizin kopyalamak için gereklidir. $ cp dosya1 Desktop/ $ cp /tmp/birdosya./ $ cp -r Videos Desktop/ $ cp -r ~/ /mnt/yedekdiski/
mv komutu mv -n { dizin dosya } { hedefdizin dosyayayeniisim } : Dizin / Dosya 'yı hedefdizin'e taşır, yada dosyayayeniisim adı ile taşır. -n ile var olan bir dosyanın üzerine yazma engellenir. $ mv dosya1 Desktop/ $ mv -n dosya1 Desktop/ $ mv /tmp/birdosya./ $ mv Videos Desktop/ $ mv ahmet.txt mehmet.txt
rm komutu rm [ -i ] { -r dizin dosya } : Dizin / Dosya 'yı siler. -r : Dizin silmek için gereklidir. -i : Her dosya için ayrı ayrı onay sormasını sağlar. $ rm dosya1 $ rm -i /tmp/birdosya $ rm Videos/ rm: cannot remove `Videos/': Is a directory $ rm -r Videos/
mkdir komutu mkdir dizin : Dizin adında yeni bir dizin oluşturur. $ mkdir Odevler $ mkdir Odevler/Odev1 $ mkdir ~/Odevler/Odev2 rmdir dizin : Dizin adındaki boş dizini siler. $ rmdir Desktop/ rmdir: failed to remove `Desktop/': Directory not empty
nano editor http://wiki.uhem.itu.edu.tr/w/index.php/login_sunucular%c4%b1nda_dosya_%c4%b0%c3%a7eri%c4%9fini_de%c4%9fi%c5%9ftirme
ls -l -h ls komutuna -l (küçük L) parametresi verilerek: Erişim Hakları Sahibi Grubu Boyutu (Byte olarak) Değişilik Tarihi Dosya Adı bilgileri görüntülenir. drwxr-xr-x 2 mercan mscelebi 4096 Apr 12 12:56 sonuc_tanima -rw-r--r-- 1 mercan mscelebi 7298402 Apr 12 12:57 target.png -rwxr-xr-x 1 mercan mscelebi 1037 Apr 13 10:52 temizle.sh ls -l komutuna bir de -h parametresi eklersek boyutu uygun birimde gösterir: drwxr-xr-x 2 mercan mscelebi 4.0K Apr 12 12:56 sonuc_tanima -rw-r--r-- 1 mercan mscelebi 7.3M Apr 12 12:57 target.png -rwxr-xr-x 1 mercan mscelebi 1.1K Apr 13 10:52 temizle.sh
ls -lrt # ls -lrt total 10248 -rw-r--r-- 1 root root 372187 Jan 5 01:47 deletedlist.2015 -rw-r--r-- 1 root root 7805904 Jan 12 01:57 rs_file_aging -rw-r--r-- 1 root root 4327 Jan 15 09:00 ibdiagnet_ibis.log -rw-r--r-- 1 root root 1371211 Jan 15 09:00 ibdiagnet.db -rw-r--r-- 1 root root 283686 Jan 15 09:00 ibdiagnet.lst -rw-r--r-- 1 root root 18367 Jan 15 09:04 ibdiagnet.pkey -rw-r--r-- 1 root root 550412 Jan 15 09:04 ibdiagnet.fdbs -rw-r--r-- 1 root root 110 Jan 15 09:05 ibdiagnet.sm -rw-r--r-- 1 root root 23325 Jan 15 09:05 ibdiagnet.mcfdbs -rw-r--r-- 1 root root 1371 Jan 15 09:05 ibdiagnet.log -rw-r--r-- 1 root root 5194 Jan 15 09:11 pim.info.manager -rw-r--r-- 1 root root 13 Jan 15 09:23 tmp_mailbody
man komutu man komut : : ( ( ). <(. : ( > : ( (. ( ( > ( ( (< ( (B(. ) (< ( < ( )(B :( ( (. $ man cp $ man mkdir
man komutu
tar komutu (Arşiv dosyası oluşturmak) tar c[ v ][ z j ]f tardosyası { dosyalar dizin } : Dizin / Dosyalar 'ı tardosyası adında tekbir dosya haline getirir. c : dizin/dosyalar'dan yeni bir tar dosyası oluştur. v : birleştirilen dosyalar hakkında bilgi ver. z : birleştirilen dosyayı zipleyerek sıkıştır. j : birleştirilen dosyayı b2zip ile sıkıştır. $ tar cvzf odev1.tgz odev1/ a odev1/ a odev1/sonuclar.txt a odev1/program.exe
tar komutu (Arşiv dosyası geri açmak) tar x[ v ][ z j ]f tardosyası : Dizin / Dosyalar 'ı tardosyası adında tekbir dosya haline getirir. x : tardosyası'nı geri aç. v : açılan dosyalar hakkında bilgi ver. z : tardosyası zip ile sıkıştırılmıştı. j : tardosyası b2zip ile sıkıştırılmıştı. $ tar xvzf odev1.tgz x odev1/ x odev1/sonuclar.txt x odev1/program.exe
Uzaktaki Makineye Erişim hostname: Bulunulan makinenin adını gösterir. Çeşitli Bağlantı yöntemleri: Terminal bağlantısı: Ssh: güvenli (şifreli) bağlantı, ilave port taşıtmak mümkün. Telnet, rsh: Güvensiz (şifresiz), eski, kullanmayın. Masaüstü bağlantısı: Vnc : yaygın kullanımda
ssh ssh [-X] [ -l kullanıcı] bilgisayar ssh [-X] kullanıcı@bilgisayar Uzaktaki bilgisayar'a kullanıcı kullanıcısı ile güvenli terminal bağlantısı sağlar. -l (küçük L) ile kullanıcı verilmezse, çalıştıran kullanıcı ile bağlanır. -X ile X görüntüsü aktarımını da sağlar. Örnekler: ssh -X akinci@lnode2.uybhm.itu.edu.tr ssh -X -l akinci lnode2.uybhm.itu.edu.tr ssh -X lnode2.uybhm.itu.edu.tr -l akinci
Uzaktaki Makineye Erişim Bir bilgisayarı internete/ağa bağlamak için IP denilen bir ağ numarasına ihtiyaç vardır. Ancak kolaylık için alan adı denilen isimler kullanılır. Mesala: Makine Alan Adı: lnode1.uybhm.itu.edu.tr IP Adres: 160.75.121.131 Makine Alan Adı: www.google.com IP Adres: 209.85.149.147 Ayrıca bilgisayardaki dışarıdan gelen isteklere cevap verecek her programın bir port numarasına ihtiyacı vardır: ssh port no:22 web server (http) port no:80 x-server port no:6000,6001,...
Uzaktaki Makineye Erişim Bir bilgisayarı internete/ağa bağlamak için IP denilen bir ağ numarasına ihtiyaç vardır. Ancak kolaylık için alan adı denilen isimler kullanılır. Mesala: Makine Alan Adı: lnode1.uybhm.itu.edu.tr IP Adres: 160.75.121.131 Makine Alan Adı: www.google.com IP Adres: 209.85.149.147 Ayrıca bilgisayardaki dışarıdan gelen isteklere cevap verecek her programın bir port numarasına ihtiyacı vardır: ssh port no:22 web server (http) port no:80 x-server port no:6000,6001,...
Uzaktaki Makineye Erişim Bilgisayarlarda ve ağ cihazlarında (router), haberleşmenin IP yada port bilgisine bakarak, haberleşmeye izin veren yada engelleyen programlar vardır. Bilgisayarlardakine firewall (güvenlik duvarı) denir. Genellikle ssh portu açıkken, x-server, rsh vb. daha az kullanılan portlar kapalıdır. Bu sebeble ssh port tunneling / forwarding denen bir özellikle görüntü taşımaya da izin verir. DISPLAY değişkeni normalde görüntü aktarmada kullanılırken, ssh port forwarding ile bu değişkeni ayarlamaya gerek kalmaz. Yani değiştirmeyin, dokunmayın, ellemeyin!
scp Kendi makinamızdan Uzaktaki makinaya: scp { -r dizin dosya } kullanıcı@bilgisayar:hedefdizin Dizin / Dosya 'yı uzaktaki bilgisayar 'ın kullanıcı kullanıcısının hedefdizin 'ine kopyalar. Örnek: scp -r hesap/ mercan@lnode2.uybhm.itu.edu.tr:~/ Uzaktaki makinadan Kendi makinamıza: scp [-r] kullanıcı@bilgisayar:{dizin dosya } hedefdizin Uzaktaki bilgisayar 'ın kullanıcı kullanıcısının Dizin / Dosya 'sını bulunulan makinenin hedefdizin 'ine kopyalar. Dizin için -r gereklidir. Örnek: scp -r mercan@lnode2.uybhm.itu.edu.tr:~/hesap ~/
şifresiz ssh ssh-keygen -t dsa Enter file in which to save the key (/home/mercan/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/mercan/.ssh/id_dsa. Your public key has been saved in /home/mercan/.ssh/id_dsa.pub. The key fingerprint is: 04:be:15:aa:1d:0a:1e:e2:a1:e5:de:93:4f:b1:a6:01 mercan@burasi scp ~/.ssh/id_dsa.pub root@uzaktaki:~/ ssh root@uzaktaki # cat ~/id_dsa.pub >>.ssh/authorized_keys ssh root@uzaktaki #
ssh ile komut çalıştırmak ssh root@uzaktaki ls /tmp Uzaktaki makinada ls /tmp komutunu çalıştırır. ssh root@uzaktaki shutdown -h now Uzaktaki makinayı kapatır.
nano ile dosyamız Windowsta yazdığımız dosyamızı linux'a taşıdık. Nano editörü ile içine bakarken DOS formatından dönüştürüldüğüne dikkat edin! Sadece görüntülenirken dönüştürülüyor dosya değiştirilmiyor.
Bir garip Hata! Subject: Job 179575: <#!/bin/bash^m;#bsub -q tezq^m;#bsub -oo birsh.txt^m;^m;ls -alh^m> Exited Job <#!/bin/bash^m;#bsub -q tezq^m;#bsub -oo birsh.txt^m;^m;ls -alh^m> was submitted from host <cn02> by user <mercan>. Job was executed on host(s) <cn18>, in queue <tezq>, as user <mercan>. </SFS2/users/mercan> was used as the home directory. Your job looked like: ------------------------------------------------------------ # LSBATCH: User input #!/bin/bash^m #BSUB -q tezq^m #BSUB -oo birsh.txt^m ^M ls -alh^m ------------------------------------------------------------ Exited with exit code 126. The output (if any) follows: /bin/bash^m: bad interpreter: No such file or directory
dos2unix dos2unix dosya_ms [dosyalinux] windows dosyası dosya_ms 'i linux formatına çeviririp dosyalinux adıyla kaydeder. Dosyalinux verilmezse yine dosya_ms dosyasının üzerine yazar. Örnek: dos2unix Makefile Makefile_linux dos2unix Makefile
Kullanıcılar Linux'ta her kullanıcının bazı temel özellikleri vardır: Kullanıcı Adı Şifresi Kullanıcı numarası Kullanıcı ana grubu Kullanıcı Uzun (Gerçek) Adı Ev dizini Kullandığı kabuk Kullanıcılar ilave grublara da üye olabilirler. Her sistemde herşeyi yapmaya yetkili bir root kullanıcısı vardır. hpsmh:x:101:501::/opt/hp/hpsmh:/sbin/nologin vtunesag:x:28888:28888::/sbin:/bin/false materials:x:501:0:materials Studio User :/home/materials:/bin/bash
passwd komutu passwd : kullanıcının şifresini değiştirir. Önce eski şifreyi sorar. Sonrasında 2 kez yeni şifreyi ister. $ passwd Changing password for user mercan. Enter login(ldap) password: New UNIX password: Retype new UNIX password: LDAP password information changed for mercan passwd: all authentication tokens updated successfully.
id komutu İd [kullanıcı] : kullanıcı hakkında bilgi verir, kullanıcı verilmezse komutu çalıştıranın bilgilerini gösterir. $ id uid=1022(mercan) gid=5001(mscelebi) groups=12(mail),13(news),2000(gaussian),5001(mscelebi) $ id root uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) $ id adem uid=1374(adem) gid=5000(starter) groups=5000(starter), 2000(gaussian)
getent komutu getent komutu bilgisayar hakkında çeşitli bilgileri gösterir. getent passwd Geçerli tüm kullanıcı listesini verir. hbm51301:x:641:363:hbm51301:/akdeniz/users/hbm51301:/bin/bash hbm51302:x:642:363:hbm51302:/akdeniz/users/hbm51302:/bin/bash hbm51303:x:643:363:hbm51303:/akdeniz/users/hbm51303:/bin/bash hbm51304:x:644:363:hbm51304:/akdeniz/users/hbm51304:/bin/bash passwd dışında aliases, ethers, group, hosts, netgroup, networks, protocols, rpc, services, shadow parametreleri var.
Dosya Hakları Linux'ta her dosyanın/klasörün bir sahibi vardır. Her dosyanın ayrıca sistemin takip ettiği 3 grup hakları vardır: Dosya Sahibinin Hakları Dosya Grubundaki Diğer Kullanıcıların Hakları Geriye Kalan Diğer Kullanıcıların Hakları Her grubun 3 tip hak bilgisi tutulur: Yazma Hakkı Okuma Hakkı (dizinler için dizin içindeki dosya adlarını görme hakkı) Çalıştırma Hakkı (dizinler için dizine girme hakkı)
ls -l -h ls komutuna -l (küçük L) parametresi verilerek: Erişim Hakları Sahibi Grubu Boyutu (Byte olarak) Değişilik Tarihi Dosya Adı bilgileri görüntülenir. drwxr-xr-x 2 mercan mscelebi 4096 Apr 12 12:56 sonuc_tanima -rw-r--r-- 1 mercan mscelebi 7298402 Apr 12 12:57 target.png -rwxr-xr-x 1 mercan mscelebi 1037 Apr 13 10:52 temizle.sh ls -l komutuna bir de -h parametresi eklersek boyutu uygun birimde gösterir: drwxr-xr-x 2 mercan mscelebi 4.0K Apr 12 12:56 sonuc_tanima -rw-r--r-- 1 mercan mscelebi 7.3M Apr 12 12:57 target.png -rwxr-xr-x 1 mercan mscelebi 1.1K Apr 13 10:52 temizle.sh
chmod chmod [-R] kişilerhaklar { dosya dizin } : Dosya /Dizin erişim haklarını değiştirir. -R ile dizindeki tüm alt dizinleri / dosyaları da değiştirir. Kişiler: u : kullanıcının kendisi g : kullanıcının kendi ana grubu o: bunların dışındaki diğer kullanıcılar a: Tüm kullanıcılar Haklar: w : yazma hakkı r : okuma hakkı, dizinler için dizin içindeki dosya adlarını görme hakkı x: çalıştırma hakkı, dizinler için dizine girme hakkı. + - : + ile hak verilir, - ile hak geri alınır Örnek : chmod -R a+rx hesap/ bu komut ile herkese (a) hesap dizinindeki tüm dosyaları okuma (r) ve çalıştırma (x) hakkı veriliyor.
chown chown [-R] kullanıcı:grubu { dosya dizin } : Dosya /Dizin sahibi olan kullanıcı ve grubunu değiştirir. -R ile dizindeki tüm alt dizinleri / dosyaları da değiştirir. Örnek : chmod -R mercan:workshop hesap/ bu komut ile hesap dizinindeki tüm dosyaların sahibi mercan kullanıcısı ve workshop grubu yapılıyor.
ls -a Linux, ismi. (nokta) ile başlayan dosyaları gizli dosya olarak görür. Normalde bu dosyalar ls komutu ile görüntülemez. ls komutuna -a parametresi verilince gizli dosyaları da gösterir. $ ls matmul mpihello ncnn $ ls -a....bash_history.lsbatch matmul.mpd.conf mpihello ncnn.profile.ssh.viminfo.xauthority
df -h df [-h] : Bilgisayara bağlı diskler hakkında bilgi verir. -h ile disk boyutlarını uygun birim cinsinden verir. $ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 151717124 25115228 118895116 18% / /dev/sda1 101086 15170 80697 16% /boot none 1990388 0 1990388 0% /dev/shm $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 145G 24G 114G 18% / /dev/sda1 99M 15M 79M 16% /boot none 1.9G 0 1.9G 0% /dev/shm
du -s -h du [-s] [-h] { dosya dizin } : Dizin / Dosya 'nın diskte ne kadar yer kapladığını gösterir. -s : dizinin toplam boyunu göster, ayrı ayrı gösterme. -h : boyut bilgisini uygun birimde göster. $ du -h 14M./dizin_naynisi_ipostaticO3 4.0K./ctube_real 7.3G./dizin_OPAK-50PARCA-CLAHE-CE 14M./dizin_naynisi_ 2.1M./dizin_naynisi_nop_gcc 2.5M./medi3
~/.profile ~/.bashrc Kabuk (shell) başlatılırken bazı dosyalar çalıştırılır. Hangi kabuğu kullandığınıza göre farklı dosyalar çalıştırılır. Sistem geneli için /etc/profile dosyası sonrasında da kişisel ayar dosyası çalıştırılır. Bash için, aşağıdaki dosyalardan sadece ilk bulunan çalıştırılır: $HOME/.profile $HOME/.bash_profile $HOME/.bash_login Şayet kabuk bir login işlemi sonucu açılmamışsa sadece $HOME/.bashrc dosyası varsa o çalıştırılır.
Kabuk (Shell) Ortamı Kabuk (shell), yazdığımız komutları çalıştırabildiğimiz etkileşimli bir ortam sunan bir programdır. Linux /Unix'de birçok kabuk (shell) vardır: sh, bash, csh, tcsh, fish vb. Bash en yaygın kullanılan kabuktur. Bash, sh kabuğunun yeniden GNU projesi kapsamında yeniden yazılması ile oluşmuştur. Sh'dan daha gelişmiş özelliklere sahiptir. Bash'in sistem genelindeki ayarları /etc/profile dosyasındadır. Kişisel ayarlarımız ise kendi ev dizinimizde duran bazı dosyalarda durur.
Kabuk (Shell) Ortamı Linux /Unix kabuklarında (shell) pek çok ayar değişkenler üzerinden yapılır. Bazı ayarlamalar için komutlar olsa da pratikteki pek çok durum için değişkenler üzerinden ayarlama yapılır. Özel değişkenlerin değerlerinin değişmesi kabuğun tamamen farklı davranmasına yol açar. Mesela çalıştırmak istediğiniz komutun hangisi olduğunu belirlenirken $PATH değişkenindeki dizinler, oradaki sıralarına göre kontrol edilir. Bu dizinlerde komutu bulamazsa, komut bulunamadı hatası verir, başka yerlere bakmaz.
Kabuk Değişkenleri Değişken isimleri harfle başlayıp; harf, rakam yada _ karakteri ile devam edebilir. Ingilizce karakterler değişken isminde kullanılabilir. Türkçeye özel karakterler isim için kullanılamaz. Değişken isimlerinin BUYUK harflerden seçilmesi adeti vardır ama mecburi değildir. Harflerin büyük yada küçük olmasına
env env yada printenv komutları ile o an tanımlı değişkenleri ve değerlerini görebiliriz. $ env MANPATH=/SFS2/progs/intel/idbe/10.1.012/ man:/sfs2/progs/intel/cce/10.1.012/man HOSTNAME=cn02 INTEL_LICENSE_FILE=/SFS2/progs/licens es TERM=xterm-color SHELL=/bin/bash
export / echo export DEGISKEN=deger : şeklinde değişken tanımlayabiliriz. Örnek: export FAYDASIZ= Nerede burada orada? echo [DEGISKEN] [yazılar] : terminale yazı yazdırmaya yarar. Değişken değerini yada istediğimiz her hangi bir yazıyı yazdırabiliriz. Örnek: echo $FAYDASIZ
$PATH Değişkeni Komutların aranacağı dizin listesini tutar. Dizinler arasını : karakteri ayırır. Çalıştırmak istediğiniz komutun hangisi olduğunu belirlenirken $PATH değişkenindeki dizinler, oradaki sıralarına göre kontrol edilir. Bu dizinlerde komutu bulamazsa, komut bulunamadı hatası verir, başka yerlere bakmaz. $ export PATH="" $ ls -bash: ls: No such file or directory
which $ echo $PATH /RS/progs/intel/impi/3.1/bin64 :/RS/progs/intel/ Compiler/11.1/069/bin/intel64 :/RS/progs/intel/ Compiler/11.1/069/bin/intel64 :/usr/bin :/bin :/usr/local/bin :/local/bin :/sbin :/usr/sbin :/usr/ ucb :/usr/sbin :/usr/bsd :/usr/bin :/bin :/usr/local/bin :/local/bin :/sbin :/usr/sbin :/usr/ucb :/usr/ sbin :/usr/bsd :/RS/progs/LSF/gui/2.0/bin :/RS/progs/ LSF/perf/1.2/bin :/usr/bin :/bin :/usr/ local/bin :/local/bin :/sbin :/usr/sbin :/usr/ucb :/usr/sbin :/usr/bsd :/RS/progs/LSF/7.0/ linux2.6-glibc2.3-x86_64/etc :/RS/progs/LSF/7.0/linux2.6-glibc2.3-x86_64/bin :/usr/kerberos/bin :/usr/ local/bin :/bin:/usr/bin :/RS/progs/LSF/7.0/ linux2.6-glibc2.3- x86_64/bin/k3di :/AKDENIZ/ users/mercan/bin which komut : Komutun hangi dizinden çalıştırıldığını gösterir. $ which ls
echo echo [-n] [-e] [yazılar] : terminale yazı yazdırmaya yarar. -n ile yazının sonunda aşağı satıra geçmez. -e ile \ ile başlayan özel karakterleri tanır (kullanır). Örnek: ahmet ahmet echo ahmet ; echo ahmet echo -n ahmet ; echo ahmet ahmetahmet echo -e \t1\t2\t3\t4 1 2 3 4
Yazı sınırlama ( ) karakteri ile içerisinde boşluklar bulunan bir yazı, tek bir kelime gibi gruplanabilir. Örnek: mkdir ahmet mercan ls ahmet mercan mkdir ahmet mercan ls ahmet mercan export AHMET= ahmet mercan
Yazı sınırlama ( ) ve $ işareti karakteri ile içerisindeki değişkenler ve bazı ifadeler çözümlenir. Örnek: export AHMET= ahmet mercan mkdir cem $AHMET ; ls cem ahmet mercan Fakat: mkdir $AHMETa aittir ; ls aittir Çözüm: mkdir ${AHMET}a aittir ls ahmet mercana aittir
Yazı sınırlama (') ' karakteri ile içerisinde boşluklar bulunan bir yazı, tek bir kelime gibi gruplanabilir. karakterinden farklı olarak değişkenler çözümlenmez. Örnek: mkdir 'ahmet mercan' ls ahmet mercan mkdir '$AHMET' ls $AHMET
Yazı sınırlama (`) yada $() ` karakteri ile içerisinde yazılanlar çalıştırılarak çıktıları değer olarak alınır. Örnek: export LISTE=`ls dizin` echo $LISTE veli.doc veli.txt resim.jpg sarki.mp3 ses.mp3 Ya da: export LISTE=$( ls dizin ) echo $LISTE veli.doc veli.txt resim.jpg sarki.mp3 ses.mp3
Kaçış karakteri (\) Özel anlamlalı karakterleri kullanmak için, \ karakteri ile onların doğrudan kendi anlamları ile kullanabiliriz. Örnek: *.mp3 echo \*.mp3 Boşluk için: mkdir ahmet\ mercan ; ls ahmet mercan Ya da kendi kendisi için: echo \\ kulanimi \ kullanimi
* işareti * işareti ile herhangi bir şey demiş oluruz. Mesela: ls veli.doc veli.txt resim.jpg sarki.mp3 ses.mp3 ls *.mp3 sarki.mp3 ses.mp3 ls veli* veli.doc veli.txt
{ } işareti { } arasında liste verilebilir. Mesela: ls veli.{doc,txt} veli.doc veli.txt convert resim{.jpg,.png} ls resim.jpg resim.png
[ ] işareti [ ] arasında aralık verilebilir. Mesela: ls dosya[1-7].txt dosya2.txt dosya3.txt dosya6.txt rm /var/log/messages.[1-9] rm /tmp/tmp[0-9][0-9][0-9][0-9]
> işareti Komutun ekrana yazacağını bir dosyaya kaydeder. Dosya varsa onu silip üstüne kaydeder. Mesela: ls veli.{doc,txt} veli.doc veli.txt ls veli.{doc,txt} >veliler ls *.mp3 >mp3listesi.txt Bazen çıktıyı çöpe atmak isteriz: ls mp3listesi.txt >/dev/null
>> işareti Komutun ekrana yazacağını bir dosyaya kaydeder. Dosya varsa mevcutları koruyup, en alta ilave eder. Dosya yoksa yeni bir dosya oluşturur. Mesela: ls Dizin1/*.mp3 >>mp3listesi.txt ls Dizin2/*.mp3 >>mp3listesi.txt ls Dizin3/*.mp3 >>mp3listesi.txt
cat komutu cat kendisine verilen dosyayı ekrana yazar. echo yazıyı yazar, cat dosya içeriğini yazar. Mesela: ls Dizin1/*.mp3 >>mp3listesi.txt ls Dizin2/*.mp3 >>mp3listesi.txt ls Dizin3/*.mp3 >>mp3listesi.txt cat mp3listesi.txt
more ve less komutu more ve less komutları ile bir dosyanın içeriği görüntülenebilir. less more'dan daha fazla özelliğe sahiptir. Ancak daha eski olan more daha yaygındır. Mesela: ls Dizin1/*.mp3 >>mp3listesi.txt ls Dizin2/*.mp3 >>mp3listesi.txt ls Dizin3/*.mp3 >>mp3listesi.txt more mp3listesi.txt
head ve tail komutları head komutu dosyanın başından n adet satırı görüntüler. tail komutu dosyanın sonundan n adet satırı görüntüler. Mesela: head -10 mp3listesi.txt tail -5 mp3listesi.txt
Dikkat Çok Önemli! Satır İşleme
sort komutu sort kendisine verilen dosyayı sıraya dizerek ekrana yazar. -n ile sayısal sıralama yapar. -r ile ters sıralama yapar. -k ile başlangıç kelimesi yerine istenilen sütundaki kelimelere göre sıraya dizer. Mesela: sort mp3listesi.txt Bir sarki.mp3 Bir Sezen Aksu Sarkisi.mp3 Muazzez Abaci.mp3 Sezencik.mp3 sezen aksudan türküler.mp3
grep komutu grep kendisine verilen dosyayı ekrana yazarken verilen kritere göre eleme yapar. -v ile kritere uymayanları gösterir. -i ile büyük/küçük harf ayırmadan filtreler: grep Sezen mp3listesi.txt Sezencik.mp3 Bir Sezen Aksu Sarkisi.mp3 grep -i Sezen mp3listesi.txt Sezencik.mp3 Bir Sezen Aksu Sarkisi.mp3 sezen aksudan türküler.mp3 grep -v root /etc/passwd nobody:*:-2:-2:unprivileged User:/var/empty:/usr/bin/false daemon:*:1:1:system Services:/var/root:/usr/bin/false
grep komutu --color ile kritere uyanları renkli gösterir. -r ile alt dizinleri de arar. -n ile bulduğu dosyanın adını ve satır numarasını da yazar. 160.75.90.50 ifadesini /etc dizininde aratalım: grep -nr --color 160.75.90.50 /etc /etc/httpd/access:33: Server 160.75.90.50 /etc/httpd/logs/pma-error_log.2:1: host 160.75.90.50 is missing /etc/httpd/logs/pma-error_log.2:8: host 160.75.90.50 is missing
RegEx (Regular Expressions) Aranacak bir ifadeyi (metni) sabit/kesin/net bir şekilde yazamadığımızda ama belli şartlara uyan metinleri ifade etmek istediğimizde kullanabileceğimiz bir standartdır. Mesela, Büyük B harfi ile başlayan herşey demek için: B.*. herhangi bir karakter demektir. B.N BiN B?N B1N * kendisinden önceki ifadenin 0 ila sonsuz sayıda tekrarı H* H HH HHHHHHHH [ ] içerisinde aralık verilir. dosya[0-9] dosya1 dosya9 ^ Satır Başı ^Ahmet Satırın başında Ahmet olan demek $ Satır Sonu ^$ Satır Boş demek
RegEx (Regular Expressions) karakterinin sağı yada solundaki demektir. Ahmet Mehmet Ahmet Mehmet \ RegEx'de özel karekterleri yazmak için 12\$ 12$ (Satır sonunda 12 değil!) \( \) içerisinde verilen ifadeyi başka yerde kullanmak için \(dosya[0-9]\) daha sonra \1 (yada kaçıncı ise \2 vb.) *** RegEx vim editöründe de geçerlidir.
grep komutu --color ile kritere uyanları renkli gösterir. -r ile alt dizinleri de arar. -n ile bulduğu dosyanın adını ve satır numarasını da yazar. -e ile yada -E ile verilen regex ifadesini uygular. 160.75.90.50 ifadesini /etc dizininde aratalım: grep -nr --color '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc /etc/httpd/logs/admin-access_log.2:40826:10.0.30.9 - - [03/Jan/2015:06:56:40 +0200] "GET /ld50_jobs.html HTTP/1.1" 200 27572 /etc/httpd/logs/admin-access_log.2:40827:10.0.30.9 - - [03/Jan/2015:06:56:41 +0200] "GET /ld50_bhost.html HTTP/1.1" 200 141820 /etc/httpd/logs/admin-access_log.2:40828:10.0.30.9 - -
sed komutu sed kendisine verilen dosyayı satır satır işleyerek -e yada -r ile regex kurallarını uygular. Sonucu ekrana yazar. -i parametresi ile dosya üzerinde değişiklik yapar. Bul-Değiştir: s/aranan/yenideger/g Mesela: sed -e 's/:/\t/g' /etc/passwd root x 0 0 /bin/sh daemon x 10 10 /usr/bin/false nobody x 77 10 /usr/bin/false
sed komutu File0013 File1023 File99 İçeriği yukarıdaki gibi olan dosyadaki FileXXX ifadelerini XXXnolu-dosya şeklinde değiştirelim: sed -r 's/file([0-9]*)/\1-nolu-dosya/g' 0013-nolu-dosya 1023-nolu-dosya 99-nolu-dosya
awk komutu awk kendisine verilen dosyayı satır satır işleyerek istenilen sıradaki kelimeleri yazar. -F ile sütun ayırıcı verilir. Satırı sütun ayıracı ile sütunlara ayırır. Satırın tümü $0, ilk sütun $1, sonra $2, $3... $NF şeklinde numaralandırılır. Aslında çok gelişmiş bir dili vardır. Çok boyutlu diziler, matematik fonksiyonları, döngüler, vb. Bir programlama dilinde olması gereken her türlü özellik mevcuttur. Mesela: root /bin/sh awk -F: '{print $1, $7}' /etc/passwd daemon /usr/bin/false nobody /usr/bin/false
awk komutu İçinde Ahmet geçen satırları yazdırmak: awk '/Ahmet/ {print $0}' liste.txt Cem Ahmet Mercan 42 Kabuğu /bin/false ayarlı kullanıcılar: awk -F: '$7=="/bin/false"{print $0}' /etc/passwd ldap:x:55:55:ldap User:/var/lib/ldap:/bin/false İkinci sütunu para miktarı olan listedeki para değerlerin toplamı: awk 'BEGIN{toplam=0;} {toplam+=$2;} END{print Toplamı=,toplam;}' liste.txt Toplamı= 3500
Dikkat Satır İşleme Sonu!
; işareti Komutlar arasında ; konularak arkası arkasına çalışmaları sağlanır. Mesela: ls veli.{doc,txt} ; mkdir ahmet ; ls veli.doc veli.txt ahmet veli.doc veli.txt
&& işareti Komutlar arasında && konularak başarılı olunduğu sürece arkası arkasına çalışmaları sağlanır. Mesela: mkdir ahmet && cd ahmet && mkdir iceride tar xvfz ahmet.tgz && rm ahmet.tgz
& işareti Çalıştırılan komutu arkaplana atar. Böylece yeni komut girilebilir olur. Mesela: xterm & xterm & ls xterm *** Dikkat arka plana atılsa da kabuk kapatılınca kapatılır.
( ) ile gruplama Çalıştırılacak komutun gruplar. Mesela: xterm & && xterm & && ls -bash: syntax error near unexpected token `&&' ( xterm & ) && ( xterm & ) && ls veli.doc veli.txt
işareti Komutlar arasında konularak birinin çıktısının diğerinin girdisi olması sağlanır. Pek çok komut bu tarz bir girdiyi kullanabilir. Mesela: ls grep doc veli.doc cat mp3listesi.txt grep Sam sort -r Sevval Sam.mp3 Samanyolu.mp3 bhosts -w grep ok cn02 cn08
history history : Terminalde geçmişte çalıştırılan komutları listeler. $ history 1 cd /RS/users/mercan/ 2 ls -al /RS/users/mercan/ 3 ls -al /RS/users/mercan/hbm514/ 4 ls -al /RS/users/mercan/hbm514/ 5 ls -al /RS/projects/hbm514/mercan
Geçmişte Arama Ctrl-r : Bu tuşlara basıldıktan sonra yazılan kelimeler geçmiş listesinde aranır.!kelime : Kelime ile başlayan son komutu çalıştır.!sayı : Geçmiş listesindeki sayı nolu komutu çalıştır.!! : Geçmiş listesindeki son komutu getirir. echo!!!# : Geçmiş listesindeki son komutun ilk kelimesi.!^ : Geçmiş listesindeki son komutun ikinci kelimesi.!$ : Geçmiş listesindeki son komutun son kelimesi.
Değişken işleme export yazi= ABCDEFG_ABCDEFGz echo ${yazi} --> ABCDEFG_ABCDEFGz 3. karakterden sonrasını al: echo ${yazi:3} --> DEFG_ABCDEFGz 3. karakterden sonra 7 karakter al: echo ${yazi:3:7} --> DEFG_AB Sondan 4 karakter al: echo ${A:(-4)} --> EFGz Baştan en kısa A*F kısmını sil: echo ${A#A*F} --> G_ABCDEFGz Baştan en uzun C*F kısmını sil: echo ${A##A*F} --> Gz
Değişken işleme export A= ABCDEFG_ABCDEFGz Sondan en kısa C*z kısmını sil: echo ${A%C*z} --> ABCDEFG_AB Sondan en uzun C*z kısmını sil: echo ${A%%C*z} --> AB Baştaki FG geçen ilk yeri xx yap: echo ${A/FG/xx} --> ABCDExx_ABCDEFGz FG geçen tüm yerleri xx yap: echo ${A//FG/xx} --> ABCDExx_ABCDEFGz export Sayi=3; ((Sayi=Sayi+4)) let Sayi=Sayi / 3 #Sonuc=2
convert komutu Resim dosyasını çeşitli formatlara dönüştürür. Mesela: convert resim.jpg resim.png Animasyon da yapabilir, Mesela animated gif için: convert resim*.jpg resim.gif Ya da video oluşturmak için: convert resim*.jpg resim.avi Dahası resim üzerinde değişik işlemler de yapabilir. Mesela boyut değişikliği gibi: Dahası convert resim.png -thumbnail 250x250 kucuk.jpg
find komutu Verilen dizindeki verilen şartlara uyan dosyaları bulur. -name :aranması istenen dosya adı verilir. -iname :büyük/küçük harf ayırımı olmadan isim verilir. -type :dosya tipi vb. verilebilir. (d, f) -exec :bulunan dosya üzerinde istenen komut çalıştırılır. Burada {} yerine dosya adı konularak çalıştırılır. -atime :erişim zamanı, normalde gün (s, m, h, d, w) -mtime :değişme zamanı, -ctime :oluşturma zamanı, -maxdepth :aranacak dizin derinliği -size :dosya büyüklüğü,normalde byte (k,m,g,t,p)
find komutu, 2 -and :ve, şartları birleştirmek için -or :or, şartları birleştirmek için ( ) :ile parametre gruplama yapılabilir.! :değil, parametre tersi için. -path :bash tipi ifadeler ile dosya adı (dosya[1-9] gibi) -regex :regular expresion ile dosya adı -iregex :büyük/küçük harf duyarsız regular expresion -print : ekrana dosya adını yaz, normalde zaten yapar. Parametrelere değer verilirken verilen değere tam eşit olması gerekir. Ancak - ile verilenden az olanlar, + ile verilenden fazla olanlar denebilir.
find komutu, 3 Mesela, / dizininde adının sonu mp3 olanları bul: find / -name *.mp3 /mp3/sevval Sam.mp3 /home dizininde 1gigabyte'dan büyük dosyaları bul: find /home -size +1G Bulunulan dizindeki adında core geçen dosyaları rm komutu ile sil: find. -iname *core* -exec rm {} \; Bulunulan dizindeki 8 haftadan fazladır erişilmeyen ve 16 haftadan eski dosyaları göster: find. \( -atime +8w -and -ctime +16w \) -print
for komutu Verilen edeki her bir eleman için bir kez döngü çalıştırılır. Mesela: for i in *.jpg ; do echo $i; cp $i yedekdizini/ ; done ahmet.jpg resim.jpg limit.c find. -iname *.c -exec cp {} /yedekdizini \; hesapla.c
for komutu 2 Mesela, : for i in `awk '{print $1;}' /etc/passwd grep -v root` do echo 'Kullanıcı:' $AD tar cfz /yedek/${ad}.tgz /home/$ad done ahmet ali Uzantısı png olan dosyaları eps formatına çevir: for i in *.png ; do convert $i ${i%png}eps ; done
Script dosyası Bir dosyanın ilk satırı: #!/bin/bash İle başlıyorsa bu dosyadaki komutları bash ile çalıştır demektir. İçerisine istediğimiz bash komutlarını yazarak istediğimiz işleri yapan bir program yazabiliriz. # ile başlayan satırlar normalde yorum satırıdır. Bu dosyayı: source./dosya.sh diyerek çalıştırabiliriz. Ancak çalıştırma hakkını verirsek: chmod +x./dosya.sh Doğrudan da çalıştırabiliriz:./dosya.sh
Script dosyasına parametre Bir script çalıştırırken parametre verebiliriz:./donustur.sh./dizin jpg png Sonrasında bu parametrelere $1 $2 $3... diyerek ulaşabiliriz: #!/bin/bash cd $1 && for i in *.$2 do echo $i donusturuluyor. convert $i ${i%.${2}}.$3 done echo Bitti...
if komutu ( man test ) if komutu ile şartlı işlemler yapabiliriz: if [ a = b ] then echo a b'ye esittir. else echo a b'den farkli fi Burada [ ] parantezler mutlaka boşluklu yazılmalıdır. [a=b] şeklinde yazılırsa hata oluşur. if komutu testin sonucu 0 ise doğru, 1 yada başka bir sayı ise yanlış olarak değerlendirir. C dekinden farklı!
if komutu dosya testleri -e ad :ad isimli bir dosya/dizin var ise doğru. -f ad :ad isimli sıradan bir dosya var ise doğru. -d ad :ad isimli bir dizin var ise doğru. -s ad :ad isimli bir dosya/dizin var ve 0 byte'tan büyükse. -r ad :ad isimli bir dosya/dizin var ve okunabilir ise doğru. -w ad :ad isimli bir dosya/dizin var ve yazılabilir ise doğru. -x ad :ad isimli bir dosya/dizin var ve çalıştırılabilir ise. Mesela: if [ -d $DIZIN ] ; then cd $DIZIN ; #birşeyler yap fi
if komutu metin testleri -z değer :değer 0 uzunlukta ise doğru. -n değer :değer 0 uzunlukta değilse doğru. değer :değer NULL değilse doğru. değer1 = değer2 :değer1, değer2'ye eşitse doğru. değer1!= değer2 :değer1, değer2'ye eşit değilse doğru. değer1 > değer2 :değer1, değer2'den büyükse doğru. değer1 < değer2 :değer1, değer2'den küçükse doğru. Mesela: if [ $DIZIN = /home/mercan ] ; then cd $DIZIN ; #birşeyler yap fi
if komutu sayı testleri n1 -eq n2 n1 -ne n2 n1 -gt n2 n1 -ge n2 n1 -lt n2 n1 -le n2 :n1 ve n2 eşit ise. :n1 ve n2 eşit değil ise. :n1, n2 'den büyük bir sayı ise. :n1, n2 'den büyük yada eşit bir sayı ise. :n1, n2 'den küçük bir sayı ise. :n1, n2 'den küçük yada eşit bir sayı ise. Mesela: if [ $DOSYASAYISI -ge 12 ] ; then echo Bir suru dosya var ; #birşeyler yap fi
if komutu mantıksal birliktelik ifade1 -a ifade2 :ifade1 ve ifade2 arasında ve(and) işlemi. ifade1 -o ifade2 :ifade1 ve ifade2 arasında veya(or) işlemi.! ifade : tersi (not) işlemi. Doğru ise yanlış. ( ifade ) : gruplamak için, içi doğru ise doğru. Mesela: if [ ( $DOSYASAYISI -ge 12 ) -a ( $SAY -lt 36 ) ] ; then echo Bir suru dosya var ; #birşeyler yap fi
until ve while komutuları until :test değeri yanlış olduğu sürece tekrar yap until ( -z $AD ) do #birşeyler yap done while :test değeri doğru olduğu sürece tekrar yap while read i j do cp $i $j done <dosyalistesi.txt
Crontab crontab -e #Dak. Saat Gün Ay Haftanın Günü #0-59 0-23 1-31 1-12 0-6 # hergün saat 15:00'da çalış 0 15 * * * /root/saat15-oldu.sh # hergün 8:30, 16:30, ve 22:30'da çalıştır. 30 8,16,22 * * * /RS/istatistik/istatistik_al.sh # her 6 dakikada bir (60/10=6) çalış */10 * * * * /root/server_parca_degisimi.sh # her pazar saat 3:00'da çalış 0 3 * * 0 /yedek/yedek-al.sh