Wat is QSH of Qshell en hoe haal je er het maximale uit op IBM i?

Laatste update: 10/03/2026
Auteur: Isaac
  • QSH of Qshell is de IBM i POSIX-opdrachtinterpreter die is geïntegreerd in de PASE-omgeving.
  • Het maakt het mogelijk om Unix-achtige commando's te combineren met CL om taken op het IFS te automatiseren.
  • Het ondersteunt scripts met parameters ($0, $1, set, shift) die geavanceerde automatisering mogelijk maken.
  • Dit heeft betrekking op Java- en WebSphere-omgevingen, waar de configuratie van de geheugenopslag cruciaal is.

Inleiding tot QSH of Qshell

Als je met IBM i (de oude AS/400) werkt, kom je er vroeg of laat mee te maken te krijgen. QSH of Qshell, de Unix-achtige commandotolk. Het is geïntegreerd in het systeem. Veel mensen hebben het wel eens voorbij zien komen, vooral bij taken met IFS of WebSphere, maar het is niet altijd duidelijk wat het precies is of wat de mogelijkheden ervan zijn.

In dit artikel zullen we het rustig uiteenzetten Wat is QSH/Qshell, waarvoor wordt het gebruikt in IBM i en hoe kan het u helpen? Dit behandelt zowel taakautomatisering (bijvoorbeeld het weergeven van bestanden in het IFS en deze kopiëren naar een fysiek archief) als complexere scenario's met Java, WebSphere of zelfs iSeries Access for Web. We gebruiken begrijpelijke taal en vermijden onnodig theoretisch jargon, maar gaan wel diep in op de technische details, zodat u er echt iets aan hebt.

Wat is QSH of Qshell op IBM i?

Wanneer we het over QSH of Qshell hebben, bedoelen we de POSIX-type shell-interpreter die IBM in IBM i opneemt.Het is, simpel gezegd, een "Unix-achtige shell" die binnen het systeem draait en waarmee je commando's kunt uitvoeren die sterk lijken op de commando's die je in Linux zou gebruiken (zoals...). ls, cd, enz.) in de IBM i-omgeving.

Deze omgeving maakt deel uit van wat IBM noemt i5/OS PASE (Portable Application Solutions Environment)PASE is een laag die hulpprogramma's en programma's biedt die compatibel zijn met de POSIX- en X/Open-standaarden. Dankzij PASE kan Qshell een vrij uitgebreide set tools bieden die zich gedragen zoals je dat in een klassiek Unix-systeem zou vinden.

In de praktijk fungeert Qshell als brug tussen de traditionele wereld van IBM i (bibliotheken, fysieke archieven, CL) en de meer "moderne" of open wereld van mappen, IFS-paden en Unix-achtige commando's. Dit opent de deur naar zeer flexibele oplossingen, vooral wanneer je shell-commando's combineert met CL- of RPG-programma's.

Het is belangrijk te begrijpen dat Qshell geen speeltje of curiositeit is: Het is nauw geïntegreerd met IBM i en maakt gebruik van de API's van het systeem.Sterker nog, veel IBM I/O-hulpprogramma's en bijbehorende producten (zoals WebSphere of Java-tools) draaien op PASE en maken zo gebruik van datzelfde ecosysteem.

QSH binnen de i5/OS-omgeving PASS

De PASE-omgeving is verantwoordelijk voor de levering op IBM i. programma's die voldoen aan de POSIX- en X/Open-standaardenQshell, als POSIX-interpreter, maakt deel uit van deze set en profiteert van alle bibliotheken en tools die PASE beschikbaar stelt.

Wanneer je Qshell start, start je een interpreter die commando's en programma's uitvoert. alsof je je in een klein Unix-systeem bevond binnen een IBM i.Dit omvat basiszaken zoals het werken met IFS-paden met behulp van "/directory/subdirectory", het gebruik van pipes, omleidingen en eenvoudige scripts.

IBM beschikt over vrij uitgebreide documentatie over Qshell en PASE. IBM KenniscentrumAls u alle mogelijkheden, opdrachtopties en bijzonderheden wilt bekijken die specifiek zijn voor uw systeemversie (bijvoorbeeld V6.1), kunt u het beste de handleiding raadplegen voor de exacte versie van IBM i die u hebt geïnstalleerd.

