☰
如何入门你的电脑——从编程的角度出发
2026/9/30 6:16:09 网站建设 项目流程

这是一篇面向有编程需求的电脑入门攻略,会涉及到很多略微复杂、偏底层的概念,需要读者认真理解——但是等你理解完了这些内容,一定会让你对手上的电脑、开发环境的理解有显著的提升!

文章会从操作系统与命令行入手,依次讲到文件格式、可执行文件、IDE 的运行原理,再到软件的安装与卸载——前面的每一节都在为后面的内容做铺垫,建议按顺序阅读。如果你是第一次接触这些概念,不必试图一次记住所有细节:遇到暂时没读懂的地方可以跳过去继续读,后面的例子往往会把前面的坑重新填上。

关于操作系统

操作系统(Operating System, OS),是控制电脑硬件进行正确的资源调度、任务控制的软件——你的 CPU、内存、硬盘、显卡、网卡、USB 等等硬件就是依靠操作系统进行协同工作的。

不得不介绍的 Linux

在成为开发者之前,作为广大用户的一员,Windows,Android,macOS,iOS 等常见的 OS 大家肯定是耳熟能详——

而 Linux 是电子信息类学生常见的另一种系统,其重要的特点包括轻量化、可裁剪、权限层次清晰、网络管理方便、运行稳定、命令化/脚本化深入、开源社区完善、硬件交互简洁。因此,有海量的交叉编译工具链建立于 Linux 环境,有许多自动化脚本工作于 Linux 命令行中,还有数不胜数的嵌入式系统基于 Linux 开发。

Android 的底层就是 Linux 内核。

智能车大赛的若干赛道就是使用基于 Linux 的板卡开发的。近年来兴起的大量 AI 开发工具在 Linux 环境下的自动化支持也更完善,进一步巩固了 Linux 在开发领域的地位。

什么是命令行?

命令行是一个非常容易被初学者忽略,但是又十分重要的交互方式,在我们探索电子信息世界的过程中如影随形。

从何谈起呢?我们举个例子:

如果你想要在桌面创建一个文件夹,然后新建一个文件,写入一串数字,你可以右键新建文件夹,创建文本文档,用记事本打开,编辑,当然你也可以这么做:

下面的举例有很多不一定需要掌握的代码,以及没那么快解释清楚的概念,感受即可

  • 在 Windows 系统下,打开 PowerShell 终端,输入命令:

    cd"$HOME\Desktop"mkdir demo cd demo"123456"> number.txt
  • 或者,启动 cmd,输入命令:

    cd/d"%USERPROFILE%\Desktop"mkdirdemocddemoecho123456>number.txt
  • 当然,如果你在 Linux 系统下,这些命令就更加广为人知:

    cd~/Desktopmkdirdemocddemoecho123456>number.txt

感受到了吗?下面给几个重要的概念:

  • 命令行交互(CLI, Command-Line Interface)是通过输入文本命令来操作系统、执行任务的人机交互方式;

  • 命令行解释程序,用于将用户输入的命令转化为系统的操作,包括 Windows 的 PowerShell、cmd 以及 Linux 的 shell,其语法和功能各有差异;

  • 终端(Terminal)是执行 CLI 的窗口。cmd 弹出的黑框,IDE 中的集成式命令行面板,都是终端。

shell 是一类程序的总称,bash/zsh 都是具体 shell。

与命令行交互相对的概念就是图形界面交互(GUI, Graphical User Interface),它容易上手,但是难以批量操作,无法实现复杂的设置——作为开发者,明确地知晓 CLI 的存在,能够对很多东西有更加深入的理解。

在电脑上跑 Linux 环境的几种方案

