UNIX/Linux Temelleri: Neden Herkes Bilmeli? Geleceğin Teknolojisine Bir Bakış
Günümüzün hızla dijitalleşen dünyasında, teknolojinin kalbinde yer alan işletim sistemleri, yazılım geliştiricilerden sistem yöneticilerine, hatta sıradan teknoloji meraklılarına kadar herkes için kritik bir öneme sahiptir. Özellikle UNIX ve Linux tabanlı sistemler, sunuculardan akıllı telefonlara, bulut altyapılarından nesnelerin interneti (IoT) cihazlarına kadar geniş bir yelpazede karşımıza çıkmaktadır. Peki, neden bu kadar yaygınlar ve bu sistemlerin temellerini öğrenmek neden herkes için bir zorunluluk haline geldi? Bu makale, sizi UNIX/Linux’un büyüleyici dünyasına davet ederek, temel kavramları, komutları ve bu bilginin kariyerinizde size nasıl bir avantaj sağlayabileceğini adım adım keşfetmenizi sağlayacaktır. Gelin, bu güçlü işletim sistemlerinin derinliklerine inelim ve dijital çağın kapılarını aralayalım.
Teknolojinin her geçen gün daha da karmaşık hale geldiği bir dönemde, temel bilgi birikimine sahip olmak, sorunları çözme ve yenilikçi çözümler üretme yeteneğimizi artırır. UNIX ve Linux, bu temel bilgi birikiminin en önemli yapı taşlarından biridir. Açık kaynak felsefesiyle geliştirilen Linux, dünya genelinde milyonlarca geliştirici ve kuruluş tarafından benimsenmiştir. Bu durum, Linux’u sadece bir işletim sistemi olmaktan çıkarıp, devasa bir ekosistem ve sürekli gelişen bir platform haline getirmiştir. İster bir yazılımcı olun, ister bir ağ uzmanı, isterse de siber güvenlik analisti; Linux bilgisi, size sadece bir araç değil, aynı zamanda bir düşünce yapısı kazandıracaktır. Komut satırının gücünü anlamak, sistemlerle daha derinlemesine etkileşim kurmanızı ve otomasyonun kapılarını aralamanızı sağlar. Bu nedenle, UNIX/Linux temellerini öğrenmek, sadece bugünün değil, geleceğin teknoloji profesyonelleri için de vazgeçilmez bir beceridir. Bu yolculukta, sizi sıkmadan, akademik bir dilden uzak durarak, pratik örneklerle bu temel bilgileri edinmeye teşvik edeceğiz. Hazırsanız, terminal ekranının siyah beyaz dünyasına adım atalım ve renkli bir geleceğin temellerini birlikte atalım.
UNIX ve Linux: Karışıklığı Giderelim ve Temel Kavramları Anlayalım
Çoğu zaman birbirinin yerine kullanılan bu iki terim, aslında farklı anlamlara gelir ve aralarındaki farkı anlamak, bu işletim sistemlerinin felsefesini kavramak için hayati öneme sahiptir. Öncelikle, UNIX bir işletim sistemi ailesi ve bir dizi standartlar bütünüdür. 1960’ların sonlarında Bell Labs’ta geliştirilen UNIX, basitliği, modüler yapısı ve taşınabilirliği ile öne çıkmıştır. Bu özellikler, onun farklı donanım platformlarında çalışabilmesini sağlamış ve zamanla Solaris, AIX, HP-UX gibi birçok ticari türevinin ortaya çıkmasına yol açmıştır. UNIX felsefesi, “her şeyi bir dosya olarak gör” ve “küçük, tek iş yapan programlar yaz ve bunları birleştir” gibi prensiplere dayanır. Bu prensipler, sistemin hem güçlü hem de esnek olmasını sağlamıştır.
Linux ise, 1991 yılında Linus Torvalds tarafından geliştirilen bir çekirdek (kernel) olarak ortaya çıkmıştır. Çekirdek, işletim sisteminin en temel parçasıdır ve donanım ile yazılım arasındaki iletişimi sağlar. Linux çekirdeği, UNIX benzeri bir yapıya sahiptir ve açık kaynak kodludur, yani herkes tarafından incelenebilir, değiştirilebilir ve dağıtılabilir. Bu açık kaynak yapısı, Linux’un hızla büyümesini ve dünya çapında bir geliştirici topluluğu tarafından desteklenmesini sağlamıştır. Bir Linux işletim sistemi, sadece çekirdekten ibaret değildir; aynı zamanda GNU projesi tarafından geliştirilen temel yardımcı programları (shell, dosya yöneticileri, metin düzenleyiciler vb.) ve diğer açık kaynak yazılımları da içerir. İşte bu bütünleşik yapıya genellikle “Linux dağıtımı” denir. Ubuntu, Debian, CentOS, Fedora, openSUSE gibi popüler dağıtımlar, Linux çekirdeğini farklı kullanıcı arayüzleri, yazılım paketleri ve yönetim araçlarıyla birleştirerek farklı kullanım senaryolarına hitap ederler. Örneğin, Ubuntu genellikle masaüstü kullanıcıları ve geliştiriciler arasında popülerken, CentOS ve Debian sunucu ortamlarında yaygın olarak tercih edilir. Bu dağıtımlar arasındaki seçim, genellikle projenin gereksinimlerine, kişisel tercihlere ve topluluk desteğine bağlıdır.
UNIX ve Linux sistemlerinin temel bileşenleri, genellikle şunları içerir:
- Çekirdek (Kernel): Donanım kaynaklarını yöneten, süreçleri planlayan ve sistem çağrılarını işleyen işletim sisteminin kalbidir. Linux’ta bu, Linux çekirdeğidir.
- Kabuk (Shell): Kullanıcının komutları girdiği ve işletim sistemiyle etkileşim kurduğu bir komut satırı yorumlayıcısıdır. Bash (Bourne Again SHell) en yaygın kabuktur, ancak Zsh, csh gibi başka seçenekler de mevcuttur. Kabuk, kullanıcıdan aldığı komutları çekirdeğin anlayabileceği bir dile çevirir.
- Dosya Sistemi (File System): Dosyaların ve dizinlerin (klasörlerin) düzenlendiği hiyerarşik yapıdır. Linux’ta her şey bir dosya olarak kabul edilir ve bu, sistemin tutarlılığını ve esnekliğini artırır.
- Yardımcı Programlar (Utilities): Dosya yönetimi, metin işleme, ağ yapılandırması gibi çeşitli görevleri yerine getiren küçük, özel amaçlı programlardır.
ls,
cp,
grepgibi komutlar bu kategoriye girer.
Bu bileşenlerin uyumlu bir şekilde çalışması, UNIX ve Linux’u güçlü, güvenilir ve esnek işletim sistemleri haline getirir. Bu temelleri anlamak, komut satırında daha yetkin olmanızı ve sistemlerle daha derinlemesine etkileşim kurmanızı sağlayacaktır. Ayrıca, bu sistemlerin açık kaynak doğası, sürekli öğrenme ve geliştirme için sonsuz fırsatlar sunar.
Komut Satırı Dünyasına Giriş: Terminal, Kabuk ve Temel Gezinme Komutları
UNIX/Linux dünyasına adım atmanın ilk ve en önemli adımı, komut satırı arayüzü (CLI) ile tanışmaktır. Grafiksel kullanıcı arayüzlerinin (GUI) aksine, CLI size sistem üzerinde çok daha fazla kontrol ve otomasyon yeteneği sunar. Bu bölümde, terminalin ne olduğunu, kabuğun nasıl çalıştığını ve dosya sistemi üzerinde gezinmek için kullanacağınız temel komutları öğreneceksiniz. Bu bilgiler, sadece bir başlangıç değil, aynı zamanda sistem yönetiminden yazılım geliştirmeye kadar birçok alanda size güç katacak temel becerilerdir.
Terminal Nedir ve Nasıl Açılır?
Terminal, aslında bir programdır ve klavyenizden girilen komutları kabuğa ileten ve kabuktan gelen çıktıları ekranda gösteren bir arayüzdür. Çoğu Linux dağıtımında “Terminal”, “Konsole”, “xterm” veya benzeri isimlerle bir uygulama menüsünde bulunur. Genellikle
Ctrl+Alt+T
kısayolu ile hızlıca açılabilir. Terminali açtığınızda, karşınıza genellikle siyah veya koyu renkli bir ekran ve bir komut istemi (prompt) gelir. Bu istem, genellikle kullanıcının adını, makine adını ve mevcut dizini gösterir ve
$
veya
#
(root kullanıcısı için) ile biter. Örneğin:
kullaniciadi@makineadi:~/belgeler$
Komut Yapısı: Komut, Seçenekler ve Argümanlar
UNIX/Linux komutları genellikle basit bir yapıya sahiptir:
komut [seçenekler] [argümanlar]
.
- Komut: Yapılacak işi belirten ana kelimedir (örneğin,
lslistelemek için,
cpkopyalamak için).
- Seçenekler (Options/Flags): Komutun davranışını değiştiren veya özelleştiren tek harfli (genellikle tek tire ile:
-a) veya kelime tabanlı (genellikle çift tire ile:
--all) parametrelerdir.
- Argümanlar (Arguments): Komutun üzerinde işlem yapacağı nesnelerdir, genellikle dosya veya dizin adlarıdır.
Örneğin,
ls -l /home/kullaniciadi
komutunda:
-
ls: Komuttur (listele).
-
-l: Seçenektir (uzun formatta listele).
-
/home/kullaniciadi: Argümandır (listelenecek dizin).
Dosya Sistemi Üzerinde Gezinme: Temel Komutlar
UNIX/Linux dosya sistemi hiyerarşik bir yapıya sahiptir ve kök dizin (
/
) ile başlar. Her şey bu kök dizinin altındadır.
-
pwd(Print Working Directory):
Mevcut çalışma dizininizin (yani, şu anda nerede olduğunuzun) tam yolunu gösterir. -
ls(List):
Mevcut dizindeki dosya ve dizinleri listeler.-
ls -l: Dosya ve dizinleri uzun formatta (izinler, sahip, boyut, tarih vb. detaylarla) listeler.
-
ls -a: Gizli dosyalar da dahil olmak üzere tüm dosyaları listeler (gizli dosyalar
.ile başlar).
-
ls -lh: Uzun formatta ve insan tarafından okunabilir boyutlarla listeler (örn. KB, MB).
-
-
cd(Change Directory):
Dizinler arasında geçiş yapmanızı sağlar.-
cd Belgeler:
Belgelerdizinine geçer (göreceli yol).
-
cd /home/kullaniciadi/Projeler:
Projelerdizinine geçer (mutlak yol).
-
cd ..: Bir üst dizine geçer.
-
cd ~: Kullanıcının ana dizinine (home directory) döner.
-
cd -: Bir önceki çalıştığınız dizine geri döner.
-
pwd
/home/kullaniciadi/belgeler
ls -lh
toplam 16K
drwxr-xr-x 2 kullaniciadi kullaniciadi 4,0K May 10 10:00 Belgeler
-rw-r--r-- 1 kullaniciadi kullaniciadi 245 May 10 09:30 deneme.txt
drwxr-xr-x 3 kullaniciadi kullaniciadi 4,0K May 09 15:20 Projeler
cd Projeler
pwd
/home/kullaniciadi/Projeler
Dosya ve Dizin Oluşturma, Silme, Kopyalama ve Taşıma
Dosya sistemi üzerinde temel işlemleri gerçekleştirmek için aşağıdaki komutları kullanırız:
-
mkdir(Make Directory):
Yeni bir dizin oluşturur.mkdir yeni_proje ls Belgeler deneme.txt Projeler yeni_proje -
rmdir(Remove Directory):
Boş bir dizini siler. (Dolu dizinleri silmek içinrm -rkullanılır.)
rmdir yeni_proje ls Belgeler deneme.txt Projeler -
touch:
Yeni, boş bir dosya oluşturur veya mevcut bir dosyanın erişim/değiştirilme zamanını günceller.touch rapor.txt ls Belgeler deneme.txt Projeler rapor.txt -
cp(Copy):
Dosyaları veya dizinleri kopyalar.-
cp kaynak hedef:
kaynakdosyasını
hedefolarak kopyalar.
-
cp -r kaynak_dizin hedef_dizin: Dizinleri ve içindeki tüm içerikleri kopyalar (
-rrecursive anlamına gelir).
cp rapor.txt rapor_yedek.txt ls Belgeler deneme.txt Projeler rapor.txt rapor_yedek.txt -
-
mv(Move):
Dosyaları veya dizinleri taşır veya yeniden adlandırır.-
mv kaynak hedef:
kaynakdosyasını
hedefkonumuna taşır. Eğer
hedefbir dosya adı ise, dosya yeniden adlandırılır.
mv rapor_yedek.txt Belgeler/ ls deneme.txt Projeler rapor.txt Belgeler/ ls Belgeler/ rapor_yedek.txt -
-
rm(Remove):
Dosyaları veya dizinleri siler.-
rm dosya.txt:
dosya.txtdosyasını siler.
-
rm -r dizin: Dizinleri ve içindeki tüm içerikleri siler (dikkatli kullanılmalıdır!).
-
rm -rf dizin: Dizinleri ve içindeki tüm içerikleri zorla ve onay almadan siler (çok tehlikeli bir komuttur, dikkatli kullanılmalıdır!).
rm deneme.txt ls Belgeler Projeler rapor.txt -
Vaka Analizi: Bir Web Projesi İçin Klasör Yapısı Oluşturma ve Dosyaları Düzenleme
Bir web geliştiricisi olduğunuzu ve yeni bir proje üzerinde çalıştığınızı varsayalım. Projenizin adı
my_website
ve içinde
html
,
css
,
js
,
img
klasörleri ile bir
index.html
dosyası oluşturmanız gerekiyor. Ayrıca, bir
README.md
dosyası ve
style.css
dosyasını da oluşturup, ardından
index.html
dosyasını
html
klasörüne taşıyacaksınız.
# Ana dizinimize gidelim
cd ~
# Yeni proje dizinini oluşturalım
mkdir my_website
# Proje dizinine girelim
cd my_website
# Alt dizinleri oluşturalım
mkdir html css js img
# Ana dosyaları oluşturalım
touch index.html README.md
# CSS dosyasını oluşturalım ve css dizinine taşıyalım
touch style.css
mv style.css css/
# index.html dosyasını html dizinine taşıyalım
mv index.html html/
# Son durumu kontrol edelim
ls -R
.:
README.md css html img js
./css:
style.css
./html:
index.html
./img:
./js:
Bu basit örnek, komut satırının dosya yönetimi görevlerinde ne kadar verimli ve güçlü olabileceğini göstermektedir. Birkaç komutla karmaşık bir dizin yapısı oluşturabilir ve dosyaları hızlıca düzenleyebilirsiniz. Bu temel komutlara hakim olmak, UNIX/Linux ortamında daha üretken olmanızın anahtarıdır.
Dosya İçeriklerini Görüntüleme ve Arama: Bilgiye Hızlı Erişim
Komut satırında çalışırken, dosyaların içeriğini hızlıca görüntülemek veya belirli metinleri aramak sıkça karşılaşılan ihtiyaçlardır. UNIX/Linux, bu görevler için oldukça güçlü ve esnek araçlar sunar. Bu araçlar sayesinde, büyük log dosyalarını inceleyebilir, yapılandırma dosyalarında değişiklik yapabilir veya belirli bir metin parçasını saniyeler içinde bulabilirsiniz. Bu bölümde, bu temel ancak güçlü komutları ve pratik kullanımlarını inceleyeceğiz.
Dosya İçeriklerini Görüntüleme Komutları
Dosyaların içeriğini görüntülemek için farklı ihtiyaçlara yönelik çeşitli komutlar bulunmaktadır:
-
cat(Concatenate):
Bir veya birden fazla dosyanın içeriğini standart çıktıya (genellikle terminal ekranına) basar. Küçük dosyaları hızlıca okumak için idealdir.cat /etc/os-release NAME="Ubuntu" VERSION="22.04.4 LTS (Jammy Jellyfish)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 22.04.4 LTS" VERSION_ID="22.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/privacy-policy" VERSION_CODENAME=jammy UBUNTU_CODENAME=jammyEğer dosya çok büyükse,
catkomutu tüm içeriği ekrana bir anda basacağı için okuması zor olabilir. Bu durumda
lessveya
moregibi komutlar daha kullanışlıdır.
-
less:
Dosya içeriğini sayfa sayfa görüntülemenizi sağlar. İleri ve geri gidebilir, arama yapabilir ve dosyayı kapatmak içinqtuşuna basabilirsiniz. Büyük dosyalar için tercih edilen yöntemdir.
less /var/log/syslogBu komutla log dosyasını açtığınızda,
Page Up/
Page Downtuşları ile gezinebilir,
/tuşuna basıp bir kelime yazarak arama yapabilirsiniz.
-
more:
lesskomutuna benzer şekilde sayfa sayfa görüntüleme yapar, ancak
lesskadar gelişmiş değildir (örneğin, genellikle geriye gidemezsiniz).
more /etc/passwd -
head:
Bir dosyanın ilk birkaç satırını (varsayılan olarak ilk 10 satır) görüntüler.head -n 5 /etc/passwd root:x:0:0:root:/root:/bin/bash 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-nseçeneği ile istediğiniz satır sayısını belirtebilirsiniz.
-
tail:
Bir dosyanın son birkaç satırını (varsayılan olarak son 10 satır) görüntüler. Özellikle sürekli güncellenen log dosyalarını izlemek için çok kullanışlıdır.tail -n 3 /var/log/auth.log May 10 10:30:01 makineadi sshd[1234]: Accepted password for user from 192.168.1.10 port 54321 ssh2 May 10 10:30:05 makineadi sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/apt update May 10 10:30:05 makineadi sudo: pam_unix(sudo:session): session opened for user root(uid=0) by user(uid=1000)tail -f /var/log/syslogkomutu, dosyanın sonuna eklenen yeni satırları gerçek zamanlı olarak ekranda gösterir (
-ffollow anlamına gelir). Bu, bir servisin veya uygulamanın loglarını izlemek için vazgeçilmez bir araçtır.
Dosya İçeriklerinde Arama Komutları
Belirli bir metin parçasını veya deseni (pattern) aramak için
grep
ve
find
komutları kullanılır.
-
grep(Global Regular Expression Print):
Bir dosya veya birden fazla dosya içinde belirli bir metin deseni arar ve eşleşen satırları görüntüler. Düzenli ifadeler (regular expressions) kullanarak karmaşık aramalar yapabilir.grep "error" /var/log/syslog # syslog dosyasında "error" kelimesini içeren satırları bulur. grep -i "warning" /var/log/syslog # "-i" seçeneği ile büyük/küçük harf duyarsız arama yapar. grep -v "info" /var/log/syslog # "-v" seçeneği ile "info" kelimesini içermeyen satırları görüntüler. grep -r "config" /etc/ # "-r" (recursive) seçeneği ile /etc dizini altındaki tüm dosyalarda "config" kelimesini arar.grep, borulama (
|) operatörü ile diğer komutların çıktısını filtrelemek için de sıkça kullanılır. Örneğin,
ps aux | grep firefoxkomutu, çalışan tüm süreçler arasında “firefox” kelimesini içerenleri bulur.
-
find:
Belirli bir dizin hiyerarşisi içinde dosya ve dizinleri belirli kriterlere göre arar. Kriterler dosya adı, boyutu, türü, değiştirilme tarihi, izinler vb. olabilir.find . -name "*.txt" # Mevcut dizin ve alt dizinlerde .txt uzantılı tüm dosyaları bulur. find /home/kullaniciadi -type d -name "proje*" # /home/kullaniciadi dizininde "proje" ile başlayan tüm dizinleri bulur. find /var/log -size +10M # /var/log dizininde boyutu 10MB'tan büyük olan dosyaları bulur. find /tmp -mtime +7 -delete # /tmp dizininde 7 günden daha eski olan dosyaları bulur ve siler (dikkatli kullanılmalıdır!).findkomutu, arama sonuçları üzerinde
-execseçeneği ile başka komutlar çalıştırma yeteneği sayesinde inanılmaz derecede güçlüdür. Örneğin, belirli bir türdeki tüm dosyaların izinlerini değiştirebilirsiniz.
Bu komutlar, UNIX/Linux sistemlerinde bilgiye erişim ve dosya yönetimi süreçlerini büyük ölçüde hızlandırır. Bu araçlara hakim olmak, hem günlük görevlerinizde hem de daha karmaşık sistem yönetimi senaryolarında size büyük avantaj sağlayacaktır. Unutmayın, pratik yapmak bu komutları öğrenmenin en iyi yoludur.
Kullanıcılar, İzinler ve Süreçler: Sistem Yönetiminin Temel Taşları
UNIX/Linux işletim sistemlerinin güvenli ve düzenli çalışmasının temelinde, kullanıcıların ve grupların yönetimi, dosya ve dizin izinlerinin doğru yapılandırılması ve sistemde çalışan süreçlerin etkin bir şekilde izlenip kontrol edilmesi yatar. Bu kavramlar, çok kullanıcılı ortamlarda sistemin kararlılığını, veri güvenliğini ve kaynak kullanımını optimize etmek için vazgeçilmezdir. Bu bölümde, bu temel sistem yönetimi prensiplerini ve bunlarla etkileşim kurmanızı sağlayacak komutları detaylı bir şekilde inceleyeceğiz.
Kullanıcılar ve Gruplar: Kim Kimdir ve Neye Sahiptir?
UNIX/Linux sistemleri, birden fazla kullanıcının aynı anda çalışmasına olanak tanıyan çok kullanıcılı sistemlerdir. Her kullanıcının kendine ait bir kimliği (UID – User ID) ve birincil bir grubu (GID – Group ID) vardır. Ayrıca, kullanıcılar birden fazla gruba üye olabilirler. Gruplar, dosya ve dizin erişimini daha kolay yönetmek için kullanılır; örneğin, bir projedeki tüm geliştiricileri aynı gruba ekleyerek, o projenin dosyalarına toplu erişim yetkisi verebilirsiniz.
-
whoami:
Mevcut kullanıcının adını gösterir.whoami kullaniciadi -
id:
Mevcut kullanıcının UID’sini, birincil grubunu ve üye olduğu tüm grupları gösterir.id uid=1000(kullaniciadi) gid=1000(kullaniciadi) groups=1000(kullaniciadi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),126(sambashare) -
groups:
Mevcut kullanıcının üye olduğu grupları listeler.groups kullaniciadi adm cdrom sudo dip plugdev lpadmin sambashare
Dosya İzinleri: Erişim Kontrolünün Anahtarı
UNIX/Linux’ta her dosya ve dizinin belirli izinleri vardır. Bu izinler, kimin dosyayı okuyabileceğini, yazabileceğini veya çalıştırabileceğini belirler.
ls -l
komutunun çıktısındaki ilk karakter dizisi bu izinleri gösterir. Örneğin:
-rwxr-xr--
Bu izin dizisi üç ana bölüme ayrılır:
- İlk Karakter: Dosya türünü belirtir (
-normal dosya,
ddizin,
lsembolik bağlantı vb.).
- Sonraki Üç Karakter (
rwx):
Dosyanın sahibinin (owner) izinleri. - Sonraki Üç Karakter (
r-x):
Dosyanın grubunun (group) izinleri. - Sonraki Üç Karakter (
r--):
Diğer kullanıcıların (others) izinleri.
Her bir karakterin anlamı:
-
r: Okuma (Read) izni (4)
-
w: Yazma (Write) izni (2)
-
x: Çalıştırma (Execute) izni (1)
-
-: İzin yok (0)
Bu izinler sayısal (oktal) değerlerle de ifade edilebilir. Örneğin,
rwx
= 4+2+1 = 7;
r-x
= 4+0+1 = 5;
r--
= 4+0+0 = 4. Yani
-rwxr-xr--
izinleri
754
olarak ifade edilebilir.
chmod
chmod(Change Mode): Dosya İzinlerini Değiştirme
chmod
komutu, dosya ve dizin izinlerini değiştirmek için kullanılır. Hem sayısal (oktal) hem de sembolik modda kullanılabilir.
- Sayısal Mod:
chmod 755 dosya.sh # dosya.sh için sahibine okuma, yazma, çalıştırma (7); gruba ve diğerlerine okuma, çalıştırma (5) izni verir. chmod 644 belge.txt # belge.txt için sahibine okuma, yazma (6); gruba ve diğerlerine sadece okuma (4) izni verir. - Sembolik Mod:
chmod u+x script.sh # script.sh için sahibine (u) çalıştırma (x) izni ekler. chmod g-w belge.txt # belge.txt için gruptan (g) yazma (w) iznini kaldırır. chmod o=r index.html # index.html için diğerlerine (o) sadece okuma (r) izni verir (diğer tüm izinleri siler). chmod a+rwx dizin/ # dizin için tüm kullanıcılara (a - all) okuma, yazma, çalıştırma izni verir (dizinler için çalıştırma izni, içine girme anlamına gelir).
chown
chown(Change Owner) ve
chgrp
(Change Group): Sahip ve Grup Değiştirme
Bu komutlar, bir dosya veya dizinin sahibini veya grubunu değiştirmek için kullanılır. Genellikle
sudo
ile birlikte root yetkisi gerektirirler.
-
chown yeni_sahip dosya.txt:
dosya.txtdosyasının sahibini
yeni_sahipolarak değiştirir.
-
chown yeni_sahip:yeni_grup dosya.txt: Dosyanın hem sahibini hem de grubunu değiştirir.
-
chgrp yeni_grup dosya.txt: Dosyanın grubunu değiştirir.
-
chown -R yeni_sahip:yeni_grup dizin/:
-R(recursive) seçeneği ile dizinin ve altındaki tüm dosyaların/dizinlerin sahibini ve grubunu değiştirir.
sudo
sudoKomutu: Yetkilendirme ve Güvenlik
sudo
(superuser do) komutu, normal kullanıcıların belirli komutları root (süper kullanıcı) yetkileriyle çalıştırmasına olanak tanır. Bu, sistemi sürekli root olarak kullanmaktan çok daha güvenlidir, çünkü sadece ihtiyaç duyulduğunda yüksek yetkiler kullanılır ve her komut için parola doğrulaması istenebilir.
sudo apt update
# Sistemdeki paket listesini günceller (root yetkisi gerektirir).
sudo systemctl restart apache2
# Apache web sunucusunu yeniden başlatır.
sudo
kullanıcısının yetkileri
/etc/sudoers
dosyasında tanımlanır. Bu dosya sadece
visudo
komutu ile düzenlenmelidir, çünkü hatalı bir yapılandırma sistemi kullanılamaz hale getirebilir.
Süreç Yönetimi: Ne Çalışıyor, Nasıl Durdurulur?
Süreçler (processes), çalışan programların örnekleridir. Bir sistemin sağlıklı çalışması için süreçleri izlemek ve gerektiğinde yönetmek kritik öneme sahiptir.
-
ps(Process Status):
Mevcut süreçleri listeler.-
ps aux: Tüm kullanıcıların tüm süreçlerini detaylı bir şekilde listeler.
-
ps -ef: Tüm süreçleri hiyerarşik bir şekilde listeler.
ps aux | grep firefox kullaniciadi 1234 5.0 2.5 1234567 234567 ? Sl May10 0:30 /usr/lib/firefox/firefoxÇıktıda PID (Process ID), CPU ve bellek kullanımı gibi bilgiler bulunur.
-
-
top:
Sistem kaynaklarını ve çalışan süreçleri gerçek zamanlı olarak izler. CPU, bellek kullanımı ve en çok kaynak tüketen süreçleri dinamik olarak gösterir.toptopekranında
ktuşuna basarak bir süreci PID’si ile sonlandırabilirsiniz.
-
htop:
topkomutunun daha kullanıcı dostu ve renkli bir alternatifidir. Genellikle ayrı olarak kurulması gerekir (
sudo apt install htop).
htop -
killve
killall: Süreçleri Sonlandırma
-
kill PID: Belirli bir PID’ye sahip süreci sonlandırmak için kullanılır. Varsayılan olarak TERM (15) sinyalini gönderir.
-
kill -9 PID: Süreci zorla sonlandırmak için KILL (9) sinyalini gönderir. Bu, süreç yanıt vermediğinde kullanılır, ancak verilerin kaybolmasına neden olabilir.
-
killall program_adi: Belirli bir program adına sahip tüm süreçleri sonlandırır.
kill 1234 # PID'si 1234 olan süreci sonlandırır. killall firefox # Tüm firefox süreçlerini sonlandırır. -
-
&(Arka Planda Çalıştırma):
Bir komutu veya programı terminali meşgul etmeden arka planda çalıştırmak için komutun sonuna&eklenir.
firefox & # Firefox'u arka planda başlatır ve terminali kullanmaya devam edebilirsiniz.
Vaka Analizi: Paylaşımlı Bir Sunucuda Dosya Erişimi ve Hatalı Çalışan Bir Servisi Durdurma
Bir web sunucusunda çalıştığınızı ve bir projenin dosyalarının yanlış izinlere sahip olduğunu varsayalım. Proje dosyaları
/var/www/html/proje_adi
dizininde bulunuyor ve web sunucusu (Apache veya Nginx) bu dosyalara erişemediği için 403 Forbidden hatası veriyor. Ayrıca, bir uygulama sunucusu (örneğin, Node.js uygulaması) yüksek CPU tüketimi nedeniyle sistemi yavaşlatıyor ve yeniden başlatılması gerekiyor.
Adım 1: Dosya İzinlerini Düzeltme
Öncelikle, proje dizinindeki dosya ve dizinlerin sahibini ve izinlerini kontrol edelim. Web sunucusu genellikle
www-data
kullanıcısı ve grubunda çalışır.
# Proje dizinine gidelim
cd /var/www/html/proje_adi
# Mevcut izinleri kontrol edelim
ls -l
# Dosyaların sahibini ve grubunu www-data olarak değiştirelim (root yetkisi ile)
sudo chown -R www-data:www-data .
# Dizinler için çalıştırma ve okuma izni (755), dosyalar için okuma ve yazma izni (644) verelim
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
# İzinleri tekrar kontrol edelim
ls -l
Bu adımlarla, web sunucusunun proje dosyalarına doğru şekilde erişebilmesi sağlanır.
Adım 2: Hatalı Çalışan Uygulama Sunucusunu Durdurma
Yüksek CPU tüketen Node.js uygulamasını bulup sonlandırmak için
top
veya
htop
kullanabiliriz.
# top komutunu çalıştırın
top
# Çıktıda CPU kullanımı yüksek olan Node.js sürecinin PID'sini bulun (örneğin, 5678)
# Süreci sonlandırın
sudo kill 5678
# Eğer süreç yanıt vermezse, zorla sonlandırın
sudo kill -9 5678
# Sürecin gerçekten sonlanıp sonlanmadığını kontrol edin
ps aux | grep node
Bu vaka analizi, kullanıcı, izin ve süreç yönetiminin gerçek dünya senaryolarında ne kadar kritik olduğunu göstermektedir. Bu temel komutlara hakim olmak, sistem sorunlarını teşhis etme ve çözme yeteneğinizi büyük ölçüde artıracaktır.
Sonuç: UNIX/Linux Yolculuğunuz Başlıyor!
Bu makale boyunca, UNIX/Linux dünyasının temellerini keşfettik. Neden bu işletim sistemlerinin modern teknoloji dünyasında bu kadar kritik bir rol oynadığını, UNIX ve Linux arasındaki farkları, komut satırının gücünü ve dosya sistemi üzerinde gezinme, dosya yönetimi, kullanıcı/izin yönetimi ve süreç kontrolü gibi temel becerileri öğrendik. Gördüğünüz gibi, komut satırı sadece siyah bir ekran ve metinlerden ibaret değil; doğru kullanıldığında inanılmaz derecede güçlü, verimli ve esnek bir araçtır. Bu temel bilgiler, size sadece bir başlangıç noktası sunmakla kalmayacak, aynı zamanda yazılım geliştirme, sistem yönetimi, DevOps, siber güvenlik ve bulut bilişim gibi birçok alanda kariyer kapılarını aralayacaktır. Unutmayın, UNIX/Linux öğrenmek bir yolculuktur ve bu yolculukta sürekli pratik yapmak, yeni komutlar keşfetmek ve sorunlarla yüzleşmek, bilginizi pekiştirmenin en iyi yoludur. Terminali açmaktan çekinmeyin, komutları deneyin ve sistemin nasıl çalıştığını anlamaya çalışın. Bu merak ve pratik, sizi gerçek bir UNIX/Linux ustası yapacaktır. Geleceğin teknolojisini şekillendiren bu güçlü platformun temellerine artık hakimsiniz. Şimdi, bu bilgiyi kullanarak neler başarabileceğinizi görme zamanı!
Sıkça Sorulan Sorular (SSS)
1. Linux öğrenmek ne kadar sürer?
Linux öğrenmek, kişisel hedeflerinize ve ne kadar zaman ayırdığınıza bağlı olarak değişir. Temel komutları ve dosya sistemi mantığını kavramak birkaç hafta sürebilirken, ileri düzey sistem yönetimi, ağ yapılandırması veya kabuk betikleme gibi konular yıllarca pratik gerektirebilir. Önemli olan, sürekli öğrenmeye ve pratik yapmaya devam etmektir. Günlük olarak terminalde zaman geçirmek, bu süreci hızlandıracaktır.
2. Hangi Linux dağıtımını seçmeliyim?
Başlangıç için Ubuntu veya Linux Mint gibi kullanıcı dostu dağıtımlar önerilir. Bu dağıtımlar geniş bir topluluk desteğine, zengin dokümantasyona ve kolay kuruluma sahiptir. Daha sonra ihtiyaçlarınıza göre Debian, Fedora, CentOS gibi farklı dağıtımları deneyebilirsiniz. Sunucu ortamları için genellikle Debian veya CentOS tercih edilirken, geliştiriciler arasında Ubuntu ve Fedora popülerdir.
3. UNIX/Linux bilgisi hangi kariyerlerde avantaj sağlar?
UNIX/Linux bilgisi, yazılım geliştiriciler (özellikle backend, web ve mobil), sistem yöneticileri, DevOps mühendisleri, bulut mühendisleri, siber güvenlik analistleri, veri bilimcileri ve ağ yöneticileri gibi birçok teknoloji kariyerinde büyük bir avantaj sağlar. Sunucuların, bulut altyapılarının ve gömülü sistemlerin çoğu Linux tabanlı olduğu için bu bilgi, sektördeki talebi yüksek olan bir beceridir.
4. Terminalde hata yaptığımda ne yapmalıyım?
Hata yapmak öğrenme sürecinin doğal bir parçasıdır. Yanlış bir komut girdiğinizde veya bir hata mesajı aldığınızda:
- Hata mesajını dikkatlice okuyun. Genellikle sorun hakkında ipuçları içerir.
- Komutun manuel sayfasını okuyun:
man [komut_adı]komutu size komutun tüm seçeneklerini ve kullanımını gösterir.
- İnternette arama yapın: Hata mesajını veya komutu arama motorlarında arayarak benzer sorunları yaşamış diğer kullanıcıların çözümlerini bulabilirsiniz. Stack Overflow veya Linux forumları gibi kaynaklar çok faydalıdır.
- Panik yapmayın ve denemekten çekinmeyin (ancak
sudo rm -rf /gibi yıkıcı komutlardan uzak durun!).
#UNIX #Linux #TemelKomutlar #KomutSatırı #SistemYönetimi #AçıkKaynak #Teknoloji #ITKariyer #DevOps #SiberGüvenlik
