20191317王鹏宇学习笔记
第一章:引言
知识点归纳总结:
主要描述了教材的教学范围,目标读者以及作为计算机科学工程专业教材的适宜性。内容主要包括Unix的历史,Linux的开发以及各种版本,适用于Linux的各种平台与虚拟机,常用的Unix/Linux命令。并且给出了VirtralBox虚拟机和VMware虚拟机的安装教程。
其中让我最有收获的就是教材给出了学习目标:
- 动态数据结构的应用
- 进程概念和进程管理
- 并发编程
- 定时器和定时功能
- 信号,信号处理和进程间通信
- 文件系统
- TCP/IP和网络编程
还有部分Unix/Linux命令:
Is: Is dirname
:列出CWD或目录的内容。
cd dirname
:更改目录。
pwd
:打印CWD的绝对路径名。
touch filename
:更改文件名时间戳(如果文件不存在,则创建文件)
cat filename
:显示文件内容。
cp src dest
:复制文件。
mv src dest
:移动或重命名文件。
mkdir dirname
:创建目录。
rmdir dirname
:移除(空)目录。
rm filename
:移除或删除文件。
In olefile newfile
:在文件之间创建链接。
find
:搜索文件。
grep
:搜索文件中包含模式的行。
ssh
:登录到远程主机。
gzip filename
:将文件压缩为.gz文件。
gunzip filename.gz
:解压.gz文件。
tar -zcvf file.tgz .
:从当前目录创建压缩tar文件。
tar -zxvf file.tgz .
:从.tgz文件中解压文件。
man
:显示在线手册页。
zip file.zip filenames
:将文件压缩为.zip文件。
unzip file.zip
:解压.zip文件。
实践内容:openeuler系统的安装:
参考网站
实践截图
但是我发现这个系统是没有界面的,所以操作起来会很麻烦,于是我又在网上找了一下如何安装界面。
参考网站
由于openeuler并没有内置源,所以需要用户自己安装,都2021年了居然还有系统没有内置源,需要用户自己进行配置。
实践截图:
然后需要进行GNOME桌面环境的安装:
但是在安装界面的时候出现了一些错误:
Error: Failed to download metadata for repo 'osrepo_1': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
后来经过在网上查找原因,终于解决了这个问题,原来是因为我在配置源的时候,因为没办法复制粘贴,只能手动输入,结果打错了一个字母,导致源失效。
参考网站
后来经过修改终于配置成功:
但是现在只是成功下载了gnome界面,接下来还需要设置gnome界面开机自启。
至此,gnome界面已经安装完成,但是根据网上出现的众多bug,这里还不能直接重启,否则可能会遇到gdm无法登录的问题,根据大佬的测试,这个问题是由于 openEuler 的 gdm 的配置文件不全导致的。具体来说,是 /etc/gdm/Xsession 指向的 /etc/X11/Xsession 不存在。当然现在这个bug有没有修复,我也不敢自己尝试,所以只能按照大佬的指导一步步做下来。
然后就变成了这样:
可以很明显的看出,在爆出'piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled'这个错误之后,系统就卡在黑屏,不出现界面。
经过查找,以及网上出现同样问题的帖子,我猜想可能是系统运行内存以及最大存储太小,但是ubuntu又一直试图加载某个模块导致的。于是我重新设置了虚拟机的配置。最终变成了这样:
很好,成功解决了无法出现界面的问题,但是又出现了新的问题,这也算是一次进步。于是我又开始寻找为什么没有文字显示。
可以看出,界面是可以正常使用的,只不过所有的中文都变成了很奇怪的方块。
参考网站
于是根据我的搜索,原因可能是gnome界面不支持中文,改成英文就好了,根据帖子的指导,成功将语言设置为英语。
可以看出这个问题也是成功解决,这波可真是把新手能踩的坑全给踩了一遍。而这才只是第一章。
第二章:编程背景
知识点归纳总结:
本章介绍了几种常用的基于GUI的编辑器例如vim,gedit等,同时展示了如何使用EMACS来编译执行C语言程序,还有C语言函数的调用以及程序在运行时堆栈的变化。makefile的编写方法,如何使用GDB调试C语言程序。重点解释了C语言结构体和指针的应用,包括链表,二叉树等几种比较常用的算法。还有文件系统的相关操作。
其中让我最有收获的就是:
1,C语言程序在编译过程中,需要生成可执行文件,例如:'gcc t1.c'就会生成一个二进制可执行文件a.out,而在linux中,cc链接到gcc,而gcc会把t1.c编译成t1.s,随后t1.s会经过汇编器汇编成t1.o,再经过连接器,最终生成可执行文件a.out。具体内容在教材的22-25页
2,C语言程序在运行时堆栈的使用情况,具体内容在教材的27-34页
3,C语言结构体与指针的应用,具体就是链表,二叉树的查找,遍历,插入,删除操作。具体内容在教材53-77
还有部分Unix/Linux文件系统操作命令规范:
- mkdir路径名:为给定的路径名创建一个新目录。
- rmdir路径名:如果目录为空,则删除该目录。
- cd[路径名]:将当前工作目录更改为路径名,如果没有路径名则更改为“/”。
- ls[路径名]:列出路径名或当前工作目录的目录内容。
- pwd:打印当前工作目录的(绝对)路径名。
- creat路径名:创建一个FILE节点。
- rm路径名:删除FILE节点。
- save文件名:将当前文件系统树保存为文件。
- reload文件名:从一个文件构造一个文件系统树。
- menu:显示有效命令菜单。
- quit:保存文件系统树,然后终止程序。
实践内容:EMACS的安装与使用:
这里我使用的是优麒麟linux系统,因为自带软件商店,可以直接下载EMACS,比较方便:
使用emacs编写第一个C语言程序:
参考网站
真正开始使用之后才发现emacs没有鼠标点选功能,只有一堆快捷键,使用起来有点麻烦,因为各种快捷键需要记。
在这里贴几种常用的快捷键:
- C-x,C-f:ctrl+C再按一下ctrl+f可以查找或者创建新文件。
- C-x,d:ctrl+C再按一下d,可以根据当前文件目录进行查找。
- C-x,C-s:ctrl+C再按一下ctrl+s,可以保存修改的文件
- M-x,shell:就是alt+x然后输入shell,可以调出shell命令行。
下面是C语言结构体的内容,在这之前我们数据结构课上已经重点讲过这部分内容,所以在这里也算是一种温习。下面是基于链表实现的大数运算:
在这里我突然发现,如果直接在文件夹里面提前创建好文件,用emacs文件查找C-x,C-f是找不到这个文件的,但是如果再emacs里面创建好,就能找到,这个问题到现在我也没有找到解决办法。所以说emacs操作还是很反人类的,我更倾向于使用vim或者vscode来编写代码。
这里贴几个常用的快捷键和vim命令:
C+alt+T
:打开命令行。
C+shift+T
:建立新标签。
alt+1/2/3
:切换标签。
history
:查看输入历史。
od
:查看文件。