QSH veya Qshell nedir ve IBM i üzerinde bundan en iyi şekilde nasıl yararlanılır?

Son Güncelleme: 10/03/2026
Yazar: isaac
  • QSH veya Qshell, PASE ortamına entegre edilmiş IBM i POSIX komut yorumlayıcısıdır.
  • Bu, IFS üzerindeki görevleri otomatikleştirmek için Unix benzeri komutları CL ile birleştirmeye olanak tanır.
  • Gelişmiş otomasyonu kolaylaştıran parametrelere ($0, $1, set, shift) sahip komut dosyalarını destekler.
  • Bu, yığın yapılandırmasının kritik önem taşıdığı Java ve WebSphere ortamlarıyla ilgilidir.

QSH veya Qshell'e Giriş

IBM i (eski AS/400) ile çalışıyorsanız, er ya da geç bir sorunla karşılaşacaksınız. QSH veya Qshell, Unix benzeri komut yorumlayıcısıdır. Sisteme entegre edilmiş bir özelliktir. Birçok kişi, özellikle IFS veya WebSphere görevleriyle uğraşırken, bunu tesadüfen görmüştür, ancak tam olarak ne olduğu veya ne kadar ileri gidebileceği her zaman açık değildir.

Bu yazıda bunu sakin bir şekilde açıklayacağız QSH/Qshell nedir, IBM i'de ne için kullanılır ve size nasıl yardımcı olabilir? Bu, hem görev otomasyonunu (örneğin, IFS'den dosyaları listelemek ve bunları fiziksel bir arşive kopyalamak) hem de Java, WebSphere veya hatta iSeries Access for Web içeren daha karmaşık senaryoları kapsar. Gereksiz teorik jargonlardan kaçınarak, anlaşılır bir dil kullanacağız, ancak gerçekten faydalı bulmanızı sağlamak için teknik ayrıntılara da gireceğiz.

IBM i'de QSH veya Qshell nedir?

