Kendi meşrebinde hem blog, hem Türkçe dökümantasyon

Etiketler

18 Kasım 2008 Salı

MacOS X ve ls komutu

Güncelleme :
Yazımı okuyan sevgili N.Burak Yetgin'in haklı ikazı üzerine, "peki finder varken ls komutunu neden kullanayım?" sorusuna açıklık getirmek istiyorum. Yazıdaki amacım, standart Mac kullanıcısı, bilgisiyarındaki dosyalara gözatarken otomatikman finder'ı kullanır. Finder pek çok açıdan faydalı ve iş gören bir uygulama/özelliktir. Pek çok dosya, sistem icabı "hidden" yani gizli/görünmez durumdadır. Amacım, gerçekten fiziksel olarak dosyaların ne durumda olduğunu anlama, yönetme ve yetkilendirme açısından shell/Terminal komutlarının da her kullanıcının işine yarayabileceğini göstermek.

Genelde Windows kullanımından Mac'e geçiş olunca, GUI ( Graphical User Interface ) alışkanlığımız devam etmektedir. GUI kolay ve rahat bir şeydir fakat genelde arka planda ne olduğundan hiç bir zaman haberimiz olmaz!

Her nekadar karmaşık gibi görünse de, Terminal/shell kullanarak bilgisayara daha fazla hükmetme/kontrol etme şansına sahip oluruz!


"Directory Almak" nedir? Eğer benim gibi Commodore 64'le başladıysanız:
load "$",8
komutunu biliyorsunuzdur! Bu komut disketin içindeki listeyi bize gösteren komuttur. Yani "Directory"yi... Windows kullanıcıları genelde "My Computer" a tıklar ve folder( dizin )'leri listeler. Pek çok kişinin kullanmadığı Command Prompt ( Start > Run > cmd.exe ) a çıkarak da aynen directory'i listeleyebilirsiniz :
c:\dir
Linux / Unix işletim sistemlerinde aynı işi yapan ls komutulu bulunmaktadır. Kullanımı :
$ ls
şeklindedir. Genelde her komuta karşılık gelen bir yardım/açıklama sayfası bulunur. Buna MAN PAGES yani kullanım kılavuzu ( manual ) sayfası denir. Eğer komutun ne işe yaradığını bilmiyorsanız bunu anlamak için :
$ man KOMUT
yaparsınız. yani ls komutunun olaylarını anlamak için :
$ man ls
yaparsınız. Karşınıza devasa bir açıklama sayfası çıkar. Genelde ben çoğu şeyin nasıl yapıldığını ve kullanıldığını tam anlayamam. Sanırım daha üstün anlama kabiliyeti olan insanlar için tasarlanmış bu yardım sayfaları.



