BNU-FZH

fengzhenhua@outlook.com

NumPy库

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

SciPy库

SciPy 是一个开源的 Python 算法库和数学工具包。

Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程领域的常用软件包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。 。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

NumPySciPy 的协同工作可以高效解决很多问题,在天文学、生物学、气象学和气候科学,以及材料科学等多个学科得到了广泛应用。

Matplotlib库

Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。

IPython 以及 pylab 模式

IPython 是 Python 的一个增强版本。它在下列方面有所增强:命名输入输出、使用系统命令(shell commands)、排错(debug)能力。我们在命令行终端给 IPython 加上参数 -pylab (0.12 以后的版本是 --pylab)之后,就可以像 Matlab 或者 Mathematica 那样以交互的方式绘图。

pylab

pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。

Pandas 库

Pandas教程

  • Pandas 是 Python 语言的一个扩展程序库,用于数据分析。

  • Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。

  • Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。

  • Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。

Seaborn 库

Seaborn 教程

  • Seaborn 是一个基于 Matplotlib 的数据可视化库,专注于统计图形的绘制,旨在简化数据可视化的过程。

  • Seaborn 提供了一些简单的高级接口,可以轻松地绘制各种统计图形,包括散点图、折线图、柱状图、热图等,而且具有良好的美学效果。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 创建一个示例数据框
data = {'A': [1, 2, 3, 4, 5], 'B': [5, 4, 3, 2, 1]}
df = pd.DataFrame(data)

# 计算 Pearson 相关系数
correlation_matrix = df.corr()
# 使用热图可视化 Pearson 相关系数
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.show()

这段代码将生成一个热图,用颜色表示相关系数的强度,其中正相关用温暖色调表示,负相关用冷色调表示。annot=True 参数在热图上显示具体的数值。

示例热图

在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为"海象运算符"( Walrus Operator ),它使用 := 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用。

演示海象运算符的使用
1
2
3
4
5
6
7
8
# 传统写法
n = 10
if n > 5:
print(n)

# 使用海象运算符
if (n := 10) > 5:
print(n)
  • if (n := 10) > 5::这是使用海象运算符(:=)的写法。海象运算符在表达式中进行赋值操作。
    • (n := 10):将变量 n 赋值为 10,同时返回这个赋值结果。
    • > 5:检查赋值后的 n 是否大于 5。如果条件为真,则执行接下来的代码块。
  • print(n):如果条件为真,打印变量 n 的值(即 10)。

海象运算符的优点:

  • 海象运算符(:=)允许在表达式内部进行赋值,这可以减少代码的重复,提高代码的可读性和简洁性。
  • 在上述例子中,传统写法需要单独一行来赋值 n, 然后在 if 语句中进行条件检查。而使用海象运算符的写法可以在 if 语句中直接进行赋值和条件检查。

编程注释是程序中用来解释代码功能和作用的文字内容,它们对于代码的可读性和可维护性非常重要。不同的编程语言对注释符号有不同的要求和规范,下面将介绍一些常见的编程语言中常用的注释符号。

