文章目录
任务目标
- 完成SSH连接与端口映射并运行hello_world.py
- 将Linux基础命令在开发机上完成一遍
- 使用 VSCODE 远程连接开发机并创建一个conda环境
- 创建并运行test.sh文件
学习内容:
任务1
- 完成SSH连接与端口映射并运行hello_world.py
- SSH连接
- 连接到开发机端口
- 输入密码 - 输入hostname查看开发机名称,使用uname -a查看开发机内核信息,使用lsb_release -a查看开发机版本信息,使用nvidia-smi查看GPU的信息
2. 配置SSH密钥进行SSH远程连接
每次远程都输入密码比较麻烦,我们可以设置SSH key来跳过输入密码这一步骤,在ssh命令中我们可以使用ssh-keygen
命令来生成密钥ssh-keygen
支持RSA和DSA两种认证密钥。
常用参数包括:
- -t:指定密钥类型,如dsa、ecdsa、ed25519、rsa。
- -b:指定密钥长度。
- -C:添加注释。
- -f:指定保存密钥的文件名。
- -i:读取未加密的ssh-v2兼容的私钥/公钥文件。
- 这里我们使用RSA算法生成密钥,命令为:
ssh-keygen -t rsa
输入命令后一路回车就可以了,这里的密钥默认情况下是生成在~/.ssh/
目录下的,~
表示的是家目录,如果是windows就是C:\Users\{your_username}\
。在powerShell中可以使用Get-Content
命令查看生成的密钥,如果是linux操作系统可以使用cat
命令。
然后我们回到开发机平台,在首页点击配置SSH Key,接着点击添加SSH公钥,将刚刚生成的密钥复制下来,粘贴到公钥框中,名称会被自动识别到,最后点击立即添加,SSH Key就配置完成了。
完成SSH Key创建以后,重启终端进行远程连接,就会跳过密码输入这一步了。
3. 使用VScode进行SSH远程连接
- 安装Remote-SSH插件
- 点击侧边栏的远程连接图标,在SSH中点击“+”按钮,添加开发机SSH连接的登录命令,最后回车,然后在右下角弹出来的提示窗口中点击“连接”就可以远程到开发机中了
- 端口映射(本地机上进行)
ssh -p xxxxx root@ssh.intern-ai.org.cn -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
5. 运行hello_world.py
- 首先安装相关库(VScode连接开发机进行操作)
- 再创建文件
进入文件内容编辑页面,按i
再将需要写入的文件内容按Ctrl+Shift+v
粘贴到当前文件中
输入ESC
后,再按:wq
保存内容退出编辑,命令行终端输入cat hello_world.py
查看内容已经写入: - 运行文件
命令行终端输入python hello_world.py
:
可用看到已经运行成功,可以在之前完成端口映射的本地URLhttp://localhost:7860
中看到界面:
任务2
- 将Linux基础命令在开发机上完成一遍
1.文件管理
创建文件:可以使用
touch
命令创建空文件。创建目录:使用
mkdir
命令。目录切换:使用
cd
命令。显示所在目录:使用
pwd
命令。查看文件内容:如使用
cat
直接显示文件全部内容,more 和 less 可以分页查看。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除外
- 编辑文件:如
vi
或vim
等编辑器。
进入编辑模式可以使用i
,vim
的方便之处就是可以在终端进行简单的文件修改。 - 复制文件:用
cp
命令。
复制文件:cp 源文件 目标文件
复制目录:cp -r 源目录 目标目录
但是如果我们是要使用模型的话,这种操作会占用大量的磁盘空间,所以我们一般使用ln
命令,这个就和windows的快捷方式一样。 - 创建文件链接:用
ln
命令。
linux中链接分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
所以我们一般使用软连接,它的常用的使用方法如下:ln [参数][源文件或目录][目标文件或目录]
参数如下:
-s:创建软链接(符号链接)也是最常用的; -f:强制执行,覆盖已存在的目标文件; -i:交互模式,文件存在则提示用户是否覆盖; -n:把符号链接视为一般目录; -v:显示详细的处理过程。
- 移动文件:通过
mv
命令。mv
命令和rm
命令的使用方式很相似,但是mv
是用来移动文件或者目录的,同时还可以进行重命名。rm
命令则是用来删除文件或者目录的。
常用参数:
-i:交互模式,覆盖前询问。 -f:强制覆盖。 -u:只在源文件比目标文件新时才进行移动。
mv demo.py test
将demo.py移到test目录中mv demp.py test.py
将文件demo.py
重命名为test.py
- 删除文件:使用
rm
命令。 - 常用参数:
-i:交互模式,删除前询问。 -f:强制删除,忽略不存在的文件,不提示确认。 -r:递归删除目录及其内容。
rm test.py
删除test目录下的test.py文件rmdir test
删除test文件夹rm -r test
递归地删除test文件夹
- 删除目录:
rmdir
(只能删除空目录)或rm -r
(可删除非空目录)。 - 查找文件:可以用
find
命令。find
命令是Linux系统中一个强大的文件搜索工具,它可以在指定的目录及其子目录中查找符合条件的文件或目录,并执行相应的操作。
以下是find
命令的一些常见用法:
按文件名查找:使用-name
选项按照文件名查找文件。例如,find /path/to/directory -name "file.txt"
将在指定目录及其子目录中查找名为file.txt
的文件。
按文件类型查找:使用-type
选项按照文件类型查找文件。例如,find /path/to/directory -type f
将查找指定目录及其子目录中的所有普通文件。
按文件大小查找:使用-size
选项按照文件大小查找文件。例如,find /path/to/directory -size +100M
将查找指定目录及其子目录中大于100MB的文件。
按修改时间查找:使用-mtime
、-atime
或-ctime
选项按照文件的修改时间、访问时间或状态更改时间查找文件。例如,find /path/to/directory -mtime -7
将查找指定目录及其子目录中在7天内修改过的文件。
atime(Access Time):文件最近被访问时间
mtime(Modify Time):文件最近内容修改时间
ctime(Change Time):文件最近权限和属性修改时间
按文件权限查找:使用-perm
选项按照文件权限查找文件。例如,find /path/to/directory -perm 755
将查找指定目录及其子目录中权限为755的文件。 - Linux 文件权限分类
Linux 文件权限是系统中用于控制对文件和目录访问的重要概念。权限分为读(Read)、写(Write)、执行(Execute)三个部分,分别表示对文件的读取、修改和执行操作的权限。文件权限可以分为三类用户:
文件所有者(Owner):创建、拥有该文件的用户。
文件所属组(Group):该文件归属的用户组。
其他用户(Others):除了文件所有者和文件所属组之外的用户。chown newuser filename
修改文件所有者chown newuser:newgroup filename
修改文件所有者和组chmod -R a+x directoryname
chown -R newuser:newgroup directoryname
递归改变目录权限和所有者 - Linux 文件权限修改方法
Linux 系统中,可以使用 chmod 命令来修改文件或目录的权限。chmod 命令有两种用法:符号法和数字法。
符号法:u
表示文件所有者g
表示所属组o
表示其他用户r
表示读取权限w
表示写入权限x
表示执行权限
例如,要给文件所有者添加执行权限,可以使用chmod u+x filename
命令。
数字法:
每个权限用一个数字表示:r=4
,w=2
,x=1
将它们加在一起表示权限组的数值
例如,要将文件权限设置为文件所有者具有读、写、执行权限(7
),同组用户和其他用户具有读、执行权限(5
),可以使用chmod 755 filename
命令。
按用户或组查找:使用-user
或-group
选项按照文件的所有者或所属组查找文件。例如,find /path/to/directory -user username
将查找指定目录及其子目录中属于用户username的文件。
执行操作:使用-exec
选项可以对找到的文件执行相应的操作。例如,find /path/to/directory -name "*.txt" -exec rm {} \;
将删除找到的所有以.txt结尾的文件。 - 查看文件或目录的详细信息:使用
ls
命令,如使用ls -l
查看目录下文件的详细信息。
常用参数及使用方法如下:
-a:显示所有文件和目录,包括隐藏文件(以.开头的文件或目录)。 -l:以长格式显示详细信息,包括文件权限、所有者、大小、修改时间等。 -h:与-l结合使用,以人类可读的方式显示文件大小(如K、M、G等)。 -R:递归列出子目录的内容。 -t:按文件修改时间排序显示。
- 处理文件:进行复杂的文件操作,可以使用
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"。
2. 进程管理
进程管理命令是进行系统监控和进程管理时的重要工具,常用的进程管理命令有以下几种:
- ps:查看正在运行的进程
ps aux # 显示系统所有进程的详细信息
- top:动态显示正在运行的进程
top # 启动top命令,动态显示进程信息
- pstree:树状查看正在运行的进程
pstree # 显示进程树
- pgrep:用于查找进程
pgrep -u username # 查找特定用户的所有进程
- nice:更改进程的优先级。
nice
值越低,进程优先级越高。nice -n 10 long-running-command # 以较低优先级运行一个长时间运行的命令
- jobs:显示进程的相关信息
jobs # 列出当前会话的后台作业
- bg 和 fg:将进程调入后台
bg # 将最近一个挂起的作业放到后台运行
fg # 将后台作业调到前台运行
- kill:杀死进程
kill PID # 杀死指定的进程ID
注意,kill
命令默认发送SIGTERM
信号(SIGTERM
(Signal Termination)信号是Unix和类Unix操作系统中用于请求进程终止的标准信号。当系统或用户想要优雅地关闭一个进程时,通常会发送这个信号。与SIGKILL
信号不同,SIGTERM
信号可以被进程捕获并处理,从而允许进程在退出前进行清理工作。),如果进程没有响应,可以使用-9
使用SIGKILL
信号强制杀死进程:kill -9 PID # 强制杀死进程
- nvidia-smi:NVIDIA 系统管理接口(NVIDIA System Management Interface)的命令行工具,用于监控和管理 NVIDIA GPU 设备。它提供了一种快速查看 GPU 状态、使用情况、温度、内存使用情况、电源使用情况以及运行在 GPU 上的进程等信息的方法。
– 显示 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 # 所有 GPU 设置为性能模式
nvidia-smi -i 0 -pm 1 # 只针对 ID 为 0 的 GPU
– 重启 GPUnvidia-smi --id=0 -r # 这会重启 ID 为 0 的 GPU
3. Tmux工具使用 - 会话和进程
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次**“会话”(session)** 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。 - Tmux的作用
Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。 (2)它可以让新窗口"接入"已经存在的会话。 (3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。 (4)它还支持窗口任意的垂直和水平拆分。
- 基本用法
– 安装
# Ubuntu 或 Debian $ sudo apt-get install tmux $ sudo apt install tmux # CentOS 或 Fedora $ sudo yum install tmux # Mac $ brew install tmux
我们的系统是Ubuntu且是root用户所以用apt-get install tmux
或apt install tmux
都可以apt-get
和apt
的区别:apt-get
是较早引入的工具,它的设计更加注重命令行参数和灵活性,适合需要详细控制和定制的用户或脚本。apt
尝试提供更简单、更直观的命令行界面,以减少用户输入的复杂性。
– 启动和退出
安装完成后,键入tmux
命令,就进入了 Tmux 窗口。
$ tmux
上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
按下Ctrl+d
或者显式输入exit
命令,就可以退出 Tmux 窗口。
$ exit
– 前缀键
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?
。它的用法是,在 Tmux 窗口中,先按下Ctrl+b
,再按下?,就会显示帮助信息。
然后,按下 ESC
键或q
键,就可以退出帮助。
- 会话管理
– 新建会话
第一个启动的 Tmux 窗口,编号是0
,第二个窗口的编号是1
,以此类推。这些窗口对应的会话,就是 0 号会话、1 号会话。
使用编号区分会话,不太直观,更好的方法是为会话起名。
$ tmux new -s <session-name>
– 分离会话
在 Tmux 窗口中,按下Ctrl+b d
或者输入tmux detach
命令,就会将当前会话与窗口分离。
$ tmux detach
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。tmux ls
命令可以查看当前所有的 Tmux 会话。
$ tmux ls # or $ tmux list-session
– 接入会话tmux attach
命令用于重新接入某个已存在的会话。
# 使用会话编号 $ tmux attach -t 0 # 使用会话名称 $ tmux attach -t <session-name> $ tmux attach-session -t <session-name>
– 杀死会话tmux kill-session
命令用于杀死某个会话。
# 使用会话编号 $ tmux kill-session -t 0 # 使用会话名称 $ tmux kill-session -t <session-name>
– 切换会话tmux switch
命令用于切换会话。
# 使用会话编号 $ tmux switch -t 0 # 使用会话名称 $ tmux switch -t <session-name>
– 重命名会话tmux rename-session
命令用于重命名会话。
$ tmux rename-session -t 0 <new-name>
– 会话快捷键
Ctrl+b d:分离当前会话。 Ctrl+b s:列出所有会话。 Ctrl+b $:重命名当前会话。
- 窗格操作
Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。
– 划分窗格
# 划分上下两个窗格 $ tmux split-window # 划分左右两个窗格 $ tmux split-window -h
– 移动光标tmux select-pane
命令用来移动光标位置。
# 光标切换到上方窗格 $ tmux select-pane -U # 光标切换到下方窗格 $ tmux select-pane -D # 光标切换到左边窗格 $ tmux select-pane -L # 光标切换到右边窗格 $ tmux select-pane -R
– 交换窗格位置tmux swap-pane
命令用来交换窗格位置。
# 当前窗格上移 $ tmux swap-pane -U # 当前窗格下移 $ tmux swap-pane -D
– 窗格快捷键
Ctrl+b %:划分左右两个窗格。 Ctrl+b ":划分上下两个窗格。 Ctrl+b <arrow key>:光标切换到其他窗格。<arrow key>是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓。 Ctrl+b ;:光标切换到上一个窗格。 Ctrl+b o:光标切换到下一个窗格。 Ctrl+b {:当前窗格与上一个窗格交换位置。 Ctrl+b }:当前窗格与下一个窗格交换位置。 Ctrl+b Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。 Ctrl+b Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。 Ctrl+b x:关闭当前窗格。 Ctrl+b !:将当前窗格拆分为一个独立窗口。 Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小。 Ctrl+b Ctrl+<arrow key>:按箭头方向调整窗格大小。 Ctrl+b q:显示窗格编号。
- 窗口管理
除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。
– 新建窗口tmux new-window
命令用来创建新窗口。
$ tmux new-window # 新建一个指定名称的窗口 $ tmux new-window -n <window-name>
– 切换窗口tmux select-window
命令用来切换窗口。
# 切换到指定编号的窗口 $ tmux select-window -t <window-number> # 切换到指定名称的窗口 $ tmux select-window -t <window-name>
– 重命名窗口tmux rename-window
命令用于为当前窗口起名(或重命名)。
$ tmux rename-window <new-name>
– 重命名窗口tmux rename-window
命令用于为当前窗口起名(或重命名)。
$ tmux rename-window <new-name>
– 窗口快捷键
Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。 Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。 Ctrl+b n:切换到下一个窗口。 Ctrl+b <number>:切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号。 Ctrl+b w:从列表中选择窗口。 Ctrl+b ,:窗口重命名。
- 其他命令
# 列出所有快捷键,及其对应的 Tmux 命令 $ tmux list-keys # 列出所有 Tmux 命令及其参数 $ tmux list-commands # 列出当前所有 Tmux 会话的信息 $ tmux info # 重新加载当前的 Tmux 配置 $ tmux source-file ~/.tmux.conf
- Conda和Shell介绍
任务3
- 使用 VSCODE 远程连接开发机并创建一个conda环境
- conda设置
conda --version
来查看当前开发机中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
看conda的配置信息可以使用conda config --show
命令:
- conda环境管理
– 创建虚拟环境
可以使用conda create -n xxx python=3.10
创建虚拟环境,这里表示创建了python版本为3.10、名字为xxx的虚拟环境。
创建虚拟环境的常用参数如下:
-n 或 --name:指定要创建的环境名称。 -c 或 --channel:指定额外的软件包通道。 --clone:从现有的环境克隆来创建新环境。 -p 或 --prefix:指定环境的安装路径(非默认位置)。
创建后,可以在.conda目录下的envs目录下找到:
– 查看虚拟环境
conda env list conda info -e conda info --envs
– 激活与退出虚拟环境
当我们创建完虚拟环境后我们可以使用conda activate xxx
命令来激活虚拟环境,如何查看是否切换成功呢?很简单,只需要看(base)是否变成了创建的虚拟环境的名称。
如果想要退出虚拟环境的话可以使用conda deactivate
使用以下命令conda activate
conda deactivate
都会回到base
环境,因为base
是conda的基础环境,如果仔细观察的话,base
环境目录比其他的虚拟环境目录层级要高
– 删除与导出虚拟环境
如果想要删除某个虚拟环境可以使用conda remove --name name --all
,如果只删除虚拟环境中的某个或者某些包可以使用conda remove --name name package_name
#获得环境中的所有配置 conda env export --name myenv > myenv.yml #重新还原环境 conda env create -f myenv.yml
- conda和pip
conda
和pip
的一些区别:
–conda
可以管理非python包,pip
只能管理python包。
–conda
可以用来创建虚拟环境,pip
不能,需要依赖virtualenv
之类的包。
–conda
安装的包是编译好的二进制文件,安装包文件过程中会自动安装依赖包;pip
安装的包是wheel
或源码,装过程中不会去支持python语言之外的依赖项。
–conda
安装的包会统一下载到当前虚拟环境对应的目录下,下载一次多次安装。pip
是直接下载到对应环境中。Wheel
是一种 Python 安装包的格式。
它是一种预编译的二进制分发格式,类似于 conda 中的已编译二进制文件。
Wheel 格式的主要优点包括:
– 安装速度快:因为已经进行了预编译,所以在安装时不需要像源码安装那样进行编译过程,节省了时间。
– 一致性:确保在不同的系统和环境中安装的结果是一致的。
例如,如果您要安装一个大型的 Python 库,使用 Wheel 格式可以避免在不同的机器上因为编译环境的差异而导致的安装问题。而且,对于那些没有编译环境或者编译能力较弱的系统,Wheel 格式能够让安装过程更加顺畅。
任务4
- 创建并运行test.sh文件
- studio-conda使用与Shell
Shell 脚本 是一种包含一系列命令的文本文件,这些命令按照特定的顺序排列,用于在 Unix/Linux 或类似的操作系统环境中自动执行任务。
Shell 脚本通常使用 Shell 语言编写,常见的 Shell 语言如 Bash、Sh 等,就是我们前面所介绍了Linux基础命令,这就属于Shell语言。
它有以下几个重要特点:
– 自动化:可以将一系列重复、复杂的操作编写为一个脚本,然后只需运行脚本即可自动完成这些操作,从而节省时间和减少错误。例如,每天定时备份重要文件的脚本。
– 系统管理:用于管理系统配置、用户权限、进程控制等。比如,创建新用户并设置其权限的脚本。
– 批处理:能够同时处理多个文件或数据。例如,将一批图片文件从一种格式转换为另一种格式的脚本。
– 流程控制:像条件判断(if-else)、循环(for、while)等,使脚本能够根据不同的情况执行不同的操作。>
只重定向标准输出(stdout)。&>
同时重定向标准输出(stdout)和标准错误输出(stderr)。
在工作目录下创建文件test.sh
将文件内容写入:
给文件赋予执行权限:
执行命令:
可以看到可以正常执行,只不过我们的工作目录下没有导出该环境文件,所以没有还原成功,但给出了提示信息。
心得体会
对Linux下的基本语法进行了查漏补缺,学习使用了新工具tmux,收获颇丰。