热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《Unix/Linux系统编程》第1,2章学习笔记

一.知识点归纳第一章引言1.本书目标编程背景知识详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。动态数据结构的应用字符串标记化、搜索树节点、插入和删除树节点等。进程概念和进程

文章目录[隐藏]

  • 一.知识点归纳
    • 第一章 引言
      • 1.本书目标
      • 2.Unix
      • 3.Linux
      • 4.Unix/Linux命令
    • 第二章 编程背景
      • 1. 文本编辑器
      • 2.程序开发
      • 3.C语言程序与汇编代码的链接
      • 4.链接库
      • 5.makefile
      • 5.GDB调试工具
      • 6.C语言结构体
  • 二. 问题与解决思路
  • 三. 实践内容与截图,代码链接
    • 虚拟机以及Ubuntu的安装与配置
    • 在终端运行代码


一.知识点归纳

第一章 引言

1.本书目标

  • 编程背景知识
    • 详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。
  • 动态数据结构的应用
    • 字符串标记化、搜索树节点、插入和删除树节点等。
  • 进程概念和进程管理
    • fork()、exit()、wait()等
  • 并发编程
    • Pthreads 编程、线程连接、互斥量等
  • 定时器和定时功能
    • 功能原理与编程项目
  • 信号、信号处理和进程间通信
    • 进程中通信机制,任务间交换信息
  • 文件系统
    • 存储设备、Unix/Linux内核中的文件系统支持、文件操作的系统调用、库I/O函数等。
  • TCP/IP和网络编程
    • TCP/IP协议、套接字API、UDP和TCP套接字编程,以及网络计算中的服务器-客户机模型。

2.Unix

  • Unix(Thompson 和Ritchie 1974,1978)是一种通用操作系统。该系统诞生于20世70年代早期,由肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRitchie)采用贝尔实验室的PDP-11 微型计算机开发。1975 年,贝尔实验室向公众发布了 Unix,称为V6 Unixo该Unix系统的最初使用者以各大高校和非营利性机构为主。这一早期版本,连同有关C编程语言的经典著作(Kernighan 和Ritchie1988),在操作系统领域掀起了 Unix革命,其影响一直持续至今。

  • AT&T Unix

  • Berkeley Unix

  • HP Unix

  • IBM Unix

  • Sun Unix

3.Linux

  • Linux(Linux2017)是一个类Unix系统。它最初是林纳斯·托瓦兹(Linus Torvalds)
    在1991年为基于Intelx86的个人计算机开发的一个实验性内核。后来,世界各地的人都开
    始加人Linux的研发队伍。Linux的一个重要里程碑发生在20世纪90年代末,当时,它与 GNU(Stallman2017)相结合,纳入了许多GNU软件,如GCC编译器、GNUemacs编辑器和bash等,极大地促进了Linux的进一步发展。不久之后,Linux实现了访问互联网的 TCP/IP协议族,并移植了支持 GUI的X11(X-window),成为一个完整的操作系统。
    Linux 包含其他Unix系统的许多特性。在某种意义上,它是由各种最为流行的 Unix系统组合而成。在很大程度上,Linux是兼容 POSIX标准的。Linux已被移植到许多硬件体系结构中,如摩托罗拉、SPARC和ARM 等。主要的Linux平台仍然是基于Intel x86 的个人计算机,包括广泛可用的台式机和笔记本电脑。此外,Linux可免费使用,且易于安装,因此,颇受计算机科学专业的学生欢迎。

  • Debian Linux

  • Ubuntu Linux

  • Linux Mint

  • 基于RPM的Linux

  • Slackware Linux

4.Unix/Linux命令

  • Unix/Linux命令

  • ls:ls dirname:列出CWD或目录的内容。

  • cd dirname:更改目录。

  • pwd:打印CWD的绝对路径名。

  • touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。

  • cat filename:显示文件内容。

  • cp src dest:复制文件。

  • mv src dest:移动或重命名文件。

  • mkdir dirname:创建目录。

  • rmdir dirname:移除(空)目录。

  • rm filename:移除或删除文件。

  • ln oldfile newfile:在文件之间创建链接。

  • find:搜索文件。

  • grep:搜索文件中包含模式的行。

  • ssh:登录到远程主机。

  • gzip filename:将文件压缩为.gz文件。

  • gunzip file.gz:解压.gz文件。

  • tar -zcvf file.tgz .:从当前目录创建tar文件。

  • tar -zxvf file.tgz .:从.tgz文件中解压文件。

  • man:显示在线手册页。

  • zip file.zip filenames:将文件压缩为.zip文件。

  • unzip file.zip:解压.zip文件。ls:ls dirname:列出CWD或目录的内容。

  • cd dirname:更改目录。

  • pwd:打印CWD的绝对路径名。

  • touch filename:更改文件名时间戳(如果文件不存在,则创建文件)。

  • cat filename:显示文件内容。

  • cp src dest:复制文件。

  • mv src dest:移动或重命名文件。

  • mkdir dirname:创建目录。

  • rmdir dirname:移除(空)目录。

  • rm filename:移除或删除文件。

  • ln oldfile newfile:在文件之间创建链接。

  • find:搜索文件。

  • grep:搜索文件中包含模式的行。

  • ssh:登录到远程主机。

  • gzip filename:将文件压缩为.gz文件。

  • gunzip file.gz:解压.gz文件。

  • tar -zcvf file.tgz .:从当前目录创建tar文件。

  • tar -zxvf file.tgz .:从.tgz文件中解压文件。

  • man:显示在线手册页。

  • zip file.zip filenames:将文件压缩为.zip文件。

  • unzip file.zip:解压.zip文件。

