Yönlendirme
Kullanıcı, ekrana yazdığı bir komutun neler yaptığını en
rahat şekilde komut tarafından ekrana yönlendirilen bilgilerden
anlayabilir. Program, kullanıcıyı bilgilendirme amacıyla gerek ve
yeter miktarda bilgiyi ekrana vermelidir.
Standart Girdi, Çıktı ve Hata
Linux
işletim sisteminde çalıştırılan her komut 3 dosya işaretçisine
sahiptir :
- Standart Giriş (stdin) : Çalışan programın , dosya gibi ek kaynaklar açmadan veri okumak için kullanacağı kaynağı belirtir. Varsayılan olarak veri girişi klavyeden okuma şeklinde gerçekleştirir.
- Standart Çıkış (stdout) : Çalışan programın çıktılarını göndereceği kaynağı belirtir. Varsayılan kaynak terminal penceresidir.
- Standart Hata (stderr) : Çalışan programın hata çıktılarını göndereceği kaynağı belirtir. Varsayılan kaynak terminal penceresidir.
Her dosya
işaretçisi bir numara ile belirtilir. Standart giriş 0 , standart
çıkış 1 , standart hata 2 değerlerine sahiptir.
Standart
Girişin
Yönlendirilmesi
Komut
çalıştığında veri girişinin belli bir dosyadan yapılması
istendiğinde “ < “ karakteri ile bir dosya standart girişe
yönlendirilebilir.
Linux'ta, programın ekrana
yazılan bilgiyi iki sınıf altında toplayabiliriz. Birincisi,
olağandışı bir durumu bildiren standart hata, diğeri de her
türlü verinin yazıldığı standart çıktı. Program çalıştığı
andan itibaren bu iki kanal üzerinden akan bilgiler, programın
çalıştığı sanal terminale yazılırlar. Program girdilerini ise
standart girdi aracı olan klavyeden alır.
Eğer
bu bilgiler bir ekran boyundan (normalde 25 satır) fazla tutuyorsa
bazı satırlar programcının gözünden kaçabilir. Bunu önlemek
amacıyla standart çıktı ve hata bir dosyaya yazılacak şekilde
ayarlanabilir. Yönlendirme olarak da bilinen bu işlem UNIX altında
(DOS'ta olduğu gibi) >
karakteri ile gerçekleştirilir.
Örnek
olarak o an bulunduğunuz dizinde yeralan dosyaları ekrana getirin :
$ ls -al
Bu
komut, standart çıktı olarak dosyaların bilgilerini ekrana
getirecektir. Bu çıktıyı, bir dosyaya yönlendirelim ve dosyanın
içeriğine göz atalım:
$
ls -al > liste
$
cat liste
total
16
drwxr-xr-x
5 gorkem users 1024 Feb 13 13:10 .
drwxr-xr-x
4
root
root
1024
Jan
7
1980
..
-rw-r--r--
1 gorkem users 390 Feb 13 12:56 .Xdefaults
-rw-r--r--
1 gorkem ftpadm 2016 Feb 13 13:09 .bash_history
-rw-r--r--
1 gorkem users 1 Feb 13 12:57 .bashrc
-rw-r--r--
1 gorkem users 163 Nov 24 1993 .kermrc
-rw-r--r--
1 gorkem users 34 Nov 24 1993 .less
-rw-r--r--
1 gorkem users 114 Nov 24 1993 .lessrc
drwxr-xr-x
2 gorkem users 1024 Jan 7 1980 .term
-rw-r--r--
1 gorkem users 87 Feb 13 12:56 .xinitrc
-rw-r--r--
1 gorkem users 2795 Feb 13 13:06 adres
-rw-r--r--
1 gorkem users 0 Feb 13 13:10 liste
drwxr-xr-x
2 gorkem users 1024 Feb 13 12:54 mail
drwxr-xr-x
2 gorkem users 1024 Feb 13 12:54 perl
-rw-r--r--
1 gorkem users 0 Feb 13 13:10 typescript
$
Standart
Çıkış
ve
Standart
Hatanın
Yönlendirilmesi
>
karakteri standart hatayı dosyaya yönlendirmez. Bu işlem için 2>
kullanılır.
Yönlendirme
için temel kullanım şekli aşağıdaki gibidir :
komut
[n]>dosya
n
sayısı hangi dosya işaretçisinin yönlendirileceğini belirtir.
Bu sayı verilmediği takdirde veya 1 olarak verildiği takdirde
standart çıkış için yönlendirme yapılır. Eğer n sayısı 2
olarak verilirse standart hata için yönlendirme yapılır.
Ama
hatayı görebilmek için, hata yaratan bir komut yazmalıyız, değil
mi ?
$ ls /deneme
/deneme : No such
file or directory
$ ls /deneme 2>
hata
$ cat hata
/deneme : No such
file or directory
Standart
çıktı ya da standart hatayı yönlendirirken, >
işareti kullanırsanız; dosya yoksa, oluşturulur ve komutun
çıktısı dosyaya yazılır. Dosya varsa, içeriği yok olur, ve
komutun çıktısı dosyanın yeni içeriği olur.
Var
olan bir dosyayının eski içeriğini tamamen silmek değil de
komutun çıktısını dosyaya eklemek istiyorsanız >>
kullanmalısınız. Bu durumda dosya varsa komutun çıktısı
dosyanın eski içeriği korunarak sonuna eklenir, dosya yoksa
oluşturulur ve komutun çıktısı dosyaya yazılır. Örneğin:
$ echo deneme1
>>deneme.txt
$ cat deneme.txt
deneme1
$ echo deneme2
>>deneme.txt
$ cat deneme.txt
deneme1
deneme2
$
Örnekte
görüldüğü gibi ilk komut deneme.txt
dosyasını oluşturdu. İkincisi ise oluşan dosyanın içeriğini
koruyarak ikinci komutun çıktısını bu dosyanın sonuna ekliyor.
Bir Komutun Çıktısını Başka Bir
Komutun Verisi Olarak Kullanmak Boru (pipe)
Bazı
durumlarda, bir komutun çıktısı diğer bir komuta
yönlendirilebilir. Başka bir deyişle, komutun standart çıktısını
bir dosyaya değil, bu çıktıyı işleyecek başka bir komuta
yönlendirmek istiyorsunuz. Bu amaçla UNIX altında (yine DOS'ta
olduğu gibi) boru “|” karakteri kullanılır.
Komut1 |
komut2
Bu karakter,
kendinden önce gelen komut veya komut serisinin çıktısını,
kendinden sonra gelen komuta gönderir. Örneğin bir dizinde yeralan
tüm detaylı dosya bilgilerini yazıcıya aktarmak için,
$ ls -al | lpr
komutları
kullanılabilir. Artık ls
-al komutunun ekrana vermesi gereken tüm bilgiler, lpr
komutu aracılığıyla yazıcıya gönderilmiştir. İlk komutun
standart çıktısı, ikinci komuta standart girdi olarak atanır.
Aşağıdaki
komut rapor adı verilen dosyanın içeriğini wc –l
komutuna yönlendiriyor. Bu komutun çıktısı ise satırsayısı.txt
dosyasına yazılıyor. Böylece ekranda görmeyi beklediğiniz tüm
veriler yönlendirme karakteri yardımı ile satırsayısı.txt
dosyasına yerleştiriliyor.
$ cat rapor.txt | wc –l >
satırsayısı.txt
Unix boruları
sayesinde bir önceki komutun çıktısı üzerinde işlem yapabilen
komutlar kullanılabilmektedir. Bu kullanım şekli en çok grep,
wc, sort gibi
filtre programları tarafından terçih edilmektedir.
wc Komutu
Bir
dosyadaki
byte
,
kelime
ve
satırları
saymak
için
wc
komutu
kullanılır.
Bu
komutun
temel
yapısı
aşağıdaki
gibidir
:
wc [seçenekler] [dosya]
İşlenecek
dosya verilmediği takdirde wc komutu verileri standart girişten
okuyacağını varsaymaktadır. Bu sayede wc komutu Unix boruları
ile bir önceki komutun çıktısını alıp işleyebilmektedir.
wc
komutu ile kullanılanabilecek temel seçenekler aşağıdaki gibidir
:
- -c : Dosyadaki byteları sayar.
- -l : Dosyadaki satırları sayar.
- -w : Dosyadaki kelimeleri sayar.
- -L : Dosya içindeki en uzun satırın boyutunu gösterir.
[tufan@atlas
kurs_ornek]$ cat wc_ornek
wc
icin ornek
123
en
uzun satir bu ve boyu 27
[tufan@atlas
kurs_ornek]$ ls -l wc_ornek
-rw-r--r--
1 tufan users 47 Aug 23 11:05 wc_ornek
[tufan@atlas
kurs_ornek]$ cat wc_ornek | wc -c
47
[tufan@atlas
kurs_ornek]$ cat wc_ornek | wc -w
11
[tufan@atlas
kurs_ornek]$ cat wc_ornek | wc -l
4
[tufan@atlas
kurs_ornek]$ cat wc_ornek | wc -L
27
Metin Dosyalarının
İçeriklerinin Sıralanması (sort)
Metin
dosyaları
üzerinde
sıralama
işlemi
sort
komutu
ile
yapılır.
Bu
komut
satırları
verilen
sıralama
kriterine
göre
sıralar
ve
sonucu
standart
çıkışa
aktarır.
Komutun
temel
kullanım
şekli
aşaağıdaki
gibidir
:
sort
[seçenek] dosya
Dosya
ismi verilmediği takdirde veriler standart girişten
okunacaktır.Sort komutu ile kullanılabilecek temel seçenekler
aşağıdaki gibidir:
[tufan@seawolf
tufan]$
cat
sort_deneme
linux
kurs
isletim
sistem
[tufan@seawolf
tufan]$
sort
sort_deneme
isletim
kurs
linux
sistem
Metin İçinde Arama ve Grep Komutu
Metin
dosyaları
arasında
istenilen
paternleri
aramak
için
grep
komutu
kullanılmaktadır.
Grep
komutu
dosyalar
üzerinde
istenilen
metin
parçasını
arar
ve
bu
metin
parçasını
içeren
satırları
standart
çıkışa
kopyalar.
Temel
kullanım şekli aşağıdaki gibidir :
grep
[seçenekler] patern [dosya]
Dosya
ismi verilmediği takdirde verilerin standart girişten okunacağı
varsayılır. Bu sayede Unix boruları kullanılarak bir komutun
çıktısında istenilen bir metin parçası aranabilir.
Grep
ile kullanılan temel seçenekler aşağıdaki gibidir :
- -l : Metin parcasının geçtiği satırların gösterilmesi yerine metin parçasının geçtiği dosyaların isimleri gösterilir. Çoğunlukla bir dizin içinde belirli bir kelimeyi içeren dosyaların bulunması işlevinde kullanılır.
- -c : Metin parçasının geçtiği satırların gösterilmesi yerine , metin parçasının bulunduğu satır sayısının gösterilmesini sağlar.
- -i : Büyük – küçük harf ayrımını ortandan kaldırır.
- -n: Bulunulan satırın dosyadaki satır numarası da gösterilir.ÇokgörevlilikUNIX'in en büyük silahlarından biri süreçlerdir. Her süreç sistemde bağımsız çalışan, birbirini etkilemeyen ve herbiri kendi kaynağını kullanan programdır. Süreçler arkaplanda veya kabuğun kontrolünde çalışabilir. Çekirdek, her sürecin kullandığı sistem kaynağından haberdar olur ve bu kaynakların süreçler arasında adilce paylaşılmasından Sorumludur. Bir süreç, aksi belirtilmedikçe çalıştığı süre içinde klavyeden bilgi alır ve ekrana bilgi verir.Kullanıcıların haberi bile olmadan çalışan süreçler, Linux makinasındaki G/Ç işlemlerini gerçekleştirebilmek için sürekli faaliyet içinde bulunurlar. Onlarca süreçten bazıları kullanıcıların sisteme girmesini sağlarken (getty) bazıları da WWW ve FTP gibi İnternet tabanlı istekleri yerine getirir (httpd, ftpd).
Ps Aracının Kullanımı
Çalışan programların listesini görmek için “ps” komutunu kullanabiliriz. Hiç parametre vermeden yazılırsa sadece üzerinde çalışılan kullanıcının süreçleri ekrana gelir.
[root@localhost ~]# psPID TTY TIME CMD7856 pts/0 00:00:00 bash10765 pts/0 00:00:00 ps
Sistemde çalışan tüm süreçlerin listesini görmek için aşağıdaki komutu çalıştırmalıyız.
[root@localhost ~]# ps -ePID TTY TIME CMD1 ? 00:00:03 init2 ? 00:00:00 migration/03 ? 00:00:00 ksoftirqd/04 ? 00:00:00 migration/15 ? 00:00:00 ksoftirqd/1.........
Ayrıntılı listeleme için l parametresini ekliyoruz.
[root@localhost ~]# ps -elF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD4 S 0 1 0 0 76 0 - 909 - ? 00:00:00 init1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:00 migration/01 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/01 S 0 4 1 0 -40 - - 0 migrat ? 00:00:00 migration/1...........
Ebeveyn süreçleri
[root@localhost ~]# ps -eFUID PID PPID C SZ RSS PSR STIME TTY TIME CMDroot 1 0 0 909 548 0 13:39 ? 00:00:00 init [3]root 2 1 0 0 0 0 13:39 ? 00:00:00 [migration/0]root 3 1 0 0 0 0 13:39 ? 00:00:00 [ksoftirqd/0]root 4 1 0 0 0 1 13:39 ? 00:00:00 [migration/1]
Bsd stilinde süreçlerin tümünü listelemek için ise
[root@localhost ~]# ps axPID TTY STAT TIME COMMAND1 ? S 0:00 init [3]2 ? S 0:00 [migration/0]3 ? SN 0:00 [ksoftirqd/0]
Bsd stilinde süreçlerin tümünü ayrıntılı listelemek için ise
[root@localhost ~]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0,0 3636 548 ? S 13:39 0:00 init [3]root 2 0.0 0.0 0 0 ? S 13:39 0:00 [migration/0]root 3 0.0 0.0 0 0 ? SN 13:39 0:00 [ksoftirqd/0]
Ebeveyn ve çocuk süreçleri hiyerarşik şekilde görüntüleyebilmek için
[root@localhost ~]# ps -ef –forestUID PID PPID C STIME TTY TIME CMDnamed 3193 1 0 13:39 ? 00:00:02 /usr/sbin/named -u namedroot 3254 1 0 13:39 ? 00:00:00 /usr/sbin/smartdroot 3272 1 0 13:39 ? 00:00:00 svscanroot 3274 3272 0 13:39 ? 00:00:00 \_ supervise submissionvpopmail 3302 3274 0 13:39 ? 00:00:00 | \_ /usr/bin/tcpserver -v -Rroot 3275 3272 0 13:39 ? 00:00:00 \_ supervise logqmaill 3299 3275 0 13:39 ? 00:00:00 | \_ /usr/bin/multilog t s100root 3276 3272 0 13:39 ? 00:00:00 \_ supervise sendqmails 3310 3276 0 13:39 ? 00:00:00 | \_ qmail-sendroot 3356 3310 0 13:39 ? 00:00:00 | \_ qmail-lspawn ./Maildqmailr 3357 3310 0 13:39 ? 00:00:00 | \_ qmail-rspawnqmailq 3358 3310 0 13:39 ? 00:00:00 | \_ qmail-clean
Bir başka araç ise pstree ‘ dir. Süreçleri ve alt süreçleri alfabetik sıra ile görümtüler.
[root@mail ~]# pstree
Bir kullanıcıya ait süreçlerin listesini görebilmek için (u) parametresini kullanıyoruz.
[root@localhost ~]# ps -u hakanPID TTY TIME CMD10402 ? 00:00:00 sshd10403 pts/1 00:00:00 bash
Süreçlerle birlikte işlemci ve bellek miktarlarınıda görmek istiyorsak.
[root@localhost ~]# ps -u hakan uUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDhakan 10402 0.0 0.1 8316 1432 ? S 12:25 0:00 sshd: hakan@pts/1hakan 10403 0.0 0.1 5288 1400 pts/1 Ss+ 12:25 0:00 –bash
Bir kullanıncının süreç numaraları ile birlikte ebeveyn süreç numaralarını görmek istersek , o durumda –f parametresini kullanmalıyız. PPID alanı ebeveyn süreçleri göstermektedir.
[root@localhost ~]# ps -fu hakanUID PID PPID C STIME TTY TIME CMDhakan 10402 10356 0 12:25 ? 00:00:00 sshd: hakan@pts/1hakan 10403 10402 0 12:25 pts/1 00:00:00 -bash
Ps aracının çıktılarındaki bazı parametreleri açıklayalım.
- PID: Süreç numarası. Her sürecin farklı bir numara alması sistem tarafından düzenlenir.
- %CPU: İşlemcinin % olarak ne kadarı süreç tarafından kullanılıyor ?
- %MEM: % olarak hafızada kapladığı yer
- SIZE: Programın toplam kullandığı bellek alanı (kilobyte)
- RSS: Programın bellekte kapladığı gerçek alan. Bu değer paylaşılan sistem kütüphaneleri (shared library) nedeniyle genellikle SIZE değerinden büyüktür.
- TTY: Sürecin çalıştırıldığı (sanal) terminal
- STAT: Süreç o sırada ne yapıyor ?
- S: Uyumakta, bu durum genellikle sürecin bir G/Ç işlemi (örneğin farenin hareketi ya da ağdan gelecek veriler) beklemesi sırasında olur.
- R: Çalışabilir. Çalışabilir süreçler, gereksinim duydukları bütün sistem kaynaklarına sahip olan süreçlerdir. Çekirdek (tek işlemcili bir makinada) belirli aralıklarla bu süreçlerden sadece birini çalıştırır.
- T: Durmuş. Bu durum sürecin kullanıcı tarafından (örneğin Control-Z tuşlarına basılarak) durdurulmasında görülür.
- Z: Zombie. Bu tür süreçler, kendisini çalıştıran sürece (parent process) mesaj bırakamadıklarından takılmış süreçlerdir. Öldürülemezler ancak sitem kaynaklarını da kullanamazlar.
- D: Kesilemez uykuda. Bazı G/Ç işlemleri o sırada bu işlemi yapan sürecin kesilmemesini gerektirir. Böyle durumdaki süreçleri de ilgili G/Ç işlemi bitinceye kadar öldüremezsiniz.
- START: Sürecin çalıştığı zaman
- COMMAND: Komut satırından girilen programın ismi
- PPID: Ebeveyn süreç numarası. Süreçlerin bağlı olarak çalıştıkları anasürüçlerin çalışma numarasıdır.
- VSS: Sanal bellek kullanım miktarını gösterir.
- SIZE: Hafıza kullanım miktarı. Eğer süreç swap alanından taşınırsa gerekli hafıza alanı miktarı.
- C: %CPU ‘e bakın
Ps komutu ile görmek istediğimiz değerleri seçme imkanına sahibiz. Ps komutu parametrelerinden değerlerni görmek istediklerimizi virgül ile ayırarak yan yana yazıyoruz. İstediğimiz parametreye göre sıralama imkanına da sahibiz. Aşağıdaki örnekte süre süreçler hafıza kullanım miktarına göre sıralanmıştır.
[root@mail ~]# ps -eo user,pid,ppid,%cpu,%mem,size,rss,command --sort=sizeUSER PID PPID %CPU %MEM SZ RSS COMMANDroot 2 1 0.0 0.0 0 0 [ksoftirqd/0]root 3 1 0.0 0.0 0 0 [events/0]........
Aşağıda çalışan proses için seçilen sutunlar, işlemci kullanımı yüzdesine göre sıralanmıştır.
[root@mail ~]# ps -eo pid,ppid,size,rss,%cpu,stat --sort=-%cpuPID PPID SZ RSS %CPU STAT3270 3238 156440 134528 0.2 S11155 3260 30064 31760 0.1 S4257 3260 35604 37724 0.1 S
Aşağıda yine httpd sürecine ilişkin seçilen alanların değeri görülmektedir. Dikkat edilirse –C parametresi ile süreçleri ismine göre seçebilmekteyiz.
[root@mail ~]# ps -o pid,ppid,stat -C httpdPID PPID STAT3496 1 Ss3522 3496 S3523 3496 S3524 3496 S3525 3496 S3526 3496 S3527 3496 S3528 3496 S3529 3496 S29317 3496 S
İsimler gibi süreç numaralarınıda kullanabiliriz.
[root@mail ~]# ps -p 3154 -o pid,ppid,statPID PPID STAT3154 1 Ssl
Top ile süreçlerin izlenmesi
Top aracı ps aracı ps aracının aksine, süreçleri anlık değişimleride içerecek şekilde izler.Sistem üzerinde bulunan uygulamalar, üzerlerindeki iş yüküne göre sürekli olarak kaynak taleb ederler. Sistem kaynakları, önceliklerine göre çalışan uygulamalar arasında sürekli olarak paylaştırılmaktadır. Top aracı bu anlık değişimleri sürekli olarak izleyebilmemize olanak tanır. Top aracının en temel kullanımı aşağıdaki gibidir.[root@localhost ~]# top
[root@localhost ~]# toptop - 21:00:39 up 7:21, 1 user, load average: 0.15, 0.03, 0.01Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombieCpu(s): 1.1% us, 0.3% sy, 0.0% ni, 98.0% id, 0.5% wa, 0.0% hi, 0.0% siMem: 1026120k total, 991608k used, 34512k free, 11372k buffersSwap: 2658748k total, 208k used, 2658540k free, 546068k cached
PID USER PR NI %CPU TIME+ %MEM VIRT RES SHR S COMMAND4687 apache 15 0 10 1:42.87 2.6 61512 26m 2208 D python5189 apache 15 0 2 1:57.79 3.9 73520 38m 2208 S python1 root 16 0 0 0:00.57 0.1 3636 548 468 S init2 root RT 0 0 0:00.03 0.0 0 0 0 S migration/0...........
Yukarıda görüldüğü üzere sistem kaynaklarında anlık olan tüm değişmeleri izlemektedir. İlk bölümde sisteme bağlanmış olan kullanıcı sayıları ve sistem yükünü görüntüler. Hemen takib eden satırda sistemde çalışan süreç sayısı ve bu süreçlerin durumlarıyla ilgili istatistiki veriler gelir. Sonraki alanlar ise sırasıyla işlemci,hafıza ve takas alanı ile ilgili verilerdir. İkinci bölümde ise süreçler ayrıntılı olarak sütünlarda listelenir. Sütünlardaki parametrelerin büyük bir bölümü ps aracındaki ile aynıdır.
[root@localhost ~]# top –d 10 (sonucları 10 saniyede bir günceller varsayılan değer 3 saniyedir)
[root@localhost ~]# top –u hakan (sadece hakan kullanıcısına ait süreçleri görüntüler.)
[root@localhost ~]# top –p 4687,5189 numaralı süreçlerin durumunu görüntüler.
Süreçlerde Arama işlemleri
Çalışan süreçler üzerinde değişiklikler yapabilmemiz için öncelikle o süreci hafızada bulmamız gerekir. Süreçlerin durumu hakkında bilgi almak , süreçlerin çalışma önceliklerini değiştirmek, yada süreçleri öldürmek , süreçler üzerinde yapabileceğimiz değişikliklerdendir.Hafızada süreçleri aramak için pgrep komutunu kullanbiliriz.
Pgrep aracı
[root@localhost ~]# pgrep init1
Eğer süreç numarası ile birlikte süreç isminide döndürmek istiyorsak (-l) parametresini eklemeliyiz.
[root@localhost ~]# pgrep -l named3193 named
Pgrep aracını herhangi bir kullanıcıya ait olan bir süreçleri bulmak içinde kullanbiliriz.
[root@localhost ~]# pgrep -lu root1 init2 migration/03 ksoftirqd/0
Fuser Aracı
Süreçleri bulmak için kullanabileceğimiz bir başka araç ise fuser ‘dır. Bu araç süreçlerin işlem için açtıkları dosyaları yada TCP/IP soketlerini bulabilir. Bulduğu bu kullanımda olan dosya ve soketleri proseslere sinyaller göndererek kapatabilir. Sisteme bağlanmış olan disk bölümlerindeki açık halde bulunan dosyaları kapatmak için ideal bir araçtır. Böylelikle açık kalan bu dosyaların kapatılmasıyla disk bölümleri düzgünce sistemden çözülebilir. Aşağıdaki örnekte yedek dizinini kullanan süreçler listeleniyor.
[root@lnx ~]# fuser -m /mnt/yedek/mnt/yedek: 2456c
Diğer bir kullanım şekli ise u parametresi ile sürüç numaralarının yanısıra kullanıcıları görüntülemektir. Aşağıdaki örnekte yedek dizinini kullanan süreçlerin süreç numaralarıyla birlikte bu süreçlerin sahpleri listelenmiştir.
[root@lnx ~]# fuser -u /mnt/yedek/mnt/yedek: 2456c(mehmet) 2608c(root)
Daha ayrıntılı bir çıktı için:
[root@lnx ~]# fuser -mauv /mnt/yedek
USER PID ACCESS COMMAND/mnt/yedek: mehmet 2456 ..c.. (mehmet)bashroot 2608 ..c.. (root)bash
Bu dizinde açık olan süreçleri öldürmek içinse
[root@lnx ~]# fuser -k /mnt/yedek/mnt/yedek: 2456c 2608c
Komutunu kullanabiliriz . Bu komuttan sonra dizinlerdeki son duruma bir daha göz atalım. Aşağıda görüldüğü üzere bu dizini kullanan tüm süreçler ölmüştür.
[root@lnx ~]# fuser -mauv /mnt/yedek
USER PID ACCESS COMMAND/mnt/yedek:
Ps komutunun çıktısında arama yapmak
Ps komutunun çıktısını grep aracına yönlendirerek hafızadaki süreçlerde arama yapabiliriz. Bsd stilinde ps çıktısında arama için[root@mail ~]# ps aux | grep clamdroot 3238 0.0 0.0 2132 216 ? S 05:31 0:00 supervise clamdclamav 3264 0.2 13.4 160780 137560 ? Sl 05:31 2:15 /usr/sbin/clamdqmaill 3265 0.0 0.0 2432 316 ? S 05:31 0:00 /usr/bin/multilog t s1000000 n100 /var/log/qmail/clamdroot 30104 0.0 0.0 6432 648 pts/0 S+ 23:27 0:00 grep clamd
diğer bir yöntem ise;
[root@mail ~]# ps -el | grep clamd4 S 46 3264 3238 0 76 0 - 40195 - ? 00:02:17 clamd
Süreçlerin arkaplanda çalıştırılması
Herhangi bir uygulamayı terminalden yada konsoldan çalıştırdığımızda, komut satırı,komutun çalışması bitene kadar başka bir komutu girmemize izin vermez. Bunun anlamı bu komutun önplanda çalışmasıdır. Eğer komutun işini birmesini istemiyorsak , komutu çalıştırırken arkaplanda çalımasına devam etmesini söylememiz gerekmektedir. Bunun için komuttan hemen sonra bir “&” işareti eklememiz gerekmektedir.
[root@lnx ~]# firefox &[1] 3549
Parantezin içindeki bir rakamı sürecin sıra numarasıdır. Diğer rakam ise tahmin edileceği üzere süreç numarasıdır. Sürecin sıra numarasının bir olmasının anlamı sistem tarafından “İlk önce bu süreç bitirilmeye çalışıcaktır.” anlamındadır. Bir başka uygulamayı daha çalıştıralım.
[root@lnx ~]# tsclient &[2] 3585
Bu durumdada tsclient uygulaması arkaplanda çalışacak şekilde çalıştırılıyor. Süreç iş numarası 2 değerini almıştır. Arka planda çalışan süreçlerin tümünü görmek istersek jobs komutunu kullanmamız gerekir.
[root@lnx ~]# jobs[1]- Running firefox &[2]+ Running tsclient &
Arka planda çalışan bir komutu tekrar ön planda çalıştırmak için fg komutunu kullanıyoruz.
[root@lnx ~]# fg %1Firefox
Firefox uygulamasının süreç sıra numarası 1 dir %1 parametresi ile uygulamayı tekrar ön plana almış olduk. Ön planda çalışan bir komutu arka plana göndermeden önce o komutu durdurmamız gerekmektedir. Bu işlemi ctrl+z tuş kombinasyonu ile yapabiliriz. En son durumda firefox uygulamasını ön plana almıştık. Bu uygulamayı tekrar arka plana almak için ilk önce uygulamayı ctrl+z tuş kombinasyonu ile durduruyoruz.
[root@lnx ~]# fg %1firefoxctrl+z[1]+ Stopped firefox
Daha sonra tekrar arka planda çalıştırmaya devam etmek için bg komutunu kullanıyoruz.
[root@lnx ~]# bg %1[1]+ firefox &Bir diğer komut ise disown komutudur. Bu komut bir kabuğa bağlı olan bir süreci o kabuğa bağımlı olmaktan kurtarır. Böylelikle kabuk ölse dahi süreç çalışmaya devam edecektir.
[root@lnx ~]# disown %3 Süreç numarası 3 . olan işlemin kabukla bağlantısını keser.[root@lnx ~]# disown -a Tüm işlerin kabukla bağlantısını keser.[root@lnx ~]# disown -h Kabuğa bağlı olarak çalışan tüm süreçleri gönderilen HUP
sinyalinden korur.
Süreçlerin Sona Erdirilmesi
Her an çalışan süreçlerden biri veya birkaçı, beklenmedik döngüye girebilir. Bunun sonucu olarak sistemin kaynaklarını, özellikle hafızayı tüketici bir duruma gelebilir. Bu tür kısır döngüye giren süreçleri bulup, eğer hayati önem taşımıyorlarsa `öldürmek' gerekir. Süreci öldürmekten kasıt, programı tamamen durdurarak sistemle ilişkisini kesmektir. Bu sayede programın hafızada kapladığı bölge serbest kalacak, çekirdek de hafıza düzenlemesini tekrar yaparak başka süreçlere daha fazla yer ayıracaktır. Bir süreci öldürmek için kill komutu kullanılır. Yukarıdaki 67 numaralı sürece ait /usr/sbin/rpc.mountd programını öldürmek için şunları yazın :[root@lnx ~]# kill 67
Birçok süreç sizden bu mesajı aldıktan sonra, dosya sistemi üzerinde yarattığı geçici dosyaları, dosyalar üzerine koyduğu kilitleri temizlemek gibi yapması gereken işlemleri yaptıktan sonra çalışmasına son verecektir. Eğer öldürmeye çalıştığınız süreç herhangi bir nedenle takılmışsa ve bu komuta tepki vermiyorsa aşağıdakini deneyin:
[root@lnx ~]# kill -9 67
Artık programın sistemle ilişkisi tamamen kesilmiştir. Kill komutu, -9 seçeneğiyle sürece 9 numaralı sinyali gönderir. Bu sinyali alan sürecin yukarıda sözü edilen iki özel durum dışında çalışmayı sürdürmesi olanaksızdır. -9 seçeneğini özellikle sistem süreçleri üzerinde gerekmedikçe kullanmamalısınız.
Süreçleri , süreç numaralarına gerek duymadan isimleriyle öldürebilmek için killall komutu kullanılır.
[root@lnx ~]# killall httpd
Herhangi bir X oturumunda yanıt vermeyen bir uygulamayı öldürmek için ise xkill komutunu kullanıyoruz.
[root@lnx ~]# xkill
Daha sonra komutla birlikte beliren işaretçiyi takılan uygulama penceresini tıklıyoruz.ALINTIDIRKAYNAK:www.belgeler.org