<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>Eric&#039;s Blog - Linux相关</title>
<link>https://eblog.ink/category/Linux%E7%9B%B8%E5%85%B3/</link>
<atom:link href="https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Wed, 06 Aug 2025 01:12:03 +0000</lastBuildDate>
<pubDate>Wed, 06 Aug 2025 01:12:03 +0000</pubDate>
<item>
<title>【Linux】格式化磁盘为exFat 并挂载</title>
<link>https://eblog.ink/archives/397/</link>
<guid>https://eblog.ink/archives/397/</guid>
<pubDate>Wed, 06 Aug 2025 01:12:03 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[exFAT格式化1.​​安装 exfatprogssudo apt install exfatprogs  # Debian/Ubuntusudo dnf install exfatprogs ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>exFAT格式化</h2><p>1.​​安装 exfatprogs</p><pre><code>sudo apt install exfatprogs  # Debian/Ubuntu
sudo dnf install exfatprogs  # Fedora
sudo pacman -S exfatprogs    # Arch
</code></pre><p>2.删除分区和新建分区</p><pre><code>fdisk /dev/sda
</code></pre><p>3.格式化分区</p><pre><code>sudo mkfs.exfat /dev/sda1
</code></pre><h2>自动挂载方法</h2><p><strong>修改 /etc/fstab</strong></p><p>​1. 获取 /dev/sda1 的 UUID（推荐）​​<br>使用 blkid 查看分区的 ​​UUID​​（比 /dev/sda1 更稳定，防止设备名变化）：</p><pre><code>sudo blkid /dev/sda1
</code></pre><p>输出示例：</p><pre><code>/dev/sda1: UUID=&quot;1234-5678&quot; TYPE=&quot;exfat&quot; PARTUUID=&quot;abcd1234&quot;
</code></pre><p>记下 ​​UUID​​（如 1234-5678）。</p><p>​​2. 编辑 /etc/fstab​​</p><pre><code>sudo nano /etc/fstab
</code></pre><p>在文件末尾添加一行（根据你的文件系统类型选择）：</p><p>​​如果是 exFAT 格式​​</p><pre><code>UUID=1234-5678  /mnt  exfat  defaults,uid=1000,gid=1000,umask=022  0  0
</code></pre><p>另一种exFAT 格式​​</p><pre><code>/dev/sda1 /mnt exfat rw,uid=1000,gid=1000,umask=022 0 0
</code></pre><p>uid=1000,gid=1000：让普通用户（如你的用户）有读写权限（id -u 查看你的 uid）。<br>umask=022：设置默认权限（755）。<br>0 0：不备份、不检查。</p><p>​​如果是 NTFS 格式​​</p><pre><code>UUID=1234-5678  /mnt  ntfs-3g  defaults,uid=1000,gid=1000,umask=022  0  0
</code></pre><p>（需安装 ntfs-3g：sudo apt install ntfs-3g）</p><p>​​如果是 ext4 格式​​</p><pre><code>UUID=1234-5678  /mnt  ext4  defaults  0  2
</code></pre><p>​​3. 创建挂载点并测试​​</p><pre><code>sudo mkdir -p /mnt          # 创建挂载目录
sudo mount -a               # 测试 fstab 配置是否正确
df -h | grep /mnt           # 检查是否挂载成功
</code></pre><p>如果 mount -a 报错，检查 /etc/fstab 是否有语法错误。</p><p>​​4. 重启验证​​</p><pre><code>sudo reboot
</code></pre><p>重启后检查是否自动挂载：</p><pre><code>df -h | grep /mnt
lsof /dev/sda1
</code></pre><h2>注意</h2><p>在 /etc/fstab 中配置 ​​exFAT​​ 文件系统挂载时，可以通过 umask、fmask 和 dmask 参数控制文件和目录的权限。以下是不同权限设置的方法：</p><p>​​1. umask（默认权限掩码）​​</p><p>umask 决定 ​​文件和目录​​ 的默认权限：</p><p>umask=000 → 权限 777（所有用户可读、写、执行）<br>umask=022 → 权限 755（所有者 rwx，其他用户 rx）<br>umask=111 → 权限 666（所有用户可读、写，但不可执行）<br>​​示例​​</p><pre><code>UUID=1234-5678  /mnt  exfat  defaults,uid=1000,gid=1000,umask=000  0  0
</code></pre><p>​​效果​​：<br>文件权限：777（-rwxrwxrwx）<br>目录权限：777（drwxrwxrwx）</p><p>​​2. fmask 和 dmask（分别控制文件和目录权限）​​<br>如果希望 ​​文件​​ 和 ​​目录​​ 权限不同，可以分开设置：</p><p>fmask：控制文件权限（如 666）。<br>dmask：控制目录权限（如 777）。<br>​​示例​​</p><pre><code>UUID=1234-5678  /mnt  exfat  defaults,uid=1000,gid=1000,fmask=000,dmask=000  0  0
</code></pre><p>​​效果​​：<br>文件权限：777（-rwxrwxrwx）<br>目录权限：777（drwxrwxrwx）<br>​​常见组合​​<br>​​需求​​    ​​参数设置​​    ​​文件权限​​    ​​目录权限​​<br>文件 666，目录 777    fmask=000,dmask=000    666    777<br>文件 644，目录 755    fmask=133,dmask=022    644    755<br>文件 664，目录 775    fmask=002,dmask=002    664    775</p><p>​​3. 权限计算规则​​<br>​​权限 = 最大权限 - umask/fmask/dmask​​<br>exFAT 的默认最大权限：</p><p>文件：666（rw-rw-rw-）<br>目录：777（rwxrwxrwx）</p><p>​​示例​​：<br>fmask=022 → 文件权限 = 666 - 022 = 644（rw-r--r--）<br>dmask=022 → 目录权限 = 777 - 022 = 755（rwxr-xr-x）</p><p>​​4. 验证权限​​<br>挂载后检查权限：</p><pre><code>ls -l /mnt
</code></pre><p>输出示例：</p><pre><code>-rwxrwxrwx 1 user user 0 Jan 1 10:00 file.txt  # 文件权限 777
drwxrwxrwx 2 user user 0 Jan 1 10:00 dir       # 目录权限 777
</code></pre><p>​​5. 其他注意事项​​<br>​​uid 和 gid​​：</p><pre><code>uid=1000（你的用户 ID，用 id -u 查看）
gid=1000（你的组 ID，用 id -g 查看）
</code></pre><p>确保用户有权访问挂载点。<br>​​exFAT 的权限限制​​：<br>exFAT 本身不支持 Linux 权限，umask/fmask/dmask 是挂载时的逻辑限制。<br>实际文件权限在 mount 时生效，拔掉设备后不保留。<br>​​NTFS 的类似配置​​：</p><pre><code>UUID=1234-5678  /mnt  ntfs-3g  defaults,uid=1000,gid=1000,fmask=133,dmask=022  0  0
</code></pre><p>​​总结​​</p><p>​​需求​​    /etc/fstab 参数</p><p>文件 777，目录 777    umask=000 或 fmask=000,dmask=000<br>文件 666，目录 777    fmask=000,dmask=000<br>文件 644，目录 755    fmask=133,dmask=022<br>文件 664，目录 775    fmask=002,dmask=002</p>
]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>https://eblog.ink/archives/397/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】使用Samba、NFS共享文件夹给Windows</title>
<link>https://eblog.ink/archives/396/</link>
<guid>https://eblog.ink/archives/396/</guid>
<pubDate>Fri, 01 Aug 2025 03:55:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[​方法 1：使用 Samba（推荐）​​Samba 是 Linux 和 Windows 之间共享文件的标准协议。1.安装 Sambasudo apt updatesudo apt install...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>​</p><h2>方法 1：使用 Samba（推荐）​​</h2><p>Samba 是 Linux 和 Windows 之间共享文件的标准协议。</p><p>1.安装 Samba</p><pre><code>sudo apt update

sudo apt install samba -y  # Ubuntu/Debian</code></pre><p>或</p><pre><code>sudo dnf install samba -y  # CentOS/RHEL/Fedora
</code></pre><p>2.配置 Samba</p><p>编辑配置文件 /etc/samba/smb.conf：</p><pre><code>sudo nano /etc/samba/smb.conf
</code></pre><p>在文件末尾添加以下内容（按需修改）：</p><pre><code>[mnt_share]
    path = /mnt
    browsable = yes
    writable = yes
    guest ok = no  # 禁止匿名访问（推荐）
    valid users = your_username  # 替换为你的 Linux 用户名
</code></pre><p>3.设置 Samba 用户密码<br>将你的 Linux 用户添加到 Samba（需输入密码）：</p><pre><code>sudo smbpasswd -a your_username
</code></pre><p>4.重启 Samba 服务</p><pre><code>sudo systemctl restart smbd
sudo systemctl enable smbd  # 开机自启
</code></pre><p>5.从 Windows 访问<br>​​方法 a​​：打开文件资源管理器，输入 \Linux_IP\mnt_share，输入用户名和密码。<br>​​方法 b​​：映射为网络驱动器（右键“此电脑” → “映射网络驱动器”）。</p><h2>​​方法 2：使用 NFS（适合局域网高速访问）​​</h2><p>NFS 适合 Linux 和 Windows 之间的高性能共享，但 Windows 需安装 NFS 客户端。</p><p>1.在 Linux 上安装 NFS 服务端</p><pre><code>sudo apt install nfs-kernel-server -y  # Ubuntu/Debian
</code></pre><p>或</p><pre><code>sudo dnf install nfs-utils -y         # CentOS/RHEL/Fedora
</code></pre><p>2.配置 NFS 共享<br>编辑 /etc/exports：</p><pre><code>sudo nano /etc/exports
</code></pre><p>添加以下内容（允许 Windows 主机访问）：</p><pre><code>/mnt 192.168.1.0/24(rw,sync,no_subtree_check)  # 替换为你的局域网网段
</code></pre><p>3.重启 NFS 服务</p><pre><code>sudo systemctl restart nfs-server
sudo exportfs -a  # 重新加载配置
</code></pre><p>4.在 Windows 上配置<br>​​启用 NFS 客户端​​：</p><p>控制面板 → 程序 → 启用或关闭 Windows 功能 → 勾选 ​​NFS 客户端​​。<br>​​挂载共享​​：</p><p>在 CMD 或 PowerShell 中运行：</p><pre><code>mount -o anon \\Linux_IP\mnt X:
</code></pre><p>（X: 是驱动器号，可选）</p><p>​​防火墙设置​​<br>如果启用了防火墙，需放行相应端口：</p><p>​​Samba​​：</p><pre><code>sudo ufw allow samba  # Ubuntu
</code></pre><h1>或</h1><pre><code>sudo firewall-cmd --add-service=samba --permanent  # CentOS/Fedora
</code></pre><p>​​NFS​​：</p><pre><code>sudo ufw allow from 192.168.1.0/24 to any port nfs  # Ubuntu
</code></pre><h1>或</h1><pre><code>sudo firewall-cmd --add-service=nfs --permanent     # CentOS/Fedora
</code></pre><p>​​注意事项​​<br>​​权限问题​​：确保 /mnt 及其子目录的权限允许访问：</p><pre><code>sudo chmod -R 755 /mnt
sudo chown -R your_username:your_group /mnt
</code></pre><p>​​安全性​​：<br>仅共享必要的目录。<br>使用强密码（Samba）或限制 IP 范围（NFS）。<br>​​性能​​：Samba 适合通用共享，NFS 适合高速局域网。<br>选择适合你的场景的方法即可！</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/396/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】 ls命令</title>
<link>https://eblog.ink/archives/394/</link>
<guid>https://eblog.ink/archives/394/</guid>
<pubDate>Thu, 13 Mar 2025 06:43:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[基本用法：    ls: 列出当前目录下的文件和子目录（不包括隐藏文件）。        ls &lt;目录&gt;: 列出指定目录下的文件和子目录。例如：ls /home/user/docum...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>基本用法：</p><pre><code class="lang-info">    ls: 列出当前目录下的文件和子目录（不包括隐藏文件）。
    
    ls &lt;目录&gt;: 列出指定目录下的文件和子目录。例如：ls /home/user/documents
    
    ls -l: 以长格式显示文件和目录的信息，包括权限、链接数、所有者、组、大小、修改日期和文件名。</code></pre><p>常用选项：</p><pre><code>-a (all): 显示所有文件和目录，包括以 . 开头的隐藏文件。

ls -a: 列出当前目录下的所有文件，包括隐藏文件。

ls -al: 以长格式显示所有文件，包括隐藏文件。

-l (long): 以长格式显示文件和目录的信息。 提供更详细的输出，包括权限、链接数、所有者、组、大小、修改日期和文件名。

-t (time): 按照修改时间的先后顺序排序，最近修改的文件排在最前面。

ls -lt: 以长格式显示文件，并按照修改时间排序。

ls -ltr: 以长格式显示文件，并按照修改时间倒序排序（最近修改的文件排在最后面）。

-r (reverse): 将排序结果反转。

ls -r: 反向列出目录内容（通常按字母顺序的反向）。

ls -tr: 按修改时间反向排序。

-h (human-readable): 以人类可读的格式显示文件大小。 ls 命令默认以字节为单位显示文件大小，使用 -h 选项后，会自动选择合适的单位 (KB, MB, GB 等)。

ls -lh: 以长格式显示文件，并以人类可读的格式显示文件大小。

-S (size): 按照文件大小排序，从大到小。

ls -lS: 以长格式显示文件，并按照文件大小排序。

-d (directory): 只列出目录本身，而不是目录中的内容。

ls -ld &lt;目录&gt;: 显示指定目录的详细信息，而不是列出目录中的文件。

-R (recursive): 递归地列出所有子目录中的内容。

ls -R: 列出当前目录及其所有子目录下的所有文件。

-i (inode): 显示文件的 inode 编号。

ls -i: 列出当前目录下的文件和他们的inode

-F (classify): 在文件名后添加一个字符来表示文件类型。

/: 表示目录。

*: 表示可执行文件。

@: 表示符号链接。

|: 表示 FIFO (命名管道)。

=: 表示 socket。
</code></pre><p>组合使用：</p><p>可以将多个选项组合使用，以满足不同的需求。 例如：</p><pre><code>ls -lath: 以长格式显示所有文件（包括隐藏文件），按照修改时间排序，并以人类可读的格式显示文件大小。

ls -lSrh: 以长格式显示文件，按照文件大小倒序排序，并以人类可读的格式显示文件大小。

ls -F: 列出当前目录下的文件，并用符号标识文件类型。
</code></pre><p>其他用法：</p><pre><code>ls --color: 使用颜色来区分不同类型的文件。 大多数系统默认启用颜色显示。

ls -1: 每行只显示一个文件名。

ls -b: 将文件名中的不可打印字符替换为转义序列。

ls --version: 显示 ls 命令的版本信息。

ls --help: 显示 ls 命令的帮助信息。
</code></pre><p>高级用法 (结合其他命令):</p><pre><code>ls | wc -l: 统计当前目录下文件和目录的数量 (不包括隐藏文件)。

ls -l | grep &quot;^-&quot; | wc -l: 统计当前目录下文件的数量 (不包括目录)。

ls -l | grep &quot;^d&quot; | wc -l: 统计当前目录下目录的数量。

find . -maxdepth 1 -type f | wc -l: 统计当前目录下文件的数量 (包括文件名包含空格的文件)。

ls -lS | head -n 10: 列出当前目录下最大的 10 个文件。

ls -lt | head -n 10: 列出当前目录下最近修改的 10 个文件。
</code></pre><p>一些技巧：</p><p>可以使用 alias 命令创建 ls 命令的别名，以便更方便地使用常用选项。 例如，alias ll='ls -l'。</p><p>可以在 shell 配置文件 (例如 .bashrc 或 .zshrc) 中设置 ls 命令的默认选项。</p><p>ls 命令非常灵活，可以根据不同的需求进行定制。 熟练掌握 ls 命令的各种选项，可以更</p><p>当前目录以M显示文件大小</p><pre><code>ls -al | awk &#039;{printf &quot;%s %s %s %s %.2f KB %s %s %s %s\n&quot;, $1,$2,$3,$4,$5/1024,$6,$7,$8,$9}&#039;
</code></pre><p>当前目录以M显示文件大小</p><pre><code>ls -al | awk &#039;{printf &quot;%s %s %s %s %.2f MB %s %s %s %s\n&quot;, $1,$2,$3,$4,$5/1048576,$6,$7,$8,$9}&#039;

</code></pre>
]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>https://eblog.ink/archives/394/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】飞牛OS，NAS 忘记用户名&amp;amp;密码</title>
<link>https://eblog.ink/archives/392/</link>
<guid>https://eblog.ink/archives/392/</guid>
<pubDate>Thu, 23 Jan 2025 01:37:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[症状：飞牛OS装好系统几天不用用户名和密码都忘记了解决方法：1.进入GRUB引导界面2.在这个界面按下字母e3.在linux 开头的后方加入一下信息  然后按下ctrl+x 格式如下图rw si...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>症状：</h2><p>飞牛OS装好系统几天不用用户名和密码都忘记了</p><p>解决方法：</p><p>1.进入GRUB引导界面</p><p><img src="https://s2.loli.net/2025/01/23/81fuveC3hwLDB5p.jpg" alt="GRUB引导界面" title="GRUB引导界面"></p><p>2.在这个界面按下字母e</p><p>3.在linux 开头的后方加入一下信息  然后按下ctrl+x 格式如下图</p><pre><code>rw single init=/bin/bash </code></pre><p><img src="https://s2.loli.net/2025/01/23/olTJd5ne2GfApkz.jpg" alt="进入单用户模式修改密码" title="进入单用户模式修改密码"></p><p>4.修改root的密码 ，输入以下命令后输入新密码和重复新密码</p><pre><code>passwd root
</code></pre><p><img src="https://s2.loli.net/2025/01/23/OpTjnqowWrxGKYi.jpg" alt="修改root密码" title="修改root密码"></p><p>5.退出单用户模式  输入以下代码，然后回车</p><pre><code> exec /sbin/init
</code></pre><p><img src="https://s2.loli.net/2025/01/23/XtkaInEYWprR7wZ.jpg" alt="退出单用户" title="退出单用户"></p><p>6.退出后输入root的密码</p><p><img src="https://s2.loli.net/2025/01/23/3Q9UIOWbmHspNRB.jpg" alt="root密码" title="root密码"></p><p>7.查看所有用户</p><pre><code>cat /etc/passwd
</code></pre><p>找到后使用<code>passwd &lt;用户名&gt;</code>  修改密码然后 <code>reboot</code>重启就可以进入了</p>
]]></content:encoded>
<slash:comments>5</slash:comments>
<comments>https://eblog.ink/archives/392/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>Windows Linux服务方式启动程序</title>
<link>https://eblog.ink/archives/391/</link>
<guid>https://eblog.ink/archives/391/</guid>
<pubDate>Fri, 22 Nov 2024 06:30:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[场景：很多时候软件需要开机自动启动，在不登录账号的时候启动Windows方法1：1.所需软件nssm.exenssm.exe install 《服务名称》 &quot;C:\Windows\Sy...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1>场景：</h1><p>很多时候软件需要开机自动启动，在不登录账号的时候启动</p><h1>Windows</h1><h2>方法1：</h2><p>1.所需软件<code>nssm.exe</code></p><pre><code>nssm.exe install 《服务名称》 &quot;C:\Windows\System32\cmd.exe&quot; &quot;/c  cd /d 《所要运行软件的目录》&quot; &amp;《软件名.exe》 --参数&quot;
</code></pre><h2>方法2：</h2><p>1.所需软件<code>WinSW-x64.exe</code></p><p>2.修改WinSW-x64.xml文件</p><pre><code>1.&lt;id&gt; 和 &lt;name&gt;
    定义了服务的唯一标识和显示名称，这些值应在系统中保持唯一。

2.&lt;description&gt;

    服务的描述，将显示在服务管理器中，帮助用户理解服务的用途。

3.&lt;executable&gt;
    指定要执行的主程序路径
    确保程序位于配置文件的相同目录，或使用绝对路径。

4.&lt;arguments&gt;
    向主程序传递的参数

5.&lt;startmode&gt;
    定义服务的启动模式：
    Automatic 表示系统启动时服务会自动启动。
</code></pre><p>3.生成服务</p><pre><code>WinSW-x64.exe install
</code></pre><h1>Openwrt</h1><p>1.以vnts为例，<code>vi /etc/init.d/vnts</code></p><p>▲</p><pre><code>#!/bin/sh /etc/rc.common
# 开头定义
START=99
STOP=10

start() {
    echo &quot;Starting vnts with parameters...&quot;
    /path/to/vnts --param1 value1 --param2 value2
}
my_pkill() {
    ps | grep &quot;$1&quot; | grep -v &quot;grep&quot; | awk &#039;{print $1}&#039; | while read -r pid; do
        kill -9 &quot;$pid&quot;
    done
}
stop() {
    echo &quot;Stopping vnts...&quot;
    my_pkill &quot;vnt-cli&quot;
}

</code></pre><p>▲</p><pre><code>#!/bin/sh /etc/rc.common
START=99

start() {
    echo &quot;Starting vnts with auto-restart loop...&quot;
    # 检查是否已有后台监控脚本运行，避免重复
    if pgrep -f &quot;sh /etc/init.d/vnt start&quot; &gt; /dev/null; then
        echo &quot;vnt monitor already running.&quot;
        return 0
    fi

    # 启动后台监控
    nohup sh -c &#039;
    while true; do
        if ! pgrep -x &quot;/root/vnt/vnt-cli&quot; &gt; /dev/null; then
            echo &quot;$(date &quot;+%Y-%m-%d %H:%M:%S&quot;) vnt not running, starting...&quot; &gt;&gt; /root/vnt/vnt.log
            nohup /path/to/vnts --param1 value1 --param2 value2 &gt;&gt; /root/vnt/vnt.log 2&gt;&amp;1 &amp;
        fi
        sleep 60
    done
    &#039; &gt;&gt; /root/vnt/vnt.log 2&gt;&amp;1 &amp;
}

my_pkill() {
    ps | grep &quot;$1&quot; | grep -v &quot;grep&quot; | awk &#039;{print $1}&#039; | while read -r pid; do
        kill -9 &quot;$pid&quot;
    done
}

stop() {
    echo &quot;Stopping vnt...&quot;
    my_pkill &quot;vnt-cli&quot;
    # 杀掉监控循环
    my_pkill &quot;sh /etc/init.d/vnt start&quot;
}
</code></pre><p>2.运行脚本并后台管理：</p><p>将脚本以服务方式启用，确保启动时进入后台运行。</p><pre><code>/etc/init.d/vnts enable
/etc/init.d/vnts start
</code></pre><p>所需文件：<a href="https://kingq.lanzouq.com/i9EFH2fuvobe">下载</a></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/391/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】Dokcer搭建Apache Guacamole堡垒机</title>
<link>https://eblog.ink/archives/389/</link>
<guid>https://eblog.ink/archives/389/</guid>
<pubDate>Thu, 31 Oct 2024 03:55:29 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[Apache Guacamole介绍Apache Guacamole（简称Guacamole）是一个开源的远程桌面网关，它提供了一种跨平台、跨协议的方式来访问远程计算机。它的主要目标是简化远程访...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>Apache Guacamole介绍</h2><p>Apache Guacamole（简称Guacamole）是一个开源的远程桌面网关，它提供了一种跨平台、跨协议的方式来访问远程计算机。它的主要目标是简化远程访问管理，允许用户通过一个单一的 Web 界面连接到远程计算机，而不必安装客户端应用程序或插件。</p><h2>Apache Guacamole 的一些关键特点和功能</h2><p>协议支持：Guacamole 支持多种远程桌面协议，包括VNC（Virtual Network Computing）、RDP（Remote Desktop Protocol）、SSH（Secure Shell）等，这意味着您可以使用单一的界面连接到不同类型的远程计算机。</p><p>Web界面：Guacamole 提供了一个直观的 Web 用户界面，允许用户通过常见的Web浏览器访问远程计算机，而无需安装任何额外的客户端软件。</p><p>多用户支持：它支持多用户管理和身份验证，允许管理员创建用户帐户，并配置不同用户的访问权限。这对于企业环境中的团队协作和远程支持非常有用。</p><p>集成性：Guacamole 可以与现有的身份验证和访问控制系统（如LDAP、Active Directory等）集成，以便更好地管理用户身份验证和访问控制。</p><p>录像和回放：它可以记录远程会话，以便管理员回顾和分析用户的活动。这在故障排除和安全审计方面非常有用。</p><p>插件架构：Guacamole 的插件架构使得用户可以根据需要扩展其功能。您可以编写自定义插件来添加新的协议支持或其他功能。</p><p>开源：Guacamole 是一个开源项目，基于Apache许可证发布，这意味着您可以免费使用、修改和分发它。</p><p>Guacamole 的主要优势在于其易用性和多协议支持，使得远程访问管理变得更加灵活和便捷。它常常被用于企业内部的IT支持、远程办公、虚拟桌面访问等应用场景，以简化远程连接和管理的任务。</p><h2>Apache Guacamole搭建</h2><p>Apache Guacamole部署方式有多种，这里是Docker的方式来进行展开的</p><ul><li>1.环境信息</li></ul><p>操作系统版本：CentOS 7.9<br>映射端口：29980（根据实际情况可以自行修改）<br>数据库：guacamole（根据实际情况可以自行修改）<br>数据库用户：guacamole（根据实际情况可以自行修改）<br>数据库密码：自行设置</p><ul><li>2.安装docker环境</li></ul><p>下载docker repo文件，安装docker-ce，启动docker服务，设置docker服务开机自启动。</p><pre><code>curl -sSL https://get.docker.com/ | sh

systemctl start docker
systemctl enable docker
</code></pre><ul><li>3.拉取guacamole和mysql镜像</li></ul><p>这里直接拉取的最新guac镜像（1.5.3），数据库版本这里使用了5.7版本。</p><pre><code>docker pull guacamole/guacamole
docker pull guacamole/guacd
docker pull mysql/mysql-server:5.7
</code></pre><ul><li>4.建立初始化脚本</li></ul><p>从容器中将初始化SQL文件导出，用于还原到guacamole库里。</p><pre><code>docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql &gt; initdb.sql
</code></pre><ul><li>5.创建mysql用户</li></ul><p>这里启动MySQL 5.7容器，并设置了超管密码。</p><pre><code>#Replace_it_with_your_password 为自定义数据库密码
docker run --name mysql --restart=always  -e MYSQL_ROOT_PASSWORD=Replace_it_with_your_password -d mysql/mysql-server:5.7
</code></pre><ul><li>6.拷贝初始sql文件到容器</li></ul><p>将4中导出的初始化SQL文件传入到MySQL容器中。</p><pre><code>docker cp initdb.sql mysql:/initdb.sql


</code></pre><ul><li>7.进入数据库还原初始化文件</li></ul><p>开始还原初始数据，并设置访问权限。</p><p>进入MySQL容器：</p><pre><code>docker exec -it mysql bash


#Replace_it_with_your_password 为自定义数据库密码
mysql -uroot -pReplace_it_with_your_password

</code></pre><p>创建一个数据库：</p><pre><code>CREATE DATABASE guacamole;
CREATE USER &#039;guacamole&#039;@&#039;%&#039; IDENTIFIED BY &#039;Replace_it_with_your_password&#039;;
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO &#039;guacamole&#039;@&#039;%&#039;;
FLUSH PRIVILEGES;


</code></pre><p>选择数据库：</p><pre><code>mysql &gt; use guacamole;

</code></pre><p>导入数据：</p><pre><code>mysql &gt; source /initdb.sql
</code></pre><ul><li>8.新建文件服务器目录</li></ul><p>日常堡垒机使用，难免会有上传下载文件的需求，这里需要提前新建一个数据目录（自定义）用于存储文件，这个是后续配置的前提条件。</p><pre><code>mkdir -p /mnt/data/guacamole/tmp/drive
chmod 777 /mnt/data/guacamole/tmp/drive
</code></pre><ul><li><p>9.启动容器</p><p>docker run --name guacd --restart=always -e 'export $LANG=en_US.UTF-8' -v /mnt/data/guacamole/tmp/drive:/mnt/data/guacamole/tmp/drive -d guacamole/guacd</p><p>#Replace_it_with_your_password 为自定义数据库密码<br> docker run --name guacamole --restart=always  --link guacd:guacd --link mysql:mysql -e MYSQL_DATABASE='guacamole' -e MYSQL_USER='guacamole' -e MYSQL_PASSWORD='Replace_it_with_your_password' -d -p 29980:8080 guacamole/guacamole</p></li><li><p>10.浏览器访问</p><p><a href="http://Replace_it_with_your_IP:29980/guacamole">http://Replace_it_with_your_IP:29980/guacamole</a></p></li><li>11.登录</li></ul><p>为了使用安全请及时修改超管密码！</p><p>默认用户名：guacadmin<br>默认密码：guacadmin</p><ul><li>12.Windows资产录入</li></ul><p>登录之后点击右上角用户名-设置，</p><p>Windows Server RDP</p><p>常用于Windows Server的 RemoteDesktop的资产录入。</p><p>名称：常常填入机器的主机名<br>位置：保持默认<br>协议：选择RDP<br>最大连接数：自定义设置<br>每个用户的最大连接数：自定义设置<br>主机名：一般填写内网地址，尽量不要填写公网地址<br>端口：Windows Server RDP一般默认为3389<br>用户名：Administrator或其他用户的名称<br>密码：对应的密码<br>安全模式：选择TLS加密<br>忽略服务器的证书：勾选</p><p>启用虚拟盘：这个地方是上传下载设置的虚拟磁盘<br>虚拟盘路径：/mnt/data/guacamole/tmp/drive/${GUAC_USERNAME} 最后追加一个占位符，保证不同用户文件内容。<br>自动建立虚拟盘：勾选</p><ul><li>13.Linux SSH</li></ul><p>名称：常常填入机器的主机名<br>位置：保持默认<br>协议：选择SSH<br>主机名：一般填写内网地址，尽量不要填写公网地址<br>端口：SSH默认一般是22<br>私钥：如果不采用密码认证，可以直接将私钥文件内容粘贴到框框</p><p>与Windows Server不同的是Linux机器的文件上传下载需要对这个地方进行设置：<br>文件浏览器根目录：/mnt/data/guacamole/tmp/drive/</p><p>原文链接：<a href="https://blog.csdn.net/qq_32014795/article/details/132876242">原文</a></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/389/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】甲骨文系统放开所有端口</title>
<link>https://eblog.ink/archives/388/</link>
<guid>https://eblog.ink/archives/388/</guid>
<pubDate>Sat, 26 Oct 2024 13:07:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[一、进入自己的实例，设置子网开放所有端口，当然也可以设置需要开放的端口二、删除、关闭、打开各自系统的无用附件、防火墙、端口及规则Ubuntu系统下：开放所有IPv4端口iptables -P I...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>一、进入自己的实例，设置子网</h2><p>开放所有端口，当然也可以设置需要开放的端口</p><h2>二、删除、关闭、打开各自系统的无用附件、防火墙、端口及规则</h2><hr><p>Ubuntu系统下：</p><p>开放所有IPv4端口</p><pre><code>iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
</code></pre><p>开放所有IPv6端口</p><pre><code>sudo ip6tables -P INPUT ACCEPT
sudo ip6tables -P FORWARD ACCEPT
sudo ip6tables -P OUTPUT ACCEPT
sudo ip6tables -F
</code></pre><p>Ubuntu镜像默认设置了Iptable规则，关闭它</p><pre><code>apt-get purge netfilter-persistent

reboot
</code></pre><p>或者强制删除</p><pre><code>rm -rf /etc/iptables &amp;&amp; reboot

</code></pre><p>&lt;!--more--&gt;</p><p>Centos系统下：</p><p>删除多余附件</p><pre><code>systemctl stop oracle-cloud-agent
systemctl disable oracle-cloud-agent
systemctl stop oracle-cloud-agent-updater
systemctl disable oracle-cloud-agent-updater
</code></pre><p>停止firewall</p><pre><code>systemctl stop firewalld.service
</code></pre><p>禁止firewall开机启动</p><pre><code>systemctl disable firewalld.service

</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/388/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Openwrt】 遇到的错误</title>
<link>https://eblog.ink/archives/372/</link>
<guid>https://eblog.ink/archives/372/</guid>
<pubDate>Wed, 17 Jul 2024 01:17:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[症状Collected errors:* pkg_get_installed_files: Failed to open //usr/lib/opkg/info/resize2fs.list: ...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>症状</p><pre><code>Collected errors:
* pkg_get_installed_files: Failed to open //usr/lib/opkg/info/resize2fs.list: No such file or directory.
* pkg_get_installed_files: Failed to open //usr/lib/opkg/info/tune2fs.list: No such file or directory.
</code></pre><p>解决：</p><pre><code>opkg install --force-overwrite resize2fs tune2fs


</code></pre><p>症状：</p><p>中文语言包丢失</p><p>解决：</p><pre><code>opkg update
opkg install luci-i18n-base-zh-cn

</code></pre><p>症状：</p><pre><code>/usr/lib/lua/luci/dispatcher.lua:1379: module &#039;luci.cbi&#039; not found:
    no field package.preload[&#039;luci.cbi&#039;]
    no file &#039;./luci/cbi.lua&#039;
    no file &#039;/usr/share/lua/luci/cbi.lua&#039;
    no file &#039;/usr/share/lua/luci/cbi/init.lua&#039;
    no file &#039;/usr/lib/lua/luci/cbi.lua&#039;
    no file &#039;/usr/lib/lua/luci/cbi/init.lua&#039;
    no file &#039;./luci/cbi.so&#039;
    no file &#039;/usr/lib/lua/luci/cbi.so&#039;
    no file &#039;/usr/lib/lua/loadall.so&#039;
    no file &#039;./luci.so&#039;
    no file &#039;/usr/lib/lua/luci.so&#039;
    no file &#039;/usr/lib/lua/loadall.so&#039;
stack traceback:
    [C]: in function &#039;require&#039;
    /usr/lib/lua/luci/dispatcher.lua:1379: in function &#039;_cbi&#039;
    /usr/lib/lua/luci/dispatcher.lua:1056: in function &#039;dispatch&#039;
    /usr/lib/lua/luci/dispatcher.lua:1032: in function &#039;dispatch&#039;
    /usr/lib/lua/luci/dispatcher.lua:483: in function &lt;/usr/lib/lua/luci/dispatcher.lua:482&gt;
</code></pre><p>解决：</p><pre><code>opkg update
opkg install luci luci-base luci-compat</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/372/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Linux】 基于Debian的系统 的Armbian Ubuntu使用pip报错</title>
<link>https://eblog.ink/archives/379/</link>
<guid>https://eblog.ink/archives/379/</guid>
<pubDate>Fri, 31 May 2024 01:29:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[问题：Python安装报错： error: externally-managed-environment，This environment is externally managed解决：这个错...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>问题：</p><pre><code>Python安装报错： error: externally-managed-environment，This environment is externally managed
</code></pre><p>解决：</p><p>这个错误信息表示当前Python环境是由系统外部管理的，通常在某些Linux发行版中（尤其是Debian和基于Debian的系统，比如<code>Ubuntu、armbian</code>），系统会强烈建议不要直接使用pip来安装包，以避免与系统包管理器（如<code>apt</code>）的潜在冲突。</p><p>根据错误信息提供的建议，你有几个选项来安装requests库：</p><h2>使用系统包管理器安装</h2><p>对于很多常见的Python库，如requests，你可以直接使用系统包管理器来安装。例如：</p><pre><code>sudo apt update
sudo apt install python3-requests
</code></pre><p>这将会从Ubuntu或Debian的官方仓库中安装requests。</p><h2>创建Python虚拟环境</h2><p>另一个推荐的解决方案是创建一个虚拟环境，在该环境中可以自由地使用pip安装任何包而不影响系统级别的Python环境。可以按照以下步骤操作：</p><p>1.安装python3-venv包，如果还没安装的话</p><pre><code>sudo apt install python3-venv
</code></pre><p>2.创建一个新的虚拟环境</p><pre><code>python3 -m venv myenv
</code></pre><p>3.激活虚拟环境</p><pre><code>source myenv/bin/activate
</code></pre><p>4.现在你可以在虚拟环境中安装requests</p><pre><code>pip install requests
</code></pre><p>当你完成了工作并想要退出虚拟环境时，只需运行 deactivate 命令。</p><h2>使用pipx安装应用程序</h2><p>如果你想安装一个命令行工具或应用程序，并且希望它全局可用，但又不想干扰到系统的Python环境，你可以使用pipx。首先需要安装pipx：</p><pre><code>sudo apt install pipx
pipx ensurepath
</code></pre><p>然后使用pipx来安装你的应用程序：</p><pre><code>pipx install requests
</code></pre><h2>(粗暴) 去掉这个提示</h2><p>强制删除此警告，回归到熟悉的操作。</p><p>将 “x” 替换为实际版本。<br>sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/379/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
<item>
<title>【Openwrt】开启ipv6访问</title>
<link>https://eblog.ink/archives/374/</link>
<guid>https://eblog.ink/archives/374/</guid>
<pubDate>Thu, 18 Jan 2024 02:36:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[（一）确定宽带是否有ipv6地址，并且在istore上开启ipv6地址分配1.确认是否开通了ipv6最简单的办法，ping一下240c::6666，通了就是有ipv6地址2.在istore上配置...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>（一）确定宽带是否有ipv6地址，并且在istore上开启ipv6地址分配</h2><p>1.确认是否开通了ipv6<br>最简单的办法，ping一下<code>240c::6666</code>，通了就是有ipv6地址</p><p>2.在istore上配置ipv6</p><p>①设置wan口</p><p>依次点击：<code>网络</code>→<code>接口</code>→<code>wan接口</code>→<code>编辑</code>→<code>高级设置</code></p><p>获取 IPv6地址设置为<code>自动</code>；IPv6分配长度设置为<code>已禁用</code></p><p>②lan口设置</p><p>依次点击：<code>网络</code>→<code>接口</code>→<code>lan接口</code>→<code>编辑</code>→<code>高级设置</code></p><p>IPv6分配长度：选择<code>64</code></p><p>接着选择：<code>DHCP服务器</code>→<code>IPv6设置</code></p><p>RA服务：选择<code>服务器模式</code></p><p>DHCPv6服务：设置为<code>服务器模式</code></p><p>NDP代理：设置为<code>已禁用</code></p><p>IPv6 RA设置如下</p><p><img src="https://s2.loli.net/2024/01/18/U7fzrEAIDhamLvS.jpg" alt="请输入图片描述" title="请输入图片描述"></p><p>3.测试及意外的解决方式</p><p>到这里为止，istore应该就成功开启ipv6dhcp了，在家庭网络中支持ipv6的设备上访问这个网址：<a href="https://ipw.cn/"><a href="https://ipw.cn/">https://ipw.cn/</a></a> </p><p>出现ipv6地址，就是成功了</p><p>如果不出现ipv6地址，试试以下两个方法：</p><p>第一：手动设置设备的 IPv6 DNS服务器地址为：<code>2400:3200::1</code>  <code>2400:3200:baba::1</code></p><p>手机上也可以设置为<code>223.5.5.5</code>，这是个双栈地址，v4和v6都可以解析</p><p>第二：istore→<code>网络</code>→<code>全局网络选项</code></p><pre><code>清空 IPv6 ULA 前缀

</code></pre><h2>（二）配置DDNS</h2><p>1.注册云解析服务器</p><p>打开<a href="https://dynv6.com/"><a href="https://dynv6.com/">https://dynv6.com/</a></a>，自己注册一个账号。注意这个账号要到你的注册邮箱去认证的，认证过程中可能要自己解决网络问题。</p><p>I.注册成功之后，点击<code>My Zones</code>，创建一个新地址</p><p>II.完成后在instructions中获取<code>token</code></p><p>III.配置DDNS</p><p>回到istore界面，在  服务  中找到动态DNS，选择  添加新服务…</p><p>填好后保存并运行，就可以了，记得要启动DDNS</p><p>过一会儿（最迟10分钟），去dynv6.com的Records看一下，能看到这个域名对应的ipv6地址，就是DDNS解析成功了</p><h2>（三）Soca设置端口转发</h2><p>1.在istore商店里下载<code>Socat</code></p><p>打开Socat，勾选 <code>启用</code></p><p>新建端口转发:<code>新增</code>--<code>启用</code>--协议<code>端口转发</code>--<code>IPv6</code> --<code>TCP</code></p><p>这里先解释一下监听窗口和目标端口</p><p><code>监听端口</code>，是<code>外网端口</code></p><p>目标协议选择IPv4 IPv6都可以，建议IPv4方便</p><p><code>目标端口</code>，是<code>内网端口</code></p><p>这个是固定的，一般情况下ipv4地址不显示的默认是80。显示啥就是啥，如群辉就是5000，jellyfin是8090。</p><h2>（四） lucky端口转发</h2><p>1.添加转发规则</p><p>2.<code>名称随意</code>--选择<code>tcp6 udp6</code> --<code>监听端口</code>就是外网端口--目标地址 可以直接填写<code>IPv4</code>地址--<code>目标端口</code>就是内网端口</p><p>3.防火墙<code>自动放行</code>打开</p><p>4.如果添加后不能访问需要手动添加自定义规则 比如放行端口为<code>8000</code> 则需要添加 <code>ip6tables -A INPUT -p tcp --dport 8000 j ACCEPT</code></p><p>原文：<a href="https://post.smzdm.com/p/allzz07g/">链接</a>修改</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/374/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/category/Linux%E7%9B%B8%E5%85%B3/</wfw:commentRss>
</item>
</channel>
</rss>