Bovendien omvat deze omgeving ook alles wat met Java, applicatieservers zoals WebSphere en bijbehorende hulpprogramma's te maken heeft. Vaak zie je foutmeldingen of waarschuwingen die hiermee verband houden. QSH0006 of QSH0007In essentie gebeuren er dingen in PASE of Java die de werking van de shell of de processen die deze start beïnvloeden.

Praktisch voorbeeld: IFS-bestanden weergeven met QSH en CL

Een van de meest praktische (en veelvoorkomende) toepassingen van Qshell in echte IBM i-omgevingen is om Werk met het IFS om bestanden weer te geven en die informatie te exporteren. naar een fysiek bestand dat we vervolgens kunnen verwerken vanuit CL, RPG of andere programma's.

Stel je voor dat je bijvoorbeeld een IFS-map hebt. /FTPwaar bestanden met die extensie worden opgeslagen. .cbsJe wilt de volledige lijst van al die bestanden, inclusief die in submappen, in een fysiek bibliotheekbestand opslaan, zodat je ze vervolgens één voor één kunt verwerken.

Een heel eenvoudige manier om dit te doen is door een paar CL-instructies te combineren met een Qshell-opdracht die de opdracht gebruikt. ls-R om recursief op te sommen. Het idee is:

  Oplossing: Skype wordt niet geopend of reageert niet in Residence Home Windows 10

1. Maak een fysiek bestand aan waar u het resultaat zult opslaan:

CRTPF-bestand (bibliotheek/archief) RCDLEN (1024)

Dit genereert een PF met een voldoende groot register (bijvoorbeeld, 1024 bytes lang) waar elke regel die door de opdracht wordt geretourneerd, wordt opgeslagen ls dat Qshell start. Als het bestand al bestaat, kunt u de fout afhandelen met een MONMSG zodat het proces niet vastloopt.

Je kunt dan het volgende toevoegen:

MONMSG MSGID(CPF0000)

Met andere woorden, als het aanmaken van het bestand om welke reden dan ook misluktJe vangt het algemene bericht op en kunt beslissen wat je ermee wilt doen (hoewel in het basisvoorbeeld het probleem gewoon wordt genegeerd).

De volgende stap is het toewijzen van de opdracht die je in Qshell wilt uitvoeren aan een CL-variabele. Zoiets als dit:

2. Bereid de shellopdracht voor die u wilt uitvoeren, bijvoorbeeld:

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

En nu wordt het interessant: je zegt dat ik het moet uitvoeren. ls-R op de route /FTP om alle bestanden weer te geven die overeenkomen met het patroon *.cbsen je stuurt de standaarduitvoer ook door naar het lid. ARCHIEF uit het fysieke bestand BOEKWINKEL/ARCHIEF met behulp van IFS-syntaxis /qsys.lib/…Qshell zorgt er dus voor dat de lijst wordt gemaakt en direct naar de PF wordt geschreven.

Zodra de opdracht is gedefinieerd, hoeft u deze alleen nog maar in Qshell uit te voeren:

3. Voer de opdracht uit in Qshell met:

STRQSH CMD(&CMD)

Het commando STRQSH Start een Qshell-sessie en voer de inhoud van de variabele uit. &CMDVanuit het oogpunt van de CL-gebruiker is het een vrij handige manier om even de POSIX-wereld te verkennen, de klus te klaren en vervolgens terug te keren naar CL.

Tot slot kun je eventuele fouten die Qshell genereert afhandelen met iets als:

MONMSG MSGID(CPF0000 QSH0006 QSH0007) EXEC(DO)
(FOUTAFHANDELING)
EINDDO

Op deze manier, als er een algemeen systeemprobleem optreedt (CPF0000) of een van de typische Qshell-fouten (QSH0006, QSH0007), kom je in een foutafhandelingsblok terecht waar je bijvoorbeeld de fout kunt registreren, een bericht naar de operator kunt sturen of beslissingen kunt nemen op basis van de geretourneerde code.

Als alles goed gaat, heeft de Qshell-interpreter een fysiek bestand achtergelaten. BOEKWINKEL/ARCHIEF de volledige lijst met bestanden .cbs De lijst met bevindingen kan vervolgens worden verwerkt door een ander CL- of RPG-programma. Deze aanpak demonstreert Hoe krachtig de combinatie van traditionele CL met Qshell-opdrachten is. voor specifieke taken die anders veel omslachtiger zouden zijn.

