ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 与 Linux 命令对照及终端选型避坑

Windows 与 Linux 命令对照及终端选型避坑 在 Windows 和 Linux 之间来回切换的人多少都经历过这种尴尬在 Linux 上肌肉记忆敲出ls换到 cmd 里一回车屏幕冷冷回一句不是内部或外部命令反过来在 PowerShell 里习惯了Get-ChildItem登到服务器上又要重新想ls -al到底带几个参数。windows 与 linux 的常用命令对应关系本质上不是一张背诵表而是两套完全不同的设计哲学——一套是短小精悍的文本流工具组合另一套是动词加名词的对象管道。把这张对应表吃透再配合 Terminal、Git Bash、cmd、PowerShell 这四个 Windows 侧常用入口日常开发、部署、排查问题的效率差别非常明显。这篇内容适合三类人刚接触 Linux 但主力机是 Windows 的开发者、需要频繁在两种环境间搬运脚本的运维、以及想搞清楚到底该用哪个终端的新手。我会把命令对照、环境选型、编码坑、脚本差异一次性讲清楚中间会穿插我自己踩过的坑和实测经验尽量让每个命令都能直接抄作业。需要说明的是下面涉及的参数和行为都是基于当前主流版本PowerShell 5.1 与 7.x、cmd、Git Bash 自带 GNU 工具链总结的常见实践个别老版本可能有出入动手前建议先用--help或Get-Help确认一下。1. 先搞清楚四个终端环境到底差在哪1.1 命令不统一的根源两套设计哲学很多人以为 Windows 和 Linux 命令不一样只是名字没对上其实根子在管道里流动的东西不同。Linux 的管道传的是纯文本流ls | grep txt之所以成立是因为ls吐出来的就是一坨可以直接用正则切的字符串而 PowerShell 的管道传的是对象Get-ChildItem | Where-Object {$_.Extension -eq .txt}之所以能这么写是因为过滤的不是文字而是带属性的 .NET 对象。这个差异决定了三件事。第一Linux 命令普遍短、参数用单横线-lPowerShell 用完整的动词名词加参数名-Recurse -Force写起来啰嗦但自解释性强。第二Linux 的文本三剑客grep、awk、sed靠正则打天下PowerShell 则更鼓励用对象属性和Where-Object、Select-Object组合。第三也是新手最容易忽略的——同一条命令在 Git Bash 和 cmd 里行为可能完全不同因为 Git Bash 跑的是真 GNU 工具cmd 跑的是 Windows 原生程序两者对路径分隔符、大小写、换行的处理都不一样。所以别指望背一张表就能通吃。正确做法是先明确我现在这个终端背后是谁再决定用哪套语法。后面每一节我都会把四种环境的写法并列出来。1.2 四个环境的能力边界与适用场景选错终端比敲错命令更浪费时间。我按实测经验整理了一份定位表环境底层命令风格最适合的场景明显短板cmdWindows 原生命令解释器老式 DOS 语法跑.bat、老工具、简单批处理、部分安装脚本功能弱无对象管道正则能力差PowerShell.NET 之上的脚本环境动词-名词 cmdlet系统管理、自动化、注册表/服务操作、Windows 运维语法学习曲线陡与 Linux 命令不同名Git Bash打包的 MSYS2 GNU 工具标准 Bash日常 Git 操作、跑 shell 脚本、体验 Linux 命令不是完整 Linux 内核权限/符号链接行为有差异WSL/Windows Terminal真 Linux 内核 终端壳完整 Linux需要真实 Linux 环境编译、容器、系统调用需要额外安装文件跨系统访问有性能损耗需要说明的是Windows Terminal 本身不是命令环境它是把 cmd、PowerShell、Git Bash、WSL 这些壳装进同一个窗口的容器。很多人把这几个概念混在一起面试或者跟同事沟通时容易说错。我个人的习惯是日常 Git 操作和跑 .sh 脚本用 Git BashWindows 系统层面的自动化用 PowerShell遇到只有 .bat 的老工具才回 cmd需要完整 Linux 行为就上 WSL。这个分工用久了基本不需要切换思维效率最高。1.3 快速判断当前所处环境的小技巧切来切去最怕不知道自己现在在哪。几个立刻能判断的办法敲$PSVersionTable能返回一张版本表的就是 PowerShell敲echo $SHELL返回/usr/bin/bash之类路径的大概率是 Git Bash 或 WSL如果ls报不是内部或外部命令那必然是 cmd。另外看提示符也有用cmd 默认是C:\Users\你的名字PowerShell 前面通常带PSGit Bash 和 WSL 一般用$结尾。提示养成在脚本开头显式声明解释器的习惯。.sh文件首行写#!/bin/bashPowerShell 脚本用.ps1后缀批处理用.bat或.cmd不要靠双击猜。跨平台项目里这一点尤其重要能省掉大量在我机器上是好的这类扯皮。2. 文件与目录操作最高频的一批命令对照2.1 查看目录与切换路径这是每天要敲几十次的操作对照表必须刻进肌肉记忆。下面这张表我按功能排列从左到右分别是 Linux、cmd、PowerShell 的写法功能Linux / Git BashcmdPowerShell列出当前目录ls/ls -aldirGet-ChildItem/ls/gci切换目录cd /pathcd /d C:\pathSet-Location/cd显示当前路径pwdcd不带参数Get-Location/pwd创建目录mkdir -p a/bmkdir a\bNew-Item -ItemType Directory -Path a\b -Force删除空目录rmdir armdir aRemove-Item a显示目录树treetree /ftree /f或Get-ChildItem -Recurse这里有几个特别值得说的点。第一cmd 的cd默认不跨盘符在 C 盘想切到 D 盘必须加/d写成cd /d D:\work否则它会傻乎乎地只改 D 盘的当前目录但不真的切过去——这个坑我见过太多人栽。第二PowerShell 里ls、cd、pwd、cat这些都是别名底层指向对应 cmdlet所以从 Linux 过来的人能无缝上手一大半但别名在脚本里不推荐用因为可能被覆盖写脚本时建议用完整的Get-ChildItem。第三mkdir -p的自动创建多级父目录能力cmd 的mkdir也支持写mkdir a\b\c会一次建好整条链但 PowerShell 的New-Item默认不建父目录得加-Force。2.2 复制、移动、重命名与删除这四个动作在两种体系里的参数逻辑差别挺大尤其是递归和强制的开关位置。功能Linux / Git BashcmdPowerShell复制文件cp a.txt b.txtcopy a.txt b.txtCopy-Item a.txt b.txt递归复制目录cp -r src dstxcopy src dst /E /I或robocopyCopy-Item src dst -Recurse移动/重命名mv a.txt b.txtmove a.txt b.txtMove-Item/Rename-Item删除文件rm a.txtdel a.txtRemove-Item a.txt递归强制删除rm -rf dirrmdir /s /q dirRemove-Item dir -Recurse -Force关于复制目录cmd 自己其实没有原生好用的递归复制xcopy和robocopy是两个外部工具其中robocopy才是 Windows 上真正稳定的大文件/大批量复制利器支持断点续传式的镜像同步、多线程/MT、日志记录。我在搬迁几十 G 的项目目录时基本只用它命令形如robocopy 源目录 目标目录 /E /MT:16 /R:2 /W:2 /LOG:copy.log其中/E表示含空目录一起复制/MT:16开 16 线程/R:2表示失败重试 2 次默认是重试一百万次——这点如果不改遇到被占用的文件会卡到天亮。注意rm -rf和del /f /s /q这类命令没有回收站删了就是没了。在 PowerShell 里想稳妥一点可以先把Remove-Item换成移到临时目录或者用-WhatIf参数先干跑一遍它会打印将要删除什么但不真正执行确认无误再去掉这个参数。2.3 路径写法、通配符与大小写的隐形差异这三件事是跨平台脚本崩溃的头号原因单独拎出来讲。路径分隔符Linux 用正斜杠/Windows 传统上反斜杠\。但好消息是Windows 的大多数现代 API 和 PowerShell 都能识别正斜杠cd C:/Users/xxx在 PowerShell 和 Git Bash 里都能跑。麻烦的是 cmd它的某些命令对正斜杠敏感会把dir /a里的/a当参数而不是路径。所以写跨平台脚本时能用pathlib、Join-Path这类自动拼路径的工具就别手写拼接。大小写敏感Linux 的文件系统默认区分大小写README.md和readme.md是两个文件Windows 的 NTFS 默认不区分。这个差异在本地测试时完全看不出来一部署到 Linux 服务器就文件找不到。我踩过的典型例子是前端项目里import Header from ./header本地 Windows 能跑CI 上跑 Linux 就炸。规避办法很简单提交前用git mv把文件名改成和引用完全一致或者干脆养成引用和文件名大小写统一的好习惯。通配符Linux 的 shell 会先把*展开成实际文件名再传给命令所以rm *.log里的*是 Bash 展开的cmd 和 PowerShell 对通配符的处理规则不同PowerShell 的通配符更丰富支持[a-z]、?、*字符集写法。写脚本时如果依赖通配符最好在对应环境里实测一遍别想当然。差异点LinuxWindows踩坑后果分隔符/\现代 API 兼容/cmd 下路径解析失败大小写敏感不敏感部署到服务器找不着文件换行符LF (\n)CRLF (\r\n)脚本执行报语法错、Git 显示整文件改动换行符不影响多数情况兼容\r可能导致命令末尾异常shell 脚本报未找到命令换行符这条额外提一句很多人复制粘贴或从 Windows 编辑的.sh上传到 Linux报bad interpreter: /bin/bash^M之类的错就是 CRLF 惹的祸。解决办法是dos2unix file.sh或者 Git 配置core.autocrlfinput让仓库统一存 LF。我个人建议直接上.gitattributes文件统一声明一劳永逸。3. 文本查看、检索与管道组合3.1 查看文件内容的几种姿势查看文件看着简单但只看开头、只看结尾、实时跟踪这些场景才是最常用的。功能Linux / Git BashcmdPowerShell全部输出cat a.txttype a.txtGet-Content a.txt/cat分页查看less a.txt/moremore a.txtGet-Content a.txt看前 N 行head -n 20 a.txt无原生用more 0凑合Get-Content a.txt -TotalCount 20看后 N 行tail -n 20 a.txt无原生Get-Content a.txt -Tail 20实时跟踪tail -f app.logtype不支持Get-Content app.log -Wait -Tail 10统计行数wc -l a.txtfind /c /v (Get-Content a.txt).Count这张表里最值钱的是实时跟踪那一行。Linux 上tail -f排查日志是标配很多人以为 Windows 没这功能其实 PowerShell 的Get-Content -Wait -Tail 10完全能替代-Wait会持续监听文件变化-Tail 10先显示最后 10 行效果和tail -f几乎一致。我在排查 Java 服务偶发异常时就是靠它盯日志的同时跑复现脚本。另外wc -l在 cmd 里的替代写法find /c /v 有点反直觉值得解释一下/c是计数/v 表示显示不包含空字符串的行——因为没有任何行不包含空字符串所以结果就是全部行数。这是个经典技巧findstr也是同理。3.2 查找内容与筛选grep 三兄弟及其 Windows 对应物文本检索可能是跨平台差异最有存在感的地方。功能Linux / Git BashcmdPowerShell文件中查找字符串grep keyword a.txtfindstr keyword a.txtSelect-String -Pattern keyword -Path a.txt忽略大小写grep -ifindstr /iSelect-String -CaseSensitive:$false递归查找grep -r k ./srcfindstr /s /i k *.*Get-ChildItem -Recurse只列文件名grep -lfindstr /mSelect-String用正则grep -E abfindstr /rgrep的老用户切到 Windows 会特别怀念管道里随手切、随时配合awk的感觉。这里我说两个缓解不适的实用做法。第一Git Bash 里就有完整的 grep、awk、sed如果你是 Git 用户直接开 Git Bash 写一行grep -rn TODO ./src比在 PowerShell 里拼半天 cmdlet 快得多。第二PowerShell 的Select-String虽然名字拗口但它的输出是MatchInfo对象自带行号、文件名、匹配内容比 grep 的纯文本更好二次加工比如Select-String -Path *.log -Pattern ERROR | Group-Object Filename可以直接按文件分组统计错误数这是 grep 做不到的顺手活。提示cmd 的findstr对正则的支持是类正则用的是它自己的一套方言量词、分组写法和标准正则不完全一致。如果你要写复杂的匹配要么切到 PowerShell要么直接用 Git Bash别在findstr上死磕。另外findstr的中文检索容易受代码页影响遇到明明有却搜不到时先怀疑编码。3.3 管道与输出重定向看似一样细节能坑人重定向的语法两边基本通用覆盖、追加、输入但在 PowerShell 里有个隐藏行为差异它默认按UTF-16 LE写文件PowerShell 5.1而不是 UTF-8。这意味着你用Some-Command out.txt生成的文件拿到 Linux 或某些编辑器里打开可能一堆乱码或空字节。解决办法有几种。可以显式指定编码Get-Content in.txt | Out-File -Encoding utf8 out.txt或者在 PowerShell 7 里已经是 UTF-8无 BOM了。如果还在 5.1我强烈建议用Out-File -Encoding utf8或干脆换成Set-Content -Encoding UTF8。管道连接符|在四种环境里都是通用的但要注意 cmd 里管道传的是文本PowerShell 里传的是对象同一个|背后的机制完全不同。举个直观的例子Get-Process | Where-Object CPU -gt 100在 PowerShell 里是合法的因为CPU是进程对象的属性而在 cmd 里根本没有这种写法。4. 进程、网络与系统信息排查问题的主战场4.1 查进程、杀进程与查看端口占用线上排障、本地杀卡死进程这套命令用得极多。功能Linux / Git BashcmdPowerShell查看进程ps aux/ps -eftasklistGet-Process按名字过滤ps auxgrep javatasklist /fi imagename eq java.exe结束进程按 PIDkill -9 pidtaskkill /PID pid /FStop-Process -Id pid -Force结束进程按名字pkill -f nametaskkill /IM java.exe /FStop-Process -Name java -Force查看端口占用netstat -tulnpnetstat -anoGet-NetTCPConnection -LocalPort 8080查某个端口属于谁lsof -i:8080netstat -anofindstr :8080Windows 上最经典的组合拳是netstat -ano | findstr :端口找到 PID再taskkill /PID pid /F干掉。PowerShell 里更优雅直接Get-NetTCPConnection -LocalPort 8080 | Select-Object -ExpandProperty OwningProcess | ForEach-Object { Get-Process -Id $_ }一步到位拿到进程详情。这两套命令我在排查端口被占用启动失败时天天用建议都收进常用命令本。grep那条要特别说明tasklist的输出带中文表头时用findstr过滤可能因编码对不上而失效这时候改用/fi imagename eq xxx这种内置过滤器更稳。4.2 网络连通性测试与下载ping是两边通用的但它有个经典差异容易迷惑人Linux 的 ping 默认无限发包Windows 默认只发 4 个。所以在 Linux 上ping host要按 CtrlC 停在 Windows 上不用管它自己会停。跨脚本调用时这点要注意别让脚本卡死在等待上。Windows 想让它一直发加-t想指定次数用-n 10Linux 是-c 10。curl现在 Windows 10 以后都自带了语法和 Linux 基本一致curl -X POST -H Content-Type: application/json -d {} http://host/api两边通用这点比以前动不动要装工具好太多。但在 cmd 里有个坑cmd 里curl命令后如果参数带会被当成命令分隔符得用^转义或者直接用 PowerShell。下载文件的话Linux 用wget或curl -OPowerShell 里原生没有 wget 命令wget只是Invoke-WebRequest的别名参数和真正的 wget 完全不同很容易踩坑推荐写法是Invoke-WebRequest -Uri http://xxx/file.zip -OutFile file.zip。这个别名陷阱我必须提醒在 PowerShell 里敲wget -c url会报参数错误因为根本不是同一个东西。4.3 环境变量与系统信息速查功能Linux / Git BashcmdPowerShell查看所有环境变量env/printenvsetGet-ChildItem Env:查看单个变量echo $PATHecho %PATH%$env:PATH临时设置变量export KEYvalueset KEYvalue$env:KEYvalue永久设置变量改~/.bashrc等setx KEY value[Environment]::SetEnvironmentVariable(...)查看系统信息uname -a/cat /etc/os-releasesysteminfo/verGet-ComputerInfo这里要重点说 Windows 的临时 vs 永久差异。cmd 里set KEYvalue只在当前窗口有效关了窗口就没了想永久生效要用setx但setx设置后不会在当前窗口立即生效需要新开一个窗口——这个反直觉的行为是新手最常犯的错改完环境变量发现没生效其实只是没重开终端。PowerShell 里同理$env:KEYvalue是当前会话级永久设置得走[Environment]::SetEnvironmentVariable(KEY,value,User)。另外Get-ComputerInfo虽然信息全但输出很长还慢日常我只用$PSVersionTable查 PowerShell 版本、[System.Environment]::OSVersion查系统版本需要更细的硬件信息才上systeminfo。5. 四个环境的选型、配置与避坑实战5.1 cmd 与 PowerShell 的取舍以及 PowerShell 升级建议很多新手纠结我到底该学 cmd 还是 PowerShell我的结论很直接新项目、新脚本一律用 PowerShellcmd 只在维护老.bat或调用只认 cmd 的老工具时用。cmd 的语法几乎是历史的负担错误处理能力弱、字符串处理原始写稍微复杂一点的逻辑就容易失控。PowerShell 建议直接用 7.x也叫 PowerShell Core。它跨平台在 Linux 和 macOS 上也能跑语法和 5.1 基本兼容但默认编码改成了 UTF-8很多乱码问题不用再手动处理。Windows 自带的是 5.1想升级去官方仓库装 MSI 包或者用包管理器winget install Microsoft.PowerShell即可。装完两个版本会共存命令行里输入pwsh启动的是新版powershell启动的是旧版这点要分清楚。提示5.1 和 7.x 不完全兼容个别只支持 Windows 的模块比如某些 GUI 相关、老 AD 模块在 7.x 里可能加载不了。所以我在自动化脚本里会加一句版本检测或者干脆把关键脚本锁在 5.1 上跑避免版本差异引发玄学 bug。5.2 Git Bash最像 Linux 的 Windows 出口如果你已经装了 Git for Windows那 Git Bash 就在C:\Program Files\Git\bin\bash.exe附近它自带 grep、awk、sed、find、ssh、curl 等一整套 GNU 工具运行.sh脚本体验接近 Linux。安装时有个选项值得注意就是换行符处理策略Checkout Windows-style, commit Unix-style 那几项默认推荐选Checkout as-is, commit as-is配合.gitattributes管理或者保守选core.autocrlftrue具体看团队规范。Git Bash 的三个限制要心里有数它没有真正的 Linux 内核所以chmod、chown对 Windows 文件基本是摆设符号链接也受 Windows 权限约束部分命令如top、ps aux的语义和真实 Linux 有出入访问/根目录是 MSYS 虚拟路径映射到 Git 安装目录不是真的 C 盘——真 C 盘在 Git Bash 里是/c/。我第一次用的时候满世界找/dev/sda其实根本没有。对于需要更真实 Linux 行为的场景WSL2 是更好的选择它跑的是真内核能装完整的发行版软件、跑 Docker、编译原生代码。但它和 Windows 文件系统互访有性能损耗大项目建议放在 WSL 自己的文件系统里而不是/mnt/c。5.3 Windows Terminal把四个壳装进一个窗口Windows Terminal 是我强烈推荐装的一个东西它本身不是命令环境而是一个支持标签页、分屏、主题、可配置快捷键的终端容器可以把 cmd、PowerShell、Git Bash、WSL 都配成 profile一键切换。安装可以直接从应用商店搜或用winget install Microsoft.WindowsTerminal。配置文件是settings.json可以在界面里按 Ctrl逗号打开。我常用的几个配置点把默认 profile 设成 PowerShell 7给每个 profile 单独配图标和启动目录设置copyOnSelect: true选中即复制省下手动 CtrlC绑定分屏快捷键altshiftd一键左右分排查问题时一边看日志一边敲命令特别顺手。注意settings.json是 JSON 格式多一个逗号就会导致整个配置报错而 Terminal 报错时往往只是提示配置有问题不告诉你哪一行。改之前先备份或者用带 JSON 校验的编辑器改。我因为一个尾逗号排查过十分钟教训深刻。5.4 中文乱码跨平台玩家绕不开的一课中文乱码主要出在两个地方编码和代码页。编码层面Windows 传统上默认 GBK/GB2312代码页 936Linux 和现代工具默认 UTF-8。当你的文件是 UTF-8 而终端按 GBK 解释时就是满屏方块或乱码。cmd 和 PowerShell 5.1 里可以用chcp 65001临时把代码页切到 UTF-8但这个命令有个副作用——对某些旧程序可能反而乱码所以别写进全局配置里常驻。真正稳妥的做法我觉得有三条。第一统一所有文件为 UTF-8无 BOM编辑器里设置默认编码就是它。第二PowerShell 里设置$OutputEncoding和[Console]::OutputEncoding为 UTF8[Console]::OutputEncoding [System.Text.Encoding]::UTF8可以解决一部分外部程序的输出乱码。第三用 PowerShell 7它的默认编码已经是 UTF-8很多问题自然消失。还有一个高频场景是从 Linux 复制中文文件到 Windows 解压乱码这通常是压缩工具用了 GBK 解压 UTF-8 命名的文件。解决办法是用支持编码选择的解压工具比如 7-Zip 里可以指定代码页或者在 Git Bash / WSL 里用unzip file.zip -O UTF-8之类的参数处理。6. 常见问题与排查技巧实录6.1 跨平台命令速查表按任务组织前面散着讲了不少这里把最常用的整合成一张遇到就查的表建议直接存书签。我要做什么Linux / Git BashcmdPowerShell找命令在哪which cmdwhere cmdGet-Command cmd看命令帮助man cmd/cmd --helpcmd /?Get-Help cmd -Full环境变量拼接$HOME/dir%USERPROFILE%\dir$env:USERPROFILE\dir命令串联成功才继续a ba ba; b无条件或a -and b命令替换$(cmd)/cmd无原生$(cmd)取上一条命令结果!!F7查看历史Get-History/Invoke-History清屏clear/CtrlLclsClear-Host/cls查找可执行文件路径find / -name xxxwhere /r C:\ xxxGet-ChildItem C:\ -Recurse -Filter xxx命令串联那行值得单独说。Linux 的是前一条成功才执行后一条;是无条件顺序执行cmd 的行为类似。PowerShell 里分号;是无条件顺序执行但它没有直接的语义7.x 里才引入了和||在 5.1 上要实现成功才继续得靠if ($?) { }或者-and组合。跨平台脚本里这块最容易写错我当时从 Bash 无脑搬到 PowerShell 5.1结果逻辑全废排查半天才发现是版本差异。6.2 问题排查速查与避坑清单把高频故障整理成表出问题时按症状对号入座症状可能原因处理办法xxx 不是内部或外部命令该命令在当前环境不存在或 PATH 没配换对应环境的命令检查 PATH用绝对路径脚本报bad interpreter: ^M文件是 CRLF 换行dos2unix file.sh或改编辑器为 LF中文输出乱码编码/代码页不匹配chcp 65001统一 UTF-8用 PS 7改环境变量没生效只改了当前会话新开终端用setx或系统级设置PowerShell 导出文件到 Linux 乱码PS 5.1默认 UTF-16用Out-File -Encoding utf8或换 PS 7端口被占用启动失败有占用进程netstat -anoGit 显示整文件改动换行符或编码被改配.gitattributesgit config core.autocrlfwget在 PowerShell 报参数错别名指向Invoke-WebRequest改用Invoke-WebRequest -OutFile这里挑两个我最想强调的再展开一下。第一个是命令找不到绝大多数不是命令不存在而是 PATH 或环境不对。排查顺序应该是先where/which/Get-Command确认能不能找到找到但版本不对就查 PATH 顺序找不到就说明真没装或者装到了没进 PATH 的目录。养成这个排查顺序比上来就重装快得多。第二个是 PowerShell 输出编码。这个坑极其隐蔽脚本在本地跑看着正常导出的 csv 给到别人用 Excel 打开乱码或者传到 Linux 服务器cat出来一堆带\0的内容。根源就是 5.1 的默认 UTF-16一定要显式指定编码别偷懒。6.3 我自己的实操心得与几条硬建议用这些年我总结了几条比命令本身更值钱的经验分享出来。统一记事与脚本管理。我会在用户目录下建一个bin文件夹放自己写的通用脚本然后把这个目录加进 PATH。这样无论是 cmd、PowerShell 还是 Git Bash常用的封装命令都能直接调用。跨环境脚本我会写成两套.sh给 Git Bash/WSL 用.ps1给 PowerShell 用而不是强行用一套代码去兼容所有环境——那种一套脚本通吃的写法维护成本极高得不偿失。善用命令历史与别名。PowerShell 里可以用Set-Alias给自己常用但冗长的命令起短名或者写函数放进$PROFILE文件实现开机自动加载。Git Bash 则改~/.bashrc加alias llls -alh。这些都是提升长期效率的小投入大回报我强烈建议大家花半小时把自己的 profile 配好。别迷信完全等价。很多命令只是功能相似实际行为有差异比如cp和Copy-Item对符号链接的处理、rm和Remove-Item对只读文件的处理、时间格式、排序规则等。真正的跨平台项目与其找等价命令不如在目标环境里跑一遍测试或者干脆把平台相关部分抽象成脚本封装。最后再分享一个查文档的小技巧。无论在哪cmd /?、Get-Help 命令名 -Examples、man 命令、命令 --help这四招能解决 80% 的参数疑问。比起搜索引擎翻半天直接问命令自己要快得多。Get-Help还能配合-Online参数直接打开官方文档页在 PowerShell 里尤其好用。命令这东西背再多不如动手敲一遍。找一台机器把上面这张对照表里的命令挨个跑一次把报错和差异记下来半天时间的收获会比读十篇文章都大。跨平台这件事痛点从来不是记不住命令而是没意识到两边不一样——只要建立起这个意识剩下的都是查表就能解决的事。
返回列表