跳到主要内容

48 篇博文 含有标签「操作系统与命令」

操作系统和命令行相关知识

查看所有标签

Conda 使用指南与常用命令

· 阅读需 2 分钟
素明诚
Full stack development

下载

Download Now | Anaconda## 常用命令

Conda 命令描述
conda create --name venv python=3.8创建名为 venv 的环境,指定 Python 3.8 版本。
conda activate venv激活 venv 环境。
conda deactivate退出当前环境,返回到基础环境。
conda env list 或 conda info --envs显示所有 Conda 环境列表。
conda remove --name venv --all删除 venv 环境及其所有包。
conda install numpy在当前环境安装 numpy 包。
conda update numpy更新当前环境的 numpy 包。
conda remove numpy从当前环境卸载 numpy 包。
conda list列出当前环境中的所有包。
conda create --name venv_clone --clone venv克隆 venv 环境到 venv_clone。
conda clean --all清理缓存文件,释放空间。

使用指南

1.管理环境变量

在激活 Conda 环境时自动设置和清除环境变量

创建激活脚本

mkdir -p ~/miniconda3/envs/venv/etc/conda/activate.d
echo 'export MY_VARIABLE="value"' > ~/miniconda3/envs/venv/etc/conda/activate.d/env_vars.sh

创建停用脚本

mkdir -p ~/miniconda3/envs/venv/etc/conda/deactivate.d
echo 'unset MY_VARIABLE' > ~/miniconda3/envs/venv/etc/conda/deactivate.d/clear_env_vars.sh

这样,MY_VARIABLE 会在你激活和停用 venv 环境时自动被设置和清除。

2.快速切换 Python 版本

创建使用特定版本的 Python 的环境,如 Python 3.10.13

conda create -n venv python=3.10.13
conda activate venv

3.使用 Conda Forge

为了获得更广泛的包支持,将 Conda Forge 添加为你的包源

conda config --add channels conda-forge
conda config --set channel_priority strict

比如我的项目需要 uwsgi 这个包,pip 和 apt install python-dev 都无法安装成功,我尝试使用 conda 安装,解决了问题。因为有时 Conda 包会提供更好的预编译二进制文件。

conda install -c conda-forge uwsgi

4.查找包的依赖

conda search numpy --info

5.保存和重建环境

备份或与他人分享你的环境

conda env export > environment.yml

重建环境

conda env create -f environment.yml

6.优化 Conda 性能

清理 Conda 的无用包和缓存,释放空间并提高性能

conda clean --all

Linux redis-cli 常用操作命令

· 阅读需 1 分钟
素明诚
Full stack development

连接到 Redis 服务器

-h 指定服务器主机名,-p 指定端口,-a 用于认证密码。如果你直接输入redis-cli 它会尝试连接到本地机器上默认的 Redis 端口 6379。

redis-cli -h [hostname] -p [port] -a [password]

设置键值

设置一个键值对。

SET key value

获取键的值

用来获取指定键的值。

GET key

删除键

删除一个或多个键。

DEL key

检查键是否存在

检查一个键是否存在,存在返回 1,不存在返回 0。

EXISTS key

列出所有键

根据模式匹配列出所有键,例如 KEYS * 列出所有键。

KEYS pattern

切换数据库

SELECT 1

清空当前数据库

清空当前选中的数据库

FLUSHDB

清空所有数据库

清空所有数据库

FLUSHALL

查看统计信息

INFO

原子性增减操作

对存储在键中的数字执行原子增加或减少操作。

INCR key
DECR key

Linux tree 命令详解

· 阅读需 2 分钟
素明诚
Full stack development

tree 命令是一个在命令行环境中用于展示文件和目录结构的工具,它以树状图形式列出文件和目录。

选项描述
-L level限制目录树的显示层数。
-a显示所有文件和目录,包括隐藏文件。
-d仅显示目录。
-f显示每个文件或目录的完整路径。
-i不显示树状图的缩进线,只列出文件名。
-p显示文件或目录的权限。
-u显示文件或目录的所有者。
-g显示文件或目录的组。
-s显示文件大小(以字节为单位)。
-h以易读的方式(如 KB、MB)显示文件大小。
-C在终端使用颜色高亮显示。
-P pattern只显示匹配给定模式的文件或目录。
-I pattern排除匹配给定模式的文件或目录。
-J输出为 JSON 格式。

