3. Donanımlara erişim/yapılandırma ve disk yapılandırması
Labaratuar içersinde bilgisayar donanımlarına erişim, durumları ile ilgili bilgi almak, bölümleme, dosya sistemleri, kurulum sırasında dosya sistemlerinin tanımları.
Linux101 - Ana Sayfa
Bölüm içersinde aşağıdaki konular işlenecektir:
Kullanım İpuçları:
Eğitim içersinde, komut satırı bilgileri aşağıdaki üç farklı şekilde belirtilmiştir.
-
şunun
gibi görünen komut betimleri şeklinde gösterilmler daha çok örnekler ve yazılması gereken komutları tanımlamak için kullanılır. - Aşağıdaki gibi kutu içersinde gördüğünüz kodlar üzerine tıkladığınızda, kopyala yapıştır yapmanıza gerek kalmadan terminal içersinde çalıştırılacaktır:
uname -a
- Aşağıda gördüğünüz gibi bir pencere içersinde yazılmış olan kod betimleri sizin klavyeden yazmanız gereken kod betimleridir.
Genellikle benzersiz bir ID veya başka bir değişken girmeniz gerekiyordur. Buradaki benzersiz veri eğitim sırasında kullandığınız ortam içersinden bulunabilir.
<> içersinde bulunan maddeler sizin değiştirmeniz gereken verinin yerini göstermektedir.
hostnamectl set <sunucu adı>
6. Library (Kütüphaneler) ve paket yönetimindeki önemi
Çoğu Linux yazılımı, büyük ölçüde paylaşılan kitaplıklara dayanır. Linux 101 eğitimimize başladığımızda Richar Stallman ve Öneminden bahsetmiştim, Linux işletim sistemi üzerindeki her yazılım halen kütüphaneler üzerinden compile edilmekteler. Paylaşılan kitaplık paketlerinin yönetilmesinde bazen ortaya bazı sorunlar çıkmaktadır.
Örneğin, bir kitaplık kurulmamışsa veya yanlış sürümse, bir paketi kurarken yüksek ihtimalle sorun yaşarsınız. Kütüphane yönetimi, yalnızca onları yapılandırmanın ötesine geçer. Bunu anlamak için önce birkaç kütüphane ilkesini anlamalısınız.
Daha sonra kitaplık yolunu belirlemeye ve kitaplıkları yöneten komutları kullanmaya devam edebilirsiniz. Kütüphane İlkeleri bir kütüphanenin arkasındaki fikir, yaygın olarak kullanılanlar sağlayarak programcıların hayatlarını basitleştirmektir.
En önemli kitaplıklardan biri, işletim sistemindeki üst düzey özelliklerin çoğunu sağlayan C kitaplığıdır (libc). Diğer bir yaygın kitaplık türü, Grafik Arabirim GUI’lerle ilişkilidir. Bu kitaplıklara, programlar tarafından kullanılan ekran widget’larını (düğmeler, kaydırma çubukları, menü çubukları vb.) Sağladıkları için genellikle pencere öğesi kümeleri adı verilir.
Kütüphane yolunun ayarları
Kitaplık yolunu ayarlamanın ilk yolu /etc/ld.so.conf dosyasını düzenlemektir. Bu dosya, her biri paylaşılan kitaplık dosyalarının bulunabileceği bir dizini listeleyen bir dizi satırdan oluşur. Bu dosya yarım düzine ile birkaç düzine dizini listelemektedir. Bazı dağıtımların bu dosyada ek bir tür satırı bulunur.
Kütüphanelerin kullanımı ile ilgili sorun yaşıyorsanız,
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Dinamik olarak bağlanabilen kitaplıkların aranacağı ek dizinlerin bir listesini sağlamak için yürütme sırasında $LD_LIBRARY_PATH bakılır.
Linux’ta Paylaşılan Kitaplıkları Bulma
Paylaşılan kitaplıklar ld.so (veya ld.so.x) ve ld-linux.so (veya ld-linux.so.x) programları tarafından yüklenir. burada x ile belirtilen kısım sürüm anlamında kullanılır. Linux’ta /lib/ld-linux.so.x, bir program tarafından kullanılan tüm paylaşılan kitaplıkları arar ve yükler. Bu isim ve lokasyon, daha çok tarihi bir lokasyondur.
Bir program, kitaplık adını veya dosya adını kullanarak bir kitaplığı çağırabilir ve bir kitaplık yolu, kitaplıkların dosya sisteminde bulunabileceği dizinleri saklar. Varsayılan olarak, kitaplıklar /usr/local/lib, /usr/local/lib64, /usr/lib ve /usr/lib64 dizinlerinde bulunur.
sistem başlatma kitaplıkları /lib ve /lib64 içindedir. Bununla birlikte, programcılar kitaplıkları özel konumlara kurabilir.
Kütüphane yolu, /etc/ld.so.conf içersinde tanımlanmaktadır.
/etc/ld.so.conf içeriğini görüntüleme
less /etc/ld.so.conf
Bu dosyadaki satırlar, çekirdeğe /etc/ld.so.conf.d yoluna dosya yüklemesini söyler. Bu şekilde, paket bakıcıları veya programcılar kendi özel kitaplık dizinlerini arama listesine ekleyebilir.
/etc/ld.so.conf.d dizinine bakarsanız, bazı yaygın paketler için .conf dosyalarını görürsünüz.
ldd Linux’ta Paylaşılan Kitaplıkları Yönetme
Şimdi paylaşılan kütüphanelerle nasıl başa çıkılacağına bakalım. Bir ikili dosya için tüm paylaşılan kitaplık bağımlılıklarının bir listesini almak için, ldd
yardımcı programını kullanabilirsiniz. ldd’nin çıktısı aşağıdaki gibidir.
ldd /usr/bin/ls
veya
ldd /bin/ls
bize bağlı olan tüm paylaşımlı kütüphanelerin listesini verir.
ldconfig , ld configurasyonu ve linklerin düzenlenmesi
Varsayılan olarak, ldconfig /etc/ld.so.conf içeriğini okur, dinamik bağlantı dizinlerinde uygun sembolik bağlar oluşturur ve ardından /etc/ld.so.cache’ye bir önbellek yazar. Diğer programlar buradaki yolları ve sembolik linkleri böylece kullanabilirler.
Bu, özellikle yeni paylaşılan kitaplıklar kurduğunuzda veya kendi kitaplığınızı oluşturduğunuzda veya yeni kitaplık dizinleri oluşturduğunuzda çok önemlidir. Değişiklikleri etkilemek için ldconfig komutunu çalıştırmanız gerekir.
Sunucunuza Oracle veya SAP yazılımı kurduysanız, buradaki linkleme işleminin nasıl gerçekleştiğini ve yoğun bir şekilde kütüphanelerin tekrar linklenerek kurulum yapıldığına şahit olursunuz. Özellikle yazılımların uyumlu bir şekilde çalışabilmesi ve sorun çıkartmamaları için kütüphane konfigürasyonlarını olabildiğince varsayılan ayarlarda kullanmanızı tavsiye ederim. Sunucularınızı single-purpose kurduğunuz sürece yani Oracle Veri Tabanı sunucunuza postgres kurmaya çalışmazssanız(conflict library) problem yaşamazssınız.
7. işlemlerin yönetimi (process management)
Linux’ta init, Başlatma için kullanılan bir kısaltmadır. Başlatma, bilgisayar başlar başlamaz başlayan ve kapanana kadar çalışmaya devam eden bir daemon işlemidir.
Aslında init, bir bilgisayar önyüklendiğinde başlayan ve onu doğrudan veya dolaylı olarak çalışan diğer tüm işlemlerin üst öğesi yapan ilk süreçtir ve bu nedenle tipik olarak “pid=1” olarak atanır. Yani ilk process init’tir ve sonraki process’ler bu process tarafından yaratılmıştır.
init process artık yoktır, init process yerine linux üzerinde paralel bir şekilde başka processleri de çalıştırmaya yarayan systemd ile değiştirilmiştir.
Systemd nedir?
systemd, arka plan programının sonuna “d” ekleyerek oluşturulmuş, UNIX kuralı ile adlandırılan bir Sistem Yönetimi Arka Plan Programıdır. Böylece tüm arkaplan programları kolayca tanınabilirler. Başlangıçta GNU açık kaynak lisansı altında yayınlandı, ancak şimdi sürümler GNU Kısıtlı Genel Kamu Lisansı altında yapılıyor. İnit‘e benzer şekilde systemd, doğrudan veya dolaylı olarak diğer tüm işlemlerin ebeveynidir ve önyüklemede başlayan ilk süreçtir, dolayısıyla tipik olarak bir “pid=1” atanır.
Bir systemd, arka plan programı çevresindeki tüm paketlere, yardımcı programlara ve kitaplıklara başvurabilir. Init’in eksikliklerinin üstesinden gelmek için tasarlanmıştır. Süreçleri paralel olarak başlatmak için tasarlanmıştır, böylece önyükleme süresini ve hesaplama yükünü azaltan bir arka plan işlemidir. İnit ile karşılaştırıldığında birçok avantajlı özelliğe sahiptir.
Neden init’i değiştirmeye ihtiyaç vardı? init başlatma işlemi seri olarak başlardı, yani bir görev yalnızca son görev başlangıcı başarılı olduktan ve belleğe yüklendikten sonra başlayabilirdi. Bu genellikle gecikmeli ve uzun önyükleme süresine neden oluyordu. Bununla birlikte, systemd hız için değil, işlerin düzgün bir şekilde yapılması için tasarlanmıştır.
Process Management Commands - işlem yönetim komutları
pgrep, ps, watch, kill, top
pgrep process grep - işlem filtrele
pgrep o anda çalışan işlemlere bakar ve standart çıktı ile seçim kriterine göre arama yapar. Verilen tüm kriterler eşleşmelidir.
kullanım şekli:
pgrep [options] pattern
Örneğin,
pgrep -u root ssh
sadece sshd olarak adlandırılan ve köke ait olan süreçleri listeleyecektir.
Diğer yandan,
pgrep -u root,daemon
root yada daemon (arka plan) programının sahip olduğu işlemleri listeler.
pkill, standart çıktıda listelemek yerine belirtilen sinyali (varsayılan olarak SIGTERM) her işleme gönderir.
Sözdizimi
pgrep [seçenekler] kalıbı
pkill [seçenekler] kalıbı
ps process snapshot - şuan varolan işlemlerin listesi
ps
komutu, çalışan işlemleri listeler. Herhangi bir seçenek olmadan ps’yi kullanmak, mevcut kabukta çalışan işlemleri listelemesine neden olur.
ps
Belirli bir kullanıcıyla ilgili tüm işlemleri görmek için -u
(kullanıcı) seçeneğini kullanın. Bu büyük bir olasılıkla uzun bir liste olacaktır, bu nedenle kolaylık sağlamak için more
komutu ile çıktıyı sınırlayalım.
ps -u root | more
Çalışan her işlemi görmek için -e (her işlem) seçeneğini kullanın:
(Linux/SVR4 kullanımı)
ps -e | more
veya (BSD kullanımı)
ps -aux|more
ben ps
komutunu en çok -f
parametresi ile kullanırım. -f
veya --forest
orman demektir, ağaç şeklinde ilişkileri getir demektir.
ps auxf
size işlemleri sıralar ve fork edilmiş, yani alt işlemlere göre komutları birbiri için ilişkilendirir.
ps -aux
ile ps aux
aynı şeyler değildir. -u
parametresi kullanıcı tanımlamak için kullanılır oysa u
daha fazla ayrıntı ver demektir.
Örnek kullanımlar:
Kullanıcılara göre işlem listeleme
ps -f -u www-data
İşlem ismine veya id’sine göre listeleme
-C
command (komut)için kullanılıyor
ps -C ssh
-p
parametresi process id için kullanılıyor ve virtül ile birden fazla process id verebilirsiniz
örn:
ps -p 2342
grep komutu ile çalışan programların hangi process id’ye sahip olduğunu bulabilirsiniz.
ps -ef |grep program_adı
işlemleri kullandıkları CPU ve MEMORY oranına göre sıralama
ps aux --sort=-pcpu,+pmem
aynı şekilde en fazla CPU tüketen 5 process sıralaması head
komutu ile
ps aux --sort=-pcpu | head -5
hiyerarşik şekilde ssh
processinin gösterimi
ps -f --forest -C ssh
processlerin çalışma sürelerini gösteren çıktı
ps -e -o pid,comm,etime
watch izle
watch, kendisine parametre olarak verilen komutu tekrar tekrar çalıştırır, çıktısını ve hatalarını gösterir(stdout). Bu sayede, program çıktı değişimini canlı olarak izleyebilirsiniz. Varsayılan olarak, program 2 saniyede bir çalıştırılır. -n
parametresi ile süreyi değiştirebilirsiniz örn. -n 1
1sn gibi. program ctrl+c ile kesilmediği sürece çalışır.
Watch komutunu gördükten sonra kendimize göre bir top
komutu yazalım.
watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
Çalışan watch çıktısını, Ctrl+c ile kesebilirsiniz.
kill send a signal to a process - işleme sinyal gönder
Kill
komutu, bir işlemi komut satırından sonlandırmanıza izin verir. Bunu, sonlandırma işleminin işlem kimliğini (PID) sağlayarak yaparsınız. Süreçleri isteyerek öldürmeyin. Bunu yapmak için iyi bir nedene ihtiyacınız var. Bu örnekte, deklanşör programının kilitlenmiş olduğunu varsayacağız.
kullanım şekli:
kill pid ...
kill -l ile varolan sinyalleri öğrenebilirsiniz. Linux konusunda öğrenebileceğiniz en derin ve önemli konulardan birtanesi Sinyal (signals) konusudur. İşlemler kernel üzerinde birbirleri ile ve Kernel ile sinyaller sayesinde haberleşirler.
Kill komutu ise komut satırından işlemlere müdahale edebilmemizi sağlar. Modern bir linux sistemi üzerinde ‘kill -l’ aşağıdaki gibi bir liste verecektir
kill -l
Kill ile aynı zamanda normal şekilde durduramadığımız işlemleri durdurabilir.
998 numaralı process’i normal şekilde durdurmak için:
kill 998
çalışan bir programin process id’sini buluyoruz önce
ps | grep komut |
ps aux | grep komut |
örnek.
ps aux | grep ssh
alternatif olarak daha önce gösterdiğimiz pgrep
isimli bir program mevcuttur
pgrep ssh
Aşağıdaki komutların hepsi kill -9
veya SIGKILL
ile aynıdır (i.e SIGKILL zorla bir process sonlandırmanız gerektiğinde kullanılır. Örnek olarak 1988 işlemini durduralım) :
kill -s SIGKILL 1988
kill -s KILL 1988
kill -s 9 1988
kill -SIGKILL 1988
kill -KILL 1988
top display top linux process - önemli linux işlemlerini listele
top
komutu, Linux makinenizle ilgili verilerin gerçek zamanlı görüntüsünü gösterir. Ekranın üst kısmı bir durum özetidir.
İlk satır, bilgisayarınızın zamanı ve ne kadar süredir çalıştığını, burada kaç kullanıcının oturum açtığını ve son bir, beş ve onbeş dakika içinde gerçekleşmiş yük ortalamasının ne olduğunu gösterir.
İkinci satır, görevlerin sayısını ve durumlarını gösterir: çalışan(run), durma(stopped), uyku(sleep) ve zombi.
Üçüncü satır, CPU bilgilerini gösterir. Alanların anlamı şudur:
us: değer, CPU’nun kullanıcılar için işlemleri yürütmek için “kullanıcı alanında” harcadığı CPU zamanıdır
sy: değer, sistem “çekirdek alanı” işlemlerini çalıştırmak için harcanan CPU süresidir
ni: değer, manuel olarak ayarlanmış bir güzel değerle işlemleri yürütmek için harcanan CPU süresidir
id: CPU boşta kalma süresi miktarıdır
wa: değer, CPU’nun I/O’nin tamamlanmasını beklerken geçirdiği zamandır
hi: Donanım kesintilerine hizmet etmek için harcanan CPU zamanı
si: Yazılım kesintilerine hizmet vermek için harcanan CPU süresi
st: Sanal makinelerin çalıştırılması nedeniyle kaybedilen CPU zamanı (“çalma süresi”)
Dördüncü satır, toplam fiziksel bellek miktarını ve ne kadarının boş, kullanılmış ve arabelleğe alınmış veya önbelleğe alınmış olduğunu gösterir.
Beşinci satır, takas belleğinin toplam miktarını ve ne kadarının boş, kullanılmış ve kullanılabilir olduğunu gösterir (önbelleklerden kurtarılması beklenen bellek dikkate alınarak).
bir terminal penceresinde top komutu aşağıdaki gibi çalıştırılır.
top
Kullanıcı, ekranı baytları temsil eden uzun tam sayılar yerine daha insanca sindirilebilir rakamlara dönüştürmek için E tuşuna basabilirsiniz.
Ana ekrandaki sütunlar şunlardan oluşur:
PID: İşlem Kimliği
USER: İşlem sahibinin adı
PR: Süreç önceliği
NI: Sürecin nezaket değeri
VIRT: İşlem tarafından kullanılan sanal bellek
RES: İşlem tarafından kullanılan yerleşik bellek
SHR: İşlem tarafından kullanılan paylaşılan hafıza
S: İşlemin durumu. Bu alanın alabileceği değerler için aşağıdaki listeye bakın
% CPU: son güncellemeden bu yana işlem tarafından kullanılan CPU zamanı payı
% MEM: kullanılan fiziksel bellek payı
TIME +: görev tarafından saniyenin yüzde biri cinsinden kullanılan toplam CPU süresi
COMMAND: komut adı veya komut satırı (ad + seçenekler)
….
İşlemin durumu şunlardan biri olabilir:
D: Kesintisiz uyku
R: Çalışıyor
S: Uyuyor
T: İzlendi (durduruldu)
Z: Zombi
Yukarıdan çıkmak için Q tuşuna basın.
top
komutu sistemi izlemek için oldukça kullanışlı ve karşılaştığınız sorunlarda sizi soruna yönlendirir. Özellikle ilk çalıştırdığınızda en üstteki load average 5,10,15 dk içindeki yük göstergesi sisteminizin üzerindeki yükleri ne kadar iyi kaldırabildiğini gösterir.
htop
isimli alternatif bir top komutu daha vardır, ve çok daha ayrıntılı bilgi vermektedir. Thread ayrıntılarına kadar işlemcilerdeki yükleri analiz edebilirsiniz. Burada sadece ‘top’ komutunu işleme sebebimiz, her sistemde kolaylıkla paketini bulabilmenizdir.
Bolüm 4 - Sistem Yönetimi ve Ağ yapılandırması
Linux101 - Başlangıç
Konu tekrarı, kısa sınav
seçeneklerden doğru olanları seçtikten sonra Gönder butonuna basınız. Sonuçları doğru ve yanlış görebilirsiniz.
Bağlandığınız sunucudaki RAM mikatrını ve dolu slotların bilgisini nasıl öğrenebilirsiniz?
- ( ) ls -la
- ( ) cat /proc/meminfo
- (x) lshw -c memory
- ( ) lshw -businfo
Diskinizi tamamen yedeklemek istiyorsunuz, aşağıdaki komutlardan hangisi size bunu sağlar?
- (x) dd
- ( ) gzip
- ( ) cp
Hangi komut disk bölümlerinizi(partition) listeler? (Başlangıç ve bitiş bilgileri ile)
- ( ) lsblk
- (x) fdisk
- ( ) diskpart
MBR bir disk için aşağıdaki seçeneklerden hangisi yanlıştır?
- ( ) Maksimum 4 birincil bölüm oluşturulabilir
- ( ) Diskin ilk 512 Byte’ı içine yazılır
- (x) Disklerde 18TB disk alanına izin verir
- ( ) Çoklu açılışa izin verir(Multiboot)
Bilgisayarınıza yeni bir disk eklediniz, hagi ismi aldığını ve /dev yolunu nasıl öğrenirsiniz?
- ( ) dmidecode programı ile sorgularım
- ( ) lshw programı ile sorgularım
- ( )
- ( )