小陈博客-个人分享 - 脚本 https://reinness.com/category/script.html zh-CN Python, Shell, Conda, Docker Wed, 06 Aug 2025 11:28:00 +0800 Wed, 06 Aug 2025 11:28:00 +0800 FFmpeg 从入门到熟练:玩转视频剪辑、压缩与滤镜的神级工具 https://reinness.com/posts/276 https://reinness.com/posts/276 Wed, 06 Aug 2025 11:28:00 +0800 Caleb
适合人群:剪辑视频、压缩清晰度、搞图搞音、做自媒体的你,全都能用上!不需要编程经验,会复制命令行就行。

👉 在线体验 FFmpeg

你是否经常遇到这种情况?
  • 想把 .mov 转成 .mp4,结果文件暴涨 2 倍?
  • 用某宝压缩视频,画质一塌糊涂?
  • 剪视频软件动辄 2G,加载还卡顿?
  • 手里有几十个视频要统一转码,不想手动点鼠标?

只需一个命令就能搞定这些事的神奇工具,就是——FFmpeg

🛠️ 第 1 节:安装 FFmpeg

各平台安装方式

Windows 安装

  1. FFmpeg 官网下载页 → 选择 Windows 版本
  2. 推荐下载 gyaan/ffmpeg-release 或 gyan.dev 提供的 zip 包(含完整二进制)
  3. 解压后,将 bin 目录加入系统环境变量 Path
  4. 打开 CMD,输入 ffmpeg -version 检查是否安装成功
🎯 不想设置环境变量?可以用绿色版,直接进入 bin 目录运行。

macOS 安装

推荐使用 Homebrew:

brew install ffmpeg

如需支持更多格式(如 x264、fdk-aac):

brew install ffmpeg --with-fdk-aac --with-libvpx --with-x265

Linux 安装

Ubuntu/Debian:

sudo apt update
sudo apt install ffmpeg

CentOS/Fedora:

sudo dnf install ffmpeg

安装完成后,用这个命令验证版本:

ffmpeg -version

📐 第 2 节:命令结构快速理解

我们来看一条最基础的 FFmpeg 命令:

ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 output.mp4

命令逐项解析

  • -i input.mp4:输入文件
  • -vf scale=1280:720:缩放
  • -c:v libx264:使用 H.264 编码器
  • output.mp4:输出文件名

📌 小技巧:最小命令也能用!
你甚至可以不写任何参数:

ffmpeg -i input.mp4 output.avi

它会自动根据扩展名判断格式,非常适合小白。

🔁 第 3 节:常用操作速查

本节适合「剪一点」、「转一下」、「压一压」的视频需求,全是能立即拿来用的命令。

🎞️ 格式转换(转码)

ffmpeg -i input.mp4 -vf "fps=10,scale=480:-1:flags=lanczos" -c:v gif output.gif
  • fps=10:控制帧率,越低越小巧
  • scale=480:-1:宽 480,自动等比缩放
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset fast output.mp4
  • -crf 数值越低画质越好(0~51,推荐 18~28)

✂️ 视频剪辑

ffmpeg -ss 00:00:30 -i input.mp4 -t 10 -c copy output.mp4
  • -ss:开始时间
  • -t:持续时长
  • -c copy:不重新编码,超快!
ffmpeg -i input.mp4 -vf "crop=640:360" output.mp4
# 1. 创建文件列表.txt
echo "file '1.mp4'" > list.txt
echo "file '2.mp4'" >> list.txt

# 2. 合并
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

视频必须使用同一编码格式,否则拼接会失败。

🔊 音视频操作

ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v:0 -map 1:a:0 -shortest output.mp4
ffmpeg -i input.mp4 -an output.mp4

📏 视频参数调整

ffmpeg -i input.mp4 -vf "scale=640:-1" output.mp4
  • -1 表示自动等比例缩放
ffmpeg -i input.mp4 -r 24 output.mp4
ffmpeg -i input.mp4 -b:v 1000k -b:a 128k output.mp4
  • -b:v:视频比特率(越小越模糊)
  • -b:a:音频比特率

🖼 添加水印和字幕

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
  • overlay=10:10 表示左上角(x=10, y=10)
ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4

字幕文件必须是 .srt 格式,且 UTF-8 编码。

🧙 第 4 节:FFmpeg 滤镜魔法

滤镜 = 滤镜表达式 + 视频滤镜选项 -vf(Video Filter)。是 FFmpeg 视频处理的灵魂核心。

📋 滤镜的基本格式

