08- Yardım Alma
Linux'ta belki de en önemli konulardan birindeyiz. Bir komut ne iş yapar, opsiyonları nelerdir ve ne işe yararlar, nasıl kullanılırlar? Bu ve bunun gibi sorulara yanıt alabileceğimiz bazı araçlardan bahsedeceğiz.
whatis
whatis, adı üzerinde "Bu nedir?" sorusunu sormamız yarar. Tek başına çalıştırdığımızda, aşağıdaki gibi bir çıktı alırız:
Nedir? Ne nedir? whatis programına, bir ifadeyi ekleyerek, o ifade hakkında bilgi alabiliriz. Aşağıda, bu zamana kadar kullandığımız bazı komutlarla ilgili bilgiler aldığımız örnekleri görebilirsiniz:
ali@ubuntu24:~$ whatis ls
ls (1) - list directory contents
ali@ubuntu24:~$ whatis cp
cp (1) - copy files and directories
ali@ubuntu24:~$ whatis mv
mv (1) - move (rename) files
ali@ubuntu24:~$ whatis touch
touch (1) - change file timestamps
ali@ubuntu24:~$ whatis whatis
whatis (1) - display one-line manual page descriptions
Açıklamadan da anlaşılacağı üzere whatis komutu, tek satırlık kılavuz sayfası (manual page / man page) açıklamalarını getiriyor. Aşağıdaki örnekleri de inceleyelim. Bu örneklerde bahsi geçen crontab ve sudo komutlarına henüz değinmedik. Ne oldukları da bizi şu an için ilgilendirmiyor.
ali@ubuntu24:~$ whatis crontab
crontab (1) - maintain crontab files for individual users (Vixie Cron)
crontab (5) - tables for driving cron
ali@ubuntu24:~$ whatis sudo
sudo (8) - execute a command as another user
Bir önceki denemeye kıyasla bazı farklılıklar var. Örneğin crontab için 2 farklı satır geldi. Bir tanesinde - önceki örneklerden farklı olarak - (5) ifadesi var. sudo için ise (8) ifadesini görüyoruz. Tabii bunların bir anlamı var. Aşağıda, bu durumu netleştireceğiz.
man
man komutu, Linux paketleri (paket kavramına ileride değineceğiz) içerisinde gelen kılavuz sayfalarını görüntülememizi sağlayan bir araçtır.
man <komut adı> şeklinde bir kullanımı vardır. Fakat bu zamana kadar kullandığımız komutlardan farklı olarak, çıktısını doğrudan ekrana vermeyecek. Onun yerine, less isimli bir sayfalama aracı (pager) kullanarak bize bir "TUI" açacak. Aşağıdaki ekran görüntüsünü inceleyin. Bu ekrana gelebilmek için man man komutunu kullandım. Yani, man programının manual sayfalarına bakmak istediğimi belirttim.
Bir manual sayfasından aşağıdaki gibi bilgileri edinebiliriz:
- Programın açıklaması
- Kullanım örnekleri
- Opsiyonlar hakkında bilgiler
- Programın çalışma mantığı
- Programın kullandığı yapılandırma dosyaları
- Programın varsayılan davranış(lar)ı
- İlişkili diğer komutlar
- Programın geçmişi, geliştirici bilgileri, bug raporlarının nereye yapılacağı gibi bilgiler
- Programın bilinen bug'ları
- Programın çıkış kodları
Gördüğünüz gibi, kılavuz sayfaları gerçekten de elimiz ayağımız hâlinde gelebilecek, oldukça faydalı dokümanlar.
Sertifika Sınavları
Bazı uygulamalı sertifika sınavlarında, her ne kadar web'de arama yapmanız yasak olsa da, kılavuz sayfalarını kullanmak serbesttir.
man sayfalarını okurken, karşımıza çıkan TUI üzerinde yapabileceğimiz pek çok farklı işlem bulunuyor. Bunların bazılarından bahsedelim:
- Yön tuşları ile hareket edebilirsiniz.
- "g" harfi ile kılavuzun başına, "G" harfi ile de sonuna gidebilirsiniz.
- "/" tuşuna basıp bir ifade yazarak ve devamında "Enter'a" basarak, bulunduğunuz noktanın ilerisine doğru arama yapabilirsiniz.
- "?" tuşuna basıp bir ifade yazarak ve devamında "Enter'a" basarak, bulunduğunuz noktanın gerisine doğru arama yapabilirsiniz.
- Arama yaptığınız sırada, "n" tuşu ile arama teriminin geçtiği bir sonraki noktaya gidebilirsiniz. "N" ile ise, bir önceki kısma geri dönebilirsiniz.
- "q" tuşuna basarak kılavuz sayfasından çıkabilirsiniz.
man Sections
Yukarıdaki ekran görüntüsüne tekrar bakın. Sol ve sağ üst köşelerde, "MAN(1)" ifadesini göreceksiniz. whatis çıktılarında da benzer şekilde parantez içinde bazı sayılar görmüştük. Bunlar, kılavuz sayfalarının bölümlerini gösterir. Bu numaraların her birine section number deriz ve farklı amaçlar için ayrılmış durumdadırlar. Aslında man man komutu ile, man programının manual'ına baktığınızda, aşağıda yazdığım açıklamaların aynısını göreceksiniz:
- Çalıştırılabilir programlar veya shell komutları
- Sistem çağrıları (kernel tarafından sağlanan fonksiyonlar)
- Kütüphane çağrıları (program kütüphanelerindeki fonksiyonlar)
- Özel dusyalar (genelde /dev içinde bulunurlar)
- Dosya biçimleri ve kuralları, örneğin /etc/passwd
- Oyunlar
- Çeşitli (makro paketleri ve kuralları dahil), örneğin man(7), groff(7), man-pages(7)
- Sistem yönetimi komutları (genelde root için)
- Kernel rutinleri [Standart olmayan]
Mesela yukarıdaki whatis örneklerinde, crontab için 1 ve 5 numaralı bölümlerden açıklamalar gelmişti. Demek ki crontab hep bir program, hem de bir dosyası var. Zamanlanmış görevler kısmına geldiğimizde bu arkadaşlar ile yakından ilgileneceğiz.
man -k komutu ile, ilgili ifade için farklı man sayfalarında arama yapabilir ve bu ifadenin geçtiği sayfaların bir listesini alabiliriz.
ali@ubuntu24:~$ man -k crontab
crontab (1) - maintain crontab files for individual users (Vixie Cron)
crontab (5) - tables for driving cron
ali@ubuntu24:~$ man -k passwd
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
fgetpwent_r (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
gpasswd (1) - administer /etc/group and /etc/gshadow
grub-mkpasswd-pbkdf2 (1) - generate hashed password for GRUB
openssl-passwd (1ssl) - compute password hashes
pam_localuser (8) - require users to be listed in /etc/passwd
passwd (1) - change user password
passwd (1ssl) - OpenSSL application commands
passwd (5) - the password file
passwd2des (3) - RFS password encryption
pwhistory_helper (8) - Helper binary that transfers password hashes from passwd or shadow to opasswd
update-passwd (8) - safely update /etc/passwd, /etc/shadow and /etc/group
Kılavuz Sayfalarında Arama
Arama yapmak için man -k kullanabileceğiniz gibi, apropos komutunu da kullanabilirsiniz.
man -f komutu ile, ilgili ifadenin yer aldığı man section'larını görebilirsiniz. Bu çıktı, whatis ile aynı sonucu verecektir:
ali@ubuntu24:~$ man -f ls
ls (1) - list directory contents
ali@ubuntu24:~$ man -f pwd
pwd (1) - print name of current/working directory
ali@ubuntu24:~$ man -f passwd
passwd (1) - change user password
passwd (1ssl) - OpenSSL application commands
passwd (5) - the password file
man programının varsayılan olarak size açacağı section, okumak istediğiniz section olmayabilir. Böyle bir durumda, man <ifade>.5 gibi bir kullanım yapabilirsiniz. Örneğin, man passwd.5, size "passwd" ile ilgili 5. section (dosya) kılavuz sayfasını açacaktır.
man Sayfalarında Synopsis
Synopsis, bir komutu doğru kullanmak için mutlaka anlamamız gereken bir konu. Dsoya ve Dizin İşlemleri bölümünde yer alan programların kullanımı ile ilgili, ısrarla, bunları sakın ezberlemeye çalışmayın dememin temel sebebi aslında bu. Şimdi oradaki programlardan birinin man sayfasına bakalım:
Synopsis kısmını satır satır incelemeye çalışalım:
"cp [OPTION]... [-T] SOURCE DEST"
cp ile başla. "Dilersen" opsiyon(lar) yazabilirsin. "Dilersen" [-T] ekleyebilirsin. Bir kaynak ver. Bir hedef ver.
Synopsis'i Yorumlama
Synopsis kısmında köşeli parantezler arasında gördüğünüz ifadeler opsiyoneldir. İhtiyacınız yoksa, yazmazsınız. İfadelerin devamında gelen "..." ise, benzer şekilde yorumlanacak ifadeden birden fazla yazabileceğinizi gösterir. Köşeli parantezler arasında olmayan ifadeler ise zorunlu ifadelerdir.
"cp [OPTION]... SOURCE... DIRECTORY"
cp ile başla. "Dilersen" opsiyon(lar) yazabilirsin. Kaynak dosya ya da dosyalar verebilirsin. En sona ise hedef olarak bir "dizin" ver. Bu sayede, birden fazla dosyayı bir dizine kopyalayabilirsiniz.
"cp [OPTION]... -t DIRECTORY SOURCE..."
cp ile başla. "Dilersen" opsiyon(lar) yazabilirsin. Sonra mutlaka "-t" ekle ve bir dizin belirt. Devamında ise "hedef dosya(lar)" belirt. Bu sayede, yine birden fazla dosyayı bir dizine kopyalayabilirsiniz. Fakat kopyalanacak yeri en sonda değil, en başta belirtmiş olursunuz. Peki "-t" ne alaka? man sayfalarında bunun da açıklaması var:
Komutların Kullanımı Hakkında
Bu dokümanlar boyunca göreceğiniz örnek kullanımlar, o komutların tüm kullanılış biçimlerinden bahsetmeyecek. İhtiyacınıza göre, kılavuz sayfalarını inceleyerek, yeni kullanım yöntemlerini görmeniz gerekiyor. Yukarıdaki birden fazla dosyayı bir dizine kopyalama örneklerini ele alalım. İki şekilde de yapabilirsiniz. İkisi de aynı işi yapar. Hangisini tercih edeceğiniz size kalmış.
info
man, UNIX döneminden kalma bir program. GNU projesi kapsamında manın yerini alması amaçlanan ve man sayfalarına kıyasla daha farklı bir formatta, hyperlinking destekleyen bir kılavuz geliştirildi. Bu kılavuzun adı ise info. Nasıl ki man programının bize gösterdiği sayfalara man pages, manual pages, man sayfası gibi ifadeler kullanıyorsak; benzer şekilde info için de info pages, info sayfası gibi ifadeler kullanılıyor.
ali@ubuntu24:~$ whatis info
info (1) - read Info documents
info (1ssl) - OpenSSL application commands
info (5) - readable online documentation
man bize, ilgili komut ile ilgili bilgiler sunarken, info dokümanları bize bir nevi kitap olarak sunulur. Aşağıdaki ilk ekran görüntüsünde, info ls komutunun çıktısını göreceksiniz. Devamında, yön tuşları kullanarak "* Which files are listed::" kısmına gelinmiş ve "Enter" tuşuna basılarak dokümanın o sayfasına gidilmiş:
help
Bu zamana kadar pek çok farklı yöntemle yardım almanın yollarını gördük. Ancak bu bize yeterli gelmeyecek. Mesela daha önce kullandığımız type ve cd komutları ile ilgili yardım almayı deneyelim:
ali@ubuntu24:~$ whatis type
type: nothing appropriate.
ali@ubuntu24:~$ man type
No manual entry for type
ali@ubuntu24:~$ info type
info: No menu item 'type' in node '(dir)Top'
ali@ubuntu24:~$ whatis cd
cd: nothing appropriate.
ali@ubuntu24:~$ man cd
No manual entry for cd
ali@ubuntu24:~$ info cd
info: No menu item 'cd' in node '(dir)Top'
Ne man sayfalarında ne de info sayfalarında, bu komutlar ile ilgili bir şey bulamadık. Çünkü bunlar shell builtin. help komutu da burada devreye giriyor. Bash'in kendi yerleşik komutları için yardım bilgilerini gösteren bir de help adında yerleşiği var.
ali@ubuntu24:~$ whatis help
help: nothing appropriate.
ali@ubuntu24:~$ man help
No manual entry for help
ali@ubuntu24:~$ info help
info: No menu item 'help' in node '(dir)Top'
ali@ubuntu24:~$ type help
help is a shell builtin
help bir kabuk yerleşiği. Dolayısıyla help hakkında yardımı da help ile alacağız: help help
ali@ubuntu24:~$ help help
help: help [-dms] [pattern ...]
Display information about builtin commands.
Displays brief summaries of builtin commands. If PATTERN is
specified, gives detailed help on all commands matching PATTERN,
otherwise the list of help topics is printed.
Options:
-d output short description for each topic
-m display usage in pseudo-manpage format
-s output only a short usage synopsis for each topic matching
PATTERN
Arguments:
PATTERN Pattern specifying a help topic
Exit Status:
Returns success unless PATTERN is not found or an invalid option is given.
Açıklamasında da belirtildiği gibi, builtin commands hakkında bilgi veriyor. Shell builtin'ler hakkında yardım almak için, bu komutu kullanabilirsiniz.