typecho 发布的文章

CentOS7 命令行连接Samba并下载文件两种常用方法

一、安装依赖工具

bash

yum install -y samba-client cifs-utils
 

方式1:smbclient 临时登录下载(无需挂载,单次操作)

  1. 查看Samba共享列表

bash

格式:smbclient -L //Samba服务器IP -U 共享用户名

smbclient -L //192.168.1.100 -U username
 

回车后输入密码即可列出所有共享文件夹。

  1. 进入Samba交互式终端

bash

smbclient //192.168.1.100/share_name -U username
 

  •  //IP/share_name :服务器IP + 共享目录名
  • 输入密码进入  smb:\>  交互界面

常用下载命令

bash

下载单个文件到当前Linux目录

get 远端文件名 本地保存文件名

递归下载整个文件夹(必须加-r)

mget -r 远端文件夹名

查看远端目录

ls

切换远端目录

cd 文件夹名

退出

exit
 

示例:

bash

smb: \> get test.tar.gz /root/test.tar.gz
 

方式2:mount 永久挂载Samba共享(推荐,像本地文件夹一样拷贝)

  1. 创建本地挂载目录

bash

mkdir -p /mnt/samba
 

  1. 执行挂载

bash

mount -t cifs //192.168.1.100/share_name /mnt/samba -o username=用户名,password=密码,vers=2.0
 

  •  vers=2.0 :兼容CentOS7与多数Windows/Samba服务端协议,连接报错就换 vers=3.0 
  1. 直接cp下载文件

挂载后  /mnt/samba  就是Samba共享盘,直接复制:

bash

复制单个文件

cp /mnt/samba/xxx.zip /home/

复制整个文件夹

cp -r /mnt/samba/文件夹 /root/
 

  1. 卸载共享(用完解除挂载)

bash

umount /mnt/samba
 

开机自动挂载(可选)

编辑  /etc/fstab  末尾添加一行:

plaintext

//192.168.1.100/share_name /mnt/samba cifs username=user,password=pass,vers=2.0 0 0
 

常见报错排查

1. 协议不匹配:挂载参数添加  vers=2.0  或  vers=3.0 
2. 权限拒绝:确认Samba账号密码正确、共享目录开启可读权限
3. 无法解析主机:直接用IP地址,不要用计算机名
4. 防火墙拦截:服务器端放行139、445端口

需要我根据你Samba服务器IP、共享名、账号密码给你生成一条可直接复制执行的完整命令吗?

KVM虚拟磁盘迁移两种常用方法

方式一:在线迁移(虚拟机不用关机,推荐)

  1. 命令格式

bash

virsh blockcopy 虚拟机名 vda /新路径/磁盘.qcow2 --wait --verbose
 

  • vda:虚拟机第一块磁盘设备名,多块盘依次vdb/vdc
  •  --wait  等待复制完成, --verbose  显示进度
  1. 复制完成切换磁盘

1. 复制结束后执行切换

bash

virsh blockjob 虚拟机名 vda --finish
 

2. 编辑虚拟机配置,把磁盘路径改成新路径

bash

virsh edit 虚拟机名
 

找到    修改为新路径,保存退出。

  1. 确认正常运行后,删除旧磁盘文件。

方式二:离线迁移(虚拟机关机,简单稳定)

  1. 先关闭虚拟机

bash

virsh shutdown 虚拟机名

确认关机

virsh domstate 虚拟机名
 

  1. 复制磁盘镜像(二选一)

① cp 普通复制

bash

cp /旧目录/xxx.qcow2 /新目录/xxx.qcow2
 

② qemu-img convert(可同时转换格式/压缩)

bash

qemu-img convert -O qcow2 /旧路径/源盘.qcow2 /新路径/目标盘.qcow2
 

  1. 修改虚拟机XML配置

bash

virsh edit 虚拟机名
 

修改磁盘source file路径到新位置,保存。

  1. 启动虚拟机验证

bash

virsh start 虚拟机名
 

运行正常后删除旧磁盘文件。

方式三:存储池迁移(用libvirt存储池管理)

1. 定义新存储池,启动池
2. 移动镜像到存储池目录
3. edit虚拟机修改磁盘路径

补充要点

1. 迁移快照盘:有快照链不要直接cp,优先用 blockcopy 或 qemu-img convert 合并快照;
2. NFS共享存储迁移:直接复制,注意权限;
3. 迁移后报错:检查文件读写权限、SELinux上下文。

项目网址:https://github.com/ihmily/DouyinLiveRecorder
一款简易的可循环值守的直播录制工具,基于FFmpeg实现多平台直播源录制,支持自定义配置录制以及直播状态推送。
使用源码运行,可参考下面的步骤。

1.首先拉取或手动下载本仓库项目代码

git clone https://github.com/ihmily/DouyinLiveRecorder.git

