书生-入门岛第1课——Linux 前置基础作业

146 阅读19分钟

SSH连接与端口映射并运行hello_world.py

image.png

本地Windows连接远程主机

ssh -p *** root@ssh.intern-ai.org.cn -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null

输入密码,连接成功

image.png

将Linux基础命令在开发机上完成一遍:

1.hostname查看开发机名称 image.png

2.使用uname -a查看开发机内核信息

image.png

3.使用lsb_release -a查看开发机版本信息

image.png

4.使用nvidia-smi查看GPU的信息

image.png

5.输入两次exit 退出远程连接

image.png

Vscode远程连接主机

在扩展中安装

image.png

安装完成插件以后,点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令。

后面的一些配置选项,如果想要手动添加就需要按照上面的格式对相应部分进行修改。

如果将*StrictHostKeyChecking noUserKnownHostsFile* /dev/null删除掉会跳出指纹验证的弹窗:

image.png

StrictHostKeyChecking no表示禁用严格的主机密钥检查。这意味着当连接到一个新的 SSH 服务器时,不会严格验证服务器的主机密钥,可能会带来一定的安全风险。

UserKnownHostsFile /dev/null则是将用户已知的主机密钥文件设置为 /dev/null ,这实质上是忽略了对已知主机密钥的记录和使用。

但是在一般的安全实践中,不建议随意禁用严格的主机密钥检查。

然后在右下角弹出来的提示窗口中点击“连接”就可以远程到开发机中了。

image.png

远程连接完成以后,可以选择打开的文件夹,也可以称为工作目录,你可以选择开发机中的也可以选择本地的,开发机中的文件夹,就是我们前面提到的云盘

当下一次进行远程连接的时候,就不需要输入登录命令等信息了,只需要打开vscode的远程连接就可以看到第一次连接的开发机信息,下面的root代表我们第一连接开发机时使用的是/root工作目录。

image.png

并且下图中的->表示进入开发机后需要重新选择工作目录:

image.png

下图中的->表示进入上一次开发机选择的工作目录:

image.png

每次选择的工作目录都会在这个开发机信息下面显示

Vscode 端口映射

image.png

个人PC会远程连接到开发机唯一暴露在外的37367端口,(这个在SSH的时候提到过每个人的开发机暴露的端口都不一样),并设置隧道选项。暴露端口是作为中转站进行流量的转发。

  • -C:启用压缩,减少传输数据量。
  • -N:不执行远程命令,只建立隧道。
  • -g:允许远程主机连接到本地转发的端口。

当在个人PC上执行这个SSH命令后,SSH客户端会在本地机器的7860端口上监听。

任何发送到本地7860端口的流量,都会被SSH隧道转发到远程服务器的127.0.0.1地址上的7860端口。

这意味着,即使开发机的这个端口没有直接暴露给外部网络,我们也可以通过这个隧道安全地访问远程服务器上的服务。。

ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no

下面给他大家介绍一下命令各部分的含义:

  • -p 37367:是指定 SSH 连接的端口为 37367,这个前面提到过。

  • root@ssh.intern-ai.org.cn:表示要以 root 用户身份连接到 ssh.intern-ai.org.cn 这个主机。

  • -CNg

    • -C 通常用于启用压缩。
    • -N 表示不执行远程命令,仅建立连接用于端口转发等。
    • -g 允许远程主机连接到本地转发的端口。
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}:这是设置本地端口转发,将本地机器的指定端口(由 {本地机器_PORT} 表示)转发到远程主机(这里即 ssh.intern-ai.org.cn)的 127.0.0.1 (即本地回环地址)和指定的开发机端口(由 {开发机_PORT} 表示)。

  • -o StrictHostKeyChecking=no:关闭严格的主机密钥检查,这样可以避免第一次连接时因为未知主机密钥而产生的提示或错误。

当你运行一个web demo的时候,就可以使用这个命令进行端口映射。

我们创建一个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/202410081252022.png" alt="Logo" width="50%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()

