Hostwinds Tutorial
Cerca risultati per:
Sommario
Tag: Cloud Servers, Dedicated Server
PowerShell è una soluzione multipiattaforma comunemente utilizzata per automatizzare la gestione dei sistemi informatici, ma può essere utilizzata anche per la codifica generale.PowerShell è composto da una shell della riga di comando, un linguaggio di scripting e un framework di gestione della configurazione.PowerShell funziona su Windows, Linux e sui sistemi operativi MACOS.A causa delle differenze fondamentali nei sistemi operativi, alcuni comandi PowerShell (chiamati CMDLET) non hanno senso.Ad esempio, il PowerShell Get-acl CMDLET non è applicabile per i sistemi Linux in quanto il file system Linux non utilizza elenchi di controllo degli accessi NTFS (ACLS).Per visualizzare un elenco dei cmdlet disponibili Linux PowerShell, esegui Get-comand.
In Linux, l'output di un comando può essere tubata in un altro comando.Per esempio:
ls | sort -r | more
Questo inverso ordina il contenuto della directory corrente e pagina l'elenco (se necessario).Cioè, l'output del flusso di dati del ls Il comando è convogliato al file ordinare comando il cui output del flusso di dati viene quindi condotto al Di Più comando.L'analogo di PowerShell di questo è il seguente:
Get-ChildItem | Sort-Object -Descending | Out-Host -Paging
Il che pone la domanda, perché dovresti usare PowerShell sulla versione nativa?Uno dei motivi chiave è che gli oggetti, e non semplici flussi di dati, vengono convocati tra PowerShell Cmdlets.Ad esempio, non è necessario analizzare il testo per estrarre informazioni da un altro flusso di output.E poiché gli oggetti PowerShell hanno generalmente una pletora di proprietà ad essi associate, puoi fare alcune cose abbastanza potenti relativamente facilmente.Ad esempio, supponiamo che tu vorresti trovare il PID del servizio Cron.Un primo tentativo potrebbe essere il seguente:
ps -aux | grep cron
Ciò si traduce in output simile a quanto segue:
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
Il PID Cron sembra essere 1041 anche se è difficile da dire senza vedere le intestazioni del tavolo.Supponendo che questo sia il caso, dobbiamo accedere alla seconda colonna nella prima riga.Il primo passo potrebbe essere quello di ridurre lo spazio bianco eccessivo:
ps -aux | grep cron | tr -s ' '
Questo produce:
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
Ora possiamo isolare la seconda colonna con taglio:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2
Che produce:
1041
3519
4274
Infine, possiamo prendere la prima riga, come segue, per ottenere il risultato desiderato, vale a dire 1041:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2 | head -1
Usando il fatto che PowerShell CMDLETs output di oggetti anziché flussi di dati, la versione PowerShell di quanto sopra è semplicemente:
(Get-Process -Name crond).Id
In questo caso, Get -process -Name Crond Restituisce un oggetto che rappresenta il processo CRON.Questo oggetto ha una serie di proprietà utili, una delle quali è l'ID di processo (o PID).Per accedere a una proprietà di un oggetto PowerShell, è possibile avvolgerlo tra parentesi e quindi utilizzare la notazione "punto" standard, come mostrato.
Per installare PowerShell sul tuo sapore preferito di Linux, fai riferimento a Microsoft's Installazione di PowerShell su Linux.Se la distribuzione Linux non è elencata, considera Modi alternativi per installare PowerShell su Linux.
Ad esempio, i seguenti quattro comandi installano l'ultima versione di PowerShell su Ubuntu:
# Optionally update all software packages:
sudo apt update && sudo apt upgrade -y
# Download and Add Microsoft repository:
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
# Install PowerShell:
sudo apt update
sudo apt install -y powershell
# Start PowerShell:
pwsh
Come si può vedere, l'installazione di PowerShell è semplice.
Una tecnica chiave è determinare quali proprietà ha effettivamente un oggetto PowerShell.Questo può essere facilmente realizzato con il Get-Member cmdlet.Ad esempio, per determinare le proprietà di un oggetto di processo PowerShell, è possibile utilizzare:
Get-Process | Get-Member -Force
Questo rivela che esiste un Il percorso Proprietà per oggetti di processo.Pertanto, possiamo usarlo per elencare i primi 10 processi, rispetto all'utilizzo della CPU, come segue:
Get-Process | Sort-Object -Property CPU | Select-Object -Property Name, Path, CPU -Last 10
Questo produce output in modo simile a quanto segue:
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
Sebbene utili, potremmo voler calcolare una metrica di utilizzo complessiva del sistema.Un primo taglio potrebbe essere semplicemente di sommare la memoria non pagata (NPM), la memoria di pagina (PM), il set di lavoro (WS) e i valori di utilizzo della CPU.Cioè, definiamo la nostra metrica di utilizzo complessiva come segue:
GENERALEUSAGE = NPM + PM + WS + CPU.
In PowerShell, questo può essere realizzato come segue:
Get-Process | Select-Object -Property @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}}
Il @{} La tabella hash (cioè coppie chiave/valore) ci consente di definire una proprietà chiamata Complessivamente la cui definizione è l'espressione mostrata sopra.In questa espressione, $_ rappresenta un oggetto della pipeline.In questo caso, un singolo processo oggetto che Get-process restituisce (uno per processo Linux in esecuzione).Quindi sommiamo le quattro proprietà.Ciò si traduce nelle seguenti (prime righe):
OverallUsage
------------
520192
815104.03
794624
1093632
4902912.01
3330048.37
Ora possiamo combinare questi due concetti come segue:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}} | Sort-Object -Property OverallUsage -Bottom 10
Questo produce una tabella di utilizzo complessiva dei primi 10, simile a quanto segue:
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
E se preferisci visualizzare valori di utilizzo arrotondati, puoi usare:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {[Math]::Round($_.NPM + $_.PM + $_.WS + $_.CPU)}} | Sort-Object -Property OverallUsage -Bottom 10
Il [Matematica] :: round () La funzione viene utilizzata per arrotondare le singole somme ai valori interi più vicini.
Esistono molti scenari in cui i comandi Linux standard hanno più senso dei cmdlet PowerShell e, in diversi casi, viceversa, ma ciò che è particolarmente attraente è che puoi usare entrambi i paradigmi insieme.Come semplice esempio, considera:
Get-Process | Select-Object -Property Name, Path, Responding, Id | grep cron
Questo produce:
anacron /usr/sbin/anacron True 3018
crond /usr/sbin/crond True 1033
yum-cron /usr/bin/python2.7 True 4760
La terza colonna indica se il processo è o meno reattivo.
Come puoi vedere, PowerShell e la combinazione di PowerShell con comandi Linux offrono ampie opportunità per risolvere e semplificare vari problemi e compiti.
Scritto da Karlito Bonnevie / aprile 26, 2022