一些常用的命令行记录

# 常用命令

# curl

cURL 是与网站或 API 进行交互,向终端发送请求并显示响应或将数据记录到文件的理想工具。有时,它用作较大脚本的一部分,将检索到的数据交给其他函数进行处理。

由于 cURL 可用于从服务器检索文件,所以通常用于下载网站的一部分。它可以很好地执行此功能,但有时 wget 命令更适合这项工作。

# 使用 Python 内置 HTTP 服务器

在 linux 上搭建一个简单的 HTTP 文件服务,让其他设备通过 curl 下载文件:

# 进入要共享的目录
cd /path/to/your/files
# 启动服务(默认端口 8000)
python3 -m http.server 8000
# 如需后台运行(按 Ctrl+C 后仍运行):
nohup python3 -m http.server 8000 > /dev/null 2>&1 &

在另一台设备上下载: curl http://<linux_IP>:8000 / 文件名 -o 本地保存名

# 页面检索

cURL 最基本命令是检索网站或文件: $ curl http://www.google.com

执行上述命令后,cURL 会检索您所提供页面的源代码并将其输出。

# 下载文件

添加 - output 选项来实现让 cURL 将网页文件保存到本地。

$ curl www.likegeeks.com --output filename
$ curl www.likegeeks.com -o filename

# 遵循重定向

如果在尝试对网站进行 URL 生成时输出为空,则可能意味着该网站告诉 cURL 重定向到其他 URL。默认情况下,cURL 不会遵循重定向,但是您可以使用 -L switch 来告诉它。
在本文的研究中,我们发现有必要在大多数网站上指定 - L,因此请务必记住这一小技巧。默认情况下,您甚至可能希望将其附加到大多数 cURL 命令中。

$ curl -L www.likegeeks.com

# 停止并继续下载

如果您的下载中断了,或者您需要下载一个大文件但又不想一次完成所有操作,所以 cURL 提供了一种选项,可以从中断处继续传输。

要手动停止传输,您可以使用 ctrl + c 组合键结束 cURL 进程,结束进程后,使用以下语法恢复下载

$ curl -C - example.com/some-file.zip --output MyFile.zip

-C switch 是恢复我们文件传输的设备,但还要注意,它后面紧跟一个破折号(-)。这告诉 cURL 继续文件传输,但是实现这一步,首先要查看已经下载的部分,找到下载的最后一个字节才可以确定从何处可以恢复。

# 指定超时

如果您希望 cURL 在您不做操作之后的一段时间还可以继续之前的工作,那么可以在命令中指定超时。

使用 -m switch 或者 –connect-timeout 指定执行命令所需的最长时间。经过指定的时间后,cURL 将退出正在执行的操作,即使它正在下载或上传文件。

cURL 会以秒为单位指定您想要的最长时间。因此,要在一分钟后超时,该命令将如下所示:

$ curl -m 60 example.com
$ curl --connect-timeout 60 example.com

# 使用用户名和密码

您可以使用 - u switch 在 cURL 命令中指定用户名和密码。例如,如果您想通过 FTP 服务器进行身份验证,则语法如下所示:

$ curl -u username:password ftp://example.com

# 使用代理

在连接主机之前,很容易直接使用 cURL 来使用代理。cURL 将默认使用 HTTP 代理,除非您另外指定。

使用 - x switch 定义代理。由于在此示例中未指定协议,因此 cURL 将假定它是 HTTP 代理。

$ curl -x 192.168.1.1:8080 http://example.com

# conda 命令

# 基础操作

# 查看 conda 版本

conda --version 或者 conda -V

# 更新 conda

conda update conda

# 查看 conda 环境详情信息

conda info

# 虚拟环境管理

# 查看已创建的虚拟环境

conda env list 或者 conda info --envs

# 创建新的虚拟环境

conda create --name envname python=verionID

通过 -n--name 来自定义的环境名称, verionID 指定 Python 的版本,例如创建一个名为 pyweb 的 python 环境: conda create -n pyweb python=3.12

# 激活虚拟环境

激活名为 envname 的虚拟环境: conda activate envname

# 退出当前虚拟环境

conda deactivate

# 删除虚拟环境

conda remove -n envname --all , 其中, envname 是需要删除的虚拟环境名

# 复制虚拟环境

conda create --name new_env_name --clone old_env_name

# 分享 / 备份一个虚拟环境

