从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_运维

第四章 高阶使用

写给新手的 FFmpeg 命令
################################

在这个指南中,我将用示例来阐明如何使用 FFmpeg 媒体框架来做各种各样的音频、视频转码和转换的操作。我已经为初学者汇集了最常用的 20 多个 FFmpeg 命令,我将不时地添加更多的示例来保持更新这个指南。请给这个指南加书签,以后回来检查更新。让我们开始吧,如果你还没有在你的 Linux 系统中安装 FFmpeg,参考下面的指南。

FFmpeg 命令的典型语法是:

ffmpeg [全局选项] {[输入文件选项] -i 输入_url_地址} ...
                 {[输出文件选项] 输出_url_地址} ...
  • 1.
  • 2.

获取音频/视频文件的详细信息


为显示你的媒体文件细节,运行:

$ ffmpeg -i video.mp4
  • 1.

样本输出:

ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181127
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping
--enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa
--enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype
--enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack
--enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb
--enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse
--enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2
--enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264
--enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec
--enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.20.100
Duration: 00:00:28.79, start: 0.000000, bitrate: 454 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 1920x1080 [SAR 1:1 DAR 16:9], 318 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc. Created on: 04/08/2019.
At least one output file must be specified
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

如你在上面的输出中看到的,FFmpeg 显示该媒体文件信息,以及 FFmpeg 细节,例如版本、配置细节、版权标记、构建参数和库选项等等。

如果你不想看 FFmpeg 标语和其它细节,而仅仅想看媒体文件信息,使用 -hide_banner 选项,像下面。

$ ffmpeg -i video.mp4 -hide_banner
  • 1.

样本输出:

缺少代码示例
  • 1.

转换视频文件到不同的格式


FFmpeg 是强有力的音频和视频转换器,因此,它能在不同格式之间转换媒体文件。举个例子,要转换 mp4 文件到 avi 文件,运行:

$ ffmpeg -i video.mp4 video.avi
  • 1.

类似地,你可以转换媒体文件到你选择的任何格式。

例如,你想维持你的源视频文件的质量,使用 -qscale 0 参数:

$ ffmpeg -i input.webm -qscale 0 output.mp4
  • 1.

为检查 FFmpeg 的支持格式的列表,运行:

$ ffmpeg -formats
  • 1.

转换视频文件到音频文件


我转换一个视频文件到音频文件,只需具体指明输出格式,像 .mp3 ,或 .ogg ,或其它任意音频格式。

上面的命令将转换 input.mp4 视频文件到 output.mp3 音频文件。

$ ffmpeg -i input.mp4 -vn output.mp3
  • 1.

此外,你也可以对输出文件使用各种各样的音频转换编码选项,像下面演示。

$ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
  • 1.

在这里,

  • -vn – 表明我们已经在输出文件中禁用视频录制。
  • -ar – 设置输出文件的音频频率。通常使用的值是22050 Hz、44100 Hz、48000 Hz。
  • -ac – 设置音频通道的数目。
  • -ab – 表明音频比特率。
  • -f – 输出文件格式。在我们的实例中,它是 mp3 格式。

更改视频文件的分辨率


如果你想设置一个视频文件为指定的分辨率,你可以使用下面的命令:

$ ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4

# 或者
$ ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
  • 1.
  • 2.
  • 3.
  • 4.

上面的命令将设置所给定视频文件的分辨率到 1280×720。

类似地,为转换上面的文件到 640×480 大小,运行:

$ ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4

# 或者
$ ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
  • 1.
  • 2.
  • 3.
  • 4.

这个技巧将帮助你缩放你的视频文件到较小的显示设备上,例如平板电脑和手机。

压缩视频文件


减小媒体文件的大小到较小来节省硬件的空间总是一个好主意。

下面的命令将压缩并减少输出文件的大小。

$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
  • 1.

请注意,如果你尝试减小视频文件的大小,你将损失视频质量。如果 24 太有侵略性,你可以降低 -crf 值到或更低值。

你也可以通过下面的选项来转换编码音频降低比特率,使其有立体声感,从而减小大小。

-ac 2 -c:a aac -strict -2 -b:a 128k
  • 1.

压缩音频文件


正像压缩视频文件一样,为节省一些磁盘空间,你也可以使用 -ab 标志压缩音频文件。

例如,你有一个 320 kbps 比特率的音频文件。你想通过更改比特率到任意较低的值来压缩它,像下面。

$ ffmpeg -i input.mp3 -ab 128 output.mp3
  • 1.

各种各样可用的音频比特率列表是:

  1. 96kbps
  2. 112kbps
  3. 128kbps
  4. 160kbps
  5. 192kbps
  6. 256kbps
  7. 320kbps

从一个视频文件移除音频流


如果你不想要一个视频文件中的音频,使用 -an 标志。

$ ffmpeg -i input.mp4 -an output.mp4
  • 1.

在这里,-an 表示没有音频录制。

上面的命令会撤销所有音频相关的标志,因为我们不要来自 input.mp4 的音频。

从一个媒体文件移除视频流


类似地,如果你不想要视频流,你可以使用 -vn 标志从媒体文件中简单地移除它。-vn 代表没有视频录制。换句话说,这个命令转换所给定媒体文件为音频文件。

下面的命令将从所给定媒体文件中移除视频。

$ ffmpeg -i input.mp4 -vn output.mp3
  • 1.

你也可以使用 -ab 标志来指出输出文件的比特率,如下面的示例所示。

$ ffmpeg -i input.mp4 -vn -ab 320 output.mp3
  • 1.

从视频中提取图像


FFmpeg 的另一个有用的特色是我们可以从一个视频文件中轻松地提取图像。如果你想从一个视频文件中创建一个相册,这可能是非常有用的。

为从一个视频文件中提取图像,使用下面的命令:

$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
  • 1.

在这里,

  • -r – 设置帧速度。即,每秒提取帧到图像的数字。默认值是 25。
  • -f – 表示输出格式,即,在我们的实例中是图像。
  • image-%2d.png – 表明我们如何想命名提取的图像。在这个实例中,命名应该像这样image-01.png、image-02.png、image-03.png 等等开始。如果你使用 %3d,那么图像的命名像 image-001.png、image-002.png 等等开始。

裁剪视频


FFMpeg 允许以我们选择的任何范围裁剪一个给定的媒体文件。

裁剪一个视频文件的语法如下给定:

ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
  • 1.

在这里,

  • input.mp4 – 源视频文件。
  • -filter:v – 表示视频过滤器。
  • crop – 表示裁剪过滤器。
  • w – 我们想自源视频中裁剪的矩形的宽度。
  • h – 矩形的高度。
  • x – 我们想自源视频中裁剪的矩形的 x 坐标 。
  • y – 矩形的 y 坐标。

比如说你想要一个来自视频的位置 (200,150),且具有 640 像素宽度和 480 像素高度的视频,命令应该是:

$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
  • 1.

请注意,剪切视频将影响质量。除非必要,请勿剪切。

