分类 独立文稿 下的文章

视频点此

利用服务器搭建一个BT种子/磁力链下载机,省去我们自己挂机的烦恼。如果你的VPS在国外,可能还会起到些许加速的作用。

请注意,我服务器的操作系统为CentOS7,安装有宝塔面板

一、安装并配置Transmission

Transmission 是一款开源、跨平台的BT文件下载客户端,同时也提供有服务器使用的离线下载方案。对于大多数Linux发行版来说,Transmission已经进入到软件源中,只需要安装并进行简单的配置便可以投入使用了。

1、如果之前没有配置epel源,需要先行添加

yum -y install epel-release
yum -y update

2、安装Transmission-daemon

yum -y install transmission-daemon

3、先运行一次,以产生配置文件

  • 先启动 systemctl start transmission-daemon
  • 再关闭 systemctl stop transmission-daemon

4、编辑文件/var/lib/transmission/.config/transmission-daemon/settings.json,查找并修改如下几句以保证可以在任意地方通过账户密码登陆管理transmission

"rpc-authentication-required": true,  
"rpc-enabled": true, 
"rpc-password": "远程调用的密码", 
"rpc-whitelist-enabled": false,
"rpc-username": "远程调用的用户名", 

5、如果想在服务器重启后这个服务可以自动启动,可通过命令systemctl enable transmission-daemon实现

二、配置宝塔面板

1、在安全页中,放行9091端口

注意:transmission默认使用9091端口。所以请保证9091没有被占用。否则请在刚刚提到的settings.json中修改端口号

2、配置一个nginx下载,指向transmission的下载目录。默认是 /var/lib/transmission/Downloads

nginx下载服务配置方法,参见 利用Nginx建立简单的下载服务器


现在,通过命令systemctl start transmission-daemon来启动,并在浏览器中输入服务器ip:9091来看看吧。

至此,一个基本的种子离线下载环境就搭建完成了。默认的界面有些简陋,可以自行进行美化。同时,settings.json文件中还有很多其他的设置向,根据需要修改即可。

视频点此

先来假设一个场景。

众所周知,Steam的软件一定是保存在某一个文件夹下面的。假如说,我有一个分区专门保存我的游戏,那么我如何才能将Steam的游戏都直接放在分区下面而不是在Steam库文件夹下面呢?

在看过我今天这个神奇的快捷方式之后,你就知道要怎么做了。


要注意,今天这个功能,Win、Linux、Mac都是可以使用的。只是Win与另外两者的命令有些不同。而Linux对文件之类的快捷方式本身就会用到这种。所以为了对比,我这次在Win下进行演示。直接上演示让你感受一下。

一、文件

我事先已经安装好了{{7z这个压缩软件:C:\Program Files\7-Zip}},是可以正常使用的。现在,我把安装目录下的7z.dll剪切到{{桌面:C:\Users\gameb\Desktop}}。显然,由于缺少了7z.dll这个库,尝试运行时候会提示出错。

如果我们把7z.dll复制一份普通的快捷方式放到安装目录下面,它可以运行吗?很明显,快捷方式只是一个很弱鸡的快捷方式,并不能行使dll文件本身的职能,所以还是出错的。顺便请你记住这个快捷方式的大小:1KB.

现在,用管理员身份打开命令提示符,使用mklink "C:\Program Files\7-Zip\7z.dll" C:\Users\gameb\Desktop\7z.dll的形式来召唤那个更强大的快捷方式。

可以看到,它的大小占用为0K. 然而,虽然体积近似于没有,但当我们尝试运行7z的时候,你会惊奇的发现:它可以运行了!这个比弱鸡快捷方式的体积还小的快捷方式竟然可以履行dll本身的职能!

二、文件夹

现在,我们在把目光转移到文件夹上。我事先在桌面建立了一个名字叫temp的文件夹。现在我们创建一个普通的快捷方式,放到这个文件夹内,双击,资源管理器的路径会显示到哪里?

没有错,还是它本身的位置没有动。

但是,通过命令mklink /D C:\Users\gameb\Desktop\test\test C:\Users\gameb\Desktop\test,为它创建那个强大的快捷方式,放到它自身目录下面。如果我们双击这个,资源管理器的路径会如何变化?

正如你所见,它真的多了一层!不断的双击还会不断的加多!这个快捷方式真的行使了文件夹的职能了!