在运行代码之前,需要先使用pip install gradio==4.29.0命令安装以下依赖包,然后在Web IDE的终端中运行了一个hello_world.py

image.png

如果不进行端口映射的话,使用本地IP是访问不了的

image.png 我可以使用下面的命令,将它输入到powerShell中:

ssh -p 37367 root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no

image.png 这样就代表成功了。(注意:这个命令不返回任何的内容,这样代表端口映射在运行了,然后在网页中打开连接就可以看到web ui的界面了)

使用 vscode 进行端口映射

当然,如果我们运行不同的web ui的话,需要重复输入命令,这样很麻烦,这就需要用到VScode了。前面我们已经SSH远程连接了开发机,VScode提供了自动端口映射的功能,我们不需要手动配置,我们可以使用“Ctrl+Shift+~”快捷键唤醒终端,在终端的右侧可以找到端口选项:

image.png

在这里可以查看端口映射的信息,如果需要修改端口的话,可以在端口那一栏修改端口号。

Linux 基础命令

在 Linux 中,常见的文件管理操作包括:

  • 创建文件:可以使用 touch 命令创建空文件。
  • 创建目录:使用 mkdir 命令。
  • 目录切换:使用cd命令。
  • 显示所在目录:使用pwd命令。
  • 查看文件内容:如使用 cat 直接显示文件全部内容,more 和 less 可以分页查看。
  • 编辑文件:如 vi 或 vim 等编辑器。
  • 复制文件:用 cp 命令。
  • 创建文件链接:用ln命令。
  • 移动文件:通过 mv 命令。
  • 删除文件:使用 rm 命令。
  • 删除目录rmdir(只能删除空目录)或 rm -r(可删除非空目录)。
  • 查找文件:可以用 find 命令。
  • 查看文件或目录的详细信息:使用ls命令,如使用 ls -l查看目录下文件的详细信息。
  • 处理文件:进行复杂的文件操作,可以使用sed命令。

这里介绍几种我们在课程中会使用到的命令:

3.1.1 touch

我们可以使用touch快速的创建文件,这样我们不用手动点击进行创建了。例如我们要创建一个demo.py文件:

image

3.1.2 mkdir

同样的使用方法,如果要创建一个名为test的目录:

image

3.1.3 cd

这个命令会是使用最多的一个命令,在使用之前需要为没有计算机基础的同学讲一下目录结构,画一张图让大家理解:

image

我们现在使用的是root目录,也是root用户的家目录~,linux操作系统中/表示根目录,根目录下有许多系统所需的目录和文件,刚才我们创建的目录就存在与root目录下,其中.表示的是当前目录,..表示的上级目录。如果我现在要进入到test目录,然后回到root目录,我们可以这样操作:

image

3.1.4 pwd

我们可以使用pwd命令查看当前所在的目录:这样可以方便我们确定我们当前所在哪个目录下面。

image

3.1.5 cat

cat命令可以查看文件里面的内容,更多的使用命令可以使用--help命令查看:

  • -a,--show-all等价于-vET
  • -b,--number-non空白数非空输出行,覆盖-n
  • -e, 等价于-vE
  • -E,--show-结束显示$在每一行的末尾
  • -n,--number编号所有输出行
  • -s,--crick-空白抑制重复的空输出行
  • -t等价于-vT
  • -t,--show-tabs将制表符显示为^I
  • -v,--show非打印使用^和M-表示法,LFD和TAB除外

3.1.6 vi or vim

当我们需要编辑文件的时候可以使用vi或者vim命令,当你进入文件编辑以后,有三种模式:

image

进入编辑模式可以使用i,vim的方便之处就是可以在终端进行简单的文件修改。

3.1.7 cp 和 ln(重点)

**cp**命令在后面课程中会经常用到,它是用来将一个文件或者目录复制到另一个目录下的操作,常用的使用有:

  • 复制文件:cp 源文件 目标文件
  • 复制目录:cp -r 源目录 目标目录