转换一个视频的具体的部分


有时,你可能想仅转换视频文件的一个具体的部分到不同的格式。以示例说明,下面的命令将转换所给定视频input.mp4 文件的开始 10 秒到视频 .avi 格式。

$ ffmpeg -i input.mp4 -t 10 output.avi
  • 1.

在这里,我们以秒具体说明时间。此外,以 hh.mm.ss 格式具体说明时间也是可以的。

设置视频的屏幕高宽比


你可以使用 -aspect 标志设置一个视频文件的屏幕高宽比,像下面。

$ ffmpeg -i input.mp4 -aspect 16:9 output.mp4
  • 1.

通常使用的高宽比是:

  • 16:9
  • 4:3
  • 16:10
  • 5:4
  • 2:21:1
  • 2:35:1
  • 2:39:1

添加海报图像到音频文件


你可以添加海报图像到你的文件,以便图像将在播放音频文件时显示。这对托管在视频托管主机或共享网站中的音频文件是有用的。

$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
  • 1.

使用开始和停止时间剪辑媒体文件


可以使用开始和停止时间来剪下一段视频为小段剪辑,我们可以使用下面的命令。

$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 50 output.mp4
  • 1.

在这里,

  • –s – 表示视频剪辑的开始时间。在我们的示例中,开始时间是第 50 秒。
  • -t – 表示总的持续时间。

当你想使用开始和结束时间从一个音频或视频文件剪切一部分时,它是非常有用的。

类似地,我们可以像下面剪下音频。

$ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
  • 1.

切分视频文件为多个部分


一些网站将仅允许你上传具体指定大小的视频。在这样的情况下,你可以切分大的视频文件到多个较小的部分,像下面。

$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
  • 1.

在这里,

  • -t 00:00:30 表示从视频的开始到视频的第 30 秒创建一部分视频。
  • -ss 00:00:30 为视频的下一部分显示开始时间戳。它意味着第 2 部分将从第 30 秒开始,并将持续到原始视频文件的结尾。

接合或合并多个视频部分到一个


FFmpeg 也可以接合多个视频部分,并创建一个单个视频文件。

创建包含你想接合文件的准确的路径的 join.txt。所有的文件都应该是相同的格式(相同的编码格式)。所有文件的路径应该逐个列出,像下面。

file /home/sk/myvideos/part1.mp4
file /home/sk/myvideos/part2.mp4
file /home/sk/myvideos/part3.mp4
file /home/sk/myvideos/part4.mp4
  • 1.
  • 2.
  • 3.
  • 4.

现在,接合所有文件,使用命令:

$ ffmpeg -f concat -i join.txt -c copy output.mp4
  • 1.

如果你得到一些像下面的错误;

[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
join.txt: Operation not permitted
  • 1.
  • 2.

添加 -safe 0 :

$ ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
  • 1.

上面的命令将接合 part1.mp4、part2.mp4、part3.mp4 和 part4.mp4 文件到一个称为 output.mp4 的单个文件中。

添加字幕到一个视频文件


我们可以使用 FFmpeg 来添加字幕到视频文件。为你的视频下载正确的字幕,并如下所示添加它到你的视频。

$ fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
  • 1.

预览或测试视频或音频文件


你可能希望通过预览来验证或测试输出的文件是否已经被恰当地转码编码。为完成预览,你可以从你的终端播放它,用命令:

$ ffplay video.mp4
  • 1.

类似地,你可以测试音频文件,像下面所示。

$ ffplay audio.mp3
  • 1.

增加/减少视频播放速度


FFmpeg 允许你调整视频播放速度。

为增加视频播放速度,运行:

$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
  • 1.

该命令将双倍视频的速度。

为降低你的视频速度,你需要使用一个大于 1 的倍数。为减少播放速度,运行:

$ ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4
  • 1.

创建动画的 GIF


出于各种目的,我们在几乎所有的社交和专业网络上使用 GIF 图像。使用 FFmpeg,我们可以简单地和快速地创建动画的视频文件。下面的指南阐释了如何在类 Unix 系统中使用 FFmpeg 和 ImageMagick 创建一个动画的 GIF 文件。

  • 在 Linux 中如何创建动画的 GIF

从 PDF 文件中创建视频


我长年累月的收集了很多 PDF 文件,大多数是 Linux 教程,保存在我的平板电脑中。有时我懒得从平板电脑中阅读它们。因此,我决定从 PDF 文件中创建一个视频,在一个大屏幕设备(像一台电视机或一台电脑)中观看它们。如果你想知道如何从一批 PDF 文件中制作一个电影,下面的指南将帮助你。

  • 在 Linux 中如何从 PDF 文件中创建一个视频

获取帮助


在这个指南中,我已经覆盖大多数常常使用的 FFmpeg 命令。它有很多不同的选项来做各种各样的高级功能。要学习更多用法,请参考手册页。

$ man ffmpeg
  • 1.

UNIX 缩写习惯
####################################

构建于图形界面之上的操作系统,使用鼠标作为主输入设备, 是否使用缩写并不重要。比如 Windows 系统中的目录,几乎都是全称…… 点击两次鼠标进入文件夹 pf, 并不意味着点击13次才能进入文件夹 Program Files

而构建于命令行之上的操作系统,如 Linux,只要3个字母以上的单词,几乎都要缩写。 例如: cd 命令是 Change Directory 的缩写。 作为常用命令,如果使用它的全称 Change Directory,绝对是无聊和乏味的工作。

最常见的缩写,取每个单词的首字母,如

====== ======
缩写 说明
====== ======
cd Change Directory
dd Disk Dump
df Disk Free
du Disk Usage
pwd Print Working Directory
ps Processes Status
PS Prompt Strings
su Substitute User
rc Run Command
Tcl Tool Command Language
cups Common Unix Printing System
apt Advanced Packaging Tool
bg BackGround
ping Packet InterNet Grouper
====== ======

如果首字母后为“h”,通常保留

====== ======
缩写 说明
====== ======
chsh CHange SHell
chmod CHange MODe
chown CHange OWNer
chgrp CHange GRouP
bash Bourne Again SHell
zsh Z SHell
ksh Korn SHell
ssh Secure SHell
====== ======

递归缩写也属于这一类,如:

====== ======
缩写 说明
====== ======
GNU GNU’s Not Unix
PHP PHP: Hypertext Preprocessor
RPM RPM Package Manager
WINE WINE Is Not an Emulator
PNG PNG’s Not GIF
nano Nano’s ANOther editor
====== ======

有些缩写可能有多种定义,如:

rpm

  • RPM Package Manager
  • RedHat Package Manager

bc

  • Basic Calculator
  • Better Calculator

这方面 Emacs 可谓独领风骚:

Emacs

  • Editor MACroS
  • Emacs Makes A Computer Slow
  • Escape Meta Alt Control Shift
  • Emacs Makers Are Crazy Sickos
  • Emacs Makes All Computing Simple
  • Emacs Makefiles Annihilate C-Shells
  • Emacs Manuals Always Cause Senility
  • Emacs May Allow Customized Screwups
  • Emacs Manuals Are Cryptic and Surreal
  • Eventually Munches All Computer Storage
  • Eight Megabytes And Constantly Swapping
  • Elsewhere Maybe All Commands are Simple
  • Excellent Manuals Are Clearly Suppressed
  • Emacs May Alienate Clients and Supporters
  • Except by Middle Aged Computer Scientists
  • Extended Macros Are Considered Superfluous

如果只有一个单词,通常取每个音节的首字母:

====== ======
缩写 说明
====== ======
cp CoPy
ln LiNk
ls LiSt
mv MoVe
rm ReMove
====== ======

对于目录,通常使用前几个字母作为缩写:

====== ======
缩写 说明
====== ======
bin BINaries
dev DEVices
etc ETCetera
lib LIBrary
var VARiable
proc PROCesses
sbin Superuser BINaries
tmp TeMPorary
usr Unix Shared Resources
====== ======

这种缩写的其它情况

======== ======
缩写 说明
======== ======
diff DIFFerences
cal CALendar
cat CATenate
ed EDitor
exec EXECute
tab TABle
regexp REGular EXPression
======== ======

如果某种缩写比较深入人心,例如“mesg”代表“message”,在新的复合缩写中,将沿用这种缩写方式

====== ======
缩写 说明
====== ======
dmesg Diagnostic MESsaGe
sed Stream EDitor
stty Set TTY
fstab FileSystem TABle
passwd PASSWorD
====== ======

有些缩写中,第一个字母“g”,代表“GNU”

====== ======
缩写 说明
====== ======
awk Aho Weiberger and Kernighan
gawk GNU AWK
gpg GNU Privacy Guard
grep GNU Regular Expression Print
egrep Extended GREP
====== ======


常用 Git 命令
#######################################

一般来说,日常使用 Git 只要记住下图的几个命令,就可以了。但是要使用复杂的功能,恐怕要记住60~100个命令。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_linux_02

下面是整理的常用 Git 专用名词的译名。

:Workspace: 工作区

:Index / Stage: 暂存区

:Repository: 仓库区(或本地仓库)

:Remote: 远程仓库

一、配置


Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

  1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  2. ~/.gitconfig 或 ~/.config/git/config 文件: 只针对当前用户。可以传递 --global 选项让 Git 读写此文件。
  3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config): 针对该仓库。

