#书生大模型实战营#闯关作业L0_Linux基础+学习笔记

1.闯关任务

闯关任务:完成SSH连接与端口映射并运行hello_world.py。

1.1.InternStudio开发机

InternStudio 是大模型时代下的云端算力平台。打开链接网址:首页 (intern-ai.org.cn)icon-default.png?t=N7T8https://studio.intern-ai.org.cn/console/dashboard

即可进入控制台,创建开发机,选择默认配置即可。

创建好的开发机在我的开发机里面可以查看。

右侧工具和操作,可以点击进入开发机查看,开发机提供了三种模式可以选择切换:JupyterLab、终端和VScode。

1.2.SSH连接与端口映射

SSH,全称Secure Shell,是一种网络协议,用于计算机之间的加密登录。SSH为远程操作提供了安全的方式,使得用户能够通过不安全的网络在计算机之间传输数据,同时保证数据的完整性和安全性。SSH使用了客户端-服务器(C/S)模型。SSH连接的建立需要经历:握手、密钥交换、身份验证、会话建立的流程。

配置SSH连接

点击开发机操作界面的“SSH连接”,就会出现一个小窗口,我们"windows+R"打开本地的命令行,输入复制登陆命令并输入,提示需要输入密码,然后复制密码并输入按Enter即可。注意:命令行输入的密码不会显示,这是机制原因,不是错误哈。

登录好的界面如下:

配置SSH密钥连接(可选)

配置 SSH 密钥进行 SSH 远程连接是一种安全且高效的方式,它允许你无需每次都输入密码即可连接到远程服务器。

我们使用RSA算法生成密钥,命令为:ssh-keygen -t rsa.

 一路Enter即可。注意:这里需要在本地PowerShell生成密钥,不是开发机。然后使用Get-content命令查看公钥。

复制刚刚生成的公钥内容,输入到添加框即可,名称会自动生成。

 重新启动PowerShell,输入登陆命令,就会发现不用输入密码啦。

 端口映射

端口映射(Port Forwarding)是一种网络技术,用于在网络中将一个IP地址的一个端口的数据转发到另一个IP地址的另一个端口。通过端口映射,可以在外网访问内网中的服务或应用,实现跨越网络的便捷通信。

我们在开发机创建一个hello_world.py文件.

里面代码如下: 

import socket
import re
import gradio as gr
 
