0

Dosya Sistemi Hiyerarşi Standardı

Dosya Sistemi Hiyerarşi Standardı linux sistemi üzerindeki bir dizinin planlamasını belirleyen bir belgedir. D.S.H.S’ı, dağıtım-bağımsız yazılım geliştirmeyi daha basit hale getirmek için ortak bir planlama sağlamak amacıyla ortaya atılmıştır. D.S.H.S aşağıdaki dizinleri belirlemektedir. (Direk olarak D.S.H.S spesifikasyonundan alınmıştır)

 

/ (kök -root- dizini)
/boot (açılış yükleyiciye -boot loader- ait statik dosyalar)
/dev (aygıt dosyaları)
/etc (üzerinde çalışılan -host- makinaya ait sistem konfigürasyonu)
/lib (paylaşılan temel kütüphaneler ve çekirdek modülleri)
/mnt (bir dosya sistemini geçici olarak bağlamak için bağlantı noktası)
/opt (Sonradan eklenebilen -add-on– uygulama yazılım paketleri)
/sbin (gerekli ikili/çalışabilir -binary- sistem dosyaları)
/tmp (geçici dosyalar)
/usr (ikincil hiyerarşi)
/var (değişken bilgiler)

İki Bağımsız D.S.H.S Kategorisi:

D.S.H.S planlama belirlemesi iki bağımsız dosya kategorisi olduğu fikrini temel alır; paylaşılabilir paylaşılamaz, ve değişken – statik. Paylaşılabilir bilgi ana makinalar (hosts) tarafından paylaşılabilir. ancak paylaşılmayan bilgi verilen ana makinaya özgüdür (konfigürasyon dosyaları gibi). Değişken bilgi
düzenlenebilir ve değiştirilebilirken statik bilgi değiştirilemez (fakat bu kural sistem kurulumu ve bakımı için geçerli değildir.)
Aşağıdaki tablo, bu kategoriler içine girebilecek dizin örnekleri ile bu 4 olası kombinasyonu özetlemektedir. Yine bu tablo da D.S.H.S’den alınmıştır.

+———+—————–+————-+
|            | shareable      | unshareable |
+———+—————–+————-+
|static    | /usr              | /etc           |
|            | /opt              | /boot         |
+———+—————–+————-+
|variable | /var/mail        | /var/run     |
|            | /var/spool/news | /var/lock|
+———+—————–+————-+

 

/usr dizinindeki ikincil hiyerarşi

/usr altında, root dosya sistemine çok benzeyen ikincil bir hiyerarşi göreceksiniz. Makina açıkken /usr dizinin olması gerek şart olmadığından bu dizin bir ağ üzerinde paylaşılabilir (”paylaşılabilir”) ya da bir CD-ROM içinden bağlanabilir (”statik”). Bir çok Linux kurulumunda /usr dizinin paylaşımı kullanılmasa
da root daki birincil hiyerarşi ile /usr deki ikincil hiyerarşi arasındaki farkı gözetmenin faydasını algılamak çok önemlidir.
Burada D.S.H.S’si ile ilgili söylenecekler bu kadardır. Dökümanın kendisi oldukça kolay anlaşılır olduğundan daha ayrıntılı bilgi için kullanabilirsiniz. Eğer dökümanı okursanız Linux D.S.H.S’si hakkında daha bir çok şey öğreneceğinizin kesin olduğunu söyleyebiliriz.

Dosyaları bulmak

Linux sistemleri içlerinde yüzlerce dosya barındırmaktadır. Her ne kadar bu dosyaların yerlerini kaybetmeyecek kadar usta olsanız bile, büyük bir ihtimalle bir tanesini bulmak için arasıra yardıma ihtiyaç duyacaksınız. Linux’te dosyaları bulmak için birkaç tane farklı araç yer almaktadır. Aşağıdaki konu başlıkları bu araçları göstermekte ve işiniz için gerekli olan doğru aracı bulmanıza yardımcı olmaktadır.

PATH

Bir programı komut satırında çalıştırdığınızda, kabuk aslında bir grup dizin arasında yazdığınız komutu aramaktadır. Örneğin, ls yazdığınızda, kabuk gerçekte bu komutun /usr/bin altında yer aldığını bilemez.
Onun yerine dizinlerin tutulduğu ve birbirlerinden iki nokta ile ayrıldığı PATH çevre değişkenine başvurur. PATH’in içinde yazılı olan değeri görmek için aşağıdaki gibi yazabiliriz:

 

$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:
/usr/local/sbin:/usr/local/bin:/usr/games:.