分享环境的快速方法是向别人发送你环境的.yml 文件。

首先激活要分享的环境,在当前工作目录下生成一个 environment.yml 文件: conda env export > environment.yml

对方拿到 environment.yml 文件后,将该文件放在工作目录下,可以通过以下命令从该文件创建环境即可: conda env create -f environment.yml

# 包管理

# 安装环境包

安装某个包: conda install [package]

指定包版本: conda install xlrd=1.2.0

使用 pip 安装: pip install xlrd==1.2.0

批量安装 requirements.txt 文件中包含的组件依赖: conda install --yes --file requirements.txt

# 导出环境包

批量导出包含环境中所有依赖包到 requirements.txt 文件: conda list -e > requirements.txt

# 删除环境包

删除当前环境中的某个包: conda remove [package]

使用 pip 删除包: pip uninstal [package]

# 升级环境包

升级当前环境中的某个包: conda update [package]

升级所有包: conda update --all

# 搜索环境包

搜索当前环境中的某个包: conda search [package]

# 删除没有用的安装包

Conda 安装的包都在目录 Anaconda/pkgs 下。随着使用,conda 安装的包也越来越多;有时候会出现以下不好的情况:

有些包安装之后,从来没有使用过;
一些安装包的 tar 包也保留在了计算机中;
由于依赖或者环境等原因,某些包的不同版本重复安装。
上面的这些情况使得 anaconda 显得更加冗余,并且浪费储存;

对于这些情况可以使用 conda clean 净化 Anaconda: conda clean -p 或者 conda clean --packages

删除 tar 包 conda clean -t 或者 conda clean --tarballs

删除索引缓存、锁定文件、未使用过的包和 tar 包: conda clean -y --all

# 镜像源管理

# 查看镜像源

conda config --show channels

# 添加镜像源

如:添加清华源

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/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/

# 配置安装包时显示安装来源

设置从 channel 中安装包时显示 channel 的 url,这样就可以知道包的安装来源: conda config --set show_channel_urls yes

# 清除索引缓存

清除索引缓存,保证用的是镜像站提供的索引: conda clean -i

# 切换回默认源

conda config --remove-key channels

# 移除镜像源

如:移除清华源

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/

# 临时指定镜像源

临时指定安装某个包使用的镜像源: pip install [package] -i https://pypi.tuna.tsinghua.edu.cn/simple/ 或者 pip install [package] -i http://pypi.douban.com/simple/--trusted-host pypi.douban.com

# 操作系统配置

# Centos

# Centos7 yum 换源

在最小化安装 Centos 后,对 centos 进行 yum 换源:

# 1、备份 & 移除

你可以选择备份 yum 文件或者直接移除 yum 文件

备份 yum:

mv /etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup

移除现有 yum 文件:

cd /etc/yum.repos.d
rm -rf *

# 2、下载阿里云镜像源

下载 阿里云 Centos7-yum 源 并上传到 Centos7 的 /etc/yum.repos.d 目录下,将文件更名为 Centos-7.repo
或者使用 wget 下载: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

注意:修改 Centos-7.repo 文件将所有 $releasever 替换为 7

vi /etc/yum.repos.d/CentOS-Base.repo
:% s/$releasever/7/g
:wq

# 3、生成缓存

运行 yum makecache 生成缓存

# PNETLAB

# VNC 乱码

部分虚拟设备通过 VNC 启动,在 HTML 控制台中启动虚机出现 VPN 乱码、页面刷新慢等情况,可尝试修改 Qemu 选项

部分虚机 Qemu 启动选项如下

-machine type=pc-1.0,accel=kvm -serial mon:stdio -nographic -display none -nodefconfig -rtc base=utc -boot order=d

修改为如下启动选项

-machine type=pc-1.0,accel=kvm -vga std -serial mon:stdio -nodefconfig -rtc base=utc -boot order=d -vnc :0

# qemu-img 添加磁盘

qemu-img 的虚拟机磁盘通常使用 QCOW2 格式,默认创建节点时,LAB 会为该节点创建一个包含单个磁盘的 QCOW2 文件。但有些虚拟机可能需要多个磁盘。

以某厂商防火墙为例,该防火墙在创建时需要两个磁盘。分别用于系统和数据存储,操作步骤如下:

# 1. 创建磁盘初始化脚本

