AweiP Cache - 技术
type: channel
link: https://aweip.com/index.php/category/%E6%8A%80%E6%9C%AF/
items: OpenWrt路由下配置AP模式
items: Windows文件名过长带来的奇妙BUG
items: LINUX学习笔记——Shell scripts
items: LINUX学习笔记——Shell与正则表达式
items: 太弱小了，没有力量！
items: A NEW START

OpenWrt路由下配置AP模式
type: item
date: 2024-09-04T11:23:00+08:00
description: 由于在当前的网络环境下部署了软路由+NAS，由软路由延申到我房间的硬路由在DHCP模式下的网络多了一层NAT，无法向上一层访问，但刷了OpenWrt的硬路由没有常见商用路由器的AP模式切换，让路由器将仅作为无线信号扩展设备。只能逐一对LAN口和WAN口以及防火墙进行设定，下文记录一下操作和背后的原理。 1. 关闭 DHCP 服务 进入 Network → Interfaces。 编辑 LAN 接口，在 DHCP Server 选项卡下，勾选 Ignore interface。 保存并应用。 既然只作为 AP 使用了，自然不需要 DHCP 为局域网内的设备自动分配 IP 地址了 2. 设置 LAN 口 IP（避免冲突） 仍在 LAN 接口的 General Settings 选项卡下： 协议切换为静态地址，把 IPv4 地址改为与上级主路由同一网段且不冲突的 IP。 例如：主路由 IP 是 192.168.2.1，此处可设置为 192.168.2.20。 子网掩码与主路由一致（通常 255.255.255.0）。 网关填写主路由 IP（如 192.168.2.1）。 DNS 服务器可填写主路由 IP 或公共 DNS（如 8.8.8.8）。 保存并应用。 此 IP 地址的存在意义： 提供接口地址管理硬路由本身； 和上级软路由网络层通信。 个人曾经的误区：把 AP 模式和交换机模式混为一谈 3. 关闭防火墙并桥接接口 进入 Network → Firewall。 删除所有防火墙规则，或直接关闭防火墙： 在 General Settings 选项卡，将 Forward、Input、Output 全部设为 ACCEPT。 或直接删除所有防火墙区域（确保不阻断流量）。 4. WAN 和 WAN6 处理 方案一 如果固件里有 switch （交换机）的设置项，可以很方便的通过以下办法来实现将 OpenWrt 设置为交换机 / AP 模式，可以充分利用物理 WAN 口充当 LAN 口来用。 进入 Network → Switch； 将 VLAN ID 1 中的 WAN 口设置为未标记； 删除 Interfaces 中的 WAN 口（包括 WAN6）。 方案二 如果固件里没有 switch （交换机）的设置项，可以进行以下设置，但此设置会浪费一个 WAN 口。 删除 Interfaces 中的 WAN 口（包括 WAN6）； 将连接主路由的网线连接到WAN口。

Windows文件名过长带来的奇妙BUG
type: item
date: 2024-06-01T17:11:00+08:00
description: 起因 当我在网页版Jellyfin直接播放视频时，虽然内网能够满足数千兆每秒的网速，这些视频仍然经常卡顿（后面分析是网页播放是直接用NAS的核显解码，但它性能捉急），我就选择直接下载到本地。 由于Jellyfin的限制，下载到本地的文件中文名称是经过URL编码后的，比如其中一个文件为“%E8%83%86%E5%A4%A7%E5%85%9A+S01E07.mkv”，看起来是16进制的Unicode编码。 问题 后续在我清理磁盘时，我发现Windows在图形界面上直接删除此类文件时会异常卡死，而换使用终端命令删除时居然无法定位到这份文件，它就像一个黑户一样钉在了磁盘上，Windows的文件系统拿它丝毫没有办法。这就很奇妙了，之前从未遇到过这种情况。 解决 经过一系列查询检索，最终定位到Windows的一个奇妙特性： Windows系统默认的最大路径长度为260个字符（包括盘符、文件夹名、文件名及分隔符\）。如果文件或文件夹的完整路径超过此限制，系统工具（如资源管理器）可能无法正常操作。 一时间确实有点难绷，这种古老的问题能存续到现在也是神奇。最后索性启动Manjaro Linux，干净利落删除了这个文件。 后面和朋友讨论时，他提出了个更简单的操作方法：使用WSL的终端操作磁盘上的文件。确实可行，连重启切系统的功夫都不用了。

