2017-04-01 12:27:42 +02:00
< p align = "center" >
2017-04-03 12:29:44 +02:00
< img src = "https://cloud.githubusercontent.com/assets/2059754/24601246/753a7f36-1858-11e7-9d6b-7a0e64fb27f7.png" alt = "bash logo" / >
2017-04-01 12:27:42 +02:00
< / p >
2017-05-02 00:23:08 +02:00
## İçindekiler
2017-05-02 20:36:12 +02:00
1. [Basit Komutlar ](#1-basit-komutlar )
2017-05-02 20:39:25 +02:00
1.1. [Dosya Komutlar ](#11-dosya-komutları )
1.2. [Text Komutları ](#12-text-komutları )
1.3. [Dizin Komutları ](#13-dizin-komutları )
1.4. [SSH, Sistem Bilgisi & Ağ Komutları ](#14-ssh-sistem-bilgisi--ağ-komutları )
1.5. [İşlem İzleme Komutları ](#15-İşlem-İzleme-komutları )
2017-05-02 20:36:12 +02:00
2. [Basit Shell Programlama ](#2-basit-shell-programlama )
2017-05-02 20:39:25 +02:00
2.1. [Değişkenler ](#21-değişkenler )
2017-05-02 20:44:02 +02:00
2.2 [Diziler ](#22-diziler )
2017-05-02 20:39:25 +02:00
2.3. [String Yerleştirme ](#23-string-yerleştirme )
2017-05-02 20:36:12 +02:00
2.4. [Fonksiyonlar ](#24-fonksiyonlar )
2017-05-02 20:39:25 +02:00
2.5. [Koşullar ](#25-koşullar )
2.6. [Döngüler ](#26-döngüler )
2017-05-02 20:44:02 +02:00
3. [İpuçları ](#3-İpuçları )
4. [Debugging ](#4--derleme--debugging )
2017-04-01 15:03:37 +02:00
2017-04-01 09:47:13 +02:00
2017-05-02 00:23:08 +02:00
# 1. Basit Komutlar
2017-04-01 09:47:13 +02:00
### a. `export`
2017-05-02 00:23:08 +02:00
Tüm çevre değişkenlerini göstermek için kullanı lı r. Özel bir çevre değişkeni özelliğini görüntülemek için, `echo $VARIABLE_NAME` kullanı n.
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
export
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ export
2017-05-02 00:23:08 +02:00
AWS_HOME=/Users/omergulen/.aws
2017-04-01 09:47:13 +02:00
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LESS=-R
2017-04-05 21:41:57 +02:00
$ echo $AWS_HOME
2017-05-02 00:23:08 +02:00
/Users/omergulen/.aws
2017-04-01 09:47:13 +02:00
```
2017-04-07 11:29:38 +02:00
### b. `whatis`
2017-05-02 00:23:08 +02:00
whatis kullanı cı komutları , sistem çağrı ları , kütüphane fonksiyonları ve manuel sayfası ndaki diğer şeylerin açı klaması nı görüntüler.
2017-04-07 11:29:38 +02:00
```bash
2017-05-02 00:23:08 +02:00
whatis bir_sey
2017-04-07 11:29:38 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-07 11:29:38 +02:00
```bash
$ whatis bash
bash (1) - GNU Bourne-Again SHell
```
### c. `whereis`
2017-05-02 00:23:08 +02:00
whereis çalı ştı rabilir dosyaları , kaynak kodları nı ve manuel sayfaları nı sistem tarafı ndan otomatik oluşturulan bir veri tabanı ile araştı rı r.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
whereis isim
2017-04-01 09:47:13 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ whereis php
/usr/bin/php
```
2017-04-07 11:29:38 +02:00
### d. `which`
2017-05-02 00:23:08 +02:00
which çalı ştı rabilir dosyaları belirtilmiş bir PATH (yol) içerisinde arar. Bu komut aranan çalı ştı rabilirlerin tam yolunu yazdı rı r.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
which program_adi
2017-04-01 12:13:06 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
$ which php
/c/xampp/php/php
```
2017-05-02 20:36:12 +02:00
### e. `clear`
2017-05-02 00:23:08 +02:00
Pencere içeriğini temizler.
2017-04-01 09:47:13 +02:00
2017-05-02 00:23:08 +02:00
## 1.1. Dosya Komutları
2017-04-01 10:04:51 +02:00
< table >
2017-04-01 10:13:47 +02:00
< tr >
2017-04-04 20:51:26 +02:00
< td > < a href = "#a-cat" > cat< / a > < / td >
< td > < a href = "#b-chmod" > chmod< / a > < / td >
2017-04-24 21:25:03 +02:00
< td > < a href = "#c-chown" > chown< / a > < / td >
< td > < a href = "#d-cp" > cp< / a > < / td >
< td > < a href = "#e-diff" > diff< / a > < / td >
< td > < a href = "#f-file" > file< / a > < / td >
< td > < a href = "#g-find" > find< / a > < / td >
< td > < a href = "#h-gunzip" > gunzip< / a > < / td >
< td > < a href = "#i-gzcat" > gzcat< / a > < / td >
< td > < a href = "#j-gzip" > gzip< / a > < / td >
< td > < a href = "#k-head" > head< / a > < / td >
2017-04-01 10:31:09 +02:00
< / tr >
< tr >
2017-04-24 21:25:03 +02:00
< td > < a href = "#l-lpq" > lpq< / a > < / td >
< td > < a href = "#m-lpr" > lpr< / a > < / td >
< td > < a href = "#n-lprm" > lprm< / a > < / td >
< td > < a href = "#o-ls" > ls< / a > < / td >
< td > < a href = "#p-more" > more< / a > < / td >
< td > < a href = "#q-mv" > mv< / a > < / td >
< td > < a href = "#r-rm" > rm< / a > < / td >
< td > < a href = "#s-tail" > tail< / a > < / td >
< td > < a href = "#t-touch" > touch< / a > < / td >
2017-04-01 10:13:47 +02:00
< / tr >
2017-04-01 10:04:51 +02:00
< / table >
2017-04-04 20:51:26 +02:00
### a. `cat`
2017-05-02 00:23:08 +02:00
UNIX veya Linux altı nda, aşağı daki amaçlar için kullanı lı r.
* Text dosyaları nı ekranda gösterir
* Text dosyaları nı kopyalar
* Text dosyaları nı birleştirir
* Yeni text dosyaları oluşturur
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
cat dosya_adi
cat dosya1 dosya2
cat dosya1 dosya2 > yeni_birlesmis_dosya
cat < dosya1 > dosya2 #dosya 1'i dosya2'ye kopyalar.
2017-04-01 09:47:13 +02:00
```
2017-04-04 20:51:26 +02:00
### b. `chmod`
2017-05-02 00:23:08 +02:00
```chmod``` komutu "change mode" yani mod değiştir anlamı na karşı lı k gelmektedir ve dosyanı n veya dizinin okunabilir, yazı labilir ve çalı ştı rabilir olması nı değiştirebilir. Daha fazla bilgi için bu linki kontrol edin [link ](https://ss64.com/bash/chmod.html ).
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
chmod -secenekler dosya_adi
chmod +x -w calistir_ama_yazama
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### c. `chown`
2017-05-02 00:23:08 +02:00
chown komutu "change owner" yani sahibini değiştir anlamı na karşı lı k gelmektedir ve verilen dosya veya dizinin sahibini kullanı cı ve grup olarak değiştirebilir. Basit kullanı mı önce kullanı cı :grup adı gelir ve sonrası nda dosya veya dizin adı verilir.
2017-04-24 21:25:03 +02:00
```bash
2017-05-02 00:23:08 +02:00
chown -secenekler kullanici:grop dosya_adi
2017-04-24 21:25:03 +02:00
```
### d. `cp`
2017-05-02 00:23:08 +02:00
Dosyaları kopyalar.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
cp dosya1 dosya2
cp /root/Desktop/file1.txt /var/www/html/file2.php
2017-04-01 09:47:13 +02:00
```
2017-05-02 00:23:08 +02:00
`dosya1` kaynak yolunu `dosya2` ise hedef yolunu belirtir.
2017-04-01 09:47:13 +02:00
2017-04-24 21:25:03 +02:00
### e. `diff`
2017-05-02 00:23:08 +02:00
Dosyaları karşı laştı rı p, farklı lı kları nı gösterir.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
diff dosya1 dosya2
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### f. `file`
2017-05-02 00:23:08 +02:00
Dosya türünü belirler.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
file dosya
2017-04-01 09:47:13 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-04 20:51:26 +02:00
$ file index.html
index.html: HTML document, ASCII text
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### g. `find`
2017-05-02 00:23:08 +02:00
Dizinde dosya arar.
2017-04-05 07:48:07 +02:00
```bash
2017-05-02 00:23:08 +02:00
find dizin secenek duzen(yapi)
2017-04-05 07:48:07 +02:00
```
Example:
```bash
$ find . -name README.md
2017-05-02 00:23:08 +02:00
$ find /home/ -name '*.png'
2017-04-05 07:48:07 +02:00
```
2017-04-01 09:47:13 +02:00
2017-04-24 21:25:03 +02:00
### h. `gunzip`
2017-05-02 00:23:08 +02:00
Dosyaları ```gzip``` ile çı kartı r.
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 12:19:47 +02:00
gunzip filename
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### i. `gzcat`
2017-05-02 00:23:08 +02:00
Çı karmadan gzip ile sı kı ştı rı lmı ş dosyalara bakmamı zı sağlar.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
gzcat dosya
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### j. `gzip`
2017-05-02 00:23:08 +02:00
Dosyaları sı kı ştı rı r.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
gzip dosya
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### k. `head`
2017-05-02 00:23:08 +02:00
Dosyanı n ilk 10 satı rı nı yazdı rı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
head dosya
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:25:03 +02:00
### l. `lpq`
2017-05-02 00:23:08 +02:00
Yazı cı baskı sı rası nı yazdı rı r.
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
lpq
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ lpq
2017-05-02 00:23:08 +02:00
Sı ra Sahip İş Dosya(lar) Toplam Boyut
active omergulen 59 deneme 399360 bytes
1st omergulen 60 (stdin) 0 bytes
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### m. `lpr`
2017-05-02 00:23:08 +02:00
Dosyayı yazı cı dan yazdı rı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
lpr dosya
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:25:03 +02:00
### n. `lprm`
2017-05-02 00:23:08 +02:00
Yazı cı baskı sı rası ndan bir iş siler.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 00:23:08 +02:00
lprm is_numarasi
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:25:03 +02:00
### o. `ls`
2017-05-02 00:23:08 +02:00
Dosyaları listelemek için kullanı lı r. Hiç bir yol veya dizin göstermezseniz bulunduğunuz dizinde çalı şı r. ```-l``` gibi listeleyip daha çok bilgi veren ve ```-a``` gibi tüm dosyaları (gizliler dahil) gösteren parametreleri vardı r. Daha detaylı bilgi için [link ](https://ss64.com/bash/ls.html ).
2017-04-04 05:19:29 +02:00
```bash
2017-05-02 00:23:08 +02:00
ls secenek
2017-04-04 05:19:29 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-04 20:51:26 +02:00
< pre >
2017-04-05 18:52:47 +02:00
$ ls -la
2017-05-02 00:23:08 +02:00
rwxr-xr-x 33 omergulen staff 1122 Mar 27 18:44 .
drwxrwxrwx 60 omergulen staff 2040 Mar 21 15:06 ..
-rw-r--r--@ 1 omergulen staff 14340 Mar 23 15:05 .DS_Store
-rw-r--r-- 1 omergulen staff 157 Mar 25 18:08 .bumpversion.cfg
-rw-r--r-- 1 omergulen staff 6515 Mar 25 18:08 .config.ini
-rw-r--r-- 1 omergulen staff 5805 Mar 27 18:44 .config.override.ini
drwxr-xr-x 17 omergulen staff 578 Mar 27 23:36 .git
-rwxr-xr-x 1 omergulen staff 2702 Mar 25 18:08 .gitignore
2017-04-04 20:51:26 +02:00
< / pre >
2017-04-24 21:25:03 +02:00
### p. `more`
2017-05-02 00:23:08 +02:00
Dosyanı n ilk kı smı nı gösterir (```Space``` ile hareket eder ve ```q``` ile çı kı lı r).
2017-04-04 05:19:29 +02:00
```bash
2017-05-02 00:23:08 +02:00
more dosya
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:25:03 +02:00
### q. `mv`
2017-05-02 00:23:08 +02:00
Dosyayı taşı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
mv dosya1 dosya2
2017-04-04 20:51:26 +02:00
```
2017-05-02 00:23:08 +02:00
`dosya1` kaynak yolunu `dosya2` ise hedef yolunu belirtir.
2017-04-04 20:51:26 +02:00
2017-05-02 00:23:08 +02:00
Ayrı ca dosyanı n ismini değiştirmek için kullanı r.
2017-04-06 18:39:33 +02:00
```bash
2017-05-02 00:23:08 +02:00
mv eski_isim yeni_isim
2017-04-06 18:39:33 +02:00
```
2017-04-24 21:25:03 +02:00
### r. `rm`
2017-05-02 00:23:08 +02:00
Dosyaları silmeye yarar. Bunu bir dizin üzerinde kullanmaya çalı şmak hataya yol açar.
2017-04-04 20:51:26 +02:00
`rm: directory: is a directory`
To remove a directory you have to pass `-r` which will remove the content of the directory recursively. Optionally you can use `-f` flag to force the deletion i.e. without any confirmations etc.
2017-05-02 00:23:08 +02:00
Dizin silmek için `-r` kullanmalı sı nı z. Silinmeyen dosyaları zorla silmek için de `-f` komutu kullanı lmaktadı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
rm dosya
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:25:03 +02:00
### s. `tail`
2017-04-04 20:51:26 +02:00
Outputs the last 10 lines of file. Use `-f` to output appended data as the file grows.
2017-05-02 00:23:08 +02:00
Dosyanı n son 10 satı rı nı yazdı rı r. `-f` parametresiyle çı ktı yı sona ekler dosya büyüdükçe.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
tail dosya
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:25:03 +02:00
### t. `touch`
2017-05-02 00:23:08 +02:00
Yetki ve zaman etiketini günceller. Böylelikle dosya var olmamı şsa yaratı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 00:23:08 +02:00
touch dosya
2017-04-04 20:51:26 +02:00
```
2017-05-02 00:23:08 +02:00
Örnek:
2017-04-04 20:51:26 +02:00
```bash
$ touch trick.md
2017-04-04 05:19:29 +02:00
```
2017-05-02 20:44:02 +02:00
## 1.2. Text Komutları
2017-04-01 14:46:15 +02:00
< table >
2017-04-04 20:51:26 +02:00
< tr >
2017-04-01 14:46:15 +02:00
< td > < a href = "#a-awk" > awk< / a > < / td >
2017-04-04 20:51:26 +02:00
< td > < a href = "#b-cut" > cut< / a > < / td >
< td > < a href = "#c-echo" > echo< / a > < / td >
< td > < a href = "#d-egrep" > egrep< / a > < / td >
< td > < a href = "#e-fgrep" > fgrep< / a > < / td >
< td > < a href = "#f-fmt" > fmt< / a > < / td >
< td > < a href = "#g-grep" > grep< / a > < / td >
< td > < a href = "#h-nl" > nl< / a > < / td >
< td > < a href = "#i-sed" > sed< / a > < / td >
< td > < a href = "#j-sort" > sort< / a > < / td >
2017-04-01 14:46:15 +02:00
< / tr >
< tr >
2017-04-04 20:51:26 +02:00
< td > < a href = "#k-tr" > tr< / a > < / td >
< td > < a href = "#l-uniq" > uniq< / a > < / td >
< td > < a href = "#m-wc" > wc< / a > < / td >
2017-04-01 14:46:15 +02:00
< / tr >
< / table >
### a. `awk`
2017-05-02 20:36:12 +02:00
awk text dosyaları nı idare etmek için en iyi araçtı r. Tüm dosyaları satı r satı r idare eder. Değiştirmezseniz normal olarak kelimeleri ayı rmak için boşluğu kullanı r. En yaygı n kullanı mı aşağı daki gibidir:
2017-04-01 14:46:15 +02:00
```bash
2017-05-02 20:45:14 +02:00
awk '/arama_yapisi/ { eslesme_gerceklesirse_gerceklesecek_komut; }' parcalanacak_text_dosyasi
2017-04-01 14:46:15 +02:00
```
2017-05-02 20:36:12 +02:00
`/etc/passwd` dosyası nı ele alalı m. Dosyanı n içeriği böyle oluyor normal şartlarda:
2017-04-01 14:46:15 +02:00
```
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
```
2017-05-02 20:36:12 +02:00
Şimdi sadece kullanı cı adları nı alalı m buradan. `-F` parametresi neye göre ayı racağı mı zı gösterir. Burada `:` ayracı mı z oluyor. `{ print $1 }` komutu ilk karşı laştı ğı eşleşmeyi yazdı rı r.
2017-04-01 14:46:15 +02:00
```bash
awk -F':' '{ print $1 }' /etc/passwd
```
2017-05-02 20:36:12 +02:00
Komutu çalı ştı rdı ktan sonra çı ktı şöyle olacaktı r.
2017-04-01 14:46:15 +02:00
```
root
daemon
bin
sys
sync
```
2017-05-02 20:36:12 +02:00
`awk` ' ı daha detaylı anlamak için, [link ](https://www.cyberciti.biz/faq/bash-scripting-using-awk )'e göz atı n.
2017-04-01 14:46:15 +02:00
2017-04-04 20:51:26 +02:00
### b. `cut`
2017-05-02 20:36:12 +02:00
Dosyanı n her satı rı ndan seçilen kı sı mları siler veya gösterir.
2017-04-04 20:51:26 +02:00
*example.txt*
```bash
red riding hood went to the park to play
```
2017-05-02 20:36:12 +02:00
* boşlukla ayrı ve 2. , 7. , 9. elemanları göster*
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
cut -d " " -f2,7,9 ornek.txt
2017-04-04 20:51:26 +02:00
```
```bash
riding park play
```
### c. `echo`
2017-05-02 20:36:12 +02:00
Bir satı r text yazdı rı r.
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*"Hello World" yazdı r*
2017-04-04 20:51:26 +02:00
```bash
echo Hello World
```
```bash
Hello World
```
2017-05-02 20:36:12 +02:00
*"Hello World" 'u kelimeleri arası nda yeni satı r koyarak yazdı rı r*
2017-04-04 20:51:26 +02:00
```bash
echo -ne "Hello\nWorld\n"
```
```bash
Hello
World
```
### d. `egrep`
2017-05-02 20:36:12 +02:00
Girdiğimiz yapı ile eşleşen satı rları yazdı r - Uzun yazı mı ('grep -E' (extended))
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-04 20:51:26 +02:00
```bash
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
```
2017-05-02 20:36:12 +02:00
*İçinde "Lorem" veya "dolor" geçen satı rları yazdı rı r.*
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
egrep '(Lorem|dolor)' ornek.txt
ya da
grep -E '(Lorem|dolor)' ornek.txt
2017-04-04 20:51:26 +02:00
```
```bash
Lorem ipsum
dolor sit amet,
et dolore magna
duo dolores et ea
sanctus est Lorem
ipsum dolor sit
```
### e. `fgrep`
2017-05-02 20:36:12 +02:00
Girdiğiniz yapı ile tamamen eşleşen satı rları yazdı rı r. ('grep -F' (fixed))
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-04 20:51:26 +02:00
```bash
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
foo (Lorem|dolor)
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
```
2017-05-02 20:36:12 +02:00
*'(Lorem|dolor)' un tam olarak geçtiği satı rları yazdı rı r*
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
fgrep '(Lorem|dolor)' ornek.txt
ya da
grep -F '(Lorem|dolor)' ornek.txt
2017-04-04 20:51:26 +02:00
```
```bash
foo (Lorem|dolor)
```
### f. `fmt`
2017-05-02 20:36:12 +02:00
Basit optimize text düzenleyici
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*ornek: ornek.txt (1 satı r)*
2017-04-04 20:51:26 +02:00
```bash
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
```
2017-05-02 20:36:12 +02:00
*ornek.txt dosyası nı n çı ktı sı 20 karakter genişliğinde olacak*
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
cat ornek.txt | fmt -w 20
2017-04-04 20:51:26 +02:00
```
```bash
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
```
### g. `grep`
2017-05-02 20:36:12 +02:00
Text dosyaları nı n içine bakar. Dosya içerisinde arama yapmak için de kullanabilirsiniz.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
grep yapi dosya
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ grep admin /etc/passwd
_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false
_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false
_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false
```
2017-05-02 20:36:12 +02:00
Aramayı tersine çevirmek için `-i` parametresini, belirli bir dizin altı ndaki tüm text dosyaları nı taramak için ise `-r` (recursive) parametresi kullanı labilir, örnek olarak:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ grep -r admin /etc/
```
2017-05-02 20:36:12 +02:00
`-w` (word) parametresi de sadece kelimeleri aramak için kullanı laiblir. `grep` hakkı nda daha detaylı bilgi için: [link ](https://www.cyberciti.biz/faq/grep-in-bash ).
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### h. `nl`
2017-05-02 20:36:12 +02:00
Dosyanı n satı rları nı numaralndı rı r
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-01 14:46:15 +02:00
```bash
2017-04-04 20:51:26 +02:00
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.
2017-04-01 14:46:15 +02:00
```
2017-04-04 20:51:26 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt'yi satı r numaraları ile yazdı r*
2017-04-01 14:46:15 +02:00
```bash
2017-05-02 20:36:12 +02:00
nl -s". " ornek.txt
2017-04-04 20:51:26 +02:00
```
```bash
1. Lorem ipsum
2. dolor sit amet,
3. consetetur
4. sadipscing elitr,
5. sed diam nonumy
6. eirmod tempor
7. invidunt ut labore
8. et dolore magna
9. aliquyam erat, sed
10. diam voluptua. At
11. vero eos et
12. accusam et justo
13. duo dolores et ea
14. rebum. Stet clita
15. kasd gubergren,
16. no sea takimata
17. sanctus est Lorem
18. ipsum dolor sit
19. amet.
2017-04-01 14:46:15 +02:00
```
2017-04-04 20:51:26 +02:00
### i. `sed`
2017-05-02 20:36:12 +02:00
Texti düzenlemek ve şekillendirmek için kullanı lan bir editör
2017-04-02 06:56:40 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-02 06:56:40 +02:00
```bash
Hello This is a Test 1 2 3 4
```
2017-05-02 20:36:12 +02:00
*tüm boşlukları tire(-) ile değiştir*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sed 's/ /-/g' ornek.txt
2017-04-02 06:56:40 +02:00
```
```bash
Hello-This-is-a-Test-1-2-3-4
```
2017-05-02 20:36:12 +02:00
*tüm rakamları "d" ile değiştir*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sed 's/[0-9]/d/g' ornek.txt
2017-04-02 06:56:40 +02:00
```
```bash
Hello This is a Test d d d d
```
2017-04-01 14:46:15 +02:00
2017-04-04 20:51:26 +02:00
### j. `sort`
2017-05-02 20:36:12 +02:00
Text dosyası nı n satı rları nı alfabetik sı ralar
2017-04-02 06:56:40 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-02 06:38:05 +02:00
```bash
2017-04-02 06:56:40 +02:00
f
b
c
g
a
e
d
```
2017-05-02 20:36:12 +02:00
*sı ralanmı ş ornek.txt*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sort ornek.txt
2017-04-02 06:38:05 +02:00
```
```bash
a
b
c
d
2017-04-02 06:56:40 +02:00
e
f
g
```
2017-05-02 20:36:12 +02:00
*rastgele sı ralanmı ş ornek.txt*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sort ornek.txt | sort -R
2017-04-02 06:56:40 +02:00
```
```bash
2017-04-02 06:38:05 +02:00
b
2017-04-02 06:56:40 +02:00
f
2017-04-02 06:38:05 +02:00
a
2017-04-04 20:51:26 +02:00
c
d
g
e
2017-04-02 06:56:40 +02:00
```
2017-04-01 14:46:15 +02:00
2017-04-04 20:51:26 +02:00
### k. `tr`
2017-05-02 20:36:12 +02:00
Karakter silme veya değiştirme (translate)
2017-04-01 14:46:15 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-02 06:56:40 +02:00
```bash
Hello World Foo Bar Baz!
```
2017-05-02 20:36:12 +02:00
*tüm küçük harfleri büyük harf yap*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
cat ornek.txt | tr 'a-z' 'A-Z'
2017-04-02 06:56:40 +02:00
```
```bash
HELLO WORLD FOO BAR BAZ!
```
2017-05-02 20:36:12 +02:00
*tüm boşlukları yeni satı r yao*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
cat ornek.txt | tr ' ' '\n'
2017-04-02 06:56:40 +02:00
```
```bash
Hello
World
Foo
Bar
Baz!
```
2017-04-04 20:51:26 +02:00
### l. `uniq`
2017-05-02 20:36:12 +02:00
Tekrar eden satı rları sil ya da bildir
2017-04-02 06:56:40 +02:00
2017-05-02 20:36:12 +02:00
*ornek.txt*
2017-04-02 06:56:40 +02:00
```bash
2017-04-04 20:51:26 +02:00
a
a
b
a
b
c
d
c
2017-04-02 06:56:40 +02:00
```
2017-05-02 20:36:12 +02:00
*sadece eşsiz satı rları göster(önce sı ralamanı z(sort) gerekir yoksa düzgün çalı şmayacaktı r*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sort ornek.txt | uniq
2017-04-02 06:56:40 +02:00
```
```bash
2017-04-04 20:51:26 +02:00
a
b
c
d
2017-04-02 06:56:40 +02:00
```
2017-05-02 20:36:12 +02:00
*farklı satı rları birer kere göster ve aynı olanları n kaçar kere geçtiğini yaz*
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
sort ornek.txt | uniq -c
2017-04-02 06:56:40 +02:00
```
```bash
2017-04-04 20:51:26 +02:00
3 a
2 b
2 c
1 d
2017-04-02 06:56:40 +02:00
```
2017-04-04 20:51:26 +02:00
### m. `wc`
2017-05-02 20:36:12 +02:00
Dosyada kaç satı r, kelime ve karakter olduğunu yazar.
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
wc dosya
2017-04-02 06:56:40 +02:00
```
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-02 06:56:40 +02:00
```bash
2017-05-02 20:36:12 +02:00
$ wc ornek.txt
7459 15915 398400 ornek.txt
2017-04-02 06:56:40 +02:00
```
2017-05-02 20:36:12 +02:00
`7459` satı r, `15915` kelime ve `398400` karakter içerir.
2017-04-01 14:46:15 +02:00
2017-05-02 20:36:12 +02:00
## 1.3. Dizin Komutları
2017-04-01 09:47:13 +02:00
2017-04-01 10:21:38 +02:00
< table >
2017-04-01 10:31:09 +02:00
< tr >
2017-04-04 20:51:26 +02:00
< td > < a href = "#a-cd" > cd< / a > < / td >
< td > < a href = "#b-mkdir" > mkdir< / a > < / td >
2017-04-01 10:31:09 +02:00
< td > < a href = "#c-pwd" > pwd< / a > < / td >
2017-04-01 10:21:38 +02:00
< / tr >
< / table >
2017-04-04 20:51:26 +02:00
### a. `cd`
2017-05-02 20:36:12 +02:00
Sizi bir dizinden diğerine taşı r(change directory). Aşağı daki
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
$ cd
```
2017-05-02 20:36:12 +02:00
komutu sizi `home` dizinine taşı r. Bu komut isteğe bağlı `dizin_adi` değişkeni alı r ve sizi o dizine götürür.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
cd dizin_adi
2017-04-01 09:47:13 +02:00
```
2017-04-04 20:51:26 +02:00
### b. `mkdir`
2017-05-02 20:36:12 +02:00
Yeni dizin oluşturur.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
mkdir dizin_adi
2017-04-04 20:51:26 +02:00
```
2017-04-01 09:47:13 +02:00
### c. `pwd`
2017-05-02 20:36:12 +02:00
Şu an hangi dizinde olduğunu yazdı rı r(print working directory).
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
pwd
```
2017-05-02 20:36:12 +02:00
## 1.4. SSH, Sistem Bilgisi & Ağ Komutları
2017-04-01 09:47:13 +02:00
2017-04-01 10:31:09 +02:00
< table >
< tr >
2017-04-04 20:51:26 +02:00
< td > < a href = "#a-bg" > bg< / a > < / td >
< td > < a href = "#b-cal" > cal< / a > < / td >
< td > < a href = "#c-date" > date< / a > < / td >
< td > < a href = "#d-df" > df< / a > < / td >
< td > < a href = "#e-dig" > dig< / a > < / td >
< td > < a href = "#f-du" > du< / a > < / td >
< td > < a href = "#g-fg" > fg< / a > < / td >
2017-04-24 21:39:32 +02:00
< td > < a href = "#h-finger" > finger< / a > < / td >
< td > < a href = "#i-last" > last< / a > < / td >
< td > < a href = "#j-man" > man< / a > < / td >
2017-04-01 10:31:09 +02:00
< / tr >
< tr >
2017-04-24 21:39:32 +02:00
< td > < a href = "#k-passwd" > passwd< / a > < / td >
< td > < a href = "#l-ping" > ping< / a > < / td >
< td > < a href = "#m-ps" > ps< / a > < / td >
< td > < a href = "#n-quota" > quota< / a > < / td >
< td > < a href = "#o-scp" > scp< / a > < / td >
< td > < a href = "#p-ssh" > ssh< / a > < / td >
< td > < a href = "#q-top" > top< / a > < / td >
< td > < a href = "#r-uname" > uname< / a > < / td >
< td > < a href = "#s-uptime" > uptime< / a > < / td >
< td > < a href = "#t-w" > w< / a > < / td >
2017-04-01 10:31:09 +02:00
< / tr >
< tr >
2017-04-24 21:39:32 +02:00
< td > < a href = "#u-wget" > wget< / a > < / td >
< td > < a href = "#v-whoami" > whoami< / a > < / td >
< td > < a href = "#w-whois" > whois< / a > < / td >
2017-04-01 10:31:09 +02:00
< / tr >
< / table >
2017-04-04 20:51:26 +02:00
### a. `bg`
2017-05-02 20:36:12 +02:00
Durdurulmuş veya arka plana atı lmı ş işlemleri listeler, arka planda durdurulmuş bir işi devam ettirir.
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### b. `cal`
2017-05-02 20:36:12 +02:00
Aylı k takvimi gösterir.
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### c. `date`
2017-05-02 20:36:12 +02:00
Anlı k tarih ve saati gösterir.
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### d. `df`
2017-05-02 20:36:12 +02:00
Disk kullanı mı nı gösterir.
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### e. `dig`
2017-05-02 20:36:12 +02:00
Domain'in DNS bilgilerini alı r.
2017-04-01 12:13:06 +02:00
```bash
2017-04-04 20:51:26 +02:00
dig domain
2017-04-01 09:47:13 +02:00
```
2017-04-04 20:51:26 +02:00
### f. `du`
2017-05-02 20:36:12 +02:00
Dosya ve dizinlerin disk kullanı mı nı gösterir. Daha fazla bilgi için: [link ](http://www.linfo.org/du.html )
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
du [secenek] [dosya|dizin]
2017-04-05 18:54:46 +02:00
```
2017-05-02 20:36:12 +02:00
Seçenekler:
- `-h` (human readable) Çı ktı yı kilobyte (K), megabyte (M) ve gigabyte (G) olarak verir.
- `-s` (supress or summarize) dizinin toplam boyutunu yazar ve alt dizinler için rapor verir.
2017-04-05 18:54:46 +02:00
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-05 21:38:43 +02:00
```bash
2017-05-02 20:36:12 +02:00
du -sh resimler
1.4M resimler
2017-04-01 09:47:13 +02:00
```
2017-04-04 20:51:26 +02:00
### g. `fg`
2017-05-02 20:36:12 +02:00
Ön planda çalı şan en son işlemi getirir.
2017-04-01 09:47:13 +02:00
2017-04-04 20:51:26 +02:00
### h. `finger`
2017-05-02 20:36:12 +02:00
Kullanı cı hakkı nda bilgi verir.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
finger kullanici_adi
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:39:32 +02:00
### i. `last`
2017-05-02 20:36:12 +02:00
Bahsedilen kullanı cı nı n son girişini gösterir.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
last seninKullanici_adin
2017-04-04 20:51:26 +02:00
```
2017-04-01 09:47:13 +02:00
2017-04-24 21:39:32 +02:00
### j. `man`
2017-05-02 20:36:12 +02:00
Bir komutun dökümantasyonunu gösterir.
```bash
man komut
```
Örnek:
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
man cd
man ls
2017-04-04 20:51:26 +02:00
```
2017-04-01 09:47:13 +02:00
2017-04-24 21:39:32 +02:00
### k. `passwd`
2017-05-02 20:36:12 +02:00
Belirtilen kullanı cı (belirtilmezse giriş yapmı ş kullanı cı ) şifre belirlenmesini veya değiştirilmesini sağlar.
```bash
passwd [secenek] [kullanici]
```
Örnek:
```bash
passwd
sudo passwd jeff
```
2017-04-01 09:47:13 +02:00
2017-04-24 21:39:32 +02:00
### l. `ping`
2017-05-02 20:36:12 +02:00
Sunucuyu pingler ve sonucu yazdı rı r.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
ping sunucu_ip_or_domain
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:39:32 +02:00
### m. `ps`
2017-05-02 20:36:12 +02:00
İşlemleri (processes) görüntüler.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
ps -u kullanici_adi
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:39:32 +02:00
### n. `quota`
2017-05-02 20:36:12 +02:00
Disk kotanı gösterir.
2017-04-01 12:13:06 +02:00
```bash
2017-04-04 20:51:26 +02:00
quota -v
2017-04-01 09:47:13 +02:00
```
2017-04-24 21:39:32 +02:00
### o. `scp`
2017-05-02 20:36:12 +02:00
Lokal sunucu ve uzak sunucu veya iki uzak sunucu arası nda dosya aktarı mı nı sağlar.
2017-04-02 21:27:12 +02:00
2017-05-02 20:36:12 +02:00
*lokal sunucudan uzak sunucuya*
2017-04-02 21:27:12 +02:00
```bash
2017-05-02 20:36:12 +02:00
scp kaynak_dosya kullanici@sunucu:dizin/hedef_dosya
2017-04-02 21:27:12 +02:00
```
2017-05-02 20:36:12 +02:00
*uzak sunucudan lokal sunucuya*
2017-04-02 21:27:12 +02:00
```bash
2017-05-02 20:36:12 +02:00
scp kullanici@sunucu:dizin/kaynak_dosya hedef_dosya
scp -r kullanici@sunucu:dizin/kaynak_dizin hedef_dizin
2017-04-02 21:27:12 +02:00
```
2017-05-02 20:36:12 +02:00
Özel bir porta bağlanmak için `-P` parametresi kullanı labilir.
2017-04-02 21:27:12 +02:00
```bash
2017-05-02 20:36:12 +02:00
scp -P port kullanici@sunucu:dizin/kaynak_dosya hedef_dosya
2017-04-02 21:27:12 +02:00
```
2017-04-24 21:39:32 +02:00
### p. `ssh`
2017-05-02 20:36:12 +02:00
ssh (SSH client) uzak makineye bağlanmak ve üzerinde komut çalı ştı rmak için tasarlanmı ş bir programdı r.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
ssh kullanici@sunucu
2017-04-04 20:51:26 +02:00
```
2017-05-02 20:36:12 +02:00
Özel bir porta bağlanmak için `-P` parametresi kullanı labilir
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
ssh -p port kullanici@sunucu
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:39:32 +02:00
### q. `top`
2017-05-02 20:36:12 +02:00
Anlı k aktif işlemleri görüntüler.
2017-04-04 20:51:26 +02:00
2017-04-24 21:39:32 +02:00
### r. `uname`
2017-05-02 20:36:12 +02:00
Kernel bilgisini gösterir.
2017-04-04 20:51:26 +02:00
```bash
uname -a
```
2017-04-24 21:39:32 +02:00
### s. `uptime`
2017-05-02 20:36:12 +02:00
Sunucunun ne zamandı r açı k olduğunu gösterir.
2017-04-04 20:51:26 +02:00
2017-04-24 21:39:32 +02:00
### t. `w`
2017-05-02 20:36:12 +02:00
Sunucuda kimin online olduğunu gösterir.
2017-04-04 20:51:26 +02:00
2017-04-24 21:39:32 +02:00
### u. `wget`
2017-05-02 20:36:12 +02:00
Dosya indirir.
2017-04-04 20:51:26 +02:00
```bash
2017-05-02 20:36:12 +02:00
wget dosya
wget http://site.com/dosya.txt
2017-04-04 20:51:26 +02:00
```
2017-04-24 21:39:32 +02:00
### v. `whoami`
2017-05-02 20:36:12 +02:00
Anlı k giriş yapmı ş kullanı cı adı nı yazdı rı r.
2017-04-04 20:51:26 +02:00
2017-04-24 21:39:32 +02:00
### w. `whois`
2017-05-02 20:36:12 +02:00
Domain'in whois bilgilerini gösterir.
2017-04-04 20:51:26 +02:00
```bash
whois domain
```
2017-04-02 21:27:12 +02:00
2017-05-02 20:36:12 +02:00
## 1.5. İşlem İzleme Komutları
2017-04-24 21:39:32 +02:00
< table >
< tr >
< td > < a href = "#a-kill" > kill< / a > < / td >
< td > < a href = "#b-killall" > killall< / a > < / td >
< td > < a href = "#c-&" > & < / a > < / td >
2017-04-24 21:44:09 +02:00
< td > < a href = "#d-nohup" > nohup< / a > < / td >
2017-04-24 21:39:32 +02:00
< / tr >
< / table >
### a. `kill`
2017-05-02 20:36:12 +02:00
Verilen ID ile işlemleri sonlandı rı r.
2017-04-24 21:39:32 +02:00
```bash
kill PID
```
### b. `killall`
2017-05-02 20:36:12 +02:00
Verilen isimdeki tüm işlemleri sonlandı rı r.
2017-04-24 21:39:32 +02:00
```bash
2017-05-02 20:36:12 +02:00
killall islem_adi
2017-04-24 21:39:32 +02:00
```
2017-04-24 21:45:41 +02:00
### c. &
2017-05-02 20:36:12 +02:00
`&` simgesi verilen işlemin sonuna eklenir ve arka planda çalı şacağı nı gösterir.
2017-04-24 21:39:32 +02:00
```bash
2017-05-02 20:36:12 +02:00
komut &
2017-04-24 21:39:32 +02:00
```
### d. `nohup`
2017-05-02 20:36:12 +02:00
"No Hang Up" sözüne karşı lı k gelen nohup komutu, "kapatma" anlamı na gelir. Yani shell'den çı ktı ğı nı zda dahi çalı şmayı sürdürür.
2017-04-24 21:39:32 +02:00
```bash
2017-05-02 20:36:12 +02:00
nohup komut
2017-04-24 21:39:32 +02:00
```
2017-05-02 20:36:12 +02:00
`&` ile birlikte kullanarak arka plan işlemi oluşturulabilir
2017-04-24 21:39:32 +02:00
```bash
2017-05-02 20:36:12 +02:00
nohup komut &
2017-04-24 21:39:32 +02:00
```
2017-05-02 20:36:12 +02:00
# 2. Basit Shell Programlama
2017-04-01 09:47:13 +02:00
2017-04-01 15:03:37 +02:00
2017-05-02 20:36:12 +02:00
`shebang` bash programlamanı n ilk satı rı na yazı lan belirli text'e denir. Bu satı r script'in tek başı na sh, bash, python, php gibi programları yazmadan çalı şabilmesini sağlar.
2017-04-01 15:03:37 +02:00
```bash
#!/bin/bash
```
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
## 2.1. Değişkenler
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
bash üzerinde değişken yaratmak diğer dillerde olduğu gibidir. Veri tipleri yoktur. Bash içinde değişkenler sayı , karakter, karakter dizisi gibi şeyler alabilir. Başlangı çta tanı mlarken ne olduğunu belirtmenize gerek yoktur, vermek istediğiniz değere eşitlemek yeterli olacaktı r.
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
str="hello world"
```
2017-05-02 20:36:12 +02:00
Yukarı daki satı r `str` adı nda bir değişken oluşturur ve "hello world" stringini atar. Değeri okumak için değişken isminin başı na `$` koymak yeterlidir.
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
echo $str # hello world
```
2017-05-02 20:36:12 +02:00
## 2.2. Diziler
Diğer diller gibi bash de dizilere sahiptir. Diziler birden çok değer içerek değişkenlerdir.Dizilerin değerleri için sayı sı nı rı yoktur. Bash'de ki dizler sı fı r tabanlı dı r. İlk eleman 0 ile belirtilir. Bir kaç dizi oluşturma yolu vardı r, aşağı da gösterildiği gibi:
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Örnekler:
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
dizi[0] = deger
dizi[1] = deger
dizi[2] = deger
dizi=([2]=deger [0]=deger [1]=deger)
dizi=(deger deger deger)
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
Bir dizinin özel bir değerini yazdı rmak için:
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
${dizi[i]} # belirteç "i" için
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
Hiç bir belirteç verilmezse, dizi 0'dan başlar. Dizide kaç değer olduğunu öğrenmek için aşağı daki yazı m kullanı lı r:
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
${#dizi[@]}
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
Bash ayrı ca üçlü durumlara sahiptir. Aşağı daki durumlara bakı nı z.
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
${degisken:-word} # degisken varsa ve "null" değilse, degeri dondur; aksi halde "word" ü döndür
${degisken:=word} # degisken varsa ve "null" değilse, degeri dondur; aksi halde "word" e eşitle ve değerini döndür
${degisken:+word} # degisken varsa ve "null" değilse, "word" ü döndür; aksi halde "null" döndür
${degisken:offset:length} # alt dizi ilerlemesi yapar. $degisken 'in alt dizilerini karakter uzunluğuna göre dallandı rarak döndürür
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:44:02 +02:00
## 2.3 String Yerleştirme
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Stringleri düzenlemede bir kaç örneği inceleyelim
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
${degisken#deger} # eğer verilen "deger" degisken'in değerinin başı yla eşleşiyorsa, eşleşen en kı sa kı smı sil ve geri kalanı yazdı r
${degisken##deger} # eğer verilen "deger" degisken'in değerinin başı yla eşleşiyorsa, eşleşen en uzun kı smı sil ve geri kalanı yazdı r
${degisken%deger} # eğer verilen "deger" degisken'in değerinin sonuyla eşleşiyorsa, eşleşen en kı sa kı smı sil ve geri kalanı yazdı r
${degisken%%deger} # eğer verilen "deger" degisken'in değerinin sonuyla eşleşiyorsa, eşleşen en uzun kı smı sil ve geri kalanı yazdı r
${degisken/deger/yeni_deger} # Değişkenin değeri içinde "deger" ile eşleşen en uzun kı sı m ile "yeni_deger" değiştirilir. Sadece ilk eşleşme değiştirilir
${degisken//deger/string} # Değişkenin değeri içinde "deger" ile eşleşen en uzun kı sı m ile "yeni_deger" değiştirilir. Tüm eşleşmeler değiştirilir
${#degisken_ismi} # değişkenin değerinin uzunluğunu string olarak döndürür
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
## 2.4. Fonksiyonlar
Tüm programlama dillerinde olduğu gibi, bash'de de fonksiyonları birden fazla satı r kodu tek seferde çalı ştı rmak ve tekrarlamak için kullanbiliriz. Fonksiyon tanı mlamak `function my_func { my_code }` yazmak kadar kolay. Fonksiyon çağı rmak da başka bir programı çağı rmakla aynı şekilde sadece adı nı yazmanı z yeterli.
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
functname() {
shell commands
}
```
2017-05-02 20:36:12 +02:00
Örnek:
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
#!/bin/bash
function hello {
echo world!
}
hello
function say {
echo $1
}
say "hello world!"
```
2017-05-02 20:36:12 +02:00
Yukarı daki kodu çalı ştı rdı ğı mı zda `hello` fonksiyonu "world!" yazdı racaktı r. Yukarı daki `hello` ve `say` fonksiyonları özdeştir. Tek farkları `say` fonksiyonu parametre alı r ve aldı ğı ilk parametreyi `echo` komutu ile yazdı rı r. Argümanlar scripti çalı ştı rı rkenki sı rayla isimlendirilir. `1,2 ($1,$2)`
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
## 2.5. Koşullar
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Bash'deki koşullar diğer programlama dilleri ile aynı dı r. `if` ifadesi doğru ise `then` durumu çalı şı r.
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
if [ifade]; then
ifade doğru ise çalı şacak durum
2017-04-01 09:47:13 +02:00
else
2017-05-02 20:36:12 +02:00
ifade yanlı ş ise çalı şacak durum
2017-04-01 09:47:13 +02:00
fi
```
2017-05-02 20:36:12 +02:00
Bazen iç içe if - else yazmak kafa karı ştı rı cı olabilir, bunun için `case statements` denilen (switch-case) yapı ları bulunur.
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
case ifade in
yapi1 )
durum-komut ;;
yapi2 )
durum-komut ;;
2017-04-01 09:47:13 +02:00
...
esac
```
2017-05-02 20:36:12 +02:00
İfade Örnekleri:
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
durum1 & & durum2 # iki durum da doğru olmalı
durum1 || durum2 # en az biri doğru olmalı
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
str1=str2 # str1 ve str2 eşittir
str1!=str2 # str1 ve str2 eşit değildir
str1< str2 # str1 , str2 ' den azdı r
str1>str2 # str1, str2'den çoktur
-n str1 # str1 "null" değildir (str1'in karakter uzunluğu 0'dan fazla)
-z str1 # str1 "null" dur (str1'in karakter uzunluğu 0)
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
-a dosya # dosya var (oluşturulmuş)
-d dosya # dosya var (oluşturulmuş) ve dosya bir dizin
-e dosya # dosya var; -a ile aynı
-f dosya # dosya var ve düzgün bir dosya (dizin veya özel dosya türü değil)
-r dosya # okuma yetkin var
-s dosya # dosya var ve boş değil
-w dosya # yazma yatkin var
-x dosya # dosya ve dizin üzerinde çalı ştı rma yetkin var, dizin ise çalı ştı rma yetkisi arar
-N dosya # son okumadan beri dosya değiştirilmiş
-O dosya # dosyanı n sahibisin ( owner )
-G dosya # dosya'nı n group ID'si seninki ile eşleşiyor (birden çok grupta ise, groupları ndan biri ile)
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
dosya1 -nt dosya2 # dosya1, dosya2'den daha yeni
dosya1 -ot dosya2 # dosya1, dosya2'den daha eski
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
-lt # daha az (less than)
-le # daha az veya eşit (less than or equal)
-eq # eşit (equal)
-ge # daha büyük veya eşit (greater than or equal)
-gt # daha büyük (greater than)
-ne # eşit değil (not equal)
2017-04-01 09:47:13 +02:00
```
2017-05-02 20:36:12 +02:00
## 2.6. Döngüler
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Bash üzerinde üç tip döngü vardı r. `for` , `while` ve `until` .
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
Farklı `for` Yazı mı (Syntax):
2017-04-01 12:13:06 +02:00
```bash
2017-04-01 09:47:13 +02:00
for x := 1 to 10 do
begin
2017-05-02 20:36:12 +02:00
durum - komutlar
2017-04-01 09:47:13 +02:00
end
2017-05-02 20:36:12 +02:00
for dongu_adi [in list]
2017-04-01 09:47:13 +02:00
do
2017-05-02 20:36:12 +02:00
$name kullanan durum ve komutlar
2017-04-01 09:47:13 +02:00
done
2017-05-02 20:36:12 +02:00
for (( baslatma ; bitis_kosulu ; degisiklik ))
2017-04-01 09:47:13 +02:00
do
2017-05-02 20:36:12 +02:00
durum ve komutlar...
2017-04-01 09:47:13 +02:00
done
```
`while` Syntax:
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
while kosullar; do
durum ve komutlar
2017-04-01 09:47:13 +02:00
done
```
`until` Syntax:
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
until kosullar; do
durum ve komutlar
2017-04-01 09:47:13 +02:00
done
```
2017-05-02 20:36:12 +02:00
# 3. İpuçları
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
## Alias (Takma ad) ekleme
`bash_profile` dosyası nı `nano ~/.bash_profile` komutu ile veya `vim ~/.bash_profile` komutu ile açı n
> alias dockerlogin='ssh www-data@omergulen.local -p2222' # adı nı zı .bash_profile' e ekleyin
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
## Çabukça Özel Bir Dizine Gitme
`nano ~/.bashrc`
> export otel_kayitlari="/workspace/hotel-api/storage/logs"
2017-04-01 09:47:13 +02:00
2017-04-06 08:23:57 +02:00
```bash
2017-04-01 09:47:13 +02:00
source ~/.bashrc
2017-05-02 20:36:12 +02:00
cd $otel_kayitlari
2017-04-06 08:23:57 +02:00
```
2017-04-01 09:47:13 +02:00
2017-05-02 20:36:12 +02:00
## Yakalanmalardan Çı kı ş | Exit traps
2017-04-16 10:02:21 +02:00
2017-05-02 20:36:12 +02:00
Bash script'inizi daha düzenli, hatası z ve arkada gereksiz işlem bı rakmayacak şekilde yazı n.
2017-04-16 10:02:21 +02:00
```bash
function finish {
2017-05-02 20:36:12 +02:00
# temizlemeyi yapı n örn. açı k kalan gereksiz işlemleri sonlandı r
2017-04-16 10:02:21 +02:00
jobs -p | xargs kill
}
trap finish EXIT
```
2017-05-02 20:36:12 +02:00
## Çevre değişkenlerinizi kaydedin
`export FOO = BAR` yaptı ğı nı zda, değişkenleriniz bu shell'de ve bunun üzerinden açı lan shell'lerde etkili olacaktı r. Kalı cı lı ğı sağlamak için `~/.bash_profile` dosyası na aşağı daki komutu ekleyin.
2017-04-24 21:52:41 +02:00
```bash
echo export FOO=BAR >> ~/.bash_profile
```
2017-05-02 20:36:12 +02:00
## Scriptlerinize erişim
2017-04-24 21:52:41 +02:00
2017-05-02 20:36:12 +02:00
Scriptlerinize kolayca erişmek için home klasörünüzün içinde `mkdir ~/bin` komutuyla `bin` dizini oluşturabilirsiniz, artı k tüm scriptlerinizi bu dizine koyup erişebilirsiniz.
2017-04-24 21:52:41 +02:00
2017-05-02 20:36:12 +02:00
Eğer erişemezseniz, aşağı daki kodu `~/.bash_profile` dosyanı za eklemeyi ve `source ~/.bash_profile` komutunu çalı ştı rmayı deneyin.
2017-04-24 21:52:41 +02:00
```bash
2017-05-02 20:36:12 +02:00
# PATH değişkenini belirtin
2017-04-24 21:52:41 +02:00
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
```
2017-05-02 20:36:12 +02:00
# 4. Derleme | Debugging
`bash` komutuna farklı parametreler vererek kolayca scriptinizi derleyebilirsiniz. Örneğin `-n` parametresi kodu çalı ştı rmayı p sadece hata kontrolü yapacaktı r, `-v` komutları çalı ştı rmadan yazdı racak, `-x` ise işlem bittikten sonra kodları yazdı racaktı r.
2017-04-01 09:47:13 +02:00
2017-04-01 12:13:06 +02:00
```bash
2017-05-02 20:36:12 +02:00
bash -n script_adi
bash -v script_adi
bash -x script_adi
2017-04-01 09:47:13 +02:00
```
2017-04-01 15:03:37 +02:00
2017-05-02 20:36:12 +02:00
## Katkı Sağlama
2017-04-01 15:03:37 +02:00
2017-05-02 20:36:12 +02:00
- Sorunları bildir [How to ](https://help.github.com/articles/creating-an-issue/ )
- Geliştirmeler ile birlikte "pull request" açı n [How to ](https://help.github.com/articles/about-pull-requests/ )
- Bilginin yayı lması na yardı mcı olun.
2017-04-01 15:03:37 +02:00
2017-05-02 20:36:12 +02:00
## Lisans
2017-04-01 15:03:37 +02:00
[![License: CC BY 4.0 ](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg )](https://creativecommons.org/licenses/by/4.0/)