第二章
2.1包管理器——yum (centos/redhat)
2.2编辑器——vim
2.3编译器——gcc/g++
2.4调试器——gdb
2.5git
包管理器相当于应用商店
通过网络去访问别人的服务器,请求得到需要得到的包
安装: 安装指令
yum install [需要安装的名称]
查看:查看已安装程序/软件/插件
yum list(list install)
卸载:卸载已安装程序
yum remove [需要移除的名称]
rzsz
rz将win机器上的文件上传到xshell
sz将xshell机器上的文件下载到win机器上
xftp 上传下载的指令 适用于文件或者文件夹
vim——编辑器
十二种模式
常用的三种模式 刚打开时—普通模式、底行模式、插入模式
在linux写代码
vs:集成开发环境(IDE)
1.代码编辑器
2.编译器:源代码变成可执行程序
3.调试器
4.工程管理工具: 描述代码之间的依赖关系(先编译谁 后编译谁 谁编译 谁不编译
谁怎么编译 用什么选项来编译)
很多时候在linux 上无法使用IDE,没有图形界面
1.IDE 远程开发功能 java开发一些小型系统时比较常用
2.直接登陆到linux上使用一组命令行工具完成开发
(1).vim 代码编辑器
(2).gcc 代码编译器
vim 强大
1.非常丰富的快捷键
2.支持非常丰富的扩展功能
多模式的编辑器
进入vim 普通默认模式 普通模式 此时敲下的键盘都是快捷键
插入模式(iaoIAO进入) (esc回到普通模式)用于编辑的模式 此时敲下的都是编辑内容
低行模式 (冒号进入) (esc回到普通模式)
/ 根目录
/home/test test用户的根目录
编辑代码 vim 1.模式切换 2.保存退出
编译代码 gcc
vim 其他基础用法
普通模式下基础的方向移动 k上
h左 l右
j下
方向键使用(普通模式)
^光标来到行首
$光标来到行尾
gg光标来到首行
G光标来到末行
来到任意行 行数+G / :(进入低行模式) + 行数
普通模式:
w跳到下一个单词的开始位置
b跳到上一个单词的开始位置
e跳到下一个单词的结束位置
进入到插入模式
1.i往光标之前插入
2.a往光标之后插入
3.I往行首插入
4.A往行尾插入
5.o往光标下一行创建新行插入
6.O往光标上一行创建新行插入
如何删除内容(普通模式)
1.x删除当前光标的字符
X删除光标前的字符
不会越行删除
2.删除任意区域的内容
a.先进入可视模式(用于选中文本 v进入 esc退出)
b.按x删除选中内容
3.删除整行 dd
搭配使用
w b e和其他指令搭配使用 d v 数字
撤销操作 u (普通模式)
还原操作 ctrl + r
ctrl + z 将vim切到后台
fg回到前台
剪切 == 删除
粘贴
p粘贴到光标之后
P粘贴到光标之前
ctrl + g
复制
可视模式 选中
yy/nyy/p/P/dd/ndd/x/dw/D
y进行复制
yw 从光标所在位置复制一个字的长度到缓冲区
[num]yw 从光标位置复制num个字的长度数据到缓冲区去
gg = G 对齐
p:针对复制的是行数据,向当前行的下面去粘贴
shief+p :向当前行的上面去粘贴
替换
小写r替换一个字符
大写R进入替换模式
移删复替撤更跳
可视行模式 V进入 esc 退出
按行选择代码
底行模式中输入 set nu标出行号 set nonu取消行号
vs 文件名多窗口打开
%s(光标选定行,去掉%后只修改某一行内容)/ 被替换的旧内容/ 替换的新内容/g(若省去g则只改变每行第一个被替换内容,加g则全部替换)
vimtutor vim教程
搭配大量的插件
系统的~/etc/vimrc 配置文件
用户的为.vimrc
gcc
1.预处理阶段
宏替换、文件展开、去注释
gcc -E[源代码文件] -o [name].i
2.编译
语法语义的检测将高级语言代码解释成为汇编代码
gcc -S[name].i -o [name].s
3.汇编
把汇编代码解释成为机器指令
gcc -c [name].s -o [name].o
4.链接
将所有代码文件以及库文件打包生成可执行程序
静态链接: -static 冗余性很大,编译出来的文件很大,将所有的代码,全部展开到可执行文件中去,运行时不依赖库的存在。
动态链接: 在可执行性文件当中,只保存所用到函数的对应到库里的指标,文件小,并且各个模块处于解耦状态,公用同一个库,运行时要依赖动态库(共享库)的存在。
默认为动态链接
file [文件名] 查看文件属性
ldd 查看可执行文件的动态链接属性
gdb
gcc -g选项编译程序,生成一个Debug版本文件
gdb ./main 或者gdb->file./main加载可执行程序
单步调试:start/step(下一步跟踪进入函数)/next(下一步,不跟踪进入函数)/until file:line 直接运行到某一行/continue结束调试
run 直接跑起来
断点调试:run之前使用break加断点/watch varname(变量监控,改变时停止)/info break/delete/print
1.在编译期间加-g选项,生成Debug版本文件
命令:l(list)可以看到源代码
回车键 重复执行上一个命令
b(backe)加行数 打断点
b [filename]:[行号] 在该文件的该行打一个断点
i b 查看当前各断点状况
enb列写y则断点生效写n则断点不生效
使用 disable 加断点序列号改写该断点的状态y->n
使用 enable 加断点序列号改写断点状态n->y
删除断点 delete b (加数字删除该行,不加数字删除全部)
执行程序 r(run)
n(next)逐过程的单步调试(F10)
s(step)逐语句的单步调试
p(printf)加变量名 打印变量的值
i locals 打印当前作用域中的所有临时变量的值
p *((强转为int或其他适配类型)地址名) 打印指针的值
c(continue) 继续执行
display [变量名称] 跟踪变量值
bt(backtrace)或者where 查看当前调用堆栈、定位出错位置
程序崩溃后
输入命令: gdb 可执行文件 coredump文件
使用这三种命令查看程序状态
bt
p
i locals
项目管理工具:
项目的自动化构建工具:make/Makefile
Makefile:文本文件,记录项目的构建流程和规则
编写规则:
目标对象(要生成的文件名称):依赖对象(用于判断目标对象是否需要重新生成)
tab 命令(生成这个目标对象所要执行的命令,但有时候这个命令也不一定非要生成目标对象)
预定义变量:
/
^/
/@/
<
声
明
伪
对
象
:
.
P
H
O
N
Y
:
< 声明伪对象:.PHONY:
<声明伪对象:.PHONY:(target) 伪对象:每次都需要重新生成
make:解释程序,解释执行Makefile中记录的规则,完成项目的构建。
解释执行规则:
1.只生成第一个目标对象
2.查看依赖对象是否存在,先生成依赖对象(不存在则查找依赖对象的生成规则/或者根据依赖对象时间与目标对象的时间关系判断是否生成目标对象),再生成目标对象
项目版本管理工具:git/svn
git clone 远程仓库地址
git add ./* 添加本地修改
git commit -m “备注信息” 提交本地版本仓库管理
git push origin master 将当前本地版本上传到远程主分支
进度条程序:
\r:回车符,让光标移动到行首
\n:换行符,让光标移动的下一行,不仅仅是换行,还可以刷新标准输出的缓冲区(数据并没有立即写入文件,而是先写入到缓冲区中,等到刷新缓冲区时才能将数据写入文件)
缓冲区的作用提高写入效率
系统编程
六大模块;1.进程概念、2.进程控制、3.基础IO、4.进程间通信、5.进程信号、6.多线程
进程概念:冯诺依曼体系结构、认识操作系统、进程概念、进程状态、环境变量、程序地址空间、进程调度
冯诺依曼体系结构:现代计算机硬件体系结构
输入设备(采集数据|键鼠)、输出设备(数据输出|显示器)、存储器(内存)、运算器(中央处理器cpu)、控制器
内存:易失性存储介质,断电后不存在
外存: 永久性存储介质,断电后还能存在
硬件结构决定软件行为,所有的硬件都是围绕着内存工作的
操作系统(软件):系统内核(Linux)+外部应用(shell–命令行解释器)
功能:管理计算机上的软硬件资源,让计算机的资源分配更加的合理化。
如何实现功能:先对资源进行描述(驱动程序),并对资源进行组织,再对其实施管理。
库函数封装系统调用接口
进程概念:运行中的程序。在操作系统中的进程:
进程是什么:
多进程同时进行时,CPU分时机制
PCB进程控制块 —— win
struct task_struct —— linux 包含 内存指针(程序地址)、上下文数据、程序计数器、状态信息、标识符、优先级、记账……
进程就是pcb,是一个运行中程序的描述,通过描述信息中内存指针找到程序运行代码以及数据,并通过上下文数据可以保存程序调度切换时正在处理的数据,以及通过程序计数器保存进程切换时程序即将执行的下一步指令,等等…通过这些描述性信息实现控制一个程序的运行,因此对于操作系统来说进程就是pcb
进程在操作系统中是调度切换运行的,每一个进程都有一个cpu时间片(一个进程在cpu上的运行时间段),在cpu上时间片运行完毕后则切换到下一个进程——cpu的分时机制
进程的创建以及查看:
ps 查看进程 ps -ef 查看所有进程加e 以树状形式展示加f ps -aux 查看的信息更加详细
liu内存置换算法
ps -ef | grep loop 使用管道定向查看loop的进程信息
进程状态:运行、就绪、阻塞
休眠:等待资源被满足的过程。
停止:什么都不干。
僵死:已经死了,资源未被释放
linux状态:运行状态(包含运行、就绪态,R),可中断休眠状态(S),不可中断休眠状态(D),停止状态(T)僵死状态(Z) + 前台进程(运行在当前终端的程序) IO大部分时间为等待
kill 进程id 杀死进程 加 -9 彻底清除(强杀)
ctrl + z 进程进入后台 ctrl + c 终止进程
fork() —创建子进程
进程创建: