Hostwinds Tutorials

Zoekresultaten voor:


Inhoudsopgave


Wat is PowerShell?
Waarom Linux Powershell?
Linux Powershell installeren
Aanvullende Linux PowerShell -voorbeelden
Gevolgtrekking

Powershell met Linux gebruiken

Trefwoorden: Cloud Servers,  Dedicated Server 

Wat is PowerShell?
Waarom Linux Powershell?
Linux Powershell installeren
Aanvullende Linux PowerShell -voorbeelden
Gevolgtrekking

Wat is PowerShell?

PowerShell is een platformonafhankelijke oplossing die vaak wordt gebruikt voor het automatiseren van het beheer van computersystemen, maar kan ook worden gebruikt voor algemene codering.PowerShell bestaat uit een opdrachtregelschelp, een scripttaal en een configuratiebeheerkader.PowerShell draait op Windows, Linux en de MacOS -besturingssystemen.Vanwege fundamentele verschillen in besturingssystemen hebben sommige PowerShell -commando's (CMDlets genoemd) niet logisch.Bijvoorbeeld de PowerShell GET-ACL CMDlet is niet van toepassing op Linux -systemen, omdat het Linux -bestandssysteem geen NTFS -toegangscontrolelijsten (ACL's) gebruikt.Om een lijst met de beschikbare Linux PowerShell -cmdlets te bekijken, run Opdracht.

Waarom Linux Powershell?

In Linux kan de uitvoer van de ene opdracht in een ander opdracht worden geleid.Bijvoorbeeld:

ls | sort -r | more

Dit omgekeerd sorteert de inhoud van de huidige map en pagineert de lijst (indien nodig).Dat wil zeggen de gegevensstroomuitvoer van de ls commando wordt naar de soort commando waarvan de gegevensstroomuitvoer vervolgens naar de meer opdracht.De PowerShell -analoog hiervan is als volgt:

Get-ChildItem | Sort-Object -Descending | Out-Host -Paging

Wat de vraag oproept, waarom zou je PowerShell over de native versie willen gebruiken?Een belangrijke reden is dat objecten, en niet eenvoudige gegevensstromen, worden geleid tussen PowerShell -cmdlets.Het is bijvoorbeeld niet nodig om tekst te parseren om informatie uit een andere uitvoerstroom te extraheren.En omdat PowerShell -objecten over het algemeen een overvloed aan eigenschappen hebben die ermee verbonden zijn, kunt u relatief gemakkelijk een aantal redelijk krachtige dingen doen.Stel bijvoorbeeld dat u de PID van de Cron -service wilt vinden.Een eerste poging kan als volgt zijn:

ps -aux | grep cron

Dit resulteert in uitvoer vergelijkbaar met het volgende:

root      1041  0.0  0.1 126384  1584 ?        Ss   22:25   0:00 /usr/sbin/crond -n
root      3519  0.0  0.0 123360   728 ?        Ss   23:01   0:00 /usr/sbin/anacron -s
root      4089  0.0  0.0 112808   976 pts/1    R+   23:09   0:00 grep --color=auto cron

De Cron PID lijkt 1041 te zijn, hoewel het moeilijk te zeggen is zonder de tafelkoppen te zien.Ervan uitgaande dat dit het geval is, moeten we toegang krijgen tot de tweede kolom in de eerste regel.De eerste stap kan zijn om overmatige witruimte te verminderen:

ps -aux | grep cron | tr -s ' '

Dit levert:

root 1041 0.0 0.1 126384 1584 ? Ss 22:25 0:00 /usr/sbin/crond -n
root 3519 0.0 0.0 123360 728 ? Ss 23:01 0:00 /usr/sbin/anacron -s
root 4167 0.0 0.0 112808 972 pts/1 R+ 23:11 0:00 grep --color=auto cron

Nu kunnen we de tweede kolom met snee:

ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2

Die produceert:

1041
3519
4274

Ten slotte kunnen we de eerste regel als volgt pakken om het gewenste resultaat te krijgen, namelijk 1041:

ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2 | head -1

Met behulp van het feit dat PowerShell CMDlets objecten uitvoert in plaats van gegevensstromen, is de PowerShell -versie van het bovenstaande eenvoudig:

(Get-Process -Name crond).Id

In dit geval, Get -process -name crond Retourneert een object dat het Cron -proces vertegenwoordigt.Dit object heeft een reeks nuttige eigenschappen, waarvan er één de proces -ID (of PID) is.Om toegang te krijgen tot een eigenschap van een PowerShell -object, kunt u deze tussen haakjes inpakken en vervolgens standaard "dot" -notatie gebruiken, zoals weergegeven.

Linux Powershell installeren

Raadpleeg PowerShell op uw favoriete smaak van Linux PowerShell installeren op Linux.Als uw Linux -verdeling niet wordt vermeld, overweeg dan Alternatieve manieren om PowerShell op Linux te installeren.

Als voorbeeld installeren de volgende vier opdrachten de nieuwste versie van PowerShell op CentOS 7:

# Optionally update all software packages:
  sudo yum -y update
  
