blog.dopana

Back

PowerShell 内置了许多常见 Linux 命令的别名,让你可以在 Windows 终端中直接输入熟悉的 lscdcat 等指令。

然而在底层,PowerShell 并没有执行 Unix 二进制文件,而是将这些别名翻译成了 Windows 的面向对象 cmdlet(例如:输入 ls 实际上触发的是 Get-ChildItem)。

因为这些只是外层包装(Wrapper),所以 Linux 特有的复合参数(如 ls -larm -rf)无法直接生效,必须使用 PowerShell 规范的参数语法。

Linux 到 PowerShell 命令转换速查表#

下表列出了常见 Linux 操作对应的 PowerShell 别名及原生 cmdlet:

Linux 命令PowerShell 别名原生 PowerShell Cmdlet说明 / 示例用法
lsls / dir / gciGet-ChildItem列出目录内容。查看隐藏文件:Get-ChildItem -Force
cdcd / chdir / slSet-Location切换当前工作目录
pwdpwd / glGet-Location输出当前目录的绝对路径
catcat / type / gcGet-Content读取并显示文件内容
mkdirmkdir / niNew-Item -ItemType Directory创建新目录
touch(无)New-Item -ItemType File创建空文件(如:ni file.txt
cpcp / copy / cpiCopy-Item复制文件或目录到目标位置
mvmv / move / miMove-Item移动或重命名文件/目录
rmrm / del / riRemove-Item删除文件或目录。强制递归删除:rm -Recurse -Force
echoecho / writeWrite-Output将文本输出到终端管道
grep(使用 sls)Select-String模式匹配搜索(如:`cat file.txt \
clearclear / clsClear-Host清空终端屏幕
psps / gpsGet-Process列出当前运行的系统进程
killkill / pkill / spsStop-Process根据 ID 或名称终止进程(如:kill -Name notepad
curl / wgetcurl / wget / iwrInvoke-WebRequest发起 Web 请求(注:PowerShell 7+ 已移除 curl 别名)
which(无)Get-Command查找命令的绝对路径或来源

必须掌握的 2 大核心差异#

1. 纯文本 vs .NET 对象(Text vs. Objects)#

在 Linux 中,管道(|)之间传递的是纯文本(Plain Text)。通常需要配合 grepawksed 等工具解析字符串。

而在 PowerShell 中,数据以结构化的 .NET 对象传递。无需复杂的字符串切分,可直接读取对象属性:

ps aux | grep "chrome" | awk '{print $2, $3}'
bash
Get-Process chrome | Select-Object Id, CPU, ProcessName
powershell
flowchart TD
    subgraph Linux["Linux 管道 (纯文本流)"]
        L1["命令 A (Raw Text)"] -->|Text Stream| L2["grep / awk / sed"]
        L2 -->|Filtered Text| L3["过滤后的字符串"]
    end

    subgraph PowerShell["PowerShell 管道 (.NET 对象流)"]
        P1["Cmdlet A (.NET 对象)"] -->|Object Stream| P2["Select-Object / Where-Object"]
        P2 -->|Structured Object| P3["直接读取属性 Property"]
    end

2. 参数与选项机制(Flags & Arguments)#

PowerShell 不支持 Linux 的短参数拼接(如 -rf-al),而是使用明确的 -ParameterName 命名参数系统。

  • 如果命令报错,可通过内置帮助文档查看有效参数:
    Get-Help Get-ChildItem -Detailed
    powershell
  • PowerShell 参数支持 Tab 补全,且只要前缀无歧义即可缩写(例如 -Recurse 可缩写为 -Rec)。

[!TIP] 实用技巧: 如果想念 which 等 Linux 指令,可以在 PowerShell 配置文件($PROFILE)中永久配置别名:

New-Alias -Name which -Value Get-Command
powershell

参考资料#