第二章 编程背景

1. 文本编辑器

  • vim

    • 命令模式:用于输入命令

      • h:将光标向左移动一个字符
      • l:将光标向右移动一个字符
      • j:将光标向下移动一行
      • k:将光标向上移动一行
    • 插入模式:用于输入和编辑文本

      • i:插入文本
      • a:追加文本
    • 末行模式:用于保存文件并退出

      • :w:写入(保存)文件
      • :q:退出vim
      • :wq:保存并退出
      • :q!:不保存更改,强制退出
  • WYSIWYG

    • Ctrl+C:中止或退出
    • Ctrl+K:删除行到缓冲区
    • Ctrl+Y:从缓冲区内容中复制或粘贴
    • Ctrl+S:保存已编辑文本等
  • gedit

  • emacs

2.程序开发

  • 创建源文件

  • 用gcc把源文件转换成二进制可执行文件

  • 静态与动态链接库

  • 可执行文件格式

    • 二进制可执行平面文件
    • a.out 可执行文件
    • ELF可执行文件
  • a.out文件

    • 文件头
      • tsize、dsize、bsize、total_size
    • 代码段
    • 数据段
    • 符号表
  • 程序执行过程

    • 读取a.out文件头,以确定所需的总内存大小。
    • sh从总大小中分配一个内存区给执行映像。
    • sh放弃放弃旧映像,开始执行新映像。
    • 执行从crt0.o开始,调用main()。
  • 程序终止

    • 正常终止
    • 异常终止

3.C语言程序与汇编代码的链接

  • 用汇编代码编程
    • 将C代码编译成汇编代码
    • 汇编代码说明
  • 用汇编语言实现函数
  • 从汇编中调用C函数

4.链接库

  • 动态链接库
  • 静态链接库

5.makefile

  • make工具是一个程序,它按照顺序读取makefile,以自动有选择的执行编译链接。

    • 一个make文件由一系列目标项、依赖项和规则组成

      目标项 依赖项列表
      target: file1 file2 ... fileN
      规则
      command1
      command2
      other command
  • 当make程序读取makefile时,通过比较依赖项列表中源文件的时间戳来确定要构建哪些目标项

5.GDB调试工具

  • GDB调试工具是一个交互式调试工具,可以调试用C、C++和其他几种语言编写的程序。
  • GDB是一个功能强大的调试工具,使用非常简单,但应该注意,所有调试工具只能提供有限的帮助,在某些情况下用处不大,所以程序开发的最佳方法是仔细设计程序的算法,然后根据算法编写程序代码。

6.C语言结构体

  • 结构体和指针
  • 类型转换
  • 链表
  • 树和二叉树

二. 问题与解决思路

问题1:所下载的Ubuntu20.04不是光盘,无法继续安装
解决方法:网上搜索教程,找到Ubuntu20.04的光盘

问题2:安装完显示的是英文版
解决方法:根据汉化教程,实现汉化配置

三. 实践内容与截图,代码链接

虚拟机以及Ubuntu的安装与配置

《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏

在终端运行代码

《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏


推荐阅读
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • python3.7 安装pip3_python3的pip3安装
    ---恢复内容开始---pip3的安装需要对应一整套python的编译工具库,所以安装好的pip3是这个样子:inearAi:~$pip3-Vpi ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文详细介绍了Vim编辑器中的三种模式(命令模式、末行模式和编辑模式)以及它们之间的操作区别和切换方法。Vim编辑器凭借其多种命令快捷键和高效率的操作方式,得到了广大厂商和用户的认可。对于想要高效操作文本的用户来说,了解这些模式的使用方法是必不可少的。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • PG12新增的VACUUM命令的SKIP_LOCKED选项
    PG12版本的VACUUM命令新增了SKIP_LOCKED选项,该选项使得vacuum命令在遇到被lock住的table时可以跳过并被视为成功执行。之前的版本中,vacuum命令会一直处于等待状态。本文还提到了PostgreSQL 12.1版本的相关信息。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • 找到JDK下载URL当然去官网找了。目前最新的1.8的下载URL(RPM)如下:http:download.oracle.comotn-pubjavajdk8u161-b122f3 ... [详细]
author-avatar
被抛弃的微博名
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有