# Linux

![](/files/iepwm00ACSVeOJHMA4Fw)

### Linux Dosya Tipleri

Linux dosya sisteminde gezinirken farklı dosya türleriyle karşılaşacağız. En çok kullanılanlar regular file diye tabir ettiğimiz normal dosyalar ve dizinlerdir. Bununla birlikte, Linux işletim sisteminde, başka dosya türleri de bulunmaktadır.

Dosya tiplerini tanımlamak için **ls -lah** komutunu kullanabiliriz. Komut çıktısının en başındaki sembol bizi dosyanın tipini anlamamıza yardımcı olacaktır.

**-:** Regular File\
**d:** Directory \
**c:** Character Device File\
**b:** Blok Device File\
**p:** Named Pipe\
**l:** Symbolic link

#### Regular File

Normal dosya, Linux sisteminde bulunan en yaygın dosya türüdür. Metin dosyaları, resimler, kitaplıklar vb. farklı dosyaları yönetir. Touch komutuyla normal bir dosya oluşturabilirsiniz.

**Directory**

Directory yani dizinler, Linux'ta bulunan en yaygın ikinci dosya türüdür. Directory’i mkdir komutuyla oluşturulabilirsiniz

#### Character device

Character ve blok aygıt dosyaları, kullanıcıların ve programların, donanım çevre aygıtlarıyla iletişim kurmasına olanak tanır

![](/files/ELMHS9McLDHPk2gkM05D)

#### Block Device

Harddisk, bellek gibi depolama cihazları için kullanılır.

![](/files/m1N9dpDYtT5al3XF9UFN)

### Bash:&#x20;

Bourne-Again Shell sözcüklerinin kısaltılmışıdır. Linux sistemler için yazılan komutları yorumlayan komut dili yorumlayıcısıdır.

**Dpkg (Debian Paket Yöneticisi) :** Debian Linux'ta bulunan ancak diğer dağıtımlarla uyumlu, İnternet yüklemeleri için bir paketleme ve yükleme aracıdır.

**Pwd(Print Working Directory):** Bulunduğunuz dizini gösterir.&#x20;

![](/files/S9RRldpF76tkxiXWAJv8)

**cd (Change Directory) :** Dizinler arasında gezinmek için cd komutu kullanılır. Hiyerarşik yapılandırmaya göre bir gezinti gerçekleştirebilirsiniz. Örneğin cd /etc/ssh ile ulaştığınız dizinin altında başka bir dizin altında bulunan dizine erişemezsiniz. Bunu yapmak için root dizininde başlayarak dizin değiştirme işlemine gitmeniz gerekir.

![](/files/Hyqq1x2eYHEHNquKj8gO)

Komut satırına tek başına **cd** yazıp enter’a bastığınızda login olduğunuz kullanıcının **/home** dizinine dönersiniz.

![](/files/eOCzpqURWifPyrALYlir)

**cd ..** nokta ile bir önceki dizine geri dönersiniz.

**cd –** ile çıkmış olduğunuz bir önceki dizine geri dönersiniz.,

![](/files/6JadJkOmFrmFCsZQtMvj)