LINUX学习笔记——Shell scripts
type: item
date: 2022-07-24T00:23:00+08:00
description: TNND，终于到这里了 Hello World 什么经典开局 程序样例 [aweip@manjaro ~]$ mkdir bin; cd bin [aweip@manjaro ~]$ vim hello.sh #!/bin/bash # Program: # To shows "Hello World!" # History: # 2022/07/24 AweiP First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e "Hello World! \a \n" exit 0 第一行 #!/bin/bash 在宣告这个 script 使用的 shell 名称 程序内容的说明： 除了第一行的『 #! 』是用来宣告 shell 的之外，其他的 # 都是『批注』用途 ，第二行以下就是用来说明整个程序的基本数据。 主要环境变量的宣告 ： 务必要将一些重要的环境变量设定好 主要程序部分 ：这个例子当中，就是 echo 那一行 执行成果告知 (定义回传值) ：利用 exit 这个指令来让程序中断，并且回传一个数值给系统 执行结果 [aweip@manjaro ~]$ sh hello.sh Hello World ! 简单加减乘除求余(即+-*/%) [aweip@manjaro ~]$ vim multiplying.sh #!/bin/bash # Program: # Inputs 2 integer numbers; program will cross these two numbers. # History: # 2022/07/24 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e "Input 2 numbers\n" read -p "first: " firstnu read -p "second: " secnu total=$((${firstnu}*${secnu})) echo -e "\nThe result of ${firstnu} x ${secnu} is ==> ${total}" script 的执行方式差异 (source, sh script, ./script) 直接执行的方式来执行 script sh test.sh 使用这种执行方式时， script 是在子程序的 bash 内执行 ，当test.sh 执行完毕后， 子程序 bash 内的所有数据便被移除 （变量作用域仅在fork出的子程序中） 利用 source 来执行脚本：在父程序中执行 source test.sh 善用判断式 利用 test 指令的测试功能 例子：test -e /dmtsai && echo "exist" || echo "Not exist" 关于某个档名的『文件类型』判断 测试的标志 代表意义 -e 该『档名』是否存在？ (常用) -f 该『档名』是否存在且为文件(file)？ (常用) -d 该『文件名』是否存在且为目录(directory)？ (常用) 关于文件的权限侦测，如 test -r filename 表示可读否 (但 root 权限常有例外) 测试的标志 代表意义 -r 侦测该档名是否存在且具有『可读』的权限？ -w 侦测该档名是否存在且具有『可写』的权限？ -x 侦测该档名是否存在且具有『可执行』的权限？ -u 侦测该文件名是否存在且具有『SUID』的属性？ -g 侦测该文件名是否存在且具有『SGID』的属性？ -s 侦测该档名是否存在且为『非空白文件 ​ ....... 利用判断符号 [ ]

