Linux下环境基础开发
Posted L_add
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下环境基础开发相关的知识,希望对你有一定的参考价值。
Linux下环境基础开发
Linux如何安装软件?
- 源码安装
- rpm安装包-》有依赖关系
- yum
Linux 软件包管理器 yum
什么是软件包?
在Linux下安装软件,一个常用的办法是下载到程序的源码,并进行编译,得到可执行程序。但是太麻烦了,于是把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以方便获取到编译好的软件包,直接进行安装。
软件包和软件包管理器就好比 App 和应用商店的关系
yum(Yellow dog Updater Modified)是Linux下常用的一种包管理器,主要应用在Fedora,RedHat,Centos,包管理器:下载,解决依赖关系,安装,卸载
rzsz
这个工具用于windows机器和远端的Linux机器通过XShell传输文件
安装完毕之后可以通过拖拽的方式将文件上传
检查网络
注意:
关于yum的所有操作都必须保证主机网络畅通,通过ping指令验证
eg:
ping www.baidu.com
ping -3c www.baidu.com
查看软件包
通过 yum list 命令可以罗列出当前一共有那些软件包,可以用grep 筛选出关注的包
删除软件
$ sudo yum remove [名称]
安装软件
$ sudo yum install [名称]
文件互传
Windows -> Linux
1、拖拽
2、rz -E
Linux -> Windows
1、sz
附加:客户端(client)怎么知道包服务器在哪里?
答:client已经配置了目的服务器以及目的软件源信息
查看yum配置文件
$ vim /etc/yum.conf
查看yum在哪下载
扩展源安装
Linux开发工具
Vi ->精简版 Vim ->对Vi的扩展
Vim:解决代码编写的问题,本质是多模式的文本编辑器
vim的基本概念
vim主要有三种模式,分别是命令模式(command mode)、插入模式(insert mode)、底行模式(last line mode)
- 正常/普通/命令模式(Normal):控制屏幕光标的移动,字符、字或行的删除,移动复制某区段进入insert mode下,或者到last line mode
- 插入模式(Insert):只有在Insert mode下,才可以做文字输入,按[Esc]键可回到命令模式
- 末行模式(Last line):文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+:可进入该模式
- 查看你的所有模式,底行直接输入
:help vim-modes
vim的基本操作
插入模式
- i 光标不移动
- a 光标向后移动一个
- o 光标向下移动一行
命令模式
- shift+$ 光标快速移到行尾(锚点定位)
- shift+^ 光标快速移到行首
- shift+g 光标快速移到结尾
- gg 光标快速移到开头
- 行数+shift+g 光标快速移动到指定行
- yy 将光标所在行复制
- p 粘贴
- n yy 复制n1到n2一共n行
- n p 粘贴n次
- u 撤销
- Ctrl+u 取消撤销
- dd 删除光标所在行
- dd +p 剪切
- n dd 删除多行
- shift+~ 大小写切换
- w 按字符进行跳转
- b 按单词跳转,光标跳转到单词头
- e 按单词跳转,光标跳转到单词尾
- x 删除所在字符
- -X 删除光标之前的字符,不包括光标所在位置
- nx 删除n个字符
- r 替换当前光标所在字符,按[Esc]停止
- nr 连续替换当前光标n个相同字符
- shift+r 连续替换当前光标n个字符
- h,j,k,l 左 下上 右
- nl 光标移到第n个位置
- Ctrl+b 屏幕往后移动一页
- Ctrl+f 屏幕往前移动一页
- Ctrl+u 屏幕往后移动半页
- Ctrl+d 屏幕往前移动半页
- cw 更改光标所在处到字尾处
- cnw 更改n个字
底行模式
- set nonu 取消行号
- set nu 调出行号
- w 写入
- q 退出/退出光标所在的分屏
- ! 强制/不退出命令行执行
- wq 保存并退出
- ! man printf 查找接口
- vs+文件名 分屏
- Ctrl+w+w 光标多屏切换
nano
相当于记事本
语法:nano + filename
简单vim配置
配置文件的位置
在目录/etc/下有一个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:".vimrc"切换用户
进行配置
$ vim .vimrc
查看配置
$ vim /etc/vimrc
创建用户
$ sudo adduser 用户名
$ passwd 用户名 //设置新用户密码
删除用户
$ sudo userdel 用户名 -r
Linux编译器 gcc/g++
背景
- 预处理(进行宏替换 -E)
- 编译(生成汇编 -S)
- 汇编(生成机器可识别代码->二进制文件 -c)
- 链接(生成可执行文件或库文件),只有函数的调用,没有函数的实现,链接的过程本质是将自己的调用过程和具体的实现过程关联起来
语法:gcc [选项] 要编译的文件 [选项] [目标文件]
- 预处理功能主要包括宏定义,文件包含,条件编译,去注释等
- 预处理指令是以#开头的代码行
- -E 从现在开始进行程序的编译工作,把预处理做完就停下来
- -o 生成新名称,把生成的预处理文件放到 ".i"文件里
- -D 动态指定宏
- -S 进行编译
- -c 将汇编语言翻译成目标文件(可重定向目标文件)
库
为什么要有库?-》减少当前开发的工作量,是软件分工的一种体现
- 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件较大,但在运行时就不再需要库文件了
- 动态库在链接时没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。
- gcc 默认库是动态 可以通过file查看
动态库(.so)
优点:省空间(磁盘,内存空间),bin体积小,加载速度快
缺点:依赖动态库,导致可移植性较差
静态库(.a):
优点:不依赖第三方库,程序的运行可移植行好
缺点:浪费空间,加载速度慢
- -static 对生成的文件采用静态链接
- -g 生成调试信息
- -shared 尽量使用动态库
- -w 不生成任何警告信息
- -Wall 生成所有警告信息
Linux调试器-gdb
背景
- 程序的发布方式有两种,debug模式和release模式
- debug 程序本身会被加入调试信息,以便进行调试
- release 不会添加任何调试信息,不可被调试
- Linux gcc/g++出来的二进制模式,默认是release模式
- 要使用gdb调试,必须在源代码生成的二进制程序的时候,加上 -g
Linux默认发布的可执行程序:动态链接且release方式
使用
gdb binFile退出:Ctrl+d 或 quit
- list/l行号: 显示代码
- run/r :运行代码
- until 行号 :跳转
- b行号:打断点
- info b:查看断点
- d 行号:删除断点
- n:逐过程
- s :逐语句,进入函数
- p :查看变量内容或地址
- display 变量:变量常显示
- undisplay 编号:取消变量常显示
- finish :将函数运行完毕
- c(continue) :跳到下一个断点处
- n/next:单条执行
- print:打印表达式的值,通过表达式可以修改变量的值或调用函数
- p :打印变量值
- set var:修改变量值
- delete breakpoints:删除所有断点
- delete breakpoint n:删除序号为n的断点
- disable breakpoints:禁用断点
- enable breakpoints:启用断点
- display 变量:跟踪查看一个变量,每次停下来都显示它的值
- undisplay:取消设置的变量跟踪
- breaktrace:查看各级函数调用及参数
- info locals:查看当前栈帧局部变量的值
Linux项目自动化构建工具-make/Makefile
一个工程的源文件按类型、功能、模块分别放在若干目录中,makefile定义了一系列的规则来指定:那些文件需要先编译,哪些文件后编译,甚至于进行更复杂的功能操作
makefile -》自动化编译,有时只需要一个make命令,整个工程会完全自动编译,极大的提高软件开发的效率
make是一个命令工具,是一个解释makefile中指令的命令工具。make时一条命令,makefile是一个文件,二者搭配使用,完成项目自动化构建
生成可执行文件:
依赖关系:谁依赖谁
依赖方法:与之对应的关系
相当于
(从下往上执行)
删除
make clean清理
$@ $^ $<
Linux第一个小程序-进度条
\\r&&\\n
\\n:换到下一行
\\r:回车,回到下一行的开始
行缓冲区
变化秒数
#include "proc.h"
2 void Conut()
3 {
4 int i = 10;
5 while(i)
6 {
7 printf("%2d\\r",i);
8 fflush(stdout);
9 sleep(1);
10 i--;
11 }
12 }
进度条
void ProcBar()
14 {
15 int i = 0;
16 char proc[102];
17 memset(proc,'\\0',sizeof(proc));
18 const char* lable = "|/-\\\\";
19 while(i <= 100)
20 {
21 //\\033[0m\\033[1;31m%s\\033[0m 红色
22 printf("[\\033[0m\\033[1;31m%-100s\\033[0m][%d%%][%c]\\r",proc,i,lable[i%4]);
23 // printf("[%-100s][%d%%][%c]\\r",proc,i,lable[i%4]);
24 fflush(stdout);
25 proc[i] = '#';
26 sleep(1);
27 i++;
28 }
29 }
proc.h
#pragma once 1 #include "proc.h"
2 | 2 void Conut()
3 #include <unistd.h> | 3 {
4 #include <stdio.h> | 4 int i = 10;
5 #include <string.h> | 5 while(i)
6 extern void Count(); | 6 {
7 extern void ProcBar();
使用git命令行
安装git
$ yum install git
找到克隆仓库网址
$ git clone + url
复制想要传输的文件到克隆仓库
$ cp [传输文件]/* [仓库]/ -rf
$ git add .
$ git commit -m'描述'
$ git push
//查看修改的文件
$ git status
以上是关于Linux下环境基础开发的主要内容,如果未能解决你的问题,请参考以下文章