历史:
Unix是早期的商业化操作系统,诞生于20世纪60年代,最早由AT&T的贝尔实验室开发。它的设计目标是支持多用户和多任务的环境。
Linux是由Linus Torvalds于1991年创建的开源操作系统。它最初是为个人计算机而开发,后来演变成一个广泛的操作系统家族。
联系:
Linux是基于Unix的设计,因此它们共享一些核心概念,如多用户、多任务等。
Linux借用了许多Unix命令和工具,因此在使用上有相似之处,如shell命令。
Linux和Unix都是多用户、多任务的操作系统,适用于服务器和个人计算机。
区别:
Unix是商业操作系统,由多个厂商开发和发布,存在多个不同的版本,如IBM AIX、Sun Solaris等。
Linux是开源操作系统,由全球的开发者社区维护和改进,有众多的发行版,如Ubuntu、Fedora、CentOS等。
Unix通常需要购买许可才能使用,而Linux是免费的,可以自由获取和修改。
Unix通常用于大型服务器和工作站,而Linux可以用于服务器、个人计算机、嵌入式设备等各种用途。
Unix遵循Single UNIX Specification(SUS)标准,而Linux遵循POSIX标准,但没有一个统一的Linux标准。
Linux在虚拟机的应用:
Linux操作系统可以在虚拟化软件中运行,如VirtualBox或VMware。这允许用户在单个物理计算机上运行多个虚拟的Linux操作系统实例。
在大一时,你可能已经学习了在VirtualBox中安装Ubuntu等Linux发行版的过程。在后续学期中,你使用了VMware,但整体虚拟化的概念和应用方式没有太大变化。
Linux的应用:
Linux内核位置: Linux操作系统的内核通常存储在/boot目录中。这是启动时加载的核心组件。
Linux内核映像的三部分:
- BOOT: 这是引导加载程序,负责启动计算机并加载操作系统。
- SETUP: 它包含了一些系统设置和初始化信息。
- Linux Kernel: 这是Linux操作系统的核心部分,包含了操作系统的主要功能和驱动程序。
Linux的三个文件流:
- stdin(标准输入): 通常与键盘输入相关联,用于接收用户的输入。
- stdout(标准输出): 通常与屏幕相关联,用于向用户显示信息。
- stderr(标准错误): 通常也与屏幕相关联,但用于显示错误和警告信息。
常见指令:
ls
: 列出目录内容。cd
: 切换目录。pwd
: 显示当前工作目录。touch
: 创建文件或更新时间戳。cat
: 查看文件内容。cp
: 复制文件。mv
: 移动或重命名文件。mkdir
: 创建目录。rmdir
: 删除空目录。rm
: 删除文件。ln
: 创建文件链接。find
: 搜索文件。grep
: 搜索文件内容。ssh
: 远程登录。gzip
: 压缩文件为.gz。gunzip
: 解压.gz文件。tar
: 打包/解包文件。man
: 查看命令手册。zip
: 压缩文件为.zip。unzip
: 解压.zip文件。
绝对路径:
- 绝对路径是指从根目录开始的完整路径。
- 根目录在Linux中通常使用斜杠(/)表示。
- 绝对路径可以唯一地标识文件或目录的位置,无论当前工作目录在哪里。
- 例如,/home/user/Documents是一个绝对路径,它指向根目录下的home目录,然后是user目录,再追加Documents目录。
- 绝对路径可以在命令行中使用,以指定要操作的文件或目录的准确位置。
- 使用绝对路径可以避免由于当前工作目录的更改而导致路径解析错误的问题。
- 相对路径是相对于当前工作目录的路径,如果当前工作目录变了,相对路径也会随之变化。
- 通常情况下,在输入或查看文件时,建议使用绝对路径,以确保准确性和可靠性。
学习笔记:编程背景
Ubuntu中的快捷键和小技巧
快捷键
- 打开终端:使用 Ctrl + Alt + T 快速打开终端,方便进行命令行操作。
- 系统监视器:使用 Ctrl + Alt + Delete 或 Ctrl + Alt + Esc 打开系统监视器,查看和管理正在运行的进程和系统性能。
- 应用程序切换:使用 Alt + Tab 快速切换正在运行的应用程序。
- 窗口关闭:使用 Ctrl + W 关闭当前应用程序的窗口。
- 锁定屏幕:使用 Ctrl + Alt + L 锁定屏幕,保护计算机安全。
- 终端标签页:在终端中使用 Ctrl + Shift + T 打开新的标签页,方便多任务操作。
- 复制和粘贴:使用 Ctrl + C 复制文本,使用 Ctrl + V 粘贴文本。
- 进程暂停和恢复:使用 Ctrl + Z 暂停正在运行的进程,使用 fg 命令恢复。
使用小技巧
- 应用程序搜索:按下Super键(通常是Windows键)并开始输入应用程序名称,以快速启动应用程序。
- 多工作区:使用 Super + S 查看和管理多个工作区,以更好地组织你的任务。
- 截屏工具:使用 Print Screen 键或 Super + Shift + S 截取屏幕内容,方便创建屏幕截图。
- 自定义快捷键:在系统设置中,你可以自定义自己的快捷键,以适应你的工作流程。
- 命令行技巧:学习一些基本的命令行技巧,如 ls(列出文件和目录)、cp(复制文件和目录)、mv(移动文件和目录)和 rm(删除文件和目录)。
- 软件包管理:使用 apt 命令来安装、更新和卸载软件包。例如,sudo apt update 用于更新软件包列表,sudo apt install package-name 用于安装软件包。
- 备份:定期备份你的数据,可以使用工具如Deja Dup或rsync来自动化这个过程。
程序开发流程
开发工具
- 文本编辑器:Ubuntu提供了多个文本编辑器,包括 vim(命令行文本编辑器)、gedit(图形界面文本编辑器)、emacs(功能强大的文本编辑器)以及 vscode(Visual Studio Code,跨平台的集成开发环境)。
- 编译工具:使用 gcc 编译器来编译C语言程序。
- 调试工具:使用 gdb 调试器来调试程序。
- 项目管理工具:使用 make 工具来编译和管理项目。
编译过程
- 编写代码:使用文本编辑器编写程序代码。
- 编译代码:使用 gcc 编译器编译代码,生成可执行文件。
- 调试程序:使用 gdb 调试器来调试程序,查找和修复错误。
- 项目管理:使用 make 工具来管理项目,包括编译和构建过程。
额外信息: 在编程过程中,你可以使用快捷键和命令行工具来提高效率,例如使用 vim 编辑代码,使用 gcc 编译程序,使用 gdb 进行调试。通过备份你的代码和数据,你可以确保在意外情况下不会丢失重要信息。
程序执行底层细节
在Linux中,C程序的执行涉及到底层细节。这包括程序的编译、链接和执行过程。在编写C程序时,需要考虑编译器如何将源代码转换为可执行文件,链接器如何解析共享库,以及操作系统如何加载和执行程序。这些底层细节对于理解程序的运行方式和性能调优非常重要。
链接库
链接库在Linux中扮演着重要的角色。它们包含了程序在运行时需要的函数和数据,分为静态链接库和动态链接库两种类型。静态链接库在编译时将库的代码和数据与可执行文件链接在一起,而动态链接库在运行时从系统的共享库中加载。了解链接库的使用和管理对于程序的开发、维护和分发至关重要。
Makefile
Makefile是用于管理和编译项目的工具。它是一个文本文件,通过make命令读取并按照文件内容对项目进行编译。Makefile由一系列目标项、依赖项和规则组成,可以自动化构建过程,提高开发效率。
GDB调试工具
GDB是Linux下强大的调试工具,可用于分析程序的执行过程,查找和解决错误。以下是一些GDB常用的断点设置指令:
(gdb) break 7
: 以行号设置断点。(gdb) break function_name
: 以函数名设置断点。(gdb) clear 行号
: 删除指定行的断点。(gdb) clear 函数名
: 删除指定函数的断点。(gdb) delete breakpoints n
: 删除指定编号的断点。(gdb) clear
: 删除程序中所有的基于行设置的断点。(gdb) delete
: 删除程序中所有的断点。(gdb) run
: 执行程序。(gdb) n
: 单步调试。(gdb) c
: 执行到下一个断点。
{{uploading-image-21962.png(uploading...)}}