<?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 - eric</title>
<link>https://eblog.ink/author/1/</link>
<atom:link href="https://eblog.ink/feed/author/1/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description>eric</description>
<lastBuildDate>Tue, 03 Mar 2026 06:20:00 +0000</lastBuildDate>
<pubDate>Tue, 03 Mar 2026 06:20:00 +0000</pubDate>
<item>
<title>【网站】Docker配置CLIProxyAPI Plus </title>
<link>https://eblog.ink/archives/402/</link>
<guid>https://eblog.ink/archives/402/</guid>
<pubDate>Tue, 03 Mar 2026 06:20:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[Github地址为 https://github.com/router-for-me/CLIProxyAPI2. 搭建选择一个目录，本文中使用的是/data/CLIProxyAPI运行 mkdi...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>Github地址为 <a href="https://github.com/router-for-me/CLIProxyAPI"><a href="https://github.com/router-for-me/CLIProxyAPI">https://github.com/router-for-me/CLIProxyAPI</a></a></p><h2><strong>2. 搭建</strong></h2><p>选择一个目录，本文中使用的是/data/CLIProxyAPI</p><p>运行 <code>mkdir -p /data/CLIProxyAPI &amp;&amp; touch /data/CLIProxyAPI/config.yaml</code> ，创建项目配置文件</p><p>复制以下项目配置，将 secret-key 修改为你的密码</p><pre><code># Server host/interface to bind to. Default is empty (&quot;&quot;) to bind all interfaces (IPv4 + IPv6).
# Use &quot;127.0.0.1&quot; or &quot;localhost&quot; to restrict access to local machine only.
host: &quot;&quot;
# Server port
port: 8317
# TLS settings for HTTPS. When enabled, the server listens with the provided certificate and key.
tls:
  enable: false
  cert: &quot;&quot;
  key: &quot;&quot;
# Management API settings
remote-management:
# Whether to allow remote (non-localhost) management access.
# When false, only localhost can access management endpoints (a key is still required).
  allow-remote: true
# Management key. If a plaintext value is provided here, it will be hashed on startup.
# All management requests (even from localhost) require this key.
# Leave empty to disable the Management API entirely (404 for all /v0/management routes).
  secret-key: &quot;登陆密码&quot;
# Disable the bundled management control panel asset download and HTTP route when true.
  disable-control-panel: false
# GitHub repository for the management control panel. Accepts a repository URL or releases API URL.
  panel-github-repository: &quot;https://github.com/router-for-me/Cli-Proxy-API-Management-Center&quot;
# Authentication directory (supports ~ for home directory)
auth-dir: &quot;~/.cli-proxy-api&quot;
</code></pre><p>粘贴到刚刚新建的 <code>config.yaml</code> 里 <code>vi /data/CLIProxyAPI/config.yaml</code></p><p>然后运行 <code>mkdir -p /data/CLIProxyAPI &amp;&amp; touch /data/CLIProxyAPI/compose.yaml</code> ，创建<code>docker compose</code>文件</p><p>复制以下<code>docker compose</code> 配置 ,粘贴到刚刚新建的 <code>compose.yaml</code> 里 <code>vi /data/CLIProxyAPI/compose.yaml</code></p><pre><code>services:
  cli-proxy-api:
    image: eceasy/cli-proxy-api:latest
    container_name: cli-proxy-api
    ports:
      - &quot;8317:8317&quot;
    volumes:
      - ./config.yaml:/CLIProxyAPI/config.yaml
      - ./auths:/root/.cli-proxy-api
    restart: unless-stopped
</code></pre><p>注意：前面个端口可以改为公网端口</p><p>运行如下命令 <code>cd /data/CLIProxyAPI &amp;&amp; docker compose up -d</code> ，创建容器</p><h2><strong>3. 配置</strong></h2><p>接下来访问 服务器IP:8317/management.html ，进入后台管理页（如果你修改了端口则替换为你的端口），输入你在前面配置的密码（secret-key），登录</p><p>点击 OAuth 登录、认证文件管理 认证对应的账号就行</p><p>接下来添加 API 密钥，点击配置面板，下拉到认证配置处，点击添加 API 密钥 ，可自定义或随机生成一个 API 密钥，点击添加，可以看到我们刚刚添加的 API 密钥，点击下方的对号，保存更改</p><h2><strong>4. 使用</strong></h2><p>到此已经完成，可以使用该密钥了，BaseURL 即为你的服务器IP:项目端口，本项目能提供标准的OpenAI API和Claude API</p><p>一般是：<code>http://localhost:8317/v1</code><br>API:上面生成的API就可以使用了</p><h2><strong>5. 更新</strong></h2><p>cd /data/CLIProxyAPI && docker compose pull && docker compose up -d</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/402/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>【网站】 使用cloudflare workers反代 pages</title>
<link>https://eblog.ink/archives/401/</link>
<guid>https://eblog.ink/archives/401/</guid>
<pubDate>Tue, 03 Mar 2026 02:57:57 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[代码：addEventListener(&#039;fetch&#039;, event =&gt; {  event.respondWith(handleRequest(event.reque...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>代码：</p><pre><code>addEventListener(&#039;fetch&#039;, event =&gt; {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // ✅ 使用你的Pages默认地址
  const targetBase = &#039;https://your.pages.dev&#039;

  if (request.headers.get(&#039;Upgrade&#039;) === &#039;websocket&#039;) {
    return fetch(request)
  }

  const url = new URL(request.url)
  const newUrl = new URL(url.pathname + url.search, targetBase)
  
  const newHeaders = new Headers(request.headers)
  newHeaders.set(&#039;Host&#039;, newUrl.hostname)
  
  const newRequest = new Request(newUrl, {
    method: request.method,
    headers: newHeaders,
    body: request.body,
    redirect: &#039;manual&#039;
  })

  const response = await fetch(newRequest)
  
  if ([301, 302, 303, 307, 308].includes(response.status)) {
    const location = response.headers.get(&#039;Location&#039;)
    if (location &amp;&amp; location.includes(targetBase)) {
      return Response.redirect(
        location.replace(targetBase, `https://${url.hostname}`),
        response.status
      )
    }
  }
  
  return response
}</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/401/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>【网站】记录利用cloudflare加速</title>
<link>https://eblog.ink/archives/399/</link>
<guid>https://eblog.ink/archives/399/</guid>
<pubDate>Thu, 15 Jan 2026 02:19:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[准备两个域名：1.主1.com  备2.com 2.备解析一个子域名到网站IP 并开启小黄云 例如：orange.2.com3.备解析一个子域名到优选域名 （CNAME）,例如解析CNAME,c...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>准备两个域名：</p><p>1.主<code>1.com</code>  备<code>2.com</code> </p><p>2.备解析一个子域名到网站IP 并开启小黄云 例如：<code>orange.2.com</code></p><p>3.备解析一个子域名到优选域名 （CNAME）,例如解析<code>CNAME</code>,<code>cdn.2.com</code>,到<code>115155.xyz</code></p><p>4.备的SSL/TLS设置-自定义主机名-添加回退源为开启小黄云的<code>orange.2.com</code>（步骤需要添加信用卡）</p><p>5.还是步骤4这个位置 添加自定义主机名 填写<code>1.com</code>就是需要加速的域名（进入只需要填写域名其它都默认）然后验证TXT</p><p>6.进入<code>1.com</code> 使用CNAME到 上面的<code>cdn.2.com</code>就可以了</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/399/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/author/1/</wfw:commentRss>
</item>
<item>
<title>【Windows】获取OEM Windows密钥</title>
<link>https://eblog.ink/archives/398/</link>
<guid>https://eblog.ink/archives/398/</guid>
<pubDate>Fri, 08 Aug 2025 01:47:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[获取 ​​OEM 密钥​​，取决于以下几个关键因素：​​1. 密钥存储位置​​OEM 密钥通常存储在以下位置之一：​​BIOS/UEFI 固件（ACPI MSDM 表）​​（大多数现代电脑）​​...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>获取 ​​OEM 密钥​​，取决于以下几个关键因素：</p><p><strong>​​1. 密钥存储位置​​</strong><br>OEM 密钥通常存储在以下位置之一：</p><p>​​BIOS/UEFI 固件（ACPI MSDM 表）​​（大多数现代电脑）<br>​​注册表​​（HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform）<br>​​OEM 证书和 SLIC 表​​（部分旧电脑）<br>如果 ​​重装系统时没有更换主板​​，密钥通常仍保留在 ​​BIOS/UEFI​​ 中，可以提取。</p><p><strong>​​2. 在 PE 环境下获取 OEM 密钥的方法​​</strong><br>​​✅ 方法1：使用 wmic或 PowerShell（适用于 BIOS 存储的密钥）​​</p><pre><code>wmic path softwarelicensingservice get OA3xOriginalProductKey
</code></pre><p>或</p><pre><code>(Get-WmiObject -query &quot;select * from SoftwareLicensingService&quot;).OA3xOriginalProductKey
</code></pre><p>​​如果返回空值​​，说明密钥可能不在 WMI 中，需要尝试其他方法。</p><p>​​✅ 方法2：使用 RWEverything读取 BIOS MSDM 表（最可靠）​​</p><p>​​下载 <a href="https://rweverything.com/">RWEverything</a>​​（官网）<br>在 PE 中运行 RW.exe<br>进入 ​​ACPI Tables​​ → 查找 ​​MSDM​​ 表<br>在 ​​Data​​ 部分找到 ​​OEM 密钥​​</p><p>​​✅ 方法3：使用 ProduKey（适用于注册表残留）​​</p><p>​​下载 <a href="https://www.nirsoft.net/utils/product_cd_key_viewer.html">ProduKey​​</a>（NirSoft）<br>在 PE 中运行，选择 ​​"<code>Load product keys from external Windows installation</code>"​​<br>指向原系统的 Windows目录（如 C:\Windows）<br>查看 ​​OEM 密钥​​（如果注册表未被覆盖）</p><p>​​✅ 方法4：使用 regedit手动查找（适用于部分 OEM 系统）​​</p><p>在 PE 中加载原系统的注册表：</p><pre><code>reg load HKLM\OLD_SYSTEM C:\Windows\System32\config\SOFTWARE
</code></pre><p>查找：</p><pre><code>reg query HKLM\OLD_SYSTEM\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform /v BackupProductKeyDefault
</code></pre><p>（适用于部分 Windows 8/10 OEM 系统）</p><p>​​3. 如果仍然无法获取​​</p><p>​​密钥可能已被替换​​（如使用 KMS 或数字激活）<br>​​BIOS 可能不存储 MSDM 表​​（部分品牌机）<br>​​OEM 密钥可能绑定到微软账户​​（部分 Win10/Win11 设备）<br>​​最终解决方案​​：</p><p>​​联系电脑厂商​​（提供 SN 或服务标签，可获取 OEM 密钥）<br>​​使用主板 SN 查询​​（部分品牌如 Dell、HP 支持）<br>如果 ​​BIOS 里有 MSDM 表​​，​​RWEverything 是最佳选择​​；否则，尝试其他方法或联系厂商。</p>
]]></content:encoded>
<slash:comments>1</slash:comments>
<comments>https://eblog.ink/archives/398/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/author/1/</wfw:commentRss>
</item>
<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/author/1/</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/author/1/</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/author/1/</wfw:commentRss>
</item>
<item>
<title>【路由器】CR8809 开启SSH/Telnet</title>
<link>https://eblog.ink/archives/393/</link>
<guid>https://eblog.ink/archives/393/</guid>
<pubDate>Fri, 07 Mar 2025 03:25:00 +0000</pubDate>
<dc:creator>eric</dc:creator>
<description><![CDATA[适用：CR8809 电信版 (CR8806, CR8808 等不确定能不能用，但理论上固件是通刷的，所以各位可以试试？)首先准备如下：1.MIWIFIRepairTool (就是官方的那个刷机工...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>适用：CR8809 电信版 (CR8806, CR8808 等不确定能不能用，但理论上固件是通刷的，所以各位可以试试？)</p><p>首先准备如下：</p><p>1.<a href="https://bigota.miwifi.com/xiaoqiang/tools/MIWIFIRepairTool.x86.zip">MIWIFIRepairTool</a> (就是官方的那个刷机工具)<br>2.一份和你当前型号匹配的原版固件的备份（以供恢复）<br>3.一份 6.2.147 版本的 CR8808 固件（可能也有别的版本有这个能开启 Telnet 的后门，我不确定，总之我确定这个版本是可以的）<br>4.用来连接 Telnet/SSH 的软件，Windows 自带的那个或者 PuTTY 什么的都可以<br>5.一台电脑（当然）</p><p>然后开始。</p><p>1.首先在电脑上打开 MIWIFIRepairTool：</p><p>2.选择8808的固件按提示刷固件</p><p>3.蓝灯刷机成功之后，拔掉电源线重新插上，等待路由器开机。<br>路由器开机之后进入其后台 (可能IP会变，变了的话看 ipconfig 咯)，密码应该依然是背面印的默认密码。进入后台之后网址会有一段 stok，复制下来。</p><p>4.然后就是重点，访问 http://(路由器IP)/cgi-bin/luci/;stok=(你刚复制的stok)/api/misystem/set_telnet?enable=1 这个地址，就会开启 Telnet 了。<br>然后，打开你的 Telnet 工具连进路由器，用户名 root，密码就是机身背面贴的管理密码 (或者访问 /api/xqsystem/bdata 找 mgtpsd 字段) 。</p><p>看到 ARE U OK 之后进入下一步。</p><p>5.接下来我们固化这个 SSH。执行这个命令，打开调试模式来解除 bdata 的写保护：</p><pre><code>zz=$(dd if=/dev/zero bs=1 count=2 2&gt;/dev/null) ; printf &#039;\xA5\x5A%c%c&#039; $zz $zz | mtd write - crash
</code></pre><p>执行完用 reboot 命令重启路由器。重启之后如果 Telnet 关上了（但调试模式应该不会？不确定）那么再走一遍上面的步骤就可以。</p><p>路由器重新开机后再 Telnet 上，继续依次执行：</p><pre><code>bdata set ssh_en=1
bdata set telnet_en=1
bdata set uart_en=1
bdata set boot_wait=on
bdata commit
</code></pre><p>完成后 reboot 重启。</p><p>重启后再一次连上，用 bdata show 命令确定一下我们刚刚加上去的参数真的写上去了之后，执行</p><pre><code>mtd erase crash
</code></pre><p>清除掉 crash 来关掉调试模式。然后重启。不放心的话，重启完可以再确认一下参数在不在。</p><p>这样我们应该就已经把开启 telnet 的标志写入了 bdata。</p><p>6.刷回 CR8809 的固件<br>还是按上面的老规矩，进刷机模式，用官方刷机工具刷回 CR8809 的固件。bdata 理论上不会受到影响，所以刷回去之后 Telnet 应该也会是开启状态。</p><p>7.开启SSH</p><pre><code>nvram set ssh_en=1
nvram set telnet_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit
sed -i &#039;s/channel=.*/channel=&quot;debug&quot;/g&#039; /etc/init.d/dropbear
/etc/init.d/dropbear restart
mkdir /data/auto_ssh
cd /data/auto_ssh
curl -O https://fastly.jsdelivr.net/gh/lemoeo/AX6S@main/auto_ssh.sh
chmod +x auto_ssh.sh
uci set firewall.auto_ssh=include
uci set firewall.auto_ssh.type=&#039;script&#039;
uci set firewall.auto_ssh.path=&#039;/data/auto_ssh/auto_ssh.sh&#039;
uci set firewall.auto_ssh.enabled=&#039;1&#039;
uci commit firewall
uci set system.@system[0].timezone=&#039;CST-8&#039;
uci set system.@system[0].webtimezone=&#039;CST-8&#039;
uci set system.@system[0].timezoneindex=&#039;2.84&#039;
uci commit
</code></pre><p>所需附件<br><a href="https://kingq.lanzouq.com/iFTy72puhwli">固件</a><br><a href="https://kingq.lanzouq.com/isKYG2pugnah">Putty</a></p><p>原文：<a href="https://www.right.com.cn/forum/thread-8364521-1-1.html">原文</a><a href="https://www.right.com.cn/forum/thread-8302422-1-1.html">原文2</a><a href="https://www.right.com.cn/forum/thread-8280962-1-1.html">原文3</a></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://eblog.ink/archives/393/#comments</comments>
<wfw:commentRss>https://eblog.ink/feed/author/1/</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/author/1/</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/author/1/</wfw:commentRss>
</item>
</channel>
</rss>