但是如果我们是要使用模型的话,这种操作会占用大量的磁盘空间,所以我们一般使用ln命令,这个就和windows的快捷方式一样。linux中链接分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

所以我们一般使用软连接,它的常用的使用方法如下:

ln [参数][源文件或目录][目标文件或目录]

参数如下:

  • -s:创建软链接(符号链接)也是最常用的;
  • -f:强制执行,覆盖已存在的目标文件;
  • -i:交互模式,文件存在则提示用户是否覆盖;
  • -n:把符号链接视为一般目录;
  • -v:显示详细的处理过程。

3.1.8 mv 和 rm

mv命令和rm命令的使用方式很相似,但是mv是用来移动文件或者目录的,同时还可以进行重命名。rm命令则是用来删除文件或者目录的。

常用的使用方法如下:

  • mv 命令

常用参数:

  • -i:交互模式,覆盖前询问。
  • -f:强制覆盖。
  • -u:只在源文件比目标文件新时才进行移动。

使用示例:

  • mv file1.txt dir1/:将文件 file1.txt 移动到目录 dir1 中。
  • mv file1.txt file2.txt:将文件 file1.txt 重命名为 file2.txt
  • rm 命令

常用参数:

  • -i:交互模式,删除前询问。
  • -f:强制删除,忽略不存在的文件,不提示确认。
  • -r:递归删除目录及其内容。

使用示例:

  • rm file.txt:删除文件 file.txt
  • rm -r dir1/:递归删除目录 dir1 及其所有内容。

删除目录的命令也可以使用rmdir

3.1.9 find

find命令是Linux系统中一个强大的文件搜索工具,它可以在指定的目录及其子目录中查找符合条件的文件或目录,并执行相应的操作。

以下是find命令的一些常见用法:

  1. 按文件名查找:使用-name选项按照文件名查找文件。例如,find /path/to/directory -name "file.txt"将在指定目录及其子目录中查找名为file.txt的文件。
  2. 按文件类型查找:使用-type选项按照文件类型查找文件。例如,find /path/to/directory -type f将查找指定目录及其子目录中的所有普通文件。
  3. 按文件大小查找:使用-size选项按照文件大小查找文件。例如,find /path/to/directory -size +100M将查找指定目录及其子目录中大于100MB的文件。
  4. 按修改时间查找:使用-mtime-atime-ctime选项按照文件的修改时间、访问时间或状态更改时间查找文件。例如,find /path/to/directory -mtime -7将查找指定目录及其子目录中在7天内修改过的文件。
  5. 按文件权限查找:使用-perm选项按照文件权限查找文件。例如,find /path/to/directory -perm 755将查找指定目录及其子目录中权限为755的文件。
  6. 按用户或组查找:使用-user-group选项按照文件的所有者或所属组查找文件。例如,find /path/to/directory -user username将查找指定目录及其子目录中属于用户username的文件。
  7. 执行操作:使用-exec选项可以对找到的文件执行相应的操作。例如,find /path/to/directory -name "*.txt" -exec rm {} ;将删除找到的所有以.txt结尾的文件。

3.1.10 ls

ls命令可以用来列出目录的内容以及详细信息

常用参数及使用方法如下:

  • -a:显示所有文件和目录,包括隐藏文件(以.开头的文件或目录)。
  • -l:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。
  • -h:与-l结合使用,以人类可读的方式显示文件大小(如KMG等)。
  • -R:递归列出子目录的内容。
  • -t:按文件修改时间排序显示。、

image

3.1.11 sed

sed命令是一种流编辑器,主要用于文本处理,在处理复杂的文件操作时经常用到,在后续的课程中会使用到,sed命令常用参数及使用示例如下:

  • 参数说明:

    • -e<script> 或 --expression=<script>:直接在命令行中指定脚本进行文本处理。
    • -f<script文件> 或 --file=<script文件>:从指定的脚本文件中读取脚本进行文本处理。
    • -n 或 --quiet 或 --silent:仅打印经过脚本处理后的输出结果,不打印未匹配的行。
  • 动作说明:

    • a:在当前行的下一行添加指定的文本字符串。
    • c:用指定的文本字符串替换指定范围内的行。
    • d:删除指定的行。
    • i:在当前行的上一行添加指定的文本字符串。
    • p:打印经过选择的行。通常与 -n 参数一起使用,只打印匹配的行。
    • s:使用正则表达式进行文本替换。例如,s/old/new/g 将所有 "InternLM" 替换为 "InternLM yyds"。
  • 示例:

