
如果你是一个每天都在 Windows 上写代码、配环境、等 IDE 启动的开发人员最近两年你大概率会在某些时刻动过这样一个念头要不要试试 Linux这个念头通常会在三种场景下冒出来。第一种你在配置 Python 环境时被微软家的 Visual C Redistributable 和 PATH 变量折磨到怀疑人生。第二种你在用 Docker 时发现 Windows 的容器支持和 Linux 容器之间存在某种说不清道不明的隔阂。第三种你的同事已经用上了 Linux他开机的速度、起服务的速度、配环境的流畅度都让你觉得自己的 Windows 像是背着沙袋在跑步。但每次打开搜索框你又会被Linux 新手教程、几百条命令、权限概念、vi 编辑器劝退然后默默把浏览器切回视频网站。这篇文章想给出的判断非常明确**改用 Linux 的真正门槛从来不是命令太难记而是思维没有切换过来。**当你理解了 Linux 的底层逻辑——一切皆文件、软件从源安装、配置就是改文本——你会发现它比 Windows 更适合做开发这件事。而且迈过这个门槛只需要 10 分钟的基础认知剩下的全是熟练度问题。我会先讲清楚这类认知转换再带你走一遍最小可行的迁移路线如何准备环境、如何用最少的命令完成日常操作、如何安装 Python 和 Docker 这类高频开发工具、如何解决 Windows 迁移过来的各种别扭。全文不会让你背命令只会让你理解为什么这样设计理解了设计命令自然就记住了。1. 为什么改用 Linux不再是极客专属话题先把结论放在前面Linux 已经从一个极客玩具变成了云原生时代的默认底座。这不是口号而是真实的技术栈迁移结果。你今天用到的绝大多数后端服务跑在 Linux 服务器上。你日常用的 Docker 容器底层是 Linux 内核特性。你接触到的 Kubernetes 集群、CI/CD 流水线、大模型的推理服务几乎都是 Linux 环境。甚至你手机上运行的 Android底层也是 Linux 内核。这意味着什么意味着如果你只会在 Windows 上操作你迟早会在某个环节遇到它在 Linux 上是这样工作的你在 Windows 上却复制不了的尴尬。从搜索引擎的热词也能看出这种趋势。被搜得最多的 Linux 相关问题早就不是Linux 是什么这种入门级困惑而是具体到linux系统安装python、linux安装docker、linux删除文件夹命令、linux新建用户、windows与linux共享文件这类真实工作中的落地操作。这说明 Linux 已经进入大量开发者的日常工作流大家不是在学习一门新操作系统而是在解决我如何在 Linux 上完成我原本在 Windows 上做的那件事。所以这篇文章不是让你抛弃 Windows的劝退文也不是让你成为命令行高手的精进文。它要解决的是当你真的需要在 Linux 环境下工作时从哪里开始、怎么走最顺、哪些东西可以暂时不学。什么样的读者最适合读这篇文章刚接触 Linux 的开发新人想找一个不劝退的起步路径做后端、云计算、机器学习相关方向的学生或工程师需要在本地模拟服务器环境运维人员和 DevOps 初学者需要在 Linux 上搭软件、跑服务被 Windows 环境折腾到崩溃想试试换个系统生活但一直不敢动手的开发者。如果你是这四类人之一请继续往下读。2. 核心概念先理解 Linux 的操作系统哲学很多人学 Linux 容易陷入误区疯狂记命令以为命令就是 Linux。其实命令只是工具理解 Linux 的几条基本哲学原则你才能在看任何一篇教程的时候知其然也知其所以然。第一条哲学一切皆文件。在 Linux 中普通文件是文件目录是文件硬盘分区是文件设备也是文件。你可能听过/dev/sda代表第一块硬盘/proc/cpuinfo里能读到 CPU 信息这背后的设计思想就是把一切资源的访问统一成打开文件、读文件、写文件这组操作。好处是接口统一你学会用cat读配置文件也就学会了用cat读系统状态。第二条哲学配置就是文本。Windows 的很多配置存在注册表里你需要在图形界面里点很多层才能找到。Linux 绝大部分配置是文本文件放在/etc目录下。改配置就是改文本改完重载服务或者重启进程生效。比如修改 SSH 服务的端口编辑/etc/ssh/sshd_config后执行systemctl restart sshd即可。第三条哲学软件从源安装。Windows 装软件靠下载安装包、点下一步。Linux 主流的发行版都有软件源repository你可以把源理解为一个经过官方或社区维护的应用商店。你只需要执行一条apt install或dnf install命令系统会帮助你下载、安装、配置依赖。这也带来一个重要习惯装软件优先用包管理器而不是去官网下载安装包。第四条哲学权限管理是刚需不是摆设。Windows 的管理员权限经常被滥用Linux 里普通用户和 root 用户严格分离。日常操作不需要 root只有安装系统级软件、修改系统配置时才需要。做日常开发时尽量用普通用户减少因误操作搞坏系统的风险。入门阶段需要对比理解的概念Windows 习惯Linux 对应说明C盘/D盘/根目录、/home、/mntLinux 没有盘符概念目录是一个树路径分隔符\/C:\Users\xx对应/home/xx注册表/etc、~/.config配置保存在文本文件双击 exe 安装apt install 包名从软件源安装我的电脑/资源管理器Nautilus / Dolphin 等文件管理器图形界面同样存在服务管理服务管理器systemctl命令管理系统服务环境变量 PATH同样存在但写在不同配置文件~/.bashrc、/etc/profile这张表不是让你背而是让你在迁移过程中建立映射关系——不要尝试在 Linux 里还原 Windows 的操作方式而是用 Linux 的方式完成同样的事。3. 环境准备与前置条件三条路总有一条适合你真正上手 Linux 前你需要在怎么把 Linux 跑起来这件事上做个选择。不同的人适合不同的路线不用一上来就卸载 Windows。路线一虚拟机零风险强烈推荐新手虚拟机是最适合新手的起点。你在 Windows 里装一个虚拟机软件比如 VirtualBox 或 VMware Workstation Player然后在虚拟机里安装 Linux 系统。缺点是有轻微性能损耗优点是你不影响现有系统玩坏了随时删除重来。环境要求其实很低4GB 以上内存建议 8GB给虚拟机分 2GB15GB 以上可用磁盘空间即可。操作系统建议选择 Ubuntu 桌面版或 Linux Mint这两者的图形界面成熟社区资料丰富。路线二双系统适合打算长期使用的人双系统是指硬盘上同时装 Windows 和 Linux开机时选择进入哪个系统。它的优点是硬件性能完全释放适合后续要做深度学习、嵌入式开发等需要完整算力的场景。缺点是安装有风险一旦分区操作失误可能影响 Windows 引导而且日常切换系统需要重启。如果你走这条路线请务必保证先备份重要数据安装前用磁盘管理工具压缩出至少 50GB 空余空间安装时选择与 Windows 共存或者手动分区时不要乱动已有分区。路线三云服务器 / WSL适合只想跑命令行的人如果你不是想完全切换日常桌面系统只是想在真实 Linux 环境里练习命令、跑服务那可以直接购买一台云服务器各大云厂商都有按量付费的选项远程连接。或者使用 Windows 自带的 WSLWindows Subsystem for Linux不需要装虚拟机就能在 Windows 内体验大部分 Linux 命令行环境。从学习成本和覆盖程度来看其实我更推荐虚拟机或双系统来完成日常桌面体验因为在真实图形界面里用浏览器、装软件、配输入法也是迁移过程中重要的一环。但如果你只关心命令和服务端WSL 已经足够。本文后续操作以 Ubuntu 系为例原因很简单资料多坑少。其他发行版的思路和命令大同小异只是包管理器不同常见的如 CentOS/Fedora 用dnfArch 系用pacman。4. 最小命令集第一个 10 分钟从终端开始很多人被Linux 就在黑乎乎的终端里操作吓住。真实情况是现在的 Linux 桌面系统有完整的图形界面浏览器、文件管理器、文本编辑器全都齐全你在里面办公完全没问题。但作为开发人员和终端打交道是迟早的事而且终端才是体现 Linux 生产力的地方。所以我们要做的第一件事不是学一堆命令而是建立正确的起点打开终端理解当前位置和文件结构这两个最基本的概念。在 Linux 中终端窗口里永远有一个当前工作目录。你敲命令时默认是对当前目录进行操作。判断我在哪用pwd打印当前工作目录列出当前位置的内容用ls切换目录用cd。下面给出一张够用包命令表这其实也是搜索热词里出现频率最高的几个命令。常用命令速查表命令作用示例pwd查看当前所在目录pwdls/ls -la列出当前目录的文件和目录ls -lacd 目录名切换目录cd /etcmkdir 目录名新建目录mkdir projecttouch 文件名新建空文件或更新文件时间戳touch readme.mdcp 源 目标复制文件/目录cp a.txt b.txtmv 源 目标移动或重命名mv a.txt backup/rm 文件名删除文件rm old.logrm -r 目录名递归删除目录rm -r build/cat 文件名查看文件内容cat /etc/os-releaseless 文件名分页查看文件内容less /etc/ssh/sshd_configfind 路径 -name 文件名按文件名查找find / -name nginx.confgrep 关键词 文件名在文件中搜索文本grep root /etc/passwdman 命令查看命令的完整手册man lssudo 命令以管理员权限执行命令sudo apt update这里特别说一下rm -rf这个命令。它是递归删除且不提示的意思是 Linux 世界里最危险也最常用的命令之一。新手第一次用之前必须先理解它不会进回收站删除即永久消失。所有讲 Linux 的教程、面试题里都会反复提醒这一点这不是开玩笑。如果你要删除一个目录建议先用ls看清楚目录内容再执行rm -r并且不要随意在根目录下敲rm -rf /这种命令哪怕是在测试环境。另外一个高频操作是find。搜索热词里 linux find用法、linux find 经常出现说明很多人在需求是我忘了文件放哪了。基本用法是find /path -name 文件名比如# 在当前用户主目录下查找所有 main.py 文件 find ~ -name main.py # 在 /etc 下查找所有以 .conf 结尾的文件 find /etc -name *.conf # 查找大于 100MB 的文件 find / -size 100Mfind配合-name选项最简单实用建议先掌握这一个其余的按需再学。终端的另一个隐藏技能是Tab 键补全输入命令或路径时按一次 Tab终端会自动补全或列出候选内容。这不仅省时还能极大减少你敲错路径的概率。养成敲两三个字母就按 Tab 的习惯你的命令行体验会立刻提升一个档次。Linux 新建用户也是热词补充一个常用场景。很多时候你会在自己的开发机上为同事或服务单独建用户# 创建名为 devuser 的用户并创建主目录 sudo useradd -m -s /bin/bash devuser # 设置密码 sudo passwd devuser # 切换到该用户 su - devuser理解思路useradd负责创建用户-m参数创建主目录/home/devuser-s指定默认的 shell。之后用户管理、权限分配这类问题等基础操作熟练了再深入。5. 搭建开发环境Python、Docker、nginx 一次到位现在进入实践环节。我们通过一组最常见的开发场景来感受Linux 包管理器 配置文本化带来的效率差异。场景一安装 Python 与运行脚本搜索热词里 linux系统安装python、linux运行python脚本 是高频问题。在 Ubuntu 上装 Python 其实很简单。# 更新软件源索引 sudo apt update # 安装 Python3 及 pip sudo apt install -y python3 python3-pip # 验证版本 python3 --version pip3 --version注意Ubuntu 很多发行版自带的系统级 Python 最好不要随便动更不要直接卸载或替换因为系统工具依赖它。开发时需要不同版本推荐用venv或conda创建独立环境。# 为项目创建虚拟环境 python3 -m venv myenv # 激活环境 source myenv/bin/activate # 安装项目依赖 pip install requests # 运行 python 脚本 python3 main.py虚拟环境是 Linux 开发必备习惯。它解决的是这个项目要 A 版本那个项目要 B 版本装一起就打架的问题。场景二安装 Docker 并运行容器搜索热词里 linux安装docker 同样高频。Docker 是目前云原生时代必须掌握的容器工具而 Linux 是它最自然的主场。# 安装必要依赖 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 添加 Docker 官方 GPG 密钥和源 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo deb [archamd64 signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 再次更新源并安装 sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 将当前用户加入 docker 组避免每次敲 sudo sudo usermod -aG docker $USER执行完usermod后需要重新登录才能生效。验证 Docker 是否安装成功# 查看版本 docker --version # 运行 hello-world 测试镜像 docker run hello-worldDocker 安装这块的真实噪音在于不同教程的源信息五花八门而且系统版本不同命令会有差异。如果使用国内网络环境拉取镜像时可以考虑配置镜像加速器具体地址请根据自己所在网络环境查阅官方文档这里不展开。场景三用 systemctl 管理服务Linux 上很多服务都通过systemd管理系统常用命令如下# 查看服务状态 systemctl status nginx # 启动/停止/重启服务 sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx # 设置开机自启 sudo systemctl enable nginx如果你以前在 Windows 上管理过服务比如 IIS 或 SQL Server你会发现这种方式比点击服务管理器更直接、更容易脚本化。这也是 Linux 被运维人员偏爱的原因之一——所有操作都可以沉淀成命令和脚本。场景四安装 nginxNginx 是高频的 Web 服务器软件在 Linux 上安装只需几条命令sudo apt update sudo apt install -y nginx # 查看状态 systemctl status nginx # 修改默认站点配置 sudo vim /etc/nginx/sites-available/default # 重新加载配置 sudo nginx -s reload安装完成后浏览器访问http://localhost就能看到 Nginx 的欢迎页面。遇到问题先看日志/var/log/nginx/error.log。这个思路适用于所有 Linux 服务——服务出问题先看日志文件再看配置文件最后才是重装。6. 文件共享与远程传输解决 Windows 与 Linux 协作的痛点很多人迁移 Linux 不是一个人迁移而是Windows 主力机 Linux 服务器/虚拟机并行。这时候最常用的就是文件共享和远程传输。方式一scp 命令传输文件scpsecure copy基于 SSH 协议可以在本机和远程服务器之间传输文件。# 将本地文件上传到远程服务器 scp ./package.tar.gz user192.168.1.100:/home/user/ # 将远程文件下载到本地 scp user192.168.1.100:/home/user/result.log ./ # 传输目录加 -r 参数 scp -r ./project user192.168.1.100:/home/user/注意三点目标路径末尾有没有/会影响行为传输前保证目标目录有写权限如果 SSH 端口不是默认 22用-P 端口号指定。方式二虚拟机共享文件夹如果你用 VirtualBox 跑 Linux可以在虚拟机设置里添加共享文件夹然后在 Linux 内通过挂载访问。这样 Windows 和 Linux 之间的文件交换就像拖拽一样简单适合日常开发调试。方式三Samba 网络共享如果需要长期、多台机器共享文件可以配置 Samba。这个过程相对繁琐涉及创建共享目录、设置 samba 用户、开放防火墙端口等。建议先用共享文件夹或 scp 解决 80% 的需求确实有需要再引入 Samba。值得注意的是 Windows 生成的文本文件换行符是CRLFLinux 是LF。如果你把一个 Windows 里写的 shell 脚本或 Python 脚本搬运到 Linux 运行可能会报错未预期的文件结尾之类的信息。解决方案是用dos2unix转换或者直接用文本编辑器把换行符改为 LF。这个坑几乎每个从 Windows 迁过来的人都会踩一次。7. 常见问题与排查思路迁移过程中你一定会遇到一些典型问题这里整理成一张排查表供你收藏。问题现象可能原因排查方式解决方案安装软件提示Unable to locate package软件源没有更新或者包名不存在先执行sudo apt update再确认包名更新源后重试包名可通过apt search 关键词查找提示Permission denied当前用户无权操作该文件或目录用ls -l查看文件权限需要管理员权限时用sudo开发启动服务时尽量用普通用户使用rm删除目录提示cannot remove目录非空或没有写权限用ls -la查看目录内容和权限用rm -r递归删除如果权限不足先检查父目录写权限运行 Python 脚本提示找不到模块模块安装在另一个环境里pip list查看当前环境模块which python确认解释器路径激活对应的虚拟环境后再运行虚拟机磁盘空间不足初始磁盘分配过小df -h查看磁盘使用量用虚拟机工具扩容磁盘或在安装时就分配足够空间Windows 编辑的脚本运行报奇数行错误换行符是 CRLF用file 脚本名查看文件类型使用dos2unix 脚本名转换登录系统进不了图形界面显卡驱动或桌面环境异常切换到 TTY 终端查看日志按 CtrlAltF2 进入命令行模式排错重装桌面环境或显卡驱动前先备份数据中文输入法无法使用输入法框架未正确配置查看系统设置中的输入法状态Ubuntu 一般在设置-键盘-输入源里添加中文拼音登录注销后生效端口被占用已有服务监听了该端口sudo lsof -i:端口号查看改服务端口或停掉旧进程确认是否要保留该服务排查时的通用顺序建议是先看错误日志再看配置最后才考虑重装。这和你调试代码的逻辑是一样的不要一上来就重来一遍。8. 最佳实践与工程建议从能用到好用中间有一段必经之路。以下是几条能帮你平稳过渡的工程建议。第一不要把学习 Linux 变成攒命令。不要拿着命令大全去背那样三天就会忘光。更好的方式是带着一个真实任务去用比如把我的 Django 项目部署到这台 Linux 机器上在过程中遇到问题、搜索命令、理解参数。每解决一个问题能力就真正提升一点。第二刚开始不要急着卸载 Windows。双系统或虚拟机阶段保留 Windows 作为兜底方案。给自己设置一个两周强制期这两周里所有开发相关事情都在 Linux 上完成哪怕慢一点也别切回 Windows。两周后你会惊讶地发现常用场景下的效率已经接近某些场景甚至超过 Windows。第三养成备份先行的习惯。在 Linux 上操作系统的完整权限意味着更大的破坏能力。安装系统、调整分区、删大文件前先想清楚可不可以回滚。有条件的话重要数据用外部备份或云盘同步。第四理解权限的最小化原则。不要整天用 root 用户操作。日常开发用普通用户需要安装系统级软件时用sudo。这样即使操作失误影响范围也相对可控。第五善用文档和日志。Linux 的世界里遇到问题第一反应是查日志——journalctl看系统日志/var/log下按应用查看日志。第二反应是搜索。几乎所有你已经遇到的问题都有人在社区里留下了解法。第六坚持在虚拟环境中管理语言环境。Python 用venvNode.js 用nvm数据库用容器化或独立用户管理。不要图省事直接往系统 Python 里塞包。这条建议能避免无数环境冲突。第七没事多看看服务的配置文件。你在配置 Nginx 时看到的结构化配置、在设置 SSH 时看到的注释都会帮你理解原来服务是这么工作的。这和看源码一样是进阶的免费教材。9. 总结与后续学习方向现在总结一下你在这篇文章里真正获得的并不是某个命令的背记而是一套迁移路径和思维方式Linux 不是另一个 Windows而是一套以一切皆文件、配置即文本、包管理安装、权限严格分离为核心的系统。入门的关键是先掌握终端的基本操作逻辑然后带着真实任务逐步展开装 Python、跑 Docker、配 Nginx、解决文件共享。这个流程走通了你就已经完成了从 Windows 用户到 Linux 用户最关键的一跃。下次看到搜索框里的热门词——linux常用命令大全、linux安装docker、linux新建用户、linux find用法——你不再需要收藏一堆面条文而是能判断这段命令属于哪个场景、为什么要这样写、如果出问题该去哪里查。这种能力才是 Linux 真正带给你的东西。如果你已经准备好给 Linux 一个机会我的建议是从虚拟机里装一个 Ubuntu 桌面版开始给自己两周时间把它当成主力开发环境去用。过程中遇到问题优先看日志其次搜索再次尝试自行解决。10 分钟可以让你理解这件事并不难两周可以让你真正离不开它。祝迁移顺利。