美观的方式显示结果

为了使输出结果更美观,可以使用 -C 选项来启用颜色高亮显示,这有助于区分不同类型的条目(如目录、文件等)。

tree -C

此命令将以彩色格式输出当前目录及其子目录的结构

仅查看文件夹

如果你只想查看目录结构而不包括文件

tree -d

输出到文件 tree.txt

如果你想将 tree 的输出保存到一个文件中,可以将输出重定向到一个文件。这可以通过在命令行中使用重定向操作符 > 来实现。

tree > tree.txt

这个命令将当前目录的树状结构输出到 tree.txt 文件中。如果你希望输出更具可读性,可以结合之前的选项

tree -C > tree.txt

Ubuntu 22044 LTS x86 64 手动安装 Docker

· 阅读需 1 分钟
素明诚
Full stack development

访问 Docker 的官方仓库索引页面以找到 Ubuntu 22.04 对应的软件包

https://download.docker.com/linux/ubuntu/dists/

在页面中点击 jammy 目录,这是 Ubuntu 22.04 LTS 的代码名。接下来,进入 pool/ 目录,然后选择 stable/ 目录,并选择 amd64/ 目录

https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/

在这个目录下,您需要下载以下文件,版本自己选择

  • containerd.io_<version>_amd64.deb
  • docker-ce-cli_<version>~ubuntu_jammy_amd64.deb
  • docker-ce_<version>~ubuntu_jammy_amd64.deb

下载这些 .deb 文件后,进入下载的目录后,使用下面的命令在您的 Ubuntu 系统上安装这些文件

sudo dpkg -i containerd.io_*.deb
sudo dpkg -i docker-ce-cli_*.deb
sudo dpkg -i docker-ce_*.deb

如果安装过程中遇到依赖问题,可以运行以下命令来解决

sudo apt-get install -f

完成安装后,启动 Docker 服务并设置为开机启动

sudo systemctl start docker
sudo systemctl enable docker

最后,运行一个简单的测试来验证 Docker 是否安装成功

sudo docker ps

Ubuntu 如何完全重新安装某个应用

· 阅读需 1 分钟
素明诚
Full stack development

以 fzf 这个工具为例,完全重新安装 fzf

卸载 fzf 首先,彻底卸载 fzf,包括其所有配置文件

sudo apt remove --purge fzf

清理残留的依赖 运行自动清理命令,移除无用的包和依赖

sudo apt autoremove

更新软件包列表 更新您的软件包列表,确保能够从仓库获取到最新信息

sudo apt update

重新安装 fzf 再次安装 fzf

sudo apt install fzf

验证安装 安装完成后,检查 fzf 是否可以正常运行

fzf --version

如果在重新安装过程中发现任何问题,或者问题依然存在,请检查是否有环境变量问题或路径问题影响到了可执行文件的查找。您还可以检查 /usr/bin 目录,看看 fzf 的可执行文件是否确实存在于那里

ls -l /usr/bin/fzf

如果上述步骤都不能解决问题,可能需要考虑系统环境问题更深层次的检查,例如,确认 /bin/usr/bin 是否在环境变量的 PATH

echo $PATH

Linux 配置和使用 Screen

· 阅读需 2 分钟
素明诚
Full stack development

安装 Screen

使用以下命令安装screen

# Debian/Ubuntu
sudo apt-get install screen

# CentOS/RHEL
sudo yum install screen

# Arch Linux
sudo pacman -S screen

启动和管理 Screen 会话

命令功能
screen启动新会话
screen -S session_name启动命名会话
screen -ls列出所有会话
screen -r session_name重新连接会话
Ctrl + a, d分离当前会话

窗口管理

命令功能
Ctrl + a, c新建窗口
Ctrl + a, n切换到下一个窗口
Ctrl + a, p切换到上一个窗口
Ctrl + a, w列出所有窗口
Ctrl + a, k关闭当前窗口

分割窗口

命令功能
Ctrl + a, S水平分割窗口
Ctrl + a, Tab切换分区
Ctrl + a, Q移除所有分割

复制和粘贴

命令功能
Ctrl + a, [进入复制模式
Space开始选择文本(再次按 Space 结束选择并复制)
Ctrl + a, ]粘贴文本

锁定和帮助

