0基础跟德姆(dom)一起学AI Python基础11-递归,Linux入门

* 递归-删除文件夹
* 递归-拷贝文件夹
* 扩展: 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
  ```

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值