Linux操作系统学习第二篇博客

坚强是说给别人听的谎言 提交于 2020-02-09 01:37:29

1、vim的三种模式

  vim是从vi发展过来的一款文本编辑器

(1)安装vim

  sudo apt-get install vim

(2)三种模式

1| 命令模式
   打开文件后,默认进入命令模式(打开文件命令:vi + 文件名)。

2| 编辑模式
   需要输入一些命令,切换到编辑模式。

3| 末行模式
   在末行模式下可以输入一些命令。

4| 有关关系
   <1> 命令模式 加冒号 进入末行模式 加w 完成保存文字 自动切换到命令模式
   <2> 命令模式 加冒号 进入末行模式 按两下ESC键进入(或者执行一个末行命令) 命令模式

2、vi中的光标位置删除、撤销操作

(1)移动光标

1|  h : 向左移动

2|  j: 向下移动

3|  k: 向上移动

4|  l: 向右移动

5|  数字0:移动到本行首部

6|  $: 移动到本行尾部

7|  gg: 移动到当前文件开头

8|  G:移动到当前文件尾部

9|  行数 + G: 移动到指定的行数

(2)删除操作

1| 删除光标后面字符: x(小写)

2| 删除光标前面字符: X(大写)

3| 删除光标所在光标的单词: dw    (如果光标在此单词的中间,则删除光标后面的单词相关内容)

4| 删除光标到行首的字符串: d + 数字0

5| 删除光标到行尾的字符串: D (或者d + $)

6| 删除光标当前行: dd

7| 删除多行: ndd  (n代表行数)

8| 撤销: u(小写)

3、vim中的复制和粘贴

(1)复制

1| 复制一行
   yy

2| 复制多行
   nyy  (n代表行数)

(2)粘贴

1| 粘贴到光标所在行的下一行
   p(小写)

2| 粘贴到光标所在行
   P(大写)

(3)剪切 == 删除

4、vim可视模式和查找

(1)可视模式

1| 切换到可视模式:  v

2| 选择内容:  方向键(h、j、k、l)

3| 有关操作:  y(进行复制)  d (进行删除)

(2)查找操作

1| / + 查找内容 (例如:/hello)     —————— 从光标位置向下查找,到最下边之后,返回到头部

2| ? + 查找内容 (例如:?hello)     —————— 从光标位置向上查找,到最上边之后,返回到尾部

3| #                               —————— 把光标移动到查找单词的身上,按# 

4| 遍历的时候使用快捷键: N/n

5| 替换当前字符: r                 —————— 只能替换单个字符

6| 查看man文档
   光标移到到某个指定的单词中 
   shift + k(小写k)
   或者 直接输入大写的K

5、命令模式切换到文本模式

  a     —————— 在光标所在位置后面插入             A     —————— 在当前行尾部插入
  i     —————— 在光标所在位置前面插入             I     —————— 在光标所在行的行首插入
  o     —————— 在光标所在行的下边开辟一个新的行    O     —————— 在光标所在行的上边开辟一个新的行
  s     —————— 删除光标后面的字符                 S     —————— 删除光标所在行

6、末行模式相关操作

(1)查找

1| s / 查找内容 / 替换内容 / g     —————— 通行全部替换

2| s / 查找内容 / 替换内容         —————— 光标所在行的仅第一次出现查找内容的替换

3| %s / 查找内容 / 替换内容 / g    —————— 替换所有的查找内容

4| 20.25 / 查找内容 / 替换内容 / g —————— 替换20-25行所有查找内容

(2)保存退出

1| 退出: q     退出不保存: q!     仅保存: w     保存退出: wq

2| 在命令模式下保存并且退出: ZZ(大写)

7、vi分屏

(1)水平分屏

1| 分屏当前文件   :号 + sp

2| 分屏指定文件   :号 + sp + 文件名

3| 在两个屏幕间进行切换: CTRL + ww

