GNU/Linux için Türkçe içerik sağlamak üzere kurulmuş bir platformdur.
Mevcut kabuktan çıkılmasını sağlar. En temel kullanımını denemek için öncelikle bash komutunu girip yeni bir alt kabuk başlatalım.
┌──(taylan㉿linuxdersleri)-[~]
└─$ bash
┌──(taylan㉿linuxdersleri)-[~]
└─$ ps f
PID TTY STAT TIME COMMAND
12275 pts/0 Ss 0:00 /usr/bin/bash
12286 pts/0 S 0:00 \_ bash
12297 pts/0 R+ 0:00 \_ ps f
Mevcut bash kabuğu altında yeni bir alt bash kabuğunun başlatıldığını ps f
komutu sayesinde teyit etmiş olduk. Şu anda başlatılmış olan alt bash kabuğunda çalışıyoruz. Bu kabuğu kapatarak çıkış yapmak için exit
komutunu girmemiz yeterli.
┌──(taylan㉿linuxdersleri)-[~]
└─$ exit
exit
┌──(taylan㉿linuxdersleri)-[~]
└─$ ps f
PID TTY STAT TIME COMMAND
12275 pts/0 Ss 0:00 /usr/bin/bash
12676 pts/0 R+ 0:00 \_ ps f
exit
komutu sayesinde çalışmakta olduğumuz mevcut kabuğu kapatmış olduk. İşte exit
komutunun en temel kullanımı bu şekilde. Bu temel kullanım dışında exit
komutu sayesinde, işlem sonlandırılırken döndürülecek olan çıkış kodunu belirtmemiz de mümkündür.
exit
komutuyla birlikte argüman olarak girilen sayısal değer, kabuk kapatıldıktan sonra döndürülecek olan çıkış değerini temsil eder. Normal şartlarda kabuk üzerinden çalıştırmış olduğumuz komutlar çalışır ve çalışma işlemi bittiğinde eğer komut hatasız çalıştıysa “0” çıkış değerini döndürür. Fakat komutun çalıştırılması sonucunda ortaya hata ya da herhangi bir eksiklik çıktıysa çıkış kodları “1” ile “255” arasında bir değer olarak basılır. İşte bizler de exit
komutu ile duruma göre mevcut sürecin sonlandırılıp, üretilmesi gereken çıkış kodunu spesifik olarak tanımlayabiliyoruz. Özellikle bash programlama yaparken sık kullanılan bir komuttur.
Hemen denemek için basit bir betik dosyası oluşturup, işlem tamamlandıktan sonra çıkış değeri olarak “111” değerini döndürmesini sağlayalım.
read -p "Lütfen pozitif bir tam sayı girin:" sayi
if [[ $sayi -lt 0 ]]
then
exit 111
else
echo $sayi
fi
Betik dosyamızın çalışması bittiğinde döndürülmüş olan çıkış kodunu echo $?
komutuyla öğrenebiliyoruz. Denemek için hem pozitif hem de negatif tam sayı girildiğinde üretilen çıkış kodlarına bakalım.
┌──(taylan㉿linuxdersleri)-[~]
└─$ ./betik.sh
Lütfen pozitif bir tam sayı girin:5
5
┌──(taylan㉿linuxdersleri)-[~]
└─$ echo $?
0
┌──(taylan㉿linuxdersleri)-[~]
└─$ ./betik.sh
Lütfen pozitif bir tam sayı girin:-5
┌──(taylan㉿linuxdersleri)-[~]
└─$ echo $?
111
Çıktılara göz attığımızda, negatif tam sayı koşulu sağlanınca exit
komutu çalışıp 111 değerini çıkış değeri olarak döndürerek betiğin çalıştığı kabuğun kapatılmasını sağladığını teyit edebiliyoruz.
Çıkış kodları sayesinde çeşitli koşul durumlarının tanımlanması ve işlemlerin çalışma durumları hakkında bilgi alınması mümkün oluyor.
Çıkış kodlarını bizler tanımlayabiliyoruz ancak yine de sistemimizde önceden tanımlı çıkış kodları da bulunuyor. Her ne kadar tüm sistemlerdeki çıkış kodları aynı olmasa da POSIX kapsamında pek çok ortak çıkış kodu mevcuttur. Örneğin Linux sistemindeki standartları görmek için çekirdeğin kaynak dosyalarında bulunan errno.ho dosyasına göz atabilirsiniz.
Ben “errno.ho” dosyasındaki tanımları tablo şeklinde aşağıya ekliyorum.
Error Code | English Meaning | Turkish Meaning | Exit Code |
---|---|---|---|
EDEADLK | Resource deadlock would occur | Kaynak kilidi oluşacaktı | 35 |
ENAMETOOLONG | File name too long | Dosya adı çok uzun | 36 |
ENOLCK | No record locks available | Kayıt kilidi yok | 37 |
ENOSYS | Invalid system call number | Geçersiz sistem çağrı numarası | 38 |
ENOTEMPTY | Directory not empty | Dizin boş değil | 39 |
ELOOP | Too many symbolic links encountered | Çok fazla sembolik bağlantı bulundu | 40 |
EWOULDBLOCK | Operation would block | İşlem engellenecekti | 41 |
ENOMSG | No message of desired type | İstenilen türde mesaj yok | 42 |
EIDRM | Identifier removed | Tanımlayıcı kaldırıldı | 43 |
ECHRNG | Channel number out of range | Kanal numarası aralık dışında | 44 |
EL2NSYNC | Level 2 not synchronized | Seviye 2 senkronize değil | 45 |
EL3HLT | Level 3 halted | Seviye 3 durduruldu | 46 |
EL3RST | Level 3 reset | Seviye 3 sıfırlandı | 47 |
ELNRNG | Link number out of range | Bağlantı numarası aralık dışında | 48 |
EUNATCH | Protocol driver not attached | Protokol sürücüsü bağlı değil | 49 |
ENOCSI | No CSI structure available | CSI yapısı mevcut değil | 50 |
EL2HLT | Level 2 halted | Seviye 2 durduruldu | 51 |
EBADE | Invalid exchange | Geçersiz değiş tokuş | 52 |
EBADR | Invalid request descriptor | Geçersiz istek tanımlayıcı | 53 |
EXFULL | Exchange full | Değiş tokuş dolu | 54 |
ENOANO | No anode | Anot yok | 55 |
EBADRQC | Invalid request code | Geçersiz istek kodu | 56 |
EBADSLT | Invalid slot | Geçersiz yuva | 57 |
EDEADLOCK | (EDEADLK ile aynı) | Kaynak kilidi oluşacaktı | 35 |
EBFONT | Bad font file format | Kötü font dosya biçimi | 59 |
ENOSTR | Device not a stream | Cihaz bir akım değil | 60 |
ENODATA | No data available | Veri yok | 61 |
ETIME | Timer expired | Zamanlayıcı süresi doldu | 62 |
ENOSR | Out of streams resources | Akım kaynakları tükenmiş | 63 |
ENONET | Machine is not on the network | Makine ağda değil | 64 |
ENOPKG | Package not installed | Paket kurulu değil | 65 |
EREMOTE | Object is remote | Nesne uzakta | 66 |
ENOLINK | Link has been severed | Bağlantı kesildi | 67 |
EADV | Advertise error | Tanıtım hatası | 68 |
ESRMNT | Srmount error | Srmount hatası | 69 |
ECOMM | Communication error on send | Gönderimde iletişim hatası | 70 |
EPROTO | Protocol error | Protokol hatası | 71 |
EMULTIHOP | Multihop attempted | Çoklu atama girişiminde bulunuldu | 72 |
EDOTDOT | RFS specific error | RFS özel hatası | 73 |
EBADMSG | Not a data message | Veri mesajı değil | 74 |
EOVERFLOW | Value too large for defined data type | Tanımlanan veri türü için değer çok büyük | 75 |
ENOTUNIQ | Name not unique on network | Ağda benzersiz olmayan ad | 76 |
EBADFD | File descriptor in bad state | Dosya tanımlayıcısı kötü durumda | 77 |
EREMCHG | Remote address changed | Uzak adres değişti | 78 |
ELIBACC | Can not access a needed shared library | Gerekli paylaşılan kitaplığa erişilemiyor | 79 |
ELIBBAD | Accessing a corrupted shared library | Bozulmuş bir paylaşılan kitaplığa erişme | 80 |
ELIBSCN | .lib section in a.out corrupted | a.out'taki .lib bölümü bozulmuş | 81 |
ELIBMAX | Attempting to link in too many shared libraries | Çok fazla paylaşılan kitaplık bağlamaya çalışma | 82 |
ELIBEXEC | Cannot exec a shared library directly | Bir paylaşılan kitaplığı doğrudan çalıştıramıyor | 83 |
EILSEQ | Illegal byte sequence | Yasadışı bayt dizisi | 84 |
ERESTART | Interrupted system call should be restarted | Kesilen sistem çağrısı yeniden başlatılmalı | 85 |
ESTRPIPE | Streams pipe error | Akım boru hatası | 86 |
EUSERS | Too many users | Çok fazla kullanıcı | 87 |
ENOTSOCK | Socket operation on non-socket | Soket olmayan üzerinde soket işlemi | 88 |
EDESTADDRREQ | Destination address required | Hedef adres gerekli | 89 |
EMSGSIZE | Message too long | Mesaj çok uzun | 90 |
EPROTOTYPE | Protocol wrong type for socket | Soket için yanlış türde protokol | 91 |
ENOPROTOOPT | Protocol not available | Protokol mevcut değil | 92 |
EPROTONOSUPPORT | Protocol not supported | Protokol desteklenmiyor | 93 |
ESOCKTNOSUPPORT | Socket type not supported | Soket türü desteklenmiyor | 94 |
EOPNOTSUPP | Operation not supported on transport endpoint | Taşıma uç noktasında desteklenmeyen işlem | 95 |
EPFNOSUPPORT | Protocol family not supported | Protokol ailesi desteklenmiyor | 96 |
EAFNOSUPPORT | Address family not supported by protocol | Protokol tarafından desteklenmeyen adres ailesi | 97 |
EADDRINUSE | Address already in use | Adres zaten kullanılıyor | 98 |
EADDRNOTAVAIL | Cannot assign requested address | İstenen adres atanamıyor | 99 |
ENETDOWN | Network is down | Ağ kapalı | 100 |
ENETUNREACH | Network is unreachable | Ağa erişilemiyor | 101 |
ENETRESET | Network dropped connection because of reset | Sıfırlama nedeniyle ağ bağlantısı kesildi | 102 |
ECONNABORTED | Software caused connection abort | Yazılım nedeniyle bağlantı kesildi | 103 |
ECONNRESET | Connection reset by peer | Bağlantı akran tarafından sıfırlandı | 104 |
ENOBUFS | No buffer space available | Tampon alanı yok | 105 |
EISCONN | Transport endpoint is already connected | Taşıma uç noktası zaten bağlı | 106 |
ENOTCONN | Transport endpoint is not connected | Taşıma uç noktası bağlı değil | 107 |
ESHUTDOWN | Cannot send after transport endpoint shutdown | Taşıma uç noktası kapatıldıktan sonra gönderilemiyor | 108 |
ETOOMANYREFS | Too many references: cannot splice | Çok fazla başvuru: kesmek mümkün değil | 109 |
ETIMEDOUT | Connection timed out | Bağlantı zaman aşımına uğradı | 110 |
ECONNREFUSED | Connection refused | Bağlantı reddedildi | 111 |
EHOSTDOWN | Host is down | Ana bilgisayar kapalı | 112 |
EHOSTUNREACH | No route to host | Ana bilgisayara yönlendirme yok | 113 |
EALREADY | Operation already in progress | İşlem zaten devam ediyor | 114 |
EINPROGRESS | Operation now in progress | İşlem şu anda devam ediyor | 115 |
ESTALE | Stale file handle | Eski dosya tanımlayıcısı | 116 |
EUCLEAN | Structure needs cleaning | Yapı temizlenmesi gerekiyor | 117 |
ENOTNAM | Not a XENIX named type file | XENIX adlandırılmış türde bir dosya değil | 118 |
ENAVAIL | No XENIX semaphores available | XENIX semaforları mevcut değil | 119 |
EISNAM | Is a named type file | Adlandırılmış türde bir dosya | 120 |
EREMOTEIO | Remote I/O error | Uzak G/Ç hatası | 121 |
EDQUOT | Quota exceeded | Kotalama aşıldı | 122 |
ENOMEDIUM | No medium found | Ortam bulunamadı | 123 |
EMEDIUMTYPE | Wrong medium type | Yanlış ortam türü | 124 |
ECANCELED | Operation Canceled | İşlem İptal Edildi | 125 |
ENOKEY | Required key not available | Gerekli anahtar mevcut değil | 126 |
EKEYEXPIRED | Key has expired | Anahtar süresi doldu | 127 |
EKEYREVOKED | Key has been revoked | Anahtar iptal edildi | 128 |
EKEYREJECTED | Key was rejected by service | Anahtar hizmet tarafından reddedildi | 129 |
EOWNERDEAD | Owner died | Sahip öldü | 130 |
ENOTRECOVERABLE | State not recoverable | Kurtarılamaz durum | 131 |
ERFKILL | Operation not possible due to RF-kill | RF-kill nedeniyle mümkün olmayan işlem | 132 |
EHWPOISON | Memory page has hardware error | Bellek sayfasında donanım hatası | 133 |
Linux üzerinde kullanılan çeşitli komutların açıklamalarına aşağıdaki listeden ulaşabilirsiniz.