Orta Düzey Linux Komutları2
Orta Düzey Linux Komutları2
1 . 2- Boru ( pipe ) İşlemleri
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 . 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 dosyaları yazıcıyğ a
aktarmak için ,
$ komut | komut
$ 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 . Diğer bir örnekte , README dosyasında kaç satır olduğu bulunuyor . Bir
dosyadaki veya komut çıktısındaki satır , karakter ve kelime sayılarını bulmak için wc komutunu
kullanabilirsiniz . Aşağıdaki komut , dosya . txt dosyasının içinde kaç satır olduğunu ekrana
yazar :
$ wc -l dosya . txt
40
wc komutunun parametreleri şunlardır:
-l : satır sayısını bulur
-w : kelime sayısını bulur
-c : karakter sayısını bulur
Yönlendirme ve boru işlemleri bazen insanın kafasını karıştırabilir . Yönlendirme , bir
programdan bir dosyaya yapılabilir , fakat bir komut'dan başka bir komut'a yönlendirme
yapamazsınız . Benzer şekilde , iki dosyanın arasında boru işlemi uygulamak mümkün olmaz .
Aşağıda /etc dizini içinde yeralan alt dizinlerin tamamı listelenmiştir .
$ ls -F /etc | grep -/-
acct/
cron . d/
default/
ki komuttan daha fazla komutu içeren bir boru i lemi olu turulabilirİ ş ş :
$ head -10 dante | tail -3 | lp
request id is printerA-177 ( standart input )
Şimdi de biraz karışık bir örnek:
# ps -aux|grep inetd|grep -v grep|awk "{print $2}"|xargs kill
-1
Yukarıdaki örnek zorlama bir örnek değil , bir Linux sistem yöneticisinin her an kullanması
gerekebilecek türden . Bu örneği burada ayrıntılı olarak açıklamayacağız , sadece pipe
kullanarak ne kadar fazla sayıda komutun birbirine bağlanabildiğini göstemek amacıyla
verilmiştir . Bu ve benzeri komutların ayrıntılı açıklamaların kabuk programlamayla ilgili
bölümde bulabilirsiniz .
Standart çıktıyı mevcut bir dosyaya yönlendirmek önceki dosya içeriğinin kaybına yol açacak
olan üzerine yazma işlemini gerçekleştirir . Mevcut veri üzerine yeni veri yazma işlemi
‘clobbering' olarak olarak adlandırılır . Bunun gerçekleşmesini engellemek için kabuk
‘noclobber' opsiyonunu sunar . Aşağıda kabuk içinde noclobber opsiyonu set komutu
yardımı ile aktive edilmiştir .
$ set -o noclobber
$ set -o | grep noclobber
noclobber on
$ ps -ef > file_new
$ cat /etc/passwd > file_new
ksh: file_new: file already exists
$
Geçici olarak noclobber opsiyonunu de-aktivate etmek istersek >| kombinasyonunu
kullanmamız gerekmektedir .
$ ls -l >| file_new
2- Çok Görevlilik
UNIX"in en büyük silahlarından biri süreçlerdir . Her süreç sistemde ba ımsız çalı an , birbirinğ ş i
etkilemeyen ve herbiri kendi kaynağını kullanan programdır . Süreçler arka planda 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 eşit bir şekilde 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 ) .
UNIX/Linux altında çalışan her program en az bir süreçten oluşur . İşletim sistemleri teorisine
göre her süreç diğer süreçlerden bağımsızdır . Bilgisayar kaynaklarının paylaşımı istenmediği
sürece her süreç belleğe alınır ve CPU bu sürece tahsis edilir . Bir sürece ayrılan bellek alanını
başka bir süreç kullanmak istediği zaman buna teşebbüs eden süreç öldürülür . Burada öldürme
terimi hiçbir sürece hiçbir kaynağın tahsis edilmeyerek sürecin pasif hale bırakılması halidir .
UNIX/Linux tipi işletim sistemlerinin kararlı biçimde çalışması bu yaklaşımın neticesidir .
Yani bir kullanıcıya ait bir uygulama ne diğer kullanıcı programlarına , ne de işletim sistemine
etki eder .
Buradaki anlamı ile süreç , icra edilen bir programdır . Bu program icra esnasında , işletim
sistemi tarafından durdurulabilir ve bekletildikten sonra tekrar çalıştırılabilir .
İşletim sisteminde her süreçle ilgili bilgileri saklayan bir süreç tablosu vardır . Bu süreç tablosu ,
-Her süreç ile ilişkili bilgileri kaydeder
-Program kodu ile ilişkili veriyi kaydeder
-Program sayacı ( program counter ) , yığıt göstergesi ( stack pointer ) ve diğer yazmalar
ile ilişkili diğer bilgileri saklar .
Her sürecin ebeveyn süreci ( parent process ) ve çocuk süreci ( child process ) olabilir . Ebeveyn
süreç , söz konusu sürece referans verir . Çocuk süreç ise söz konusu süreç tarafından referans
verilen süreçtir .
Her süreci di erlerindeğ n ayırtan tek bir ( unique ) kod vardır; buna süreç belirleyici ( process
identifier PID ) adı verilir .
Örneğin kullandığınız WWW tarayıcınız bir süreçtir .
3- Arka Planda Çalıştırma
Bir komutu arka planda çalıştırmak için , komutun sonuna & karakteri getirilir . Komut
girildikten sonra tekrar kabuk istemcisine düşecek ve kaldığınız yerden devam edebileceksiniz .
Program , arka planda diğer süreçlerle çakışmadan bir süre çalışır ve işi bittiğinde durur .
$ sort buyuk_dosya > buyuk_dosya . sirali &
[1] 772
Komutun arka plana atılmasından sonra ekranda yeralan 1 , sürecin sıra numarasını , 772 sayısı
ise süreç kimliğini ( Process ID ) gösterir . Her program , sistem kaynaklarını biraz daha
azalttığından genel anlamda makina yavaşlar .
ps komutu , sistemde o esnada mevcut süreçler hakkında , durum bilgisi , boyut , isim , sahiplik ,
CPU zamanı , duvar saati zamanı vb . bilgileri listeleyen bir komuttur . ps komutunun pek çok
parametresi mevcuttur . Bunalar arasında en önemli olanlar aşağıda tabloda listelenmiştir:
PARAMETRE ANLAMI
-a
Belirli bir terminal kontrolündeki listele ( sadece
aktif kullanıcıların süreçleri değil )
-r Sadece çalı makta olan ( running ) süreçleri listelş e
-x Bir terminal kontrolünde olamayan süreçleri listele
-u Süreç sahiplerini listele
-f Süreçler arasındaki ebeveyn çocuk ilişkilerini
göster
-l Uzun formatlı bir liste üret
-w Bir sürecin komut satırı parametresini göster ( kısa
biçim )
-ww Bir sürecin komut satırı parametresini göster ( uzun
biçim )
ps komutu ile birlikte kullanılan en sık parametre kümesi -auxww şeklindedir . Böylece tüm
süreçler , bunların sahipleri , tüm süreçlerin komut satırı parametreleri listelenir . Aşağıda ,
# ps -auxww
komutu sonucu elde edilen bir liste görülmektedir .
Sütün Başlığı Anlamı
USER Sürecin sahibi olan kullanıcı
PID Süreç belirleme numarası
%CPU CPU'nun toplam kullanımının yüzde kaçının o süreç
tarafından kullanıl dığı bilgisi
%MEM Süreç tarafından belleğin yüzde kaçının
kullanıldığı bilgisi
VSZ Sürecin kullandığı görüntü bellek miktarı
TTY Süreci kontrol eden terminal . Bu sütunda bir ?
sembolünün olması , sürecin artık terminal
kontrolünde olmadığını gösterir
STAT Sürecin o anki durumu
START Sürecin başlangıç zamanı
TIME Sürecin CPU da harcadığı süre
COMMAND Sürecin adı ve komut satırı parametreleri
A a ıdaki tablo STAT parametresinin alabilece i de erleri göstermektedir ş ğ ğ ğ :
S
Süreç uyuyor . İcra edilmeye hazır olan süreçlerin
tümü uykudadır .
R Süreç CPU da işlem görüyor .
D Süreç araya girilemez biçimde uykuda .
T Süreç ya bir hata ayıklayıcıda inceleniyor yada
durdurulmuştur . ( kullanıcı tarafından ctrl -Z vb .
şekilde )
Z Süreç ‘zombie' durumundadır . Bunun anlamı ,
a ) ebeveyn süreç çocuğu olan sürecin öldüğü
hakkında bilgi sahibi değildir
b ) veya ebeveyn süreç kural dışı öldürüldüğü
için init süreci çocuk süreci yok edemez .
Zombie durumundaki süreçler öldürülemez ancak
sistem kaynaklarından da yararlanamaz . Bu durum
genellikle kötü yazılmış bir yazılımın sonucu
oluşur .
Bir örnek :
$ ps
PID TTY STAT TIME COMMAND
76 v02 S 0:00 -bash
111 v02 R 0:00 ps
$ ps -aux
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
bin 63 0 . 0 5 . 5 64 364 ? S 11:12 0:00
/usr/sbin/rpc . portmap
mehmet 76 0 . 0 9 . 7 101 644 v02 S 11:12 0:00 -bash
mehmet 112 0 . 0 5 . 0 59 332 v02 R 11:16 0:00 ps -aux
root 1 0 . 0 5 . 0 56 332 ? S 11:12 0:00 init
[5]
root 6 0 . 0 4 . 2 35 284 ? S 11:12 0:00 bdflush
( daemon )
root 7 0 . 0 4 . 2 35 284 ? S 11:12 0:00
update ( bdflush )
root 48 0 . 0 5 . 1 45 340 ? S 11:12 0:00
/usr/sbin/crond -l10
root 59 0 . 0 5 . 5 53 364 ? S 11:12 0:00
/usr/sbin/syslogd
root 61 0 . 0 5 . 0 44 336 ? S 11:12 0:00
/usr/sbin/klogd
root 65 0 . 0 5 . 5 62 364 ? S 11:12 0:00
/usr/sbin/inetd
root 67 0 . 0 5 . 8 79 388 ? S 11:12 0:00
/usr/sbin/rpc . mountd
root 69 0 . 0 6 . 0 88 400 ? S 11:12 0:00
/usr/sbin/rpc . nfsd
root 75 0 . 1 9 . 9 115 660 v01 S 11:12 0:00 -bash
root 77 0 . 0 4 . 6 52 304 v03 S 11:12 0:00
/sbin/agetty 38400 tty3
root 78 0 . 0 4 . 6 52 304 v04 S 11:12 0:00
/sbin/agetty 38400 tty4
root 79 0 . 0 4 . 6 52 304 v05 S 11:12 0:00
/sbin/agetty 38400 tty5
root 80 0 . 0 4 . 6 52 304 v06 S 11:12 0:00
/sbin/agetty 38400 tty6
root 81 0 . 0 5 . 5 42 368 ? S 11:12 0:00 gpm
-t ms
ps komutuna bilgisayar üzerinde çalı tı ınız her an ihtiyaç duymanız mümkündür , bu yüzdeş ğ n
çeşitli parametrelerle kullanılması iyi anlaşılmalıdır
Sitemizde yer alan tüm içerikler internet ortamından toplanmış ve derlenmiştir. Yer alan bilginin doğruluğu garanti edilmemektedir. Yanlış bilgi için tarafımıza sorumluluk yüklenemez. Yanlış bilginin doğuracağı etkenlerden sitemiz ve yöneticileri sorumlu tutulamaz.