C高级(Day21)
一、学习内容
-
shell指令
-
学习回顾
-
mkdir
-
创建目录
-
-
cd
-
切换目录 cd \ cd . \ cd ..
-
-
touch 、 vim
-
创建文件
-
-
rm
-
删除文件 rm -r 删除文件/删除目录
-
-
rmdir
-
只能删除空目录
-
-
cp
-
复制文件
-
-
mv
-
移动、重命名、剪切
-
-
cat
-
显示文件内容
-
-
ls
-
查看目录下的所有文件 ls -a 、ls -l
-
-
pwd
-
查看当前工作目录的位置
-
-
echo
-
类似于printf() 将信息打印在终端上
-
-
> >>
-
>搭配echo在文件中写入内容 ,>>在已有的内容后面追加内容
-
-
-
连接网络
-
查看是否连接网络
-
方法: 终端输入命令:ping baidu.com
-
未连接网络的状态
-
已连接网络的状态
-
-
连接网络
-
桥接网络
-
桥接网络连接,ubuntu和windows使用的不是同一个ip网址
-
方法一
-
方法二
-
-
-
.NAT连接网络
-
.NAT网络连接,ubuntu和windows使用的是同一个ip网址
-
方法一
-
方法二:
-
-
-
-
-
更新软件源
-
具体步骤
-
更新的原因:默认ubuntu的软件管理器是外国的,那么下载下来的软件,更新需要从国外进行拉取,速度慢,更新为国内的,速度快。
-
软件源的种类:清华源,阿里源,中科大源....
-
如何更新:百度搜素ubuntu的清华软件源....
-
-
整体步骤
-
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 更新 重启
-
-
-
在线安装/离线安装
-
在线安装
-
man apt-get (可以看具体的功能)
-
apt-get
-
常用的 比如:source download install...
-
-
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 更新
-
-
离线安装 dpkg
-
sudo dpkg 选项 软件名 -i --->install 离线安装 -r --->remove 离线卸载(不删除配置文件) -P --->purge 离线卸载(完全卸载)
-
-
-
文件相关的指令
-
head
-
功能:查看文件的前几行
-
head 文件名 默认查看指定文件的前10行 head -n 文件名 默认查看指定文件的前n行
-
-
-
tail
-
功能:查看文件的后几行
-
tail 文件名 默认查看指定文件的后10行 tail -n 文件名 默认查看指定文件的后n行
-
-
-
管道符 |
-
功能:上一个指令的输出 作为下一个指令的输入
-
格式: 指令1 | 指令2 | 指令3 | ... eg : 查看文件 /etc/passwd的第5行 head -5 /etc/passwd | tail -1 //该文件的前5行代码作为下一个指令的输入 eg: 查看文件/etc/passwd文件的倒数第2行 tail -2 /etc/passwd | head -1 //该文件的后两行的第一行
-
-
-
file
-
功能:查看文件详细信息
-
file 文件名 查看指定文件的详细信息
-
-
-
find
-
功能:查找文件 (类似于wimdows下的搜索文件操作)
-
find 文件名 ---->查看当前目录文件/目录 或者 find 文件名 -name ---->查看当前目录文件/目录 find 路径 -name 文件名 ----->查看指定路径下的文件 find 多用于模糊查找,实际就是模式匹配 * find 指定路径 -name sh* find 指定路径 -name sh\* find 指定路径 -name "sh*"
-
-
-
wc (word count)
-
功能:计算每个文件中的行数 单词个数 字节数
-
wc 文件名 在终端回显指定文件的行数 单词个数 字节数 文件名 wc -c 文件名 在终端回显指定文件的字节数 wc -w 文件名 在终端回显指定文件的单词数 wc -l 文件名 在终端回显指定文件的行数
-
-
-
grep
-
功能:实现字符串的模式匹配
-
grep "查看的字符串" 文件名 grep -i "查看的字符串" 文件名 在文件中查找字符串忽略大小写 grep -n "查看的字符串" 文件名 在文件中查找字符串显示行号 grep -w "查看的字符串" 文件名 在文件中查找字符串以单词的形式 grep "^字符串" 文件名 查找以该字符串开头的内容 grep "字符串$" 文件名 查找以该字符串结尾的内容 grep "^字符串$" 文件名 查找以该字符串开头和结尾的内容(该字符串独占一行)
-
-
-
通配符(通常可以和指令进行结合)
-
种类
-
* 匹配多个字符
-
? 匹配一个字符
-
[] 匹配一个字符,一般用于区间(有范围的)
-
-
-
chmod
-
功能 : 修改文件权限
-
文件权限: 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 文件名
-
-
-
chown
-
功能: 修改文件属主以及文件的属组
-
chown 修改属主名 文件名 (修改该文件的主名) chown :修改属组名 文件名 (修改该文件的组名) chown 修改属名: 文件名 (修改该文件的主、组名一样)
-
-
-
-
-
脑图
二、总结
学习内容概述
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` 等技术的使用与优化,提升在虚拟化环境中的开发效率。