# Register the Microsoft repository:
  curl https://packages.microsoft.com/config/rhel/7/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo
    
# Install PowerShell:
  sudo yum -y install powershell
    
# Start PowerShell:
  pwsh

Zoals te zien is, is het installeren van PowerShell eenvoudig.

Aanvullende Linux PowerShell -voorbeelden

Een belangrijke techniek is bepalen welke eigenschappen een PowerShell -object eigenlijk heeft.Dit kan gemakkelijk worden bereikt met de Bid cmdlet.Om bijvoorbeeld de eigenschappen van een PowerShell -procesobject te bepalen, kunt u:

Get-Process | Get-Member -Force

Dit onthult dat er een Pad eigenschap voor procesobjecten.We kunnen het dus gebruiken om de top 10 -processen te vermelden, met betrekking tot CPU -gebruik, als volgt:

Get-Process | Sort-Object -Property CPU | Select-Object -Property Name, Path, CPU -Last 10

Dit produceert output vergelijkbaar met het volgende:

Name           Path                                CPU
----           ----                                ---
xfwm4          /usr/bin/xfwm4                     1.95
systemd        /usr/lib/systemd/systemd           3.63
rngd           /usr/sbin/rngd                     7.39
xfce4-terminal /usr/bin/xfce4-terminal            9.35
xrdp           /usr/sbin/xrdp                    22.05
ksoftirqd/0                                      26.21
pwsh           /opt/microsoft/powershell/7/pwsh  27.37
rcu_sched                                        45.44
Xvnc           /usr/bin/Xvnc                     59.27
NetworkManager /usr/sbin/NetworkManager         955.19

Hoewel nuttig, willen we misschien een algemene systeemgebruiksmetriek berekenen.Een eerste snit kan zijn om eenvoudig het niet-gepresenteerde geheugen (NPM), paginamemory (PM), Working Set (WS) en CPU-gebruikswaarden te tellen.Dat wil zeggen, we definiëren onze algemene gebruiksmetriek als volgt:

Overallusage = npm + PM + WS + CPU.

In Powershell kan dit als volgt worden bereikt:

Get-Process | Select-Object -Property @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}}

De @{} Hash -tabel (d.w.z. sleutel/waardeparen) stelt ons in staat om een eigenschap te definiëren Overallusage waarvan de definitie de hierboven getoonde uitdrukking is.In deze uitdrukking, $_ vertegenwoordigt een pijplijnobject.In dit geval een individueel procesobject dat Opslagplaats Retourneert (één per Linux -proces).Vervolgens vatten we de vier eigenschappen.Dit resulteert in het volgende (eerste paar regels):

    OverallUsage
    ------------
          520192
       815104.03
          794624
         1093632
      4902912.01
      3330048.37

Nu kunnen we deze twee concepten als volgt combineren:

Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}} | Sort-Object -Property OverallUsage -Bottom 10

Dit produceert een top 10 algemeen gebruikstabel, vergelijkbaar met het volgende:

Name                Path                             OverallUsage
----                ----                             ------------
Thunar              /usr/bin/thunar                    14073856.2
xfce4-power-manager /usr/bin/xfce4-power-manager       15970304.3
xfce4-panel         /usr/bin/xfce4-panel               16195584.9
xfdesktop           /usr/bin/xfdesktop                17588224.59
tuned               /usr/bin/python2.7                18898945.66
yum-cron            /usr/bin/python2.7                 22335488.2
xfce4-terminal      /usr/bin/xfce4-terminal            23642123.4
xrdp                /usr/sbin/xrdp                    26570776.34
Xvnc                /usr/bin/Xvnc                     82710598.14
pwsh                /opt/microsoft/powershell/7/pwsh 298852382.66

En als u liever afgeronde gebruikswaarden weergeeft, kunt u gebruiken:

Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {[Math]::Round($_.NPM + $_.PM + $_.WS + $_.CPU)}} | Sort-Object -Property OverallUsage -Bottom 10

De [Math] :: Round () Functie wordt gebruikt om de individuele bedragen af te ronden naar hun dichtstbijzijnde hele waarden.

Gevolgtrekking

Er zijn tal van scenario's waarbij standaard Linux -opdrachten logischer zijn dan PowerShell -cmdlets, en in een aantal gevallen, andersom, maar wat bijzonder aantrekkelijk is, is dat je beide paradigma's samen kunt gebruiken.Als een eenvoudig voorbeeld, overweeg:

Get-Process | Select-Object -Property Name, Path, Responding, Id |  grep cron

Dit produceert:

anacron    /usr/sbin/anacron    True   3018
crond      /usr/sbin/crond      True   1033
yum-cron   /usr/bin/python2.7   True   4760

De derde kolom geeft aan of het proces al dan niet reageert.

Zoals u kunt zien, bieden PowerShell en de combinatie van PowerShell met Linux -opdrachten voldoende gelegenheid om verschillende problemen en taken op te lossen en te vereenvoudigen.

Geschreven door Karlito Bonnevie  /  april 26, 2022