Mogelijkheden en kracht van Qshell buiten het voorbeeld.

Het voorgaande voorbeeld is slechts het topje van de ijsberg: Qshell accepteert veel parameters en commando's., zowel native als geërfd uit de Unix-wereld. In het geval van lsJe kunt spelen met opties zoals -R voor recursie, lijstformaten, filters, enzovoort. Maar dat is slechts het meest zichtbare deel.

Over het algemeen kunt u met Qshell het volgende bouwen: Lichte en concrete oplossingen voor alledaagse problemen: bestanden verplaatsen in het IFS, lijsten genereren, uitvoer samenvoegen met behulp van pipes, kleine onderhoudstaken automatiseren, of zelfs fungeren als tussenlaag tussen batchprocessen en externe applicaties.

Een enorm voordeel is dat Je kunt Qshell vanuit de commandline aanroepen (met STRQSH).Combineer het met systeemopdrachten en behoud de hoofdlogica in IBM i-programma's, terwijl je de Unix-achtige bewerkingen die daar gemakkelijker in te typen zijn, delegeert aan de shell.

Als u alle beschikbare opties nader wilt bekijken, biedt IBM specifieke documentatie voor elke systeemversie. IBM Kenniscentrum In versie 6.1 vindt u bijvoorbeeld details over elk commando, de bijbehorende parameters, gebruiksvoorbeelden en compatibiliteitsinformatie. Het is aan te raden deze handleiding te raadplegen om nieuwe hulpprogramma's te ontdekken die u mogelijk al hebt geïnstalleerd maar nog niet gebruikt.

Het is belangrijk om te weten dat Qshell niet de enige Unix-achtige omgeving is die beschikbaar is op IBM i (er is ook nog de omgeving). QP2TERM en de meest "pure" PASE-ondersteuning), maar het is een van de meest toegankelijke voor beheerders en ontwikkelaars die uit de CL- of RPG-wereld komen en IFS- en POSIX-tools willen gaan gebruiken zonder al te veel complicaties.

Scripts en parameters schrijven in Qshell

Naast het uitvoeren van individuele commando's kunt u met Qshell ook andere commando's geven. Schrijf je eigen scripts Deze scripts gedragen zich vergelijkbaar met die van een klassieke shell. Ze kunnen parameters ontvangen, variabelen gebruiken en dynamisch commando's samenstellen, waardoor je repetitieve taken kunt automatiseren zonder de code telkens opnieuw te hoeven schrijven.

In een Qshell-script worden de argumenten die het ontvangt toegewezen aan speciale variabelen: $1 voor de eerste parameter, $2 voor de tweede, en zo verder tot een maximum van 255 parametersMet andere woorden: wanneer je een script uitvoert en daarbij meerdere waarden doorgeeft, kun je die waarden binnen het script zelf gebruiken om paden, bestandsnamen of wat je verder ook nodig hebt te construeren.

  4 beste programma's om PDF-documenten te markeren

Je zou bijvoorbeeld een script kunnen hebben dat de naam van een uit te voeren opdracht als eerste parameter ontvangt en deze weergeeft voordat de opdracht wordt uitgevoerd. Zoiets simpels als:

echo $ 1
$1 # voert de opdracht uit die in de eerste parameter is opgenomen

Dit kleine voorbeeld illustreert hoe Een script kan fungeren als een "wrapper" voor andere commando's.waarbij extra logica (bijv. validaties of traceringen) wordt toegevoegd voordat de eigenlijke opdracht wordt uitgevoerd.

Om waarden toe te wijzen aan parameters binnen het script, kunt u de volgende opdracht gebruiken. reeks. Bijvoorbeeld:

set v1 v2 # wijs v1 toe aan $1 en v2 aan $2

Op deze manier kunt u, zonder het script opnieuw van buitenaf aan te hoeven roepen, de waarden die u intern verwerkt, herschikken. Dit is handig wanneer u bijvoorbeeld de volgorde van de argumenten wilt wijzigen of standaardwaarden wilt instellen.

Een ander interessant commando is verschuiving, waardoor de parameters naar links verschuiven: $1 verdwijnt, $2 wordt $1, $3 wordt $2enzovoort. Het is een klassieke scripttechniek om lijsten met argumenten één voor één te doorlopen en telkens het eerste argument te verwijderen.