2.进入项目文件夹,安装依赖

cd DouyinLiveRecorder

在运行命令之前,请确保您的机器上安装了 Docker 和 Docker Compose

1.快速启动

最简单方法是运行项目中的 docker-compose.yaml 文件,只需简单执行以下命令:

docker-compose up

可选 -d 在后台运行。

2.构建镜像(可选)

如果你只想简单的运行程序,则不需要做这一步。Docker镜像仓库中代码版本可能不是最新的,如果要运行本仓库主分支最新代码,可以本地自定义构建,通过修改 docker-compose.yaml 文件,如将镜像名修改为 douyin-live-recorder:latest,并取消 # build: . 注释,然后再执行

docker build -t douyin-live-recorder:latest .
docker-compose up

或者直接使用下面命令进行构建并启动

docker-compose -f docker-compose.yaml up

问题描述及解决:(在构建时会出现连接不上docker服务器的问题。设置了docker代理,依然会出错。使用下面的方法!)

如果折腾代理太繁琐,你可以用下面这个完全不需要 VPN 代理、百分之百能成功的闭环方案:

  1. 修改 Dockerfile 换成国内独立源

打开 Dockerfile,把第一行换成华为云的独立托管源(它不需要去 auth.docker.io 拿 Token,可以直接下载):
Dockerfile

FROM
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/python:3.11-slim

  1. 关闭 BuildKit 引擎进行编译

在编译时,在命令前面加上 DOCKER_BUILDKIT=0。这会强制 Docker
使用老版本引擎,老引擎配合国内独立源,可以完全避开官方的认证服务器: Bash

sudo DOCKER_BUILDKIT=0 docker build -t douyin-live-recorder:latest .

用这个方法,只要你的正常网络能打开网页,就一定能编译成功。你可以先用这个方法把项目跑起来!

3.停止容器实例

docker-compose stop

4.注意事项

①在docker容器内运行本程序之前,请先在配置文件中添加要录制的直播间地址。

②在容器内时,如果手动中断容器运行停止录制,会导致正在录制的视频文件损坏!

无论哪种运行方式,为避免手动中断或者异常中断导致录制的视频文件损坏的情况,推荐使用 ts 格式保存。

以上生成了docker镜像之后,可以运行docker run命令来运行docker镜像
sudo docker run -d \
-it \
--name douyin-recorder \
--restart always \
-e TERM=xterm-256color \
-v $(pwd)/config:/app/config \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/backup_config:/app/backup_config \
-v $(pwd)/downloads:/app/downloads \
ihmily/douyin-live-recorder:latest

项目地址:https://github.com/JoeanAmier/TikTokDownloader
我的目的是使用docker来运行,避免污染了本地环境。在使用过程中有一些心得,写出来,存档
Docker 容器

获取镜像
    方式一:使用 Dockerfile 文件构建镜像
    方式二:使用 docker pull joeanamier/tiktok-downloader 命令拉取镜像
    方式三:使用 docker pull ghcr.io/joeanamier/tiktok-downloader 命令拉取镜像
创建容器:docker run --name 容器名称(可选) -p 主机端口号:5555 -v tiktok_downloader_volume:/app/Volume -it <镜像名称>

注意:此处的 <镜像名称> 需与您在第一步中使用的镜像名称保持一致(例如 joeanamier/tiktok-downloader 或 ghcr.io/joeanamier/tiktok-downloader)
运行容器
    启动容器:docker start -i 容器名称/容器 ID
    重启容器:docker restart -i 容器名称/容器 ID

Docker 容器无法直接访问宿主机的文件系统,部分功能不可用,例如:从浏览器读取 Cookie;其他功能如有异常请反馈!

心得:使用该方法前,

首先,一键安装docker

其次,要让docker能访问外网。否则docker拉取不到该镜像

再次,由于拉取的镜像内部没有安装ffmpeg所以无法下载直播流,还需要重新封装镜像,把ffmpeg安装好之后再封装成新镜像。

自己写一个只有几行代码的 Dockerfile,以你下载的镜像作为基础镜像(FROM)来构建:

在你的电脑上新建一个空文件夹douyindownloader-v2,在里面创建一个名为 Dockerfile 的文件。

写入以下内容:
Dockerfile

# FROM 后面填你下载的原镜像名字

FROM joeanamier/tiktok-downloader:latest

追加安装 ffmpeg(以 Debian/Ubuntu 系统为例)

USER root
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

在该文件夹下打开终端,运行构建命令:
Bash

docker build -t my-tiktok-downloader:v2 .

再次,创建容器

sudo docker run --name doyindownloaderv2 -p 5556:5555 -v douyin_downloader_volume:/app/Volume -it my-tiktok-downloader:v2

然后,设置coockie。

