Shell中的eval命令
基本用法
1 | eval command-line |
其中command-line
是在终端上键入的一条普通命令行。然而当在它前面放上eval
时,其结果是shell
在执行命令行之前扫描它两次。
举例解释
1 | pipe="|" |
shell
第1
次扫描命令行时,它替换出变量$pipe
的值|
,接着eval
使它再次扫描命令行,这时shell
把|
作为管道符号了。
1 | eval command-line |
其中command-line
是在终端上键入的一条普通命令行。然而当在它前面放上eval
时,其结果是shell
在执行命令行之前扫描它两次。
1 | pipe="|" |
shell
第1
次扫描命令行时,它替换出变量$pipe
的值|
,接着eval
使它再次扫描命令行,这时shell
把|
作为管道符号了。
在部署博客时,首先探测目标网站是否畅通是一个必要的环节。然而之前的探测方法依赖于返回码,但是不同的网站返回码不同,所以这不是一个很好的方法,本文的目标就是解决这个探测通用性的问题。
1 | wget --spider -T 5 -q -t 2 https://gitlab.com ; echo $? |
若返回值为\(0\), 则表示目标网站可以正常访问,否则表示网络不通。
wget
的常用参数为:
1 | --spider 模拟爬虫的行为去访问网站,但不会下载网页 |
1 | curl -s -o /dev/null https://gitlab.com ; echo $? |
若返回值为0, 则代表正常. 这个方法的优点在于与返回的状态码无关,是一个通用方案。
1 | curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null www.baidu.com |
上述方法,会返回一个状态码,若为200
则代表www.baidu.com
可以正常访问。但是,不同网站的状态码不同,所以这不是一个友好的方案,因此将此方法仅记录在此,但编写脚本时尽量不要使用。
注意:在上述文章中,测试代码与echo $?
前使用了管道符号|
,
这是不对的. 在本文中已经更正为;
,
这表示无论前面的代码是否正确运行后面的echo
照样执行,这样才能正确返回上一步的$?
状态,实现准确判断。
1 | import numpy as np |
如果a
不是一个数,而是一个向量或数组呢?这时需要使用numpy
中的通用函数np.frompyfunc(func,1,1)
,
这里的参数func
指的是你要使用的函数,第二个参数为func
中的参数个数,第三个参数为func
中的返回值的个数。现在进一步改写为计算数组的情况:
1 | import numpy as np |
看到很多研究,凭空臆想了一些复杂的电磁场,但是研究的火热,然后他们臆想的这些电磁场又不满足Maxwell
方程组,
所以从根本上讲就不是电磁场。因为这个基础性的问题,可能会引起某些人的不适,所以决定不发文章,直接在我的博客说明吧。因为我认为知识是全人类的,没有必要非得挂上名字发表,所以我也不怕别人在发表之前看到我的东西,因此就有了这篇文章。
Maxwell
描述了电磁场的基础性质,目前我个人认为,如果一个东西它不满足这组方程,那它一定不是电磁场!所以,研究电磁场相关的问题首先要确保自己选择的电磁场满足这组方程。同时,本人还认为,一个研究如果研究内容不是现实世界中存在的或间接存在的,那这样的研究就是无效研究。
\[\begin{align} \nabla\times\vec{E} &=-\frac{1}{c}\frac{\partial \vec{B}}{\partial t} \label{eq:maxwella} \\ \nabla\times\vec{B} &=\frac{4\pi}{c}\vec{j}+\frac{1}{c}\frac{\partial \vec{E}}{\partial t} \label{eq:maxwellb} \\ \nabla\cdot\vec{B} &=0 \label{eq:maxwellc}\\ \nabla\cdot\vec{E} &=4\pi\rho \label{eq:maxwelld} \end{align}\]
当空间中不存在电流和电荷时,电磁场满足的方程叫无源的 Maxwell 方程组。在真空中传播的激光就属于这种情况,其具体表达式为
\[\begin{align}\label{eq:maxwell1} \nabla\times\vec{E} &=-\frac{1}{c}\frac{\partial \vec{B}}{\partial t} \\ \nabla\times\vec{B} &=\frac{1}{c}\frac{\partial \vec{E}}{\partial t} \\ \nabla\cdot\vec{B} &=0 \\ \nabla\cdot\vec{E} &=0 \end{align}\]
如果真空中的电场只是时间的函数,那它的表达式是怎样的?由于受 Maxwell 方程组的限制,这个形式, 这一段就来探讨这种只与时间有关的电场形式。
由于真空中无源,所以应当满足无源的 Maxwel 方程组。又由于电场只是时间的函数,于是\(\nabla\times\vec{E}=0\), 根据式\(\eqref{eq:maxwell1}\) 的第一式可得
\[\begin{equation}\label{eq:maxwell2} -\frac{1}{c}\frac{\partial \vec{B}}{\partial t}=0 \end{equation}\]
式\(\eqref{eq:maxwell2}\)表明\(\vec{B}\)不是时间的显函数,所以它最多只能是空间的函数。
根据式\(\eqref{eq:maxwell1}\)的第2式,由于磁感应强度\(\vec{B}\)只与空间有关,所以\(\nabla\times\vec{B}\)就只与空间有关,所以直接对偏导数积分就得到
\[\begin{equation}\label{eq:maxwell3} \vec{E}=\vec{E}_0+t\nabla\times\vec{B} \end{equation}\]
由式\(\eqref{eq:maxwell3}\)可得,真空无源的电场受 Maxwell 方程组限制而只能取这种形式,它不能凭空臆造,不能设置任意的函数形式,这正是当前(2024年11月01日)好多研究强场的人做的工作中所必须面对的问题。无意与人争论,放在博客上,请大家各取所需。
由 Maxwell 方程组可以导出电磁场标势和矢势满足的达朗贝尔方程
\[\begin{align} \frac{1}{c}\frac{\partial^2 \varphi}{\partial t^2}-\nabla^2\varphi &=0 \label{eq:maxwell4}\\ \frac{1}{c}\frac{\partial^2 \vec{A}}{\partial t^2}-\nabla^2\vec{A} &=0 \label{eq:maxwell5} \end{align}\]
由式\(\eqref{eq:maxwell4}\) 和式\(\eqref{eq:maxwell5}\) 可得,对于只与时间有关的势,\(\nabla^2\)项就变为零,对时间的偏导就变成了导数,于是可以得出结论:只与时间有关的无源电磁场的势也只能与时间的一次方成正比.
对式\(\eqref{eq:maxwella}\)取旋度,再代入式\(\eqref{eq:maxwelld}\)得
\[\begin{equation}\label{eq:bodong0} \nabla^2\vec{E}-\frac{1}{c^2}\frac{\partial^2\vec{E}}{\partial t^2} =\frac{4\pi}{c^2}\frac{\partial \vec{j}}{\partial t}+4\pi\rho \end{equation}\]
对式\(\eqref{eq:maxwellb}\)取旋度,再代入\(\eqref{eq:maxwellc}\)得 \[\begin{equation}\label{eq:bodong1} \nabla^2\vec{B}-\frac{1}{c^2}\frac{\partial^2\vec{B}}{\partial t^2} =-\frac{4\pi}{c}\nabla\times\vec{j} \end{equation}\]
真空中无源,所以令式\(\eqref{eq:bodong0}\)和式\(\eqref{eq:bodong1}\)中的源\(\vec{j}=0\)和\(\rho=0\), 得到
\[\begin{align} \nabla^2\vec{E}-\frac{1}{c^2}\frac{\partial^2\vec{E}}{\partial t^2}&=0 \label{eq:bodong2} \\ \nabla^2\vec{B}-\frac{1}{c^2}\frac{\partial^2\vec{B}}{\partial t^2}&=0 \label{eq:bodong3} \end{align}\]
通过式\(\eqref{eq:bodong2}\) 和式\(\eqref{eq:bodong3}\) 更容易看出来,对于只是时间函数的电场强度和磁感应强度最多只能是时间的一次函数。对于一般情况,电场强度和磁感应强度都必须是波动方程的解,如果任意设置各式各样的只与时间有关的函数那就不是电磁波了。
本指南将向您展示如何在 Linux 上安装 Tor 浏览器。 Tor 浏览器是一款开源、跨平台的现代网络浏览器,注重隐私。浏览器的主要目的是为您提供互联网上的基本隐私权, 它有以下优点:
加密:当您使用 Tor 浏览器时,您的流量在通过 Tor 中继通过 Tor 网络时会被多次加密。
抵制指纹识别:当您使用其他浏览器(例如 Google Chrome、Firefox 等)时,系统会记录您的个人资料,以便轻松跟踪您在互联网上的活动。另一方面,Tor 浏览器可确保所有用户看起来都一样,从而使广告商很难对您进行分析。
阻止跟踪:大多数网站以 Cookie 或本地存储会话的形式保存您的活动历史记录。这些信息可以让您轻松追踪您。 Tor 浏览器会在每次浏览会话后删除所有 cookie 和其他相关信息,使营销人员和广告商难以跟踪您。
1 | cd ~/Downloads |
注意: 上述方法与发行版无关,并且适用于任何 Linux 发行版.
1 | cd ~/Downloads |
1 | sudo mv tor-browser /opt |
/opt
目录是为不属于核心Linux
系统的可选或附加软件包保留的。但是在最后一步注册为Linux
应用程序时,一定不要加sudo
。2024年10月20日, 获取了微软的最新版 Windows 11 LTSC
版本,
于是将台式机上的Windows 10 LTSC
升级为Windows 11 LTSC
.
在之前的双系统配置中,我们使用相同的UEFI
分区,这样即可以减少对固态硬盘的分区,设置起来也方便。但是,在安装完成Windows 11
后,
发现每次启动到Windows 11
后再重启,则UEFI
分区将会被重写,这导致了GRUB
被覆盖掉了,于是无法进行Linux
的引导!此问题虽然可以挂载ArchLinux
安装盘后重新挂载分区修复,但是再次使用Windows 11
后,问题再次出现。相较而言,我的笔记本上仍然是Win10
+
ArchLinux
的配置,它却没有出现此问题。根据上述情况可以得出结论,微软想独占硬盘,进而阻止Linux
启动,这无形中增加了Linux
用户的使用门槛,导致一此人不敢轻易换到Linux
系统下工作。
通过上述分析,Win11
的流氓行为恰恰反映了微软感受到了Linux
的压力,这可以证明Linux
越来越受到重视。为了实现同一电脑上自由的切换操作系统,且用上最新的Windows
,本文在实践的前提下,记录下此可行方案。
由于我的台式机有多块硬盘,所以单独拿出一块256G
的SSD
安装Windows 11 LTSC
,
同时在安装过程中要删除已经存在于另一块512G
的Nvme
固态硬盘上的UEFI
分区和16M
的Windows
预留分区。这样操作下来,在新的256
硬盘上安装Windows
时,它就会自动创建EFI
分区在256
硬盘上,也就相当于Windows
独占了这块256
固态硬盘。当使用完Windows
后,再重启时它虽然会检查并重写EFI
分区,但是也只是写这个256G
硬盘,所以也就不会影响512G
硬盘上的GRUB
了。
在安装Windows 11
的过程中删除了512G
硬盘上的UEFI
分区,这是为了防止Windows
自动将其设置为自己的UEFI
。此时,Linux
是无法引导的,因为它的UEFI
分区已经被删除了。所以,我们现在要重建这个分区。由于使用了Manjaro
的Live
镜像启动后,再用Gparted
软件同时删除了之前的UEFI
和16M
预留分区,所以硬盘分区表就发生了变化,所以重新安装GRUB
后,要修改/etc/fstab
文件,确保原来硬盘的/
、
/home
和/boot/efi
分区正确挂载。插入Ventoy
启动U盘
,
选择ArchLinux
,成功启动后依次执行下述命令。
在重建GRUB
前使用lsblk
查看硬盘分区,记住512G
硬盘的新分区,对应挂载到相应的挂载点。
1 | mount /dev/nvme0n1p1 /mnt/ |
重建GRUB
配置时,命令grub-mkconfig
会自动搜索电脑所有的硬盘,并将找到的操作系统启动项加载到GRUB
菜单中,在启动时可以随时选择。接下来的重点工作是修改Linux
的分区表,
下面仅列出需要修改的部分。
1 | # /dev/nvme0n1p1 |
重新启动系统
1 | exit |
为了避免主力系统ArchLinux
出现问题,切换到Windows11
后,右键开始菜单,选择以管理员身份打开 「PowerShell」
,输入以下命令:
1 | Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 |
支持UEFI
的主板,对于每一个UEFI
分区,在启动时BIOS
菜单中就会有一个启动项。Window 11
流氓的地方就是安装时它自动探测所有硬盘中的UEFI
分区,并占据第一个默认启动的UEFI
分区,而切换到Windows11
后它就会重写这个分区,覆盖其他的操作系统引导。所以在双系统的配置中,应当先确保无其他UEFI
分区的前提下,单独安装Windows 11
,
然后在Linux
的安装盘上单独划分一个UEFI
分区,再安装Linux
或恢复GRUB
.
安装Linux
或恢复GRUB
后,启动Linux
,
再执行一遍grub-mkconfig
以搜索添加Windows 11
的启动项.
虽然BIOS
中存在了两个启动项,但是每次切换系统都按F8
或其他按键来切换系统不是太方便,于是才有在GRUB
中添加Windows11
的操作,这样想的切换操作系统时一个上下移动菜单就方便解决了。
对于只有一块硬盘的电脑,要么建立两个UEFI
分区然后再安装Windows11
和Linux
.
要么直接使用一个UEFI
分区,然后安装Windows 10
和Linux
,
既然Windows
是作为一个备用系统处理那些不得不在Windows
处理的文件,所以也没必要追求最新,因此我的笔记本上仍然使用Windows10
+ArchLinux
方案。
Linux系统下的软件包管理器主要包括APT、YUM、DNF、Zypper和Pacman等。本文对不同发行版的包管理器进行简要介绍如下:
APT (Advanced Packaging Tool)
apt update
用于更新软件包列表,apt upgrade
用于升级所有可升级的软件包,apt install package_name
用于安装指定的软件包,apt remove package_name
用于卸载软件包.YUM (Yellowdog Updater, Modified)
yum install package_name
用于安装软件包,yum update
用于更新所有软件包,yum remove package_name
用于卸载软件包。DNF (Dandified Yum)
dnf install package_name
用于安装软件包,dnf update
用于更新所有软件包,dnf remove package_name
用于卸载软件包。Zypper
zypper install package_name
用于安装软件包,zypper update
用于更新所有软件包,zypper remove package_name
用于卸载软件包。Pacman
pacman -S package_name
用于安装软件包,pacman -Syu
用于同步软件包数据库并升级所有软件包,pacman -R package_name
用于卸载软件包。总的来说,这些软件包管理工具不仅帮助用户高效地管理软件包,还确保了系统的稳定和安全。通过掌握这些工具的使用,用户可以更加自如地进行系统维护和软件部署。
近期由于更换了显示器,就想着把无线鼠标和无线键盘的接收器都插入到显示器的USB
接口上,这样可以更简洁。但是由于2.4G
会受到USB3.0
的强烈干扰,这表现为如果把这些无线设备的接收器离USB3.0
接口比较近的时候,一旦有USB3.0
的U盘
等工作的时候发射的电磁波与2.4G
接近而发生干扰,导致无线键盘掉字符或卡顿。看网上的一些文章,国内的无线设备多使用的是公版的无线接收模块,而我的Logi
鼠标却不受影响。为此将USB
上行线接到电脑的USB2.0
接口上,完美解决无线电干扰的问题。鉴于这次USB
接收器问题的解决,本文记录一下各种USB
接口协议,虽然不是严格的官方标准,但一般而言可能通过颜色来区分。
USB版本 | 颜色 | 传输速度 | 最大电流 | 最大电压 | 最大功率 |
---|---|---|---|---|---|
1.0 | 白色 | 1.2Mbps~12Mbps | 500mA | 5V | 2.5Watts |
2.0 | 黑色 | 480Mbps | 500mA | 5V | 2.5Watts |
3.0 | 深蓝色 | 5Gbps | 900mA | 5V | 4.5Watts |
3.1 | 浅蓝色 | 10Gbps | 1.5A~3A | 5V | 15Watts |
Thunderbolt 3 | USB-C | 40Gbps | 5A | 20V | 100Watts |
USB Type-C
:这是一个接口标准,而不是USB
数据传输标准。根据Power Delivery (PD)
规范,USB Type-C
可以支持高达20
伏特(V)和5
安培(A)的电源输出,但实际电流取决于设备和电缆的能力。
带电粒子在电磁场中的Dirac方程为
\[\begin{equation}\label{eq:dirac0} \left(i\gamma^\mu \partial_\mu -e\gamma^\mu A_\mu -m \right)\Psi =0 \end{equation}\]
Volkov 态是指带电粒子在电磁场中的Klein-Gordon方程的解,即令 \(i\gamma^\nu D_\nu +m\) 左作用于式\(\eqref{eq:dirac0}\)后的方程
\[\begin{equation}\label{eq:dirac1} \left(\partial^2+2ieA^\mu \partial_\mu -e^2A^2+\frac{ie}{2}\gamma^\nu\gamma^\mu F_{\nu\mu}+m^2\right)\Psi=0. \end{equation}\]
式\(\eqref{eq:dirac1}\) 的解, 此处不打算写出, 请参考文章:Volkov wave function: its orthonormality and completeness 的第3页。
假如我们知道了一个一阶微分方程 \[\begin{equation}\label{eq:yijie0} y'=f(x) \end{equation}\]
式\(\eqref{eq:yijie0}\)的通解为 \[\begin{equation}\label{eq:yijie0j} y=\int^x_0f(x)dx+C \end{equation}\]
同时我们对式\(\eqref{eq:yijie0}\)求一次导,可以得到二阶方程 \[\begin{equation}\label{eq:yijie1} y''=f'(x) \end{equation}\]
对于式\(\eqref{eq:yijie1}\),也容易求得它的通解为 \[\begin{equation}\label{eq:yijie1j} y=\int^x_0f(x)dx+C_1 x+C_2 \end{equation}\]
注意,把式\(\eqref{eq:yijie1}\)的解\(\eqref{eq:yijie1j}\)代入到式\(\eqref{eq:yijie0}\)中,显然
所以,如果认为式\(\eqref{eq:yijie1j}\)也是式\(\eqref{eq:yijie0}\)的解,那就大错特错了!造成这个问题的原因是,二阶方程存在二个积分常数,而一阶方程只有一个积分常数,它们虽然只是一个简单的导函数关系,但是解空间却大为不同!二阶方程的解空间包含的一阶方程的解空间,随便找出一个二阶方程的解不一定满足一阶方程。所以方程\(\eqref{eq:dirac1}\)的Volkov态解并不是Dirac方程\(\eqref{eq:dirac0}\)的解,也就不能用这个方式来反驳Dirac方程的解不对!
其实还有一个方案,就是把 Volkov 态代入到 Dirac
方程,容易判断它根本不是Dirac方程的解!
2024-10-21 17:30 , 暂停讨论。
综合上述意见,近三天认真考虑了问题,得出结论:应当在原有理论的基础上拓展新的理论,使其适用性发展为普适理论。
对于准经典近似,理论上波函数应当具备形式 \[\begin{equation}\label{eq:zjdjs0} \Psi \sim e^{i\frac{S}{\hbar}} \end{equation}\]
对处理电磁场中的带电粒子而言 \[\begin{equation}\label{eq:dcczlz0} S=-mc\int ds-\frac{e}{c}\int A_\mu dx^\mu - \frac{1}{16\pi c}\int F_{\mu\nu}F^{\mu\nu}d\Omega \end{equation}\]
于是可得在准经典近似下,波函数可以写成电磁场部分与粒子部分的乘积,也就说电磁场的作用产生了粒子,而这个过程可以用准经典近似来考虑。这个电磁场部分为
\[\begin{equation}\label{eq:dccbf} e^{-\frac{ie}{c\hbar}\int A_\mu dx^\mu - \frac{i}{16\pi c\hbar}\int F_{\mu\nu}F^{\mu\nu}d\Omega} \end{equation}\]
如果不去分析 Dirac 方程,单纯从准经典的角度也可以给出一个合理的说明。
许多操作要验证电脑的唯一性,但是电脑的名字等等都是有可能相同的,使用硬盘的UUID
等,也有可能因为更换硬盘而变化。电脑标识唯一性的要求在Linux
中早就被解决了,这就是机器ID
.
机器 ID 是一个由操作系统生成的字符串,用于标识特定的计算机。它在系统启动时自动生成,并且在系统的整个生命周期中保持不变。本文将详细介绍机器 ID 的作用、生成方式以及在 Linux 系统中的应用。
Linux 系统中的机器 ID 是通过以下方式生成的:
在现代的 Linux 发行版中,机器 ID 是由 systemd 生成和管理的。systemd
是一个系统和服务管理器,它负责启动、停止和管理系统上的各种进程和服务。当系统启动时,systemd
会生成一个机器 ID 并将其存储在 /etc/machine-id
文件中。这个文件是一个只包含机器 ID 的纯文本文件。
机器 ID 是一个 32 位的十六进制字符串,由 16 个字符组成。生成机器 ID 的规则如下:
/etc/machine-id
文件。如果该文件存在且内容有效,则将其用作机器 ID。/etc/machine-id
文件不存在或内容无效,则系统会生成一个新的机器 ID,并将其写入
/etc/machine-id
文件中。机器 ID 在 Linux 系统中具有以下作用:
机器 ID 是用来唯一标识一台计算机的。通过机器 ID,系统可以识别不同的计算机,并进行一些特定的操作和配置。
一些软件和服务提供商可能使用机器 ID 来验证许可证和授权。通过检查机器 ID,他们可以确定软件是否在授权范围内运行。
机器 ID 在安全性方面也起到了一定的作用。它可以用于生成一些加密密钥或用于加密通信,以确保只有具有特定机器 ID 的计算机才能解密和访问数据。
机器 ID 还可以用于系统配置和管理。一些配置文件和脚本可能会根据机器 ID 进行不同的操作或应用不同的设置。
在 Linux 系统中,可以使用机器 ID 来进行一些操作和配置。
要查看当前计算机的机器 ID,可以使用以下命令:
1 | cat /etc/machine-id |
除了查看机器 ID,还可以在以下情况下使用机器 ID 进行操作和配置:
在使用机器 ID 时,需要注意以下事项:
机器 ID 是 Linux 系统中用于唯一标识计算机的标识符。它由 systemd
生成并存储在 /etc/machine-id
文件中。机器 ID
在许可验证、安全性和系统配置方面发挥着重要作用。通过机器
ID,系统可以识别不同的计算机并进行特定的操作和配置。在使用机器 ID
时,请确保唯一性、保密性和持久性,并根据需要使用相应的命令和配置文件来操作和配置系统。