işareti dizinlerin arasındaki hiyerarşi için kullanılır. **/** işareti kullanmadan bir dizine gidemezsiniz.

![](/files/kkE2o36IVYXv9QkWgaKw)

**ls (list) :** Dizinlerin içeriklerini listeler. ls komutu ile birlikte kullanılacak değişkenler listenin çıktısını daha ayrıntılı olarak gösterecektir. **ls -a** gizli dosyalar dahil tüm dosyaları gösterirken, **-l** ile ayrıntılı bir liste görürsünüz.  **-h** dosya boyutunun anlaşılabilir şekilde bir çıktısını verir. Komut satırına **ls -lah** yazıp enter’a basarsak bulunduğumuz dizin altındaki dosyaların izinlerinin durumu, sahipleri, boyutu, oluşturulma zamanları ve isimlerini görürüz. Mavi renkli olan test isimli dosya haricindeki dosyalar gizli dosyadır.

![](/files/Y7mgb5ynD1TaLsOlINha)

**touch :** Boş bir dosya yaratmanın en basit yoludur.

**touch testdosyasi.txt**

![](/files/lSoRVF3wBag0mJ14LGDQ)

**touch test{1..5}** komutu adı test ile başlayan 1’den 5’e kadar sıralanan 5 adet boş dosya yaratır

![](/files/s0Jo13TfonBXj7guXFRd)

**cat :** Dosya içeriğini komut satırında read-only olarak görüntüler

**cp (Copy) :** Bir dosyayının kopyasını oluşturmak için kullanılır. Bir konfigürasyon dosyasında değişiklik yapmadan öncebu komut ile mutlaka bir kopyasını oluşturmanızı tavsiye ederim. Herhangi bir şeyin ters gitmesi durumunda yedek dosyanızdan düzeltme imkanınız olur.

![](/files/2xRTmeUb5a8KmBvGR4jp)

Dosyanızı başka bir dizine kopyalamak isterseniz dizin yolunu göstermeniz gerekir. Dosyanızın bir kopyası belirttiğiniz dizine kopyalanır.

![](/files/xYHTePrVYW9OxaatPXOy)

Bir dizin içindeki bütün dosyaların ve dizinlerin başka bir dizine kopyasını almak isterseniz -r argümanını kullanmalısınız.

**cp -r backupfiles/ newbackupfiles**

Sadece dizin içerisindeki dosyaları bir klasöre kopyalamak isterseniz kopyalamak istediğiniz dosyaları yan yana yazabilirsiniz.

![](/files/OpAUrzKpGZxdRiUUYhwO)

**mkdir :** Linux’da dizin yaratmak için kullanılır.

![](/files/WwCuKgk4HqIWsVfqrKLn)

Eğer alt altta parent dizinler oluşturmak isterseniz **-p** argümanını kullanmamız gerekir.

**mkdir -p dosyalarim/dosyalar/dosya**

**rm (Remove) :** Bir dosyayı silmek için kullanılır. Dikkatli kullanılması gerekir. rm ile sildiğiniz dosyaları bir daha geri döndüremezsiniz.

![](/files/oePcR8jMHP6gGpevqqUY)

**rm -i** komutuyla dosyanın silinip silinmeyeceğini soran bildirim alınmasını sağlayabilirsiniz

rm -rf komutu ile dosya ve dizinler dahil bütün her şeyi silersiniz. **-r recursive ve -f force** anlamındadır.

**rmdir (Remove Directory) :** Bir dizini silmek isterseniz rmdir komutunu kullanabilirsiniz. Yine **-p** argümanı ile alt dizinler dahil bir silme işlemi de gerçekleştirebilirsiniz.

**mv (Move) :** Bir dosya veya dizini başka bir konuma taşımak için kullanılır. Windows’daki Kes komutunun aynısıdır. mv ile taşıdığınız dosyaya bir daha eski konumundan ulaşamazsınız.

![](/files/9geJa9kiOlqTNHA3BjIX)

**mv** komutunu **isim değiştirmek** içinde kullanabiliriz.

![](/files/TZoTShasw2w3NQrHlblA)

![](/files/8mQ0n6SaqFNbEYeLDLqF)

**uptime :** Sunucunun açıldığı zamanı, ne kadar süredir açık olduğunu, login olan kullanıcı sayısını gösterir.

![](/files/iPrKYMOTx3ttRV89EM6s)

**Operatörler - ‘ ’, “ ”, ;, &, &&, |, ||, #, , \~**

Burada gösterdiğimizden çok daha fazla operatör vardır. Bash Script yazımında sıklıkla kullanılırlar. Genel olarak kullanılanlar hakkında bilgi sahibi olmak faydalı olacaktır. ‘ ‘ ve “ “ Komut satırında yapacağınız girişlerin arasındaki boşlukların kaldırılmasını engeller, ayrık isimli dosya ve dizin adları oluşturmanıza veya bu dosya ve dizinleri kullanmanızı sağlar.

**; noktalı virgül**

İki ayrı komut serisini sırayla çalıştırır. Komutların başarılı olarak çalışıp çalışmaması bir diğer komutu etkilemez.

![](/files/xs1edccs0mtTz9wVhDTe)

### İşletim Sistemini Shutdown ve Reboot Etmek

Eğer işletim sistemini shutdown veya reboot etmek isterseniz shutdown komutunu kullanmalısınız. shutdown komutunu tek başına kullanırsanız 1 dakika sonrasına planlanmış bir kapatma işlemi gerçekleşir. shutdown -c komutu ile bu işlemi iptal edebilirsiniz.

![](/files/HtoMtbrLqb5roaKMNaSc)

**shutdown -P** komutu sunucunun fişini çekmekle aynı etkiye sahiptir. Arka planda çalışan uygulamaların hiçbiri kapanma prosedürlerini yerini getiremeden sunucu direk power-off edilir. Test ortamı olarak kullandığınız bir sunucu ise bu komut kullanılabilir ancak production dediğimiz çalışan hizmetleri barındıran bir sunucuda kullanılmamalıdır

**shutdown -H** komutu sunucuyu komut girildiği andan itibaren kapatma işlemine sokar. Bu komut girildikten sonra arka plandaki servisler kapatılarak sunucu power-off durumuna geçer.

**shutdown -r** komutu sunucuyu reboot (yeniden başlatmak) etmek için kullanılır

Ayrıca reboot komutu da sunucuyu kapatıp yeniden başlatma işlemlerinde kullanılabilir.

**reboot --halt** komutu **shutdown -H** ile aynı etkiye sahiptir.

**reboot -p** komutu **shutdown -P** komutu ile aynıdır.

reboot komutu tek başına sunucuyu yeniden başlatır.

### Servisleri Kontrol Etmek - systemctl, enable, disable

Linux sunucu içerisinde çeşitli görevleri yerine getirmek için kullanılan servisler vardır. Servislerin yapılandırma dosyalarında değişiklik yaptığınızda değişikliklerin gerçekleşmesi için ilgili servisi yeniden başlatmanız gerekir. Sunucunuz yeniden açıldığında ise kritik öneme sahip servislerinizin doğru çalışıp çalışmadığından emin olmak için onları kontrol etmeniz gerekir. Servisle ilgili yapacağınız güncelleme işlemlerinde ise geçici olarak servisi durdurmanız gerekebilir. Servisleri kontrol etmek için **systemctl** komutunu kullanabiliriz.

**systemctl status cron** komutu bize cron servisinin durumu hakkında bilgi verir.\
Komut çıktısını özetleyecek olursak 745  PID’i (Process ID) ile \
cron servisinin 05.11.2022 saat 13.42 den itibaren active ve çalışıyor olduğu görüntülenir. En alt kısımda da log dosyasındaki en son kayıtlar gösterilir.

![](/files/BTryLylIrRVEjm3afedw)

**systemctl restart nginx** komutu nginx servisinin yeniden başlamasını sağlayacaktır.

**systemctl stop nginx** komutu ile nginx servisi duracaktır. Eğer servisi durdurursanız nginx bağlantınız sonlanacaktır. Servisi yeniden aktif hale getirmek için konsol bağlantısı yapmanız gerekir

**systemctl start nginx** komutu ile nginx servisi başlatılır

Enable ve Disable kavramları sunucu yeniden başlatıldığında bir servisin otomatik olarak yeniden başlatılıp başlatılmayacağını belirler.

**systemctl enable nginx** komutu nginx servisinin sunucu açılırken otomatik olarak açılması için kullanılır.

**systemctl disable nginx** komutu ise sunucu açılırken nginx servisinin otomatik olarak başlamamasını sağlar. nginx servisini kullanmak isterseniz systemctl start nginx komutuyla başlatmanız gerekir

### DOSYA VE DİZİNLERDE İZİN YÖNETİMİ&#x20;

Ubuntu, geleneksel olarak UNIX dosya sahipliği ve izin sistemini kullanır. \
Sistemdeki her şey bir dosya olarak ele alınır ve tüm dosyalara (dizinler ve aygıtlar dahil) bir veya daha fazla okuma, yazma ve yürütme izni atanabilir. \
Bir dosyanın güvenliği, bu izinlerden ve dosya sahipliğiyle sağlanır. Sistem yöneticilerinin görevi bu izinleri yöneterek kullanıcıların dosya erişim kontrolünü sağlayarak ilgisiz kişilerin hassas dosyalara erişimini engellemektir.

### Dosya Sahipliklerini ve İzinleri Anlama

Linux bir sistemde tüm dosyaların ve dizinlerin bir sahibi vardır. Dosya ve dizin üzerinde işlemler yapılırken sahiplik ve izinler dikkate alınır. \
Bir dosyanın sahibi değilseniz dosyayı okuyamaz ve değiştiremezsiniz veya dosyaya read yani okuma izniniz varsa o dosya üzerinde bir değişiklik yapamazsınız.

Genel olarak sistem yöneticileri el alışkanlığı veya uğraşmak istemediklerinden dosya veya dizinlerin sahipliğini root kullanıcısına ve izinleri de full olarak verirler. \
Ancak bu davranış işlem yapılan dosyaya istenmeyen kişilerin erişerek verileri çalmasına veya zarar vermesine neden olabilir. \
Bu nedenle dosya ve dizinlerin izinlerini değiştirmeden önce sahipliklerini ve izinleri anlamak önemlidir\
Bir dosyanın veya dizinin read, write ve execute olmak üzere 3 farklı izni bulunur. – ise izin yok anlamındadır.\ <mark style="color:green;">**-rw-rw-r--**</mark> &#x20;

![](/files/iegPeDPTOfr4NE6gBTAx)

### Dosya İçeriğini Görüntüleme&#x20;

\
\&#xNAN;**- less,  more** ve **cat** komutları bir dosyanın içeriğini görüntülemek için kullanılır. **less** komutu ile görüntülemek istediğiniz dosyanın ilk satırından başlayarak görüntüleme sağlanır. Yukarı aşağı tuşları ile dosya içinde gezilebilir. İçeriği uzun olan dosyalarda kullanışlıdır.

![](/files/GlR4OHAaWC2XALlsuw3C)

![](/files/cvT0ebuU67PW1AU7RvFq)

**/ (slash)** ile dosya içeriğinde arama yapılabilir. Aramak istediğiniz kelimenin başına / (slash) işareti koyup enter basarak arama yapabilirsiniz

**q** tuşu ile gösterimden çıkabilirsiniz

**more** ile yine dosyanın en başından itibaren gösterime başlanır ancak enter ve boşluk tuşu ile daha fazla satıra bakılabilir. Enter tuşuna her basıldığından 1 satır kaydırılırken, boşluk tuşu ile ekranın tamamı kaydırılacak şekilde içerik görüntülenir.

![](/files/2SLlS254HJRxutGD5rYE)![](/files/1ZlaGN1tjTyWdmHKBfOy)

**head,** varsayılan olarak bir dosyanın **ilk on satırını** gösterir. Ancak satır sayısı ayarlanabilir

![](/files/LC6IHI5Q7wuu1r3Rre6e)

**tail,** varsayılan olarak en son 10 satırı gösterir. Head ‘a olduğu gibi satır sayısı ayarlanabilir. tail akan log takibinde çok kullanılır. tail -f komutu ilk çalıştırıldığında son 10 satırı göstermekle birlikte canlı olarak dosyaya yazılan verileri ekrana yazdırır

![](/files/tGWgGw4Ro2z2P5MHWQVh)

**tail -3 text.txt**  ( Son 3 satırı gösterir)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sefa-memis.gitbook.io/blog/linux.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
