运维——14.PowerShell 与Linux 、 macOS通用的命令

发布于:2025-06-20 ⋅ 阅读:(12) ⋅ 点赞:(0)

PowerShell 最初是 Windows 平台的,但现在已经有了 PowerShell Core,它是跨平台的,支持 Linux 和 macOS。在 PowerShell Core 中有一些Linux 和 macOS通用的命令。理清楚这些有助于学习多系统命令。

在 Linux/macOS 上使用 PowerShell 完成文件操作、系统管理、脚本编写等任务,同时保持与 Windows 环境的语法一致性。如果需要更复杂的跨平台脚本,建议结合 PowerShell 的平台检测功能(如$env:OSTYPE)适配不同系统的差异。

一、系统信息与环境

  1. Get-Command
    功能:列出可用命令,查看命令详情。
    示例:Get-Command Get-ChildItem

  2. Get-Host
    功能:获取当前 PowerShell 宿主环境信息(版本、平台等)。
    示例:Get-Host | Format-List

  3. Get-Location
    功能:获取当前工作目录。
    等价于:pwd(Linux/macOS 命令)

  4. Set-Location
    功能:切换工作目录。
    等价于:cd(Linux/macOS 命令)
    示例:Set-Location /usr/bin

  5. Get-Process
    功能:获取系统进程信息(跨平台基于各系统的进程管理接口)。
    示例:Get-Process | Where-Object { $_.MemoryUsage -gt 100MB }

  6. Get-Command -Module Microsoft.PowerShell.Management
    功能:查看管理模块中的通用命令(如文件操作、进程等)。

二、文件与目录操作

  1. Get-ChildItem
    功能:列出目录内容,等价于 Linux/macOS 的ls
    示例:Get-ChildItem -Path /etc -Filter *.conf

  2. New-Item
    功能:创建文件或目录。
    示例:New-Item -ItemType Directory -Path ~/Documents/NewFolder

  3. Remove-Item
    功能:删除文件或目录(使用时需谨慎)。
    示例:Remove-Item -Path ~/temp/file.txt

  4. Copy-Item
    功能:复制文件或目录,等价于cp
    示例:Copy-Item -Path source.txt -Destination target.txt

  5. Move-Item
    功能:移动或重命名文件 / 目录,等价于mv
    示例:Move-Item -Path old.txt -Destination new.txt

  6. Test-Path
    功能:检查路径是否存在。
    示例:if (Test-Path ~/Documents) { "目录存在" }

  7. Get-Content
    功能:读取文件内容,等价于cat/more/less
    示例:Get-Content /etc/hosts

  8. Set-Content
    功能:写入内容到文件(覆盖),等价于
    示例:"Hello World" | Set-Content ~/greeting.txt

  9. Add-Content
    功能:追加内容到文件,等价于>>
    示例:"Line 2" | Add-Content ~/greeting.txt

三、进程与服务管理

  1. Get-Process
    功能:获取进程信息(跨平台支持,Linux/macOS 基于ps命令的封装)。
    示例:Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 5

  2. Stop-Process
    功能:终止进程。
    示例:Stop-Process -Name "chrome"

  3. Start-Process
    功能:启动程序或进程(在 Linux/macOS 上可调用系统命令)。
    示例:Start-Process "firefox"Start-Process "ls" -ArgumentList "-la"

  4. Get-Service
    功能:获取服务信息(Linux/macOS 上基于 systemd/sysvinit 等服务管理系统)。
    示例:Get-Service | Where-Object { $_.Status -eq "Running" }

  5. Restart-Service
    功能:重启服务(需管理员 /root 权限)。
    示例:Restart-Service sshd(Linux 上重启 SSH 服务)

四、网络与通信

  1. Invoke-WebRequest
    功能:发送 HTTP/HTTPS 请求,等价于curl/wget
    示例:Invoke-WebRequest -Uri "https://api.github.com"

  2. Test-NetConnection
    功能:测试网络连接(如端口连通性),等价于telnet/nc
    示例:Test-NetConnection -ComputerName google.com -Port 80

  3. Resolve-DnsName
    功能:解析域名对应的 IP 地址。
    示例:Resolve-DnsName -Name "baidu.com"

五、脚本与编程基础

  1. 变量与表达式

    • 变量赋值:$var = "Hello"
    • 表达式:$result = 10 * 2 + 5
  2. 流程控制

    • if 语句:

      powershell

      if ($env:OS -like "*Windows*") {
          "Windows系统"
      } elseif ($env:OSTYPE -like "darwin*") {
          "macOS系统"
      } else {
          "Linux系统"
      }
      
    • for/foreach 循环:

      powershell

      foreach ($file in Get-ChildItem ~/Documents) {
          Write-Host "文件: $($file.Name)"
      }
      
  3. 函数定义

    powershell

    function Get-OSInfo {
        $os = if ($env:OSTYPE -like "darwin*") { "macOS" }
        elseif ($env:OS -like "*Linux*") { "Linux" }
        else { "Windows" }
        Write-Output "当前系统: $os"
    }
    
  4. 管道与筛选

    • 管道操作:Get-ChildItem | Where-Object { $_.Length -gt 1MB } | Sort-Object -Descending Length
    • 筛选与格式化:Get-Process | Select-Object Name, CPU, Memory | Format-Table -AutoSize

六、其他通用命令

  1. Write-Host
    功能:输出文本到控制台(可带颜色)。
    示例:Write-Host "成功!" -ForegroundColor Green

  2. Read-Host
    功能:从控制台读取用户输入。
    示例:$name = Read-Host "请输入姓名"

  3. Measure-Object
    功能:计算数据的统计信息(如字符数、数值总和等)。
    示例:"Hello World" | Measure-Object -Character

  4. ConvertTo-Json / ConvertFrom-Json
    功能:JSON 数据转换,跨平台通用。
    示例:$obj = [PSCustomObject]@{Name="豆包"; Version=1.0}; $obj | ConvertTo-Json

  5. Compare-Object
    功能:比较两个对象或数据集的差异。
    示例:Compare-Object (Get-ChildItem Dir1) (Get-ChildItem Dir2) -Property Name

注意事项

  1. 路径格式差异

    • Windows 使用\(如C:\Users\user),Linux/macOS 使用/(如/home/user),PowerShell Core 支持两种格式,但推荐使用/以保持跨平台兼容性。
  2. 依赖平台的命令

    • 部分 Windows 特有的命令(如Get-ADUserInvoke-WmiMethod)无法在 Linux/macOS 上使用,需避免依赖 Windows 特定 API 或组件。
  3. 模块兼容性

    • 某些模块(如ActiveDirectory)仅适用于 Windows,跨平台场景建议使用通用模块(如Microsoft.PowerShell.ManagementNet.Http)。
  4. 权限问题

    • 在 Linux/macOS 上执行系统管理命令(如修改系统文件、重启服务)需使用sudo获取 root 权限,例如:sudo pwsh -c "Restart-Service sshd"


网站公告

今日签到

点亮在社区的每一天
去签到