西安邮电大学校内讲座的分享大纲
这是我于2024年9月21日在第21届国际 软件自由日 西邮站上的分享,主要面向 大学新生 。
手机用户可以通过右下角的 按钮展开目录。
从程序讲起
在开发者的世界中,软件分为命令行程序和图形界面程序,并且前者的使用频率非常高。
命令行程序(CLI)
命令即程序
你也许在 Windows 上使用过
ping
命令检测网络连通性。
示例:ping 命令的输出
实际上
ping
是一个程序,位于
C:\Windows\System32\PING.EXE
,你可以通过
Get-Command ping
查看到它的路径。
系统如何找到这条命令对应的程序?
环境变量 PATH
在命令行输入
ping
命令,系统会去
PATH
环境变量中寻找可执行文件,并执行。
示例:打印 PATH 环境变量
同时,环境变量
PATHEXT
规定了执行命令时可省略的后缀(其中包含
.EXE
),Windows 又对大小写不敏感,因此我们可以通过
ping
直接访问
C:\Windows\System32\PING.EXE
。
编写自己的命令行程序
有些同学想要使用 VS Code 编写 C 语言程序,这时就需要把下载到的
x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev0.7z
解压后的
bin
目录加入到
PATH
中。这个目录中含有
gcc.exe
,VS Code 识别到后就可以调用
gcc
编译 C 程序。
清楚了
ping
的由来,其后的参数
baidu.com
呢?
命令行程序的参数是命令行参数,通过
main
函数获取。
示例:编写参数读取程序
这样,我们就实现了命令参数的读取。
其他种类的命令行程序
除了最基础的命令行程序之外,还有一部分交互式命令行程序使用了 TUI ,它在基本的命令行中实现了图形化交互,一个众所周知的例子是经典的 Windows 的启动管理器 。
Vim、nano、top 也是经典的 TUI 程序,相比于命令行程序,它具有更好的交互体验。当然,随着计算机技术的进步,图形化用户界面(GUI)开始流行。
图形界面程序(GUI)
顾名思义,图形界面程序就是具有图形界面的程序。大家常用的桌面软件,如 Chrome、VS Code、QQ,都是图形界面程序。
Windows 终端、命令行(CMD)也是图形界面程序。(参见 Windows 控制台和终端定义 )
图形界面程序也依赖环境变量和命令行参数
你也许会想,命令行程序看起来有很多条条框框,图形界面程序能否摆脱这些“麻烦”?
可惜,答案是“不能”。
比如方才提到的 VS Code 编写 C 语言程序,需要配置 环境变量 。
再比如有一种很低级又不易被察觉的浏览器主页劫持方式:修改快捷方式 参数 。它的表现是通过桌面图标打开的浏览器会直接访问某个链接,而通过任务栏和开始菜单打开的浏览器不会。
只需要右键桌面上的浏览器图标,选择“属性”,在“目标”的末尾添加
https://baidu.com
,再保存。现在双击桌面图标,就会直接访问百度了。
“认识 GUI 的方式、重要性、价值”
我在网上看到不少调侃,说一部分书籍教程具有非常良好的“防自学”特性——没有人带领教学,似乎就变得难以理解了。在计算机领域,你无需这份担忧。许多内容是开放、自由的,而不是所谓的“防自学”教程。
有一幅图给我留下了十分深刻的印象:Owura Kwadwo 是非洲的一名教师,他在黑板上画出软件界面,给学生讲授计算机科学课程。
引用此例是为了说明,学习操作计算机,关键的一点就是认识图形界面。如果不熟悉,就如同不熟悉智能手机的人面对满屏幕的图标和入口不知所措那般,操作程序必然遇到困难。
推荐这本电子书,对于初次接触计算机的人来说,这是一本好且实用的入门书籍。从拆开包装到软件使用,从文件管理到系统修理,你都能在其中找到答案。特别地,这是一本开源书籍,也使用了开放的 CC BY-NC-SA 4.0 创作许可协议。
软件分类
自由软件和专有软件
“自由软件”尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着 用户可以自由地运行,拷贝,分发,学习,修改并改进该软件 。因此,“自由软件”是关乎自由的问题,与价格无关。
专有软件,也叫做非自由软件,意味着软件不尊重用户的自由和社区。专有软件将其开发者或所有者置于对用户的支配地位。这种权力本身就不公正。
专有软件开始的不公正通常会导致进一步的不公正——恶意功能。
对于自由软件的哲学争辩比较激烈,此处仅引作定义。
由商业公司开发的软件,通常是 专有软件 。这些软件通常具有一些不受欢迎的功能,如广告、跟踪用户、收集数据等。例如,某款两字母聊天软件被多名开发者指出会 扫描电脑硬盘 (尤其是浏览器历史记录),被火绒实锤;某款三字购物软件也被安全机构指出 利用安卓漏洞控制手机系统 ,达到“莫名安装、泄漏隐私、无法卸载”的目的。这些事情在开发界并不稀奇。
开源软件
开源软件是通过开放协作开发和维护的软件,通常免费提供,可供任何人使用、检查、修改和重新分发。 这与专有或闭源软件应用程序(如 Microsoft Word、Adobe Illustrator)形成对比,这些应用程序由创建者或版权所有者出售给最终用户,除非版权所有者说明,否则不能对其进行编辑、增强或重新分发。
“开源”一词还泛指一种基于社区的方法,通过开放协作、包容性、透明度和频繁的公开更新来创建任何知识产权(如软件)。
开源软件就是大家一起开发、共享代码的程序。简单说,就是软件的代码公开,任何人都能免费使用、修改和分发。很多常用的工具,比如 Linux、Firefox、VS Code,都是开源的。开源软件不仅免费(可能有收费的技术支持),还能学到很多编程知识,甚至有机会参与大型项目,积累经验。
世界各地的开发者一同维护一个项目,实时地添加功能、修复 bug,你也能参与其中。这样真的很酷!
常见的开源协议
开源不是乱开,而是讲武德地开,有章法地开。这是几个常见的开源协议:
- MIT:非常宽松,只要保留原作者的版权声明,就可以随意使用、修改和分发。
- GPL(通用公共许可证):要求修改后的软件也必须开源,并且使用同样的GPL协议。这种协议注重软件的自由分享。
- Apache 2.0:允许自由使用、修改和分发,并且提供专利权保护。但必须保留原作者的版权和声明。
西邮 Linux 兴趣小组拥抱开源
西邮 Linux 兴趣小组( https://xiyoulinux.com )秉承自由、开放、共享(Free Open Share)的理念,热爱开源事业并参与多个开源项目。
- 组织举办了多届软件自由日活动
- 向多个开源项目贡献代码,如 Linux、Apache、CNCF
- 积极参与 Google Summer of Code、 开源之夏 )等开源活动
- 小组 GitHub 组织也有多个开源项目,培养计划完全开源
在 Windows 上使用开源软件
在你探索开源世界之前,你已经在使用众多开源软件了。
访问代码托管平台
全世界最大的代码托管平台的称号当属于 GitHub。它 UGC 的特性一方面促进了各类项目的百花齐放,另一方面又使得我们访问这个平台会遇到一些困难——不过不用担心,还是有 相对 Free 的方法来访问这个平台。
瓦特工具箱 / Watt Tookit(Steam++)
Watt Toolkit 是由江苏蒸汽凡星科技有限公司开发与维护的 (GNU) 自由开源软件,采用 GPL v3 开源协议同时发布于 Github 及 Gitee。
它是一款免费的游戏加速工具,也能用于访问 GitHub,可以在 Microsoft Store 中下载。
GitHub 增强 - 高速下载
高速下载 Git Clone/SSH、Release、Raw、Code(ZIP) 等文件 (公益加速)、项目列表单文件快捷下载、添加
git clone
命令。
项目开源于 XIU2/UserScript ,采用 GPL v3 协议。使用前需要在浏览器安装 “篡改猴” 插件。
使用其下载软件
参阅官方文档: 在 GitHub 上寻找灵感
当访问一个项目的代码仓库时,首先阅读文件目录列表下方的 README ,它有助于你快速了解项目。当项目具有 二进制发行版 时,可以在文件目录列表右侧的 Releases 中下载。
如何选择适合自己系统的发行版?
- 确定操作系统,如 Windows、Linux、MacOS(darwin)。
- 确定 CPU 架构,如 x86_64、arm64。
-
新手优先选择可执行文件,如
.exe
、.msi
、.dmg
。- 若没有则选择编译后的打包。
-
一般没有根据
Source code
编译的能力。
安装了刚刚的 GitHub 增强插件后,你应当能在下载时看到多个地区的镜像按钮。你可以用鼠标中键点击这些链接,保留一个速度快的下载任务。
这些开源软件的作者一般没有购买微软的数字签名证书,因此下载时会提醒“通常不会下载……请在打开前确保信任……”的警告。这时你需要点击
…
-
保留
-
显示详细信息▼
-
仍然保留
。
HelloGitHub
HelloGitHub 是一个发现和分享有趣、入门级开源项目的平台。希望大家能够在这里找到编程的快乐、 轻松搞定问题的技术方案、大呼过瘾的开源神器,顺其自然地开启开源之旅。
它能帮助你探索 GitHub。项目开源于 521xueweihan/HelloGithub ,采用 CC BY-NC-ND 4.0 协议。也有同名微信公众号可供关注。
使用包管理器安装软件
WinGet
WinGet 是微软官方的 Windows 程序包管理器,它提供了命令行程序,允许你安装、更新和卸载 Windows 上的应用程序。以 MIT 协议开源在 microsoft/winget-cli 。
演示:使用 WinGet
- Microsoft Learn: 使用 WinGet 工具安装和管理应用程序
- USTC Mirror: 使用中国科学技术大学的镜像源加速下载
你也许会羡慕 Linux 用户的终端具有炫酷的界面和方便的功能,但 Windows 也能做到这些。
Oh My Posh 是一个用于 Windows 终端的命令行主题管理工具。根据 MIT 协议开源在 JanDeDobbeleer/oh-my-posh 。
Scoop
Scoop 是一个 Windows 的命令行包管理器。由于少数通过 WinGet 安装的 CLI 有相对目录访问问题,我一般使用 Scoop 来安装命令行程序。
在这一环节,我会演示通过 Scoop 安装的 CLI。
演示:使用 Scoop
这些 CLI 几乎都是 Linux 下常见的命令行程序,我通过 Scoop 安装了 Windows 版本。
推荐一些开源软件
虚拟机:Oracle VM VirtualBox
在搜索引擎输入“VMware”,跳出的联想词就有“激活密钥”相关字样。与其用破解版,为何不试试免费开源的 VirtualBox?
如果你对虚拟机没有特殊要求,VitualBox 是最适合新手的选择之一。
性能监控:Traffic Monitor
Traffic Monitor是一款用于Windows平台的网速监控悬浮窗软件,可以显示当前网速、CPU及内存利用率,支持嵌入到任务栏显示,支持更换皮肤、历史流量统计等功能。
项目采用“反996协议”开源。这个开源协议很有趣,它允许免费使用、复制、修改和分发授权作品,前提是需保留版权声明和许可证,并遵守相关劳动法律,且不得剥夺员工的相关权利。
你可以干掉 Windows 左下角的小组件广告,以 Traffic Monitor 代之。
- 右键开始菜单图标,选择“终端”。(“PowerShell”也行,但说明该升系统了)
-
输入命令卸载“Windows Web 体验包”(小组件广告)
PS>
winget uninstall "windows web experience pack" - 右键 Traffic Monitor,勾选“显示任务栏窗口”,取消勾选“显示主窗口”
- 你可以在“选项”-“任务栏窗口设置”里继续调整
屏幕录制:OBS Studio
你也许试着寻找过免费无广告的录屏软件。
OBS Studio 是一款免费、开源、跨平台的屏幕、视频录制及直播串流软件。采用 GPL v2 开源协议。
当然,Windows 11 自带的截图工具升级后已经支持录屏,QQ、腾讯会议、NVIDIA GeForce Experience(现已升级为NVIDIA App)也有录屏功能。
文件传输:LocalSend
还在用QQ、微信在自己的设备间传输大文件、大量文件吗?
LocalSend 是一款免费、开源、跨平台的文件传输软件。采用 Apache v2.0 开源协议。
安卓控制:scrcpy
这是一款通过 ADB 远程操作安卓设备的命令行工具。有 Electron 实现的图形化版本 Escrcpy 。
串流好搭档:Sunshine 和 Moonlight
超低延迟操作电脑,还支持原生手柄连接。
Sunshine 是一款自托管的游戏流媒体服务器,适用于 Moonlight。它提供了低延迟的云游戏服务器功能,支持 AMD、Intel 和 Nvidia GPU 硬件编码。同时也支持软件编码。你可以通过任何 Moonlight 客户端在多种设备上连接 Sunshine。Sunshine 提供了一个 Web UI,方便你在喜欢的浏览器中进行配置和客户端配对,支持本地服务器或移动设备进行配对。
入门,但不止于 Windows!
镜像站
“镜像”指的是对原始网站或软件仓库的一个完全复制版本。“换源”是指将镜像站作为软件源,通过镜像站下载软件。
为了加快下载速度、提升下载成功率,许多高校建立了镜像站,用以提供开源软件镜像、Linux 镜像源、PyPl 镜像等。淘宝、腾讯云、阿里云也提供了 npm 镜像、pip 镜像等服务。
校园网联合镜像站
MirrorZ 提供校园网镜像站的索引和跳转服务,由教育网提供支持,能够基于地理位置快速访问各镜像站点资源。项目以 MIT 协议开源于 mirrorz-org/mirrorz 。
Android
F-Droid
F-Droid 是一个开源的 Android 应用商店,它提供了大量自由(免费)和开源的应用。
Termux
Termux 是一个适用于 Android 的终端模拟器,其环境类似于 Linux 环境。无需 Root 或设置即可使用。Termux 会自动进行最小安装 - 使用 APT 包管理器即可获得其他软件包。
Termux 是一个 Android 终端应用程序和 Linux 环境。通过 GPL v3 协议开源在 termux/termux-app 上。你可以在上面使用 Linux 风格的命令并管理开放环境。
在这一环节,我会通过 SSH 演示安卓平板上的 Termux 使用。
安装软件
在 Windows 上卸载流氓软件,不仅检验一个人的电脑素养,还尤其考察他的语文功底。
在国产手机上安装“未知来源的软件”也是如此。
如果你在安装手机软件时遇到困难,一般自行上网搜索就能解决问题。
网站
以下网站都是完全开源的,你可以在 GitHub 上找到它们。
CO 导航
CO 导航是由我开发的网站,为西安邮电大学学生提供网址导航服务,于2023年2月7日开始运营,是“更适合西邮宝宝体质的网址导航”。
西邮 Wiki
西安邮电大学非官方校园生活指南,于2024年6月30日
g0ubu1i
带领立项,持续更新中。智邮普创、西邮 Linux 兴趣小组、隔壁小O、计科卓越等组织团体的多名成员以个人名义参与编写。
CS 自学指南
CS 自学指南由北大信科 @PKUFlyingPig 编写,旨在帮助初学者通过优质开源资源在 2-3 年内全面掌握计算机科学核心知识和技能,涵盖多种编程语言及多个重要领域,提升科研和就业竞争力。
Linux 101
Linux 101 是一份由 USTC LUG(中国科学技术大学 Linux 用户组)编写的 Linux 的基础教程,目标是引导不了解 Linux 的读者掌握基础且实用的知识并领略社区开源文化的魅力。
Linux 和开源的大门永远向你敞开。