# 获取主机名
def get_hostname():
    hostname = socket.gethostname()
    match = re.search(r'-(\d+)$', hostname)
    name = match.group(1)
    
    return name
 
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
    html_code = f"""
            <p align="center">
            <a href="https://intern-ai.org.cn/home">
                <img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
            </a>
            </p>
            <h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
            <h2 style="text-align: center;">😀 Let’s go on a journey through ShuSheng Island together.</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202406301604074.jpg" alt="Logo" width="20%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()

需要先使用pip install gradio==4.29.0命令安装以下依赖包,然后在开发机上运行hello_world.py文件:

此时点击这个URL,是无法显示的,因为我们还没有进行端口映射。

接下来我们进行端口映射操作,在开发机页面,点开自定义服务,复制图中命令,然后本地powershell输入指令:

此时再点击刚刚的URL:http:127.0.0.1:7860,我们就可以看到web的显示页面啦。

2.可选任务1(Linux基础)

可选任务1(将Linux基础命令在开发机上完成一遍)

2.1.Linux基础

Linux 基础知识涵盖了从文件系统操作到系统管理的各种方面。以下是一些 Linux 基础概念和技术要点,以及一些常用的 Linux 命令。

Linux 基础概念

  1. 文件系统:Linux 使用统一的文件系统,所有文件和目录都被组织成树状结构,根目录为 /
  2. 用户和权限:Linux 中的文件和目录拥有者和权限非常重要,用于控制谁可以访问文件和进行何种操作。
  3. 进程管理:Linux 通过进程管理来调度任务,每个进程都有一个唯一的进程ID(PID)。
  4. Shell:Shell 是 Linux 的命令行解释器,用户可以通过它与系统进行交互。

常用命令

  1. ls - 列出目录内容

    • ls: 列出当前目录下的文件和目录。
    • ls -l: 以长格式列出,显示文件的详细信息。
    • ls -a: 显示所有文件,包括隐藏文件(以.开头)。
  2. cd - 改变当前工作目录

    • cd /path/to/directory: 进入指定目录。
    • cd ..: 进入上级目录。
    • cd ~: 进入用户主目录。
  3. mkdir - 创建目录

    • mkdir directory_name: 创建一个目录。
    • mkdir -p path/to/directory: 创建多级目录。
  4. rm - 删除文件或目录

    • rm file_name: 删除一个文件。
    • rm -r directory_name: 删除一个目录及其所有子目录和文件。
    • rm -rf directory_name: 强制删除,不提示确认。
  5. cp - 复制文件或目录

    • cp source destination: 复制文件或目录。
    • cp -r dir_source dir_destination: 复制目录及其内容。
  6. mv - 移动或重命名文件或目录

    • mv old_name new_name: 重命名文件或目录。
    • mv source destination: 移动文件或目录。
  7. touch - 创建或修改文件的时间戳

    • touch file_name: 创建一个新文件或更新现有文件的时间戳。
  8. grep - 在文件中搜索文本模式

    • grep pattern file: 在文件中搜索模式。
    • grep -r pattern directory: 在目录及其子目录中递归搜索模式。
  9. find - 查找文件

    • find /path -name "pattern": 在指定路径下查找符合模式的文件。
  10. wc - 统计文件的字节数、字数、行数等

    • wc -l file: 计算文件中的行数。
  11. top - 显示系统进程状态

    • top: 显示实时的系统资源使用情况和运行中的进程。
  12. ps - 显示进程状态

    • ps aux: 显示所有用户的进程状态。
  13. kill - 发送信号给进程

    • kill PID: 发送终止信号给进程。
    • kill -9 PID: 强制终止进程。
  14. cat - 输出文件内容

    • cat file: 输出文件内容到屏幕。
  15. less - 浏览文件内容

    • less file: 分页显示文件内容,支持上下翻页。
  16. tail - 显示文件末尾部分内容

    • tail -n 10 file: 显示文件最后10行。
  17. head - 显示文件前部分内容

    • head -n 10 file: 显示文件前10行。
  18. ifconfig - 显示或配置网络接口

    • ifconfig eth0: 显示或配置eth0网络接口。
  19. netstat - 显示网络连接、路由表等信息

    • netstat -tuln: 显示所有监听的TCP和UDP端口。
  20. ping - 测试网络连通性

    • ping www.example.com: 向指定的网站发送ICMP请求。
  21. curl - 从网络获取或发送数据

    • curl http://www.example.com: 获取网页内容。
  22. wget - 下载文件

    • wget http://www.example.com/file.zip: 下载指定URL的文件。
  23. whoami - 显示当前用户的名字

    • whoami: 显示当前登录用户的名字。
  24. sudo - 以管理员身份运行命令

    • sudo command: 以管理员权限运行命令。
  25. chmod - 更改文件权限

    • chmod 755 file: 更改文件权限。
  26. chown - 更改文件所有者

    • chown user:group file: 更改文件的所有者和组。
  27. tar - 归档文件

    • tar -czvf archive.tar.gz file: 创建压缩的tar归档文件。
    • tar -xzvf archive.tar.gz: 解压tar归档文件。
  28. ssh - 安全外壳协议

    • ssh user@hostname: 通过SSH连接到远程主机。
  29. scp - 安全复制文件

    • scp file user@hostname:/path: 通过SSH复制文件到远程主机。

3.可选任务2

可选任务2:使用 VSCODE 远程连接开发机并创建一个conda环境。

3.1使用VSCode远程连接开发机

使用 Visual Studio Code (VSCode) 远程连接到开发机是一种非常方便的方式来管理和编辑远程服务器上的文件。

首先在扩展插件里面输入ssh,搜索找到Remote-SSH插件并安装。

安装完成后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。因为前面已经配置过密钥,所以这次不需要再次输入密码了。

我们将登录命令复制下来,然后将命令粘贴到弹出的窗口中,最后回车。然后在右下角弹出来的提示窗口中点击“连接”就可以远程到开发机中了。

3.2创建conda环境

conda是一个开源的包管理系统和环境管理系统。这是一个很强大的环境管理系统,我们使用conda可以帮忙管理不同项目不同环境不同版本的软件包,防止出现版本错乱和不兼容。

我们使用“CTRL+shift+~”激活终端窗口;开发机已经给我们安装了一个base的环境,我们输入"conda --version"可以查看当前的conda版本;我们输入命令“conda create -n test1 python=3.10"将会创建一个新的name=’test'的Python版本3.10的新的虚拟环境。一路Enter,等待即可。

命令"conda active test1"可以激活我们刚刚创建的这个名为test1的环境。

4.可选任务3

可选任务3:创建并运行test.sh文件

Shell 脚本是一种使用 shell 命令语言编写的脚本文件,用于自动化一系列命令或任务。

我们在前面创建test1的环境后,输入命令:conda env export --name test1 >test1.yml。可以导出我们创建好的名为”test1“的虚拟环境。

我们编写一个名为”test.sh“的文件,目的是还原我们导出的这个虚拟环境。

我们在根目录下创建一个test.sh文件,写入以下内容:

#!/bin/bash

# 定义导出环境的函数
export_env() {
    local env_name=$1
    echo "正在导出环境: $env_name"
    # 导出环境到当前目录下的env_name.yml文件
    conda env export -n "$env_name" > "$env_name.yml"
    echo "环境导出完成。"
}

# 定义还原环境的函数
restore_env() {
    local env_name=$1
    echo "正在还原环境: $env_name"
    # 从当前目录下的env_name.yml文件还原环境
    conda env create -n "$env_name" -f "$env_name.yml"
    echo "环境还原完成。"
}

# 检查是否有足够的参数
if [ $# -ne 2 ]; then
    echo "使用方法: $0 <操作> <环境名>"
    echo "操作可以是 'export' 或 'restore'"
    exit 1
fi

# 根据参数执行操作
case "$1" in
    export)
        export_env "$2"
        ;;
    restore)
        restore_env "$2"
        ;;
    *)
        echo "未知操作: $1"
        exit 1
        ;;
esac

 这里我切换到base环境了,然后可以使用命令:chmod +x test.sh,为脚本赋予权限。再然后输入命令:./test.sh restore test1,就可以还原之前创建的test1环境了。

完结。觉得有用的小伙伴,点赞,收藏,关注,三连吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值