Kişiler

Windows Komut Satırı Temelleri. Linux Kabuklarının Evrimi Bir Kabuk İnşa Etmek Nereden Başlamalı



Kabuk komut dosyaları, bilgisayarların ilk günlerinden beri sistem yöneticilerinin ve programcıların rutin görevleri otomatikleştirmelerine yardımcı olmuştur. Bu kitabın ilk baskısının 2004'te yayınlanmasından bu yana çok şey değişti, ancak bash kabuğu yalnızca lider konumunu sağlamlaştırdı. Bu nedenle, tüm yeteneklerini kullanabilme yeteneği, sistem yöneticileri, mühendisler ve meraklılar için mutlak bir zorunluluk haline geliyor. Bu kitap, örneğin yazılım oluştururken veya diğer programların eylemlerini koordine ederken karşılaşabileceğiniz yaygın sorunları açıklamaktadır. Ve çözümler, kolaylıkla temel alınabilecek ve diğer benzer problemlere tahmin edilebilecek şekilde verilmiştir.

Bu kitabın amacı, pratik bash komut dosyası oluşturma tekniklerini göstermek ve en yaygın yardımcı programları çok fazla ayrıntıya girmeden kısa, özlü örneklerle tanıtmaktır. Bu senaryoları deneyin - nasıl çalıştıklarını anlamak için bunları kırın, düzeltin ve ihtiyaçlarınıza göre uyarlayın. En zor sorunları çözmenin tek yolu budur.

İkinci baskıda ne kayboldu

Bu kitap, örneğin yazılım oluşturmak veya diğer programların eylemlerini koordine etmek gibi taşınabilir, otomatik bir çözüm yazmaya çalışırken karşılaşabileceğiniz tipik zorlukları ve bunların nasıl üstesinden gelineceğini açıklamaktadır. Kitaptaki çözümler, bunları temel alabilmeniz ve diğer benzer sorunlara tahminde bulunabilmeniz için sunulmuştur. Örneğin, Bölüm 1'de, yankı programının taşınabilir bir sürümünü küçük bir sarmalayıcı komut dosyası olarak yazacağız. Birçok sistem yöneticisi bu özel komut dosyasını yararlı bulacaktır, ancak temel fikir, platformlar arasında tutarlı davranış sağlamak için bir sarmalayıcı komut dosyası oluşturmaktır. Kitabın ilerleyen bölümlerinde, bash komut dosyası oluşturmanın bazı ilginç özelliklerini ve bize en fazla gücü veren Unix sistemlerinde bulunan tipik yardımcı programları gözden geçireceğiz.

Bu kitap tam size göreyse...

Bash, web geliştiricileri (çoğu OS X üzerinde geliştiren ve uygulamalarını Linux sunucularına dağıtan), analistler, geliştiriciler de dahil olmak üzere Unix benzeri işletim sistemleri çalıştıran sunucular veya iş istasyonlarıyla çalışan herkes için birincil araç olmaya devam ediyor. mobil uygulamalar ve programcılar. Ayrıca, ev aletlerini otomatikleştirmek için Raspberry Pi gibi açık mimari mikro bilgisayarlarında Linux çalıştıran daha fazla meraklı var. Kabuk komut dosyaları, tüm bu durumlar için mükemmeldir.

Kitapta sunulan betikler, pratik örnekleri inceleyerek zaten önemli olan bash deneyimlerini genişletmek isteyenler ve terminal veya kabuk betiklerini yalnızca ara sıra kullananlar için kesinlikle yararlı olacaktır. İkinci kamptaysanız, muhtemelen gelişmiş bash özelliklerine giriş bölümünü okuyarak bilginizi tazelemeniz veya tamamlamanız gerekecektir.

Bu kitap bir ders kitabı değildir! Amacımız, pratik bash komut dosyası oluşturma tekniklerini göstermek ve (çoğunlukla) kısa ve özlü örneklerle ortak yardımcı programlara aşina olmaktır, ancak bunları satır satır açıklamıyoruz. Biz sadece en temel kısımları açıklıyoruz ve deneyimli scripterler kodun geri kalanının nasıl çalıştığını okuyarak anlayabilecekler. Sevgili okuyucu, nasıl çalıştıklarını anlamak için bu senaryoları - kırın, düzeltin ve ihtiyaçlarınıza göre uyarlayın - deneyeceğinizi umuyoruz. Ana hedefimiz, herhangi bir teknisyenin karşılaştığı ağ yönetimi veya dosya senkronizasyonu gibi genel görevlerin nasıl çözüleceğini size göstermektir.

Kitap yapısı

Bu ikinci baskı, ek orijinal 12 bölüm ve 3 yeni bölüm içerir. Her bölüm, kabuk komut dosyası oluşturma için yeni özellikleri veya kullanım örneklerini gösterir ve birlikte, Unix ile çalışmayı kolaylaştırmak için kapsamlı komut dosyası oluşturma yeteneklerini kapsar. Bu kitapta sunulan betiklerin çoğu hem Linux hem de OS X üzerinde çalışacak. Aksi takdirde, doğrudan hakkında yazacağız.

Bölüm 0: Kabuk Komut Dosyasına Kısa Bir Giriş
Bu, ikinci baskıda tanıtılan tamamen yeni bir bölümdür ve acemi Unix kullanıcılarına bash kabuk sözdizimi ve kullanımına hızlı bir giriş sağlayacaktır. Bu bölüm, hızlı bir şekilde ve lirik ara konuşmalar olmadan, Bölüm 1'i başarılı bir şekilde okumak için ihtiyacınız olan her şeyi kapsayacaktır. basit tanım basit örnekler oluşturmadan ve çalıştırmadan önce kabuk komut dosyaları.

Bölüm 1: Kayıp Kitaplık
C, Perl ve Python gibi Unix ortamında yaygın olarak kullanılan programlama dilleri, sayı biçimlerini kontrol etmek, tarihler arasındaki zaman aralıklarını hesaplamak ve daha birçok problem için çeşitli işlev ve yardımcı programlardan oluşan kapsamlı kitaplıklara sahiptir. Ancak kabukla çalışırken, hemen hemen her şeyle kendi başımıza ilgilenmemiz gerekir, bu nedenle bu bölümde kabuk komut dosyalarını daha kolay hale getirecek araçlar ve teknikler açıklanmaktadır. İlk bölümde öğreneceğiniz her şey, bu kitapta karşılaştığınız senaryoları okumanıza ve kendinizinkini yazmanıza yardımcı olacak. Çeşitli giriş doğrulama özellikleri, bc için basit ve güçlü bir arayüz, büyük sayıların okunabilirliğini geliştirmek için hızlı bir virgül eklemesi, echo komutunun yararlı -n bayrağını desteklemediği Unix çeşnileri için bir hile ve bir komut dosyası ekledik. ANSI renk dizilerini kullanmak için.

Bölüm 2 ve 3: Özel Komutları İyileştirme ve Yardımcı Programlar Oluşturma
Bu iki bölüm, standart Unix araç setini tamamlamak ve genişletmek için yeni komutlar sunar. Sonuçta, sürekli geliştirme ve iyileştirme, ayırt edici özellikleri Unix. Biz de bu sürece dahiliz ve Bölüm 2 ve 3'te şunları uygulayan komut dosyaları sunuyoruz: kullanıcı dostu bir etkileşimli hesap makinesi, onları diskten silmeyen bir dosya silme aracı, iki hatırlatma ve olay izleme sistemi, yer bulma komutunun geliştirilmiş bir sürümü , birkaç saat dilimini destekleyen date komutu ve dizin listesine ek bilgiler ekleyen ls komutunun yeni bir sürümü.

Bölüm 4: Unix'i Ayarlama
Kulağa sapkınlık gibi gelebilir, ancak Unix'in bazı yönleri, onlarca yıllık geliştirmeden sonra bile bitmemiş görünüyor. Unix'in farklı sürümlerini kullanıyorsanız, örneğin ücretsiz Linux dağıtımlarından OS X, Solaris veya Red Hat gibi Unix'in ticari sürümlerine geçiş yapıyorsanız, eksik bayraklar ve komutlar, bazı komutların tutarsız davranışı ve diğer sorunlarla karşılaşacaksınız. benzer sorunlar. Bu nedenle, bu bölüm, Unix komutlarını biraz daha dostça veya diğer Unix lezzetleriyle daha tutarlı hale getiren yeniden işlenmiş versiyonları ve arayüzleri sunacaktır. Diğer şeylerin yanı sıra, GNU olmayan komutlara uzun GNU stili bayrakların nasıl ekleneceğini açıklar. Burada ayrıca bir çift bulacaksınız akıllı senaryolarçeşitli dosya sıkıştırma yardımcı programları ile çalışmayı kolaylaştırır.

