当前位置: 首页 > article >正文

C高级(Day21)

一、学习内容

  1. shell指令

    1. 学习回顾

      1. mkdir
        1. 创建目录

      2. cd
        1. 切换目录 cd \ cd . \ cd ..

      3. touch 、 vim
        1. 创建文件

      4. rm
        1. 删除文件 rm -r 删除文件/删除目录

      5. rmdir
        1. 只能删除空目录

      6. cp
        1. 复制文件

      7. mv
        1. 移动、重命名、剪切

      8. cat
        1. 显示文件内容

      9. ls
        1. 查看目录下的所有文件 ls -a 、ls -l

      10. pwd
        1. 查看当前工作目录的位置

      11. echo
        1. 类似于printf() 将信息打印在终端上

      12. > >>
        1. >搭配echo在文件中写入内容 ,>>在已有的内容后面追加内容

    2. 连接网络
      1. 查看是否连接网络
        1. 方法: 终端输入命令:ping baidu.com

        2. 未连接网络的状态

        3. 已连接网络的状态

      2. 连接网络
        1. 桥接网络

          1. 桥接网络连接,ubuntu和windows使用的不是同一个ip网址

            1. 方法一

            2. 方法二

        2. .NAT连接网络

          1. .NAT网络连接,ubuntu和windows使用的是同一个ip网址

            1. 方法一

            2. 方法二:

    3. 更新软件源

      1. 具体步骤
        1. 更新的原因:默认ubuntu的软件管理器是外国的,那么下载下来的软件,更新需要从国外进行拉取,速度慢,更新为国内的,速度快。

        2. 软件源的种类:清华源,阿里源,中科大源....

        3. 如何更新:百度搜素ubuntu的清华软件源....

      2. 整体步骤
        1. 1.查看/etc/apt/sources.list文件是否存在,存储的软件源
              需要把给文件备份
                  sudo cp /etc/apt/sources.list  /etc/apt/sources.list.save
                  
          2.修改 /etc/apt/source.list 源文件
                   打开:sudo vim  /etc/apt/sources.list  
                   删除原内容: ggdG   全文删除
                   替换新的软件源        
                   保存退出:wq
          3.配置文件生效
              sudo apt-get update           更新
              重启   

    4. 在线安装/离线安装

      1. 在线安装
        1. man apt-get (可以看具体的功能)

        2. apt-get

          1. 常用的 比如:source download install...

        3. 1. sudo apt-get install 软件名    在线安装软件
              eg: sudo apt-get install oneko
                 运行: oneko
                 后面运行:oneko &
                 杀死进程:kill -9 进程号
          2. sudo apt-get remove 软件名    卸载软件(配置文件包不被删除)
          
          3. sudp apt-get clean  清理软件包,默认是一下路径
              /var/cache/apt/archives
          4. sudo apt-get download   在线下载安装包到当前目录下
          5. sudo apt-get update 更新

      2. 离线安装 dpkg
        1. sudo dpkg  选项                  软件名
                      -i      --->install  离线安装
                      -r      --->remove    离线卸载(不删除配置文件)
                      -P      --->purge     离线卸载(完全卸载)

    5. 文件相关的指令

      1. head
        1. 功能:查看文件的前几行

          1. head 文件名     默认查看指定文件的前10行
            head -n 文件名  默认查看指定文件的前n行

      2. tail
        1. 功能:查看文件的后几行

          1. tail 文件名      默认查看指定文件的后10行
            tail -n 文件名   默认查看指定文件的后n行

      3. 管道符 |
        1. 功能:上一个指令的输出 作为下一个指令的输入

          1. 格式:  指令1  |    指令2     | 指令3 |  ...
            
            eg :   查看文件 /etc/passwd的第5行
                   head -5 /etc/passwd  |  tail -1  //该文件的前5行代码作为下一个指令的输入
                   
            eg: 查看文件/etc/passwd文件的倒数第2行
                tail -2 /etc/passwd | head -1 //该文件的后两行的第一行

      4. file
        1. 功能:查看文件详细信息

          1. file 文件名 查看指定文件的详细信息

      5. find
        1. 功能:查找文件 (类似于wimdows下的搜索文件操作)

          1. find 文件名   ---->查看当前目录文件/目录
            或者 find 文件名 -name    ---->查看当前目录文件/目录
            
            find 路径 -name 文件名   ----->查看指定路径下的文件
            
            find 多用于模糊查找,实际就是模式匹配 *
            find 指定路径 -name sh*
            find 指定路径 -name sh\*
            find 指定路径 -name "sh*"

      6. wc (word count)
        1. 功能:计算每个文件中的行数 单词个数 字节数

          1. wc 文件名   在终端回显指定文件的行数 单词个数 字节数 文件名
            wc -c 文件名 在终端回显指定文件的字节数 
            wc -w 文件名 在终端回显指定文件的单词数
            wc -l 文件名 在终端回显指定文件的行数

      7. grep
        1. 功能:实现字符串的模式匹配

          1. grep "查看的字符串" 文件名   
            
            grep -i "查看的字符串" 文件名    在文件中查找字符串忽略大小写
            
            grep -n "查看的字符串" 文件名    在文件中查找字符串显示行号
            
            grep -w "查看的字符串" 文件名    在文件中查找字符串以单词的形式
            
            grep "^字符串" 文件名   查找以该字符串开头的内容
            grep "字符串$" 文件名   查找以该字符串结尾的内容
            grep "^字符串$" 文件名   查找以该字符串开头和结尾的内容(该字符串独占一行)

      8. 通配符(通常可以和指令进行结合)
        1. 种类

          1. * 匹配多个字符

          2. ? 匹配一个字符

          3. [] 匹配一个字符,一般用于区间(有范围的)

      9. chmod

        1. 功能 : 修改文件权限

          1. 文件权限:
                r:读   w:写    x:执行     -:不具备权限
            文件权限的分类:
                u: user  文件拥有者
                g: group  文件拥有者所在组
                o: other  其他用户
                a: all  所有用户
                
            +:在原来的权限基础上增加权限
            -:在原来的权限基础上减少权限
            =:设置新的权限
            
            方式1: 使用字符方式修改
               chmod u+x,g+w  文件名
               chmod g-r 文件名
               chmod o=w 文件名
               
            方式2:八进制修改权限
            r w x
            1 1 1
            chmod 777 文件名
            chmod 664 文件名

      10. chown

        1. 功能: 修改文件属主以及文件的属组

          1. chown 修改属主名 文件名    (修改该文件的主名)
            
            chown :修改属组名 文件名    (修改该文件的组名)
            
            chown 修改属名: 文件名    (修改该文件的主、组名一样)

  2. 脑图

