平时写代码、部署项目或者折腾服务器时,经常会同时接触 Windows 和 Linux。
虽然两边很多操作逻辑类似,但命令风格、目录结构、系统习惯其实差别挺大。刚开始切换环境的时候,经常会出现“这个命令怎么不能用”的情况。
这篇文章就把 Windows和 Linux里常见的命令差异整理一下,尽量用比较容易理解的方式说明。
一、终端环境的区别
Windows 和 Linux 最大的差别,其实是默认终端环境不同。
| 对比项 | Windows | Linux |
|---|---|---|
| 默认终端 | CMD、PowerShell | Bash、Zsh |
| 大小写是否敏感 | 一般不敏感 | 敏感 |
| 路径写法 | \ | / |
| 是否有盘符 | 有(C盘、D盘) | 没有,统一从 / 开始 |
| 脚本格式 | .bat、.ps1 | .sh 或无后缀 |
比如在 Windows 里:
cd D:\blog |
而 Linux 一般是:
cd /home/user/blog |
另外,Linux 对大小写是严格区分的。
README.md |
在 Linux 里,这两个会被认为是不同文件。
二、文件和目录操作
日常最常用的基本就是文件操作,两边命令其实能一一对应。
| 功能 | Windows(CMD) | Linux(Bash) |
|---|---|---|
| 查看文件 | dir | ls -la |
| 进入目录 | cd | cd |
| 当前目录 | cd | pwd |
| 创建文件夹 | mkdir | mkdir -p |
| 删除文件 | del | rm |
| 删除目录 | rmdir /S | rm -rf |
| 复制文件 | copy | cp |
| 移动文件 | move | mv |
| 查看文件内容 | type | cat |
| 清屏 | cls | clear |
例如删除一个目录:
Windows:
rmdir /S test |
Linux:
rm -rf test |
很多人刚接触 Linux 时,最容易记混的就是 rm -rf。
这个命令删除后一般不会进回收站,所以执行之前最好确认一下路径。
三、文本处理
Linux 在文本处理这方面会更强一些,尤其适合日志分析、批量处理文件。
| 功能 | Windows | Linux | ||
|---|---|---|---|---|
| 查找内容 | findstr | grep | ||
| 排序 | sort | sort | ||
| 统计行数 | find /V /C "" | wc -l | ||
| 重定向 | >、>> | >、>> | ||
| 管道 | ` | ` | ` | ` |
比如查找日志里的 error:
Windows:
findstr error log.txt |
Linux:
grep error log.txt |
如果只是简单使用,其实差距不大。
但 Linux 的命令组合能力会更强,很多复杂操作都能直接在终端完成。
四、网络相关命令
做开发或者运维时,经常需要查看 IP、测试网络或者检查端口。
| 功能 | Windows | Linux |
|---|---|---|
| 查看网络配置 | ipconfig | ip addr |
| 测试网络 | ping | ping |
| 路由追踪 | tracert | traceroute |
| DNS 查询 | nslookup | dig / nslookup |
| 查看端口 | netstat -ano | ss -tlnp |
| 下载文件 | curl | curl / wget |
| SSH 连接 | ssh | ssh |
查看本机 IP:
Windows:
ipconfig |
Linux:
ip addr |
现在 Windows 其实也逐渐开始内置很多 Linux 常用工具了,比如 curl 和 ssh。
五、进程和服务管理
系统管理时,经常会用到查看进程、结束进程这些操作。
| 功能 | Windows | Linux |
|---|---|---|
| 查看进程 | tasklist | ps aux |
| 结束进程 | taskkill | kill |
| 强制结束 | taskkill /F | kill -9 |
| 查看服务 | sc query | systemctl list-units |
| 启动服务 | net start | systemctl start |
| 停止服务 | net stop | systemctl stop |
比如结束一个进程:
Windows:
taskkill /PID 1234 /F |
Linux:
kill -9 1234 |
Linux 里很多服务管理都会通过 systemctl 完成,这也是现代 Linux 比较常见的方式。
六、系统信息查看
想看磁盘、内存或者系统版本时,两边也有不同命令。
| 功能 | Windows | Linux |
|---|---|---|
| 系统信息 | systeminfo | uname -a |
| 磁盘空间 | wmic logicaldisk | df -h |
| 文件夹大小 | dir /S | du -sh |
| 内存信息 | wmic memorychip | free -h |
| 当前用户 | whoami | whoami |
Linux 下比较常见的一个命令是:
df -h |
可以直接查看磁盘使用情况,而且会自动转换为更容易阅读的单位。
七、环境变量
环境变量也是开发环境里很常见的一部分,比如配置 Java、Node 或 Python。
| 操作 | Windows | Linux |
|---|---|---|
| 查看全部变量 | set | env |
| 查看 PATH | echo %PATH% | echo $PATH |
| 设置变量 | set VAR=value | export VAR=value |
| 删除变量 | set VAR= | unset VAR |
例如:
Linux:
export JAVA_HOME=/usr/local/java |
Windows:
set JAVA_HOME=C:\Java |
不过 Windows 里很多时候还是会直接在“系统环境变量”界面里配置。
八、脚本语法差异
Windows 和 Linux 的脚本语法区别还是比较明显的。
Windows 批处理:
@echo off |
Linux Shell:
#!/bin/bash |
几个比较明显的区别:
| 功能 | Windows | Linux |
|---|---|---|
| 变量引用 | %VAR% | $VAR |
| 注释 | REM 或 :: | # |
| 条件判断 | if | if [ ] |
| 循环 | for %%i | for i in |
整体来说,Linux Shell 的灵活度会更高一些。
九、几个容易踩坑的地方
1. 路径分隔符
Windows 用的是:
\ |
Linux 用的是:
/ |
虽然现在很多 Windows 工具也兼容 /,但最好还是按系统习惯写。
2. 空格路径
路径带空格时,两边都容易出问题。
Windows:
cd "C:\Program Files" |
Linux:
cd /home/user/My\ Files |
3. 换行符不同
Windows 默认是:
CRLF |
Linux 默认是:
LF |
所以有时候脚本在 Windows 能运行,放到 Linux 就会报错。
Git 一般可以通过下面这个配置自动处理:
git config --global core.autocrlf true |
十、最后总结
如果只是日常使用,其实 Windows 和 Linux 的很多命令都能找到对应关系。
但 Linux 更偏向命令组合和自动化处理,而 Windows 更偏向图形化和系统集成。
刚开始不用强行死记,多用几次以后,自然就会形成习惯。