C/C++、Java、C#等类C语言风格的注释:

  • 单行注释:使用双斜线(//)开头,注释文字直至该行结束。
  • 多行注释:使用斜线加星号(/)开头,星号加斜线(/)结尾,中间的内容都会被注释掉。

Python风格的注释:

  • 单行注释:使用井号(#)开头,注释文字直至该行结束。

JavaScript风格的注释:

  • 单行注释:使用双斜线(//)开头,注释文字直至该行结束。
  • 多行注释:使用斜线加星号(/)开头,星号加斜线(/)结尾,中间的内容都会被注释掉。

Shell脚本风格的注释:

  • 单行注释:使用井号(#)开头,注释文字直至该行结束。

HTML、CSS风格的注释:

  • 单行注释:使用斜线加星号(/)开头,星号加斜线(/)结尾,中间的内容都会被注释掉。

SQL风格的注释:

  • 单行注释:使用双连字符(–)开头,注释文字直至该行结束。
  • 多行注释:使用斜线加星号(/)开头,星号加斜线(/)结尾,中间的内容都会被注释掉。

需要注意的是,不同编程语言中注释的使用方式可能会有所不同,因此在具体的编程项目中,需要遵循对应编程语言的注释规范来使用注释符号。同时,良好的注释应该准确、清晰地解释代码的意图和功能,避免在注释中出现笔误或误导性的信息,以提高代码的可读性和可维护性。

在许多编程语言和日常工作中都会遇到斜杠和反斜杠。它们的具体解释为:

  • 斜杠(slash): “ / ”是斜杠,因为它的顶端是向前面倾斜的,英文中有时候也叫做“forward slash”;

  • 反斜杠(backslash):“\”是反斜杠,注意,它的顶端是向后倾斜的。要将它和普通的斜杠(“/”)区分开来。

斜杠经常会用来在诸如Unix的文件系统中和万维网网址中表示目录和子目录路径等。很遗憾的是,很多人都把反斜杠(“\”)当做是普通斜杠(“/”)的某种技术用语,错误的使用术语,混淆斜杠和反斜杠的风险让那些足够了解他们的人可以区分他们,但是了解仍不够他们意识到万维网的地址中很少会包含反斜杠(“\”)的。

Windows 和 Linux 的路径区别

  • 路径分隔符不同:Windows使用反斜杠“\”,而Linux使用正斜杠“/”。
  • 文件名大小写敏感:Windows不区分大小写,Linux区分大小写。
  • 文件系统根目录不同:Windows的根目录是盘符(如C:\),Linux的根目录是“/”。
  • 文件权限不同:Linux采用基于权限的访问控制,Windows采用基于用户的访问控制。
  • 文件扩展名不同:Windows的文件扩展名以“.”作为分隔符,Linux通常没有特定的分隔符

Linux Shell 参数续行

Shell命令行下反斜线"\"有两种含义:

对有特殊含义的字符进行转义

例如 echo "123\ \$",结果是"123$"

\Enter, 反斜杠后面紧跟回车,表示下一行是当前行的续航

1
2
3
4
5
6
7
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http\_ssl\_module \
--with-pcre=/usr/local/src/pcre-8.21 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.1c

Python 多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \\ 来实现多行语句,例如:

1
2
3
total = item_one + \
item_two + \
item_three

[], {}, 或 () 中的多行语句,不需要使用反斜杠 \\,例如:

1
2
total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']

LaTeX 中的反斜杠

LaTeX 中的命令通常是由一个反斜杠加上命令名称,再加上花括号内的参数构成的。

1
\documentclass{ctexart}

LaTeX 中有许多字符都有特殊的意义, LaTeX 中的保留字符有 \#,\$,\%,\&,\_,{ }, \,这些在正文中都不能直接呈现,需借助反斜杠转义。

为了实现远程文件访问,决定在ArchLinux上部署SFTP, 虽然技术上仍然没有测试成功,但是先记录下参考的主要文档How to set up an SFTP server on Arch Linux,以期日后解决。

In this guide we are going to set up an sftp server on an Arch Linux system. We will also set up a form of chroot where users can only access sftp with the shared credentials.

The File Transfer Protocol is a standard communication protocol used for the transfer of computer files from a server to a client on a computer network.

FTP isn’t popular today because it Lacks Security. When a file is sent using this protocol, the data, username, and password are all shared in plain text, which means a hacker can access this information with little to no effort. For data to be secure, you need to use an upgraded version of FTP like SFTP.

SFTP Secure File Transfer Protocol is a file transfer protocol that provide secure access to a remote computer to deliver secure communications. It leverages SSH – Secure Socket Shell and is frequently also referred to as ‘Secure Shell File Transfer Protocol’.

Prerequisites

To follow along this guide ensure you have the following:

  1. Arch Linux machine
  2. Root access to the server or a user with root access
  3. Internet access from the server

Table of Content

  1. Ensuring that the server is up to date
  2. Ensuring that the SSH service is installed
  3. Creating users and groups and adding the necessary directories
  4. Configuring the ssh service
  5. Verifying that the set up is working as expected

1. Ensuring that the server is up to date

Before proceeding, ensure your system is up to date. Use this command to refresh the system packages and update them.

1
sudo pacman -Syyu

2. Ensuring that the SSH service is installed

Verify that the ssh is installed:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ sudo pacman -Qi openssh
Name : openssh
Version : 8.6p1-1
Description : Premier connectivity tool for remote login with the SSH protocol
Architecture : x86_64
URL : https://www.openssh.com/portable.html
Licenses : custom:BSD
Groups : None
Provides : None
Depends On : glibc krb5 openssl libedit ldns libxcrypt libcrypt.so=2-64 zlib pam
Optional Deps : xorg-xauth: X11 forwarding
x11-ssh-askpass: input passphrase in X
libfido2: FIDO/U2F support
Required By : None
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 5.79 MiB
Packager : Giancarlo Razzolini <grazzolini@archlinux.org>
Build Date : Mon 19 Apr 2021 11:32:46 AM UTC
Install Date : Thu 03 Jun 2021 03:23:32 AM UTC
Install Reason : Explicitly installed
Install Script : Yes
Validated By : Signature

If ssh is not installed, install with this command:

1
sudo pacman -S openssh

Now that it is installed, start the service

1
sudo systemctl start sshd

Confirm its status

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2021-12-03 10:19:02 UTC; 17min ago
Main PID: 467 (sshd)
Tasks: 1 (limit: 4606)
Memory: 5.0M
CGroup: /system.slice/sshd.service
└─467 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups

Dec 04 14:53:30 ip-10-2-40-103 sshd[13109]: Unable to negotiate with 141.98.10.246 port 34078: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:53:42 ip-10-2-40-103 sshd[13111]: Unable to negotiate with 141.98.10.246 port 38674: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:53:53 ip-10-2-40-103 sshd[13115]: Unable to negotiate with 141.98.10.246 port 43268: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:54:05 ip-10-2-40-103 sshd[13117]: Unable to negotiate with 141.98.10.246 port 47864: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:54:17 ip-10-2-40-103 sshd[13119]: Unable to negotiate with 141.98.10.246 port 52460: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:54:41 ip-10-2-40-103 sshd[13123]: Unable to negotiate with 141.98.10.246 port 33418: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:54:53 ip-10-2-40-103 sshd[13127]: Unable to negotiate with 141.98.10.246 port 38014: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 14:55:05 ip-10-2-40-103 sshd[13129]: Unable to negotiate with 141.98.10.246 port 42614: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group-exc>
Dec 04 15:16:10 ip-10-2-40-103 sshd[13191]: Received disconnect from 61.177.173.21 port 60983:11: [preauth]
Dec 04 15:16:10 ip-10-2-40-103 sshd[13191]: Disconnected from authenticating user root 61.177.173.21 port 60983 [preauth]

3. Creating users and groups and adding the necessary directories

Next we will ensure that the necessary users are present in the system. In my case, I would like to have the sftp users home as /srv/sftp

Let us create the home /srv/sftp with this command:

1
sudo mkdir /srv/sftp

Then let us create an umbrella group for SFTP only

1
sudo groupadd sftpusers

Then create an sftp only user called citizix:

1
sudo useradd -G sftpusers -d /srv/sftp/citizix -s /sbin/nologin citizix

The above options do the following:

  • -G sftpusers: Create user, append to sftpusers group
  • -d /srv/sftp/citizix: Set home dir as /srv/sftp/citizix
  • -s /sbin/nologin: We do not want the user to login, so no ssh login shell
  • Finally, username as citizix

Then add password to the created user using this command:

1
2
3
4
5
$ sudo passwd citizix
Changing password for user citizix.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

3. Configuring the ssh service

Now that we have installed the necessary software and created the users and groups, let us configure ssh.

Ensure password authentication is enabled for ssh. Edit the config file here /etc/ssh/sshd_config:

1
sudo vim /etc/ssh/sshd_config

Then ensure this line is not commented:

1
PasswordAuthentication yes

Next, we need to add rules for the users in the sftpusers group to be considered as sftp. Edit the config file:

1
sudo vim /etc/ssh/sshd_config

Add this content at the bottom of the file:

1
2
3
4
5
Match Group sftpusers  
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /srv/sftp
ForceCommand internal-sftp

Then restart sshd to reload the config:

1
sudo systemctl restart sshd

Verify that sshd is running as expected:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo systemctl status sshd
● sshd.service - OpenSSH Daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-12-04 15:48:19 UTC; 18s ago
Main PID: 14269 (sshd)
Tasks: 1 (limit: 4606)
Memory: 892.0K
CGroup: /system.slice/sshd.service
└─14269 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups

Dec 04 15:48:19 ip-10-2-40-103 systemd[1]: Started OpenSSH Daemon.
Dec 04 15:48:19 ip-10-2-40-103 sshd[14269]: Server listening on 0.0.0.0 port 22.
Dec 04 15:48:19 ip-10-2-40-103 sshd[14269]: Server listening on :: port 22.

4. Verifying that the set up is working as expected

After successfully creating the user and adding sftp configurations, let is test the set up using the command:

1
2
3
4
❯ sftp citizix@10.2.11.8
citizix@<meta charset="utf-8">10.2.11.8's password:
Connected to <meta charset="utf-8">10.2.11.8.
sftp>

Now we have sftp server up and running with a user configured!

The users will be able to login to the server and access files and directories located in their home directory. If you want to give the user to other directories outside their own directory, just make sure the user has enough rights to access. These directories and files have to be within the sftp directory – /srv/sftp.

Example: if i want user to access the directory /srv/sftp/paymentfiles, do the following:

Create the directory

1
sudo mkdir /srv/sftp/paymentfiles

Then assign the user(citizix) access by making them own the directory:

1
sudo chown citizix:sftpusers /srv/sftp/paymentfiles

That is it. Users should now have access.

Conclusion

We managed to set up sftp server in an Archlinux Server in this guide.

为什么需要局域网

一般工作过程中会有一个台式机电脑和一个笔记本电脑,为了提高效率两台电脑均安装了固态硬盘. 但是我们还会遇到了文件传输的问题, 比如在台式机上的文件需要传输到笔记本电脑上,我们可以借助U盘移动硬盘网盘(百度网盘、阿里网盘等), 它们各有优点和不足:

  • U盘在转移资料时最方便,但是仅限于对于小文件,如果文件体积过大,那从台式机传输到U盘需要大量的时间,同时从U盘再到笔记本又需要再消耗几乎相同的时间,而且U盘的传输速度一般比较慢,但是它的最大的优点是一旦资料存储在U盘上,那可以方便的携带到其他电脑,实现多次传输。
  • 移动硬盘容量比较大,性能要远优于U盘, 一些重要的资料可以保存的上面,但是对于那些需要经常读取和编辑的资料就不适合存放在上面,因为移动硬盘经常随身携带也远不如U盘小巧。但是其传输速度非常快,特别是使用固态硬盘组装的移动硬盘,但是移动硬盘的最大作用应当是备份,备份资料就要求存储介质足够稳定,而目前就价格和稳定性上讲,机械硬盘仍是不二选择,相同价格机械硬盘的容量要远大于固态硬盘,机械硬盘的缺点是在工作时不能随便移动。
  • 网盘兴起有好多年了,目前比较有名的有:百度网盘、阿里云盘、坚果云盘、123网盘和中国移动网盘等. 平时可以把资料存在网盘上,但是你不能保证上传和下载速度,同时还有各种广告,各种限制,以及有些涉及隐私的资料都不适合存储在网盘,所以就当前来看这是一个不太明智的作法。

综上,在工作中对于那些需要经常访问的资料应当保存的电脑上,同时为了方便在不同电脑中传输,本文提供一个新的方法:使用网线组成局域网,借助samba在局域网中分享文件,分享方法参考:ArchLinux 局域网共享文件.

使用移动硬盘等中间媒介时,其传输速度要高于局域网。在测试时,我发现使用局域网传输时速度稳定在60M左右,但是局域网的总速度是1000M,这就意味着可以同时传输多个文件夹,每个传输速度都会在60M左右,显然多线程可以弥补移动硬盘单一高速的优势,但是局域网的点对点的直达优势却是移动硬盘所不具备的. 如果两台电脑处于同一个局域网,或两台电脑就在身边且有一根网线,则推荐使用局域网. 如果两电脑距离较远,且所需资料是不经常编辑的,则推荐使用移动硬盘。

设置局域网的方法

1. 准备工作

在开始之前,请准备好:

  • 两台运行Ubuntu操作系统的电脑。
  • 一根网线(建议不要超过80米,否则信号会衰减)。

2. 连接网线

将网线一端插入第一台电脑的网口,将另一端插入另一电脑的网口。确保网线插紧并且连接稳固。

3. 配置网络

  • 打开第一台Ubuntu电脑的系统设置(Settings)。
  • 选择“网络”(Network)选项。
  • 在网络设置中,点击“有线连接”(Wired Connection)。
  • 确保“有线连接”开关处于打开状态。
  • 选择需要修改的以太网设置,点击右侧的“选项”(Options)按钮(齿轮形的按钮),进入高级网络设置。
  • 在IPv4设置中,选择“手动”(Manual)。
  • 点击“添加”按钮,添加一个新的IP地址。
  • 在“地址”(Address)字段中输入IP地址,例如:192.168.189.13。子网掩码通常为255.255.255.0
  • 在“网关”(Gateway)字段中输入网关地址,例如:192.168.189.1。设置完毕的窗口如下图所示:
    置局域网网关
  • 点击“应用”并关闭网络设置窗口。

解释:

(1)为什么要设置成192.168.189.13?其他可以吗?
IP地址是局域网中用来标识设备的地址,而192.168.189.13是IPv4地址中的一个私有地址段,通常用于局域网中。在一个子网内,每台设备的IP地址应该是唯一的,因此我们选择一个未被占用的地址,以便在同一网络中找到对应的设备。其他私有地址段,如192.168.0.0192.168.1.0等也可以使用,只要保证两台电脑在同一个子网内,并且IP地址唯一。

(2)网关怎么设置?
本教程选择了192.168.189.1这个地址作为网关,是因为它处于私有IP地址范围内(私有IP地址范围是指专门供局域网使用的IP地址范围,不会在全球互联网上被路由器转发),并且与我们选择的IP地址192.168.189.x在同一个子网中。只需要保证两台电脑上的网关相同即可。

(3)子网掩码为什么是255.255.255.0
子网掩码用于定义哪些部分是网络地址,哪些部分是主机地址。在一个局域网中,通常使用的子网掩码是255.255.255.0,这意味着前三个字节是网络地址,最后一个字节是主机地址。这样,同一子网内的设备可以相互通信,而不同子网的设备则需要通过路由器进行通信。

4. 配置第二台电脑

重复步骤三,但在IPv4设置中将IP地址更改为另一个可用的地址,例如:192.168.189.8。子网掩码为255.255.255.0,网关字段中输入相同的网关地址:192.168.189.1
第二台电脑网关设置

5. 测试连接

打开终端,使用ping命令测试两台电脑之间的连接。在第一台电脑上输入以下命令:

1
ping 192.168.189.8

如果一切正常,你应该会收到类似以下的回复:

1
64 bytes from 192.168.189.8: icmp_seq=1 ttl=64 time=0.504 ms

在第二台电脑上输入以下命令:

1
ping 192.168.189.13

如果一切正常,你应该会收到类似以下的回复:

1
64 bytes from 192.168.189.13: icmp_seq=1 ttl=64 time=0.425 ms

这意味着两台电脑之间的网络连接已经建立并且正常工作。

macOS和Windows用户,可以按照类似的步骤进行网线连接和网络配置。在macOS上,你可以打开“系统偏好设置”,选择“网络”,然后配置IP地址、子网掩码和网关等参数。而在Windows操作系统上,可以通过“控制面板”中的“网络和共享中心”来进行相似的设置。(如果无法A可以ping通B,B无法ping通A,请检查A的防火墙设置)

安装必备软件

1
sudo pacman -S nautilus-share

注意:安装nautilus-share插件后,pacman将会自动安装上samba等依赖软件,所以仅此一条指令就可以实现gnome3下的nautilus配置共享目录。

启用用户共享功能

在用户可以共享目录之前,管理员必须在 Samba 中启用用户共享。本节参考:3.11. 允许用户在 Samba 服务器上共享目录

例如,仅允许本地 example 组的成员创建用户共享:

  1. 如果example不存在,则创建它

    1
    sudo groupadd example

  2. Samba准备目录以存储用户共享定义并正确设置其权限。例如:

    • 创建目录

      1
      sudo mkdir -p /var/lib/samba/usershares/

    • example组设置权限

      1
      2
      sudo chgrp example /var/lib/samba/usershares/
      sudo chmod 1770 /var/lib/samba/usershares/

    • 设置粘性位以防止用户重命名或删除此目录中其他用户存储的文件。

  3. /etc/samba/smb.conf文件不存在,则参考smb.conf.default建立smb.conf,并将以下内容添加到[global]部分(默认配置中并没有这两项):

    • 设置您配置用来存储用户共享定义的目录的路径。例如:

      1
      usershare path = /var/lib/samba/usershares/

    • 设置允许在这个服务器上创建多少个用户共享 Samba。例如:

      1
      usershare max shares = 100

    如果您对 usershare max shares 参数使用默认值 0,则用户共享将被禁用。

  4. 验证/etc/samba/smb.conf文件

    1
    testparm

  5. 重新载入Samba配置

    1
    sudo smbcontrol all reload-config

用户现在可以创建用户共享。

  1. 支持软链接访问(可选)

/etc/samba/smb.conf[global]节的最后,加上下面三条设置:

1
2
3
follow symlinks = yes
wide links = yes
unix extensions = no

  1. 重启samba服务
    1
    sudo systemctl restart smb

参考文章: Ubuntu配置samba服务器

ArchLinux 中共享文件夹的步骤

步骤 1: 打开文件管理器,右键单击共享的文件夹。点击上下文菜单中的“本地网络共享”选项。

本地网络共享选项

步骤 2: 在文件夹共享对话框中点击共享文件夹复选框。

这将在你的系统中安装 Samba 软件包。Samba 用于在 Windows 和 Unix 系统之间通过网络共享文件和打印机。

文件夹共享选项 - 安装 Samba

步骤 3: 安装 Samba 后,执行以下操作共享文件夹或目录。

  • 选中共享文件夹复选框。
  • 输入共享名称。这将是你从另一个系统(如 Windows)看到的名称。尽量不要使用任何带有空格的名称。
  • (可选)通过勾选相应选项,你可以控制共享文件夹的写入权限,以及允许访客访问。
  • 如果你允许访客访问,则没有凭据的人可以访问共享文件夹。所以要谨慎。
  • 如果你希望用户输入用户名和密码,打开终端并运行以下命令。
1
sudo smbpasswd -a 用户名

用户名 应该是对应 ArchLinux 系统的有效用户。

现在,你应该已经设置好了共享的文件夹或目录。

如何访问共享文件夹

从 Linux 系统中访问共享文件夹,你需要系统的 IP 地址或主机名。为此,打开“系统设置System Settings -> Wi-Fi -> 获取 IP 地址Get the IP address”。

IP 地址设置

如果你运行的是 Linux 发行版不是 Ubuntu,此步骤略有不同。你可能想运行 ip addr 来获取 IP 地址,如下所示:

在 Linux 中查找 IP 地址

一旦你获得 IP 地址,就可以在 Linux 系统中打开文件管理器,然后在地址栏中输入以下内容。注意:你应该修改为你系统的 IP 地址

你现在可以看到共享文件夹上面显示了一个小共享图标,表示网络共享文件夹。

共享文件夹

要在 Windows 系统 访问共享文件夹,打开运行(按下 Windows + R)或打开资源管理器,输入以下地址。注意:你应该修改为你系统的 IP 地址和文件夹名称。

1
\\192.168.43.19\Folder

你应该能够查看共享文件夹的内容,并根据授予的权限修改它。本节参考:如何在 Ubuntu/Linux 和 Windows 之间共享文件夹

关闭 samba 异步提高网速

默认情况下,Samba写操作是异步的,这导致了读取速度减半。在千兆局域网速下,Samba写入速度应当在100m/s, 但是读取速度只有50m/s, 解决方法为:关闭异步, 在配置文件/etc/samba/smb.conf[global]节点下追加上如下代码

/etc/samba/smb.conf -- [global]
1
aio read size = 0

在购买内存时, 如果你的主板只有两个内存插槽,你应该选择购买一条 16GB 的内存还是两条 8GB 的内存呢?当预算有限时,我们需要做出抉择。

内存容量大有什么优势

简单来说,不同内存配置的差异在于,一条16GB内存的价格较便宜,并且占用的内存插槽较少。而两条8G内存的优势在于可以启用双通道技术,从而在一定程度上提升性能。计算机在工作时,CPU直接与内存交换数据,内存容量越大,能够存放更多的文件进行处理,并提供更大的空间用于与CPU交换数据,从而更轻松地处理大型软件和多任务。

双通道内存有什么优势

内存的读写速度也会影响电脑的运行速度。双通道内存具备更大的带宽,可以实现更快的内存读取速度。虽然,但在使用时,可以。特别强调的是,,许多游戏的帧数可以提升50%甚至更多。而对于来说,双通道内存的帧数提升则,因此

先保证大内存还是先保证双通道

了解了前述知识点后,我们可以得出结论:

  • 如果你使用的是核显,并且没有独立显卡,一定要选择两条8GB内存以实现双通道,尤其是对于有游戏和图像处理需求的用户来说,这一点要优先考虑。
  • 如果你使用的是独立显卡,并且主板具备四个内存插槽,同样推荐选择两条8GB内存,因为这样还能保留两个内存插槽供未来升级使用。
  • 如果你的主板只有两个内存插槽,并且你担心将来的内存升级,那么在使用独立显卡的情况下,选择一条16GB内存也是可以的,因为

此外,还要注意内存的兼容性,一些较大尺寸的散热器安装后可能会挤占内存插槽的空间,如果主板因此减少了两个内存插槽,那就只能考虑更换硬件了。总之,根据自己的需求和经济情况,选择合适的内存配置是非常重要的。无论是单条16GB还是双条8GB,都有各自的优势和适用场景,希望上述的解释能对DIY玩家们在购买内存时有所帮助。

Linux目录与Windows目录类比

  • /usr:系统级的目录,可以理解为C:/Windows//usr/lib理解为C:/Windows/System32
  • /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
  • /opt:用户级的程序目录,可以理解为D:/Softwareopt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

源码的安装位置

  • /usr/src:系统级的源码目录。
  • /usr/local/src:用户级的源码目录。

/opt

这里主要存放那些可选的程序。例如测试最新的firefox, 那就装到/opt目录,当你测试完,直接删除它即可,这不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。 举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。

/usr/local

这里主要存放那些的软件,即不是通过“包管理器”安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面是个不错的主意。

exFAT很好,MAC、WIN都支持,还可以支持大硬盘和大文件 ,但它有一个问题,有时会很严重。如果你拿它存电影、音乐等,或者暴雪的游戏,都没关系,都是大文件。如果你拿它存一堆小文件,每个不超过128K,问题就出现了。

1T硬盘,一个分区:

  • NTFS每个簇4K,就是说你的文件要是10K,占三个簇,浪费2K。
  • exFAT每个簇256K,10K的文件占一个簇,浪费246K。

曾经在装的一个cygwin,4.8G:

  • 在NTFS分区,占5.2G,还好。
  • 在exFAT分区,大概占50G吧,因为多数文件都只有几十K甚至不到1K。

在NTFS里只占不到400G的数据(各种文件,电影、游戏、文档、程序源文件等),移到exFAT都快600G了。

exFAT分区小于512G的话,每个簇128K,还稍微节约一点,所以可以分至少两个区,每个512G。

一个NTFS,存放一堆小文件,或者变化不大的文件,可以用虚拟机里的WIN系统来修改。另一个是exFAT,放大文件或经常修改的文件。还有一个方案就是把一堆小文件弄成磁盘映像,DMG或ISO,只要装载了就可以直接用,但里面的内容不方便修改。存成压缩文件亦可,都不会显出exFAT的问题。

在格式化U盘的时候,会有一个U盘格式的选择,一般是两个,有的是三个,FAT32/exFAT/NTFS,那么这三个格式具体有什么区别呢?相信很多人都知道如果要拷贝超过4G大小的文件就得用NTFS格式,但其实他们之间的区别可不只这个。

首先先给大家介绍下这三种格式的特点。

FAT32

FAT32文件系统用4个字节(32位)空间来表示每个扇区配置文件的情形,所以叫FAT32。分区容量最低是512M,而上限的话不同的操作系统都不一样,WinXP系统最大可以做到2TB的FAT32分区。

NTFS

NTFS文件系统是windows NT核心和高级服务器网络操作系统环境的文件系统。NTFS系统比FAT32的可靠性更高,可以支持更大的分区和更大的文件,此外还有不少FAT32没有的功能,比如压缩分区、文件索引、数据保护和恢复、加密访问等。

exFAT

exFAT文件系统是微软在windows embeded5.0以上引入的一种适合于闪存的文件系统,主要是为了解决FAT32不支持4G或更大文件的问题而推出的。

FAT32与exFAT可用4GB文件的区别:

大多数优盘在格式化时默认FAT32,最大优点就是在一个不超过8GB的分区中,FAT32的每个簇容量都固定为4KB,与前代相比可以大大地减少磁盘的浪费,提高磁盘利用率。

虽然对于最大分区容量的支持上面,FAT32的2TB最大分区容量至今仍不过时,但FAT32无法传输并存放超过4GB容量的光盘ISO镜像、高清视频、各种图形作品文件等等,这是最致命的弊端。而exFAT格式在苹果本或者是Windows电脑上都可以格式化,并且在两个系统之间可以互相无障碍使用。相比之下,exFAT格式就没有4GB文件传输限制了。

其实FAT32与exFAT存在着一个升级关系,这两种文件系统都支持OS X系统与Windows系统,如果你将U盘格式化成这两种文件系统,在不同操作系统电脑上可以畅通无阻地使用。

NTFS相比FAT会让闪存性能降低

NTFS是相当流行的,但多见于硬盘。XP、Vista、Win7默认都会将分区格式化为NTFS系统,可以说NTFS是目前最好的磁盘文件系统。

优盘在格式化为NTFS时,实际可用容量与其他文件系统形式也有所差别,虽然使用中感受并不是很大。另外,在格式化U盘时,容量在64G甚至更大规格时,系统识别自动格式化为exFAT与NTFS格式,会便于优盘在不同操作系统电脑上无障碍使用。

但是,NTFS也有他的缺点,NTFS分区采用“日志式”,因为要记录磁盘的详细读写操作,对U盘这种快闪存储介质会造成较大的负担,比如同样存取一个文件或目录,在NTFS上的读写次数就会比FAT32更多,理论上NTFS格式的U盘比较容易损坏。并且由于U盘带宽有限,NTFS频繁读写占据通道会让磁盘性能降低。

以上便是关于U盘文件系统FAT32、exFAT、NTFS之间的区别和特点介绍,FAT32与exFAT之间最大的差别在于能否支持4GB及以上容量单个文件的传输、查看与编辑;而FAT系列文件系统与NTFS之间最大的区分在于文件存取的方式,后者长期使用可能会让闪存类存储产品性能降低.