4| 保存并退出所有屏幕: :号 + wq + all

5| 保存并退出单个屏幕: 移动光标到需要关闭的屏幕中然后加冒号 + wq

(2)垂直分屏

1| 分配当前文件:  :号 + vsp

2| 分屏当前文件和指定文件:  :号 + vsp + 文件名

3| 在两个屏幕间进行切换: CTRL + ww

4| 保存并退出所有屏幕: :号 + wq + all

5| 保存并退出单个屏幕: 移动光标到需要关闭的屏幕中然后加冒号 + wq

8、vim的配置文件

vim打造IDE

  系统级配置文件目录: /etc/vim/vimre
  
  用户级配置文件目录: "/.vim/vimre

9、gcc的编译过程和一些参数

(1)安装

  sudo + apt-get + install + gcc

(2)编译

  <1>  gcc + 编译文件(格式为:xxx.c)+ -o + 编译新文件
  <2>  开始执行: ./ +  <1>中生成的新文件

(3)有关参数

 <1> 如果当前目录下没有头文件,则需要指定头文件目录
    gcc + xxx.c + -I(大写) + 绝对路径 + -o(小写) + xxx
    
 <2> 编译时指定宏
    gcc + xxx.c + -I(大写) + 绝对路径 + -o(小写) + xxx + -D(大写) + 宏名
    
 <3> 只执行预处理、编译、汇编和生成.o文件
    - c(小写)
  
 <4> 只执行预处理和编译并且生成.s文件
    - S(大写)
  
 <5> 只执行预处理不生成文件,需要重新定向到一个输出文件中
    - E(大写)
  
 <6> 生成文件的名字
    - o(小写)
  
 <7> 头文件路径
    - I(大写)
  
 <8> 宏
    - D(大写)
  
 <9> 添加gdb调试信息
    - g(小写)
  
 <10> 警告信息
    - Wall  
      
 <11> 优化代码
    - O (大写) + 1/2/3 

10、静态库的制作和使用

(1)命名规则

    lib + 库的名字 + .a

(2)制作静态库

  <1> 生成对应的.o文件
  <2> 将生成的.o文件打包
      ar + rcs + 静态库名字(libmytest.a)+ 生成所有的.0文件(*.o)
  <3> 调用静态库
      gcc + hello.c + lib/libmytest.a + -o + hello + -I /include 

(3)发布和使用静态库

   gcc + hello.c + lib/libmytest.a + -o + hello + -I + /include

11、静态库的优缺点

(1)优点

   <1> 发布程序时,不需要提供对应的库
   
   <2> 库的加载速度相对较快

(2)缺点

   <1> 库被打包到应用程序中,导致库的体积很大

   <2> 库发生改变,需要重新编译

12、动态库(共享库)的制作

(1)命名规则

    lib + 库的名字 + .so

(2)制作步骤

    <1> 生成与位置无关的代码(生成于位置无关的.o)
       gcc + -fPIC + -c + *.c + -I + /include
    
    <2> 将.o文件打包为共享库
       gcc + -shared + -o + 动态库名 + *.o + -I + /include

    <3> 调用动态库
       gcc + hello.c + lib/libmytest.so + -o + hello + -I + /include

13、共享库的使用

1|   gcc + main.c + lib/libmytest.so + -o app + -I + /include

2|   gcc + main.c + -I + include -L./lib + -I + mytest -o app 

14、解决动态库链接失败的问题

(1)放到系统库目录中 —— 当造成与系统目录重名就不弄使用

(2)临时测试

   <1> 环境变量
      LD_LIBRARY_PATH=动态库中的路径设置给该变量

   <2> 将设置的值导入到系统环境变量中
      export LD_LIBRARY_PATH=动态库中的绝对路径

   <3> 当终端关闭,设置会失效  

(3)永久设置(不常用的方法)

   <1> 在家目录下的.bashrc文件中添加一句话
      export LD_LIBRARY_PATH=动态库目录的绝对目录

   <2> .bashrc修改完成,需要重启终端