LINUX学习笔记——Shell与正则表达式
type: item
date: 2022-07-21T17:39:00+08:00
description: Shell 变量的使用与设置 读取变量内容: echo $变量 或 echo ${变量} 设置规则: 变量与内容直接用=连接，两边不留空格; 双引号内特殊字符保留功能; 单引号内为一般字符; [\]转义符+特殊符号(空格,$等)将其变为一般字符; unset+变量名 取消变量设置; export 变量将变量变为环境变量以在子进程运行。 例:实现快速ssh连接服务器 Tencent = "root@42.142.130.**" ssh $Tencent 环境变量的功能 env命令查看默认环境变量与常见环境变量说明; set命令查看所有环境变量: $: 本次shell的pid -> echo $$ ; ?: 上次命令返回值。 locate命令查看语系; read, arry, declare: read [-p] var [-t],使用-p后添加输入提示,-t后添加秒数; declare[-aixr] var,声明变量,aixr对应数组-整型-环境变量-const只读; var[num]="content",数组名+[数字]获得一维数组。 变量内容的删除、取代与替换 (Optional) ${variable#/*local/bin:}: #代表『从变量内容的最前面开始向右删除』，且仅删除最短的那个; echo ${path##/*:}:##变成『从前面删除掉最长的那个数据』; echo ${path%:*bin}: % 符号代表由『最后面开始向前删除』; echo ${path%%:*bin}: %% 代表的则是『从后删除最长的符合字符串』。 命令别名与历史命令 命令别名设定: alias, unalias: alias lm='ls -al | more' 历史命令: history 列出目前内存内的所有 history 记忆 history 列出目前最近的 3 笔资料 history 3 立刻将目前的资料写入 histfile 当中 history -w Bash Shell 的操作环境 bash 的进站与欢迎讯息: /etc/issue, /etc/motd /etc/issue: cat查阅,根据issue内的各代码意义可更改开屏显示的系统信息(Manjaro Linux实操发现为只读文件,chmod修改权限后改动); /etc/motd: 自定义主机启动后显示的讯息。 bash 的环境配置文件 login shell:取得 bash 时需要完整的登入流程的，就称为 login shell。举例来说，要由 tty1 ~ tty6 登入，需要输入用户的账号与密码，此时取得的 bash 就称为『 login shell 』; non-login shell: 取得 bash 接口的方法不需要重复登入的举动，举例来说 以 X window 登入 Linux 后，再以 X 的图形化接口启动终端机，此时那个终端接口并没有需要再次的输入账号与密码，那个 bash 的环境就称为 non-login shell 了. 在原本的 bash 环境下再次下达 bash 这个指令，同样的也没有输入账号密码， 那第二个 bash (子程序) 也是 non-login shell. /etc/profile (login shell 才会读) ~/.bash_profile (login shell 才会读) ...... 终端机的环境设定: stty, set stty [-a] 列出所有的按键与按键内容 (出现 ^ 表示 [Ctrl] 按键); 通配符与特殊符号*, ?, [] 等等,『档名』尽量不要使用到这些字符。 符号 意义 * 代表『 0 个到无穷多个』任意字符 ? 代表『一定有一个』任意字符 [ ] 同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符， 可能是 a, b, c, d 这四个任何一个』 [ - ] 若有减号在中括号内时，代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字， 因为数字的语系编码是连续的！ 数据流重导向 概念: 指令可能会由文件读入资料，经过处理之后，再将数据输出到屏幕上,可能分为standard output 与 standard error output ,二者分别代表『标准输出 (STDOUT)』与『标准错误输出 (STDERR)』; 例子: 系统默认有 /etc/crontab 但却无/etc/vbirdsay， 此时若下达『 cat /etc/crontab /etc/vbirdsay 』这个指令时， cat 会进行: 标准输出:『指令执行所回传的正确的讯息』,读取 /etc/crontab 后，将该文件内容显示到屏幕上; 标准…

太弱小了，没有力量！
type: item
date: 2022-07-19T23:46:00+08:00
description: 总结一下这十天我干了个啥 C++与OOP基础->参考书籍：《C++ Primer Plus》，练手项目：基于多态实现的公司管理系统（小白白白白难度）； Linux学习->参考书籍：《鸟哥的LINUX私房菜》，练手项目：阅读linux0.11源码; 感想：啊啊啊啊心态实在太摆了，感觉这些天很多只是应付式地学习，相比于期末那效率实在不太够看，但两本厚书也是囫囵吞枣地看着。 后续安排 Unix网络编程； Leetcode； Qt(如果有可能的话);

A NEW START
type: item
date: 2022-07-02T14:59:00+08:00
description: 契机 说来，其实这并不算是我的第一个博客 不久前在腾讯云白嫖过一个三十天试用的轻量应用云服务器，根据B站UP CodeSheep 的一个视频简易地建立了一个博客，然后就......过期寄掉了。 为什么想要搞这个呢，其实是这学期的专业核心课，让我重拾了对于整活的热情，主要是归咎于这学期我的生活习惯和态度开始有了很大的改变，很感谢这半年遇到的令我开心的人和事——谢GG，嘉烽，书记，XMGG，寄寄......还有我们之间的那些回忆。这一切的一切让走在过去步履沉重的我，慢慢地踏出了那些曾在心头缠绕的阴霾。量变引起质变，时隔多年，我再一次感受到了头脑中的那种明朗与舒畅，因为我似乎有了自己的清晰目标和规划（虽然未来还是不明朗就是了）。生活美好而有限，我们应当好好对待。 搭建过程 写在开始 在书记的影响下，我在搭建博客时选择了采用Typecho博客系统，顺手找了个看着顺眼且免费的主题 Viosey，handsome主题虽然好看，但钱包羞涩还是选择了放弃。说实话，在宝塔面板的搭建的过程十分简易，但为了水一篇文章，还是写写来加深一下印象。 前期准备 服务器：腾讯云轻量应用服务器2核4G6M 系统：Debian 11.1 64bit 图床：七牛云对象储存服务 SSH工具：MobaXterm 22.0 安装宝塔面板 1.打开腾讯云控制台，为宝塔面板开放8888端口； 2.打开MobaXterm的ssh界面，Debian 11下一行指令即可安装: ​wget -O install.sh http:``//download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh 等待安装成功后会出现宝塔后台登陆地址，账号，密码。打开网址，输入提供的信息以登录； 3.配置选择 在此我选择了LNMP配置（ Ngnix 1.18 + MySQL 5.7 + Pure-Ftpd 1.0.49 + PHP 7.4 + phpMyAdmin 4.0 ），我择安装后等待，后输入ip地址:80，打开网页看见Ngnix欢迎界面确认安装成功，PHP安装也可以通过在/www/wwwroot/www.域名.com/ 文件夹内建立test.php测试是否成功。 4.具体设置 打开宝塔面板面板设置，根据所需进行设置，在网站界面添加站点，按实际情况添加域名，设置数据库。 安装Typecho 本地下载Typecho文件压缩包，解压到本地； 通过FTP上传至建立的/www/wwwroot/www.域名.com/ 文件夹内； 输入ip地址:80，进入Typecho安装界面，按提示完成安装。 在这一步我遇到了安装报错，情形如下： 解决方式：在/usr目录下创建uploads 文件夹，权限设置为755 安装主题 选择一个自己喜欢的主题，本地解压（上传再解压也行），将主题文件夹放置在网站目录的usr/themes/目录下 尾声 第一篇博客水完啦，如题而言，本学期后半段是我这个阶段新的起点。希望在日后，跑步锻炼，学习Linux，C++，数据结构与算法，CSS+HTML5，一切都能按计划顺利推行下去。