每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

# 设置提交代码时的基本信息
# 如果使用了 --global 选项,那么在以后的修改、提交中,Git 都会使用这些配置
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

# 显示当前的 Git 配置
$ git config --list

# 显示 user.name 的配置
$ git config user.name

# 编辑 Git 配置文件
$ git config -e [--global]

# 设置默认的文本编辑器
$ git config --global core.editor vim
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

二、新建/克隆仓库


有两种获得 Git 项目仓库的方法。第一种是在现有项目或目录下导入文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。

# 在当前目录新建一个 Git 代码库
# 会创建一个 .git 的子目录,这个子目录包含 Git 仓库所有的文件。
$ git init

# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]

# 克隆一个项目
$ git clone [url]

# 克隆一个项目并重命名
$ git clone [url] [git-name]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

三、添加/删除文件


# 添加当前目录的所有文件到暂存区
$ git add .

# 将文件修改添加到暂存区
$ git add [file1] [file2] ...

# 删除文件,并更新到暂存区
$ git rm [file1] [file2] ...

# 删除文件(忽略文件),但该文件会保留在工作区
$ git rm --cached [file]

# 重命名文件,并更新到暂存区
$ git mv [file-original] [file-renamed]

# 显示被跟踪的文件状态
$ git status
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

四、提交文件到本地仓库


# 提交暂存区的文件到仓库区,并输入简单说明
$ git commit -m [message]

# 提交暂存区的指定文件到仓库区,并输入简单说明
$ git commit [file1] [file2] ... -m [message]

# 提交工作区的所以文件到仓库区
$ git commit -a

# 使用新的commit,代替上一次提交
# 如果代码没有任何变化,只改写上一次commit的提交信息
$ git commit --amend -m [message]

# 显示commit历史
$ git log
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

五、撤销


Git 有些撤消操作是不可逆的。在使用 Git 的撤销时,可能会因为操作失误而导致之前的工作丢失。



# 恢复暂存区的所有文件到工作区,可指定文件名
$ git checkout .

# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]

# 回退到上一次提交,可指定哈希值
$ git reset --hard [Hash]

# 重置暂存区,与上一次提交保持一致,但工作区内容不变,可指定哈希值或文件名
$ git reset [file]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

六、分支


# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建分支,停留在当前分支
$ git branch [branch-name]

# 新建分支,并切换到该分支
$ git checkout -b [branch]

# 根据指定提交版本,新建分支
$ git branch [branch] [commit]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

七、远程仓库


远程仓库是指托管在因特网或其他网络中的项目的版本库。你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。

# 拉取远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]

# 拉取远程仓库的所有变动
$ git fetch [remote]

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]

# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]

# 推送本地指定分支到远程仓库
$ git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force

# 推送所有分支到远程仓库
$ git push [remote] --all

# 重命名远程仓库
$ git remote rename [original] [renamed]

# 删除远程仓库
$ git remote rm paul

# 生成一个可供发布的压缩包
$ git archive
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

八、查看信息


# 显示被跟踪的文件状态
$ git status

# 显示简洁的信息
# ?? 表示未跟踪的文件、A 表示新添加到暂存区的文件
# M 表示文件已被修改,在左边是已更新到暂存区,在右边是还没有更新到暂存区
$ git status -s

# 显示commit历史
$ git log

# 显示每次提交的内容差异,也可以指定文件名,还可以指定提交的次数
$ git log -p [file]
$ git log -p -2

# 显示commit历史,以及提交时变更过的文件
$ git log --stat

# 搜索提交历史,根据关键词
$ git log -S [keyword]

# 显示指定文件的详细修改信息
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff [file]

# 显示暂存区和仓库区的差异
$ git diff --cached [file]

# 显示工作区和仓库区的差异
$ git diff HEAD

# 显示最近的几次提交
$ git reflog

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [remote]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.

九、标签


Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。

一个轻量标签很像一个不会改变的分支,它只是一个特定提交的引用。

然而,附注标签是存储在 Git 数据库中的一个完整对象。它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间,还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息。

# 创建一个附注标签,并设定标签信息
$ git tag -a v1.4 -m 'my version 1.4'

# 创建一个轻量标签
$ git tag v1.4-lw

# 删除本地tag
$ git tag -d [tag]

# 列出所有tag
$ git tag

# 查看标签信息
$ git show v1.4

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

十、Git 别名


别名可以使 Git 输入命令更简单、容易。Git 并没有命令自动补全的功能,如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。

# 设置 git commit 的别名为 git ci
$ git config --global alias.ci commit

# 设置 git status 的别名为 git st
$ git config --global alias.st status
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

