两者的差异不只在命令名,而在三个底层模型:Linux 以文本流和 POSIX 权限位为中心,Windows 以对象管道和 ACL 为中心;Linux 的服务由 systemd 管理,Windows 的服务由 SCM 管理;Linux 路径区分大小写并用 /,Windows 默认不区分并用 \。
迁移时先换模型,再换命令。会 ls 不等于会用 dir:dir 在 CMD 里输出文本,在 PowerShell 里却是 Get-ChildItem 的别名,输出的是文件对象。先判断自己在 CMD、PowerShell 还是 WSL 里,再决定用哪套语义。
| 用途 | Linux | Windows |
|---|---|---|
| 列目录 | ls | dir |
| 查看文件 | cat | type |
| 文本过滤 | grep | findstr |
| 查找文件 | find | Get-ChildItem -Recurse |
| 复制 | cp | copy |
| 移动/改名 | mv | move |
| 删除 | rm | del |
| 查找命令 | which | where |
| 进程列表 | ps | tasklist |
| 结束进程 | kill | taskkill |
| 磁盘空间 | df | Get-PSDrive -PSProvider FileSystem |
| 服务管理 | systemctl | sc |
| 日志 | journalctl | Get-WinEvent |
| 定时任务 | crontab | schtasks |
| 地址配置 | ip | ipconfig |
| 端口连接 | ss | netstat |
| DNS 查询 | dig | nslookup |
| 远程登录 | ssh | ssh |
| 权限 | chmod | icacls |
| 属主 | chown | takeown |
| 环境变量 | export | setx |
/,磁盘挂到目录;Windows 用盘符或挂载点指向卷,网络路径用 \\server\share,盘符不是存储本身。/ 分隔并区分大小写;Windows 用 \,NTFS 默认不区分大小写但保留大小写。把 Linux 脚本直接搬到 Windows 时,大小写和分隔符都可能出错。CON、NUL、COM1)和结尾点/空格剥离规则,传统 MAX_PATH 限制仍影响部分程序;Linux 只禁止 / 和 NUL。~ 在 Linux 是家目录,在 Windows PowerShell 里也成立,但 CMD 要用 %USERPROFILE%;脚本中优先用环境变量而不是写死路径。rwx 模式位,目录的 x 决定能否进入;Windows 用 DACL 中的 ACE 表示允许/拒绝,权限沿目录继承,icacls 看到的是最终 ACL。sudo 按规则临时提权。两者都不是“管理员就无条件通过所有检查”。chmod 777 没有 Windows 直接等价物;给 Everyone 完全控制通常更危险,因为还涉及继承和网络共享。services.exe 管理,普通脚本不能直接当服务运行。Stop-Process 或 taskkill /F 则是强制结束,清理机会更少。bash\r: No such file or directory,是 CRLF 被当成命令的一部分;用 dos2unix 或 .gitattributes 统一。Out-File 默认还可能写 UTF-16;PowerShell 7 默认 UTF-8。跨平台脚本统一 UTF-8,并明确 BOM 策略。C:\Program Files 能裸写。Config.PS1 和 config.ps1 在 Windows 可能都能找到,在 Linux 会失败;Git 也要注意大小写变更。SIGTERM 给了程序清理机会,Windows 没有等价信号;Stop-Process 和 taskkill /F 多为强制结束,不能假设会执行 finally 或清理脚本。sudo 不等同于 UAC 提权;提升后的 Windows 进程可能看不到普通会话映射的网络盘,脚本不要依赖用户手动映射的盘符。PATHEXT 和显式扩展名,PowerShell 当前目录通常要写 .\script.ps1;Linux 靠 shebang 和执行位,当前目录要写 ./script。合上页面,先回答,再展开对照。
dir 在 CMD 和 PowerShell 里分别是什么?为什么这会影响脚本迁移?chmod 777 为什么不能直接对应 Windows 的 icacls 授权?bash\r 错误,原因和修复方式是什么?dir 是独立命令并输出文本;PowerShell 的 dir 是 Get-ChildItem 的别名,输出文件对象。迁移时要按所在 shell 重写过滤和输出逻辑。777 没有单一等价物,给 Everyone 完全控制还会影响网络访问和后续继承。\r 当成命令名的一部分;用 dos2unix 或 .gitattributes 转成 LF,并在编辑器里固定换行符。
小程序版
微信扫码,随时查命令