image

在示例中使用了echo命令,这和python中的print一样,用来打印内容,这里使用管道符>将InternLM打印到file文件中,常用的管道符还有<|,比如我们可以使用grep命令来查看python中安装的包含os字段的包:

image

grep是一个强大的文本搜索工具。常用参数如下:

  • -i:忽略大小写进行搜索。
  • -v:反转匹配,即显示不匹配的行。
  • -n:显示行号。
  • -c:统计匹配的行数。

3.2 进程管理

进程管理命令是进行系统监控和进程管理时的重要工具,常用的进程管理命令有以下几种:

  • ps:查看正在运行的进程
  • top:动态显示正在运行的进程
  • pstree:树状查看正在运行的进程
  • pgrep:用于查找进程
  • nice:更改进程的优先级
  • jobs:显示进程的相关信息
  • bg 和 fg:将进程调入后台
  • kill:杀死进程

在开发机中还有一条特殊的命令nvidia-smi,它是 NVIDIA 系统管理接口(NVIDIA System Management Interface)的命令行工具,用于监控和管理 NVIDIA GPU 设备。它提供了一种快速查看 GPU 状态、使用情况、温度、内存使用情况、电源使用情况以及运行在 GPU 上的进程等信息的方法。

下面是关于各个命令使用示例:

  • ps:列出当前系统中的进程。使用不同的选项可以显示不同的进程信息,例如:

    •   ps aux  # 显示系统所有进程的详细信息
      
  • top:动态显示系统中进程的状态。它会实时更新进程列表,显示CPU和内存使用率最高的进程。

    •   top  # 启动top命令,动态显示进程信息
      
  • pstree:以树状图的形式显示当前运行的进程及其父子关系。

    •   pstree  # 显示进程树
      
  • pgrep:查找匹配条件的进程。可以根据进程名、用户等条件查找进程。

    •   pgrep -u username  # 查找特定用户的所有进程
      
  • nice:更改进程的优先级。nice 值越低,进程优先级越高。

    •   nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
  • jobs:显示当前终端会话中的作业列表,包括后台运行的进程。

    •   jobs  # 列出当前会话的后台作业
      
  • bg 和 fgbg 将挂起的进程放到后台运行,fg 将后台进程调回前台运行。

    •   bg  # 将最近一个挂起的作业放到后台运行
        fg  # 将后台作业调到前台运行
      
  • kill:发送信号到指定的进程,通常用于杀死进程。

    •   kill PID  # 杀死指定的进程ID
      
    • 注意,kill 命令默认发送 SIGTERM 信号,如果进程没有响应,可以使用-9使用SIGKILL 信号强制杀死进程:
    •   kill -9 PID  # 强制杀死进程    
      

SIGTERM(Signal Termination)信号是Unix和类Unix操作系统中用于请求进程终止的标准信号。当系统或用户想要优雅地关闭一个进程时,通常会发送这个信号。与SIGKILL信号不同,SIGTERM信号可以被进程捕获并处理,从而允许进程在退出前进行清理工作。(来源于网络)

