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

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.save2.修改 /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` 等技术的使用与优化,提升在虚拟化环境中的开发效率。

相关文章:

  • XPath基础知识点讲解——用于在XML中查找信息的语言
  • [vulnhub] Jarbas-Jenkins
  • numpy is not available
  • 982. 按位与为零的三元组
  • UI设计师面试整理-工具和技术技能
  • list(二) (list模拟实现)
  • HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南
  • CANopen开源库canfestival的移植
  • 深度解析APP软件开发:构建卷轴式分销系统的实践探索
  • 一个PDF样本册免费上传网站
  • 【HTTP 和 HTTPS详解】3
  • 【PAM】Linux登录认证限制
  • 前后端传参
  • 企业内训|大模型/智算行业发展机会深度剖析-某数据中心厂商
  • EZUIKit.js萤石云vue项目使用
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • axios 和 cookie 的那些事
  • ES6核心特性
  • IDEA 插件开发入门教程
  • k8s如何管理Pod
  • Less 日常用法
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PHP变量
  • python_bomb----数据类型总结
  • React+TypeScript入门
  • Twitter赢在开放,三年创造奇迹
  • vagrant 添加本地 box 安装 laravel homestead
  • Webpack 4 学习01(基础配置)
  • 分布式熔断降级平台aegis
  • 分类模型——Logistics Regression
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于组件的设计工作流与界面抽象
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 配置 PM2 实现代码自动发布
  • 用element的upload组件实现多图片上传和压缩
  • 正则学习笔记
  • elasticsearch-head插件安装
  • Prometheus VS InfluxDB
  • 如何正确理解,内页权重高于首页?
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​configparser --- 配置文件解析器​
  • $forceUpdate()函数
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)逆序输出字符串
  • (k8s)kubernetes集群基于Containerd部署
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (三)c52学习之旅-点亮LED灯
  • (三)SvelteKit教程:layout 文件
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • .NET C# 使用GDAL读取FileGDB要素类
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题