这里仅做简单介绍,Linux 环境在有需求的时候配置即可,想要进一步了解的自己去查资料。

  1. 双系统:在电脑上同时安装 Windows 和 Linux 操作系统,开机选择进入。性能最好,但切换要重启,且数据互通较为麻烦。

  2. 虚拟机(Virtual Machine):用 VMware 等软件在 Windows 里“装一台 Linux 电脑”。可以随时开关、随手重装,容错率高,但是性能受限。

  3. WSL2(Windows Subsystem for Linux):Windows 官方提供的 Linux 运行环境,轻量、启动快、和 VS Code 等工具配合极好。适合日常学习命令行和程序开发,但硬件访问能力相对较弱。

  4. MSYS2:一套 Linux 风格的工具集,跑在 Windows 上,能够在 Windows 上提供 Linux Shell 的命令行解释程序,并且快速管理某些复杂的依赖。不同于以上三者,他不是真正的 Linux 系统,只是在 Windows 上提供了一个 Linux 风格的开发环境。Git Bash 是在 MSYS2 上再次裁剪而来的。

  5. 远程登录:当然,你也可以选择不在自己电脑上装 Linux,而是直接用 SSH 连接开发板或服务器上的 Linux 系统。

笔者曾经在 Android Pad 上用 Termux 搭建过 Linux 桌面工作环境,有兴趣瞎搞的同学可以看看我当时写的攻略。

文件与文件系统

一块硬盘,如何进行快速的索引?本质上,你可以靠地址来寻找任意一个区域的数据,但是这显然很麻烦,于是文件系统就诞生了。

文件、路径(文件夹)与压缩包

要认识文件系统,先从两个基本的元素——文件与路径讲起。

文件

文件,就是一段有名字、有组织的数据。你写好的实验报告、录下的语音、下载的安装包,在计算机底层都是一串串字节。这些字节可能散落在硬盘的各个角落,但文件系统把它们组织成一个整体,并给你提供一个按名字访问的入口,在有需要时负责找到数据、读出内容或写入新内容。

文件最重要的属性就是文件名,比如“新建文本文件.txt”。其他的属性(元数据)还有占用的空间、权限、类型、修改时间等等。文件的类型也是个重点,后面再说,这里希望读者能够明确文件作为一个“实体”的基本概念。

文件夹与路径

硬盘里存着成千上万个文件,怎么管?答案是分门别类:把用途相关的文件放进同一个文件夹,文件夹里再建子文件夹,层层嵌套,最终形成一棵目录树。文件夹也叫目录(directory),是目录树上的节点;路径是用来描述“从根或当前位置走到某个目录/文件”的一串字符。

如果你有留意前面的 CLI 代码,就会发现,三种解释器的“新建文件夹”指令都是mkdir,即 make directory——目录树里的“目录”对应我们更容易理解的“文件夹”。

路径分为绝对路径和相对路径两种,绝对路径是从根目录开始进行索引,比如 Windows 的根目录从C盘、D盘根目录开始一步步索引,比如C:\Users\felix\Desktop,Linux 从根目录开始就是/home/felix/Desktop。

相对路径则是以当前的工作目录为起点,进行索引,比如上文的桌面,如果当前工作目录是C:\Users\felix,那么.\Desktop就是相对路径;如果要从当前目录跳到上一级再进入别处,就得用..\lihua这种写法。

在 Windows 下,路径用\分割,在 Linux 下,路径用/分割。一般来说,所有的进程都有一个自己的“工作区”,即工作目录。在写代码或敲命令时,可以用相对路径直接访问工作目录下的文件,不用每次都输入长长的绝对路径。

这里强烈推荐两个 Windows 软件,一个是 Everything,能够光速检索全盘文件,另一个是 SpaceSniffer,能够直观地展示各个路径的大小分布,便于管理。

压缩包

Windows 11 的文件管理器内置了简单的压缩包预览、访问、解压,导致大家并没有对压缩包引起必要的重视——压缩包是一种极其特殊的文件,值得拿出来单独讲解。

压缩包能够以单个文件的形式,打包保存若干文件与相对路径,并且通常会对内部数据进行无损压缩,消除冗余信息,从而减小体积。

如果一个文件的信息熵较低,说明里面有许多可预测的重复模式,就可以用更短的编码表示同样的信息,从而实现体积减小。在后续的《数字图像处理》课程中会涉及到相关的知识点。

