Hostwinds Tutoriales

Resultados de búsqueda para:


Tabla de contenido


¿Qué es PowerShell?
¿Por qué Linux PowerShell?
Instalación de Linux PowerShell
Ejemplos adicionales de Linux PowerShell
Conclusión

Usando PowerShell con Linux

Etiquetas: Cloud Servers,  Dedicated Server 

¿Qué es PowerShell?
¿Por qué Linux PowerShell?
Instalación de Linux PowerShell
Ejemplos adicionales de Linux PowerShell
Conclusión

¿Qué es PowerShell?

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.

¿Por qué Linux PowerShell?

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.

Instalación de Linux PowerShell

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.

Ejemplos adicionales de Linux PowerShell

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.

Conclusión

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