Linux Dersleri
🎓 Eğitimler 🗃️ Blog 📜 Komut Listesi 🎯 Test 🏷️ Etiketler 💖 Faydalı Kaynaklar 🐧 Hakkında 📮 Geri Bildirim
Mobil Uygulamalar
Image
    Google Play Google Play

Linux Dersleri |

GNU/Linux için Türkçe içerik sağlamak üzere kurulmuş bir platformdur.

bash exit

exit Komutu

6 dk. Taylan Özgür Bildik

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.

Çıkış Kodlarının Döndürülmesi | Exit Code

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 CodeEnglish MeaningTurkish MeaningExit Code
EDEADLKResource deadlock would occurKaynak kilidi oluşacaktı35
ENAMETOOLONGFile name too longDosya adı çok uzun36
ENOLCKNo record locks availableKayıt kilidi yok37
ENOSYSInvalid system call numberGeçersiz sistem çağrı numarası38
ENOTEMPTYDirectory not emptyDizin boş değil39
ELOOPToo many symbolic links encounteredÇok fazla sembolik bağlantı bulundu40
EWOULDBLOCKOperation would blockİşlem engellenecekti41
ENOMSGNo message of desired typeİstenilen türde mesaj yok42
EIDRMIdentifier removedTanımlayıcı kaldırıldı43
ECHRNGChannel number out of rangeKanal numarası aralık dışında44
EL2NSYNCLevel 2 not synchronizedSeviye 2 senkronize değil45
EL3HLTLevel 3 haltedSeviye 3 durduruldu46
EL3RSTLevel 3 resetSeviye 3 sıfırlandı47
ELNRNGLink number out of rangeBağlantı numarası aralık dışında48
EUNATCHProtocol driver not attachedProtokol sürücüsü bağlı değil49
ENOCSINo CSI structure availableCSI yapısı mevcut değil50
EL2HLTLevel 2 haltedSeviye 2 durduruldu51
EBADEInvalid exchangeGeçersiz değiş tokuş52
EBADRInvalid request descriptorGeçersiz istek tanımlayıcı53
EXFULLExchange fullDeğiş tokuş dolu54
ENOANONo anodeAnot yok55
EBADRQCInvalid request codeGeçersiz istek kodu56
EBADSLTInvalid slotGeçersiz yuva57
EDEADLOCK(EDEADLK ile aynı)Kaynak kilidi oluşacaktı35
EBFONTBad font file formatKötü font dosya biçimi59
ENOSTRDevice not a streamCihaz bir akım değil60
ENODATANo data availableVeri yok61
ETIMETimer expiredZamanlayıcı süresi doldu62
ENOSROut of streams resourcesAkım kaynakları tükenmiş63
ENONETMachine is not on the networkMakine ağda değil64
ENOPKGPackage not installedPaket kurulu değil65
EREMOTEObject is remoteNesne uzakta66
ENOLINKLink has been severedBağlantı kesildi67
EADVAdvertise errorTanıtım hatası68
ESRMNTSrmount errorSrmount hatası69
ECOMMCommunication error on sendGönderimde iletişim hatası70
EPROTOProtocol errorProtokol hatası71
EMULTIHOPMultihop attemptedÇoklu atama girişiminde bulunuldu72
EDOTDOTRFS specific errorRFS özel hatası73
EBADMSGNot a data messageVeri mesajı değil74
EOVERFLOWValue too large for defined data typeTanımlanan veri türü için değer çok büyük75
ENOTUNIQName not unique on networkAğda benzersiz olmayan ad76
EBADFDFile descriptor in bad stateDosya tanımlayıcısı kötü durumda77
EREMCHGRemote address changedUzak adres değişti78
ELIBACCCan not access a needed shared libraryGerekli paylaşılan kitaplığa erişilemiyor79
ELIBBADAccessing a corrupted shared libraryBozulmuş bir paylaşılan kitaplığa erişme80
ELIBSCN.lib section in a.out corrupteda.out'taki .lib bölümü bozulmuş81
ELIBMAXAttempting to link in too many shared librariesÇok fazla paylaşılan kitaplık bağlamaya çalışma82
ELIBEXECCannot exec a shared library directlyBir paylaşılan kitaplığı doğrudan çalıştıramıyor83
EILSEQIllegal byte sequenceYasadışı bayt dizisi84
ERESTARTInterrupted system call should be restartedKesilen sistem çağrısı yeniden başlatılmalı85
ESTRPIPEStreams pipe errorAkım boru hatası86
EUSERSToo many usersÇok fazla kullanıcı87
ENOTSOCKSocket operation on non-socketSoket olmayan üzerinde soket işlemi88
EDESTADDRREQDestination address requiredHedef adres gerekli89
EMSGSIZEMessage too longMesaj çok uzun90
EPROTOTYPEProtocol wrong type for socketSoket için yanlış türde protokol91
ENOPROTOOPTProtocol not availableProtokol mevcut değil92
EPROTONOSUPPORTProtocol not supportedProtokol desteklenmiyor93
ESOCKTNOSUPPORTSocket type not supportedSoket türü desteklenmiyor94
EOPNOTSUPPOperation not supported on transport endpointTaşıma uç noktasında desteklenmeyen işlem95
EPFNOSUPPORTProtocol family not supportedProtokol ailesi desteklenmiyor96
EAFNOSUPPORTAddress family not supported by protocolProtokol tarafından desteklenmeyen adres ailesi97
EADDRINUSEAddress already in useAdres zaten kullanılıyor98
EADDRNOTAVAILCannot assign requested addressİstenen adres atanamıyor99
ENETDOWNNetwork is downAğ kapalı100
ENETUNREACHNetwork is unreachableAğa erişilemiyor101
ENETRESETNetwork dropped connection because of resetSıfırlama nedeniyle ağ bağlantısı kesildi102
ECONNABORTEDSoftware caused connection abortYazılım nedeniyle bağlantı kesildi103
ECONNRESETConnection reset by peerBağlantı akran tarafından sıfırlandı104
ENOBUFSNo buffer space availableTampon alanı yok105
EISCONNTransport endpoint is already connectedTaşıma uç noktası zaten bağlı106
ENOTCONNTransport endpoint is not connectedTaşıma uç noktası bağlı değil107
ESHUTDOWNCannot send after transport endpoint shutdownTaşıma uç noktası kapatıldıktan sonra gönderilemiyor108
ETOOMANYREFSToo many references: cannot spliceÇok fazla başvuru: kesmek mümkün değil109
ETIMEDOUTConnection timed outBağlantı zaman aşımına uğradı110
ECONNREFUSEDConnection refusedBağlantı reddedildi111
EHOSTDOWNHost is downAna bilgisayar kapalı112
EHOSTUNREACHNo route to hostAna bilgisayara yönlendirme yok113
EALREADYOperation already in progressİşlem zaten devam ediyor114
EINPROGRESSOperation now in progressİşlem şu anda devam ediyor115
ESTALEStale file handleEski dosya tanımlayıcısı116
EUCLEANStructure needs cleaningYapı temizlenmesi gerekiyor117
ENOTNAMNot a XENIX named type fileXENIX adlandırılmış türde bir dosya değil118
ENAVAILNo XENIX semaphores availableXENIX semaforları mevcut değil119
EISNAMIs a named type fileAdlandırılmış türde bir dosya120
EREMOTEIORemote I/O errorUzak G/Ç hatası121
EDQUOTQuota exceededKotalama aşıldı122
ENOMEDIUMNo medium foundOrtam bulunamadı123
EMEDIUMTYPEWrong medium typeYanlış ortam türü124
ECANCELEDOperation Canceledİşlem İptal Edildi125
ENOKEYRequired key not availableGerekli anahtar mevcut değil126
EKEYEXPIREDKey has expiredAnahtar süresi doldu127
EKEYREVOKEDKey has been revokedAnahtar iptal edildi128
EKEYREJECTEDKey was rejected by serviceAnahtar hizmet tarafından reddedildi129
EOWNERDEADOwner diedSahip öldü130
ENOTRECOVERABLEState not recoverableKurtarılamaz durum131
ERFKILLOperation not possible due to RF-killRF-kill nedeniyle mümkün olmayan işlem132
EHWPOISONMemory page has hardware errorBellek sayfasında donanım hatası133

📮 Hata, eksik ve öneri bildirimlerinizi buradan iletebilirsiniz.

Video Eğitim

Linux'u temel seviyede öğrenmek isterseniz, video, doküman, test, alıştırmalar ve soru-cevap imkanları sunan kursa katılabilirsiniz.

Linux üzerinde kullanılan çeşitli komutların açıklamalarına aşağıdaki listeden ulaşabilirsiniz.