Win11 的文件管理器,对压缩的功能支持极其有限,跨平台、多种类的压缩文件解析,以及压缩选项支持都不如专业的压缩文件管理器,因此装机必要的一步就是安装专业的压缩文件管理器。界面最干净、功能也十分齐全,还支持 CLI 的传世经典就是 7-Zip,现在还有个基于 7-Zip 为 Win11 适配开发的 NanaZip,界面与交互会更流畅一些。

关于压缩包,有两点“常识”,需要在应用的过程中注意:

  • 在压缩文件中“打开”一个文件,本质上是把这个文件解压到系统的暂存目录,然后再打开。因此,实际上你只能对这个压缩包中的文件进行“读”操作,无法进行“写”操作,需要将这个文件提取到自己所需的路径下才能进行编辑、保存。

  • 上文提到,压缩包能够保存相对路径,很多可执行文件也需要依赖工作目录之下的其他文件才能正常工作。结合上一点可知,在未解压完整压缩包的状态下,打开一个可执行文件,只会把这个可执行文件本体提取出来,缺少了工作目录下的其他文件,无法正常运行是大概率的事情,因此要执行压缩包中的可执行文件时,应该先把整个压缩包解压出来。

比如你直接在压缩包里双击打开一个 Word 文档,编辑后想保存,系统会提示你“另存为”——因为这个 Word 文档其实只是临时解压出来的影子副本,你无法把它写回压缩包内部。

日常工作中,我们的工程有目录结构,文件可能需要一次传输很多个,有些数据需要归档,还有些文件本身的编码优化不足,这时候就是压缩包派上用场的时候,选定一个文件夹或者多个文件(文件夹),右键,添加到压缩文件,就可以创建你的压缩包了。还有很多有意思的玩法,比如分卷压缩,加密压缩,都可以等待大家来探索!

文件的类型

文件扩展名

在看这一部分之前,请大家打开你的文件管理器,勾选上查看-显示-文件扩展名。

然后,我们来观察一下,一个文件名称的组成:

新建文本文档.txt 新建 Microsoft Word 文档.docx 新建压缩文件夹.zip HelloWorld.cpp Photo.jpg

如果你重命名一个文件,你会发现,.xxx的部分并不会自动选中,而且你要是修改了这部分文件名,还会被系统弹窗警告——这就是一个文件的扩展名。

然后,再试试看,把一个文件的扩展名从.docx的改成.jpg,然后双击打开,你会发现,图片查看器无法正确打开这个文件,但是,如果你把这个文件右键强制用 Word 打开,你会发现,文件又被正确解码打开了。

这是一个很简单的对比实验,但是已经能让我们对文件扩展名有最直观的认识了——一个文件的扩展名,会让电脑决定应该默认用什么软件打开、解码。相对地,修改扩展名并不会改变文件内部的数据。

文本文件

接下来,我们继续观察。找到几个扩展名为.py,.c,.h,.html,.md的文件,用记事本打开,你会发现,记事本可以完整地展示出这个文件里面的所有文本。这就是文本文件,文件始终只按顺序保存其中的每个字符。

事实上,几乎所有编程语言的源代码都是文本文件。你编写的.py、.c、.cpp、.html,本质上和“新建文本文档.txt”没有任何区别,里面存的就是一串字符。

当然,文本文件之间亦有差异,最常见的是换行符和编码。

Windows 的换行符是\r\n,而 Linux 和现代 macOS 都用\n。

如果你看到文本文件里中文字符变成了乱码,那就是编码不匹配的问题。常见编码有 GBK/GB2312(中国国标)和 UTF-8(国际通用),写代码建议统一使用 UTF-8,想深入了解的自己去查资料。

如果你用 VSCode,Notepad++,Vim 这类通用的代码编辑器任意打开一个源代码文件,就会发现,这些代码编辑器能够根据文件扩展名,加载对应的语法高亮规则,用颜色把代码结构直观地呈现出来。

你可以试一试:把一个.c文件复制一份,改成.txt后缀,再用 VSCode 打开,这时候就不会有语法高亮了,因为编辑器已经不认识它“本来”是什么语言。这又一次说明:扩展名只是一个外部标签,重要的是大家约定好怎么解释它。

