* 递归-删除文件夹
* 递归-拷贝文件夹
* 扩展: shutil模块的使用
* Linux系统简介
* Linux环境搭建
* FinalShell连接Linux虚拟机
* Linux命令介绍
---
1.递归-删除文件夹
```python
"""
案例:
递归-删除文件夹
细节:
1. 出口 = 是文件, 就删除.
2. 规律 = 是文件夹, 就递归.
3. 细节 = 当前文件夹为空, 就删除该文件夹.
"""
# 导包
import os
# 1. 自定义函数 delete_dir(), 表示: 删除文件夹.
def delete_dir(path):
# 1.1 判断path是否是合法的文件夹路径.
if os.path.isdir(path):
# 1.2 走到这里, 说明path是合法的文件夹路径, 获取其所有的 子级文件(夹)名.
child_names = os.listdir(path) # ['aa', 'xyz', '绕口令.txt', '面试题.py']
# 1.3 遍历上述的 子级名, 将其拼接成: 绝对路径形式.
for child_name in child_names:
# 例如: child_name 为 'aa', '绕口令.txt'
child_path = path + '/' + child_name # 'd:/src/aa', 'd:/src/绕口令.txt'
# 1.4 判断child_path是否是文件
if os.path.isfile(child_path):
# 1.5 走到这里, 说明child_path是文件, 就删除.
os.remove(child_path)
else:
# 1.6 走到这里, 说明child_path是文件夹, 就递归.
delete_dir(child_path)
# 1.7 核心细节: 走到这里, 说明当前文件夹(path)为空, 删除即可.
os.rmdir(path) # remove directory: 删除目录(文件夹)
else:
# 1.3 走到这里, 说明path不是合法的文件夹路径, 提示错误.
print('路径有误, 不是合法的文件夹路径!')
# 2. 在main函数中, 测试调用.
if __name__ == '__main__':
delete_dir('d:/src')
```
2.递归-拷贝文件夹
```python
"""
案例:
递归-拷贝文件夹
出口和规律:
1. 出口 = 是文件, 就拷贝.
2. 规律 = 是文件夹, 就递归.
细节:
1. 数据源路径 和 目的地路径必须合法.
2. 在目的地文件夹下 创建1个和 数据源文件夹 同名的文件夹.
3. 注意拷贝方式, 要用 rb 和 wb 二进制方式拷贝.
4. 注意数据源 和 目的地的 路径 问题.
"""
# 导包
import os
# 1. 定义函数 copy_dir(src_path, dest_path), 拷贝文件夹.
def copy_dir(src_path, dest_path):
"""
自定义函数, 用于拷贝文件夹的.
:param src_path: 数据源文件夹路径
:param dest_path: 目的地文件夹路径
:return: 无
"""
# 1.1 判断数据源文件夹 和 目的地文件夹 是否是合法路径.
if os.path.isdir(src_path) and os.path.isdir(dest_path): # 例如: src_path = 'd:/src', dest_path = 'd:/dest'
# 1.2 走到这里, 说明数据源 和 目的地都是合法的文件夹, 需要在 目的地文件夹下创建1个和数据源文件夹 同名的文件夹.
# 1.2.1 拼接新的目的地路径.
new_dest_path = dest_path + '/' + os.path.basename(src_path) # new_dest_path = 'd:/dest/src'
# 1.2.2 判断新的目的地路径如果啊不存在, 就创建.
if not os.path.isdir(new_dest_path):
os.mkdir(new_dest_path)
# 1.4 获取数据源文件夹下所有的子级(名)
child_names = os.listdir(src_path) # ['aa', 'xyz', '面试题.py', '绕口令.txt']
# 1.5 遍历上述的 数据源文件夹下的子级名, 将其拼接成合法的 数据源文件(夹)路径.
for child_name in child_names:
child_path = src_path + '/' + child_name # child_path = 'd:/src/aa' 'd:/src/面试题.py'
# 1.6 判断child_path是文件, 还是文件夹.
if os.path.isdir(child_path):
# 1.6.1 走到这里, 说明 child_path是文件夹, 就递归.
copy_dir(child_path, new_dest_path)
else:
# 1.6.2 走到这里, 说明 chi ld_path是文件, 就拷贝.
# 1.7 拼接目的地文件名.
dest_file_path = new_dest_path + '/' + child_name # dest_file_path = 'd:/dest/src/面试题.py'
# 1.8 具体的拷贝动作, 即: 把 child_path => dest_file_path
with open(child_path, 'rb') as src_f, open(dest_file_path, 'wb') as dest_f:
while True:
data = src_f.read(8192)
if not data:
break
dest_f.write(data)
else:
# 1.3 走到这里, 说明路径不合法.
print('路径有误, 请录入合法的文件夹路径!')
# 2. 在main函数中测试.
if __name__ == '__main__':
copy_dir('d:/src', 'd:/dest')
```
3.扩展-shutil模块
```python
"""
扩展:
shutil属于Python内置的模块, 可以实现 拷贝文件, 文件夹等.
涉及到的函数:
copyfile(src_path, dest_path) 拷贝文件
copytree(src_path, dest_path) 拷贝文件夹
"""
# 导包
import shutil
if __name__ == '__main__':
# 1. 拷贝文件, 双方都要是 文件的路径.
# shutil.copyfile('d:/绕口令.txt', 'd:/dest/1.txt')
# shutil.copyfile('d:/绕口令.txt', 'd:/dest/ai30_基础班.py')
# 2. 拷贝文件夹, 细节: 目的地文件夹路径必须不存在, 否则报错.
# 例如: 'd:/src' => 'd:/dest', 则: 'd:/'必须存在, 'd:/dest'必须不存在.
shutil.copytree('d:/src', 'd:/dest')
# shutil.copytree('d:/src', 'd:/dest/src')
```
4.计算机简介
* 概述
> 电子计算机, 电脑, PC, Computer, 就是由 软件 + 硬件组成的 电子设备.
* 组成
* 计算机硬件
* CPU(运算器, 控制器)
* 存储器(内存, 外存)
* 输入设备
* 输出设备
* 计算机软件
* 系统软件: 充当 用户 和 计算机硬件之间的 桥梁的.
* PC端: **windows, Linux, Mac**
* 移动端: Android, 鸿蒙, IOS
* 应用软件: 完成某些功能的.
* 总结:
用户 操作 操作系统, 由操作系统 操作计算机硬件 来干活.
5.Linux简介
* 概述
> 它是在服务器端应用比较多的一款操作系统, 相对更加的稳定一点.
>
> 日志主要是往磁盘中写的, 只会占用少量的内存, 相对更加稳定.
* 作者
* 林纳斯·托瓦兹
* 吉祥物
* 企鹅
* 特点
* 开源, 免费, 安全, 稳定
* Linux的内核下载地址
* https://mirrors.edge.kernel.org/pub/linux/kernel/
* Linux的发行版介绍
* 组成
* Linux的发行版 = Linux内核 + 系统库 + 系统软件
* 常见的发行版:
* Ubantu: 乌班图, 界面做的比较好, 适合小白入门.
* RedHat: 小红帽, IBM公司的产品, 收费的.
* CentOS: IBM公司的产品, 可以理解为 小红帽的 阉割版.
* 中标麒麟, 红旗: 国产的.
> 课程中, 我们用 CentOS 7.X
6. 虚拟化软件介绍
* 概述
* 虚拟化软件 = 可以帮我们"买"电脑的软件, 即: 通过软件模拟硬件, 并可以安装真实的操作系统.
* 常用的虚拟化软件
* Vmware: 我们用的是这个, Vmware17, 16, 15均可.
* Virtual Box: 了解即可, Oracle公司的.
* Vmware软件具体使用
* 下载
> 官网: https://vmware.com/
>
> 直接下载地址: https://www.vmware.com/cn/products/workstation-pro.html
* 安装
* 傻瓜式安装, 下一步下一步即可.
* 安装路径要合法, 不要出现中文, 空格特殊符号等.
* 验证是否安装成功
* 卸载
1. 去控制面板卸载.
2. 记得用 CCleaner 清理注册表.
7.挂载虚拟机
* 概述
* 虚拟机可以自己手动安装, 详见 我给的安装文档, 一步步安装即可.
* 但是对于初学者来讲, 有点难度, 所以**大家直接用 我给的虚拟机**即可.
* 挂载虚拟机的方式
* 方式1: 直接双击 ***.vmx** 即可
* 方式2: 通过 Vmware软件, 进行挂载
* **细节: 如果你装的是Vmware16, 或者15, 记得修改下 *.vmx文件的参数, 然后再挂载.**
8.FinalShell软件连接虚拟机
* 前提
* 需要在你电脑上先安装FinalShell这个软件.
* 配置FinalShell连接Linux虚拟机的流程图
* 具体的配置如下
1. 修改**Vmware软件**的 **虚拟网络编辑器**
2. 修改Windows系统的 VMNet8网卡的信息
3. 配置**FinalShell软件**的参数
9.扩展_Linux的快照
* 概述/作用
* 快照是一种故障恢复手段, 类似于: 玩儿单机游戏的存档操作, 下次还可以读档, 然后接着往下玩儿.
* 快照的制作
> 关闭虚拟机, 注意: 开机状态也可以拍摄快照, 只不过文件较大, 不推荐.
* 恢复到指定的快照
* 关于快照的管理
1. 快照最好做到 勤拍勤删.
2. 快照, 如非必要, 一般不建议超过3个.
10.Linux的目录结构介绍
* 概述
* windows系统属于 **森系结构(森林结构)**, 每个盘符都可以看做是一棵树.
* Linux系统属于 **树状结构**, 根目录为: **/**, 所有的目录都是它的子级.
* 树状结构(特点)介绍
1. 有 且只能有 1个根节点.
2. 每个节点都可以有任意多个子节点及1个父节点, 根节点除外(它只有子节点).
3. 没有子节点的节点称之为: 叶子节点.
* Linux常用目录介绍
* bin: 里边存放的是 Linux的 基础命令.
* sbin: 里边存放的是 Linux的 管理类(系统类)命令.
* etc: 里边放的是Linux的配置信息(配置文件等)
* home: 存放普通账号信息的目录.
* root: 存放root账号相关信息的目录, root账号 = 超级管理员(超管)账号
11.Linux的命令格式介绍
* 命令格式
```sh
# Linux命令也叫Shell命令, 脚本命令. Linux的Shell本身就是一门脚本语言.
# 命令格式如下, 这里的中括号表示: 可选的意思.
command [-options] [parameter]
命令名 [-选项] [参数]
```
* Linux基础命令之ls命令
```sh
# ls命令介绍, 来源于 list单词, 即: 查看当前目录的所有子级(注意: 不包括子级的子级)
# ls命令格式
ls [-a -l -h] [路径] # all(所有), line(行), human(人性化...)
# 示例
ls # 等价于: ls ./ 即: 查看当前目录下的子级(不包括隐藏的)
ls /root # 查看指定路径的子级
ls -a # 查看当前路径下所有的子级(包括隐藏)
ls -l # 以行的方式查看当前路径下的子级(不包括隐藏), 可以简写为: ll
ls -la # 等价于: ls -al, 即: 以行的方式查看当前路径下的子级(包括隐藏)
ls -lah # 以行的方式, 人性化的展示当前路径下的子级(包括隐藏)
ll /root # 等价于: ls -l /root
```
* Linux基础命令之pwd命令
```sh
# pwd命令, 来源于: print word directory, 打印工作目录, 即: 当前在哪个路径下.
pwd # 当前当前的工作目录, 大白话解释: 当前在哪个目录.
```
* Linux基础命令之cd命令
```sh
# cd命令, 来源于: change directory, 改变目录, 切换目录.
cd 文件夹路径 # 切换到指定的文件夹路径下.
# 几种特殊写法.
cd ~ # 回家, root账号 => /root, 其它账号 => /home/账号名
cd - # 在最近的两个目录间做切换
cd .. # 返回上级路径
cd ../.. # 返回上上级路径
cd # 回家, 等价于 cd ~
cd ./ # 切换到当前目录, 无意义, 看看即可. 即: ./代表当前目录
# 绝对路径 和 相对路径介绍
绝对路径: 固定的, 写四的路径, 以 根目录开头, 例如: /root/1.txt
相对路径: 直接写, 或者 ./开头即可, 例如: cat 1.txt 等价于 cat ./1.txt
```
* Linux基础命令之mkdir
```sh
# mkdir命令, 来源于: make directory, 创建文件夹的.
# 格式
mkdir [-p] 文件夹路径
# 示例
mkdir aa # 在当前目录下创建aa文件夹
mkdir /root/aa # 在root目录下创建文件夹aa
mkdir /aa/bb/cc # 创建多级目录, 前提: /aa/bb必须存在, 否则报错.
mkdir -p /aa/bb/cc # 创建多级目录.
```
* Linux的文件操作命令相关
```sh
# touch, 创建文件的, 任意文件均可, 只不过没有内容.
# 格式
touch 文件的路径(相对路径, 绝对路径均可)
# 示例
touch 1.txt 2.txt 3.avi /root/aa/hg.txt abc.jpg
# cat, 来源于 catch, 表示查看文件内容的.
# 一次性看所有, 如果文件内容过大, 会翻页(即: 只保留最后1页)
# 格式
cat 文件路径
# 示例
cat anaconda-ks.cfg
# more, 可以分页查看文件的内容.
more 文件路径 # 按b(back, 上一页), d(down, 下一页), q(quit, 退出)
# cp, 来源于 copy, 表示拷贝文件(夹).
cp [-r] 数据源路径 目的地路径
# mv, 来源于move, 表示: 剪切
mv 数据源路径 目的地路径
# rm, 来源于 remove, 表示: 删除文件, 文件夹(包括其子级)
rm -rf 文件或者文件夹的路径 # -r: recursive(递归), -f: force(强制)
rm -rf /* # "坐牢命令", 要慎重.
```
* Linux编辑文件命令-vi
```sh
# vi 和 vim命令, 都是编辑文件的, 类似于: windows系统记事本.
# 它们的操作都是一样的, 区别在于: 是否会高亮显示内容. vi不会, vim会.
# 大白话: vi => windows的普通记事本. vim => windows高级记事本, 例如: sublime
# step1: 打开文件
vi 文件名 或者 wim 文件名 # 例如: vim 1.txt
# step2: 进入到编辑模式(默认是命令模式)
按下字母 i(insert: 插入)
# step3: 正常的编辑文件即可.
该怎么改就怎么改.
# step4: 退出编辑模式, 进入到命令模式
按下键盘的 esc 键
# step5: 保存退出即可
:wq # write and quit, 保存并退出
:q # quti, 退出不保存, 前提: 你没修改文件.
:q! # 强制退出不保存, 适用于: 修改了文件内容, 但是最后又不想保存的.
```
* Linux基础命令-echo, 重定向
```sh
# echo, 类似于Python的 print(), 把内容输出到控制台
echo 内容
# 重定向, >>(追加写入), >(覆盖写入)
echo 'hello world' > 1.txt
```
* Linux基础命令-关机命令
```sh
# 关机命令
shutdown -h now
# 重启命令
reboot
```