Bölüm 5 ve 6: Sistem Yönetimi: Kullanıcı Yönetimi ve Sistem Bakımı
Kitabımızla ilgileniyorsanız, yönetici ayrıcalıklarına sahip olmanız ve bir veya daha fazla Unix sisteminin yönetiminden sorumlu olmanız muhtemeldir. gelir sadece Ubuntu veya BSD çalıştıran kişisel bir bilgisayar. Bu iki bölüm, yönetim konusunda size yardımcı olacak birkaç komut dosyası içerir: disk kullanımını analiz etmeye yönelik yardımcı programlar, gerektiğinde kullanıcıları otomatik olarak bilgilendiren bir disk kotası sistemi. e-posta tahsis edilen disk alanını aşma, killall komutunun geliştirilmiş bir uygulaması, bir crontab kontrol komut dosyası, bir günlük dosyası döndürme aracı ve yedekleme oluşturmak için birkaç yardımcı program hakkında.

Bölüm 7: İnternet Kullanıcıları
Bu bölüm gerçek paketi içerir ilginç senaryolar Internet'teki kaynaklara erişmek için Unix komut satırını kullanmak için bazı harika ve basit teknikleri gösteren bir komut kabuğu. Buna şunlar dahildir: herhangi bir web sayfasından URL'leri çıkarmak için bir araç, bir hava durumu tahmini almak için bir araç, bir video veritabanı arama aracı ve bunları e-posta ile otomatik olarak bildiren bir web sitesi değişikliği algılama aracı.

Bölüm 8: Web Yöneticisi Araçları
Bir web yöneticisiyseniz ve kendi Unix sisteminizde veya ağdaki bir uzak sunucuda çalışan bir web sitesine sahipseniz, bu bölüm anında web sayfaları oluşturmak, web fotoğraf albümleri oluşturmak ve hatta web aramasını günlüğe kaydetmek için çok ilginç araçlar sağlar. Sonuçlar.

Bölüm 9 ve 10: Web Sunucusu Yönetimi ve İnternet Sunucusu Yönetimi
Bu iki bölüm, İnternet erişimi olan sunucuların yöneticilerinin sıklıkla karşılaştığı sorunların çözümlerini açıklar. Burada, web sunucusu trafik günlüğünün farklı yönlerini analiz eden iki komut dosyası, bir web sitesindeki geçersiz dahili veya harici bağlantıları algılamaya yönelik araçlar ve .htaccess dosyalarının bakımını kolaylaştıran kullanışlı bir Apache web sunucusu parola yönetim aracı bulacaksınız. Ayrıca dizinleri ve tüm web sitelerini yansıtma tekniklerini de araştırır.

Bölüm 11: OS X için Komut Dosyası Oluşturma
OS X, ticari olarak başarılı ve çekici grafik kullanıcı arayüzü ile Unix'i dost bir işletim sistemi yapmak için büyük bir adımdı. Daha da önemlisi, OS X güzel bir arayüzün arkasına gizlenmiş eksiksiz bir Unix işletim sistemidir, bu da onun için birçok faydalı ve öğretici komut dosyasının yazılabileceği anlamına gelir. Bu bölümün konusu bu. Ekran yakalamayı otomatikleştirmek için bir araca ek olarak, bu bölümde iTunes müzik kitaplığınızın yapısını keşfetmenize, Terminal pencerelerinin başlığını değiştirmenize ve açma komutunu geliştirmenize yardımcı olacak komut dosyaları sağlanmaktadır.

Bölüm 12: Oyunlar ve Eğlence Senaryoları
En azından birkaç oyuncağı yoksa, programlamayla ilgili bu kitap nedir? 12. Bölüm, daha önce sunulan fikir ve tekniklerin birçoğunu bir araya getiriyor ve altı eğlenceli ve oldukça zorlu oyunun nasıl oluşturulacağını açıklıyor. Bu bölüm sizi eğlendirmek için yazılmış olsa da, her oyunun kodu öğreticidir. Özellikle dikkat çekici olan, bazı hile ve olağandışı komut dosyası oluşturma tekniklerini gösteren Adam Asmaca oyunudur.

Bölüm 13: Bulutta Çalışmak
Bu kitabın ilk baskısının yayınlanmasından bu yana İnternet, hayatımızda giderek daha fazla yer kapladı. Günlük yaşam... Cihazların ve dosyaların iCloud, Dropbox ve Google Drive gibi bulut hizmetleriyle senkronize edilmesi konusu bizim için özellikle önemlidir. Bu bölüm, bu hizmetlerden tam olarak yararlanmak ve dosya ve dizinlerin zamanında eşitlenmesini ve kopyalanmasını sağlamak için kabuk komut dosyalarını gösterir. Ek olarak, burada fotoğraflarla çalışmak ve metin okumak için OS X özelliklerinden yararlanan birkaç komut dosyası bulacaksınız.

Bölüm 14: ImageMagick ve Görüntü Dosyası İşleme
Komut satırı uygulamaları yalnızca metin verilerini değil, grafikleri de işleyebilir. Bu bölüm, açık kaynaklı ImageMagick yazılımı da dahil olmak üzere grafik araç kutusunu kullanarak komut satırından görüntüleri tanımlamaya ve işlemeye odaklanır. Bu bölümdeki komut dosyaları, görüntü türlerini tanımlamaktan kırpmaya ve filigran eklemeye kadar tipik görüntü işlemlerini ve ayrıca birkaç kullanım örneğini kapsar.

Bölüm 15: Günler ve Tarihler
Son bölüm, tarih ve saatlerle işlemleri basitleştiren teknikleri gösterir: iki tarih kaç gün ayrılır, haftanın hangi günü bir sayıya denk gelir veya ondan önce kaç gün kalır. Bu görevleri, kullanımı kolay kabuk komut dosyalarıyla gerçekleştireceğiz.

Ek A: Bash'i Windows 10'a Yükleme
Biz ikinci baskı üzerinde çalışırken Microsoft, açık erişime yönelik tutumunu önemli ölçüde değiştirdi. yazılım ve 2016'da Windows 10 için tam teşekküllü bir bash sistemi bile yayınladı. Kitaptaki örnekler bash'ın bu sürümünde test edilmemiş olsa da, birçok fikir ve çözümü ona aktarmak kolay olacak. Ekte, bir Windows bilgisayarda komut dosyası oluşturmayı deneyebilmeniz için Windows 10'a nasıl bash yükleneceğini açıklıyoruz!

Ek B: Ek Senaryolar
İyi bir izci, her zaman bir yedek plan olması gerektiğini bilir! Bu kitap üzerinde çalışırken, ana komutlardan herhangi birini değiştirmemiz gerekmesi ihtimaline karşı yedek komut dosyaları oluşturduk. Sonuç olarak, yedek komut dosyalarına ihtiyacımız yoktu, ancak bunları sizden, dostlarımızdan bir sır olarak saklamak bizim açımızdan çirkin olurdu. Bu uygulama üç ek komut dosyası içerir: biri toplu dosya yeniden adlandırma için, biri toplu komut yürütme için ve biri de ayın evrelerini hesaplamak için - size 101 senaryo gösterdikten sonra gizleyemedik.

Yazarlar hakkında

Dave Taylor 1980 yılından beri bilgisayar sektöründe çalışmaktadır. BSD 4.4 UNIX'in oluşturulmasına katıldı, programları tüm büyük UNIX dağıtımlarına dahil edildi. Dergi ve gazeteler için binlerce makalenin önde gelen konuşmacısı ve yazarı. OS X için Learning Unix (O'Reilly Media), Solaris 9 for Dummies (Wiley Publishing) ve Sams Teach Yourself Unix in 24 Hours (Sams Publishing) dahil olmak üzere 20'den fazla kitap yazmıştır. Linux Journal için popüler köşe yazarı ve teknik destek ve yeni gadget'ların incelemelerini sağladığı askdavetaylor.com web sitesinin kurucusu.