由于是在docker中运行,无法直接获取到cookie需要将获取的cookie写到配置文件中
配置文件的位置:sudo vi /var/lib/docker/volumes/douyin_downloader_volume/_data/settings.json
cookie的获取:在 筛选器 输入框输入 cookie-name:odin_tt
将该值保存到settings.json的cookie字段中。

在 CentOS 7 上配置 Samba 服务可以实现 Windows 和 Linux 之间的文件共享。Samba 既可以配置为需要密码认证的私密共享,也可以配置为无需密码的公共共享。

由于 CentOS 7 已经在 2024 年停止维护,请确保你已经按照之前的步骤将 YUM 源切换到了官方的 Vault 历史归档源,否则安装会报错。

以下是完整的安装与配置全攻略:

第一步:安装 Samba 软件
在 root 终端下运行以下命令安装 Samba 及其核心组件:

Bash
yum install -y samba samba-client
第二步:配置共享方案(二选一)
Samba 的核心配置文件位于 /etc/samba/smb.conf。在修改前,我们先备份一下默认配置:

Bash
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
方案 A:配置【需要密码】的私密共享(推荐)
这种方案安全度高,适合存放私人或重要文件。

创建 Linux 用户和共享目录:

Bash

创建一个专门用于访问 Samba 的系统用户(无需登录系统的 shell)

useradd -s /sbin/nologin smbuser

创建共享文件夹并赋予权限

mkdir -p /opt/samba/private
chown -R smbuser:smbuser /opt/samba/private
chmod -R 775 /opt/samba/private
设置 Samba 访问密码:
使用 smbpasswd 命令为刚才创建的用户设置 Samba 专用的远程访问密码(可以与 Linux 系统密码不同):

Bash
smbpasswd -a smbuser
修改配置文件:
使用编辑器打开 nano /etc/samba/smb.conf,清空或在文件末尾追加以下内容:

Ini, TOML
[global]

workgroup = WORKGROUP
security = user
passdb backend = tdbsam

[PrivateShare]

comment = Private Secured Folder
path = /opt/samba/private
browseable = yes
writable = yes
valid users = smbuser

方案 B:配置【无需密码】的公共共享(匿名访问)
这种方案无需密码,局域网内的任何人都能读写,适合共享公开资料。

创建公共共享目录:

Bash
mkdir -p /opt/samba/public

赋予所有人完全读写的权限

chmod -R 777 /opt/samba/public
chown -R nobody:nobody /opt/samba/public
修改配置文件:
使用编辑器打开 nano /etc/samba/smb.conf,将内容修改为:

Ini, TOML
[global]

workgroup = WORKGROUP
security = user
map to guest = Bad User   # 关键:将未认证的用户映射为匿名访客

[PublicShare]

comment = Public Anonymous Folder
path = /opt/samba/public
browseable = yes
writable = yes
guest ok = yes
guest only = yes

第三步:配置 SELinux 和防火墙
CentOS 7 默认的 SELinux 和防火墙策略非常严格,如果不配置,Windows 拦截会报错“无法访问”。

  1. 配置 SELinux(放行 Samba 目录权限)
    如果是测试环境,可以直接临时关闭 SELinux (setenforce 0)。如果是生产环境,请执行以下命令赋予目录 Samba 上下文属性:

Bash

如果使用的是方案 A (私密共享)

chcon -t samba_share_t /opt/samba/private

如果使用的是方案 B (公共共享)

chcon -t samba_share_t /opt/samba/public

  1. 配置防火墙(放行 Samba 端口)
    Samba 服务主要占用 137/138 UDP 和 139/445 TCP 端口。使用 FirewallD 放行:

Bash
firewall-cmd --zone=public --add-service=samba --permanent
firewall-cmd --reload
注意: 如果你的 CentOS 7 部署在阿里云、腾讯云等云服务器上,还必须去云控制台的安全组里,放行 TCP 445 和 TCP 139 端口。

第四步:启动 Samba 服务
配置完成后,启动服务并将其设置为开机自启:

Bash

启动 Samba 核心服务 (smb) 和 净名解析服务 (nmb)

systemctl start smb nmb
systemctl enable smb nmb
检查运行状态:

Bash
systemctl status smb
如果显示绿色的 active (running),说明 Samba 已经在后台顺利运转。

第五步:从客户端连接共享

  1. 在 Windows 电脑上连接
    按下快捷键 Win + R 打开“运行”窗口。

输入 \你的服务器IP(例如:\192.168.1.50),然后点击确定。

如果是私密共享: 弹出的输入框中输入用户名 smbuser 和你在 smbpasswd 中设定的密码即可。

如果是公共共享: 直接就能看到 PublicShare 文件夹,双击即可无密码进入。

  1. 在 macOS 电脑上连接
    打开 Finder(访达),按下 Cmd + K。

在服务器地址栏输入 smb://你的服务器IP,点击连接即可。