十一、忽略文件


通常软件都会自动生成一些文件,比如日志文件,或者编译过程中产生的临时文件等,这些文件一般无需纳入 Git 的管理。可以在项目的根目录下创建一个名为 .gitignore 的文件使 Git 忽略指定的文件,.gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以 / 开头防止递归。
  • 匹配模式可以以 / 结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号 ! 取反。
$ cat .gitignore

# 忽略所有的 . 开头文件
.*

# 忽略所有以 .o 或 .a 结尾的文件
*.[oa]

# 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件都用这样的文件名保存副本。
*~

# 跟踪 lib.a 文件, 即使已经忽略了所以的 .a 结尾的文件
!lib.a

# 只忽略当前目录下的 TODO 文件
/TODO

# 忽略 build 目录中的所有文件
build/

# 忽略 doc 目录下的以 .txt 结尾的文件(不递归处理)
doc/*.txt

# 忽略 doc 目录下的所有以 .pdf 结尾的文件(递归处理)
doc/**/*.pdf
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

十二、获得帮助


# 有三种方法可以找到 Git 命令的使用手册:

$ git help <verb>
$ git <verb> --help
$ man git-<verb>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

GitHub 命令行操作
####################################

GitHub 是一个面向开源及私有软件项目的免费托管平台,作为个人开发者可以很方便的托管项目或为已有项目贡献代码。将 GitHub 仓库克隆到本地,并进行增、删、改、查等基本操作,也将作为一个基本技能必不可少。

基本的使用流程为:

  1. 将项目克隆到本地
  2. 新建分支
  3. 常用的修改
  4. 将修改提交到本地仓库
  5. 将分支推送回 GitHub,并合并分支

将项目克隆到本地


一切可以从新开始,直接将远程项目克隆到本地。但如果已有本地仓库,也可以只获取仓库的变化同步到本地。

# 将项目克隆到本地
$ git clone https://github.com/tonychacon/blink


# 拉取远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]

# 显示所有远程仓库
$ git remote -v
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

新建分支


# 新建分支,并切换到新分支
$ git checkout -b [branch]


# 列出所有分支,包括本地分支和远程分支
$ git branch -a

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 合并指定分支到当前分支
$ git merge [branch]

# 删除本地分支
$ git branch -d [branch-name]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

常用的修改


# 添加文件,将当前目录下所有文件添加到暂存区
$ git add .

# 添加指定文件,将指定文件添加到暂存区
$ git add [filename]

# 删除文件,并更新到暂存区
$ git rm [filename]

# 重命名文件,并更新到暂存区
$ git mv [file] [file-renamed]

# 显示被跟踪的文件状态
$ git status
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

将修改提交到本地仓库


# 将暂存区的文件提交到本地仓库,并输入简单说明
$ git commit -m [message]

# 将工作区的文件提交到本地仓库
$ git commit -a

# 将所有修改直接提交到本地仓库
$ git commit -am 'three seconds is better'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

将分支推送回 GitHub,并合并分支


# 将本地指定分支推送回远程仓库
$ git push [remote] [branch]

# 将新分支推送回 GitHub 时,会询问帐号和密码
$ git push origin slow-blink
Username for 'https://github.com': tonychacon
Password for 'https://tonychacon@github.com':
Counting objects: 5, done.
...


# 上传所有标签
git push origin --tags
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

最后到 GitHub 网站上查看分支并创建合并请求。

标签


Git 使用两种主要类型的标签:轻量标签与附注标签。通常建议创建附注标签。

轻量标签很像一个不会改变的分支,它只是一个特定提交的引用。然而,附注标签是存储在 Git 数据库中的完整对象。它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间,还有标签信息。

# 创建附注标签,并设定标签信息
$ git tag -a v1.4 -m 'my version 1.4'

# 查看标签信息
$ git show v1.4

# 列出所有tag
$ git tag

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

忽略文件


通常软件都会自动生成一些文件,比如日志文件,或者编译过程中产生的临时文件等,这些文件无需纳入 Git 的管理。可以在项目的根目录下创建 .gitignore 文件使 Git 忽略指定的文件,格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以 / 开头防止递归。
  • 匹配模式可以以 / 结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号 ! 取反。
$ cat .gitignore

# 忽略所有以 .o 或 .a 结尾的文件
*.[oa]

# 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件都用这样的文件名保存副本。
*~

# 跟踪 lib.a 文件, 即使已经忽略了所以的 .a 结尾的文件
!lib.a

# 只忽略当前目录下的 TODO 文件
/TODO

# 忽略 build 目录中的所有文件
build/

# 忽略 doc 目录下的以 .txt 结尾的文件(不递归处理)
doc/*.txt

# 忽略 doc 目录下的所有以 .pdf 结尾的文件(递归处理)
doc/**/*.pdf
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

通过 Git 方式管理 FTP 服务
####################################

现在有很多网站依然使用 FTP 上传文件到服务器,但传统的 FTP 客户端在使用过程中,都需要留意本地文件和远程文件之间的差异,很容易忘记更新部分文件或上传到错误的路径等。总之,需要人工干预上传过程,容易出错而且工作效率低。

所以就有了 git-ftp <https://github.com/git-ftp/git-ftp/>_ 工具(其实就是一个 shell 脚本)完美的解决这个问题。git-ftp 通过存储在服务器上的 .git-ftp.log 文件来跟踪每次传输文件之间的变化,用一条命令实现只上传修改的文件,省心省力。

快速开始


安装

git-ftp 已经进入了大部分的软件仓库,可以直接通过系统的安装包工具安装。因为 git-ftp 的有些命令(git-ftp download 和 git-ftp pull)需要用到 lftp,所以建议一并安装 lftp。

[Linux]# apt install git-ftp
[Linux]# apt install lftp
  • 1.
  • 2.

配置

在配置文件之前,需要新建一个空白的 Git 仓库。

# 新建仓库
[Linux]$ git init new
[Linux]$ cd new

# 添加配置
[Linux]$ git config git-ftp.url ftp.example.net/new/
[Linux]$ git config git-ftp.user ftp-user
[Linux]$ git config git-ftp.password secr3t

[Linux]$ cat .git/config
[core]
    bare = false
    repositoryformatversion = 0
    filemode = false
    symlinks = false
    ignorecase = true
    logallrefupdates = true
[git-ftp]
    url = ftp.example.net/new/
    user = ftp-user
    password = secr3t
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

因为服务器地址和密码都是以明文保存的,所以本地仓库不要发布到网上公开仓库。

基本命令

  • git-ftp init 新建服务器仓库。用于 FTP 服务器没有文件,上传所有本地提交到服务器仓库,并创建 .git-ftp.log 文件。
  • git-ftp catchup 初始服务器仓库。用于 FTP 服务器有文件,只在服务器上创建 .git-ftp.log 文件。
  • git-ftp download 下载服务器仓库中的文件。在服务器上需要有 .git-ftp.log 文件,并且本地仓库为空。
  • git-ftp pull 拉取服务器仓库的提交。
  • git-ftp push 推送本地提交到服务器仓库。