QSH veya Qshell'den bahsettiğimizde, kastettiğimiz şey şudur: IBM'in IBM i'ye dahil ettiği POSIX tipi kabuk yorumlayıcısı.Basitçe söylemek gerekirse, sistem içinde çalışan ve Linux'ta kullandığınız komutlara çok benzer komutları çalıştırmanıza olanak tanıyan "Unix tarzı bir kabuktur" (örneğin, ls, cd(vb.) IBM i ortamında.

Bu ortam, IBM'in "bununla özdeşleşen" şeyin bir parçasıdır. i5/OS PASE (Taşınabilir Uygulama Çözümleri Ortamı)PASE, POSIX ve X/Open standartlarıyla uyumlu yardımcı programlar ve araçlar sağlayan bir katmandır. PASE sayesinde Qshell, klasik bir Unix sisteminde bulabileceğiniz araçlara çok benzer şekilde davranan oldukça kapsamlı bir araç seti sunabilir.

Pratikte Qshell şu şekilde işlev görür: IBM i'nin geleneksel dünyası (kütüphaneler, fiziksel arşivler, CL) ile bir köprü. Ve dizinlerin, IFS yollarının ve Unix tarzı komutların daha "modern" veya açık dünyası. Bu, özellikle kabuk komutlarını CL veya RPG programlarıyla birleştirdiğinizde, çok esnek çözümlerin önünü açar.

Qshell'in bir oyuncak veya merak konusu olmadığını anlamak önemlidir: IBM i ile derinlemesine entegre olur ve sistemin API'lerine dayanır.Aslında, birçok IBM io yardımcı programı ve ilgili ürünleri (WebSphere veya Java araçları gibi) aynı ekosistemden yararlanarak PASE üzerinde çalışmaktadır.

i5/OS ortamında QSH BAŞARILI

PASE ortamı, IBM i üzerinde çalışmaktan sorumludur. POSIX ve X/Open standartlarına uyan programlarPOSIX yorumlayıcısı olan Qshell, bu kümenin bir parçasıdır ve PASE'nin sağladığı tüm kütüphanelerden ve araçlardan yararlanır.

Qshell'i başlattığınızda, komutları ve programları yürüten bir yorumlayıcıyı başlatmış olursunuz. Sanki bir IBM i sisteminin içindeki küçük bir Unix sistemindeymişsiniz gibi.Bu, "/directory/subdirectory" kullanarak IFS yollarıyla çalışma, boru hatları, yönlendirmeler ve basit komut dosyaları kullanma gibi temel şeyleri içerir.

IBM, Qshell ve PASE hakkında oldukça kapsamlı dokümanlar sunmaktadır. IBM Bilgi MerkeziSistem sürümüne (örneğin V6.1) göre tüm olanakları, komut seçeneklerini ve özelliklerini görmek istiyorsanız, yüklediğiniz IBM i sürümünün kılavuzuna başvurmanız en iyisidir.

Ayrıca, bu ortam Java ile ilgili her şeyi, WebSphere gibi uygulama sunucularını ve ilgili yardımcı programları da kapsar. Genellikle, aşağıdakilerle ilgili hata mesajları veya uyarılar gördüğünüzde... QSH0006 veya QSH0007Özetle, PASE veya Java'da gerçekleşen olaylar, kabuğun işleyişini veya başlattığı süreçleri etkiliyor.

Pratik örnek: QSH ve CL kullanarak IFS dosyalarını listeleme

IBM i ortamlarında Qshell'in en pratik (ve yaygın) kullanım alanlarından biri şudur: IFS ile çalışarak dosyaları listeleyip bu bilgileri dışa aktarın. Bu dosyayı daha sonra CL, RPG veya diğer programlardan işleyebileceğimiz fiziksel bir dosyaya dönüştürüyoruz.

Örneğin, bir IFS klasörünüz olduğunu hayal edin. /FTPUzantısı .x olan dosyaların depolandığı yer. .cbsTüm dosyaların, alt dizinlerdeki dosyalar da dahil olmak üzere, eksiksiz listesini fiziksel bir kütüphane dosyasında elde etmek istiyorsunuz, böylece daha sonra bunları tek tek işleyebilirsiniz.

Bunu yapmanın çok basit bir yolu, birkaç CL ifadesini, komutu kullanan bir Qshell komutuyla birleştirmektir. ls -R Özyinelemeli olarak listelemek. Fikir şu:

  Kademeli Android Telefon veya Hapı Onarmanın Doğru Yolu

1. Fiziksel bir dosya oluşturun. Sonucu kaydedeceğiniz yer:

CRTPF DOSYASI(KÜTÜPHANE/ARŞİV) RCDLEN(1024)

Bu, yeterince büyük bir kayıt değerine sahip bir PF üretir (örneğin, 1024 bayt uzunluğundaKomutun döndürdüğü her satırın saklanacağı yer burasıdır. ls Bu, Qshell'i başlatır. Dosya zaten mevcutsa, hatayı şu şekilde ele alabilirsiniz: MONMSG Böylece süreç aksamaz.

Ardından şunları ekleyebilirsiniz:

MONMSG MSGID(CPF0000)

Böylece, dosya oluşturma işlemi herhangi bir nedenle başarısız olursaGenel mesajı yakalayabilir ve ne yapacağınıza karar verebilirsiniz (ancak temel örnekte sorun basitçe göz ardı ediliyor).

Sonraki adım, Qshell'de çalıştırmak istediğiniz komutu bir CL değişkenine atamaktır. Şöyle bir şey:

2. Çalıştırmak istediğiniz kabuk komutunu hazırlayın., örneğin:

CHGVAR VAR(&CMD) DEĞER('ls -R /FTP/*.cbs > /qsys.lib/libreria.lib/archivo.file/archivo.mbr')

İşte işin ilginçleştiği nokta: Çalıştırmanızı söylüyorsunuz. ls -R güzergah üzerinde /FTP Desene uyan tüm dosyaları listelemek *.cbsAyrıca standart çıktıyı üyeye yönlendirirsiniz. ARŞİV fiziksel dosyadan KİTAPÇI/ARŞİV IFS sözdizimini kullanarak /qsys.lib/…Dolayısıyla, Qshell listeyi oluşturma ve doğrudan PF'ye aktarma işlemini üstlenir.

Komut tanımlandıktan sonra, geriye kalan tek şey onu Qshell içinde çalıştırmaktır:

3. Komutu Qshell'de çalıştırın. ile:

STRQSH CMD(&CMD)

Komut STRQSH Bir Qshell oturumu başlatın ve değişkenin içeriğini çalıştırın. &CMDCL kullanıcısının bakış açısından, bu, POSIX dünyasına bir süreliğine "açılmak", işi halletmek ve ardından CL'ye geri dönmek için oldukça kullanışlı bir yöntemdir.

Son olarak, Qshell'in fırlattığı olası hataları aşağıdaki gibi bir şeyle ele alabilirsiniz:

MONMSG MSGID(CPF0000 QSH0006 QSH0007) EXEC(DO)
(HATA İŞLEME)
SON

Bu şekilde, genel bir sistem sorunu ortaya çıkarsa (CPF0000) veya tipik Qshell hatalarından biri (QSH0006, QSH0007Bu durumda, örneğin hatayı kaydedebileceğiniz, operatöre bir mesaj gönderebileceğiniz veya döndürülen koda göre kararlar alabileceğiniz bir hata işleme bloğuna girersiniz.

Her şey yolunda giderse, Qshell yorumlayıcısı fiziksel bir dosya bırakmış olacaktır. KİTAPÇI/ARŞİV Dosyaların tam listesi .cbs Bulgular listesi daha sonra başka bir CL veya RPG programından işlenebilir. Bu yaklaşım şunu göstermektedir: Geleneksel CL'yi Qshell komutlarıyla birleştirmenin ne kadar güçlü olduğunu gösteriyor. Aksi takdirde çok daha zahmetli olacak belirli görevler için.

Örnek dışında Qshell'in olanakları ve gücü

Önceki örnek konunun sadece yüzeysel bir kısmını ele alıyor: Qshell birçok parametre ve komut kabul eder.Hem yerel hem de Unix dünyasından miras kalan özellikler. Örneğin, lsŞu seçeneklerle oynayabilirsiniz: -R Özyineleme, listeleme biçimleri, filtreler vb. için. Ama bu sadece en görünür kısmı.

Genel olarak, Qshell size şunları yapma olanağı sağlar: Günlük sorunlara yönelik hafif ve özel çözümlerIFS'de dosyaları taşımak, listeler oluşturmak, çıktıları borular kullanarak birleştirmek, küçük bakım görevlerini otomatikleştirmek veya hatta toplu işlem süreçleri ile harici uygulamalar arasında ara katman görevi görmek gibi işlevleri yerine getirebilir.

En büyük avantajlardan biri şudur ki... CL üzerinden (STRQSH komutuyla) Qshell'i çağırabilirsiniz.Bunu sistem komutlarıyla birleştirin ve ana mantığı IBM i programlarında tutarken, yazması daha rahat olan Unix tarzı işlemleri kabuğa devredin.

Mevcut tüm seçenekleri daha detaylı incelemek isterseniz, IBM her sistem sürümü için özel dokümanlar sunmaktadır. IBM Bilgi Merkezi Örneğin, 6.1 sürümünde her komutun ayrıntılarını, parametrelerini, kullanım örneklerini ve uyumluluk notlarını bulacaksınız. İdeal olarak, halihazırda yüklemiş olabileceğiniz ancak kullanmadığınız yeni yardımcı programları keşfetmek için bu referansa başvurmalısınız.

Şunu belirtmek gerekir ki, IBM i'de Unix benzeri ortam seçenekleri arasında sadece Qshell bulunmamaktadır (ayrıca başka bir ortam seçeneği de mevcuttur). QP2TERM (ve en "saf" PASE desteğine sahip) olmakla birlikte, CL veya RPG dünyasından gelen ve IFS ve POSIX araçlarını fazla karmaşıklık olmadan kullanmaya başlamak isteyen yöneticiler ve geliştiriciler için en erişilebilir olanlardan biridir.

Qshell'de komut dosyaları ve parametreler yazma

Qshell ile tek tek komutlar vermenin yanı sıra şunları da yapabilirsiniz: kendi senaryolarınızı yazın Bu komut dosyaları, klasik bir kabuk komut dosyasına benzer şekilde çalışır. Parametre alabilir, değişkenler kullanabilir ve komutları dinamik olarak bir araya getirebilirler; bu sayede her seferinde kodu yeniden yazmadan tekrarlayan görevleri otomatikleştirebilirsiniz.

Qshell betiğinde, aldığı argümanlar özel değişkenlere atanır: $1 birinci parametre için, $2 ikincisi için ve bu şekilde en fazla şuna kadar devam eder. 255 parametreBaşka bir deyişle, birden fazla değer geçiren bir komut dosyasını çalıştırdığınızda, bu değerleri komut dosyasının içinde kullanarak yollar, dosya adları veya ihtiyaç duyduğunuz diğer her şeyi oluşturabilirsiniz.

  Program Oluşturmak için En İyi 7 Program

Örneğin, ilk parametre olarak çalıştırılacak komutun adını alan ve komutu çalıştırmadan önce bu adı görüntüleyen bir betiğiniz olabilir. Şu kadar basit bir şey:

echo $ 1
$1 # ilk parametrede yer alan komutu yürütür

Bu küçük örnek, nasıl olduğunu göstermektedir. Bir komut dosyası, diğer komutlar için bir "sarmalayıcı" görevi görebilir.Bu işlem, asıl komutu çalıştırmadan önce ek mantık (örneğin, doğrulama veya izleme işlemleri) eklemeyi içerir.

Komut dosyasındaki parametrelere değer atamak için şu komutu kullanabilirsiniz: set. Örneğin:

set v1 v2 # v1'i $1'e ve v2'yi $2'ye ata

Bu sayede, betiği dışarıdan tekrar çağırmaya gerek kalmadan, dahili olarak işleyeceğiniz değerleri yeniden düzenleyebilirsiniz. Bu, örneğin argümanların sırasını yeniden tanımlamak veya varsayılan değerler hazırlamak istediğinizde kullanışlıdır.

Bir başka ilginç komut da çalışmaBu işlem, parametreleri sola kaydırır: 1 dolar kaybolur, 2 dolar 1 dolar olur, 3 dolar 2 dolar olur.ve benzeri. Bu, argüman listelerinde birbiri ardına yineleme yapmak ve her işlemde ilkini kaldırmak için kullanılan klasik bir betik yazma tekniğidir.

Ayrıca, değişkeniniz de var. $0Bu, örneğin, komut dosyasının adını içerir. Bu sayede, komut dosyasının gerçek adını manuel olarak yazmanıza gerek kalmadan, komut dosyasının adını içeren yardım mesajları görüntüleyebilir veya çağrılma şekline bağlı olarak davranışı uyarlayabilirsiniz.

Bütün bu olanaklar bir araya geldiğinde Qshell'i şu hale getiriyor: Küçük otomasyon sistemlerinin montajı için oldukça esnek bir araç. IFS üzerinde çalışan, sistem komutlarını çağıran veya IBM i süreçlerini harici uygulamalarla entegre eden uygulamalar.

Qshell'in WebSphere, Java ve bellek kullanımıyla ilişkisi

Qshell genellikle yalnızca IFS için bir komut yorumlayıcısı olarak görülse de, IBM i'deki günlük uygulamada aşağıdakilerle de yakından bağlantılı olduğu görülmektedir: Java ortamı ve WebSphere gibi uygulama sunucularıBu durum özellikle Java bellek veya yığın kullanımına ilişkin sistem mesajları görünmeye başladığında daha belirgin hale gelir.

Kullanıldığı ortamlarda iSeries Web Erişimi (IWA)WebSphere üzerinde (örneğin, WAS 6.1) dağıtıldığında, aşağıdaki gibi mesajlarla karşılaşmak yaygındır:

JAVA, ÇÖP TOPLAMA YIĞINININ %95'İNİ KULLANDI.
KULLANILAN YIĞIN BOYUTU (KB) VE MAKSİMUM YIĞIN BOYUTU (KB): 249049 262144.

Bu tür uyarılar genellikle WebSphere sunucusundan kaynaklanır (doğrudan Qshell'den değil), ancak PASE veya Qshell'den başlatılan veya Qshell'e gönderilen işlemlerle ilgili mesajlarla birlikte gelebilirler. Esasen, sistem size şunu söylüyor: JVM, yığın belleğini neredeyse tamamen tüketmiş durumda.Sunucunun OutOfMemory hatasıyla çökmeden önce yapılandırmanın ayarlanması tavsiye edilir.

IBM bu tür mesajları tam olarak yöneticinin sahip olabileceği bir kolaylık sağlamak amacıyla kullanıma sundu. Uygulama sunucusu çökmeden önce bir uyarıBu nedenle, bu tekrarlanan uyarıları aldığınızda, IWA'nın veya ilgili portalın çalıştığı JVM'ye atanan maksimum yığın parametrelerini kontrol etmeniz gerektiğinin açık bir işaretidir.

Bazı gerçek dünya örneklerinde, yöneticiler, görünüşte hiçbir kullanıcının giriş yapmadığı bir portalda bile veri üretilmeye devam ettiğini tespit etmişlerdir. Günde neredeyse dolu bir yığından 2 veya 3 mesaj.Bu durum genellikle, kullanıcı yükü olmasa bile yığın belleğin kullanılmaya devam etmesine neden olan dahili uygulama süreçleri, arka plan görevleri veya bellek sızıntılarından kaynaklanır.

Dahası, bazı durumlarda işler daha da zorlaştı. Yönetim konsoluna web üzerinden erişin. JVM'nin minimum ve maksimum boyutu gibi parametreleri değiştirmek gerekiyordu, çünkü yapılandırma ekranlarını açmaya çalıştığınızda bazı portletler başarısız oluyordu ("çöküyordu").

Faydalı olduğu kanıtlanmış stratejilerden biri şunları içerir: Ortamı (sunucu, WebSphere, portal vb.) tamamen yeniden başlatın.Her şey istikrarlı bir duruma dönene kadar bekleyin ve ardından bellek yapılandırmasını incelemek için yönetim konsoluna giriş yapın. Minimum ve maksimum yığın alanlarının boş göründüğü ve varsayılan değerlere güvenildiği durumlar vardır; bu, önemli yük altındaki ortamlar için her zaman uygun değildir.

Erişim sağlandıktan sonra, bazı yöneticiler örneğin şunları tanımlamayı tercih etmişlerdir: Minimum yığın boyutu 512 MB ve maksimum 1024 MB'dir. (Sadece test değerleri olarak) sistem davranışının iyileşip iyileşmediğini ve uyarı mesajlarının azalıp azalmadığını görmek için kullanılır. Ancak bu değerleri sisteme uyarlamak önemlidir. IBM i'nin kendisinde bulunan kullanılabilir bellek ve sunucunun desteklediği yük türü.

  Onarım: iPhone veya iPad'den Resimler Silinemiyor

Bu bağlamda, "JAVA, GC HEAP'İN %95'İNİ KULLANDI" hakkındaki özel mesajlar her ne kadar WebSphere özellikleriPASE ortamı ve Qshell dolaylı olarak dahil olabilir, çünkü birçok araç ve komut dosyası Java süreçlerini başlatır veya aynı sunucuda konuşlandırılmış hizmetlerle etkileşim kurar.

IBM i V6R1'de WebSphere ayarları, IWA ve sürümleri

Aşağıdaki gibi ortamlarda performans veya bellek sorunlarıyla karşılaştığınızda: IBM i V6R1 üzerinde iSeries Access for Web (IWA)Sürüm ve WebSphere uyumluluğuyla ilgili bazı noktalarda net olmak çok önemlidir, çünkü Qshell, PASE, Java ve sunucu yapılandırması burada birleşir.

Öncelikle kontrol etmeniz önerilir. Bilgisayarınızda yüklü olan iSeries Access for Web'in tam sürümü nedir?Bu genellikle ilgili sayfaya bakılarak doğrulanabilir. /webaccess/iWAInfo Uygulamanın kendisinin görüntülediği bilgiyi buradan görebilirsiniz. Oradan mevcut IWA seviyesini görebilirsiniz.

IBM i V6.1 özelinde, PTF numarası ile tanımlanan önemli bir güncelleme bulunmaktadır. SI44342Bu, söz konusu sürüm için mevcut olan en son sürüme karşılık gelir. IWA'yı bu seviyede (veya ortamınızdaki mevcut seviyede) güncel tutmak, zaman içinde düzeltilmiş birçok kararlılık veya bellek sorununu çözebilir.

Öte yandan, bu bağlamda "portal"dan bahsederken, tam olarak neyi kastettiğinizi ayırt etmek önemlidir. IWA (iSeries Web Erişimi) veya WebSphere Portal Tamamlandı. Her ikisi de IBM i üzerinde birlikte çalışabilse de, yapılandırmaları ve bellek gereksinimleri aynı değildir ve hangi ürünle uğraştığınız konusunda net değilseniz, arıza belirtileri (yüklenmeyen portletler, hata mesajları, aşırı yavaşlık) kafa karıştırıcı olabilir.

Önemli bir husus, IWA'nın hangi tür sunucuda konuşlandırıldığıdır: bu bir WebSphere Application Server 6.1, 7.0, bir portal veya dahili bir sunucuJVM parametreleri, sunucu türüne, belirli sürüme ve ayrıca kullanılan Java sanal makinesinin türüne (örneğin, klasik "classic" veya daha modern J9) bağlı olarak değişir.

Sürekli olarak "bellek neredeyse dolu" mesajları görmeye başladığınızda, bellek parametrelerinizi kontrol etmenin yanı sıra, önemli bir özelliği gözden kaçırmış olup olmadığınızı da değerlendirmeye değer. Ek PTF'ler veya portalın kendisinin ya da WebSphere'in sürüm güncellemesi bile gerekebilir.IBM i V6R1'de yükseltebileceğiniz iWAS sürümünde bir sınırlama vardır, bu nedenle sürümünüz için desteklenen en son kombinasyonu bulmak için resmi belgelere bakmanız önerilir.

Bu bölümü özetlemek gerekirse: WebSphere üzerinde kurulu IWA 6.1'e sahip IBM i V6R1 ortamınızda bellek sorunları ortaya çıkarsa, blok incelemesi yapmalısınız. Yığın yapılandırması, IWA PTF düzeyi, tam WebSphere sürümü ve JVM türüAncak o zaman sorunun tam bir resmine sahip olacaksınız ve ara sıra yeniden başlatmalarla sınırlı kalmadan uygun şekilde ayarlamalar yapabileceksiniz.

Bütün bunlar, PASE ortamındaki komut dosyaları ve komutlar aracılığıyla Qshell ile dolaylı olarak ilişkilidir; Süreçleri izleyebilir, yardımcı görevler başlatabilir, hatta bakım işlemlerini otomatikleştirebilirsiniz. Bu işlemler, IFS'deki dosyaları temizlemekten analiz için günlük listeleri oluşturmaya kadar sunucunun düzgün çalışır durumda kalmasına yardımcı olur.

Bu süreç boyunca Qshell'in IBM i'ye nasıl entegre olduğunu gördük. Sistemin yeteneklerini genişleten bir POSIX yorumlayıcısı.QSH, IFS dosyalarını listelemek ve çıktıyı fiziksel bir dosyaya yazmak gibi basit görevlerin yanı sıra, karmaşık Java ve WebSphere ortamlarında bir bileşen olarak da işlev görebilir. QSH'yi etkili bir şekilde kullanmak, PASE içindeki rolünü sağlam bir şekilde anlamayı, `ls`, `set` ve `shift` gibi komutlara aşina olmayı ve onu CL ve klasik IBM i araçlarıyla birleştirmeyi gerektirir. Bu yaklaşımla QSH, platformun yeteneklerini en üst düzeye çıkarmak isteyen hem yöneticiler hem de geliştiriciler için güçlü bir müttefik haline gelir.