命令功能
Ctrl + a, x锁定会话
Ctrl + a, ?显示帮助信息

退出 Screen

命令功能
exit退出会话
Ctrl + a, K强制终止会话

自定义配置

编辑~/.screenrc文件以自定义screen的行为。示例配置启用垂直分割和设置快捷键

bind | split -v
bind - resize =

用户态和内核态

· 阅读需 3 分钟
素明诚
Full stack development

用户态

用户态是普通的程序运行模式,例如你的文档编辑器或游戏。

在用户态,程序有限制地访问计算机的资源,比如不能直接控制硬件设备。

这样做的好处是保证了系统的安全,防止程序随意修改关键的系统信息或其他程序的数据。

内核态

内核态是操作系统运行的模式,它有权访问计算机的所有资源,包括内存和外设。

当操作系统需要执行重要的任务,如管理内存或响应硬件请求时,它会在内核态下运行。

这种模式可以让操作系统有效地控制硬件和管理系统资源。

从用户态切换到内核态的情况

系统调用:当你的程序需要操作系统帮助完成一些特定任务(比如读取文件)时,它会通过系统调用请求操作系统的服务,此时会从用户态切换到内核态。

异常:如果程序运行出错(如试图访问未授权的内存区域),系统会自动切换到内核态来处理这个错误,防止程序崩溃。

外部中断:当外围设备(如打印机、键盘)完成任务时,会通知 CPU,这时候系统也会切换到内核态来处理这些外部事件。

切换的过程

在操作系统中,“切换”通常指的是 CPU 从用户态切换到内核态的过程。

外部中断发生:当外围设备(如打印机或键盘)完成任务或需要系统处理某些事情(比如用户按下了键盘上的一个键),设备会向 CPU 发送一个中断信号。

中断信号的接收:CPU 接收到这个中断信号后,会当前暂停正在执行的用户态程序的运行。

状态的切换:CPU 将控制权转移给操作系统的中断处理程序,这通常涉及到从用户态切换到内核态。因为内核态允许执行访问硬件和执行中断服务例程等操作。

执行中断服务例程:一旦在内核态,操作系统的中断服务例程(ISR)就会开始执行,处理来自外部设备的请求或响应。例如,如果是键盘产生的中断,ISR 可能会读取键盘缓冲区中的数据。

返回用户态:中断处理完成后,操作系统会将 CPU 的状态从内核态切换回用户态,继续执行之前被中断的程序。

为什么要有用户态和内核态?

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络

Linux Ollama 常用命令和 API 调用

· 阅读需 2 分钟
素明诚
Full stack development

安装 ollama

curl -fsSL https://ollama.com/install.sh | sh

19129b550cdfe1a30a05973ac4fccb9b## 下载模型

下载 gemma 进行测试,下次成功后会直接进入跟模型的交互模式。可以直接在命令行聊天

ollama run gemma:2b

你也可以下载自己需要的 https://ollama.com/library

查看模型

root@gptdev:/home# ollama list
NAME ID SIZE MODIFIED
gemma:2b b50d6c999e59 1.7 GB 24 minutes ago

查看模型详情

root@gptdev:/home# ollama show gemma:2b
Model
arch gemma
parameters 3B
quantization Q4_0
context length 8192
embedding length 2048

Parameters
repeat_penalty 1
stop "<start_of_turn>"
stop "<end_of_turn>"

License
Gemma Terms of Use
Last modified: February 21, 2024

删除模型

ollama rm <model-name>

运行模型

root@gptdev:/home# ollama run gemma:2b

9e5360abeb936307f17341381d6658e1## 退出交互模式

Use Ctrl + d or /bye to exit.
>>> /bye

使用 API 调用

generate 一次性回答

root@gptdev:/home# curl -XPOST http://localhost:11434/api/generate -d '{"model": "gemma:2b", "prompt": "星星为什么是一闪一闪的?", "stream": false}'

回答↓
{
"model": "gemma:2b",
"created_at": "2024-07-12T08:35:18.532841683Z",
"response": "星星不是一闪一闪的。星星是光源,是通过核反应产生光子的天体。",
"done": true,
"done_reason": "stop",
"context": [],
"total_duration": 3780790485,
"load_duration": 41295298,
"prompt_eval_count": 33,
"prompt_eval_duration": 134544000,
"eval_count": 23,
"eval_duration": 3562200000
}