以下是 nvidia-smi 命令的一些基本命令用法:

  • 显示 GPU 状态的摘要信息:

    •   nvidia-smi
      
  • 显示详细的 GPU 状态信息:

    •   nvidia-smi -l 1
      
    • 这个命令会每1秒更新一次状态信息。
  • 显示 GPU 的帮助信息:

    •   nvidia-smi -h
      
  • 列出所有 GPU 并显示它们的 PID 和进程名称:

    •   nvidia-smi pmon
      
  • 强制结束指定的 GPU 进程:

    •   nvidia-smi --id=0 --ex_pid=12345
      
    • 这会强制结束 GPU ID 为 0 上的 PID 为 12345 的进程。
  • 设置 GPU 性能模式:

    •   nvidia-smi -pm 1
        nvidia-smi -i 0 -pm 1
      
    • 第一个命令会为所有 GPU 设置为性能模式,第二个命令只针对 ID 为 0 的 GPU。
  • 重启 GPU:

    •   nvidia-smi --id=0 -r
      
    • 这会重启 ID 为 0 的 GPU。

下面通过一张图片对GPU信息进行介绍:

image

3.3 工具使用

这里介绍一个工具TMUXTMUX 是一个终端多路复用器。它可以在多个终端之间轻松切换,分离它们(这不会杀死终端,它们继续在后台运行)和将它们重新连接到其他终端中。为什么要介绍这个工具呢?因为在后面进行Xtuner微调模型的时候,时间会很长,使用Tmux可以解决程序被杀死中断的情况,下面介绍一下如何安装并使用。

因为开发机使用的是ubuntu的操作系统,可以使用lsb_release -a 命令查看ubuntu的系统信息:

image

然后使用apt install tmux命令安装tmux,安装完成以后可以使用tmux命令就可以使用tmux了,如果想退出tmux可以使用“Ctrl+d”快捷键。

开发机仅 /root 路径下的文件是持久化存储的,其他路径下安装的软件重启后都会被重置。

具体的使用方法可以查看:

www.ruanyifeng.com/blog/2019/1…

4. Conda和Shell介绍(附加)

Conda 是一个开源的包管理和环境管理系统,可在 Windows、macOS 和 Linux 上运行。它快速安装、运行和更新软件包及其依赖项。使用 Conda,您可以轻松在本地计算机上创建、保存、加载和切换不同的环境。

在开发机中已经安装了conda,我们可以直接使用,而且开发机中也有内置的conda命令studio-conda,下面我们会介绍conda的基本使用,还有studio-conda的使用方法以及介绍一下studio-conda是怎么实现的。

我们会从下面几部分进行介绍:

  1. conda设置
  2. conda环境管理
  3. conda和pip
  4. studio-conda使用与Shell(扩展)

4.1 conda设置

我们可以使用conda --version来查看当前开发机中conda的版本信息:

image

当我们要使用conda安装包的时候会非常慢,我们可以设置国内镜像提升安装速度,示例如下:

#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2

但是我们一般都是使用pip进行包的安装的,后面我们会介绍pipconda的区别。

如果我们想要查看conda的配置信息可以使用conda config --show命令,如果是开发机默认的设置的话会返回:(一部分信息)

image

这些配置在Conda环境配置中,会影响软件包的安装、更新、环境管理等操作的方式和结果。

4.2 conda环境管理

这一部分是conda中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。

4.2.1 创建虚拟环境

我们可以使用conda create -n name python=3.10创建虚拟环境,这里表示创建了python版本为3.10、名字为name的虚拟环境。创建后,可以在.conda目录下的envs目录下找到。

image

在不指定python版本时,会自动创建基于最新python版本的虚拟环境。同时我们可以在创建虚拟环境的同时安装必要的包:conda create -n name numpy matplotlib python=3.10(但是不建议大家这样用)

创建虚拟环境的常用参数如下:

  • -n 或 --name:指定要创建的环境名称。
  • -c 或 --channel:指定额外的软件包通道。
  • --clone:从现有的环境克隆来创建新环境。
  • -p 或 --prefix:指定环境的安装路径(非默认位置)。

4.2.2 查看有哪些虚拟环境

如果想要查看有哪些虚拟环境我们可以使用下面的命令:

conda env list
conda info -e
conda info --envs

image

同时我们还可以看到环境所在的目录。

4.2.3 激活与退出虚拟环境

当我们创建完虚拟环境后我们可以使用conda activate name命令来激活虚拟环境,如何查看是否切换成功呢?很简单,只需要看(base)是否变成了创建的虚拟环境的名称。