在模板目录中创建初始化脚本: /opt/unetlab/addons/qemu/abtSG-8000-R6.2/__init__.py

#!/usr/bin/env python3
import os
import shutil
import glob
def init (hdl, lab, args):
    # 获取当前镜像目录路径
    template_dir = os.path.dirname (os.path.abspath (__file__))
    
    # 查找所有磁盘模板文件 (hda.qcow2, hdb.qcow2, etc.)
    disk_templates = sorted (glob.glob (os.path.join (template_dir, 'hd?.qcow2')))
    
    # 支持的磁盘前缀映射 (hda → virtioa, hdb → virtiob, etc.)
    prefix_map = {
        'hda': 'virtioa',
        'hdb': 'virtiob',
        'hdc': 'virtioc',
        'hdd': 'virtiod'
    }
    
    created_disks = []
    
    for template_path in disk_templates:
        # 提取磁盘标识符 (hda, hdb 等)
        disk_id = os.path.basename (template_path).split ('.')[0]
        
        # 确定目标文件名
        target_file = f"{prefix_map.get (disk_id, 'virtio' + disk_id [2:])}.qcow2"
        target_path = hdl.obj_abs (target_file)
        
        # 仅当目标文件不存在时才复制
        if not os.path.exists (target_path):
            shutil.copy (template_path, target_path)
            os.chown (target_path, 0, 0)
            os.chmod (target_path, 0o644)
            created_disks.append (target_file)
    
    # 如果没有找到任何磁盘模板,使用默认行为
    if not created_disks:
        default_disk = hdl.obj_abs ('virtioa.qcow2')
        if not os.path.exists (default_disk):
            shutil.copy (
                os.path.join (template_dir, 'hda.qcow2'),
                default_disk
            )
            os.chown (default_disk, 0, 0)
            os.chmod (default_disk, 0o644)
    
    return 0

# 2. 创建磁盘文件

在存放镜像的目录下,创建一个新的 qcow2 文件

备注:如果 vm 无法进入命令行界面,可尝试使用 vm 登录后,点击平台上的 "重启系统",再回到 vm 操作。

cd /opt/unetlab/addons/qemu/abtSG-8000-R6.2
qemu-img create -f qcow2 hdb.qcow2 1G

# 3. 设置文件权限

修改新建的 __init__.pyhdb.qcow2 的文件权限

chmod 755 __init__.py
chmod 755 hdb.qcow2

# 4. 重启服务

重启 PNETLAB,再启动 qemu-img,检查数据盘是否挂载。

# PNETLAB 挂载磁盘

在 vmware 中,新增磁盘后,LAB 中不显示,此时需要挂在磁盘:

在 webui 中,点击 系统 -> 系统设置 -> 重启,即可在 vm 中进入 CLI 页面

使用 lsbk,200GB 的物理磁盘只挂载了 98GB,通过如下步骤进行磁盘挂载

sda      200G 磁盘
├─sda1    1M  分区 (未使用)
├─sda2    2G  分区 (挂载到 /boot)
└─sda3   98G  分区
  └─ubuntu--vg-ubuntu--lv 98G LVM 逻辑卷 (挂载到根目录 /)

# 1. 创建新分区

拓展根目录到剩余空间

sudo fdisk /dev/sda

fdisk 交互页面

n       # 新建分区
Enter   # 默认分区号 (4)
Enter   # 默认起始扇区
Enter   # 默认结束扇区 (使用所有剩余空间)
t       # 更改分区类型
4       # 选择新分区
8e      # 设置为 Linux LVM 类型
w       # 保存退出

# 2. 重读分区表

sudo partprobe /dev/sda

# 3. 将新分区初始化为物理卷

sudo pvcreate /dev/sda4

# 4. 扩展卷组

sudo vgextend ubuntu-vg /dev/sda4  # "ubuntu-vg" 是系统的 VG 名(从 lsblk 可知)

# 5. 扩展逻辑卷(使用所有可用空间)

# 查找所有逻辑卷
sudo lvscan
# 示例输出:
# ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [98.00 GiB] inherit
# 使用输出中的路径
sudo lvextend -l +100% FREE /dev/ubuntu-vg/ubuntu-lv

# 6. 调整文件系统大小(在线扩展)

sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--1v

# 7. 验证结果

df -h /  # 查看根目录大小应变为~198GB
lsblk    # 查看所有空间已分配
更新于 阅读次数