git 服务器
####################################

需要在服务器中安装 git,不在需要其它工具。适合简单的单用户使用。

  • 搭建 Git 服务器非常简单,通常几分钟即可完成;
  • 要方便管理公钥,用 Gitosis;
  • 要变态地控制权限,用 Gitolite。

创建用户


创建 git 用户组和用户,用户名随便定义。

# 创建 git 用户组
[Linux]# groupadd git

# 创建 git 用户,并在 /home 目录下创建用户主目录、添加到 git 组
[Linux]# useradd -m git -g git

# 修改用户登录密码,上传仓库时会用到
[Linux]# passwd git
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

初始化仓库


用户家目录作为 Git 仓库,输入命令:

[Linux]$ cd /home/git
[Linux]$ git init --bare gitrepo.git

# 修改仓库的用户和用户组(可选,根据实际情况使用)
[Linux]$ chown git:git gitrepo/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

克隆和推送


克隆仓库时,需要用户名(@ 前的字符)和路径(: 后边的字符)与服务器相符。

[Linux]$ git clone git@192.168.1.2:/home/git/gitrepo.git
  • 1.

推送本地修改到服务器时,需要输入 git 用户的密码。

[Linux]$ git push
  • 1.

禁止 git 登录


出于安全考虑,要禁用 git 用户登录 shell。编辑 /etc/passwd 文件,找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

# 将最后的 bash 更改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
  • 1.
  • 2.
  • 3.
  • 4.

这样,git 用户可以正常通过 ssh 使用 git,但无法登录shell。

创建证书登录


将本地用户的公钥(id_rsa.pub)导入到服务器的 /home/git/.ssh/authorized_keys 文件中,一行一个。

如果没有该文件创建它:

[Linux]$ cd /home/git/
[Linux]$ mkdir .ssh
[Linux]$ chmod 755 .ssh
[Linux]$ touch .ssh/authorized_keys
[Linux]$ chmod 644 .ssh/authorized_keys
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

i3 平铺式窗口管理器
################################

i3是平铺式的窗口管理器,完全从头开始编写。目标平台是GNU / Linux和BSD操作系统,i3的代码是是自由的,并且是在BSD许可证下的开源软件(FOSS)。 i3的主要目标是针对高级用户和开发人员。

安装 i3 窗口管理器:

apt install i3
  • 1.

i3 的快捷键


  • <$mod+D> 启动 dmenu
  • <$mod+Enter> 启动虚拟终端
  • <$mod+1/2/3> 切换桌面
  • <$mod+S> 堆叠布局
  • <$mod+E> 默认布局
  • <$mod+H> 水平分割窗口
  • <$mod+V> 垂直分割窗口
  • <$mod+W> 标签布局
  • <$mod+Shift+Q> 强制关闭当前的窗口
  • <$mod+Shift+1/2/3> 将程序移动到桌面
  • <$mod+Shift+C> 重新加载配置文件
  • <$mod+Shift+R> 重启(并重新加载配置文件)
  • <$mod+Shift+E> 退出 i3

适合程序员的开源字体
################################

在编写代码时,通常来说对字体的要求更具功能性。这也是为什么大多数程序员更偏爱使用固定宽度的等宽字体。每个字符享有相等的空间非常实用,可以随意扫过一段代码来“估测”代码长度;能够轻松地对齐字符和标点,使得高亮显示在视觉上更加明显;等宽字体更容易通过 OCR 识别。

选择一款带有容易分辨数字和标点的字体在美学上是令人愉悦的,但它是否拥有满足你需求的版权许可也是非常重要的。

大招还是先放吧,好东西实在是留不到最后了: 在线预览编程字体 <https://www.programmingfonts.org/>_

  • 左侧选字体,调整字体大小、行距
  • 右侧实时预览,并且可敲代码测试

网站的字体都是免费的,但不一定开源。字体可以直接从 GitHub 主页 <https://github.com/braver/programmingfonts/tree/gh-pages/fonts/resources>_ 下载,每个文件夹下都会有字体的版权许可说明。

Firacode 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_学习_03

推荐的首款字体是 FiraCode,一款真正符合甚至超越了其职责的编程字体。FiraCode 是 Fira 的扩展,而后者是由 Mozilla 委托设计的开源字体族。使得 FiraCode 与众不同的原因是它修改了在代码中常使用的一些符号的组合或连字,使得它看上去更具可读性。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_资源_04

这款字体有几种不同的风格,特别是还包含 Retina (视网膜)选项。你可以查看 Firacode GitHub_ 下载字体或了解更多信息。

… _Firacode GitHub: https://github.com/tonsky/FiraCode

Inconsolata 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_linux_05

Inconsolata 是最为漂亮的等宽字体之一。从 2006 年开始它便一直是一款开源和可免费获取的字体。它的创造者 Raph Levien 在设计时秉承的一个基本原则是:等宽字体并不应该那么糟糕。使得 Inconsolata 如此优秀的两个原因是: 0o 这两个字符非常容易识别,不会被混淆;另外它还特别地设计了标点符号。

了解更多请查看:https://www.levien.com/type/myfonts/inconsolata.html

DejaVu Sans Mono 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_运维_06

受在 GNOME 中使用的带有版权和闭源的 Vera 字体的启发,DejaVu Sans Mono 是一个非常受欢迎的编程字体,几乎在每个 Linux 发行版中都带有它。在 Book Variant 风格下 DejaVu 拥有惊人的 3310 个字形,相比于一般的字体,它们含有 100 个左右的字形。在工作中你将不会出现缺少某些字符的情况,它覆盖了 Unicode 的绝大部分,并且一直在活跃地增长着。

了解更多请查看:https://dejavu-fonts.github.io/

Source Code Pro 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_linux_07

由 Paul Hunt 和 Teo Tuominen 设计,Source Code Pro 是由 Adobe 创造的,并且成为了它的首款开源字体。Source Code Pro 具有极高的可读性,并且在可能令人困惑的字符和标点符号之间具有出色的区别。Source Code Pro 也是一个字体族,有 7 中不同的风格:Extralight、Light、Regular、Medium、Semibold、Bold 和 Black,每种风格都还有斜体变体。

了解更多请查看:https://github.com/adobe-fonts/source-code-pro

Noto Mono 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_学习_08

Noto Mono 是 Google 打造的庞大 Note 字体族中的等宽版本。尽管它并不是专为编程所设计,但它在 209 种语言(包括 emoji 颜文字)中都可以使用,并且一直在维护和更新。该项目非常庞大,是 Google 宣称 “组织全世界信息” 的使命的延续。

官网链接天朝访问不了,就不放了 _!。

CamingoCode 字体


从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_linux_09

CamingoCode 是为源代码编辑器设计的免费字体。它基于 CamingoMono,但是有几个特别绘制的符号在小尺寸下工作得很好,包括 Q、l、&、*、~ 和 #。笔画权重相对较轻,这使得 CamingoCode 既适合明亮的视觉主题,也适合黑暗的视觉主题。该系列由四种样式链接字体( Regular、Italic、Bold Italic、Bold )组成。

