Hostwinds Tutoriales
Resultados de búsqueda para:
Tabla de contenido
Etiquetas: Cloud Servers, Dedicated Server
PowerShell es una solución multiplataforma comúnmente utilizada para automatizar la administración de los sistemas informáticos, pero también se puede utilizar para la codificación general.PowerShell está compuesto por un shell de línea de comandos, un lenguaje de secuencias de comandos y un marco de administración de configuración.PowerShell se ejecuta en Windows, Linux y los sistemas operativos MACOS.Debido a las diferencias fundamentales en los sistemas operativos, algunos comandos de PowerShell (llamados cmdlets) no tienen sentido.Por ejemplo, el PowerShell Get-ACL CMDLET no es aplicable para los sistemas Linux en que el sistema de archivos Linux no usa Listas de control de acceso NTFS (ACLS).Para ver una lista de los cmdlets de Linux PowerShell disponibles, ejecute Al Command.
En Linux, la salida de un comando se puede meter en otro comando.Por ejemplo:
ls | sort -r | more
Este reverso clasifica el contenido del directorio actual y pagina la lista (si es necesario).Es decir, la salida del flujo de datos del ls el comando se contagia al clasificar comando cuya salida de flujo de datos se realiza a la más dominio.El análogo de PowerShell de esto es el siguiente:
Get-ChildItem | Sort-Object -Descending | Out-Host -Paging
Lo que plantea la pregunta, ¿por qué querrías usar PowerShell sobre la versión nativa?Una razón clave es que los objetos, y no los flujos de datos simples, se tienen entre los cmdlets de PowerShell.Por ejemplo, no es necesario analizar el texto para extraer información de otra secuencia de salida.Y debido a que los objetos de PowerShell generalmente tienen una gran cantidad de propiedades asociadas con ellos, puede hacer algunas cosas bastante poderosas con relativa facilidad.Por ejemplo, digamos que le gustaría encontrar el PID del servicio Cron.Un primer intento podría ser el siguiente:
ps -aux | grep cron
Esto da como resultado una salida similar a la siguiente:
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
El Cron Pid parece ser 1041, aunque es difícil saberlo sin ver los encabezados de la mesa.Suponiendo que este es el caso, necesitamos acceder a la segunda columna en la primera línea.El primer paso podría ser reducir el espacio en blanco excesivo:
ps -aux | grep cron | tr -s ' '
Esto 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
Ahora podemos aislar la segunda columna con cortar:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2
Que produce:
1041
3519
4274
Finalmente, podemos tomar la primera línea, de la siguiente manera, para obtener el resultado deseado, es decir, 1041:
ps -aux | grep cron | tr -s ' ' | cut -d ' ' -f 2 | head -1
Utilizando el hecho de que los objetos de salida de PowerShell Cmdlets en lugar de flujos de datos, la versión PowerShell de lo anterior es simplemente:
(Get-Process -Name crond).Id
En este caso, Get -Process -name Crond Devuelve un objeto que representa el proceso CRON.Este objeto tiene una serie de propiedades útiles, una de las cuales es la identificación del proceso (o PID).Para acceder a una propiedad de un objeto PowerShell, puede envolverla entre paréntesis y luego usar notación estándar de "punto", como se muestra.
Para instalar PowerShell en su sabor favorito de Linux, consulte Microsoft's Instalación de PowerShell en Linux.Si su distribución de Linux no figura en la lista, considere Formas alternativas de instalar PowerShell en Linux.
Como ejemplo, los siguientes cuatro comandos instalan la última versión de PowerShell en 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
Como se puede ver, la instalación de PowerShell es sencilla.
Una técnica clave es determinar qué propiedades tiene realmente un objeto PowerShell.Esto se puede lograr fácilmente con el Ser miembro cmdlet.Por ejemplo, para determinar las propiedades de un objeto de proceso PowerShell, puede usar:
Get-Process | Get-Member -Force
Esto revela que hay un Sendero Propiedad para objetos de proceso.Por lo tanto, podemos usarlo para enumerar los 10 procesos principales, con respecto al uso de la CPU, de la siguiente manera:
Get-Process | Sort-Object -Property CPU | Select-Object -Property Name, Path, CPU -Last 10
Esto produce una salida similar a la siguiente:
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
Aunque es útil, es posible que deseemos calcular una métrica general de uso del sistema.Un primer corte podría ser simplemente resumir los valores de uso de la memoria no apagada (NPM), la memoria de la página (PM), el conjunto de trabajo (WS) y el uso de la CPU.Es decir, definimos nuestra métrica de uso general de la siguiente manera:
GeneralUsage = NPM + PM + WS + CPU.
En PowerShell, esto se puede lograr de la siguiente manera:
Get-Process | Select-Object -Property @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}}
los @{} tabla hash (es decir, pares de clave/valor) nos permite definir una propiedad llamada Generalusaje cuya definición es la expresión que se muestra arriba.En esta expresión, $_ representa un objeto de tubería.En este caso, un proceso de proceso individual que Obtener procesos Devuelve (uno por proceso en ejecución de Linux).Luego sumamos las cuatro propiedades.Esto da como resultado lo siguiente (primeras líneas):
OverallUsage
------------
520192
815104.03
794624
1093632
4902912.01
3330048.37
Ahora podemos combinar estos dos conceptos de la siguiente manera:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {$_.NPM + $_.PM + $_.WS + $_.CPU}} | Sort-Object -Property OverallUsage -Bottom 10
Esto produce una tabla de uso general Top 10, similar a la siguiente:
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
Y si prefiere mostrar valores de uso redondeados, puede usar:
Get-Process | Select-Object -Property Name, Path, @{Label = 'OverallUsage'; Expression = {[Math]::Round($_.NPM + $_.PM + $_.WS + $_.CPU)}} | Sort-Object -Property OverallUsage -Bottom 10
los [Math] :: Round () La función se usa para redondear las sumas individuales a sus valores completos más cercanos.
Hay muchos escenarios en los que los comandos estándar de Linux tienen más sentido que los cmdlets de PowerShell, y en varios casos, al revés, pero lo que es particularmente atractivo es que puede usar ambos paradigmas juntos.Como ejemplo simple, considere:
Get-Process | Select-Object -Property Name, Path, Responding, Id | grep cron
Esto produce:
anacron /usr/sbin/anacron True 3018
crond /usr/sbin/crond True 1033
yum-cron /usr/bin/python2.7 True 4760
La tercera columna indica si el proceso es receptivo o no.
Como puede ver, PowerShell y la combinación de PowerShell con comandos de Linux brindan una amplia oportunidad para resolver y simplificar diversos problemas y tareas.
Escrito por Karlito Bonnevie / abril 26, 2022