二进制文件

如果想要继续用记事本打开.docx,.pptx,.jpg,.exe,.zip,.mp3,你会发现记事本显示的是一堆乱码——因为这些文件的内容不是按照文本编码规则组织的,而是按照各自的文件格式进行二进制编码,必须由对应的程序来解析。

文本文件里的字符,最终也是以二进制字节存储的。但这些字节必须符合文本编码规则(如 ASCII、UTF-8、GBK)。所有可能的字节组合远不止文本编码这一小部分,遇到不符合文本编码规则的字节序列,记事本就只能显示乱码。

如果你用压缩文件管理器打开二进制文件,比如.exe、.docx,会发现它们可以被解析出内部结构。这并不是巧合——不少二进制文件格式内部是有结构的。例如.docx本身就是个 ZIP 容器,打开后能看到 XML、图片等资源;.exe也有自己严格的组织规范(如 PE 格式),由多个节区组成。

怎么启动一个可执行文件?

什么是可执行文件?

首先明确可执行文件(executable)的定义。顾名思义,可执行文件能够直接被操作系统加载并运行,而不需要再借助其他的软件进行解析。

可执行文件中直接包含 CPU 指令。启动时,操作系统负责为它分配内存空间、加载依赖的动态库,然后把 CPU 的控制权交到它的入口点,此时这个程序就从静态的文件变成了运行中的进程。

在 Windows 下,可执行文件的扩展名是.exe,在 Linux 下,可执行文件不强制依赖扩展名,只要文件格式符合要求,且有执行权限,就能直接被执行。

可执行文件无处不在:我们使用的浏览器、Office、电脑游戏,自己编译的 Hello World,以及写出 Hello World 的开发环境,本质上都是可执行文件。可以说,每一个正在运行的进程,都来源于某个可执行文件。

到了这里,我们可以再看一看“编译”到底是什么意思——编译就是把源代码转化成可执行文件,也可以理解为,把人看得懂的东西,转化成 CPU 能看懂的指令。

可执行文件的启动要素

好了,现在你已经知道了可执行文件是什么了,现在你手上有一个.exe文件,让这个可执行文件跑起来,有三个关键的要素:

  1. 动态链接库:动态链接库是可执行文件外部的“现成的指令”,程序在运行时才将其加载进来使用,如果缺少了依赖的动态链接库,程序就无法启动。程序运行时,系统会去可执行文件所在目录和系统目录中寻找它们。Windows 的动态链接库是.dll文件,Linux 的动态链接库是.so文件;

  2. 启动参数:可执行文件在启动的时候,还可以传入一些参数,以决定程序如何运行。传入参数的方式下文会介绍;

  3. 工作目录:工作目录是进程解析相对路径时的基准目录。它并不一定等于可执行文件所在的路径。从不同目录启动同一个程序,程序读写相对路径文件时的参照点就不同。

你可能对启动参数、工作目录没什么直观的感受——没关系,这些都是铺垫,接下来我们将把这些东西全部串起来。

可执行文件的启动方法

先从简单的讲起。打个比方,如果你想卸载 QQ,右键桌面快捷方式,打开文件所在位置,找到Uninstall.exe,双击启动,卸载成功——这就是最基本的可执行文件启动方法,在文件管理器中直接双击即可——

在文件管理器中双击启动可执行文件,启动参数为空,工作目录为文件所在目录。

Windows 的可执行文件快捷方式,可以手动设置工作目录。

接下来是最最最重要的,也可以说,就是为了讲这个东西而写的这篇文章,前面铺垫了这么多的常识和概念也是为了把这个东西讲清楚:命令行启动可执行文件。

我们给一个最常见的情景。现在假设,你已经配置好了你的 C 语言编译器gcc.exe,然后在一个.c源文件所在文件夹下打开了终端——

首先,终端的光标前面应该已经展现出了一串路径:

D:\demo>

我们输入编译指令:

D:\demo>gcc hello.c-ohello.exe

然后,不出意外,你的源文件就被编译成了可执行文件。

