└── README.md /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![Shell Cheatsheet](https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/05df8cc2-4413-4a7c-93c7-dbf7991b18a7/ddzkgj0-fe2edca4-57ab-4dce-8899-ce94182a9160.png/v1/fill/w_1280,h_449,q_80,strp/shell_cheatsheet_by_markdownimgmn_ddzkgj0-fullview.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOiIsImlzcyI6InVybjphcHA6Iiwib2JqIjpbW3siaGVpZ2h0IjoiPD00NDkiLCJwYXRoIjoiXC9mXC8wNWRmOGNjMi00NDEzLTRhN2MtOTNjNy1kYmY3OTkxYjE4YTdcL2RkemtnajAtZmUyZWRjYTQtNTdhYi00ZGNlLTg4OTktY2U5NDE4MmE5MTYwLnBuZyIsIndpZHRoIjoiPD0xMjgwIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmltYWdlLm9wZXJhdGlvbnMiXX0.VYVfzUImBjcz2_b-_RRdfmOOdZju6u8gKFE-BOtQaD4) 3 | 4 | Bu repo shell komutlarının türkçe açıklamalarını içerir. Ekleme için pull request'lere tamamiyle açıktır. 5 | 6 | ### Temel Komutlar 7 | 8 | `whoami`: Bulunan oturumun sahibi olan kullanıcıyı yazdırır. 9 | 10 | `su`: Başka bir kullanıcının yetkileri ile komut çalıştırmak için yeni bir shell ayağa kaldırır. (“Örnek: su root”) 11 | 12 | `pwd`: Neredeyiz? Şu an bulunduğunuz dizini yazdırır. (“print working directory”) 13 | 14 | `ls`: Bulunduğumuz dizinin içindeki dosyaları ve dizinleri listeler. (“listing”) 15 | 16 | `cd dizin_adı`: Bulunduğunuz dizini değiştirmenize yarar. (“change directory”) 17 | 18 | `man`: Argüman olarak verdiğiniz komutun manuelini, kılavuzunu açar. (Örnek: man touch) 19 | 20 | `touch dosya_yolu`: Belirttiğiniz yoldaki dosyanın son değiştirilme tarihini günceller. Böyle bir dosya yoksa bu dosyayı oluşturur. 21 | 22 | `cd ..` : Hiyerarşik olarak bulunduğunuz dizinden üst dizine çıkmanıza yarar. (Örnek: Çalışma dizininiz /home/ali iken çalışma dizininizi /home yapar) 23 | 24 | `~` : Oturumun sahibi kullanıcı için home dizinini belirtir. (Tilde sembolü) 25 | 26 | `cd ~/../.`: Çalışma dizininizi "home"'un üst dizinine ayarlar. Sondaki nokta bulunulan en son klasörün kendisini belirtir. 27 | 28 | `cp klasör/dosya.csv backup/dosya.bck`: "klasör" dizinindeki "dosya.csv" dosyasını, "backup" dizinine "dosya.bck" dosya ismiyle kopyalar. 29 | 30 | `cp dosya1.txt dosya2.txt backup`: Belirtilen iki dosyayı ("dosya1.txt" ve "dosya2.txt") aynı isimle "backup" dizinine kopyalar. 31 | 32 | `dd`: Dosya kopyalama ve dönüştürme yapar.Örneğin `dd if=/dev/sda of=./disk.img` ile /dev/sda diskinin tamamının imajını .img dosyası olarak alabilirsiniz. 33 | 34 | `mv`: Dosyaları taşımak ya da yeniden adlandırmak için kullanılan komut (move) 35 | 36 | `mv dosya_adi.txt yeni_dosya_adi.txt`: dosya_adi.txt'yi yeni_dosya_adi.txt olarak taşıdık. Böylece adını değiştirmiş olduk. 37 | 38 | `rm`: Dosyaları silmek için kullanılan komut. ("remove") 39 | 40 | `rm dosya.txt backup/dosya-2.txt`: Belirtilen iki dosyayı da siler. 41 | 42 | `mkdir dizin_ismi`: dizin_ismi adında yeni bir dizin oluşturur. 43 | 44 | `mkdir -p gecersiz_dizin/hedef_dizin`: gecersiz_dizin'in varolmaması durumunda hedef_dizin ile birlikte onu da açar. 45 | 46 | `rm -rf dizin_ismi`: dizin_ismi adlı dizini içindeki dosyaları ve altdizinleri de dahil ederek siler. 47 | 48 | `pbcopy`: Argüman olarak verilen değeri panoya kopyalar. 49 | 50 | `cat dosya_ismi`: Dosyanın içeriğini ekrana yazdırır. 51 | 52 | `df`: Dosya sisteminizdeki disk alanı hakkında bilgi edinmenizi sağlar. 53 | 54 | `du`: Disk kullanımını görmek ve hangi uygulamanın yada dosya alt sisteminin ne kadar yer kapladığını görmek için kullanılır. 55 | 56 | `ps`: Sisteminizde hangi işlemlerin çalıştığını görmenizi sağlar. 57 | 58 | `groups`: Verilen kullanıcının gruplarını listeler. Örneğin `groups root` 59 | 60 | `wget`: HTTP, HTTPS veya FTP protokollerini kullanan bir adresteki dosyayı terminal üzerinden doğruca kendi makinemize indirmek için kullanılan komut. 61 | 62 | `grep`: Dosyaların içinde düzenli ifadelerle (RegEx) arama yapmanızı sağlayan komut. Log incelerken vazgeçilmezimiz. 63 | 64 | `watch`: Belirli aralıklarla bir komutun çıktısını çalıştırarak ekrana yazdırır.(watch -n1 ls -la ) 65 | 66 | ## Veri Manipülasyonu 67 | 68 | `less`: Büyük dosyalara bakmak için kullanılan bir komut. Dosyanın tamamını ekrana yazdırmaz, daha okunabilir ilerlenebilir hale getirir. 69 | 70 | `less`’e birden fazla dosya ismi verirsek `:n`’le bir sonraki dosyaya, `:p`’yla bir önceki dosyaya gideriz, `:q`’la çıkarız. 71 | 72 | `more`: `less`' in eskisi. Sadece aşağıya kaydırmaya izin verir. 73 | 74 | `head`: Dosyanın ilk parçasını (standart 10 satır) yazdırır. 75 | 76 | `tail`: Head komutunun tam tersi olarak dosyanın son parçasını yazdırır. '-f' parametresi ile kullanıldığı zaman dosyaya anlık olarak yazılan içeriği ekrana basar. 77 | 78 | ### Komut Satırı Bayrakları: 79 | 80 | `head -n 3 directory/dosya_ismi.csv`: Dosyadaki ilk üç satırı getiriyor (“number of lines”) 81 | 82 | `ls -R`: Bütün klasörleri ve içindekileri gösterir 83 | 84 | `man`: Yanına yazılan komut hakkında yardım eder (manual) 85 | 86 | `cut`: csv dosyalarında sütunları seçer 87 | 88 | `cut -f 2-5,8 -d , dosya.csv`: 2. ve 5. sütun arasındakileri seç. (flag'ler: -f (fields, sütunları belirtir), -d (delimiter, ayırıcı)) 89 | 90 | `sed`: Akış editörü. Dosyalar üzerinde bir çok işlem yapmaya yarar. Örneğin `sed -i 's/aaaa/bbbb/g' test.txt` ile text.txt içerisinde ki her aaaa dizisi bbbb haline getirilebilir. 91 | 92 | `awk`: Metin dosyalarını işlemek için kullanılır. Örneğin `awk -F';' '{print$1}' test.txt` ile test.txt içerisindeki satırları ';' ayracına göre sütunlara ayırır ve ilk sütunları ekrana yazdırır 93 | 94 | `find`: Dizin araması yapar. `find / -name "temp*"` ile / dizininde ismi temp ile başlayan tüm dosyalar aranabilir. 95 | 96 | `grep`: dosyada arama yapar 97 | 98 | `grep kelime directory/dosya.csv`: "kelime"yi içeren satırları getirir 99 | 100 | `grep -Hirn kelime directory`: belirtilen dizin altında "kelime"yi içeren satırları getirir 101 | 102 | grep’in flag’leri: 103 | 104 | - `-c`: kelimenin bulunduğu satır sayısı döndürür 105 | - `-h`: birden fazla dosyada arama yapıyorsa dosya isimlerini döndürmez 106 | - `-i`: büyük/küçük harf farkını yok sayar ("kelime" ve "Kelime"yi arar) 107 | - `-l`: eşleşme bulunan dosya isimlerini getirir, eşleşmeleri getirmez 108 | - `-n`: eşleşen satırların satır sıralarını döndürür 109 | - `-v`: eşleşme bulunmayan satırları döndürür 110 | 111 | `paste`: iki tabloyu tek tablo yapar 112 | 113 | ### Komutların çıktılarını nasıl saklıyoruz? 114 | 115 | **örnek:** `head -n 5 directory/dosya.csv > dosya2.csv`: çıktı dosya2.csv’ye gider. 116 | 117 | çıkardığımız dosyanın içeriklerine `cat dosya2.csv`’yle bakabiliriz. 118 | 119 | **örnek:** `head -n 5 directory/dosya.csv >> dosya2.csv` : çıktı dosya2.csv'ye gider. 120 | 121 | fakat buradaki farklılık, `>` yerine `>>` kullanmamız. 122 | eğer `>>` kullanırsak, yazdığımız veriler dosyaya eklenir, dosyada halihazırda bulunan veriler silinmez. 123 | 124 | yine aynı şekilde çıkardığımız dosyanın içeriklerine `cat dosya2.csv`’yle bakabiliriz. 125 | 126 | **örnek:** `head -n 5 directory/dosya.csv 2> dosya2.csv` : oluşan hata dosya2.csv'ye gider. 127 | 128 | buradaki farklılık ise `>` yerine `2>` kullanmamız. 129 | eğer `2>` kullanırsak, kullandığımız komutta oluşan hata çıktılarını dosyaya yazmış oluruz. 130 | 131 | **örnek:** `head -n 5 directory/dosya.csv > dosya2.csv 2> err.txt` 132 | 133 | buradaki komutta hata oluşmazsa çıktı dosya2.csv'ye, hata oluşursa oluşan hata çıktısı err.txt'ye yazılır. 134 | 135 | ### pipe | operatörü: 136 | 137 | pipe soldaki komutun çıktısını alıp sağa gönderiyor. 138 | 139 | **örnek:** `head -n 5 directory/dosya.csv | tail -n 3`: beşinci satıra kadar aldı, sonra sondan üçüncüyü aldı (tail dosyanın sonundan alması gerektiğini belirtir) 140 | 141 | **örnek:** `cut -d , -f 2 directory/dosyacsv | grep -v anahtar_kelime`: `cut`’la dosya.csv’deki 2. kolonu seçti, `pipe`'la sağ tarafa `grep`’le "anahtar_kelime" kelimesinin geçmediği durumların aramasını yaptı 142 | 143 | **örnek:** `cut -d , -f 1 directory/dosya.csv | grep -v Tarih | head -n 10`: dosya.csv verisinin ilk kolonunu seçtik, “Tarih” yazan header line’ı sildik ve ardından ilk on satırı aldık (`head` en baştaki satırları alması gerektiğini belirtir) 144 | 145 | `wc`: kaç tane karakter, kelime, ya da satır varsa döndürür (“word count”) 146 | 147 | ## Jokerler 148 | 149 | Komutlarda birden fazla dosya ismi verirsek birden fazla dosya üstüne çalışır. Bütün dosyaların hepsini tek tek yazmaktansa * operatörünü kullanırız 150 | 151 | cut -d , -f 1 directory/*.csv 152 | 153 | `cut -d , -f 1 directory/ka*.csv`: Klasörde kalem.csv ve kagit.csv isimli iki tane csv dosyası olsun, ikisini de seçmek için 154 | 155 | `?` tek bir karakteri eşliyor, mesela `201?.txt` 2017.txt ve 2018.txt’yi eşliyor, ama 2017-01.txt’yi eşlemiyor. 156 | 157 | `[…]`: köşeli parantezin içindeki bir karakteri eşler, mesela `201[78].txt` 2017.txt ya da 2018.txt’yi eşler. 158 | 159 | `{…}`: `{*.txt, *.csv}` .txt ya da .csv’yle biten dosyaları eşler. 160 | 161 | ## Sıralama Yapmak 162 | `sort` komutuyla yapılabilir. 163 | `-n` flag’i: numerik olarak sıralar 164 | `-r`: tersten sıralar 165 | `-b`: boşlukları yok saymamızı sağlar 166 | `-f`: büyük/küçük harfi yok saymamızı sağlar (folding) 167 | 168 | **örnek:** `cut -d , -f 2 directory/dosya.csv | grep -v "anahtar_kelime" | sort -r`: aramayı tersten sıralar 169 | 170 | `uniq`: çift yazılmış satırları siler 171 | 172 | `cut -d , -f 2 directory/dosya.csv | grep -v "anahtar_kelime" | sort | uniq -c`: ikinci kolonu al, içinde anahtar_kelime geçmeyen çıktıları al, hepsini sırala, her eşleşme bir kez çıkacak şekilde göster ve kaç kez gözüktüğü yazsın 173 | 174 | ## Dosya İzinleri 175 | 176 | bazen kullandığımız dosyalar üzerinde yeterli iznimiz olmayabilir, veya önemli dosyaların başkaları tarafından okunup yazılmasını istemeyebiliriz. böyle durumlarda dosya izinlerini kullanabiliriz. 177 | 178 | `chmod` komutu ile yapılabilir 179 | 180 | `chmod` sekizlik(octal) sayı sistemi kullanır, bu sistemde `read` izni 4, `write` izni 2, `execute` izni ise 1 sayısı ile gösterilir. 181 | 182 | bir sistemde ise temel olarak 3 kullanıcı vardır, bunlar sırasıyla 183 | - `owner` dosyanın sahibi 184 | - `group` bilgisayar üzerinde kayıtlı olan kullanıcılar 185 | - `other` geri kalan herkes 186 | 187 | **örnek:** `chmod 644 file.txt` : bu komut sonrasında file.txt'yi dosyanın sahibi okuyabilir/yazabilir. bilgisayar üzerinde kayıtlı olan kullanıcılar ve geri kalan herkes bu dosyayı sadece okuyabilir. 188 | 189 | buradaki 6 sayısı dosya sahibinin iznini, 4 sayısı bilgisayar üzerinde kayıtlı olan kullanıcıların iznini ve diğer 4 sayısı ise geri kalan herkesin iznini temsil eder. 190 | 191 | izinleri hesaplamak basittir. mesela dosya sahibine okuma ve yazma izni vermek için 4+2=6, okuma ve çalıştırma izni vermek için ise 4+1, yani 5 yazabiliriz. hiçbir izin vermek istemiyorsak 0 yazabiliriz. sıralama ise daima owner-group-other şeklindedir. 192 | 193 | ## Sistem Bilgisi 194 | 195 | `who`: Oturum açmış kullanıcıları listeler. 196 | 197 | `lsusb`: USB aygıtları listeler. USB ile takılan aygıtın tanınıp tanınmadığını anlamaya yarıyor. 198 | 199 | `dmesg`: Sistem yeni bir donanım tespit ettiğini ya da bir donanımın bağlantısının kesildiğini farkettiğinde oluşturduğu mesajları görmemizi sağlar. Bu sayede bir donanımın bağlı olup olmadığını anlayabiliriz. 200 | 201 | `lsblk`: Sistemde ki diskleri ve partitionları gösterir. 202 | 203 | `lsb_release -a`: Mevcut GNU/Linux dağıtımı hakkında bilgi verir.(Debian tabanlılarda test ettim). 204 | 205 | `uname -a`: Sistem ve çekirdek hakkında bilgi verir. 206 | 207 | `free`: RAM kullanımı ve durumu ile ilgili bilgi verir. 208 | 209 | `du ./`: Verilen dizin içinde bulunan dosyaları ve boyutlarını listeliyor. 210 | 211 | `tree ./`: Verilen dizini ağaç yapısı şeklinde listeler. İşe yarar. 212 | 213 | `history`: Kullanıcının komut geçmişini ortaya döker. Bu kayıtlar genelde home dizini altında eğer kullanılan shell bash ise home dizini altında .bash_history dosyasında tutulur. 214 | 215 | `top`: Terminal içinde görev yöneticisi. Kardeşi `htop` daha renkli ve daha fazla özelliğe sahip ama indirmek gerekiyor. 216 | 217 | `kill`: Processlere sinyal göndermeye yarar. Mesela kilitlenen bir işlem varsa örneğin Firefox, PID numarası tespit edildikten sonra `kill -9 PID_Numarası` yazılarak Firefox'a SIGKILL gönderilebilir. Bu da Firefox'u kapatacaktır. 218 | 219 | ## Ağ 220 | 221 | `ip a` : Sistemde varolan tüm interface bilgilerini numaralandırarak ekrana basar. 222 | 223 | `ifconfig`: Ağ arayüzleri hakkında bilgi verir. Sistemde ki ağ kartlarının MAC ve IP adreslerini bulmakta yardımcı oluyor. 224 | 225 | `ping`: Parametre olarak girilen adrese ICMP paketleri atar. Windows' dan farklı olarak GNU/Linux sürümünde eğer müdahale edilmez ise sonsuza kadar ping atmaya devam eder. Windows' da yanılmıyorsam 3 tane atıp kendini durduruyor. 226 | 227 | `netstat -antup`: Kullanımda olan portları listeler. LISTEN olanlara dikkat edilmesi iyi olur. 228 | 229 | `route`: Sistemdeki yönlendirme tablosunu listeleme ve yönetme işlemlerini yapar. Host üzerinde tanımlı olan bir arayüz üzerinden belirtilmiş hedeflere static yönlendirme yapar. 230 | 231 | `tcpdump`: Sisteme gelen network trafigini incelemeye yarar. 232 | 233 | **örnek:** `tcpdump -i eth0` : Belirtilen arayüzün dinlenmesini sağlar. Gelen network paketlerini ekrana yazdırır. 234 | 235 | # Bash Söz Dizimi 236 | ## Değişkenler 237 | 238 | degisken=1 veya degisken="yazı" şeklinde değişken tanımlaması yapılır, boşlukla değişken tanımlanması halinde hata alırsınız. 239 | 240 | DEGISKEN=1 veya DEGISKEN="yazı" bu şekilde global değişken tanımlayabilirsiniz. Kodlarınızın herhangi bir yerine; 241 | ```bash 242 | export DEGISKEN 243 | ``` 244 | yazdıktan sonra birbirini tetikleyen scriptler yazmanız halinde dosyalar arası değişkenlerinizi kullanabilirsiniz. 245 | 246 | ## Değişkenleri Yazdırmak 247 | ```bash 248 | ad="Ömer" 249 | echo $ad 250 | 251 | > Ömer 252 | ``` 253 | ```bash 254 | echo ad 255 | > ad 256 | echo '$ad' 257 | > $ad 258 | ``` 259 | ### Cümle İçinde Yazdırmak 260 | ```bash 261 | echo "Selam Benim Adım, $ad" 262 | ``` 263 | ## Bilinmesi Gereken Bazı Değişkenler 264 | - $#: Komut dosyasına kaç komut satırı parametresi geçirildi. 265 | - $@: Komut satırı parametrelerine iletilen tüm komut satırı parametreleri. 266 | - $?: Çalıştırılacak son işlemin çıkış durumu. 267 | - $$: Geçerli komut dosyasının İşlem Kimliği (PID). 268 | - $USER: Betiği çalıştıran kullanıcının kullanıcı adı. 269 | - $HOSTNAME: Komut dosyasını çalıştıran bilgisayarın ana bilgisayar adı. 270 | - $SECONDS: Betiğin çalıştığı saniye sayısı. 271 | - $RANDOM: Rastgele bir sayı döndürür. 272 | - $LINENO: Komut dosyasının geçerli satır numarasını döndürür. 273 | - $PATH: PATH değişkeninde bir komut yazıldığı anda sistem tarafından aranacak olan patika listesi görüntülenir. 274 | 275 | ## Aritmetik İşlemler 276 | ```bash 277 | let "a=2+3" # +(toplama), -(çıkarma), *(çarpma), /(bölme) 278 | echo $a 279 | > 5 280 | ``` 281 | ## 282 | 283 | ## Aritmetik Kıyaslamalar 284 | - -gt büyük 285 | - -lt küçük 286 | - -ge büyük eşit 287 | - -le küçük eşit 288 | - -eq eşit 289 | - -ne eşit değil 290 | 291 | ```bash 292 | sayi=2 293 | [ $sayi -eq 3 ] 294 | echo $? 295 | > 0 296 | [ $sayi -lt 2 ] 297 | echo $? 298 | >1 299 | ``` 300 | 301 | ## If Kullanımı 302 | ```bash 303 | #!/bin/bash 304 | sayi=3 305 | 306 | if [ $sayi -eq 3]; then 307 | # == da kullanabilirsiniz. 308 | echo Sayı eşit 309 | else 310 | echo Sayı eşit değil 311 | fi 312 | 313 | > Sayı eşit 314 | ``` 315 | 316 | ## While Kullanımı 317 | 318 | ```bash 319 | #!/bin/bash 320 | sayi=2 321 | while [ $sayi -lt 100 ] 322 | do 323 | deger=$((deger+2)) 324 | echo $sayi 325 | done 326 | ``` 327 | Yukarıda görmüş olduğunuz $() kullanımı terminalde dönen çıktı anlamına gelir. 328 | Örneğin; 329 | ```bash 330 | $ pwd 331 | > /user/omerayyildiz/Desktop 332 | $ masaustuYolu=$(pwd) 333 | $ echo $masaustuYolu 334 | > /user/omerayyildiz/Desktop 335 | ``` 336 | 337 | ## For-Do Kullanımı 338 | ```bash 339 | #!/bin/bash 340 | for agac in akasya mese visne 341 | do 342 | echo $agac 343 | done 344 | > akasya mese visne 345 | ``` --------------------------------------------------------------------------------