ffmpeg -i input.mp4 -vf "滤镜1=参数,滤镜2=参数" output.mp4
  • -vf:指定视频滤镜(Video Filter)
  • , 分隔多个滤镜,按顺序处理(滤镜链)
  • filter_complex:用于更复杂的滤镜图(后面讲)

🎯 常见滤镜实战

我们一个个来,不多讲,直接用。

scale:视频缩放

ffmpeg -i input.mp4 -vf "scale=720:-1" output.mp4
  • 把视频宽度缩放为 720,高度按比例自动调整

crop:裁剪画面

ffmpeg -i input.mp4 -vf "crop=640:360:100:50" output.mp4
  • crop=w:h:x:y

    • 宽 640、高 360
    • 从位置 (100, 50) 开始裁剪

fade:淡入/淡出特效
淡入前 30 帧:

ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=1" output.mp4

淡出最后 1 秒:

ffmpeg -i input.mp4 -vf "fade=t=out:st=9:d=1" output.mp4
  • t=in/out:类型
  • st:开始时间(秒)
  • d:持续时间(秒)

hue:调色滤镜

调节色相、饱和度等:

ffmpeg -i input.mp4 -vf "hue=s=0" output.mp4
  • s=0:去饱和度,效果类似黑白

更多玩法:

ffmpeg -i input.mp4 -vf "hue=h=60:s=2" output.mp4

drawtext:添加文字(内置字幕)

ffmpeg -i input.mp4 -vf "drawtext=text='你好FFmpeg':fontcolor=white:fontsize=36:x=10:y=20" output.mp4

需安装字体支持库,如 Linux 下需 libfreetype

  • 可用参数:
  • x/y:坐标
  • fontsize:字体大小
  • fontfile:指定字体路径
  • enable='between(t,2,5)':只显示第 2\~5 秒

🔗 滤镜链 vs 滤镜图

进阶概念:filterchain vs filtergraph

✅ 滤镜链(Filterchain)

-vf "scale=640:-1,eq=contrast=1.5"
  • 滤镜按顺序执行,适合线性处理

✅ 滤镜图(Filtergraph)

-filter_complex "[0:v]scale=640:360,fade=t=in:st=0:d=2[out]" -map "[out]"
  • 适合复杂分支、混流、多轨合成

🧪 第 5 节:编码器与压缩优化

编码器是 FFmpeg 的发动机。选得好、调得巧,能压 70% 体积、保 90% 画质。

🎞️ 视频编码器选项速览

编码器优点缺点常见扩展名
libx264兼容性最好,速度快文件偏大.mp4
libx265体积更小,同等画质更强编码更慢,不支持老设备.mp4
libvpx-vp9开源,浏览器支持广压制较慢.webm
aom-av1体积最小,画质极佳压制极慢,硬件支持差.mkv

推荐用 libx264libx265,平衡兼容性与压缩效率。

🎛️ 常用压缩参数组合

我们用 H.264(libx264)为例,来压一个高清 MP4。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

参数解析:

  • -c:v libx264:选择 H.264 编码器
  • -crf 23:质量控制(越小越清晰,范围 051,推荐 1828)
  • -preset medium:编码速度(推荐值:ultrafast → slow)
  • -c:a aac -b:a 128k:音频编码器与码率

📊 CRF 不同数值的效果对比

CRF 值画质文件大小
18几乎无损最大
23兼顾清晰与体积推荐默认
28有轻微模糊更小体积

preset 的效果对比

-preset ultrafast / superfast / veryfast / faster / fast / medium / slow / slower / veryslow
  • 越慢越小,但越耗 CPU
  • 推荐一般用 medium,极限压缩才用 slower

💡 多线程加速压缩(高级用法)

FFmpeg 会自动启用多线程,但你可以手动指定:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast -threads 4 output.mp4
  • -threads 4:限制为 4 核压制(可省略)

🎯 libx265 的压缩优势

对同样一段 1080p 视频,用 H.264 和 H.265 压缩对比如下:

编码器文件大小肉眼清晰度编码耗时
libx264120MB清晰2 分钟
libx26575MB清晰3 分半

使用 libx265 时,音频编码器仍可用 aac,例如:

ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k output.mp4

🧨 NVIDIA + hevc_nvenc 兼容性坑

在使用 hevc_nvenc 编码器时,第一帧(尤其是 seek 后重新编码的第一帧)如果不是关键帧或初始化参数未设置完整,会出现以下情况:

  • 首帧画面是绿屏或马赛克
  • ffmpeg 没有报错,但第一秒异常
  • 多发生在精准 seek (-ss + -accurate_seek) + HEVC 编码器时

这是 NVIDIA 硬件编码器的一个“兼容性坑”。

📦 第 6 节:批处理与自动化