发现了吗?这就是一个三要素齐全的可执行文件启动过程。如果你观察过gcc.exe所在的目录,就会看到很多.dll文件,这是动态链接库;命令行光标前面的路径,就是我们启动的可执行文件的工作目录;gcc 后面的hello.c,-o,hello.exe,这三个都是编译器的启动参数。这就是命令行启动的过程。

还是有点懵?我们再讲一点细节:

可执行文件的索引规则

  1. 在工作目录下直接用相对路径索引,或者就直接用绝对路径索引。注意,.exe文件的后缀在命令行中可以省略。比如,你刚才编译了hello.exe,就可以接着命令行启动:

    D:\demo>.\hello D:\demo>D:\demo\hello.exe
  2. 你一定会发现,刚才的 gcc 既不在我们的工作目录下,也没有用绝对路径来索引,为什么能被命令行索引到?这是因为,有一个系统变量叫做PATH,在命令行启动可执行文件的时候,命令行解释器会去PATH变量记录的路径下依次检索文件。因此,当你的gcc.exe所在的目录被记录在了PATH变量中,你就可以在任意的工作目录下直接启动gcc.exe。

拓展一下,脚本文件,也就是保存着 shell 指令的文件,比如 Windows 下的.bat,.ps1,.cmd文件,Linux 下的.sh文件,也是可以忽略后缀,直接被检索执行的。

可执行文件的启动参数

我们来假设一个场景,我实现了一个my_cat.exe程序,把所有接收到的启动参数全部拼起来并且输出。

那么,这个命令行的运行结果会是什么样的呢?

.\my_cat a b"c d e "fgh

答案是:

.\my_catabc d e fgh

命令行参数会直接被可执行文件读取,并且按照一定的规则进行解析,参与可执行文件运行的过程。依旧有几个常见的场景和细节需要讲解:

  1. 理论上,调用可执行文件本身的字符串,也算是启动参数,比如上例中的.\my_cat,算是第一个启动参数,在 C 语言中,这个参数保存在argv[0];

  2. 一般来说,有 CLI 功能的软件都会给出使用说明,很多情况下使用单个--help参数就可以查看使用方法与帮助,比如:

    gcc--help
  3. 参数是按照用空格来间隔的,如果你的参数带有空格,需要在这个参数外面加上双引号,上例已经展示过了;

  4. 约定俗成,很多软件的命令行会用-x表示某些带有参数的选项,比如-o hello.exe表示输出文件为hello.exe,--x表示某些不需要额外参数的选项,比如--help。

你的IDE是怎么跑起来的?

介绍完上面的内容,我们就可以进一步理解,你手上的 IDE(集成开发环境,Integrated Development Environment)是怎么运行起来的了。

举个例子。假设你有一个 C 语言源文件,然后你希望你的编辑器能够一键启动编译,编译完成后,启动编译出来的可执行文件,你要怎么做?

  • 首先,你需要确定编译器gcc.exe的路径,你可以把编译器的路径放进PATH然后直接gcc,也可以手动指定编译器的绝对路径;

  • 其次,你要指定编译器的编译选项,比如,加上-g表示保留调试接口,-O1进行一级编译优化,等等。如果你用的是交叉编译器还会有更多有必要的编译选项;

  • 然后,你要指定编译的输入和输出,比如你需要输入编译器目前打开着的源文件;输出的可执行文件,直接把源文件的后缀改成.exe,然后输出到.\output文件夹下;

  • 最终,你要启动你的可执行文件,还可以考虑给你写好的程序传入启动参数——

恭喜你,你已经理解了 VSCode 怎么配置了。来看看 VSCode 的配置文件是怎么写的:

{"tasks":[{"type":"cppbuild","label":"C/C++: g++.exe 生成活动文件","command":"D:\\Users\\For_VSCode\\MinGW\\bin\\g++.exe","args":["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\output\\${fileBasenameNoExtension}.exe"],"options":{"cwd":"${fileDirname}"},"problemMatcher":["$gcc"],"group":{"kind":"build","isDefault":true},"detail":"调试器生成的任务。"}],"version":"2.0.0"}