(4)其他的注意事项

   <1> 需要找动态连接器的配置文件: /etc/ld.so.conf

   <2> 动态库的路径写到配置文件中      —————— 路径为绝对路径

   <3> 更新:  sudo ldconfig -v

15、动态库的优缺点

(1)优点

   <1> 执行程序的体积小

   <2> 动态库更新的时候,不需要重新编译程序    —————— 前提条件:函数接口不能变

(2)缺点

   <1> 发布程序的时候,需要将动态库提供给用户

   <2> 动态库没有被打包到应用程序中,加载速度较慢

16、gdb的调试

(1)启动gdb

   <1> start : 只执行一步

   <2> n(next) : 单步走,无法进入函数内

   <3> s(step) : 单步走,可以进入函数内

   <4> c(continue) : 直接停在断点处

(2)查看代码

   <1> gdb + l

   <2> gdb + l + 行数或者函数名         —————— 查看当前文件相关代码

   <3> gdb + 文件名 + 行数或者函数名     —————— 查看指定文件相关代码

(3)设置断点

   <1> 设置当前文件的断点
        b(break) + 函数名或者行号
  
   <2> 设置指定文件断点
       b(break) + 文件名 + 行号或者函数名

   <3> 设置条件断点
      b(break) + 行号 + if + 条件(例如:a==20)

   <4> 删除断点
      d(delete) + 断点的编号
      获取编号: i(info) + break(b)

(4)查看设置的断点

       i(info) + break(b)

(5)单步调试

   <1> 从函数内部跳出:finish

   <2> 不进入函数体内部:n

   <3> 退出当前循环:u

(6)查看变量的值

    p(print) + 变量名

(7)查看变量的类型

    ptype + 变量名

(8)设置变量的值

    set + var + 变量名 = 赋值

(9)设置追踪变量

1|   设置:d(display) + 变量

2|   取消追踪变量:undisplay + 变量编号
     获取变量编号:i(info) + d(display)

(10)退出gdb

    quit

17、编写一个最简单的makefile

(1)认识makefile

make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。像C 语言有自己的格式、关键字和函数一样。而且在Makefile 中可以使用系统shell所提供的任何命令来完成想要的工作。Makefile(在其它的系统上可能是另外的文件名)在绝大多数的IDE 开发环境中都在使用,已经成为一种工程的编译方法。总的来说,makefile是一个管理程序源代码的工具。

(2)makefile的命名

1|  首先建立一个makefile
    方法为:直接输入命令—— vi makefile

2|  在makefile中写入相关内容,保存并且退出

3|  输入make命令执行

(3)makefile的规则

	三要素:目标、依赖、指令

(4)makefile中的三个自动变量

1|  $<:依赖中的第一个元素

2|  $@:当前规则的目标

3|  $^:依赖中所有元素

(5)简单的makefile

   app:main.c add.c sub.c mul.c
   (TAB缩进) gcc main.c add.c sub.c mul.c -o app

(6)第二个版本

   app:main.o add.o sub.o mul.o
   (TAB缩进) gcc main.o add.o sub.o mul.o -o app
   
   main.o:main.c
   (TAB缩进) gcc -c main.c
   
   add.o:add.c
   (TAB缩进) gcc -c add.c
   
   sub.o:sub.c
   (TAB缩进) gcc -c sub.c

   mul.o:mul.c
   (TAB缩进) gcc -c mul.c

(7)第三个版本

   obj = main.o add.o sub.o mul.o
   target = app
   CC(大写) = gcc               ——————  makefile中自己的维护变量
   CPPFLAGS = -I                ——————  makefile中自己的维护变量
   $(target):$(obj)          —————— $:取值符号
   (TAB缩进) $(CC) $(obj) -o $(target)

   %.o:%.c
   (TAB缩进) $(CC) -c $< -o $@
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!