PATH değişkeninin sahip olduğu bu değere göre (sizdeki değişkenin değeri farklı olabilir, kabuk yazılan ls komutu için öncelikle /usr/local/bin daha sonra /usr/bin altında arama yapacaktır. Büyük bir ihtimalle ls /usr/bin altında yer almaktadır, bu yüzden kabuk burada komut arama işlemini bitirecektir.

PATH’i düzenlemek

Elemanlar atayarak kendi PATH değişkeninizi değiştirebilirsiniz:

$ PATH=$PATH:~/bin
$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:
/usr/local/sbin:/usr/local/bin:/usr/games:.:/home/knoppix/bin

Ayrıca, her ne kadar mevcut olan PATH değişkenini kullanmak kadar kolay olmasa da PATH değişkeni içerisinden bazı elemanları silmeniz de mümkündür. Bunun için en iyi yol, olmasını istediğiniz yeni PATH değerinin yazmaktır:

$ PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:~/bin
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/knoppix/bin

”which” hakkında her şey

Aradığınız programın PATH ile verilen dizinlerden birinde olup olmadığını which komutu ile bulabilirsiniz.
Örneğin, aşağıdaki komut ile Linux sistemimizin sağduyuya sahip olup olmadığını sorgulayabiliriz:

$ which sagduyu

Aşağıdaki örnekte ise ls komutunun nerede bulunduğunu görebiliriz:

$ which ls
/usr/bin/ls
"which -a"

Son olarak -a seçeneğine dikkat etmelisiniz. Bu seçenek kullanıldığında which komutu PATH değişkeninde tanımlı tüm dizinlerde aradığınız programın olup olmadığını gösterir:

$ which -a ls
/bin/ls
whereis

Eğer bir programın yerini öğrenmek dışında onunla ilgili daha çok bilgiye erişmek istiyorsanız whereis komutunu denemelisiniz:

$ whereis ls
ls: /bin /bin/ls /usr/share/man/man1/ls.1.gz

Buradan görürüz ki ls programı iki dizinde bulunmaktadır, /bin and /usr/bin. Buna ek olarak /usr/share/man dizininde de ls ile ilgili bir man sayfası olduğu bilgisini ediniriz. man ls yazdığınızda karşınıza gelen sayfa yukarıda belirtilen sayfadır. whereis aynı zamanda kaynak arama, alternatif arama yolları tanımlama ve sıradışı girdileri arama gibi özelliklere de sahiptir. Detaylı bilgi için lütfen whereis man sayfasını inceleyin.

find

find alet çantanızdaki araçlardan biridir. find komutu ile artık sadece program dosyaları ile sınırlı değilsiniz, her türlü dosyayı çok çeşitli kriterlere göre arayabilirsiniz. Örneğin /usr/share/doc dizini ve alt dizinlerinde README dosyasını bulmak için şu komutu vermeniz yeterlidir.

$ find /usr/share/doc -name README
/usr/share/doc/aalib1/README
/usr/share/doc/adduser/examples/README
/usr/share/doc/afio/README

find ve joker karakterler

-name parametresine değer geçerken dosya açılımındaki (glob) joker karakterleri kullanabilirsiniz ancak bu durumda onları çift tırnak içine almanız veya önlerine ters bölü (backslash) koymanız gerekir (ki bash tarafından açılmayıp find komutuna oldukları gibi gönderilebilsinler). Örneğin uzantıya sahip README dosyalarını bulmak için şu komutu verebiliriz:

$ find /usr/share/doc -name README\*
/usr/share/doc/LANG/fr/xtel/README_IMINITEL.txt.gz
/usr/share/doc/a2ps/README.gz
/usr/share/doc/aalib1/README

find ile küçük büyük harf ayrımı yapmadan aramak

Elbette arama yaparken büyük küçük harf ayrımı yapmak istemeyebilirsiniz:

$ find /usr/share/doc -name ’[Rr][Ee][Aa][Dd][Mm][Ee]*’

Veya daha basit olarak:

$ find /usr/share/doc -iname readme\*

Gördüğünüz gibi -iname seçeneği büyük küçük harf ayrımını ortadan kaldırır.

find ve düzenli ifadeler

Eğer düzenli ifadelere alışıksanız -regex seçeneğini kullanarak belli bir kalıpla eşleşecek şekilde dosya
isimlerini arayabilirsiniz. -iname seçeneğine benzer şekilde -iregex seçeneği ile de büyük küçük harf ayrımı
yapılmasını engelleyebilirsiniz.

find ve türler

-type seçeneği ile belli tipte dosyalar üzerinden arama yapabilirsiniz. Bu seçeneğe geçebileceğiniz argümanlar şunlardır: b (blok cihazı), c (karakter cihazı), d (dizin), p (isimlendirilmiş boru), f (normal dosya), l (sembolik bağlantı) ve s (soket). Örneğin /usr/bin dizinindeki vim sözcüğünü içeren sembolik linkleri aramak için:

$ find /usr/bin -name ’*vim*’ -type l
/usr/bin/evim
/usr/bin/gvim
/usr/bin/gvimdiff
/usr/bin/rgvim
/usr/bin/rvim
/usr/bin/vimdiff

find ve ‘mtime’lar

-mtime seçeneği dosyaları son güncelleme zamanlarına göre aramanızı sağlar. mtime seçeneğine verilen değer 24-saatlik zaman periyodu formatındadır ve genellikle + (verilen zamandan sonra) veya – (verilen zamandan önce) ile kullanılır. Örneğin şu senaryoya bir bakalım:

$ ls -l ?
-rw------- 1 root root jan 7 18.00 a
-rw------- 1 root root jan 6 18:00 b
-rw------- 1 root root jan 5 18:00 c
-rw------- 1 root root jan 4 18:00 d
$ date
Mon Jan 7 18:14:52 EST 2002

Son 24 saat içinde oluşturulmuş dosyaları arayabilirsiniz:

$ find . -name \? -mtime -1
./a

Veya içinde bulunduğunuz 24 saatten önce oluşturulmuş dosyaları arayabilirsiniz:

$ find . -name \? -mtime +0
./b
./c
./d

-daystart seçeneği

Eğer ek olarak -daystart seçeneğini de kullanırsanız zaman periyodları 24 saat öncesinden değil günün başlama anından başlar. Örneğin dün ve evvelki gün oluşturulmuş dosyaları listelemek için:

$ find . -name \? -daystart -mtime +0 -mtime -3
./b
./c
$ ls -l b c
-rw------- 1 root root 0 Jan 6 18:00 b
-rw------- 1 root root 0 Jan 5 18:00 c

-size seçeneği

-size seçeneği dosyaları büyüklük kriterine göre aramanızı sağlar. Aksi belirtilmediği sürece -size seçene ğine 512-byte’lık bloklar cinsinden büyüklük verildiği kabul edilir ancak bunun sonuna bir takı eklemek işleri kolaylaştırabilir ve daha doğal kılabilir. Kullanabileceğiniz takılar şunlardır: b (512-byte’lık blok), c (byte), k (kilobyte), ve w (2-byte’lık sözcük). Bunlara ek olarak + öneki ile verilen büyüklükten daha büyük dosyaları ve – öneki ile de daha küçük dosyaları arayabilirsiniz. Örneğin /usr/bin dizini içinde boyu 50 byte’tan küçük olan dosyaları bulmak isterseniz:

$ find /usr/bin -type f -size -50c
/usr/bin/bison.yacc
/usr/bin/kdvi
/usr/bin/krdb
/usr/bin/pydoc2.1
/usr/bin/pydoc2.2
/usr/bin/rgrep
/usr/bin/texi2pdf

Bulunan dosyaların işlenmesi

Pekçok değişik kritere göre arayıp bulduğunuz onca dosya ile ne yapacağınızı merak ediyor olmalısınız! find komutu bulduğu dosyalar üzerinde işlem yapma kabiliyetine de sahiptir ve bunun için -exec seçeneğinden faydalanır. Bu seçenek argüman olarak ; ile sonlandırılan ve çalıştırılabilir bir komut alır ve her {} gördüğü-yere de bulmuş olduğu dosya ismini koyarak ilgili komutu çalıştırır. Bunun anlamanın en kolay yolu şu örneğe bakmak:

$ find /usr/bin -type f -size -50c -exec ls -l ’{}’ ’;’
-rwxr-xr-x 1 root  root     29 2002-04-04 12:29 /usr/bin/bison.yacc
-rwxr-xr-x 1 root  root     30 2001-12-01 07:14 /usr/bin/kdvi
-rwxr-xr-x 1 root  root     27 2000-09-24 14:46 /usr/bin/krdb
-rwxr-xr-x 1 root  root     45 2002-07-29 22:39 /usr/bin/pydoc2.1
-rwxr-xr-x 1 root  root     48 2002-07-29 23:19 /usr/bin/pydoc2.2
-rwxr-xr-x 1 root  root     31 2001-11-28 17:36 /usr/bin/rgrep
-rwxr-xr-x 1 root  root     36 2002-09-07 10:08 /usr/bin/texi2pdf

Gördüğünüz gibi find komutu bir hayli güçlü bir komuttur. UNIX ve Linux’un yıllarca süren geliştirilmesi boyunca bu komut da geliştirilmiştir. find komutunun daha pek çok faydalı seçeneği vardır. İlgili man sayfasında bunları bulabilirsiniz.

Locate

Şimdiye dek which, whereis ve find komutlarını ele aldık. find çalışırken biraz vakit geçtiğini farketmişsinizdir çünkü üzerinde her dizine tek tek girip bakmak zorundadur. locate komutu ise bir veritabanını kullanarak işleri biraz hızlandırabilir. Bu komut yol isminin herhangi bir kısmı ile eşleşme yapabilir sadece dosya ismine bakmak zorunda değildir. Örneğin:

$ locate bin/ls
/bin/ls
/bin/lspci
/sbin/lsmod
/sbin/lspci
/sbin/lspnp
/usr/bin/lsattr
/usr/bin/lsdev
/usr/bin/lsof
/usr/bin/lspgpot
/usr/bin/lss16toppm
/usr/sbin/lsof
/usr/sbin/lsusb

updatedb kullanımı

Pekçok Linux sistemi periyodik olarak veritabanını güncelleyen bir süreç (process) çalıştırır. Eğer sisteminiz yukarıdaki komuta aşağıdaki gibi bir hata ile cevap verirse o zaman bir veritabanı oluşturmak için uptadedb komutunu çalıştırmanız gerekir:

$ locate bin/ls
locate: /var/spool/locate/locatedb: No such file or directory
$ su
Password:
# updatedb

updatedb komutunun işini tamamlaması uzun bir süre alabilir. Eğer gürültücü bir harddiskiniz varsa tüm dosya sistemi indekslenirken başınız epey ağrıyabilir.

slocate

Pek çok Linux dağıtımında locate komutu yerine artık slocate komutu kullanılmaktadır. Genellikle locate isimli bir sembolik bağlantı olduğu için hangisini kullanayım diye tereddüt etmenize gerek yoktur. slocate ”secure locate” yani ”güvenli locate” anlamına gelmektedir. Bu komut kullandığı veritabanında dosya ve dizin izinlerini de depolar ve böylece normal kullanıcılar erişim izninine sahip olmadıkları dizine bakamazlar. slocate komutunun kullanım şekli locate komutunda olduğu gibidir ancak çıktı bilgisi komutu çalıştıran kullanıcıya göre değişebilir.

Süreç (process) Kontrolü

xeyes’ı başlatmak

Süreç kontrolünü öğrenmek için önce bir süreç başlatalım:

$ xeyes -center red

xeyes penceresinin birden açıldığını ve kırmızı gözlerin fareyi takip ettiğini göreceksiniz. Bu arada bir şey daha farkedeceksiniz: Komut satırına dönmediğinizi.

Süreci durdurmak

Komut satırına geri dönebilmek için Control-C tuş kombinasyonuna basmalısınız (genellikle Ctrl-C veya Ĉ şeklinde gösterilir):

^C
$

bash komut satırına geri döndünüz ancak xeyes penceresi de kayboldu. Aslında işi yapan süreç tamamen sonlandırılmış, öldürülmüş durumda. Control-C ile süreçi öldürmek yerine Control-Z ile durdurabilirdik:

$ xeyes -center red
^Z
[1]+ Stopped
$xeyes -center red

Şimdi gene bash komut satırına döndünüz ama bu sefer xeyes penceresi durması gereken yerde duruyor. Ancak fare ile oynarsanız göreceksiniz ki gözler sizi takip etmiyor artık, donup kalmış durumdalar.
Eğer xeyes penceresi üzerine başka bir pencereyi sürükleyip sonra çekerseniz göreceksiniz gözler yeniden çizilmiyor bile. Süreç hiçbir şey yapmıyor şu anda yani ”Durmuş” (Stopped) halde.

fg ve bg

Süreci ”durdurulmuş olmaktan çıkarmak” ve yeniden çalışır hale getirmek için onu bash komutlarından biri olan fg komutu ön plana çekebiliriz:

$ fg
xeyes -center red
^Z
[1]+ Stopped
$

Şimdi de yine bir bash komutu olan bg ile süreci arkaplanda çalıştıralım:

$ bg
[1]+ xeyes -center red &

Harika! xeyes süreci şu anda arkaplanda çalışıyor ve bizim de karşımıza kullanabileceğimiz bir komut satırı geldi.

“&” Kullanımı

Eğer xeyes’ı doğrudan arkaplanda çalıştırmak isteseydik (Control-Z ve sonra da bg kullanmak yerine), xeyes komutunun sonuna ”&” (ampersand) eklememiz yeterli olacaktı:

xeyes -center blue &
[2] 4386

Birden çok sayıda arkaplan süreci

Şimdi arkaplanda bir kırmızı ve bir de mavi xeyes sürecimiz var. Bunları bash komutlarından biri olan jobs komutu ile listeleyebiliriz:

$ jobs -l
[1]- 4205 Running  xeyes -center red &
[2]+ 4386 Running  xeyes -center blue &

Sol sütundaki sayılar bash kabuğunun bu süreçleri başlatırken onlara atadığı süreç numaralarıdır. İki numaralı süreç (başka bir deyişle job) yanında bir + (artı) sembolü vardır ve bu da sürecin şu anda çalışmaktan olan süreç olduğunu gösterir yani fg komutunu verirseniz önplanda çalışmaya başlayacak olan süreç budur. Tabi eğer isterseniz numarasının vererek başka bir süreci de önplana çekebilirsiniz. fg 1 komutu kırmızı xeyes sürecini önplana çekecektir. Bir sonraki sütun ise süreç ID’sini yani pid numarasını gösterir karşımızdaki listede (bunun gelmesini de jobs komutuna verdiğimiz -l seçeneğine borçluyuz). Son olarak her iki süreç (job) da ”Running” yani çalışıyor durumda ve bunları başlatan komut satırlarını da en sağda görebilirsiniz.

Sinyallere giriş

Süreçleri öldürmek, durdumak ya da devam ettirmek için, Linux işletim sistemi ”sinyal” olarak bilinen özel bir iletişim şekli kullanır. Bir sürece belli bir sinyal yollayarak o süreci sonlandırabilir, durdurabilir, ya da başka şeyler yapabilirsiniz. Aslında Control-C, Control-Z, ya da fg, bg gibi komutları kullandığınızda
yaptığınız tam da budur – bash kabuğunun belli bir sürece belli bir sinyal göndermesini sağlamaktasınızdır.
Bu sinyaller kill komutuna süreç numarası (pid) verilerek de gönderilebilir:

$ kill -s SIGSTOP 4386
$ jobs -l
[1]- 4205 Running                xeyes -center red &
[2]+ 4386 Durduruldu (sinyal)    xeyes -center blue

 

Gördüğünüz gibi kill komutu isminin çağrıştırdığı şekilde illa ki bir süreci ”öldürmek” zorunda değildir. ”-s” seçeneği kullanılarak kill komutunun bir sürece herhangi bir sinyali göndermesi sağlanabilir. Linux süreçlerine SIGINT, SIGSTOP ya da SIGCONT sinyallerinden biri gönderildiğinde sırası ile bunları sonlandırır, durdurur ya da devam ettirir. Bir sürece yollayabileceğiniz başka sinyal türleri de vardır; bunlardan bazıları uygulamanın özelliklerine göre yorumlanacaktır. Belli bir sürecin hangi sinyale karşı nasıl tepki vereceğini öğrenmenin en güzel yolu ilgili süreci başlatan komutun man sayfasına bakıp oradaki SIGNALS bölümünü okumaktır.

SIGTERM ve SIGINT

Eğer bir süreci öldürmek (sonlandırmak) isterseniz pek çok seçeneğiniz vardır. Aksi belirtilmediği sürece kill komutu SIGTERM sinyalini gönderir ve bu Control-C ile yollanabilen SIGINT sinyalinden farklı olmakla birlikte benzer sonuç üretir:

$ kill 4205
$ jobs -l
[1]- 4205 Sonlandırıldı           xeyes -center red &
[2]+ 4386 Durduruldu (sinyal)     xeyes -center blue



Büyük ölüm

Süreçler hem SIGTERM hem de SIGINT sinyallerini dikkate almayıp görmezden gelebilirler; bunu ya bilerek ve isteyerek yaparlar ya da bir şekilde durmuş veya takılmışlardır. Bu gibi durumlarda bir balyoz kullanmak gerekebilir ve devreye SIGKILL sinyali girer. Bir süreç SIGKILL sinyalini görmezden gelemez:

$ kill 4386
$ jobs -l
[2]+ 4386 Durduruldu (sinyal) xeyes -center blue
$ kill -s SIGKILL 4205
$ jobs -l
[2]+ 4205 Süreç durduruldu    xeyes -center blue

nohup

Belli bir işi (süreci) başlattığınız terminal o işin kontrol terminali olarak adlandırılır. Bazı kabuklar öntanımlı olarak (bash değil) siz logout komutu ile terminalden çıkınca arkaplandaki işlere SIGHUP sinyalini yollayıp onların sonlanmasına yol açarlar. Eğer siz terminalden logout komutu ile çıktığınızda süreçlerinizin bu şekilde sonlandırılmasını istemiyorsanız o zaman süreci başlatırken nohup seçeneğini kullanmanızda fayda vardır:

$ nohup make &
$ exit

ps komutu ile süreçleri listelemek

Yukarıda kullandığımız jobs komutu içinde bulunduğumuz mevcut bash oturumunda başlatılan süreçleri listeliyordu. Sisteminizdeki tüm süreçleri görmek için kullanmanız gereken komut ise ps komutudur ve bu komuta a ve x seçeneklerini vermeniz gereklidir.

$ ps ax
PID TTY  STAT  TIME COMMAND
  1 ?   S     0:04 init
  2 ?   SW    0:00 [KEVENTD]
  3 ?   SWN   0:00 [ksoftriqd_CPU0]
  4 ?   SW    0:01 [kswapd]
  5 ?   SW    0:00 [bdflush]
  6 ?   SW    0:00 [kupdated]

Bu komutun çıktısı olan listenin ancak küçük bir kısmını yukarı yazdık çünkü genellikle bu liste çok daha uzun olur. Bu liste size makinanın o anda ne yaptığının bir fotoğrafını verir ancak göz atılacak pek çok veri vardır içinde. Eğer ax seçeneklerini kullanmadan ps komutunu çalıştıracak olsaydınız sadece size ait ve belli bir terminalin kontrolü altındaki süreçleri görürdünüz. ps x size tüm süreçleri gösterir, belli bir terminal tarafından kontrol edilmeyenler dahil. Eğer ps a şeklinde kullanmış olsaydınız o zaman da belli terminallere bağlı ve herkese ait süreçleri görürdünüz.

Hem ormanı hem de ağaçları görebilmek

Her süreç ile ilgili farklı bilgileri de listeleyebilirsiniz. –forest (orman) seçeneği süreç hiyerarşisini görmenizi ve sisteminizdeki birçok sürecin arasındaki ilişkiyi algılamanızı sağlar. Bir süreç başka bir süreç başlattığında bu yeni sürece ”çocuk” (child) süreç denir. –forest seçeneği kullanılarak elde edilen bir ps çıktısında ebeveyn süreçler yani çocuk süreçleri başlatan süreçler solda görünürken çocuk süreçler de sağa doğru dallanacak şekilde listelenirler.

$ ps x --forest
PID TTY    STAT TIME COMMAND
318 ?      S    0:00 /bin/sh /etc/X11/xinit/xinitrc
444 ?      S    0:00 \_ kwrapper ksmserver --restore
2932?      S    0:00 kdeinit: kio_uiserver

”u” ve ”l” ps seçenekleri

”u” ve ”l” seçenekleri a ve x seçeneklerine eklenebilen seçeneklerdir ve süreçler hakkında daha çok bilgi almanızı sağlarlar:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ikaruxt   3316  1.3  0.0  22360  4848 pts/0    Ss   00:51   0:00 /bin/bash
ikaruxt   3325  0.0  0.0  37320  3184 pts/0    R+   00:51   0:00 ps au

”top” kullanımı

ikaruxt@ikaruxt:~$ top
top - 01:46:09 up  7:48,  1 user,  load average: 2,87, 3,26, 3,03
Tasks: 223 total,   2 running, 221 sleeping,   0 stopped,   0 zombie
%Cpu(s): 19,6 us,  4,2 sy,  0,0 ni, 74,8 id,  1,3 wa,  0,0 hi,  0,1 si,  0,0 st
MiB Mem :   7873,0 total,    454,6 free,   4172,9 used,   3245,5 buff/cache
MiB Swap:  11264,0 total,  11238,5 free,     25,5 used.   2946,2 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                
31765 ikaruxt   20   0 1636116 400608 149588 R  41,9   5,0  51:15.35 Discord                                                                
 6470 root      20   0  498176 163288 139056 S  11,0   2,0  44:05.00 Xorg                                                                   
 7580 ikaruxt   20   0 1179168 180476  75476 S   7,3   2,2  43:06.56 deepin-wm                                                              
 7755 ikaruxt   20   0 2747012  22296  18348 S   7,0   0,3  29:25.25 pulseaudio                                                             
31727 ikaruxt   20   0  530612 109692  84012 S   6,3   1,4  13:45.85 Discord                                                                
29055 ikaruxt   20   0 1006828 127640  41252 S   3,0   1,6   4:01.03 evince                                                                 
31683 ikaruxt   20   0 1204160 140236  89752 S   2,7   1,7   7:19.43 Discord                                                                
 3295 ikaruxt   20   0  591844  37728  25832 S   2,3   0,5   0:01.11 deepin-terminal                                                        
 7650 ikaruxt   20   0 2367628  46068  26712 S   2,3   0,6  11:36.56 dde-session-dae                                                        
24141 ikaruxt   20   0 1931932 378932 122420 S   1,7   4,7  11:40.32 Web Content                                                            
 7871 ikaruxt   20   0 1180348  15456   8900 S   1,0   0,2   4:53.66 deepin-sync-dae                                                        
 9581 ikaruxt   20   0 1290716  60824  44100 S   1,0   0,8   3:37.79 dde-control-cen                                                        
21058 ikaruxt   20   0 9826064 734276 154232 S   1,0   9,1  40:17.61 firefox                                                                
 7505 ikaruxt   20   0   49336   5408   3308 S   0,7   0,1   3:30.21 dbus-daemon                                                            
 7858 ikaruxt   20   0 2120524 149092  82100 S   0,7   1,8  10:31.81 franz                                                                  
 8056 ikaruxt   20   0 1230712 160108  63280 S   0,7   2,0   1:43.97 franz                                                                  
 8111 ikaruxt   20   0 2346668 174520  61648 S   0,7   2,2   4:47.68 franz                                                                  
 8519 ikaruxt   20   0  182492  34280  13888 S   0,7   0,4   3:19.21 applet.py

nice

Her sürecin bir öncelik derecesi vardır ve Linux buna göre sürecin çalışma hızını ayarlar. Bir sürecin önceliğini bu sürecin isminin başına nice yazıp başlatmak suretiyle ile ayarlayabilirsiniz:

$ nice -10 xmms /cdrom/Demos/Audio/opensource.ogg

Öncelik ayarına ”nice” dendiği için buna yüksek bir değer verdiğiniz takdirde diğer süreçlere nezaket sergilediğinizi, onlara CPU için öncelik tanıdığınızı hatırlamak zor olmayacaktır. Aksi belirtilmediği sürece, süreçler 0 öncelikli olarak başlarlar, yani yukarıda ogg’nin 10 ile başlatılması demek, ogg’nin CPU’ya ne kadar ihtiyacı olursa olsun önceliği diğer süreçlere tanıması ve böylece onların normal hızda çalıştırılmasına izin vermesi demektir. Süreçlerin ”nice” derecesini ps ve top komutlarının yukarıdaki çıktılarındaki NI sütununda görebilirsiniz.

renice

Nice komutu, sadece çalıştırdığınız anda, bir komutun önceliğini belirler. Eğer çalışmakta olan bir komutun önceliğini değiştirmek isterseniz renice kullanmanız gerekir.

ikaruxt@ikaruxt:~$ ps l 6470
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  6470  6434  20   0 496948 162460 -     Rsl+ tty1      44:24 /usr/lib/xorg/Xorg -background none :0 -seat seat0 -auth /var/run/light

Yazı işleme

Yönlendirme Bir komutun çıktısını bir dosyaya yönlendirmek için > operatörünü kullanırız, şöyle ki:

$ echo "dosya" > kopyasi

Çıktıyı yönlendirmeye ek olarak, oldukça güçlü bir kabuk özelliği olan pipe (boru)ları da kullanabiliriz. Bağlantıları kullanarak bir komutun çıktısını diğerine girdi olarak vermemiz mümkün. Şu örneğe bir bakın

$ echo "merhaba dunyali" | wc
   1     2       16

— karakteri soldaki komutun çıktısının sağdaki komuta girdi olarak verilmesini sağlamaktadır. Yukardaki örnekte echo komutu ”merhaba dunyali” cumlesini sonunda bir satır sonu ile birlikte basar. Normalde bu çıktının terminalde gözükmesi lazım fakat yaptığımız bağlantı onu wc komutuna yönlendirdi ve böylece satır, kelime ve karakter (boşluk ve satır sonu dahil) sayılarını öğrendik. Bir boru örneği İşte bir başka örnek:

$ ls -s | sort -n

Bu durumda, ls -s normalde mevcut dizinin listesini her dosyanın boyu dosya isminden önce gelecek şekilde terminal ekranına basacakken biz bu çıktıyı borudan geçirip sort -n’ye yönlendirdiğimiz için karşımıza çıktının sayısal olarak sıralanmış şekli gelmektedir. Ev (home) dizininizdeki büyük dosyaları
bir bakışta tespit etmek için gerçekten güzel bir yöntem!
Aşağıdaki önekler biraz daha karışıktır ancak boru mekanizması ile ne kadar güçlü ve becerikli işlemler gerçekleştirilebildiğini göstermeleri bakımından faydalıdır. Şimdiye dek görmediğiniz bazı komutlarla karşılaşabilirsiniz, bunun sizi yavaşlatmasına lütfen izin vermeyin. Bunun yerine boru mekanizmasını yani bir çıktının bir sonraki programa girdi olarak nasıl geçildiğini anlamaya odaklanın. Böylece bunlardan günlük Linux kullanımınızda bolca faydalanabilirsiniz. Sıkıştırılmışları açan boru hattı Nomalde sıkıştırılmış bir dosyayı açmak ve arşivi çözmek için şunu yaparsınız:

$ bzip2 -d linux-2.4.16.tar.bz2
$ tar xvf linux-2.4.16.tar

Bu yöntemin dezavantajı diskinizde sıkıştırılmamış bir ara dosya barındımasıdır. tar yazılımı doğrudan standart girdiden okuyabildiği için (yani buna parametre olarak illa ki diskteki bir dosyayı geçmeniz gerekmediği için) yukarıdaki sonucun aynısına şöyle bir boru hattı kullanarak, daha pratik ve ekonomik bir şekilde erişebiliriz:

$ bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf -

Sıkıştırılmış arşiv (tarball) dosyamız bir anda açılıverdi ve arada ortaya çıkan geçici bir dosyaya da ihtiyaç duymadık.

Cat

Bir başka örneğe bakalım:

$ cat dosyam.txt | sort | uniq | wc -l

cat komut ile myfile.txt dosyasının içeriğini elde edip bunu sort komutuna girdi olarak veriyoruz. sort komutu bu girdiyi alınca tüm satırları alfabetik olarak sıralıyor ve ürettiği çıktıyı boru üzerinden uniq komutuna aktarıyor ve bu program da tekrar eden satırları iptal ediyor (yani birbirinin aynısı olan satırlardan sadece bir tane görünüyor) ve bu sonucu wc -l komutuna veriyor. wc komutunu daha önce görmüştük, -l seçeneği ile birlikte kullanıldığında bu komut sadece ve sadece satır sayısını verir. Birkaç test dosyası oluşturup bu boru hattının etkilerini inceleyebilirsiniz.

Metin işleme kasırgası başlıyor!

Şimdi standart Linux metin işleme komutlarının üzerinden fırtına gibi geçeceğiz. Bu bölümde bir hayli yoğun bir içerik aktardığımız için her komuta dair detaylı bir sürü örnek veremeyeceğiz bu yüzden de sizden burayı okuduktan sonra ilgili komutların man sayfalarına bakmanızı istiyoruz. Bunları inceleyin ve değişik seçeneklerle oynayın, öğrenmenin en güzel yolu budur. Genel kural olarak bu komutlar kendisine verilen metin dosyalarının içeriğini uygun şekilde işleyip ekrana basarlar, dosyanın kendisine kalıcı olarak müdahale etmezler. Bu fırtına turundan sonra girdi ve çıktı yönlendirmeye biraz daha detaylı bakacağız.

echo

echo kendisine verilen argümanları terminale basar. -e seçeğini kullanırsanız ”escape dizisi” olarak tabir ettiğimiz özel karakter kombinasyonlarının da düzgün olarak yorumlanmasını sağlarsınız, misal: echo -e ”foo nfoo” komutu ekrana önce foo basar, bir satır aşağı iner başka bir deyişle yenisatır karakteri basar ve sonra yine bir kez foo basar. -n seçeneğini kullanırsanız çıktıya en sonra otomatik olarak eklenen yenisatır karakterinin basılmasını engelleyebilirsiniz.

cat, sort ve uniq

cat: cat komutu bir dosyanın içeriğini terminal ekranına basar. Bir boru hattına ilk girdiyi vermek için faydalı bir komuttur, misal cat foo.txt — vesaire — vesaire.
sort: sort komutu komut satırında kendisine belirtilen dosyanın içeriğini alfabetik olarak sıralayıp basar. Elbette sort komutu da boru üzerinden kendisine aktarılan girdiyi kabul edecek şekilde tasarlanmıştır. man sort ile bu komutun ne kadar farklı sıralama işleri için pratik şekilde kullanılabileceğini görebilirsiniz. uniq: uniq sıralanmış bir dosyayı ya da boru hattı üzerinden kendisine yollanan veriyi alır ve bunun içindeki birbirinin aynısı olan satırları ayıklar.

wc, head, ve tail

wc: wc komut satırında kendisine belirtilen dosyayı (ya da boru hattından gelen veriyi) okur ve bu dosyanın satır, sözcük ve byte sayısını ekrana basar. man wc ile detaylı bilgi edinebilirsiniz.
head: head komutu bir dosyanın ya da boru hattından gelen verinin ilk on satırını basar. -n seçeneği ile kaç satır basılacağını belirleyebilirsiniz.
tail: Bu komut bir dosyanın ya da boru hattından akan verinin son on satırını basar. -n seçeneği ile kaç satır basılacağını belirleyebilirsiniz.

tac, expand ve unexpand

tac: tac da tıpkı cat komutu gibidir, şu farkla ki okuduğunu tersten basar. Yani son okunan satır ilk olarak basılır, dosyanın ilk satırı ise en son basılır.
expand: expand komutu girdideki tab karakterlerini boşluk karakterine dönüştürür. -t seçeneği ile tab duraklarını belirleyebilirsiniz.
unexpand: unexpand girdideki boşlukları tab karakterine dönüştürür. -t seçeneği ile tab duraklarını belirleyebilirsiniz.

cut, nl ve pr

cut: cut komutu belli bir dosyadaki ya da girdideki karakterle ayrılmış alanları çekip çıkarır.
nl: nl girdideki her satırın başına sıra ile artan bir sayı ekler. Özellikle program kaynak kodu türünden dosyalara göz atarken ya da bunların çıktısını alırken faydalıdır.
pr: pr komutu bir dosyayı sayfalara böler, yazıcı çıktılarında faydalıdır.

tr, sed ve awk

tr: tr bir tür karakter dönüştürme aracıdır, girdideki belli karakterleri çıktıdaki başka karakterlere tasvir etmek için kullanılır.
sed: sed çok güçlü, veri akışını işlemeye yönelik (stream-oriented) metin editörüdür.
awk: awk kolay kullanımlı, satır tabanlı bir metin işleme dilidir.

od, split, ve fmt

od: od komutu girdiyi alıp sekizlik ya da onaltılık biçimde basar.
split: split komutu büyük bir dosyayı alıp bunu küçük dosyalara ayırır.
fmt: fmt paragraf kenarları toplanacak şekilde paragrafı yeniden biçimlendirir. Bu yetenek birçok text editör içerisinde yer alsa bile bilinmesi gereken komutlardan bir tanesidir.

Paste, join, ve tee

paste: paste iki ya da daha fazla dosyayı girdi olarak alır, giriş dosyalarından gelen ardışıl satırları birbiri ardına ekler ve sonuç satırlarını çıktı yapar. Text tabloları ve kolonları yaratmak için oldukça kullanışlıdır.
join: join de paste komutuna benzese de tek bir satırda birleşecek şeyleri eşleştirmek için, her girdi satırında bir alan kullanır.
tee: tee kendi girdisini hem dosyaya hem de ekrana basar. Bir şeyin log’unu tutmak ama aynı zamanda çıktıyı ekranda da görmek istediğinizde bu komut gayet kullanışlı olabilir

Yönlendirme (redirection)

Bash komut satırlarında kullanılan >’a benzer olarak, bir dosyayı komuta yönlendirmek için < de kullanabilirsiniz. Bir çok komuta girdi olması için komut satırlarında dosya adı belirleyebilirsiniz. Fakat bazı komutlar sadece standart girdiden alınan girişlerle çalışmaktadır.
Bash ve diğer kabuklar ”herefile” kavramına destek verirler. Bu yöntem sizin belli bir gözcü değer ile sonlanmış ve komut çağrımından sonra gelen satırlarda bir komuta girdi belirtmenize olanak sağlar.
Örneğin:

$ sort <<END
> elma
> armut
> muz
> END
armut
elma
muz

Bu örnekte, END ile sonlanan ve girdinin bittiğini ifade eden kelimeyi ve bundan önce de elma, armut ve muz kelimelerini yazdık ve sort programı bu girdinin sıralanmış şekli ile geri döndü.

>> Kullanımı

>  >  kullanımının << ile benzerlik göstereceğinin düşünecek olasanız da aslında bu ikisi birbirinden farklıdır. >> basitçe çıktıyı > nin yaptığı gibi dosyaya yazmak yerine dosyanın sonuna yazar. Örneğin:

$ echo merhaba > dosyam
$ echo oradakiler. > dosyam
$ cat dosyam
oradakiler.

O da ne! ”merhaba” kelimesini kaybettik. Aslında az önce kastettiğimiz:

$ echo merhaba > dosyam
$ echo oradakiler. >> dosyam
$ cat dosyam
merhaba
oradakiler.

idi. Bu daha iyi değil mi?

 

SEO programları

Previous article

RUBY’E GİRİŞ

Next article

You may also like

Comments

Bir Cevap Yazın

More in Anasayfa