Brandon Perry Açık kaynak kodlu .NET uygulamasının - Mono'nun piyasaya sürülmesiyle birlikte C# dilinde uygulamalar yazmaya başladı. Boş zamanlarında Metasploit çerçevesi için modüller yazmayı, ikili dosyaları keşfetmeyi ve her türlü şeyi test etmeyi seviyor.

Bilimsel yorumcu hakkında

Jordi Gutierrez Hermoso- programcı, matematikçi ve özgür hacker. 2002'den beri sadece evde değil, iş yerinde de Debian GNU / Linux kullanıyor. Geordie, Matlab ile büyük ölçüde uyumlu ücretsiz bir bilgi işlem ortamı olan GNU Octave ve dağıtılmış bir sürüm kontrol sistemi olan Mercurial'ın geliştirilmesinde yer almaktadır. Saf ve uygulamalı matematiğe, buz patenine, yüzmeye ve örgüye düşkündür. Son zamanlarda, sera gazı emisyonlarının sorunları hakkında çok düşünüyor ve gergedanları korumak için eylemlere katılıyor.

»Kitapla ilgili daha fazla ayrıntıya adresinden ulaşılabilir.

Tabii ki, Linux ile en az bir kez iletişim kuran herkes BASH komut kabuğu ile uğraşmıştır (en azından kesin olarak duymuşlardır). Ancak BASH sadece bir komut kabuğu değil, aynı zamanda mükemmel bir betik programlama dilidir.
Bu makalenin amacı, kullanıcıları bash ile daha iyi tanıştırmak, dilin sözdizimini, temel tekniklerini ve püf noktalarını anlatmak, hatta normal kullanıcı Günlük (-haftalık, -aylık) rutin işleri gerçekleştirmek için hızlı bir şekilde basit bir komut dosyası yazabildim veya bir dizin yedeklemesi için bir komut dosyası yazmak üzere "dizlerimin üstünde" diyelim.

Tanıtım

BASH - Bourne-Again Shell ("yeniden doğmuş yürüyüş" veya "Bourne tekrar yürüdü (sh'nin yaratıcısı)" olarak çevrilebilir), Unix benzeri sistemlerde, özellikle GNU / Linux'ta en popüler kabuk. Aşağıda, betiklerimizi oluşturmak için kullanacağımız bir dizi yerleşik komut bulunmaktadır.

For, while veya while döngüsünden çıkışı kes
for, while veya while döngüsünün sonraki yinelemesini yürütmeye devam et
standart çıktıya, boşluklarla ayrılmış yankı yazdırma argümanları
çıkış kabuğundan çık
dışa aktarma, ortamdaki alt süreçlere geçmek için değişkenler olarak argümanları işaretler
hash, bir sonraki çağrıda onları aramamak için argüman olarak belirtilen komutların tam yol adlarını hatırlar.
kill, işleme bir öldürme sinyali gönderir
pwd mevcut çalışma dizinini görüntüler
read, kabuk girişinden bir dize okur ve belirtilen değişkenlere değer atamak için kullanır.
dönüş, kabuk işlevinin belirtilen değerle çıkmasına neden olur
shift konumsal parametreleri sola taşır
test koşullu bir ifadeyi değerlendirir
times, kabuk ve onun soyundan gelenler tarafından kullanılan kullanıcı adını ve sistem saatini görüntüler.
tuzak, kabuk bir sinyal aldığında çalıştırılacak komutları belirtir
unset, kabuk değişkenlerinin yok edilmesine neden olur
wait çocuğun çıkmasını bekler ve çıkış durumunu bildirir.

Ve elbette, yerleşik komutlara ek olarak, süreçte zaten tanışacağımız bir dizi harici, ayrı komut programı kullanacağız.

Başından beri bilmeniz gerekenler

1. Herhangi bir bash betiği şu satırla başlamalıdır:

#! / bin / bash
#'den sonra bu satırda! bash yorumlayıcının yolu belirtilir, bu nedenle farklı bir yere yüklediyseniz (nerede, bash bash yazarak öğrenebilirsiniz), yolunuza değiştirin.
2. Yorumlar # karakteriyle başlar (ilk satır hariç).
3. Bash'de değişkenlerin bir türü yoktur (aşağıda tartışılacaktır)

Değişkenler ve komut dosyası parametreleri

Örnek olarak inceleyeceğimiz küçük bir örnek vereceğim:

#! / bin / bash
# bash yorumlayıcısını nerede sakladığımızı belirtin
parametre1 = $ 1 # parametre1 değişkenine betiğin ilk parametresinin değerini ata
script_name = $ 0 # script_name değişkenini kod adının değerine ayarlayın
echo "$script_name adında ve $parametre1 parametresiyle bir komut dosyası çalıştırdınız" # echo komutu belirli bir satır verir, değişkenlere $değişken_adı üzerinden erişilir.
echo "$ script_name adında ve $ parametre1 parametresiyle bir komut dosyası çalıştırdınız" # burada başka tırnak işaretleri görüyoruz, tek fark, tek tırnak içinde değişken ikamesi olmamasıdır.
çıkış 0 # 0 koduyla çıkın (komut dosyasının başarıyla tamamlanması)

[e-posta korumalı]: ~ $ ./test.sh qwerty
/ Test.sh adlı bir betiği qwerty parametresiyle çalıştırdınız.
$ script_name adlı bir komut dosyası ve $ parametre1 parametresi çalıştırdınız

Değişkenleri nasıl kullanacağımızı ve komut dosyasına parametreleri nasıl ileteceğimizi gördüğümüze göre, ayrılmış değişkenlere aşina olmanın zamanı geldi:

$ DIRSTACK - dizin yığınının en üstündeki içerik
$ EDITOR - varsayılan metin düzenleyici
$ EUID - Etkili UID. Başka bir kullanıcıdan gelen komutları yürütmek için su kullandıysanız, bu değişken o kullanıcının UID'sini içerirken ...
$ UID - ..., yalnızca oturum açma sırasında ayarlanan gerçek tanımlayıcıyı içerir.
$ FUNCNAME, komut dosyasındaki geçerli işlevin adıdır.
$ GROUPS - geçerli kullanıcının ait olduğu grup dizisi
$ HOME - kullanıcının ana dizini
$ HOSTNAME, ana bilgisayar adınızdır
$ HOSTTYPE - makine mimarisi.
$ LC_CTYPE - karakter kodlamasını tanımlayan dahili değişken
$ OLDPWD - eski çalışma dizini
$ OSTYPE - işletim sistemi türü
$ PATH - program arama yolu
$ PPID - üst süreç tanımlayıcısı
$ SECONDS - komut dosyası çalışma süresi (saniye olarak)
$# - Toplam komut dosyasına geçirilen parametreler
$ * - tüm argümanlar komut dosyasına iletilmez (bir dizgeye çıktı)
[e-posta korumalı]- öncekiyle aynı, ancak parametreler bir sütunda gösteriliyor
$! - Arka planda çalışan son işlemin PID'si
$$ - Komut dosyasının kendisinin PID'si

Koşullar

Koşullu operatörler, sanırım, bir şey üzerine program yazmayı deneyen hemen hemen herkese tanıdık geliyor. Bash'de koşullar izlenir. şekilde (bir örnekle her zamanki gibi):
#! / bin / bash
source = $ 1 # ilk kod parametresini kaynak değişkene koyun
dest = $ 2 # ikinci kod parametresini dest değişkenine koyun

Eğer [["$ source" -eq "$ hedef"]] # ise, karşılaştırma için değişkenlerin isimlerini tırnak içinde belirtir. -eq - "eşit" anlamına gelen boole karşılaştırması
o zaman # eğer gerçekten eşitlerse, o zaman
echo "Uygulama $ hedef ve kaynak $ kaynak aynı dosyadır!" # bir hata mesajı göster, çünkü $ kaynak ve $ hedef eşittir
çıkış 1 # bir hatayla çıkış (1 - hata kodu)
başka # eğer eşit değillerse
cp $ kaynak $ hedef # ardından cp komutunu çalıştırın: kaynağı hedefe kopyalayın
echo "Başarılı kopyalama!"
fi # koşulun sonunu belirtir.

Komut dosyasının yürütülmesinin sonucu:
[e-posta korumalı]: ~ $ ./primer2.sh 1 1
Uygulama 1 ve kaynak 1 aynı dosyadır!
[e-posta korumalı]: ~ $ ./primer2.sh 1 2
Başarılı kopyalama!