这个快捷方式,叫做符号连接

至于它太细节的东西我不打算多说了,因为说了也没啥用。只通过这个图来给你简要说明一下符号连接与快捷方式的不同之处就好了。

正如你所见,一个文件被存放的时候,它会对应一个名称保存在分区开始的内容表中。而快捷方式其实是一个类型为快捷方式的文件。当我们双击快捷方式的时候,其实是访问了快捷方式这个文件,然后它再给引导到它所对应的文件上面。本质上快捷方式和它所对应的文件是不一样的。

但符号连接就不同了,它其实是文件的另一个名字,所以我们双击符号连接和双击文件本身的效果是相同的。

形象一点来说。假如我是用户,你是文件,我直接访问文件就是我直接找的你;而快捷方式就是你公司的传达室大爷,我通过快捷方式访问文件,就是我去找这个老大爷,让他帮我传个话;那么符号连接,就好比是你的电话号码。我通过符号连接访问文件就是我用电话来联系你。虽然看起来多了一层,但我还是直接找到你的。

通过这个比喻,我们还可以顺带着说明另一个问题:你只有一个,而且位置确定。所以直接访问文件必须到存放文件的位置;传达室大爷可以有很多个,可以被放在公司不同的门口。所以快捷方式可以有很多个,也可以放在不同的位置;电话号码同样可以有很多个,我只需要找到任何一个电话号码就行了。所以符号连接也可以有很多个,存放在任何位置。

现在,你应该对符号连接有一个大概的认识了吧。对于应用来讲,符号连接和文件本身是同一个东西。所以借助这个,我们可以很轻易的实现我开头说到的问题——将Steam的游戏直接放在分区下面而不是在Steam库文件夹下面:只需要把游戏文件夹剪切到分区下面,然后在Steam库文件夹建立对应的符号连接就可以了。

最后,说一下Linux和OSX的命令如何书写吧——这个命令很常用所以我觉得你应该挺熟悉的:ln -s 需要创建连接的目标 创建的位置

如果你翻看过Linux系统的根目录,你会发现很多符号连接。所以这个在Linux下面的用处是很大的。当然,对于Windows也一样。只要你有足够的创造力。

视频点此

在Windows下面,有一个默默工作,为机械硬盘做提速工作贡献一生的系统软件——碎片整理程序。
但是,随着固态硬盘的普及,越来越多的看到一句话:固态硬盘不要做碎片整理。
而在Win8以后的版本中,这个程序被默认设定成了每周自动整理所有分区,行踪变得更加隐蔽了。就仿佛是个特务,潜伏在广大不知情的用户的电脑当中,伺机整理掉你的固态硬盘。
所以,看到这里,如果你有固态,请先去你的“优化驱动器”程序看看,是不是每周整理的。如果是,就赶紧把固态硬盘的分区取消掉吧。
但是,为什么会出现碎片呢?碎片又是如何影响机械硬盘速度的呢?是所有的磁盘分区类型都会出现碎片吗?今天,我打算通过一些形象的手段,跟你说说这三个问题。


在说三个问题之前,先来介绍一下什么是碎片。

在Linux方面,碎片被分为“内部碎片”和“外部碎片”。现在我们假设一个磁盘的空间有20k,它的基本存储单位为簇。至于簇到底是什么我们就不深究了。现在有两个文件,一个7k,一个1k。当簇的大小为4k时,磁盘分为了5个簇,两个文件共占用3个簇,即使用了12k,其中浪费地空间就是4k,而浪费的这4k空间,就是内部碎片。因此我们就了解了:内部碎片主要是造成磁盘空间的浪费。要注意:windows的磁盘碎片整理功能所整理的碎片不是这个碎片,也无法对这个碎片进行操作,它所对应的碎片概念是外部碎片。

任何一种分区格式都离不开簇这个东西,只是有名称可能不一样。所以任何一种系统下的分区都会有内部碎片出现。那可以对内部碎片进行优化处理吗?可以。以上面的例子来说,如果把每一簇分成2k,那么20k的磁盘就分为了10个簇,7k和1k两个文件共占用了5个簇,10k的空间,浪费的空间——内部碎片为2k。

那么内部碎片说完了,我们来看Windows概念下面的碎片——在Linux这边被称作“外部碎片”。它是怎么产生的呢?我通过一个矩阵来解释。

