Linux下环境基础开发

Posted L_add

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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++

背景

  1. 预处理(进行宏替换 -E)
  2. 编译(生成汇编 -S)
  3. 汇编(生成机器可识别代码->二进制文件 -c)
  4. 链接(生成可执行文件或库文件),只有函数的调用,没有函数的实现,链接的过程本质是将自己的调用过程和具体的实现过程关联起来

语法: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下环境基础开发的主要内容,如果未能解决你的问题,请参考以下文章

Linux环境 基础开发工具使用

喵呜:Linux环境基础开发工具使用篇之Linux 软件包管理器 yum

Linux bash基础特性二

Linux下docker基础环境搭建

Linux——环境基础开发工具的使用

C语言_Linux基本命令与C语言基础