学习笔记1 知识点总结 第一章 《Unix/Linux系统编程》教材第一章中介绍了Unix和Linux系统的基本概念以及编程环境的设置,介绍了系统编程的重要性和目标,旨在强化学生的编程背景知识,特别关注动态数据结构、进程管理、并发编程、定时器、信号处理、文件系统、TCP/IP和网络编程等方面。大致叙述了unix和linux的各世代版本,提供了Unix和Linux操作系统版本的历史概述,目标读者包括那些希望深入了解Unix和Linux系统、系统编程的学生和开发人员,帮助读者了解它们的起源和演变过程,以及它们在计算领域的重要性,同时也讲述了安装虚拟机的具体过程,以及操作时的各种注意事项。介绍了如何将Ubuntu操作系统的映像文件安装到虚拟机软件(如VirtualBox,Vmware)中,使读者能够在Linux中运行相关代码和程序。 自从大一,我便有一个疑惑,那就是为什么要在linux系统中进行各项操作呢?windows不是也行吗?然而,随着本章的学习,我明白了Linux的重要性。首先,它是开源的,允许自由学习和探索系统内部工作原理。其次,Linux更灵活,可根据需求自定义,适用于各种项目。此外,它更稳定、更安全,有庞大的社区支持和丰富的软件生态系统。诸多系统都是建立在linux系统上的,如我们熟悉的ubuntu linux系统,还有其他很多,Debian Linux,还有我学习网络攻防的渗透项目时安装的Kali Linux系统,它们都是在Linux的基础上衍生出来的适合各个方面的系统。 第二章 介绍了常见的Linux文本编辑器,包括vim、gedit、emacs,并提到vim是功能最强大的一个。 阐述了GCC编译器的重要性和多语言支持,以及GCC的编译过程分为预处理、编译、汇编和链接四个阶段。 解释了静态链接和动态链接的区别,包括硬链接和软链接。 讲解了可执行文件的分类,包括内置命令、外置命令、实用程序、用户程序、Shell脚本等。 简要介绍了常用的Linux命令,包括pwd、cd、ls、mkdir、rmdir、touch、mv、rm、ln、find、file/stat、cat、more、less等。 介绍了sudo命令,用于临时提升用户特权级别执行命令。 探讨了vim的三种操作模式:命令模式、插入模式、末行模式。 讲解了a.out文件的内容和程序终止方式。 介绍了C语言的结构体、变量类型、函数调用、汇编代码链接等相关知识。 提供了对链表、树和二叉树的基本理解,包括遍历算法。 最后,讨论了一个编程项目,即Unix/Linux文件系统树模拟器,其中使用二叉树实现了树结构。 对于常见Linux命令,有必要掌握它们的具体意义,因此总结如下: mkdir路径名:为给定的路径名创建一个新目录。 rmdir路径名:如果目录为空,则删除该目录。 cd [路径名]:将当前工作目录更改为路径名,如果没有路径名则更改为 is [路径名」:列出路径名或当前工作目录的目录内容 pwd:打印当前工作目录的(绝对)路径名。 creat路径名:创建一个FILE节点。 rm路径名:删除FILE节点。 save文件名:将当前文件系统树保存为文件。 reload文件名:从一个文件构造一个文件系统树。 menu:显示有效命令菜单 quit:保存文件系统树,然后终止程序 touch: 创建一个新的空文件或者更新已存在文件的访问和修改时间戳。 ln: 创建链接文件,包括硬链接和软链接。硬链接是多个文件名指向同一数据块,删除一个链接不影响其他链接;软链接是指向另一个文件或目录的符号链接,类似于Windows的快捷方式。 find: 在指定目录中查找文件和目录。可以根据不同的条件搜索文件,如文件名、文件类型、文件大小等。 file/stat: file命令用于查看文件的类型信息,例如判断一个文件是否为文本文件、二进制文件等;stat命令用于显示文件的详细信息,包括文件的权限、大小、创建时间等。 cat: 显示文件的内容,通常用于查看较小的文本文件。 more: 分页显示文件内容,允许用户逐页查看文件,按空格键翻页。 less: 分页显示文件内容,提供更多交互选项,允许用户翻页、搜索、退出等,比more更强大。 这两章的内容涵盖了系统编程的基础知识,包括编译、文本编辑、文件操作、数据结构等,为深入理解系统编程奠定了坚实的基础。同时,对Unix和Linux系统的历史、特点以及开发环境也进行了介绍,有助于理解为什么选择在Linux下进行系统编程。 最大的收获 在第一章中,最有收获的内容是对Unix和Linux系统的历史和演变过程的了解。这章提供了关于这两个操作系统的起源和发展的宝贵信息,让我明白了它们在计算领域的演化和重要性。这个知识点让我深刻认识到为什么选择在Linux环境下进行编程。 至于第二章,其中最有收获的内容是对常见Linux命令的深入了解。学习了mkdir、rmdir、cd、ls、mv、rm、ln、find、file/stat、cat、more和less等命令的具体用途,这些命令是日常系统编程中不可或缺的工具。这些知识点为我提供了处理文件操作和文本编辑的实际技能,为未来的系统编程项目打下了坚实的基础。 苏格拉底挑战过程截图: 文本编辑器知识点:
常见Linux命令知识点:
问题与解决思路
问题1:在学习关于Unix和Linux系统的基本概念时,我曾经感到困惑,不太清楚Unix和Linux之间的区别是什么,以及它们与其他操作系统的关系。
解决思路:为了解决这个困惑,我首先查阅了相关的教材和在线资料,以了解Unix和Linux的历史和演变过程。我发现,Unix是早期的操作系统,而Linux是基于Unix开发的开源操作系统。Linux在很大程度上受到了Unix的启发,但有自己的内核(Linux内核),并且以开放源代码的方式进行维护和发展。这个理解帮助我明白了它们之间的联系和区别。
问题2:在执行娄老师的代码ls /sr/include/stdio.h时,没有显示出stdio.h的头文件。
解决思路:经过查询资料,发现改指令是列出位于 /usr/include/
目录下的名为 stdio.h
的文件。所以,运行 ls /usr/include/stdio.h
的命令实际上是试图列出 /usr/include/
目录下的一个名为 stdio.h
的文件,以查看文件是否存在或者了解其属性。不过,stdio.h
是一个头文件,而不是一个普通的可执行文件,因此直接运行 ls
命令查看它可能会出错。所以通常会使用文本编辑器而不是 ls
命令。因此我将ls改为了cat
命令查看文件内容,最终解决了该问题。
实践过程
具体代码:
hello.c:
#include "hello.h"
void xyy()
{
printf("hello!\n");
}
main.c:
#include "hello.h"
int main(){
xyy();
}
hello.h:
#ifndef ___HELLO_H___
#define ___HELLO_H___
void xyy();
#endif
其他:
我选择使用Kali Linux系统编写Linux代码的主要原因有以下几点:
1.全面的工具集:Kali Linux是一个专为网络渗透测试和安全应用而设计的Linux发行版,因此它包含了丰富的工具和资源,包括用于系统管理、开发和测试的工具。这使得它成为学习和实践Linux系统编程的理想平台。
2.稳定性和安全性:Kali Linux基于Debian构建,继承了Debian的稳定性和安全性。
3.我在大一时装过ubuntu,但之后电脑重装导致系统丢失,但之后学习网络攻防又下载了kali linux,因此我选择了kali而没有使用传统的ubuntu
标签:文件,编程,信息安全,笔记,Unix,路径名,Linux,教材,链接 From: https://www.cnblogs.com/xyydzwjs/p/17689538.html