Daarnaast heb je de variabele $0die de naam van het script zelf bevat. Hierdoor kunt u bijvoorbeeld helpberichten weergeven die de daadwerkelijke scriptnaam bevatten zonder deze handmatig te hoeven typen, of het gedrag aanpassen afhankelijk van hoe het script is aangeroepen.

Al deze mogelijkheden samen maken van Qshell een Een zeer flexibel hulpmiddel voor het samenstellen van kleine automatiseringssystemen. die werken op het IFS, systeemopdrachten aanroepen of IBM i-processen integreren met externe applicaties.

De relatie tussen Qshell, WebSphere, Java en geheugengebruik.

Hoewel Qshell vaak alleen wordt gezien als een commando-interpreter voor het IFS, blijkt het in de dagelijkse praktijk op IBM i ook nauw verbonden te zijn met Java-omgeving en applicatieservers zoals WebSphere.Dit is vooral merkbaar wanneer er systeemmeldingen verschijnen die verband houden met het geheugen- of heapgebruik van Java.

In omgevingen waar het wordt gebruikt iSeries Access for Web (IWA)Bij implementatie op WebSphere (bijvoorbeeld WAS 6.1) is het gebruikelijk om berichten zoals de volgende tegen te komen:

Java gebruikte 95% van de garbage collector-heap.
GEBRUIKTE HEAP-GROOTTE (KB) EN MAXIMALE HEAP-GROOTTE (KB): 249049 262144.

Dit soort waarschuwingen is meestal afkomstig van de WebSphere-server (niet rechtstreeks van Qshell), maar ze kunnen vergezeld gaan van berichten met betrekking tot PASE of processen die vanuit of naar Qshell zijn gestart. In wezen vertelt het systeem u het volgende: De JVM zit bijna aan het einde van het beschikbare heap-geheugen.En dat het raadzaam is om de configuratie aan te passen voordat de server vastloopt met een OutOfMemory-fout.

IBM introduceerde dit soort berichten juist zodat de beheerder een waarschuwing voordat de applicatieserver crashtAls u deze waarschuwingen herhaaldelijk ontvangt, is dat een duidelijk teken dat u de maximale heap-parameters moet controleren die zijn toegewezen aan de JVM waarop IWA of het bijbehorende portaal draait.

In sommige praktijkgevallen hebben beheerders vastgesteld dat er, zelfs wanneer er ogenschijnlijk geen gebruikers op een portaal waren ingelogd, nog steeds gegevens werden gegenereerd. 2 of 3 berichten per dag van een bijna volle opslag.Dit komt meestal door interne applicatieprocessen, achtergrondtaken of geheugenlekken die de heap in gebruik houden, zelfs wanneer er geen gebruikersbelasting is.

Bovendien zijn er situaties geweest waarin het zelfs moeilijk was. U kunt de beheerdersconsole via het web benaderen. Om parameters zoals de minimale en maximale grootte van de JVM aan te passen, omdat bepaalde portlets vastliepen ("crashten") wanneer je configuratieschermen probeerde te openen.

Een strategie die nuttig is gebleken, is het volgende: Start de omgeving volledig opnieuw op (server, WebSphere, portal, enz.).Wacht tot alles weer stabiel is en log dan in op de beheerdersconsole om de geheugenconfiguratie te controleren. Het kan voorkomen dat de velden voor minimum en maximum heap leeg zijn en standaardwaarden gebruiken, wat niet altijd geschikt is voor omgevingen met een hoge belasting.

Nadat ze toegang hebben verkregen, hebben sommige beheerders ervoor gekozen om bijvoorbeeld een Minimale heapgrootte van 512 MB en maximale heapgrootte van 1024 MB. (slechts als testwaarden) om te zien of het systeemgedrag verbetert en waarschuwingsberichten afnemen. Het is echter belangrijk om deze waarden aan te passen aan de beschikbaar geheugen op de IBM i zelf en het type belasting dat de server aankan.

  Vavoo TV installeren op Kodi: complete gids met alternatieven en trucs

In deze hele context, hoewel de specifieke berichten over "JAVA GEBRUIKTE 95% VAN DE GC-HEAP" WebSphere-functiesDe PASE-omgeving en Qshell kunnen indirect betrokken zijn, aangezien veel tools en scripts Java-processen starten of interactie hebben met services die op dezelfde server zijn geïmplementeerd.