man sayfalarında "space" tuşuna basarak yazının devamını görürsünüz. ( yani -more- manasında ). Çıkmak için "q" ve bu metin içinde arama yapmak için "/" ( bu tuş numerik klayve üzerindeki slash yada shift+7'ye basınca çıkan slash )

Eğer bu help dosyasını daha rahat okumak isterseniz, "ya keşke şunu bir text editörle filan açabilsem rahat rahat okusam" derseniz :
$ cd ~/Desktop
$ man ls | col -b > ls_help.txt
$ open ls_help.txt
Böylece "pipe" yardımıyla, "man ls" den dönenleri "col" komutuna geçtik. Bu iki işlemden dönen sonucu da "ls_help.txt" dosyasına dönüştürdük. Neyse, "ls" komutuna geri dönüyorum. Sizinde gördüğünüz gibi, ls'ye ait tonlarca parametre, özellik mevcut. Ben en çok kullandığım bir-iki özelliği sizinle paylaşmak istiyorum. Linux'un türüne göre ls komutu da farklılıklar gösteriyor. Örneğin pek çok linux sürümünde directory'i renkli görmek işlemi "--color" ile gerçekleşirken MacOS'da durum farklı. ( Bilemiyorum belki darwin-kernel için farklı bir BSD olayı olabilir )

Bulunduğunuz dizin ( folder/directory ) de ne var ne yok görmek için :
$ ls -al
demeniz gerekiyor. Bu, adı nokta ile başlayan dosya/dizin'leri de gösteren ( a ) ve gösterme şekli olarak da en detaylı ( l ) yani "long format" denilen şekilde bilgiyi ekrana yollar.

Bu şekilde listeleme yapınca karşımıza şu tarz bir görüntü çıkar :
rwxrwxrwx@  1 vigo  staff      13780  1 Kas 15:30 TexmateFirefoxSplit.app
drwxr-xr-x 31 vigo staff 1054 16 Kas 23:13 Trash
drwxr-xr-x 17 vigo staff 578 28 Eki 09:33 Vice2.0.6
drwxr-xr-x@ 7 vigo staff 238 23 Eyl 06:02 Warblade Full
-rw-r--r-- 1 vigo staff 166069960 17 Kas 19:34 cf208.mp4
-rwxr-xr-x@ 1 vigo staff 886 9 Kas 22:22 deneme.sh
-rw-r--r--@ 1 vigo staff 61087 16 Kas 23:07 fisherking.jpg
-rw-r--r--@ 1 vigo staff 99 25 Eki 20:26 index.php
İlk blok, yani rwxrwx şeklinde görünen alan "file attributes/permissions" şeklinde ifade edilir. Yani bir dosyamı? directory ( dizin ) mi? sahibinin hakları, grubun hakları, diğerlerinin hakları şeklinde bir anlam ifade eder. "deneme.sh" dosyasının bulunduğu satıra bakılırsa :
-rwxr-xr-x@  1 vigo  staff        886  9 Kas 22:22 deneme.sh
- : bunun bir standart file ( dosya ) olduğunu, ( ilk karakter )
rwx : bu dosyanın sahibinin ( yani owner ) read , write ve execute ( okuma , yazma ve çalıştırma ) haklarına sahip olduğunu,
r-x : bağlı bulunduğu grubun read ve execute hakkı olduğunu,
r-x : yine diğer ( others ) lerinin de read ve execute hakkı olduğunu
gösterir. ( -rwxr-xr-x@ )

Eğer ilk karakter d ise bu file değilde directory ( folder yani dizin ) olduğu anlamındadır. Başka harfler de görmek mümkün ( b , c , l , s , p )

Bu garip harflerden sonra gelen sayısal değer "kaç tane link" olduğu anlamındadır. Yani eğer bu bir folder olsaydı ( d ) ve sayı olarak da 3 yazsaydı, buradan şunu anlardık, "bu folder altında 3 tane dosya var"

Keza;
drwxr-xr-x@  7 vigo  staff        238 23 Eyl 06:02 Warblade Full
Baktığımızda, "Warblade Full" ün bir directory/folder ( dizin ) olduğunu ve altında 7 adet link ( bu dosyada olabilir, folder da ) olduğunu görürüz. İçine girince;
vigbookpro:Desktop vigo$ ls -al Warblade\ Full/
total 184
drwxr-xr-x@ 7 vigo staff 238 23 Eyl 06:02 .
drwx------+ 28 vigo staff 952 17 Kas 20:02 ..
-rwxrwxrwx@ 1 vigo staff 7205 23 Eyl 00:58 Important new version notes_V1.33_Eng.txt
-rw-r--r--@ 1 vigo staff 0 23 Mar 2008 Warblade Homepage on the net.webloc
drwxr-xr-x@ 4 vigo staff 136 29 Eki 18:45 Warblade.app
-rwxrwxrwx@ 1 vigo staff 75562 23 Eyl 01:01 Warblade_Manual_V1.33_Eng.txt
-rwx------@ 1 vigo staff 1671 22 Mar 2008 license.txt
Dikkat ederseniz "total 184" diye bir şey görürsünüz. Keza, ilk iki satırı . ve .. şeklinde görürsünüz. Tek nokta kendisini ( Current Path ), çift nokta da ( .. ) bir üst path'i yani Parent Path'i ifade eden linklerdir. Dolayısıyla bu path ifadeleri dahil toplam 7 link görünür. ( 2 path , 5 adet dosya! ) Peki total 184 nereden geldi? Yani benim anladığım burada 184 adet link var!

Evet yanlış anlamadınız... Tam 184 adet link var ama nerede? Warblade.app adlı dosyada. Aslında o bir dosya değil. Bir paket. Bir tür sıkışmış zip gibi düşünün ama bir folder gibi içine girebildiğiniz bişi. Tabi onun içinde de çeşitli paketcikler, dizinler, dosyalar tonla şey var. Bunlar da hesaba girince ilgili dizinimizde toplam 184 adet link bulunmuş oluyor...

Komut satırından bakınca;
$ ls -al Warblade\ Full/Warblade.app/Contents/Resources/data/music/
gibi giden bir şey görüyorum. Umarım otomatik tamamlama işlemleri için TAB tuşuna basmayı biliyorsunuzdur. Yani yukarıdaki uzun path'i ben elle yazmadım. ls -al yaz dıktan sonra W tuşuna bastım ve sonra TAB'a bastım, ilgili path bilgileri otomatik geldi. Aynı şekilde TAB'e basa basa ne var ne yok gördüm...

Neyse, link sayısından sonra görülen vigo ve staff kelimeleri, ilgili link'in vigo adlı kullanıcıya ve staff adlı kullanıcı grubuna ait olduğunu ifade ediyor. Bu tam olarak ilgili dosya ile bişi yapabilecekler vigo adlı kullanıcı ve staff grubuna üye kullanıcılardır anlamına gelir. Unix user/permission olayları biraz kazık. Bunu vaktim olursa başka bir zaman detaylı anlatmak istiyorum.

Kullanıcı ve Grup bilgisinden sonra gelen bilgi link'in byte cinsinden büyüklüğünü verir. Yani cf208.mp4 adlı dosya 166069960 bytes büyüklüğündedir. Bişi anladınızmı? bende anlamadım. 166,069,960 yani 166milyon byte. Bu kaç K ? yada kaç Megabyte? Bu sayıyı 1024'e bölünce kaç KB olduğunu, sonucu da bir daha 1024 e bölünce kaç MB olduğunu buluruz. Yani bizi asıl ilgilendiren rakkam yaklaşık olarak : 158.4 dür. Yani bu 158.4 Megabyte'lık bir dosyadır.

Ya bunu anlamak için mühendis mi olmak lazım? İşte bu noktada ls'nin -h opsiyonu imdada yetişir. Yani;
$ ls -alh
Diyince;
rwxr-xr-x  17 vigo  staff   578B 28 Eki 09:33 Vice2.0.6
drwxr-xr-x@ 7 vigo staff 238B 23 Eyl 06:02 Warblade Full
-rw-r--r-- 1 vigo staff 158M 17 Kas 19:34 cf208.mp4
-rwxr-xr-x@ 1 vigo staff 886B 9 Kas 22:22 deneme.sh
-rw-r--r--@ 1 vigo staff 60K 16 Kas 23:07 fisherking.jpg
Şeklinde bir görüntü gelir. Gördüğünüz gibi 158M olarak dosya boyu yazar. Kiminin yanında B ( Bytes ) kiminin yanında K ( Kilobytes ) gibi, en makül ve anlaşılır olanı neyse o yazar.

Son olarak da, dosyanın cinsine göre renkli görünmesi durumu vardır. Directory'ler farklı renk, Write Protection ( Silinemez / Yazılamaz ) olanlar farklı renk, script olan text olan farklı renk şeklinde görünür. Bu çok rahat anlaşılan bir durumdur. Bunu sağlamak için de;
$ ls -alhG
Şeklinde kullanırız. Bunun sonucunda da aşağıdaki gibi rengarek bir görüntü elde ederiz!



Tabi ls'nin manual'ini iyice okursanız bu renkleri de nasıl ayarlayabileceğinizi görebilirsiniz. Eğer bu hoşunuza gittiyse ve her Terminal'i açtığınızda "ls" yapınca yukarıdaki gibi görünmesini istiyorsanız "alias" kullanımı yapabilirsiniz. Terminal'de;
$ alias ls="ls -alhG"
Yaparsanız artık sizin "ls" diye çağırdığınız şey otomatikman "ls -alhG" olarak yorumlanacaktır. Tabi bilgisayarınızı her açtığınızda bunun otomatikman oluşmasını isterseniz iki şekilde yapabilirsiniz;
  1. System Wide denilen, yani makinenizdeki tüm kullanıcıları kapsayan şekilde
  2. Sadece kendi / tekil kullanıcıyı kapsayacak şekilde.
Yani sadece ben, vigo adlı user için bu kullanımı aktif etmek istiyorsam, ilgili şeyi;
~/.profile
dosyasına, eğer tüm kullanıcıların istifade etmesini istiyorsam;
/etc/profile
dosyasına bu eklemeyi yapmam lazım. Tabi /etc/ bölümü sakat yerlerden olduğu için öyle yol geçen hanı gibi önüne gelen her kullanıcı bu dosyada bir değişiklik yapma hakkına sahip değildir. ( Tabi siz özel bir durum belirtmediyseniz ) Bu bakımdan, SUDO gücünü kullanmanız gerekir. Tek becerebildiğim shell editörü olan nano ile /etc/profile dosyasını açmak için;
$ sudo nano -w /etc/profile
diyin, karşınıza aşağıdaki gibi bir dosya çıkar;
System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
Bu dosyaya aşağıdaki satırı ekleyip kaydedin ve çıkın ( kntrl + o ve kntrl + x )
alias ls="ls -alhG"
Terminal'den de çıkın komple kapatın. Şimdi yeniden Terminali açın ve deneyin!

Keza belki Windows'dan hatırlarsınız,
dir *.jpg
yapınca bize sonu .jpg olan dosyalar görüntülenir. Aslında burada çaktırmadan Regular Expression olayı kullanılır. Yani bu başı ne olursa olsun , sonu .jpg ile bitsin anlamındadır. Tabi bu tarz regex ( Regular Expression yani Türkçesi sanırım Düzenli İfade oluyor ) kullanımların kralı , esası , aslı linux/unix sistemlerdir. Tabiki ls'de de babalar gibi her tür regex numaraları yapabilirsiniz;
$ ls *.mp[34]
yaptığınızda, extension'ı mp3 yada mp4 olan dosyalar listelenir. Aynen Windows'da olduğu gibi sadece jpg'leri listelemek için;
$ ls *.jpg
yapabilirsiniz.

Aslında grep kullanarak daha çılgın sorgulamalar da yapmak mümkün. Bu konulara daha sonra girmeyi düşünüyorum.

Hiç yorum yok:

Yorum Gönder

İzleyiciler

Blog Listem

Yazılacak Yazılar

  • Snow Leopard için service yazıyoruz!
  • MacPorts nedir?
  • Virtualbox , Ubuntu ve Host'da duran web folder'ı
  • Django'ya giriş?
  • Dashcode ile MobileSafari uygulaması
  • Quicklook için Plug-in yazalım?
View blog authority