当你面对一大堆视频,不想一个个手动操作时,批处理是你的好帮手。

💻 批量转码当前目录下所有 .mp4 文件

macOS / Linux 示例(bash

for f in *.mp4; do
  ffmpeg -i "$f" -c:v libx264 -crf 24 -preset medium -c:a aac -b:a 128k "out_$f"
done

Windows 示例(.bat 文件)

@echo off
for %%f in (*.mp4) do (
  ffmpeg -i "%%f" -c:v libx264 -crf 24 -preset medium -c:a aac -b:a 128k "out_%%f"
)

保存为 batch_compress.bat,放在视频目录下双击运行即可。

🧪 与 Python/Powershell 联动处理

Python 示例(调用 FFmpeg 命令)

import subprocess
from pathlib import Path

for f in Path(".").glob("*.mp4"):
    output = f"compressed_{f.name}"
    subprocess.run([
        "ffmpeg", "-i", str(f),
        "-c:v", "libx264", "-crf", "24", "-preset", "fast",
        "-c:a", "aac", "-b:a", "128k", output
    ])

可以将 FFmpeg 与 Flask、Gradio 等结合做成本地 Web 转码器。


🗃️ 文件名优化/自动重命名

ffmpeg -i input.mp4 -c:v libx264 -crf 24 output_$(date +%Y%m%d_%H%M).mp4
  • 通过 shell 插入时间戳,避免文件覆盖

🔚 结语:你的 FFmpeg 超能力已解锁!

恭喜你,已经掌握 FFmpeg 的核心技能:安装 → 转码 → 剪辑 → 滤镜 → 压缩 → 批处理。

你现在可以:

  • 🚀 批量压缩 20G 视频资料包
  • 🎬 制作带字幕的教学视频
  • 🖼 把视频画面变成 GIF + 淡入淡出 + 水印
  • 🎞 一行命令生成短视频片头片尾

🎁 推荐工具/文档/资源合集

FFmpeg 官网

FFmpeg Filters 文档

FFmpeg Cheat Sheet

]]>
0 https://reinness.com/posts/276#comments https://reinness.com/feed/category/script.html
PIP 更换国内安装源 https://reinness.com/posts/247 https://reinness.com/posts/247 Thu, 11 Jan 2024 14:31:00 +0800 Caleb 修改源方法

临时使用

可在使用 pip 的时候在后面加上 -i 参数,指定 pip 源

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

永久修改

Linux

使用文本编辑工具打开 ~/.pip/pip.conf 文件 (如果没有当前文件夹或文件,请创建后操作) ,修改文件内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

Windows

WIN+R 打开用户目录 %HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件, 内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

pip 国内镜像

厂商源地址
阿里云https://mirrors.aliyun.com/pypi/simple/
中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣https://pypi.douban.com/simple/
清华大学https://pypi.tuna.tsinghua.edu.cn/simple/
]]>
1 https://reinness.com/posts/247#comments https://reinness.com/feed/category/script.html
Conda安装与镜像源配置 https://reinness.com/posts/245 https://reinness.com/posts/245 Thu, 11 Jan 2024 14:04:00 +0800 Caleb 安装

Anaconda

清华源

Miniconda

清华源

配置

查看当前源

conda config --show channels

替换源

语法如下

conda config --add channels https://xxxxxxxxxxxxxxx

针对清华源和腾讯源替换的方法

清华源

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/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/

腾讯源

conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/free/
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/main/
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/pro/

移除源

语法如下

conda config --remove channels https://xxxxxxxxxxxxxxx

针对清华源和腾讯源移除的方法

清华源

conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/

腾讯源

conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/pkgs/free/
conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/pkgs/main/
conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/
conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/pkgs/pro/

使用配置文件修改

使用文档编辑工具打开 ~/.condarc 文件,即可手动修改配置信息。

channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro/
  - defaults
show_channel_urls: true
]]>
0 https://reinness.com/posts/245#comments https://reinness.com/feed/category/script.html
Python 绘制古风山水画 https://reinness.com/posts/184 https://reinness.com/posts/184 Tue, 25 Oct 2022 19:48:00 +0800 Caleb 使用过部分 python 工具之后,想着是否可以通过操作图片来生成山水画,遂开始了想法。

上原图:

山水画原图

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import numpy as np
from PIL import Image 