WebSphere-instellingen, IWA en versies op IBM i V6R1

Wanneer u prestatie- of geheugenproblemen ondervindt in omgevingen zoals iSeries Access for Web (IWA) op IBM i V6R1Het is van cruciaal belang om duidelijkheid te scheppen over een aantal punten met betrekking tot versies en compatibiliteit met WebSphere, aangezien dit het punt is waar Qshell, PASE, Java en serverconfiguratie samenkomen.

Om te beginnen is het raadzaam om te controleren Welke exacte versie van iSeries Access for Web hebt u geïnstalleerd?Dit kan doorgaans worden geverifieerd door de betreffende pagina te raadplegen. /webaccess/iWAInfo die de applicatie zelf weergeeft. Daar kunt u het huidige IWA-niveau zien.

In het specifieke geval van IBM i V6.1 is er een belangrijke update geweest, geïdentificeerd door het PTF-nummer. SI44342Dit komt overeen met de nieuwste beschikbare versie voor die release. Door IWA up-to-date te houden met dit niveau (of het huidige niveau in uw omgeving) kunnen veel stabiliteits- of geheugenproblemen worden opgelost die in de loop der tijd zijn verholpen.

Aan de andere kant is het, wanneer we het in deze context over "portaal" hebben, belangrijk om onderscheid te maken tussen de vraag of je precies verwijst naar... IWA (iSeries Access for Web) of a WebSphere-portaal compleet. Hoewel beide naast elkaar kunnen bestaan ​​op IBM i, zijn hun configuratie- en geheugenvereisten niet hetzelfde, en de symptomen van een storing (portlets die niet laden, foutmeldingen, extreme traagheid) kunnen verwarrend zijn als u niet duidelijk weet met welk product u te maken hebt.

Een belangrijk aspect is het type server waarop IWA wordt geïmplementeerd: het kan een WebSphere Application Server 6.1, 7.0, een portal of een interne serverDe JVM-parameters variëren afhankelijk van het servertype, de specifieke versie en ook het type Java Virtual Machine dat wordt gebruikt (bijvoorbeeld de klassieke "classic" of de modernere J9).

Als je constant de melding "heap almost full" ziet, is het, naast het controleren van je geheugenparameters, de moeite waard om te overwegen of je een belangrijke functie over het hoofd ziet. Aanvullende PTF's of zelfs een versie-update van de portal zelf of van WebSphere.In IBM i V6R1 is er een limiet aan de versie van iWAS waarnaar u kunt upgraden. Daarom wordt aangeraden de officiële documentatie te raadplegen om de laatst ondersteunde combinatie voor uw release te vinden.

Samenvattend: als uw IBM i V6R1-omgeving met IWA 6.1, geïmplementeerd op WebSphere, geheugenproblemen begint te vertonen, moet u een blokcontrole uitvoeren. heapconfiguratie, IWA PTF-niveau, exacte WebSphere-versie en JVM-typePas dan heb je een volledig beeld van het probleem en kun je het op de juiste manier aanpassen, zonder dat je afhankelijk bent van af en toe een herstart.

Dit alles is indirect gerelateerd aan Qshell in die zin dat het via scripts en commando's in de PASE-omgeving mogelijk is. U kunt processen bewaken, hulptaken starten of zelfs onderhoudswerkzaamheden automatiseren. die ervoor zorgen dat de server goed blijft functioneren, van het opschonen van bestanden in het IFS tot het genereren van loglijsten voor analyse.

Tijdens deze reis hebben we gezien hoe Qshell integreert met IBM i als een POSIX-interpreter die de mogelijkheden van het systeem uitbreidtQSH maakt taken mogelijk die zo simpel zijn als het weergeven van IFS-bestanden en het schrijven van de uitvoer naar een fysiek bestand, en kan zelfs functioneren als een component binnen complexe Java- en WebSphere-omgevingen. Om QSH effectief te gebruiken, is een goed begrip van de rol ervan binnen PASE vereist, evenals vertrouwdheid met commando's zoals `ls`, `set` en `shift`, en de mogelijkheid om het te combineren met CL en klassieke IBM i-tools. Met deze aanpak wordt QSH een krachtige bondgenoot voor zowel beheerders als ontwikkelaars die de mogelijkheden van het platform optimaal willen benutten.