if-then-else yapısı şu şekilde kullanılır:
Eğer<команда или набор команд возвращающих код возврата(0 или 1)>
sonra
<если выражение после if истино, то выполняется этот блок>
Başka
<если выражение после if ложно, тот этот>
[[, [, test, (()) veya diğer (veya birkaç) linux komutu yapıları, dönüş kodunu döndüren komutlar olarak işlev görebilir.
test - mantıksal karşılaştırma için kullanılır. ifadeden sonra bir kapatma parantezi "]" gereklidir
[- test komutunun eş anlamlısı
[[- genişletilmiş sürüm "[" (sürüm 2.02'den beri), içinde || (veya), & (ve). Kapanış parantezi "]]" olmalıdır
(()) - matematiksel karşılaştırma.
formun çok katmanlı koşullarını oluşturmak için:
Eğer ...
sonra ....
Başka
Eğer ....
sonra ....
Başka ....

Kodun kısalığı ve okunabilirliği için yapıyı kullanabilirsiniz:
Eğer ..
sonra ...
elif...
sonra ...
elif...

Koşullar. Çoktan seçmeli

Tek bir değişkeni çok sayıda parametreyle karşılaştırmanız gerekiyorsa, case ifadesini kullanmak daha uygundur.
#! / bin / bash
echo "Çalıştırılacak düzenleyiciyi seçin:"
echo "1 Nano programı çalıştırın"
echo "2 vi programını çalıştır"
echo "3 emacs programını başlatın"
echo "4 Çıkış"
# yaparak oku burada standart girdiden $ yapıyor değişkenini okuyoruz

Case $ yapıyor
1)
/ usr / bin / nano # eğer $ yapmak 1 içeriyorsa, nano'yu çalıştırın
;;
2)
/ usr / bin / vi # eğer $ yapmak 2 içeriyorsa vi'yi çalıştırın
;;
3)
/ usr / bin / emacs # eğer $ yapmak 3 içeriyorsa emacs'ı çalıştırın
;;
4)
0 çıkışı
;;
*) # klavyeden bu durumda açıklanmayan bir şey girilirse aşağıdakileri yapın:
echo "Geçersiz işlem girildi"

Esac # vaka ifadesi sonu.

İşin sonucu:
[e-posta korumalı]: ~ $ ./menu2.sh
Çalıştırmak için bir düzenleyici seçin:
1 nano programın başlatılması
2 vi programını başlatma
3 emacs programını başlatma
4 Çıkış

Bir sayı seçip Enter'a bastıktan sonra, seçtiğiniz editör başlayacaktır (tabii tüm yollar doğru belirtilmedikçe ve bu editörleri kurmadıysanız :))
if-then-else-fi yapısı için kullanılan mantıksal operatörlerin listesi:
-z # satır boş
-n # satır boş değil
=, (==) # dize eşittir
! = # dizi eşit değil
-eq # eşittir
-ne # eşit değil
-lt, (<) # меньше
-le, (<=) # меньше или равно
-gt, (>) # daha
-ge, (> =) # büyük veya eşittir
! # boole ifadesinin olumsuzlanması
-a, (&&) # mantıksal VE
-o, (||) # mantıksal "VEYA"

Makaleyi aşırı yüklememek için dilin ve koşulların temellerini anladık, onu birkaç bölüme ayıracağım (diyelim ki 3'e). İkinci bölümde, döngü operatörlerini ve matematiksel işlemlerin yürütülmesini inceleyeceğiz.

UPD: Bazı hatalar düzeltildi
UPD: if-then-else koşullarıyla ilgili kısım güncellendi

Dipnot: Kabuk konsepti. Komut kabuklarına genel bakış. Kabuk kabuğu. İşin özellikleri (komut geçmişi, operatör "!", Bir tuşa basarak eylemler ). Konsol çoklu görev. Görevler. İş yönetimi. Geceyarısı komutanı ortam değişkenleri

Dersin seyri

1. Linux ve Unix dünyasında, bir bilgisayarda çalışmak, kavramla ayrılmaz bir şekilde bağlantılıdır. komut kabuğu- kullanıcının komutları girerek ve yürüterek sistemle etkileşime girmesini sağlayan bir program. Ancak, komut kabuğu düzenli bir programdır. Dosyada varsayılan kabuk olarak ayarlayarak bunu kanıtlayabilirsiniz. şifre kullanıcı için farklı bir program. Ancak sistemin bunu bir kabuk olarak tanıması için, dosya adını mutlak olarak eklemeniz gerekir. / vb / kabuklar.

Linux birkaç kabukla birlikte gelir, bileşimleri dağıtıma bağlı olarak değişebilir, ancak her zaman şunları bulabilirsiniz:

Bourne Shell (sh) - en eski ve en yaygın komut kabuğu Unix sistemleri için. Bunu kullanmayan tek bir Unix sistemi yoktur.

Bourne Again Shell (bash) genişletilmiş bir Bourne Shell'dir. Pek çok hoş avantajı var, bu yüzden son zamanlarda bu kadar popüler hale geldi. Neredeyse tüm Linux dağıtımları için "varsayılan" kabuktur.

Ayrıca popüler deriler:

csh- komut sistemi C programlama diline yakın olan bir kabuk

tcsh, Tcl programlama diline benzer bir komut sistemine sahip bir kabuktur.

zsh muhtemelen en güçlü kabuktur. sh'nin (bourne kabuğu) bir uzantısıdır.

Linux varsayılan olarak bash kullandığından, bunun hakkında konuşacağız.

2. Komut kabuğu bash aslında Bourne Shell'in ücretsiz karşılığıydı. Daha sonra, yetenekleri büyüdüğünde, bağımsız bir ürün olarak kabul edildi. Bash'in ana özellikleri şunlardır:

Tablo 1.1.
Fırsat Bir yorum
1 Bir dize düzenleme Girilen komutu yeniden yazmak yerine düzenleyebilme
2 Kanal organizasyonu Fırsat G / Ç yönlendirmeleri, gerçekleştirilen görevler arasındaki kanalları organize etme
3 Kullanım kolaylığı Komut takma adlarını, komut geçmişini, otomatik tamamlamayı kullanma
4 iş yönetimi Arka plan işleri oluşturma ve yönetme yeteneği
5 Özelleştirme esnekliği Her kullanıcı için ayrı ayrı oturum açmak için komut dosyalarını kullanma, ortam değişkenleri

I/O yönlendirmesini ve boruları daha sonra Ders 8'de öğreneceğiz. Bu nedenle, bu noktayı atlayacağız. Ancak bash'ta çalışmanın özelliklerinden, sağladığı avantajlardan daha detaylı bahsedelim.

Bash, kullanıcı tarafından yazılan tüm komutları otomatik olarak bir dosyaya yazar ~ / .bash_history... Bu dosyayı yönetmek için geçmiş komutu kullanılır. tarih yerleşik komut bash. Yani, bu komuta karşılık gelen yürütülebilir bir dosya yok. kendisi komut kabuğu tüm işlemleri gerçekleştirir. Parametresiz girildiğinde, bu dosyada saklanan tüm komutları listeler ve cat ~ / .bash_history komutuyla aynıdır.

Komut geçmişi, yaygın olarak kullanılan komutlar kümesini basitleştirmek için mevcuttur. Komut geçmişi, tuşları kullanılarak listede kaydırılabilir <вверх>ve<вниз> .

Başka bir yol da komut satırına yazmaktır! ve komutu başlatın ve tuşuna basın ... İlk harfleri yazılanlarla eşleşen tarihten son komut yürütülür. Örneğin:

$! / usr / usr / bin / perl ./ptest.pl Tamam $! xfonts bash:! xfonts: olay bulunamadı $

Ancak, tarih henüz ihtiyacımız olan komutu içermiyorsa, girişi nasıl hızlandırabiliriz? Bu durumda, anahtar bize yardımcı olacaktır. ... Komutun (veya dosya yolunun) ilk birkaç harfini yazdıktan sonra, tuşuna basın. ve bash komutunuzu (veya yol öğesini) otomatik olarak tamamlayacaktır. Birkaç dosyanın sığması veya hiçbirinin sığmaması durumunda sistem bip sesi çıkaracaktır. eğer düğme tekrar basın, ardından birkaç dosya geldiğinde - sistem bir liste gösterecek ve hiçbiri olmadığında - bip sesini tekrarlayacaktır

3. İlk dersten itibaren Linux'un çok görevli bir ortam olduğunu hatırlamış olmalısınız. Ancak, şimdiye kadar, çoklu görev özelliğinden hala yararlanamadınız. İlk bakışta konsol, sistemin çoklu görev yeteneklerinin kullanılmasına izin vermiyor ve sadece grafiksel bir ortamda iki veya daha fazla programı aynı anda çalıştırmak mümkün görünüyor. Ama durum böyle değil! Konsol da çoklu görev yapıyor.

İlk olarak, her birinde bir program açarak birkaç konsol açabilirsiniz. Konsollar arası geçiş, tuşlar kullanılarak yapılacaktır. Ctrl + , nerede x- konsol numarası.

Ve tek bir konsolda bile, iş yönetimi komutlarının yardımıyla çoklu görev sisteminden tam olarak yararlanabilirsiniz.

- bir işleme yakalanmayan bir sinyal gönderen bir tuş kombinasyonu işaret durağı... Kontrolü komut satırına aktarma işleminin yürütülmesini durdurur.

& komutu - komuttan sonraki &, onu arka planda çalıştırmanıza izin verir.

işler - Geçerli kabuk işlerini listeler.

erkek arkadaş<#j>- #j işini arka plana koyar. Bundan önce, görev tuş kombinasyonu ile durdurulmalıdır. ... Şu anda tercümanın yalnızca bir görevi varsa, sayı atlanabilir.

fg<#j>- #j işini ön plan yürütme moduna geçirir. İş bir tuş kombinasyonu ile durdurulmalıdır veya arka planda olun. Şu anda tercümanın yalnızca bir görevi varsa, sayı atlanabilir.

$ man bash ^ Z + Durdurulan man bash $ vim ^ Z vim + Durdurulan vim $ bg 1 + man bash & $ işler + Durdurulan man bash + Durdurulan vim $ fg 2 + vim $ fg + man bash $

4. Ortam Değişkenleri- tercihlerinizi belirten sistem bilgileri, örneğin Metin düzeltici varsayılan, yürütülebilir dosyalar vb. için arama yolları ve ayrıca kullanıcı, sistem ve aşağıdaki gibi kabuk kimlik bilgileri Kullanıcı adı, Shell ve diğer programlar tarafından kullanılan Linux sürümü vb.

Kullanıcı tarafından yaygın olarak kullanılan değişkenler şunlardır:

PATH - değişken, tam veya göreceli yol onlara.

PWD - bu değişken geçerli dizinin tam adını içerir.

HOME - değişken tam yolu içerir kullanıcının ana dizini.

HOSTNAME - değişken, bilgisayarın adını içerir.

LOGNAME - içerir Kullanıcı adı

KABUK - geçerli oturumda çalışan kabuğun adını içerir.

KULLANICI - içerir Kullanıcı adı kimin oturumu şimdi açık.

Parametresiz girilen dışa aktarma komutu kullanılarak sistemde kurulu olan değişkenlerin listesi görülebilir.

Bash kabuğunun kendi değişkenleri vardır. Yerel değişkenlerin sistem değişkenleri olabilmesi için aynı dışa aktarma komutu kullanılarak dışa aktarılmaları gerekir.

$ export bildir -x HOME = "/ home / gserg" bildir -x HOSTNAME = "WebMedia" bildir -x LANG = "ru_RU.KOI8-R" bildir -x LOGNAME = "gserg" bildir -x PATH = "/ bin: / usr / bin: / usr / local / bin: / home / gserg / bin "declare -x PWD =" / home / gserg "declare -x SHELL =" / bin / bash "declare -x TERM =" Eterm "declare -x KULLANICI = "gserg" $ EDİTÖR = / bin / vim $ dışa aktar EDİTÖR $ dışa aktar bildir -x EDITOR = "/ bin / vim" bildir -x HOME = "/ ev / gserg" bildir -x HOSTNAME = "WebMedia" bildir -x LANG = "ru_RU.KOI8-R" beyan -x LOGNAME = "gserg" beyan -x PATH = "/ bin: / usr / bin: / usr / yerel / bin: / ana sayfa / gserg / bin:" beyan - x PWD = "/ home / gserg" bildir -x SHELL = "/ bin / bash" bildir -x TERM = "Eterm" bildir -x USER = "gserg" $

Takım ayarsız sistem değişkenini kaldırır. Örneğin:

$ unset EDITOR $ dışa aktarma beyanı -x HOME = "/ home / gserg" beyan -x HOSTNAME = "WebMedia" beyan -x LANG = "ru_RU.KOI8-R" beyan -x LOGNAME = "gserg" beyan -x PATH = " / bin: / usr / bin: / usr / local / bin: / home / gserg / bin: "declare -x PWD =" / home / gserg "declare -x SHELL =" / bin / bash "declare -x TERM = "Eterm" beyan -x USER = "gserg" $

5. Bugünkü derste, sizi biraz standart dışı, başka bir komut kabuğu ile tanıştıracağız. gece yarısı komutanı... Değil komut kabuğu her zamanki anlamda. Bu bir metin dosyası yöneticisidir - analog Norton Komutanı veya Irak. gece yarısı komutanı mc komutu ile başlatılır. Yeteneklerinden bahsedeceğiz.

Ekran Gece yarısı komutanı "bir iki bölüme ayrılmıştır. Neredeyse tüm ekran alanı, bir dizin ve dosya listesi içeren iki panel tarafından işgal edilmiştir. Varsayılan olarak, ekranın altından ikinci satır, normal kabuk komutlarını çalıştırabileceğiniz komut satırıdır ve alt satır, işlev tuşları için ipuçları içerir ( F1-F10). Sembollerin üst satırı, çeşitli işlevleri gerçekleştirebileceğiniz bir menü içerir. Menüyü kullanmak için gerekli öğeye tıklayabilir veya tuşuna basabilirsiniz. F9 ve tuşları kullanarak imleç kontrolü istediğiniz öğeyi seçin.

Paneller gece yarısı komutanı iki kataloğun aynı anda görüntülenmesini sağlar. Panellerden biri aktif (kullanıcının içindeki dosya ve dizinlerle belirli eylemleri gerçekleştirebilmesi anlamında). Etkin panelde, dosyalardan veya dizinlerden birinin adı vurgulanır ve en üst satırdaki panel başlığı vurgulanır. Başlığın adı, o anda görüntülenen dizinin adıyla aynıdır. Hemen hemen tüm işlemler aktif panelde gerçekleştirilir. Transfer veya transfer gibi bazı işlemler dosyaları kopyala kopyalamak, taşımak vb. için bir yer olarak pasif bir panel kullanın.

Şimdi birlikte çalışmanıza yardımcı olacak temel klavye kısayollarından bahsedelim. Gece yarısı komutanı "ohm.

aktif paneli değiştirmek için tuşlarını kullanın veya +

dosyayı işaretlemek için tuşuna basın. veya +

Tıklayın yardım için

dosya görüntüleyiciyi çağıracak

üzerinden dosyayı düzenleyeceksin

dosyayı kopyalamanıza izin verir.

bir dosyayı taşı veya yeniden adlandır

dizin oluştur

Anahtar dosyayı ve/veya dizini kaldıracak

, daha önce de belirtildiği gibi, menüye erişimi açar.

- çıkmanıza izin verecek gece yarısı komutanı.

işaretçiyi dosya listesinin başına taşır,

- tam tersine - listenin sonuna.

ve göstergenin konumunu sırasıyla bir sayfa yukarı ve aşağı değiştirecektir.

Anahtar <*> ek klavyede dosya seçimini tersine çevirmenize izin verir (dizinler üzerinde hiçbir etkisi yoktur)

Anahtar <+> ek klavyede dosyaları maskeye göre işaretler ve <-> maske ile dosyaların işaretini kaldırın.

+ - dizinin içeriğini güncelleyin (diskten veya ağdan yeniden okuyarak)

+ - sağ ve sol panelleri değiştirin.

+ - panelleri çıkarın / iade edin.

Klavye kısayolları, işi halletmek için en uygun araç olsa da Gece yarısı komutanı "ohm mümkün olduğunca hızlı ve kullanışlı, yeni başlayanlar için hepsini bir kerede öğrenmesi oldukça zordur. Bu boşluğu doldurmak ve klavye kısayollarının eksik olduğu diğer özellikleri eklemek için, gece yarısı komutanı bir menüsü var ( F9).

Menü öğelerden oluşur: Sol Panel, Dosya, Komut, Ayarlar, Sağ Panel.

"Sol / Sağ Panel"- bu menü öğeleri tamamen aynıdır. Aralarındaki tek fark, gerçekleştirilen eylemlerin sol veya sağ panele yönlendirilecek olmasıdır.

"Liste formatı"- dosya / dizin listesinin görüntüleneceği görünümü seçebileceğiniz bir iletişim kutusu açar. Standart, kısa ve genişletilmiş biçimler arasından seçim yapın. Ancak bu penceredeki kullanıcı, "Kullanıcı tanımlı" radyo butonunu seçerek panel görünümünü kendisine uygun olacak şekilde tanımlayabilir.

"Hızlı Görünüm"- paneli, bitişik panelde seçilen dosyaların otomatik görüntüleme moduna geçirir. Odak otomatik olarak karşı bölmeye geçer.

"Bilgi"- paneli, bitişik panelde vurgulanan dosya hakkındaki konum, erişim hakları ve sahip gibi bilgileri görüntüleme moduna geçirir, dosya sistemi ve bulunduğu cihaz, bu dosyayla ilişkili sabit bağlantıların sayısı ve dosyanın bulunduğu cihazla ilgili bilgiler,

"Ağaç"- çevirir gece yarısı komutanı Windows OC'deki gezgin moduna benzer bir moda. Komutun uygulandığı panelde "Ağaç", okları kullanarak gezinebileceğiniz bir dizin ağacı oluşturulur imleç kontrolü, anahtarlar PageUp, PageDown, Ana Sayfa, Son... Bitişik panel, ağaçta vurgulanan dizinin içeriğini görüntüler.

"Sıralama düzeni"- dosya ve dizinlerin ad, uzantı, düzenleme süresi, erişim süresi, öznitelik değiştirme zamanı, boyut, düğüm (dosyanın bulunduğu yer) gibi listede sıralanacağı bir öznitelik seçebileceğiniz bir iletişim kutusu açar ). Ayrıca dosyaları kategorilere ayırmadan bırakabilir, büyük/küçük harfe duyarlı olarak veya ters sırada sıralayabilirsiniz.

"Filtre"- iletişim kutusuna girilen normal ifadeyi kullanarak panelde görüntülenecek dosyaların adlarını seçmenize olanak tanır.

"FTP bağlantısı"- bu komutu kullanarak, protokolü kullanarak uzak (hatta yerel) bir bilgisayarla bağlantı kurabilirsiniz. ftp... Yalnızca uzak sunucunun adresi girilirse, o zaman gece yarısı komutanı anonim bir bağlantı kurmaya çalışacaktır. Düğümün ayarlandığı satırın tamamı aşağıdaki gibidir:

ftp: kullanıcı adı: şifre @ server_address: port / directory_on_server

Bağlantı kurduktan sonra, uzak dosya sistemi yerel bir dosya sistemiyle çalışmaya benzer şekilde olur.

"Kabuk bağlantısı"- protokolü kullanarak bir ağ bağlantısı açmanıza izin verir BALIK (Shell üzerinden dosya aktarımı- kabuk aracılığıyla dosya aktarımı). BALIK protokolleri kullanır RSH (Uzak Kabuk- uzak kabuk) veya SSH (Güvenli Kabuk- korumalı kabuk, analog RSH, ancak iletilen verilerin şifrelenmesi desteği ile). Kullanıcının uzak ana bilgisayarı belirleyebileceği tam satır aşağıdaki gibidir:

sh: kullanıcı adı @ server_address: seçenekler / directory_on_server

Parametre Kullanıcı adı, seçenekler ve dizin_on_sunucusu isteğe bağlı. Eğer Kullanıcı adı belirtilmemiş o zaman gece yarısı komutanı yerel bilgisayarda kullanılan kullanıcı adıyla uzak sistemde oturum açmayı deneyecektir.

"Tekrar düzeltme yapmak"- tuş kombinasyonunun analogu + - Mevcut paneldeki dosya ve dizinlerin listesini diskten veya ağ üzerinden yeniden okuyarak güncellemeyi çağırır.

"Dosya"- öğeleri dosya ve dizinleri işlemenin temel işlevlerini sağlayan menünün bir bölümü, örneğin:

"Kullanıcı menüsü"- kullanıcı tarafından ayarlanan menüyü çağırmanızı sağlar. Anahtar tarafından da adlandırılır .

"Dosyayı görüntüle"- düğmesine basılarak gerçekleştirilen işlevin analogu ... Vurgulanan dosyayı görüntülemenizi (veya dizine gitmenizi) sağlar. Metin biçimleri, arşiv, Winword DOC, Linux yürütülebilir dosyaları vb. gibi birçok biçimi destekler.

"Dosya görüntüleniyor..."- önceki öğeyle aynı, ancak vurgulanan dosyayı etkilemez, ancak adı ve yolu iletişim kutusuna girilecek olanı etkiler.

"Takımı Görüntüle"- bir komutu yürütmenize ve görüntülemenize izin verir standart dosya görüntüleme modunda.

"Düzenleme"- dosyayı düzenlemek için açar. Basit yerleşik Metin düzeltici yapılandırma dosyalarını, programların kaynak kodlarını vb. düzenlemek için yeterli sayıda yerleşik işleve ve yerleşik otomatik sözdizimi vurgulama düzenlemeyi daha uygun hale getirir ve düzenlenen metinleri daha okunabilir hale getirir.

"Kopyala"- dosyayı aktif panelden pasif panele kopyalar. tarafından çağrılan işlevin bir analogu ... Varsayılan olarak, etkin panelde vurgulanan dosya (veya dosya grubu) kopyalanmış olarak kabul edilir ve hedef, pasif panelde açılan dizindir. Bu, bu komut çağrıldıktan sonra açılan iletişim kutusundaki alan değerleri düzeltilerek değiştirilebilir.

"Erişim hakları"- iletişim kutusunda bir dosyaya (veya bir dosya grubuna) erişim haklarını değiştirmenize olanak tanır.

"Sembolik bağlantı"- sembolik bir bağlantı oluşturur. Varsayılan olarak, hedef dosya aktif panelde vurgulanan dosyadır ve oluşturulan bağlantı aynı ada sahip olacak ve pasif panelde açık olan dizinde bulunacaktır. Kullanıcı bunu açılış iletişim kutusunda değiştirebilir.

"Sahip / Grup"- dosyanın / dizinin ait olduğu sahibi ve / veya grubu değiştirir.

"Haklar (genişletilmiş)"- dosyaya ve sahibine ve / veya grubuna erişim haklarını aynı anda değiştirmenize olanak tanır. Erişim hakları, sahip, grup ve tüm kullanıcılar için üç rwx dizisi olarak temsil edilir.

"Yeniden isimlendirmek"- bir dosyayı yeniden adlandırmanıza / taşımanıza izin verir. tarafından çağrılan işlevin bir analogu ... Varsayılan olarak, aktif panelde vurgulanan dosya (veya dosya grubu) taşınmış / yeniden adlandırılmış olarak kabul edilir ve hedef, pasif panelde açılan dizindir. Bu, bu komut çağrıldıktan sonra açılan iletişim kutusundaki alan değerleri düzeltilerek değiştirilebilir.

"Dizin oluştur"- bir dizin oluşturur. tarafından çağrılan işlevin bir analogu ... Varsayılan olarak dizin, aktif panelde açık olan dizinde oluşturulur. Bu, açılan iletişim kutusunda oluşturulan dizine giden tam yol belirtilerek değiştirilebilir.

"Kaldırma"- bir dosyayı / dosya grubunu / dizini siler. tarafından çağrılan işlevin bir analogu .

"Dizin değiştir"- geçerli dizini değiştirir. Bash'in cd komutuyla aynı. Gerekli dizin iletişim kutusuna girilir.

"Grubu işaretle"- Aktif panelde açılan dizinde bir grup dosyayı maske ile işaretler. ile çağrılan bir fonksiyonun analogu <+> ek klavyede.

Çoğu Linux dağıtımında varsayılan olarak Bash kabuğu kuruludur. Unix benzeri işletim sistemleri için tüm POSIX uyumlu kabuklar arasında çok az fark olduğunu unutmayın.

Bash, metin modunda veya Terminal uygulamasında çalışır ve etkileşimli olarak çalışır. Bu, kullanıcı girdisini beklediği ve ardından girilen satırı yürütülecek bir komut olarak yorumladığı anlamına gelir. Komutlar farklıdır: program başlatma, dosya işlemleri, Bash dilinde komut dosyası yürütme vb.

Unix, kullanıcıların terminaller aracılığıyla eriştiği çok kullanıcılı bir işletim sistemi olarak tasarlanmıştır. Örneğin, binada güçlü bir bilgisayar vardı ve uzmanların çalışma odalarında terminaller vardı - ortak bir makinenin kaynaklarına erişim noktaları.

80'lerde başlayan kişisel bilgisayarların çoğalmasıyla bağlantılı olarak, çok kullanıcılı işletim sistemleri kitlesel tüketiciler tarafından talep edilmedi. Ancak, sunucular için iyi bir seçim haline geldiler.

Site dosyalarını barındıran bir web sunucusuna SSH üzerinden bağlandığınızı düşünün. GNU / Linux işletim sisteminde çalışarak ve Terminal programını çalıştırarak, Bash'e belirli bir kullanıcı adı altında uzak bir makineye bağlanma komutu verirsiniz.Sunucu size yanıt verir ve bu kullanıcının şifresini girmenizi ister.Hepsi bu sunucu bilgisayarının yapabileceği için bir kişi değil uzaklara kullanılmalı.

Linux metin modundaki yerel bir bilgisayarda (örneğin, Ctrl + Alt + F2 tuşlarına basarsanız), terminal aracılığıyla makineye uzaktan erişim öykünür. Burada Bash önce sizden bir kullanıcı adı ve ardından bir şifre girmenizi ister. Şifreyi girerken ekranda hiçbir şey görüntülenmiyor. Bu bilerek yapılır, böylece girilen karakterlerin sayısı bile gözetlenemez. Girilen kullanıcı adı/şifre çifti, sisteme daha önce kayıtlı herhangi bir kullanıcıya karşılık geliyorsa, komutu girmek için Bash komut satırı istemini göreceksiniz.Bir hata durumunda, kullanıcı adı/şifreyi yeniden girmeniz gerekecektir.

Grafik modunda, Terminal uygulaması, onu başlatan kullanıcının verilerini otomatik olarak "alır" ve Bash "y'yi geçer. Böylece, zaten sisteme sunulursunuz ve gördüğünüz ilk şey komut satırı istemidir.

Komut satırı isteminin nispeten standart sözdizimi vardır ve şöyle görünür: kullanıcı adı @ bilgisayaradı: geçerli dizin işareti.

Ekran görüntüsünde pl, kullanıcı adı, comp ise bilgisayar adıdır. Linux sistemlerinde ~ tilde karakteri, kullanıcının ana dizini (/ home / user) için bir kısaltmadır. Bash'in geçerli varsayılanı yaptığı bu dizindir. Dolar işareti $, ayrıcalıksız bir kullanıcı olarak çalıştığımızı gösterir. Yönetici olarak oturum açtıysanız, dolar yerine bir sayı işareti # olacaktır.

Komut isteminden sonra otomatik olarak bir boşluk eklenir ve komutun girilmesi beklenir. Yukarıdaki resimde ilk başta sadece Enter'a basıldı. İkinci satırda ise başka bir dizine geçme komutu girildi. Üçüncü satırda, yürütmesinin sonucunu görüyoruz - / opt, komut isteminde görüntülenen geçerli dizin haline geldi.

Bash'de verilebilecek birçok komut vardır. Temel olarak, bunlar / bin, / usr / bin ve diğer birkaç dizinde bulunan belirli bir programı başlatmak için komutlardır. Kontrol edilecek dizinler kabuğun $ PATH değişkenine yazılır:

Burada echo komutu ile Bash'den bize $ PATH değişkeninin değerini vermesini istiyoruz. Çıktıda, dizinler iki nokta üst üste ile birbirinden ayrılır.

Belirli bir dizinde hangi programların yüklü olduğunu görebilir ve ardından bunlardan birini çalıştırabilirsiniz:

Uygulamanın sadece bir grafik arayüzü varsa, o şekilde başlayacaktır (grafik modundaysanız, metin modunda bir hata oluşacaktır). Bu durumda Bash, programın tamamlanmasını bekleyecektir, yani başka komutların girilmesi mümkün olmayacaktır. Ancak Terminal'de ikinci bir sekme açabilir veya ikinci bir pencere oluşturabilirsiniz. Bu Bash için başka bir işlem başlatacak.

Metin tabanlı programlar var. Örneğin, Nano düzenleyici:

Bu durumda, Bash "y'ye nano komutu verildi ve GNU Nano editörü sağ terminalde açıldı. İçine birkaç kelime girildi. Editörden çıkmak için Ctrl + X tuşlarına basın, kaydetmeyi onaylayın veya iptal edin. Bundan sonra, Bash komut satırına döndürüleceksiniz.

Bash'de çalışan birçok program, kullanıcıyla etkileşimli olarak (diyalog modunda) etkileşime girmez. Bunlara program değil komut demek anlamlarında daha doğrudur. Kullanıcı bir komut girer, yürütür ve kontrolü Bash'e geri aktarır. Bir takımın ne yaptığı takıma bağlıdır.

Bash, yalnızca $ PATH içinde listelenen dizinlerde olmayan programları çalıştırabilir. Ancak bu durumda, ondan önceki adresin açıkça belirtilmesi gerekir. Ayrıca, dosyanın yürütme iznine sahip olması gerektiğini unutmayın.

Burada, ana dizinde, 10 sayısını gösteren Python kodunu içeren bir test.py dosyası oluşturuldu. Kod Nano'da yazılmıştır (ekran görüntüsünde gösterilmemiştir). Ardından, adresindeki dosyaya erişerek programı çalıştırmaya çalışıyoruz. Nokta geçerli dizini gösterir. Bu durumda, evdir, yani ~ / test.py veya /home/pl/test.py ile aynıdır.

Programı çalıştırma iznimiz olmadığı için ilk çağrıda hata alıyoruz. chmod komutu ile bu hakkı ekliyoruz (seçenek + x).

Birçok komut var. Hepsini bilmek en azından zor. Ancak, en çok talep görenler var. Bunlar, dosyalar üzerinde işlem yapmak, programları kurmak, dizinleri ve dosyaları görüntülemek, dizin ağacında gezinmek vb., yani işletim sisteminin grafik modunda yaptığımız her şey için komutlardır. Birçoğu bu kursta ele alınacaktır. Bazılarını zaten biraz tanıdık (cd, ls, echo, chmod).

Geri kalanına duyulan ihtiyaç daha az sıklıkla ortaya çıkar. Bu durumlarda, Bash ve diğer kaynaklar aracılığıyla sağlanan başvuru kılavuzları kurtarmaya gelir. Kurs, öncelikle Bash'de çalışmanın özelliklerine odaklanacaktır.

Ayrıca Bash'in de bir betik programlama dili olduğunu unutmayalım. Genellikle .sh uzantılı bir dosya, yalnızca komutların bir listesini değil, aynı zamanda belirli komutların nasıl ve hangi durumlarda yürütüleceğini "söyleyen" dil talimatlarını da (koşullu operatör, döngüler, vb.) içerebilir. Bash programlama bu ders kapsamında değildir.

Egzersiz yapmak

Aşağıdaki komutların ne yaptığını kendiniz keşfedin: date, cal, pwd, who, clear, exit. Bu programların yürütülebilir dosyalarının hangi dizinlerde bulunduğunu öğrenmek için hangi komutu kullanın.

Görevlerin cevaplarını ve ek dersleri içeren kurs:

Kabuklar, Unix'in geliştirilmesinin başlarında ortaya çıktı ve gerekliydi çünkü sistemle etkileşime geçmenin tek yolu onlardı. Bu süre zarfında çok uzun bir gelişim yolu kat ettiler ve birçok yeni işlev aldılar. Linux kabuklarının gelişimini değerlendirmek kolay değildir. Bu konuda çok uzun bir süre yazabilirsiniz ve bir makale kesinlikle yeterli değildir. Çok derine dalmadan sadece en temel konuları ele almaya çalışacağız. Önce bir Linux komut kabuğunun ne olduğuna ve hangi kabukların olduğuna bir göz atalım.

Linux / Unix komut kabuğu nedir

Unix kabuğu, kullanıcı tarafından girilen komutları yürüten bir komut satırı yorumlayıcısıdır. Bir komut giriyoruz, yorumlanıyor, yürütülüyor ve ardından yürütmesinin sonucunu alıyoruz. Kabuk, alıştığımız geleneksel Unix komut girişi arabirimini sağlar. Bu genellikle siyah bir ekran ve beyaz bir metindir. Komutları düz metin olarak giriyoruz ve ayrıca bir veya daha fazla komuttan komut dosyaları oluşturabiliyoruz.

Kabuk, sistemle etkileşim için arabiriminizdir. Bir Unix sistemine giriş yaptıktan sonra kendinizi kabuk denen bir programın içinde buluyorsunuz.

Thompson Kabuğu

Tarihe ve birçok İnternet kaynağına göre, ilk kabuk, Ken Thomson tarafından Bell Laboratuarlarında yazılan Thompson Kabuğu idi. Toplamda 6 versiyonu vardı ve 1971'den 1975'e kadar dağıtıldı. G/Ç yeniden yönlendirmesi ve basit kontrol yapıları - if, goto gibi işlevler desteklendi. Tüm modern Linux kabukları bu işlevleri destekler.

PWB kabuğu

PWB kabuğu, John Macheu tarafından geliştirilen Thomson kabuğunun bir modifikasyonudur. Shell programlama kolaylığını artırmak için yazılmıştır. if-then-else-endif, switch ve while döngüleri gibi ilginç yapılar var.

Bourne kabuğu

Unix, yükselişine Bourne kabuğuyla başladı. Stefan Bourne tarafından Bell Laboratuarlarında yazılmıştır ve 1979 Unix 7'de varsayılan kabuk olarak kullanılmıştır. Modern kabuklarda bulunan çok sayıda özellik zaten burada uygulandı - dosya adı tamamlama, komut tamamlama, standart ortam değişkenleri ve yerleşik kontrol yapıları. Bourne Kabuğu sh olarak adlandırıldı ve Unix dosya sisteminde / bin / sh konumunda bulunuyordu.

Birçok sistemde, bir Bourne kabuk programı (sh), alternatiflerinden birine sembolik veya sabit bir bağlantıdır:

  • Almquist kabuğu (kül)
  • Bourne-Yine kabuk (bash)
  • Korn kabuğu (ksh)
  • Z kabuğu (zsh)

Bourne Shell için örnek komut dosyası:

! / bin / sh
echo "Merhaba Dünya 1!"
echo "Merhaba Dünya 2!"

Almquist kabuğu (kül)

Almquist kabuğu, A Shell olarak da bilinir. Orijinal olarak Kenneth Almquist tarafından yazılmış hafif bir Unix kabuğudur. 1980'lerin sonlarında geliştirildi. Bu, Bourne kabuğunun bir modifikasyonudur ve 1990'da piyasaya sürülen orijinal BSD Unix'in yerini alır. Artık Debian ve Ubuntu gibi dağıtımlarda dash (Debian Almquist kabuğu) adı verilen bir kül sürümü olarak kullanılabilir. Ayrıca gömülü Unix dağıtımlarında da popülerdir.

Hızlı, kompakt ve POSTIX uyumlu bir Unux kabuğudur, bu nedenle gömülü cihazlarda sıklıkla kullanılmasının nedeni bu olabilir. Ancak kül, komut geçmişlerini desteklemez. Modern versiyonlarda bu özellik zaten eklenmiş olmasına rağmen.

Bourne-Yine Kabuk (Bash)

Brian Fox tarafından GNU Projesinin bir parçası olarak Bourne kabuğunun ücretsiz ve açık kaynaklı bir yedeği olarak yazılmıştır. Bash, tüm kabukların en popüler ve yaygın olarak kullanılanıdır. Tüm Linux dağıtımları varsayılan olarak bu kabukla birlikte gelir. Bourne Shell'in işlevselliğini genişletir. Çoğu Unix / Linux sisteminde, bu kabuk / bin / bash konumundaki dosya sisteminde bulunabilir. 1989 yılında piyasaya sürüldü.

Bu popülerlik nedeniyle, Windows'a taşındı ve Cygwin ve MinGW derleyici setleriyle birlikte dağıtıldı. Bash, Android'de de kullanılır ve ona erişmek için çeşitli terminal öykünücülerini kullanabilirsiniz.

Otomatik tamamlama, G/Ç yeniden yönlendirme, komut tamamlama, karar verme (if-then-elese if) ve döngüler için değişkenler ve kontrol yapılarını destekler.

Bash betikleri şöyle bir satırla başlar:

Bu linux kabuğu ayrıca bir dosyadan komutları okumayı ve çıktıyı bir dosyaya veya başka bir komuta yönlendirmeyi de destekler.

Örnek Bash kodu:

! / bin / sh
eğer [$ gün -gt 365]
sonra
echo Bu bir yıldan fazla.
fi

Korn kabuğu (ksh)

David Kron tarafından yazılmıştır ve Bourne mermisi kaynaklarına dayanmaktadır. KornShell (ksh), 1980 yılında Bell Labs tarafından geliştirilmiş bir kabuktur. Bourne Shell ile geriye dönük uyumludur ve ayrıca C kabuğunun birçok özelliğini içerir.

Aşağıdaki sürümler ve değişiklikler vardır:

  • Dtksh
  • MKS Korn kabuğu

Örnek komut dosyası:

! / bin / ksh
Disk alanı kullanımını yazdır
du -k
0 çıkışı

Z kabuğu (zsh)

Paul Falstad, ilk versiyonu zsh shell komutuyla 1990 yılında yazdı. Etkileşimli oturum açma kabuğu olarak kullanılabilen bir Linux komut kabuğudur, çok güçlü bir komut yorumlayıcıdır. Aslında Zsh, Bash, KSH ve Tcsh'den bazı özellikleri içeren birçok geliştirme içeren genişletilmiş bir Bourne kabuğudur.

Zsh adı, Paul, Princeton Üniversitesi'nde öğrenci olduğu için Yale profesörü Zhong Shao'dan geliyor.

Bu tür ilginç işlevler desteklenir:

  • Hat tamamlama
  • Tüm kabuk oturumları için paylaşılan komut geçmişi
  • Değişkenler ve dizilerle iyileştirilmiş çalışma
  • Bir arabellekte birden çok satırı düzenleme
  • Yazım düzeltme ve çok daha fazlası.

C kabuğu

C kabuğu, Csh olarak da bilinir. Bill Joy tarafından California Üniversitesi'nde öğrenciyken geliştirilmiştir. Bu kabuk, BSD Linux sistemlerinde çok yaygındır. Burada, kontrol yapıları ve dilbilgisi ifadeleri dahil olmak üzere birçok ilginç özellik vardır. Bu sarmalayıcı aynı zamanda ilk kez geçmiş ve düzenleme mekanizmaları, takma adlar, CDPATH, görev yönetimi ve karma, çıktı yeniden yönlendirme, ekleme, değişken değiştirme, arka planda yürütme vb. gibi çok sayıda ilginç özelliği tanıttı.

Diğer Linux kabukları gibi, komut dosyalarını, yeniden yönlendirmeyi ve kontrol yapılarını destekler. Csh artık MacOS X ve Red Hat Linux gibi birçok sistemde tcsh olarak kullanılmaktadır. Debian'da hem CSH hem de Tcsh kullanılabilir.

Örnek C Kabuk kodu:

! / bin / csh
eğer ($ gün> 365) o zaman
echo Bu bir yıldan fazla.
endif

Balık

Balık veya Dostu Etkileşimli Kabuk, yeni nesil Linux komut kabuğudur. Kullanıcının komutları yürütmesini kolaylaştırmak için tasarlanmıştır, sözdizimi vurgulaması, doğru dosya adreslerinin vurgulanması, geçmişte hızlı arama, bir web yapılandırıcısı ve ayrıca özel komut dosyası sözdizimi vardır.

Linux'ta yeni bir komut kabuğudur ve sözdizimi herhangi bir modern kabuğun aksine Python programlama dilidir.

Balıkta fonksiyon oluşturmaya bir örnek:

! / usr / bin / balık
işlevli su
fonksiyon su
/ bin / su --kabuk = / usr / bin / balık $ argv
son
işlev kaydetme

Linux'taki kabukların daha ayrıntılı bir karşılaştırmasını burada görebilirsiniz.

Hepsi bugün için. umarım ilginizi çekmiştir.

Makaleyi beğendin mi? Paylaş