聊天

root@gptdev:/home# curl http://localhost:11434/api/chat -d '{
"model": "gemma:2b",
"messages": [
{ "role": "system", "content": "You are an astronomer. Answer the following questions based on your knowledge of astronomy." },
{ "role": "user", "content": "星星为什么是一闪一闪的?中文回答~" }
],
"stream": false
}

回答↓
{
"model": "gemma:2b",
"created_at": "2024-07-12T08:39:00.414947479Z",
"message": {
"role": "assistant",
"content": "星星是由于其表面反射的灯光造成的。 这是因为星光的波长比地球的光波长更长,这意味着当它从遥远的星系中进入地球时,它被地球表面吸收的更多光线。 这使得我们可以看到的那部分光被反射回来,我们就能看到星星。\n\n星星之所以闪闪是因为它们非常光亮。 这意味着它们发射的光线非常强,可以照亮整个地球表面。 当我们看到星星时,我们看到的是它们反射回来的光。\n\n星星是宇宙中最亮的天体,可以见到的最远的天体。"
},
"done_reason": "stop",
"done": true,
"total_duration": 21237384982,
"load_duration": 45647661,
"prompt_eval_count": 54,
"prompt_eval_duration": 372113000,
"eval_count": 125,
"eval_duration": 20685706000
}

个人觉得 Ollama 真心挺不错的,让跑大模型这件事变的简单了,专心搞业务就行了。

Linux 安装 Go 配置环境变量

· 阅读需 1 分钟
素明诚
Full stack development

下载

wget https://studygolang.com/dl/golang/go1.22.4.linux-amd64.tar.gz

解压

sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz

bash

nano ~/.bashrc

# Go 环境变量设置
export GOROOT=/usr/local/go
export GOPATH=/usr/local/go-env
export GOPROXY=https://goproxy.cn,direct
export PATH=$PATH:/usr/local/go/bin

source ~/.bashrc

zsh

nano ~/.zshrc

# Go 环境变量设置
export GOROOT=/usr/local/go
export GOPATH=/usr/local/go-env
export GOPROXY=https://goproxy.cn,direct
export PATH=$PATH:/usr/local/go/bin

source ~/.zshrc

测试

检查 Go 语言的版本和环境变量

go version
go env

通过包管理器安装

sudo apt install golang-go

Linux 命令 nvidia-smi 参数

· 阅读需 2 分钟
素明诚
Full stack development

命令 nvidia-smi 输出的信息

06e4d05b11403eb3a9f8943902ac0e8f### 表格标题和版本信息

NVIDIA-SMI:显示 nvidia-smi 工具的版本号

Driver Version:当前安装的 NVIDIA 驱动版本

CUDA Version:系统支持的 CUDA 版本,这对开发者来说很重要,因为它决定了可以使用的 CUDA 工具和功能

GPU 列表

对于每块 GPU,表格都会显示以下信息,从左到右介绍

GPU:GPU 的编号,从 0 开始

Name:GPU 的型号,例如“NVIDIA GeForce RTX 3090”

Persistence-M:持久性模式的开关状态,通常在服务器和需长时间运行的环境中启用

Bus-Id:GPU 在系统中的 PCI 总线 ID

Disp.A:显示活动状态,显示是否有显示器连接到这块 GPU

Volatile Uncorr. ECC:显示是否启用了易失性未校正的错误校正码(ECC),通常用于计算密集型任务的可靠性

性能指标

Fan:风扇速度的百分比

Temp:GPU 的当前温度

Perf:性能状态,从 P0(最高性能)到 P12(最低性能)

**Pwr/Cap:**当前功率使用量和功率上限

Memory-Usage:GPU 内存的使用情况,显示已使用和总计的内存(例如,“2MiB / 24576MiB”)

GPU-Util:GPU 利用率的百分比,显示 GPU 被使用的程度

Compute M.:计算模式,通常是“Default”或“Exclusive”,影响 GPU 的访问控制

MIG M.:如果启用了多实例 GPU(MIG),这里会显示状态

进程信息

这部分列出了当前在 GPU 上运行的所有进程

PID:进程 ID

Type:进程类型,通常是 C(计算)或 G(图形)

Process name:进程名称

GPU Memory Usage:该进程使用的 GPU 内存量