学习笔记
第一章
1.Unix/Linux
Unix:一种通用操作系统
Linux:一个类Unix系统
2.在虚拟机上安装Linux
下载安装VirtualBox→创建VirtualBox虚拟机→将Ubuntu安装到VirtualBox VM上→调整屏幕分辨率(后面会详细写到)
3.Unix/Linux命令:下面列出了Unix/Linux的常用命令
ls-查看文件信息
cd-切换工作目录
pwd-显示当前路径
mkdir-新建目录
cat-用来查看文件内容
grep-指定文件中搜索指定字符内容
find-查找文件命令
rm-删除文件或目录
cp-复制文件
mv-移动或重命名文件
clear-清除屏幕命令
ps-查看进程信息
第二章
1.Linux中的文本编辑器
主要有vim、gerit、emacs,着重写一下vim.vim编辑器是所有Unix及Linux系统下标准的编辑器,相当于记事本,vim可以当作vi的升级版本。vim有三种不同的操作模式,分别是命令模式、插入模式和末行模式。
命令模式:vim启动时就处于默认的命令模式。在这个模式中,可以使用k、j、h、l分别将光标上下左右移动。
插入模式:当要输入文本进行编辑,必须输入i或a命令将vim切换到插入模式。其中i命令为插入文本,a命令为追加文本。要退出插入模式,按ESC键一次或多次即可。
末行模式:在命令模式下,输入:进入末行模式,将文本文件保存为文件或退出vim,具体有以下四个命令
:w:写入(保存)文件
:q:退出vim
:wq:保存并退出
:q!:不保存更改,强制退出
2.程序开发
(1)程序开发步骤
a.创建源文件
b.用gcc把源文件转换成二进制可执行文件(gcc在后面也会详细写到)主要分为三步
3.静态与动态链接
创建二进制可执行文件的方式有两种,分别是静态链接和动态链接,默认的二进制可执行文件名为a.out。a.out文件主要包括四个部分:文件头、代码段、数据段和符号表
4.GDB调试工具
GDB是一个交互式调试工具,可以调试用C、C++等语言编写的程序。在Linux中,可以用man gdb命令显示gdb的手册
问题及解决思路
1.关于VirtualBox调整分辨率
这个暑假打开虚拟机时发现不知道为啥我原来的虚拟机用不了了,所以为了重装虚拟机,也是顺便复习一下大一学的知识,我就把所有东西都卸载了重新装。前面的没啥问题,主要还是调分辨率这个老问题,大一的时候我就卡在这了。我发现书上说可以在命令行输入“xdiagnose”就可以调整分辨率,于是尝试了一下,但是遇到了几个问题
(1)调整步骤
我发现真正的调整步骤绝对不只是像书上说的那样轻飘飘的一句在命令行输入“xdiagnose”。首先要先输入sudo apt-get install xdiagnose安装xdiagnose,因为首次安装系统大部分没有这个软件。安装完了之后输入sudo xdiagnose并输入密码,会出来几个选项,勾选之后点击apply,再输入sudo reboot重启才算真正的完成。以上就是调整分辨率的所有步骤
(2)无法获得锁xxx资源临时不可用
这是我调分辨率遇到的一个问题,上网查了资料后说是另一个程序正在运行,占用了软件源更新时的系统更新锁,xxx即为系统锁所在的目录(太长了我没记住)。导致资源不可用的原因是上次安装时没正常完成。因此只需要将原先的apt-get进程杀死,激活新的apt-get进程,就可以正常工作了。首先ps查看进程,如果有和apt相关的进程,直接kiil pid就行;如果没有,就输入rm命令删除两个文件即可。但是遗憾的是这个方法也失败了,最后只能采用暴力方法,就是重启。没想到重启解决了问题。
2.gcc
虽然以前学过gcc,但是感觉还是掌握的不太扎实,这次正好复习复习。
用gcc编译.c文件并非直接生成.out文件,中间还经历了预处理、编译、汇编和链接四个过程,如下图:
其中用到的几个指令:
-o:用来指定生成的文件名。比如gcc hello.c -o hw
-E:执行预处理操作,即生成.i文件。比如gcc -E hello.c -ohello.i
-S:将.i文件转化为汇编代码.s文件。比如gcc -S hello.i -o hello.s
-c:将.s文件转化为机器能执行的二进制机器码。比如gcc -c hello.s -o hello.o
最有收获的内容和感悟
学习一二章最有收获的内容就是彻底弄清了gcc吧,以前一直以为写好代码就直接编译成可执行文件了,没想到中间还有这么多的步骤,文件也是一步一步转化。之前还不理解那个a.out文件,后来发现在Linux系统中是a.out文件,在Windows系统中就相当于exe文件,这样类比一下,其实也感觉不是太难的。然后我在阅读课本的时候发现书上给的知识并不是全部,有很多东西需要自己去查资料。这也提示我以后每次看书不要总局限于书上的知识,要多去课外拓展。