a b c d e f g h i j k l m n o p q r s t u v w x y z
a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这就可以简单的用来表示一个很小的硬盘,初始状态是空的,全部都被0填充。在矩阵顶部和左侧的a-z都是用来定位每一个数据的。最左上角的那个0就是aa,最右上角的那个0就是za,最左下角的就是az。

以FAT文件系统作为代表,NTFS类似。我现在在磁盘上加入一个文件,于是磁盘看起来会变成这个样子:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

(为了看起来更加清楚,g-z的空行被省略了)

前4行是TOC(Table Of Contents),即所谓的内容表。TOC会存储磁盘上所有文件的位置。磁头会根据这个表来移动到对应的位置。在我上面的例子中,TOC包含了一个名字叫做“hello.txt”的文件,并且这个文件的内容是从ae到le的。往下看ae到le之间的内容,我们能看到这个文件的内容是“Hello,_world”

到目前为止,一切都正常对吗?好,那我们再来添加一个文件:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

正如你所见,第二个文件被紧接着放置在第一个文件之后。这样的好处是你所有的文件都会紧密地放置在一起,这样读取它们将会非常的迅速和方便。要知道磁盘上最慢的就是读写头的移动了,它移动的越少,则读取的速度越快。

但是,当需要修改第一个文件的时候,问题就出来了。现在假设我们需要在“hello.txt”文件的尾部加入两个感叹号,我们就会遇到问题:没有空间。文件“bye.txt”挡住了“hello.txt”的去路。这时候我们有两个解决方法,但是没有一个是完美的。

  • 把文件“hello.txt”删掉,然后再“bye.txt”后面加入修改过后的“hello.txt”。
  • 把文件“hello.txt”拆成两部分存储,这样在“bye.txt”之前就不会有空的磁盘空间了。

第一种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a f n f b y e . t x t m e z
b e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 G o o d b y e , _ w o r l d
f H e l l o , _ w o r l d ! ! 0 0 0 0 0 0 0 0 0 0 0 0

第二种方式表现出来就是这样:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t a e l e a f b f b y e . t x
b t m e z e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e H e l l o , _ w o r l d G o o d b y e , _ w o r l d
f ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

而FAT采用了哪种方式呢?显然,第二种更快捷。我们只需要在TOC中读取到文件的起始位置,然后让这个作为起始的簇指向保存着这个文件的下一个簇,而下一个簇继续指向下下个簇,依次类推,便可以让磁头知道我要通过哪一个路径来读取这个文件了。这就是FAT保存文件的链式结构。

而这,就是为什么FAT格式的文件系统经常需要磁盘碎片整理的原因。所有的文件都紧挨着存放,所以任何时候,只要一个文件需要增大,就会产生碎片。而任何文件被删除了,就会留下一个空白区域。于是很快磁盘就会变成一堆乱糟糟的碎片和空白,效率就会变低了。

不知道你有没有听到我刚刚说过的一句话:要知道磁盘上最慢的就是读写头的移动了,它移动的越少,则读取的速度越快。所以整理碎片,让文件保存在一个连续的区域,减少磁头的摆动,这就是整理碎片加速磁盘读写的原因。而现如今的固态硬盘已经不需要磁头的概念了,反而会更关注每一块的读写次数,自然也就不需要,也不推荐进行碎片整理了。

那么,这种“外部碎片”是每一个操作系统对应的每种文件系统类型都会产生的吗?

不是。Linux就不会出现。因为它使用一种不同的方式来处理这种问题。当然,对于单用户来说Windows的文件系统已经够好的了,但是Linux生来就是为多用户设计的系统,它总是假设在同一时间有多个用户试图去操作不同的文件。所以Linux相对FAT文件系统,使用了另一种方法来设计自己的文件系统。Linux文件系统看起来是这样的:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n s n 0 0 0 0 0 0 0 0 0 0
b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

当我们添加了文件以后就变成这样了:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n s n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d 0 0 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

这种文件系统的好处是磁盘的磁头可以一直位于中间位置,而所有的文件平均下来都会非常近。

当我们仍然给“hello.txt”加入两个感叹号时:

a b c d e f g h i j k l m n o p q r s t u v w x y z
a T O C h e l l o . t x t h n u n b y e . t x t d u q
b u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
c 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 T O C
e 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
f 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
h 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
i 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
n 0 0 0 0 0 0 0 H e l l o , _ w o r l d ! ! 0 0 0 0 0
o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
u 0 0 0 G o o d b y e , _ w o r l d 0 0 0 0 0 0 0 0 0
v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