这个tasks.json写的是编译指令,command标注了编译器路径,args写了编译参数,cwd是 Current Working Directory 即为工作路径,problemMatcher是读取gcc报错信息的方式,${fileDirname}指的是文件路径,${fileBasenameNoExtension}指的是不包含扩展名的文件名部分……

当然,编译的指令远没有这么简单,编译过程也不仅仅依赖于编译器。C/C++,Qt 等工程可以用 Makefile,CMake 这类工具简化配置,Python 可以用 Anaconda 等方式配置虚拟环境等等。

对于一种 IDE,开发环境的轻量化、开放化,也意味着你需要进行更多的配置,比如 VSCode,你要自己安装 MinGW,CMake,Python,TexLive 等基础的工具链,然后再安装插件进行配置;而开发环境的集成化,比如 Visual Studio,MATLAB,会减少配置的过程,但是开放性、灵活性也受限。

由于编译的过程复杂而灵活,因此编译器的命令行启动是必然的结果,而 IDE 的重要功能就包括了语法高亮、自动补全、报错展示、快速启动编译、可视化调试,其中,快速启动编译、报错展示、可视化调试就与命令行交互息息相关。了解命令行交互的基本逻辑,有助于理解 IDE 的运行原理,从而更好地理解配置的过程。

你真的懂“软件”吗?

便携版与安装版软件

在上面海量的基础概念灌输后,这些衍生的概念就很容易理解了。一般来说,我们使用的软件都是用可执行文件启动的。在常见的软件获取渠道下,我们会接触到两种软件的部署形式——便携版与安装版

便携版软件的可执行文件,以及它运行所需的一切(动态链接库、数据文件等)都放在同一个目录下,不向系统其他路径写入任何东西。有的便携版甚至真的只有单个可执行文件。它开箱即用,但更新时通常需要整体替换文件。常见的便携版以小体量工具居多,比如 vofa+ ,Everything,胜在便于拷贝携带。

相对地,安装版软件由特定安装包进行部署。他们会把程序本体放到指定路径,把公共组件放进系统库目录,同时改写系统信息——比如创建桌面/开始菜单快捷方式、修改注册表、把可执行文件目录写入 PATH、登记卸载入口等等。安装版软件与系统深度配合,能够进行增量升级,因此需要与系统持续深度绑定的软件,多采用安装版部署。

安装软件的一些体会

来点经验——

  • 下载软件的时候尽量从官网下载。在第三方渠道下载的时候一定要小心类似于“安全下载”之类的选项,也要小心下载页里那些高亮的假下载按钮,很可能会有捆绑;

  • 如果你的电脑分出了多个分卷(C盘,D盘等),尽量把软件本体安装在容量大的非系统盘上,打开安装包的时候就要认真找一找安装路径的选项;

  • 安装包还有很多陷阱,类似于开机自启动、捆绑安装、右键菜单,一定要看清楚窗口里面的每个选项

  • 尽量将软件安装在固定的文件夹下,方便管理。另外,安装路径绝对不能出现中文,也最好不要出现空格;

  • 开发工具安装时,注意有没有Add To PATH之类的选项——如果有,一般建议勾选上;如果安装包没有提供这个选项,而你又希望能在命令行里直接启动它,就需要自己去系统环境变量设置里,手动把它的所在目录加进PATH;

  • 很多软件会偷偷在系统盘(C盘)占很多空间,你需要在各个软件的设置中找到类似于缓存、暂存、数据存储、下载路径之类的选项,把这些路径都改到其他盘下;

  • 卸载的时候不要直接删掉本体文件夹,老老实实从系统卸载入口或者打开 Uninstall 文件卸载——安装版软件大多会修改系统环境,所以卸载也别当普通文件夹处理。

总结!

所有的知识学习,都以概念为最基础的支柱,而对于电脑,大量的实践则是将概念融会贯通的必经之路。希望大家能尽快上手编程,早日“人机合一”,将自己无限的想象力与创造力投入到软件与硬件的创造之中!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询