幸福飞过海 - Unix
https://fengqi.me/category/unix/
linux, unix相关的内容, 主要是freebsd, centos, ubuntu之类的
-
在子进程里执行shell命令
https://fengqi.me/unix/728.html
2025-05-29T05:28:00+00:00
shell 可以通过添加一个小括号的方式,让命令在子进程执行,和bash xxx.sh执行效果一样,运行过程中设置的环境变量、cd、执行exit等都不影响当前shell,如:func1() {
(
cd /tmp
touch testfile
exit 0
)
}
这里末尾执行exit并不会导致当前的shell退出,这对于行数很多需要提前退出的情况非常有用的。
-
Linux下开启CPU睿频,降低功耗
https://fengqi.me/unix/708.html
2023-07-30T17:05:00+00:00
Linux下默认CPU会使用高性能模式,AMD不清楚,但是Intel默认会启用固定频率也就是最高频率,对于家用NAS或者ALL-IN-BOOM来说其实有点浪费电,因为大多数情况下CPU并不是满载的,开启睿频可以省电。1. 验证当前模式cat /sys/devices/system/cpu/intel_pstate/no_turbo
1
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance这里看到是关闭了睿频,且启用高性能模式。2. 关闭定频固定频率grub添加intel_pstate=disable参数vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="splash intel_pstate=disable intel_iommu=on iommu=pt"
update-grub
reboot[...]
-
nginx自动屏蔽不友好的ip
https://fengqi.me/unix/644.html
2022-04-08T11:19:00+00:00
查看nginx日志的时候发现大量的404和302尝试访问不存在的资源,大概率是使用工具扫描。{"connection": "2572288","pid": "176228","request_id": "7d5dcaac3e4be47a536a4a0d1b5c7abb","request_length": "157","remote_addr": "52.170.115.255","time_local": "08/Apr/2022:17:44:50 +0800","status":"302","host":"fengqi.me","uri":"/Panels.txt","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/Panels.txt","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"138","http_x_forwarded_for":"","http_user_agent":"python-requests/2.27.1","upstream_response_time":""}
{"connection": "2572337","pid": "176261","request_id": "cf56fa6708c4b68d1b8e3b4d7871103c","request_length": "150","remote_addr": "52.170.115.255","time_local": "08/Apr/2022:17:45:09 +0800","status":"302","host":"fengqi.me","uri":"/Panels.txt","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/Panels.txt","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"146","http_x_forwarded_for":"","http_user_agent":"python-requests/2.27.1","upstream_response_time":""}
{"connection": "2186500","pid": "164519","request_id": "aa21defaa0a590422420732b52c58f83","request_length": "253","remote_addr": "13.93.105.179","time_local": "08/Apr/2022:16:18:21 +0800","status":"302","host":"fengqi.me","uri":"/new-index.php","server":"fengqi.me","port":"443","protocol":"HTTP/1.1","request_uri":"/new-index.php","args": "","scheme": "https","request_time": "0.000","request_method":"GET","http_referrer":"","body_bytes_sent":"138","http_x_forwarded_for":"","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36","upstream_response_time":""}正常用户不会这么访问,所以基本上一个ip重复来这么几次就是有问题的,写个脚本,定时扫描nginx的access.log统计出频繁的ip,然后干掉。[...]
-
Proxmox VE关于Alpine虚机、MAC地址还有Hostname的小坑
https://fengqi.me/unix/627.html
2022-02-15T08:16:00+00:00
Proxmox VE简称PVE,有kvm和lxc两种模式,说人话就是虚拟机和容器,比较轻量的应用我会优先使用lxc,磁盘和内存占用都非常低。如果对glibc没有强制要求的,我会优先使用 Alpine Linux 这个发行版,除开应用本身的资源,只有2m左右的系统文件,几乎没有内存和磁盘浪费。我的PVE和虚机优先跑在SSD上,会比跑在HDD上有更好的io,所有SSD空间需要省着用。问题1:Alpine DHCP可能不发送主机名我在使用Alpine的时候发现部分机器启动后,DHCP不会发送Hostname,导致OpenWrt看到的主机名是问号?爬了一下Alpine的文档后找到,可在/etc/network/interfaces 增加hostname参数来自定义发送主机名,问题解决,验证方式是查找系统进程udhcpc 看运行参数是否有 hostname:xxx字样,例如:> ps|grep dhcp
> /sbin/udhcpc -b -R -p /var/run/udhcpc.eth0.pid -i eth0 -x hostname:ptn原因未知,使用的镜像都是一致的,部分容器开起来就是会出问题。。。可能隐藏的比较深。[...]
-
正则表达式阶段性记录
https://fengqi.me/unix/608.html
2022-02-08T03:42:00+00:00
昨天在写一个diff脚本的时候,需要过滤#开头的注释,以及过滤掉过滤#后出现的空行,Google后我的脚本变成了grep -v '^#' | grep -v '^$' 这样,可用但是并太不明白^$的意思,猜测可能是开始即结束?因为我尝试加上几个空格匹配会失败,且改成 grep -v '^#'|grep -Ev '^\s+$' 是可以的,今天又搜了下想确认猜测,然而并没有找到相关的说明,但是也有其他收获。首先是梳理了下正则的各种分支和规范,比如POSIX、Perl、RE2等以及包含的子集。其次是匹配包括换行的写法,以前在写PHP的时候比较习惯使用flag,比如i、s、U这些,现在又多了几种写法:[\s\S]*、[\d\D]*、[\w\W]*、[\v\V]*、[\h\H]*。是不是挺迷惑,我一开始也是,那现在再来回顾下语法:\d 数字,[0-9]
\D 非数字,[^0-9]
\s 白空格,[\t\n\f\r ]
\S 非白空格,[^\t\n\f\r ]
\w 整个单词,[0-9A-Za-z_]
\W 非整个单词,[^0-9A-Za-z_]
\h 水平空格
\H 非水平空格
\v 垂直空格
\V 非垂直空格[...]
-
如何解压 .zst 和 tar.zst 压缩文件
https://fengqi.me/unix/606.html
2022-02-07T15:51:00+00:00
.zst 和 tar.zst 是使用 Facebook 开源的 Zstandard 算法压缩出来的文件。tar 命令有个参数 -I(--use-compress-program) 可以指定压缩和解压缩使用的子命令,所以解压的完整命令如下:tar --use-compress-program=unzstd -xvf archive.tar.zst如果报错:zstd: Cannot exec: No such file or directory,请尝试使用 apt、yum等系统自带的包管理软件安装zstd。参考:How can I decompress an archive file having .zst or tar.zst?
-
恢复git push -f丢失的提交
https://fengqi.me/unix/602.html
2021-12-17T09:33:00+00:00
如果有人本地仓库比较新,让他暂时不要更新,并 git push -f,然后你拉取并合并即可,同时吸取教训,将重要分支设置为保护,如果是在线修改或没人拉取最新代码,能否恢复取决于远端仓库是否执行gc,否则神仙也救不回来了。以没有gc过为例,登录到远程git服务器,并找到仓库所在目录,以我使用的gitea为例,gitlab类似:git clone /home/git/gitea-repositories/fengqi/exmaple.git rescue
cd rescue
# 查找丢失的提交,如果没有输出commit表示没救了
git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (31/31), done.
dangling commit 558aac381bc8acb161447686361928e2e2edc9bf
dangling blob 82f865770e1590763574a60d53286f2102f6b03b
dangling blob d912156bec00a9f00850ab2ec3a3baf1016c2141
dangling blob f02e11383e55a7f7ac33d8dc6554ce4901e55a64
# 查看内容
git show 558aac381bc8acb161447686361928e2e2edc9bf
git checkout branch_xxx
git rebase 558aac381bc8acb161447686361928e2e2edc9bf
# 这里可能提示和远端不一样导致push失败,可以fetch后rebase,也可以pull,看你喜好
git push branch_xxx因为原始信息只在远端,如果你没有权限登录到git远程仓库,大概率也没救了。
-
[记录]便捷部署bitwarden_rs/vaultwarden:从docker提取二进制
https://fengqi.me/unix/587.html
2021-10-30T06:43:00+00:00
Bitwarden Server的开源Rust实现(新版本已经改名vaultwarden),编译后的二进制没有外部依赖,社区不提供编译好的二进制,但是提供了docker,本文是建立在提取docker内的二进制的基础上。我使用的环境是Proxmox VE(PVE),你可以根据自己的情况变通;点击右上角,创建CT,使用Alpine模板,硬盘默认2G就足够,内存512MB即可。准备工作使用命令lxc-attach vmid进入容器,下载docker官方提供的镜像下载脚本,并安装依赖:cd /opt
wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
chmod +x download-frozen-image-v2.sh
apk add jq bash[...]
-
[记录]不使用root或sudo运行systemd服务
https://fengqi.me/unix/576.html
2021-08-24T04:56:00+00:00
需求点systemd是一套系统组件合集,现在要说的是其中的systemctl命令,它是用来控制和查看系统服务的。通常情况下需要使用root或者有sudo权限的用户进行操作,这在某些场景下不能满足需要或者有不安全隐患。现在我们来尝试使用常规权限用户启动服务。创建服务属于用户的服务要放在 ~/.config/systemd/user 目录下,这是个固定的目录,后面的user不可替换mkdir ~/.config/systemd/user[...]
-
[分享] SSH和Git共享22端口,适用于docker或者frp转发等
https://fengqi.me/unix/558.html
2021-05-17T10:13:00+00:00
先说下我的使用场景:我有一台跑在腾讯云上的VPS,就是此博客系统所在的机器,这台机器是有公网IP的在我家里的内网,有一台4核16G的小型服务器,没有公网IP,运行Proxmox VE虚拟了各种服务,其中包括Gitea我通过frp转发暴露内网的Gitea到公网在这之前我一直使用HTTP协议上传或者下载代码,现在觉得太麻烦想用SSH协议如果你跟我的场景类型,此文很适合你,如果你是同一台机器上docker和宿主机之间22端口共享问题,文末官方文档更适合你。本文也是参考了文末官方文档的实现,但是有部分不太一样。[...]