二、总结

学习内容概述

1. 虚拟机网络配置:

通过 `ping` 命令测试虚拟机与外部网络的连通性。学习如何使用 NAT 网络模式,并配置虚拟机的网络适配器以实现网络通信。

2. 共享文件夹设置:

通过虚拟机共享主机文件夹,学习如何在 Linux 虚拟机中访问主机系统中的文件,配置 `VirtualBox` 的共享文件夹功能,确保文件传输的便捷性。

3. 软件包管理工具:

学习如何使用 `apt-get` 命令在 Ubuntu 系统上安装、更新和删除软件包,并理解依赖关系处理的基本机制。

4. 内核模块的管理:

学习加载、卸载 Linux 内核模块的基本命令,如 `modprobe`、`lsmod` 等,掌握内核模块的基本概念,并能够在需要时手动管理内核模块。

5. Makefile 和编译过程:

理解 `Makefile` 在 C/C++ 项目中的作用,学习如何编写简单的 `Makefile` 文件,管理项目的多文件编译。

6. 系统调用与设备驱动开发:

学习如何在 C 中使用系统调用与设备驱动相关的操作,掌握文件描述符、设备文件等底层概念。

学习难点

1. 虚拟机与网络配置的调试:

配置虚拟机的网络模式,特别是 NAT 和桥接模式时,容易出现网络不通的情况,需要深入理解虚拟机的网络适配器和主机的网络配置之间的交互。