没有任何的障碍。

Windows总是试图把文件存储在尽量靠近磁盘开始位置的地方,这导致当磁盘利用率变高的时候它经常会产生磁盘碎片。Linux却在整个磁盘上存储文件,所以当文件的大小需要改变的时候,总是有足够的空间。当然,想必你也可以看出来,当磁盘利用率接近饱和的时候Linux同样需要文件整理。但是根据linux.org的说法,只要磁盘还有5%以上的可用空间,那么这种碎片是基本不会出现的(Linux native file systems do not need defragmentation under normal use and this includes any condition with at least 5% of free space on a disk.)。而在实际使用中,磁盘在还有8%左右未使用时就会有警告产生,所以碎片整理是不用考虑的。

视频点此

服务器还能干点儿啥?

那就搭一个全平台的同步盘吧。没有被和谐的顾虑,没有广告的困扰,还能扩展各种各样的功能。来看看怎么搭建。

一、通过docker

可以安装docker,然后通过docker run -d -p 自定义一个没用过的端口号:80 nextcloud一行命令,即可完成搭建并启动。之后,访问服务器ip:端口号来配置管理员帐号,即可完成。

二、手工搭建

1、通过按照我这个系列来的话,你应该安装过宝塔面板。那么现在去宝塔面板,安装php7.3.

2、安装完毕后,点击网站—添加站点,弹出窗口:

  • 域名自定,可以用ip,也可以用一个域名
  • 根目录自定
  • FTP不创建
  • 数据库选择mysql-utf8mb4
  • 用户名密码随意,自己能记住就好
  • PHP版本选择刚刚安装的PHP73
  • 分类随意
  • 提交

3、前往https://nextcloud.com/install/#instructions-server,复制Nextcloud的下载地址

4、宝塔中,打开到刚刚建立站点的根目录,删除文件夹下的所有文件。通过远程下载功能,将安装包下载到服务器上,并解压到根目录中(直接解压的话,会多一层Nextcloud文件夹。进入,将所有文件移动出来即可

5、访问网址,设置管理员账户。让后点开存储&数据库一项,将其改为MySQL,并填入刚刚的数据库名、用户名和密码。安装完成

三、手工搭建可能有的部分问题及解决方案

1、您的网页服务器未正确设置以解析“/.well-known/caldav”及您的网页服务器未正确设置以解析“/.well-known/carddav”

这两个警告可以一起解决,解决方法就是添加两行重定向配置。

在宝塔网站类别中,前往对应站点的设置—伪静态标签),添加如下两行:

location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}

location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}

2、PHP 的设置似乎有问题, 无法获取系统环境变量. 使用 getenv(”PATH”) 测试时仅返回空结果

从宝塔文件管理,打开/www/server/php/73/etc/php-fpm.conf,在其尾部添加一行:

env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

保存并重启PHP服务。

3、PHP 模块 ‘fileinfo’ 缺失. 我们强烈建议启用此模块以便在 MIME 类型检测时获得最准确的结果

前往宝塔的PHP7.3管理窗口,选择安装扩展,安装fileinfo

4、Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root.

同1,在伪静态中增加下列代码:

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
    deny all;
}

5、内存缓存未配置,为了提升使用体验,请尽量配置内存缓存

同3,增加APCu模块,后去往网站根目录/config下,编辑config.php,在结尾的花括号前增加一行

'memcache.local' => '\OC\Memcache\APCu',

保存

6、The PHP OPcache is not properly configured. For better performance it is recommended to use the following settings in the php.ini:

  • 同3,增加opcache模块
  • 在PHP7.3管理界面,选择配置文件标签,找到[Zend Opcache],用以下内容覆盖zend_extension之后,下一个[]之前的内容:
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

7、Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the documentation

点击后面的查看列表。对照列表删除根目录下对应的文件即可。

视频点此

这看起来只是一个简单的显卡选谁的问题,实际上这是两种思维的较量。今天,我就来跟你聊聊,如何看待这个较量。

要注意呢,我的观点可能在有些人看来是有失公允的。因为我是站在Linux阵营来说话的,这在一定程度上必然会让我的观点偏向开源一方。所以如果你正尝试,或者已经开始想Linux平台过渡了,这个视频可能对你有所帮助;如果你是坚定的Windows拥护者,那么我之后的观点可能会与你有所违背。斟酌着听吧。