class Landscape():
    def __init__(self, file, output_path):
        self.file           = file
        self.output_path    = output_path
        self.make_image(self.file)

    def make_image(self, file):
        new_filename = f"new_{os.path.split(file)[1]}"
        output = os.path.join(self.output_path, new_filename)
        a = np.asarray(Image.open(file).convert('L')).astype('float')

        # 根据灰度变化来模拟人类视觉的明暗程度
        depth = 6.              # 预设虚拟深度值为6 范围为0-100 
        grad = np.gradient(a)   # 提取梯度值
        grad_x, grad_y = grad   # 提取x y方向梯度值 解构赋给grad_x, grad_y

        # 利用像素之间的梯度值和虚拟深度值对图像进行重构
        grad_x = grad_x * depth / 100.
        grad_y = grad_y * depth / 100. #根据深度调整x y方向梯度值

        # 梯度归一化 定义z深度为1.  将三个梯度绝对值转化为相对值,在三维中是相对于斜对角线A的值
        A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
        uni_x = grad_x / A 
        uni_y = grad_y / A 
        uni_z = 1./ A

        # 令三维中是相对于斜对角线的值为1
        vec_el = np.pi / 2.1                    # 光源俯视角度   弧度值  接近90度
        vec_az = np.pi / 4.                     # 光源方位角度   弧度值  45度
        dx = np.cos(vec_el) * np.cos(vec_az)    # 光源对x轴的影响 对角线在x轴投影
        dy = np.cos(vec_el) * np.sin(vec_az)    # 光源对y轴的影响 对角线在y轴投影
        dz = np.sin(vec_el)                     # 光源对z轴的影响 对角线在z轴投影

        b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z) # 光源归一化
        b = b.clip(0, 255)                               # 为了避免数据越界,生成灰度值限制在0-255区间
        im = Image.fromarray(b.astype('uint8'))          # 图像更构 
        im.save(output)                                  # 保存图片

def main():
    Landscape("./mountain.png", "./image")

if __name__ == "__main__":
    main()

简单的图片操作后,我们来看下效果图:

山水画_水墨

]]>
1 https://reinness.com/posts/184#comments https://reinness.com/feed/category/script.html
vi/vim 编辑器使用 https://reinness.com/posts/80 https://reinness.com/posts/80 Tue, 31 Mar 2020 12:46:00 +0800 Caleb 什么是 vim?

Vim 是从 vi 发展出来的一个文本编辑器。是一个程序开发工具而不是文字处理软件。

vim键位图

vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符。比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动 Vim,进入了命令模式,按下 i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式下按下 i 就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及 Shift 组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件
    按 ESC 键可随时退出底线命令模式。

简单的说,我们可以将这三个模式想成底下的图标来表示:

vim工作模式

vi/vim 使用实例

使用 vi/vim 进入一般模式

通过 vim 可以直接建立文件,例如创建 test.txt

vim test.txt

直接输入vi 文件名就能够进入 vi 的一般模式了。请注意,记得 vi 后面一定要加文件名,不管该文件存在与否!

创建文件

按下 i 进入输入模式(也称为编辑模式),开始编辑文字

在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!

在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。

这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。

输入模式

按下 ESC 按钮回到一般模式

好了,假设我已经按照上面的样式给他编辑完毕了,那么应该要如何退出呢?是的!没错!就是给他按下 Esc 这个按钮即可!马上你就会发现画面左下角的 – INSERT – 不见了!

在一般模式中按下 :wq 储存后离开 vi

保存并退出

这样我们就成功创建了一个 test.txt 的文件,并写进去了想要的内容。


vi/vim 按键说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。
摘抄自 菜鸟教程

第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n<space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n<Enter> n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g:%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc:%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

第二部分:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode):
i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode):
a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode):
r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

完结撒花🎉🎉🎉

]]>
1 https://reinness.com/posts/80#comments https://reinness.com/feed/category/script.html
Liunx系统安装node和pm2 https://reinness.com/posts/76 https://reinness.com/posts/76 Wed, 05 Feb 2020 12:44:00 +0800 Caleb 内容简介,购买了 Linux 系统的服务器,需要安装 node 一系列的工具。几行命令快速安装。

初始化

1.安装 nvm

nvm 是 node 版本管理工具

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

在安装后,记得退出服务器,然后重新登录进来

2.安装 node

nvm install 10.15.3

3.安装 pm2

pm2 是一个进程管理工具,可以用它来管理你的 node 进程,并查看 node 进程的状态,当然也支持性能监控,进程守护,负载均衡等功能

npm install pm2 -g

4.安装 pm2-logrotate

pm2-logrotate 可以理解为是一个 pm2 的插件,它扩充了 pm2 本身没有功能:日志管理

pm2 install pm2-logrotate

最后

此时就完成 node 和 pm2 的安装,然后就可以使用两个工具加载自己的网站程序。

]]>
0 https://reinness.com/posts/76#comments https://reinness.com/feed/category/script.html