了解更多请查看:https://www.janfromm.de/typefaces/camingomono/camingocode/

选择合适的字体


无论你选择那个字体,你都有可能在每天中花费数小时面对它,所以请确保它在审美和哲学层面上与你产生共鸣。选择正确的开源字体是确保你拥有最佳生产环境的一个重要部分。


修改 firefox 的缩放比
####################################

现在笔记本的分辨率都很高,在 Gnome 桌面环境中,Firefox 浏览器查看网页时字体显得太小,每个网页单独放大效率非常的低。

浏览器设置选项

最近使用 Firefox-78.13 版本,在设置 > 常规页面下有一个全局缩放选项,而且可以选择之缩放文本。这样设置后上边的选项卡大小不会改变,下边的设置方法可以将选项卡也等比缩放。

修改浏览器的配置文件,设置浏览器的默认缩小放大比例。

首先,打开 Firefox 浏览器,在网址栏中输入:

about:config
  • 1.

然后点击接受风险 [I accept the risk!] ,进入设置页面。在设置页面搜索:

layout.css.devPixelsPerPx
  • 1.

默认为负值,修改该选项的数值,1.5 为 150%,1.2 为 120%,以此类推。


GNOME 终端使用 solarized 配色
####################################

首先,下载配色文件,配色文件分为两种一个亮色主题一个暗色主题,选择喜欢的安装。也可以使用 ./set_light.sh 进行预览。

[Linux]$ git clone git://github.com/sigurdga/gnome-terminal-colors-solarized.git
[Linux]$ cd gnome-terminal-colors-solarized
[Linux]$ ls -l
total 36
drwxr-xr-x 5 glenn glenn 4096 Aug 28 10:31 colors
-rwxr-xr-x 1 glenn glenn 5285 Aug 28 10:31 install.sh
-rw-r--r-- 1 glenn glenn 1077 Aug 28 10:31 LICENSE.mkd
-rw-r--r-- 1 glenn glenn 4376 Aug 28 10:31 README.mkd
-rwxr-xr-x 1 glenn glenn   93 Aug 28 10:31 set_dark.sh
-rwxr-xr-x 1 glenn glenn   94 Aug 28 10:31 set_light.sh
drwxr-xr-x 2 glenn glenn 4096 Aug 28 10:31 src
[Linux]$ ./install.sh
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

安装成功后进入终端设置主题颜色。

主题在使用 ls 命令时,权限为 777 的文件夹会看不清楚。可以在 ~/.bashrc 文件中加入以下配置禁用文件夹背景色。

LS_COLORS='ex=0;35:ow=1;32'
  • 1.

在 U 盘上引导多个操作系统
################################

在一个 U 盘上放入喜欢的所有 Linux 发行版,想试哪个就试哪个,是不是很爽!

Ventoy <https://www.ventoy.net/cn/index.html>_ 是一个制作多合一启动 U 盘的开源工具(支持 Linux 和 Windowns 平台),无需反复地格式化 U 盘,只需要把 ISO 文件拷贝到 U 盘里面就可以启动,简单快捷。当有多个不同类型的 ISO 文件时,在启动 Ventoy 时会显示一个菜单来选择需要引导的系统。无差异支持 Legacy BIOS 和 UEFI 模式。

因为 Ventoy 是国内程序员开发的,所以不管是文档和 下载安装 <https://github.com/ventoy/Ventoy/releases>_ 都十分的友善。

从头到尾快速学习一遍Linux,高级工程师多年实践实战经验精华总结和实例示例,第四章:高阶使用_linux_10

在安装 Ventoy 时会格式化 U 盘,所以在安装前请先备份 U 盘上的数据!

安装完成之后,会把 U 盘格式化两个分区,将喜欢的 ISO 系统文件拷贝到 Ventoy 镜像分区, VTOYEFI 为启动分区。

重启电脑,开机启动出现品牌 Logo 时按 键选择 U 盘启动。大功告成!


H3C 交换机密码忘记
####################################

H3C 系列交换机对使用 Console 口登录的用户支持三种认证方式:

  • None(无认证)
  • Password(使用密码认证)
  • Scheme(使用用户名和密码认证)

在密码丢失后采取正确的方式找回密码或重新配置密码。

以下操作适用于在登录认证方式为 Password 方式或 Scheme 方式中的本地认证方式下恢复登录密码。

如果设备上配置了Password Control 功能,控制台登录密码的配置不会在配置文件中显示,需先关闭 Password Control 功能。

操作步骤


  1. 正确使用 Console 线与交换机连接,配置终端仿真程序,使其能够正常显示设备的登录界面。
  2. 重新启动交换机。
  3. 在交换机完成自检后,在下面的界面键入 <Ctrl+B>,并根据提示输入 BootRom 菜单登录密码,进入 BootRom 菜单。
Starting......



         ***********************************************************

         *                                                         *

         *        H3C S5500-28C-PWR-EI BOOTROM, Version 509        *

         *                                                         *

         ***********************************************************

         Copyright (c) 2004-2009 Hangzhou H3C Tech. Co., Ltd.

         Creation date   : Jan  9 2009, 10:44:09

         CPU Clock Speed : 533MHz

         BUS Clock Speed : 133MHz

         Memory Size     : 256MB

         Mac Address     : 002389294f70





Press Ctrl-B to enter Boot Menu... 1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

缺省情况下,进入 BootRom 菜单的密码为空。如果您设置了 BootRom 菜单登录密码,但该密码已经丢失,请根据“恢复BootRom菜单登录密码”中介绍的方法进行恢复。

  1. 进入 BootRom 菜单后,请键入“7”,选择“跳过配置文件启动”功能,并在系统提示时输入“y”进行确认。
    BOOT MENU
  1. Download application file to flash
  2. Select application file to boot
  3. Display all files in flash
  4. Delete file from flash
  5. Modify bootrom password
  6. Enter bootrom upgrade menu
  7. Skip current configuration file
  8. Set bootrom password recovery
  9. Set switch startup mode
  10. Reboot

Enter your choice(0-9): 7

The current setting is running configuration file when reboot.

Are you sure to skip current configuration file when reboot? Yes or No(Y/N) y

Setting…done!

  1. Download application file to flash 下载应用程序到 Flash 中
  2. Select application file to boot 选择启动文件
  3. Display all files in flash 显示 Flash 中所有文件
  4. Delete file from flash 删除 Flash 中的文件
  5. Modify bootrom password 修改 BootROM 密码
  6. Enter bootrom upgrade menu 进入 BootROM 升级菜单
  7. Skip current configuration file 设置重启不运行当前配置文件
  8. Set bootrom password recovery 恢复 BootROM 密码
  9. Set switch startup mode 设置交换机启动模式
  10. Reboot 重新启动交换机
  1. 回到 BootRom 菜单后,输入“0”重新启动交换机。
  2. 再次启动时,交换机会跳过配置文件,即跳过对控制台密码的配置,您可以直接登录交换机。

  • Copyright © 2004-2010 Hangzhou H3C Tech. Co., Ltd. All rights reserved.*
  • Without the owner’s prior written consent, *
  • no decompiling or reverse-engineering shall be allowed. *

