Öğlen
Transkript
Öğlen
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 Tam Yol /Göreli Yol (Path) $ pwd $ pwd /home/mercan / $ cd Desktop $ ls $ pwd $ cd / bin dev lost+found mnt root srv tmp boot etc opt sbin sub usr cdrom home lib media proc selinux sys var $ cd Desktop $ cd /home/mercan/Desktop -bash: cd: Desktop: $ pwd No such file or directory /home/mercan/Desktop /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 -rw-r--r-- 1 root root 7805904 -rw-r--r-- 1 root root 4327 -rw-r--r-- 1 root root 1371211 -rw-r--r-- 1 root root 283686 -rw-r--r-- 1 root root 18367 -rw-r--r-- 1 root root 550412 -rw-r--r-- 1 root root 110 -rw-r--r-- 1 root root 23325 -rw-r--r-- 1 root root 1371 -rw-r--r-- 1 root root 5194 -rw-r--r-- 1 root root 13 Jan 5 01:47 Jan 12 01:57 Jan 15 09:00 Jan 15 09:00 Jan 15 09:00 Jan 15 09:04 Jan 15 09:04 Jan 15 09:05 Jan 15 09:05 Jan 15 09:05 Jan 15 09:11 Jan 15 09:23 deletedList.2015 rs_file_aging ibdiagnet_ibis.log ibdiagnet.db ibdiagnet.lst ibdiagnet.pkey ibdiagnet.fdbs ibdiagnet.sm ibdiagnet.mcfdbs ibdiagnet.log pim.info.manager tmp_mailBody man komutu : ( man komut : ( > ) $ man cp $ man mkdir <( :( ( ( () . .( ( > ( (< ( (B( (< ( < ( . )(B :( ( ( . . : 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 [email protected] 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/ [email protected]:~/ • 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 [email protected]:~/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 : kullanıcı hakkında bilgi verir, kullanıcı verilmezse komutu çalıştıranın bilgilerini gösterir. İd [kullanıcı] $ 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 /dev/sda3 151717124 25115228 118895116 18% / /dev/sda1 none 101086 1990388 Used Available Use% Mounted on 15170 80697 16% /boot 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?” : terminale yazı yazdırmaya yarar. Değişken değerini yada istediğimiz her hangi bir yazıyı yazdırabiliriz. Örnek: echo [DEGISKEN] [yazılar] 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.3x86_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: echo ahmet ; echo ahmet ahmet 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: echo \*.mp3 *.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 \ Mehmet RegEx'de özel karekterleri yazmak için 12\$ \( \) Ahmet 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: awk -F: '{print $1, $7}' /etc/passwd root /bin/sh 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 : Terminalde geçmişte çalıştırılan komutları listeler. history $ 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: convert resim.png -thumbnail 250x250 kucuk.jpg Dahası 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 find . -iname *.c -exec cp {} /yedekdizini \; limit.c 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 -f ad -d ad -s ad -r ad -w ad -x ad :ad isimli bir dosya/dizin var ise doğru. :ad isimli sıradan bir dosya var ise doğru. :ad isimli bir dizin var ise doğru. :ad isimli bir dosya/dizin var ve 0 byte'tan büyükse. :ad isimli bir dosya/dizin var ve okunabilir ise doğru. :ad isimli bir dosya/dizin var ve yazılabilir ise doğru. :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 -n değer :değer 0 uzunlukta ise doğru. :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
Benzer belgeler
6_linux_komutlar
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 dosy...