好了,现在就来正式的谈一谈开闭源驱动这个问题。

其实曾经它俩还不是这样的。在那个时候,它们俩都需要使用专有驱动——也就是闭源驱动——来运行。在Windows下面,NVIDIA比AMD更被玩家接受,有一点就是它的驱动优化要比AMD强一些。而Linux下,在两者都需要闭源驱动的年代,NVIDIA的驱动同样可以说一直在是吊打AMD的专有驱动。但这个并不是体现在优化方面,而是两者安装方式的差异上面:NVIDIA,通过.run扩展名的的可执行文件来安装驱动,驱动会被固化到Linux内核之中。这对于安装专属驱动来说是一个很好的方法——简单来讲,固化的过程,就是利用用户的电脑编译出一个内核模块并插在用户的内核上。因为通过用户电脑完成编译,所以得到的这个模块可以说是完全根据用户当前的系统环境生成的,非常灵活。
而AMD,通过amdgpu-pro完成——体验很差。但到现在AMD仍然在维护这个玩意儿。不要装!想给它整服帖,要命。因为AMD维护这个驱动的思路和Windows类似,就是定期释放一个新版本,这个版本只能用在指定的Linux内核版本上,一般是LTS版本的内核。所以如果你使用的是更新更好的内核,或者一个自定义内核的话,这个驱动通常将不再可用。当然,如果你会魔改这个驱动,它兴许能用,但半死不拉活的用起来还不如不要。所以不要用AMD的闭源驱动。
但AMD有一个优势,就是它喜欢开源。我的理解就是:既然我做不好,那我就公开,让有兴趣的人帮我改进,质量提升的同时我还不用额外雇开发者。不管是不是这种想法,喜欢开源的特性让针对AMD显卡的开源驱动性能同闭源驱动几乎无差距,并且这个开源驱动被先天性的整合到了Linux内核之中。与之相比,NVIDIA由于各种技术封闭,针对它的开源驱动只能靠开发者从零开始一点一点写出来,无论性能还是功能同闭源驱动都相差悬殊。所以,如果你使用AMD显卡,那你不需要因为安装不了amdpro驱动而焦头烂额,所有Linux都先天性自带的开源AMD驱动可以给你闭源同等的体验。而如果你使用NVIDIA显卡,那么闭源驱动是一定要安装的。不过好在NVIDIA的闭源驱动不是nvidia-pro这种实现方法,所以你不必担心NVIDIA的闭源驱动装不上。但闭源驱动终究动辄到内核层面,所以NVIDIA的.run实现方式再简单,你可能也会遇到一些不可预料的问题。因此在这一方面,我会倾向开源,偏向AMD阵营。

但大多数人都是用NVIDIA显卡,并且不是很看好AMD显卡——尤其是Windows用户。所以接下来我们聊聊NVIDIA这个闭源驱动的问题。

如果你使用Arch分支以外的发行版,你要怎么安装NVIDIA的闭源驱动呢?

前往NVIDIA的官网——搜索你的显卡驱动——下载.run文件——给其加上可执行权限——安装。当然,一些开箱即用的发行版比如Deepin、Ubuntu这种,会配有一个显卡驱动管理器,通过管理器我们就可以一键安装驱动。但这就又有一个问题:我们并不知道一键安装驱动的背后系统到底都干了些什么,一旦出现了异常,回退的操作就会变得非常艰难。当然,你可能会说这是Linux的问题。如果你这么想了,就说明你对Linux高度自定义性的“高度”一词理解的不深。它太能自定义了,所以想让一套代码适配各种情况太艰难了,所以这就是为什么Linux会推崇开源了。但就像我一开始说的,NVIDIA的.run解决方案可以说是闭源中非常好的了。因为它至少可以适应大多数人的系统,这便足矣。

还有一个问题,可能就不限于Linux方面了:我是否需要安装最新版本的显卡驱动?

Windows下面这个回答可能比较多样化,但Linux下面,这个问题的答案很精确:需要。你需要前往NVIDIA官网,下载新版本的.run文件,然后重新安装。挺麻烦的。