image

如果想要退出虚拟环境的话可以使用:

conda activate
conda deactivate

这两条命令都会回到base环境,因为base是conda的基础环境,如果仔细观察的话,base环境目录比其他的虚拟环境目录层级要高。

4.2.4 删除与导出虚拟环境

如果想要删除某个虚拟环境可以使用conda remove --name name --all,如果只删除虚拟环境中的某个或者某些包可以使用conda remove --name name package_name

导出虚拟环境对于特定的环境是非常有必要的,因为有些软件包的依赖关系很复杂,如果自己重新进行创建和配置的话很麻烦,如果我们将配置好的环境导出,这样下次使用还原就行了,而且也可以把配置分享给其他人。

#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f  myenv.yml

比如我们将xtuner0.1.17虚拟环境导出,配置信息是这样的:

image

其中包括环境名字虚拟环境软件包的在线存储库的位置虚拟环境的依赖。后面我们会使用进阶的使用方法来快速的还原虚拟环境。

4.3 conda和pip

这部分我们介绍一些condapip的一些区别:

  1. conda可以管理非python包,pip只能管理python包。
  2. conda可以用来创建虚拟环境,pip不能,需要依赖virtualenv之类的包。
  3. conda安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip安装的包是wheel或源码,装过程中不会去支持python语言之外的依赖项。
  4. conda安装的包会统一下载到当前虚拟环境对应的目录下,下载一次多次安装。pip是直接下载到对应环境中。

Wheel 是一种 Python 安装包的格式。

它是一种预编译的二进制分发格式,类似于 conda 中的已编译二进制文件。

Wheel 格式的主要优点包括:

  1. 安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
  2. 一致性:确保在不同的系统和环境中安装的结果是一致的。

例如,如果您要安装一个大型的 Python 库,使用 Wheel 格式可以避免在不同的机器上因为编译环境的差异而导致的安装问题。而且,对于那些没有编译环境或者编译能力较弱的系统,Wheel 格式能够让安装过程更加顺畅。

4.4 studio-conda使用与Shell(扩展,不需要在开发机中操作)

``







```
```


```
```

image


``

```
```

image


```
```

``

>

>


[![image]()](https://private-user-images.githubusercontent.com/110531742/346818721-27c31187-623e-4048-9d7c-644bf8496d84.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzc4OTU0MDIsIm5iZiI6MTczNzg5NTEwMiwicGF0aCI6Ii8xMTA1MzE3NDIvMzQ2ODE4NzIxLTI3YzMxMTg3LTYyM2UtNDA0OC05ZDdjLTY0NGJmODQ5NmQ4NC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMTI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDEyNlQxMjM4MjJaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01OWI1NWQwZmVhMDAyOTZlYWQ2ZmQzYzIzZmRlMGM1MDkzMTJmYmM0ZGYyNDhkNzNhYjEzMzRiMGFlNWY5ODUzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.vjQ8f4IpG9DBql4aG2sWhTQ9jS7Vbe_jHJz_l8WsDkY)

好了,以上就是我们本关卡的全部内容了,希望上面的内容对大家后面学习有帮助,如果大家想要学习更多linux的相关知识,可以看我博客文章,虽然说不会linux对我们学习大模型没有太大影响,但是linux如果学习的很好,会让你在学习大模型的路上非常顺畅的。最后大家不要忘了完成我们前面设置的关卡呦!

博客链接: linux

常见问题

1. InternStudio 开发机的环境玩坏了,如何初始化开发机环境

慎重执行!!!!所有数据将会丢失,仅限 InternStudio 平台,自己的机器千万别这么操作

  • 第一步本地终端 ssh 连上开发机(一定要 ssh 连接上操作,不能在 web 里面操作!!!)
  • 第二步执行 rm -rf /root,大概会等待10分钟
  • 第三步重启开发机,系统会重置 /root 路径下的配置文件
  • 第四步 ln -s /share /root/share