2. 共享文件夹的权限设置:

配置共享文件夹时,可能会遇到权限问题或文件不可见的情况,需要理解 Linux 文件系统的权限管理,并正确配置虚拟机用户的访问权限。

3. 内核模块的加载与卸载:

内核模块与系统内核紧密相关,错误的操作可能导致系统不稳定,因此如何安全、正确地加载和卸载模块是学习的难点。

4. Makefile 的编写:

对于大型项目,`Makefile` 的编写复杂且要求较高,特别是多文件编译和依赖关系的处理,容易出现编译错误或依赖问题。

主要事项

1. 网络配置和测试:

确保虚拟机能够与外部网络正常通信,特别是在跨网络模式的切换时,使用 `ping` 和其他网络诊断工具进行测试和排障。

2. 共享文件夹的使用:

通过正确配置共享文件夹,实现主机与虚拟机之间的文件共享,注意文件的读写权限,避免权限冲突问题。

3. 包管理器的高效使用:

使用 `apt-get` 等工具进行软件包管理,确保安装软件的正确性和依赖关系的解决,并能及时更新和清理不需要的软件包。

4. 内核模块管理:

在必要时掌握如何使用 `modprobe`、`rmmod` 等命令管理内核模块,并熟悉常见的内核模块问题处理。

5. Makefile 编写:

通过 `Makefile` 文件管理项目编译,掌握规则定义、变量使用等技巧,确保项目能正确、快速地进行编译。

 未来学习的重点

1. Linux 内核开发:

进一步深入学习 Linux 内核开发,理解内核空间与用户空间的交互,探索设备驱动开发和系统调用的实现原理。

2. 网络编程与调试:

掌握更多 Linux 下的网络编程知识,学习如何调试网络连接,理解网络协议栈的基本原理,特别是在虚拟化环境下的网络调试。

3. 高级 Makefile 使用:

继续深入学习 `Makefile`,理解自动化编译的高级用法,如模式匹配、自动依赖生成,以及如何通过 `Makefile` 实现复杂项目的高效构建。

4. 虚拟化技术深入研究:

学习虚拟化技术的底层实现原理,探索如 `KVM`、`Docker` 等技术的使用与优化,提升在虚拟化环境中的开发效率。


http://www.kler.cn/a/323870.html

相关文章:

  • 一种时间戳对齐的方法(离线)
  • 【3D Slicer】的小白入门使用指南四
  • VoIP是什么?
  • 如何实现主备租户的无缝切换 | OceanBase应用实践
  • 探索 Python HTTP 的瑞士军刀:Requests 库
  • Wireshark中的length栏位
  • 【吊打面试官系列-MySQL面试题】实践中如何优化 MySQL?
  • 基于单片机的指纹打卡系统
  • 视频分割怎么弄?国内外Top 7视频剪辑软件大盘点,新媒体必看!
  • 一键自动化配置OpenHarmony编译环境
  • 花都狮岭寄宿自闭症学校:开启孩子的生命之门
  • 给Ubuntu虚拟机设置静态IP地址(固定IP)
  • 基于ASRPRO的语音应答
  • 基于php的在线租房管理系统
  • 如何使用Apache Kafka处理实时数据
  • 探究Spring的单例设计模式--单例Bean
  • 主从蓝牙配对_笔记(HC-05)
  • 阿里云图形化管理工具(oss-browser、oss浏览器、AcceassKeyId、AccessKeySecret)
  • Android 点击其他组件让输入框失去焦点
  • 基于php摄影门户网站
  • 手游和应用出海资讯:三七新游首月收入突破700万元;领英尝试推出游戏功能以增加用户使用时长
  • leetcode:LCR 169. 招式拆解 II(python3解法)
  • 智能Ai语音机器人的应用价值有哪些?
  • 【逐行注释】扩展卡尔曼滤波EKF和粒子滤波PF的效果对比,MATLAB源代码(无需下载,可直接复制)
  • window下 php 安装 lua扩展
  • Docker容器的使用