而对于Deepin这种通过一键安装驱动的,更新显卡驱动同样是一个比较麻烦的事情。你不但需要知道这个程序拥有的驱动版本更新没有,还要冒风险卸载再安装。这也是为什么Linux阵营相对会更偏向AMD显卡。

对于绝大多数软件和开源驱动,它们都会被发行版收录到软件仓库之中。amd的开源驱动自然也是如此。所以每次你更新系统的时候,这些软件和驱动就都会被更新到最新了,所以除非你不更新系统,否则你的使用的软件和开源驱动总会是你的发行版下面最新的版本。

这里我想额外插一句啊:Linux更新本质就是下载软件包替换,所以每次更新的量相比Windows来说很小,而且软件包它装它的,你照常使用即可。只有当你将软件关掉了,这个旧版本才终止使命。换句话说,如果这个软件你开了一年不关,那么即使中途这个软件升级了两百次,你在用的这个软件仍然是一年前的老版本。只有当你关掉软件再打开,最新的才会启动。这个过程是无缝的。并不像Windows那种要你重启以应用更新,而且一更更好长时间,不完成还不让你动。

好,两种代表我就说的差不多了。总的来讲,AMD开放,NVIDIA封闭。这在Windows上得不到什么体现,但在Linux上,AMD虽然自己做的不好,但借助开源让其处在优势地位;而NVIDIA自己很强大,但由于封闭使得很多特性不能完整的发挥。正所谓“人多力量大”。

视频点此

经过上一期的介绍,想必你已经可以建立起来一个自己的博客了。所以这种基本的网页服务我就不再多说了。但是,我们为了实现网站,给我们的服务器安装了宝塔面板和网站的执行环境。它们还能怎么用呢?今天我就来聊聊这个。

如果你是按照我的视频来操作的,那么你现在应该使用的lnmp这一套环境。而其中的N——Nginx,这个高性能HTTP和反向代理web服务器,便是今天我要拿来开刀的一个玩意儿。通过它,我们可以快速建立一个下载服务。

你可能会问:我弄这么一个下载服务,有什么用呢?

一般来讲,没什么用。但假如你有我这样的需求,就是让服务器定时的去从某个地方下载当天最新的文件——当然,我的实际用处在于每天的北京时间3点,去录制我最喜欢的Contry Radio的电台节目,供我之后下载收听。这个电台是捷克语电台,每天放送捷克语乡村音乐。如果偏爱乡村音乐的话推荐去听一听。链接在这里

需要注意一点啊,我是使用VPS的,服务器本体在德国的一个机房。所以你想让我直接用U盘拷贝那真是天方夜谭…另外,我当然可以通过宝塔面板来下载,但是每次还得登陆帐号、切换到文件管理、打开文件夹下载,这太麻烦,还不如一劳永逸,只要我输入对应的网址,就能弹出下载列表供我下载,这多好。

正是懒惰驱使了服务完善。所以今天就来看一看,如何建立一个很简易的下载服务器吧。


  • 登陆宝塔面板,在软件部分找到Nginx,点击弹出配置窗口。
注:如果没有,可以前往软件商店,在列表中找到同样的项目,点击后面的设置
  • 切换到配置修改标签,在右侧窗口的结尾添加如下文字:
server { 
    listen    9000;    #端口 
    server_name localhost;  #服务名 
    charset utf-8; # 避免中文乱码
    root  /www/wwwroot/downloads; #显示的根索引目录,注意这里要改成你自己的,目录要存在 
 
    location / {
      autoindex on;       #开启索引功能 
      autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb) 
      autoindex_localtime on;  # 显示本机时间而非 GMT 时间 
    }
  }
  • 保存,切换到服务标签,点击重载配置,一个简易的下载服务就做好了。
  • 但是现在可能还不能访问,因为宝塔的端口规则没有放行。前往宝塔的安全标签,在防火墙窗格中,端口填入刚刚设置的端口号,点击放行
  • 现在,你可以在浏览器输入你服务器的ip:配置的端口号来访问,或者通过对应ip的域名来访问看一看了。

注意:如果需要多个下载服务,一种方法可以在刚刚设置的根目录下面建立子文件夹,另一种方法则可以在配置文件下面新建多个server,只需要确保使用的端口没有被占用即可。


这么一个下载服务器,虽然简陋,但也很实用。就看你的创造性能不能想到它的用处了。那么一个服务器还能有什么作用呢?我们下次接着说。