Configuration file is skipped.

User interface aux0 is available.

Press ENTER to get started.

  1. 进入命令行接口后,您可以使用 display startup 命令查看启动配置文件,并使用 more 命令查看该配置文件中的控制台密码配置。
    display startup
    Current startup saved-configuration file: NULL
    Next startup saved-configuration file: flash:/startup.cfg
    more startup.cfg

如果认证方式是 Password 方式,请关注配置文件中的以下部分,即配置控制台登录密码的配置命令。

# 配置密码为明文方式的显示效果:
set authentication password simple test

# 配置密码为密文方式的显示效果:
set authentication password cipher .]@USE=B,53Q=^Q`MAF4<1!!
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

如果认证方式是 Scheme 方式,请关注配置文件中的以下部分,即配置本地用户名和密码的配置命令(以用户名为admin为例)。

local-user admin
password simple 123
service-type terminal
  • 1.
  • 2.
  • 3.

忘记密码需要将密码设置直接显示在“password simple”中,此时建议您修改登录密码。

  1. 通过 copy 命令对启动配置文件进行备份,以便在修改登录密码时保留原有启动配置文件。在本例中,我们将备份文件命名为“startup_bak.cfg”。
    copy startup.cfg startup_bak.cfg
    Copy flash:/startup.cfg to flash:/startup_bak.cfg?[Y/N]:y

    %Copy file flash:/startup.cfg to flash:/startup_bak.cfg…Done.
  2. 给交换机配置一个 IP 地址,此处配置为 192.168.1.2
    System View: return to User View with Ctrl+Z.
    [H3C]int vlan 1
    [H3C-Vlan-interface1]ip add 192.168.1.2 24
    [H3C-Vlan-interface1]quit
    [H3C]quit
  3. 您可以使用 FTP 或 TFTP 将启动配置文件发送到 PC 上,使用文本编辑软件对配置文件进行编辑,请根据您的需要采用以下修改方案:
  • 修改“authentication-mode”行最后的登录认证方式为“none”,即将认证方式修改为不认证。
  • 修改“set authentication password”行后面的密码显示方式为明文(simple),并重新写入新的密码。(Password 方式适用)
  • 修改“password”行后面的密码显示方式为明文(simple),并重新写入新的密码。(Scheme 方式适用)
  1. 将配置文件上传到交换机上覆盖原配置文件。再重启交换机,不保存配置,交换机将使用更新后的配置文件,您可以根据修改后的密码进行登录,同时其他原有配置不会丢失。
    reboot
    Start to check configuration with next startup configuration file, please wait…DONE!
    This command will reboot the device. Current configuration will be lost, save current configuration? [Y/N]:n //注意这里是输入n
    This command will reboot the device. Continue? [Y/N]:y
    #Apr 26 12:07:45:150 2000 H3C DEVM/1/REBOOT:
    Reboot device by command.
    %Apr 26 12:07:45:236 2000 H3C DEVM/5/SYSTEM_REBOOT: System is rebooting now.
    Now rebooting, please wait…
    System is starting…
    Press Ctrl+D to access BASIC-BOOTWARE MENU
    Booting Normal Extend BootWare
    The Extend BootWare is self-decompressing…Done!

参考连接: http://www.h3c.com/cn/Service/Document_Software/Document_Center/Switches/Catalog/S5820X/S5820X/Maintenance/Maintenance_Manual/H3C_DLMMHF(V1.01)/


树莓派 ZERO W 配置
####################################

树莓派 Zero W 是树莓派基金会 17 年 2 月底为庆祝其第五个生日发布的特别版,本质上是树莓派 Zero 加无线和蓝牙。完整配置如下:

  • 1GHz 单核 CPU
  • 512MB 内存
  • 802.11n WiFi
  • 蓝牙 4.1(BLE)
  • mini-HDMI 接口
  • Micro-USB OTG 端口
  • Micro-USB 电源接口
  • 40 针 GPIO 扩展口

安装系统镜像


软件准备:Raspbrain 系统镜像文件,SDFormatter,Win32diskim,PuTTY。

  1. 下载 Raspbrain 系统 <https://www.raspberrypi.org/downloads/raspbian/>_ ,建议下载 Raspberry Pi OS Lite 不带图形界面的版本。
  2. 下载 Pi Imager <https://www.raspberrypi.org/software/>_ SD 卡烧录工具,并安装到电脑。
  3. 将 SD 卡插入读卡器然后接入电脑,用 Pi Imager 烧录系统:
  • 点击 CHOOSE OS 选择 Use custom 然后选择下载到本地的系统
  • 点击 CHOOSE SD CARD 选择 SD 卡的路径
  • 点击 WRITE 写入系统。
  • 最后点击 CONTINUE 完成系统写入。

系统写入会提示格式化 SD 卡的选项,确认就可以。

系统写入完成之后,SD 卡会被分成两个分区,一个是 /boot 分区,一个是 / 分区。在 Windows 系统中是不会识别根分区的,会提示需要格式化分区,千万不要点击格式化,忽略即可。

无线连接

在 SD 卡的 /boot 分区中新建 wpa_supplicant.conf 文件,输入如下内容并保存。

# This is /boot/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
    ssid="WiFi名称"
    psk="WiFi密码"
    priority=5
}
network={
    ssid="WiFi"
    psk="WiFi"
    priority=1
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

可以配置多个无线网络连接,各部分含义如下:

  • ssid:WIFI名称
  • psk:WIFI密码
  • priority:连接优先级,数字越大优先级越高
  • scan_ssid:连接隐藏 WiFi 时需要指定该值为 1

当系统开机后, /boot 分区中的配置文件会消失,再次配置请参阅 :doc:wpa_supplicant 连接 wifi <../Chapter02/32_wpa.supplicant>

开启 SSH 远程连接

在 SD 卡的 /boot 分区中新建命名为 ssh 的文件,内容为空。

上电开机

将 SD 卡插入树莓派的 SD 卡槽,连接电源线自动开机。

使用 SSH 登陆,默认用户名 pi ,默认密码 raspberry

配置系统


修改默认密码

使用 passwd 命令修改密码。

# 修改 pi 密码
[Linux]$ sudo passwd pi
重复输入两次密码

# 修改 root 密码,开启 root 账号
[Linux]$ sudo passwd root
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

修改清华大学软件源

在配置文件 /etc/apt/sources.list 中注释其他行,加入以下软件源:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
  • 1.
  • 2.

在配置文件 /etc/apt/sources.list.d/raspi.list 中注释其他行,加入以下软件源:

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
  • 1.

网址末尾的 raspbian 重复两次是必须的。因为 Raspbian 的仓库中除了 APT 软件源还包含其他代码。APT 软件源不在仓库的根目录,而在 raspbian/ 子目录下。

编辑镜像站后,请使用 sudo apt-get update 命令,更新软件源列表,同时检查您的编辑是否正确。

其它源

注意以下列出的都是 buster 版本,粘贴时注意区分版本。

# 中国科学技术大学
# `/etc/apt/sources.list` 文件
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contribnon-free rpi
# `/etc/apt/sources.list.d/raspi.list` 文件
deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main ui

# 阿里云
# `/etc/apt/sources.list` 文件
deb http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi
# `/etc/apt/sources.list.d/raspi.list` 文件
deb http://mirrors.aliyun.com/archive.raspberrypi.org/debian/ buster main ui

# 华中科技大学
# `/etc/apt/sources.list` 文件
deb http://mirrors.hustunique.com/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.hustunique.com/raspbian/raspbian/ buster main contrib non-free rpi
# `/etc/apt/sources.list.d/raspi.list` 文件
deb http://mirrors.hustunique.com/archive.raspberrypi.org/debian/ buster main ui
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

禁用自动休眠

树莓派默认开启了自动休眠,可以使用 systemctl 命令来禁用自动休眠。

[Linux]$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

修改时区

通过修改时区的链接文件来修改时区,修改为上海时间。

[Linux]$ sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
  • 1.

修改系统语言

以 root 身份运行:

[Linux]# dpkg-reconfigure locales
  • 1.

BT 下载工具
####################################

Transmission <https://transmissionbt.com/>_ 是一个强大的 BitTorrent 开源客户端,实现了 BT 协议中描述的大多数功能。在官网上提供了多个版本下载,包括:Mac、GTK+、QT 版本,还有 Daemon(守护进程)版本。

Transmission 支持 DHT、Magnet Link、uTP 以及 PEX 等,最重要的是支持 Magnet Link 磁力链接下载。

Transmission 软件包含多个套件,分别是:

  • transmission-gtk:GTK+ 界面的客户端
  • transmission-qt:QT 界面的客户端
  • transmission-cli:命令行界面的客户端,一个完整的 BT 客户端
  • transmission-daemon:一个后台守护程序,本身不具备操作性,只能通过 Web 或客户端来进行控制。
  • transmission-remote-cli:用来控制守护程序的客户端,只能配合 transmission-daemon 使用。

安装


安装 transmission-daemon 后台守护进程版本,此版本特别适合安装在服务器上或者嵌入式系统中,以及一些没有显示器的设备上。

[Linux]# apt install transmission-daemon
  • 1.

安装过程中会安装多个命令行工具:

  • transmission-cli:独立的命令行客户端
  • transmission-create:建立 .torrent 种子文件的命令行工具
  • transmission-daemon:后台守护程序
  • transmission-edit:修改 .torrent 种子文件的 announce URL
  • transmission-remote:控制 daemon 的程序
  • transmission-show:查看 .torrent 文件的信息

修改默认配置


默认配置文件路径:

============ ============
说明 默认文件路径
============ ============
启动脚本 /etc/init.d/transmission-daemon 配置文件 /etc/default/transmission-daemon 主配置目录 /var/lib/transmsision-daemon/info ============ ============

在主配置目录中包含如下文件:

  • settings.json:主要的配置文件,设置 daemon 的各项参数。它是一个符号链接指向 /etc/transmission-daemon/settings.json官方说明 <https://github.com/transmission/transmission/wiki/Editing-Configuration-Files>_
  • torrents/:存放种子文件的目录,添加到下载任务中的种子都存放在这里。命名包含种子文件本身的名字和种子的 SHA1 HASH 值。
  • resume/:存放下载信息的文件,后缀名为 .resume 。文件包含了文件中哪些部分被下载,下载的数据存储的位置等等。
  • blocklists/:存储被屏蔽的 peer 地址。
  • dht.dat:存储 DHT 节点信息。

主配置文件各项说明

[Linux]# vim /etc/transmission-daemon/settings.json

{
//下载目录
“download-dir”: “/var/lib/transmission-daemon/downloads”,
//下载队列开关
“download-queue-enabled”: true,
//下载队列数量
“download-queue-size”: 5,
//未完成目录
“incomplete-dir”: “/var/lib/transmission-daemon/Downloads”,
//未完成目录启用开关
“incomplete-dir-enabled”: false,
//是否需要rpc鉴权 RPC(Remote Procedure Call)—远程过程调用
“rpc-authentication-required”: true,
//rpc绑定地址
“rpc-bind-address”: “0.0.0.0”,
//rpc是否启用
“rpc-enabled”: true,
//rpc主机白名单
“rpc-host-whitelist”: “”,
//rpc是否开启主机白名单
“rpc-host-whitelist-enabled”: true,
//rpc密码
“rpc-password”: “{ffe0479ff38ffb6bbe6de697313a63a5847e41eaFgNw3iaZ”,
//rpc端口
“rpc-port”: 9091,
//rpc访问地址
“rpc-url”: “/transmission/”,
//rpc用户名
“rpc-username”: “transmission”,
//rpc IP白名单
“rpc-whitelist”: “127.0.0.1”,
//rpc 是否开启IP白名单
“rpc-whitelist-enabled”: true,
//速度下限(KB/s)
“speed-limit-down”: 100,
//是否启用速度下限
“speed-limit-down-enabled”: false,
//速度上限(KB/s)
“speed-limit-up”: 100,
//是否启用速度上限
“speed-limit-up-enabled”: false,
//上传数量
“upload-slots-per-torrent”: 14,
//是否启用TP协议
“utp-enabled”: true
}

在修改配置文件之前需要停止守护进程,否则编辑的参数将无法正确保存。

[Linux]# systemctl stop transmission-daemon.service
  • 1.

最小修改项:

  • rpc-username 设置用户名
  • rpc-password 设置密码
  • rpc-whitelist 设置访问 IP 白名单

Web 访问时服务器提示 403 错误

403: Forbidden
Unauthorized IP Address.
Either disable the IP address whitelist or add your address to it.
If you're editing settings.json, see the 'rpc-whitelist' and 'rpc-whitelist-enabled' entries.
If you're still using ACLs, use a whitelist instead. See the transmission-daemon manpage for details.

根据官方文档的说明,需要将访问者 ip 加入白名单,ip 支持通配符 ``*``
如:"rpc-whitelist": "127.0.0.1, 192.168.0.*"
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

通过 web 访问服务


配置完成后,可以使用浏览器来访问 Transmission 服务,格式为:主机 ip(或域名)+ 端口(默认 9091),例如: http://192.168.0.100:9091/

客户端


嫌弃网页控制功能太少,可以使用第三方客户端进行链接。

  • windows 系统推荐使用 Transmission Remote GUI_
  • android 系统推荐使用 Transdroid_

… _Transmission Remote GUI: https://sourceforge.net/projects/transgui/
… _Transdroid: http://www.transdroid.org/