沈唁的编程笔记 https://notes.qq52o.me 沈唁的编程笔记 110879509092022272 72226467595413504 <![CDATA[Mac]]> https://notes.qq52o.me/#/development/mac https://notes.qq52o.me/#/development/mac <![CDATA[

Mac

brew 工具参照 Homebrew 进行安装。

PHP

安装 PHP72 来代替系统自带的 PHP。

brew install [email protected]
brew link [email protected] --force
brew install [email protected]
brew link [email protected] --force

brew install [email protected]
brew link [email protected] --force

Composer

brew install composer

MySQL

#先安装一下 cmake
brew install cmake

#安装 MySQL
brew install [email protected]

#添加环境变量
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

#启动 MySQL
brew services start [email protected]

#初始化 MySQL,设置密码相关的
mysql_secure_installation

MyCli

MySQL 的自动补全和语法高亮工具。

brew install mycli

Redis

brew install redis

#启动 Redis
brew services start redis

Nginx

brew install nginx

Core Dump

sudo mkdir /cores 
sudo chown root:admin /cores 
sudo chmod 1775 /cores
sudo chmod o+w /cores

ulimit -c unlimited

lldb -c /cores/core.37676

TouchBar

音量和亮度调节消失

killall ControlStrip

Alfred

Fix auto-paste on return failure

tccutil reset All com.runningwithcrayons.Alfred
]]> Thu, 14 Aug 2025 17:16:55 +0800 <![CDATA[Git]]> https://notes.qq52o.me/#/tools/git https://notes.qq52o.me/#/tools/git <![CDATA[

Git

修改最后一次提交的commit信息

git commit --amend

撤销上一次的commit

git reset HEAD~

修改remote url

  • 直接修改
git remote set-url origin [email protected]:UserName/Repository.git
  • 先删后加
git remote rm origin
git remote add origin [email protected]:UserName/Repository.git

同时推送多个平台

#github
git remote add origin [email protected]:UserName/Repository.git

#码云
git remote set-url --add origin [email protected]:UserName/Repository.git

回滚上次push的提交

git reset --hard HEAD^
git add .
git commit
#强推
git push -f origin <branch_name>

保持fork之后的项目和上游同步

#添加上游仓库
git remote add upstream [upstream_url]

#fetch
git fetch upstream

#将upstream/<branch_name> merge到本地当前分支
git merge upstream/<branch_name>

#同时别忘了push到自己的github仓库
git push origin <branch_name>

合并某个commitId

git cherry-pick commitId

22 to 443

git的ssh使用22端口不可用时,可以使用443端口

vim ~/.ssh/config

#写入
Host github.com
  Hostname ssh.github.com
  Port 443

设置SS代理

vim ~/.ssh/config

#写入
Host github.com
   HostName github.com
   User git
   ProxyCommand nc -v -x 127.0.0.1:1086 %h %p

!> 注意配置文件内的 127.0.0.1:1086 需要和本地 SS 客户端的所暴露的 本地 Socks5 监听地址 和 本地 Socks5 监听端口 一致

WebHook

使用Swoole的Http\Server来作为Web服务,执行GitHub/Gitee的WebHook

git-deploy

压缩/合并commit

git rebase -i HEAD~[number]

# example : git rebase -i HEAD~4
# HEAD~4的含义是从头部开始追溯4条记录

执行后进入编辑模式,将需要压缩的commit前面的pick改为squash

# 取消
git rebase --abort

# 因为冲突打断的话 执行continue
git rebase --continue

# 强推
git push -f origin <branch_name>

清除本地 remotes/origin/*

git remote prune origin

删除远程分支

git branch -r -d origin/<branch_name>
git push origin :<branch_name>

删除远程不存在但存在本地的分支

git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D

修改分支名称

# 本地分支重命名
git branch -m oldName newName
# 将重命名后的分支推送到远程
git push origin newName
# 删除远程的旧分支
git push --delete origin oldName

git branch --unset-upstream
git branch --set-upstream-to=origin/<branch_name> <branch_name>

使用远程覆盖本地

远程分支强推后,本地文件冲突,需要使用远程文件覆盖本地文件时使用。

git fetch --all
git reset --hard origin/<branch_name>

批量创建/删除.gitignore文件

find . -type d -empty -exec touch {}/.gitignore \;

find ./ -type f -name '.gitignore' -delete

将某个分支的代码完全覆盖另一个分支

#将test分支上的代码完全覆盖dev分支
git checkout dev
git reset --hard origin/test
git push -f

删除中间某次提交

#commit-id 为要删除的commit的下一个commit号
git rebase -i commit-id

#要删除的commit之前的改为drop
git push -f

修改提交日期

git filter-branch --env-filter \
'if [ $GIT_COMMIT = f70cf6dc1dabb4ad0523a3259681b1e0fe43a788 ]
then
    export GIT_AUTHOR_DATE="Sun Apr 4 09:30:01 2021 +0800"
    export GIT_COMMITTER_DATE="Sun Apr 4 09:30:01 2021 +0800"
fi'

获取最后一次 commit id

git log --pretty=format:"%h" | head -1

https://git-scm.com/docs/pretty-formats

非SSH模式免密

echo 'http://username:password@githost' >> ~/.git-credentials

Patch

# 所有文件
git diff > xxx.patch

# 指定文件
git diff file1 file2 > xxx.patch

# 应用patch
git apply xxx.patch

获取两个分支/commitID的差异文件

git diff master dev --stat --name-only
git diff xxxxxx xxxxxx --stat --name-only

Git 提交统计

指定时间内某个人的提交代码行数

git log --author="username" --after="2022-08-01 00:00:01" --before="2022-09-15 23:59:59" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

某个人的提交代码行数

git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -

按用户查看提交代码行数

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

查看每个用户的提交次数

git shortlog -s -n 

Tag

删除本地tag

git tag -d <tagname>

删除远程tag

git push origin :refs/tags/<tagname>

获取某个分支的文件

git checkout branchName -- filepath

生成patch并合并

git format-patch -1 commitId -o  ~/GitHub/sy-records/path
git apply --reject patchfile
]]>
Mon, 10 Feb 2025 09:42:44 +0800
<![CDATA[关于我 :id=about]]> https://notes.qq52o.me/#/README https://notes.qq52o.me/#/README <![CDATA[

关于我 :id=about

博客 知乎 Twitter 新浪微博 思否 GitHub

RSS Status Sitemap Status LICENSE RSS Icon Donate

路有多远,只有心知道,
最美的旅程,是不断的经历,
坚持走下去,与梦想者同行!

{
    "nickname": "沈唁",
    "contact": {
        "email": "52o[at]qq52o.cn",
        "weibo": "@你飞"
    },
    "location": "Xi'an",
    "skills": ["PHP", "Swoole", "Linux", "Python", "WordPress"],
    "tags": ["天秤男", "果粉", "路飞迷"]
}

微信公众号

鲁飞
]]>
Mon, 10 Feb 2025 09:42:44 +0800
<![CDATA[命令行]]> https://notes.qq52o.me/#/code/cli https://notes.qq52o.me/#/code/cli <![CDATA[

命令行

终端输出颜色

echo "\033[32m绿色\033[0m";
echo "\033[4;31m下划线红色\033[0m";
echo "\007发出'咚~'一声\033[0m";
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m 至 \033[37m 设置前景色
\033[40m 至 \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标

各数字所代表的颜色如下:

  • 背景颜色:40-49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
  • 字体颜色:30-39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
38:在缺省的前景颜色上设置下划线 
39:在缺省的前景颜色上关闭下划线
  • 显示效果:
0:不使用效果
1:高亮(加深)显示
2:低亮(减弱)显示   
4:下划线
5:闪烁
7:反显(替换背景色和字体颜色)
8:消隐

终端使用代理

function proxy() {
    export http_proxy=http://127.0.0.1:7890
    export https_proxy=http://127.0.0.1:7890
    export all_proxy=socks5://127.0.0.1:7890
    echo -e "\e[32mOpen proxy successfully.\e[0m"
}

function unproxy() {
    unset http_proxy https_proxy all_proxy
    echo -e "\e[31mClose proxy successfully.\e[0m"
}
]]>
Fri, 29 Nov 2024 18:20:29 +0800
<![CDATA[Nginx]]> https://notes.qq52o.me/#/gateway/nginx https://notes.qq52o.me/#/gateway/nginx <![CDATA[

Nginx

隐藏版本号

进入 nginx 配置文件的目录,编辑nginx.conf

在http {}里加上server_tokens off;

编辑 php-fpm 配置文件,如fastcgi.conf或fcgi.conf

#找到:
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
#改为:
fastcgi_param SERVER_SOFTWARE nginx;

重载 nginx 配置即可

反向代理

HTTP

# 至少需要一个 Server 节点,多个配置多行
upstream http_servers {
    # HTTP Server 的 IP 及 端口
    server 127.0.0.1:9501;
    server 127.0.0.1:9502;
}

server {
    # 监听端口
    listen 80;
    # 绑定的域名
    server_name proxy.host.name;

    location / {
        # 将客户端的 Host 和 IP 信息一并转发到对应节点
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 转发Cookie,设置 SameSite
        proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";

        # 执行代理访问真实服务器
        proxy_pass http://http_servers;
    }
}

微信图片

# http://mmbiz.qpic.cn/mmbiz_png/2lUhY9SosBGOtQLz66sZrjlyoqIT3A9sVeU7YQcVlpbZ9GicFkmM8Ctht1bFhXvPp7Uhtj0fU4JlRakqn4ViaspA/0?wx_fmt=png
# /mmbiz_png/2lUhY9SosBGOtQLz66sZrjlyoqIT3A9sVeU7YQcVlpbZ9GicFkmM8Ctht1bFhXvPp7Uhtj0fU4JlRakqn4ViaspA/0

location ~ /(.*)mmbiz(.*)/ {
    if ($http_referer !~* ^https://qq52o.me) {
        return 403;
    }
    proxy_pass http://mmbiz.qpic.cn;
    proxy_set_header Host "mmbiz.qpic.cn";
    proxy_set_header Referer "";
}

CSDN 头像

# https://profile-avatar.csdnimg.cn/f9dd455bf70d483299fb65e2e840d359_kaiyuanshe.jpg
# /avatar-csdnimg/f9dd455bf70d483299fb65e2e840d359_kaiyuanshe.jpg

location /avatar-csdnimg/ {
    if ($http_referer !~* ^https://qq52o.me) {
        return 403;
    }
    proxy_pass https://profile-avatar.csdnimg.cn/;
    proxy_set_header Host "profile-avatar.csdnimg.cn";
    proxy_set_header Referer "";
}

伪静态

location / {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php/$1 last;
        break;
    }
}

location ~ \.php/?.*$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;

    set $fastcgi_script_name2 $fastcgi_script_name;
    if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
        set $fastcgi_script_name2 $1;
        set $path_info $2;
    }
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
]]>
Wed, 11 Oct 2023 08:36:18 +0800
<![CDATA[Docker]]> https://notes.qq52o.me/#/tools/docker https://notes.qq52o.me/#/tools/docker <![CDATA[

Docker

删除所有容器

docker stop $(docker ps -qa)
docker rm $(docker ps -qa)

删除所有镜像

docker rmi --force $(docker images -q)

删除none的镜像

docker rmi $(docker images -f dangling=true -q)

Docker CE 镜像

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

https://developer.aliyun.com/article/110806

通过docker overlay2目录名查找容器名和容器ID

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "xxxxxxxx"

安装 docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
]]>
Tue, 8 Aug 2023 09:22:16 +0800
<![CDATA[Snippets]]> https://notes.qq52o.me/#/tools/snippets https://notes.qq52o.me/#/tools/snippets <![CDATA[

Snippets

获取公众号二维码

获取某个公众号的二维码,需要公众号的微信号或原始ID。

使用接口:https://open.weixin.qq.com/qr/code?username=微信号或原始ID

  • 微信号:sy-records

  • 原始ID:gh_200a99619f7f

]]>
Mon, 10 Jul 2023 14:07:26 +0800
<![CDATA[Linux]]> https://notes.qq52o.me/#/development/linux https://notes.qq52o.me/#/development/linux <![CDATA[

Linux

修改主机名

hostnamectl set-hostname

退出 ssh 重新登录后生效

查看对应网卡流量

安装

yum install iftop

apt-get install iftop

使用

iftop -i eth0

修改ssh端口

vim /etc/ssh/sshd_config

#修改port后重启
service sshd restart

查看命令是否存在

if nonce=$(type php-config 2>&1) ;then
  echo "exist"
else
  echo "not exist"
  exit $?
fi

Ubuntu 连接wifi

suto apt install net-tools wireless-tools network-manager

nmcli dev wifi connect "" password ""
]]>
Wed, 20 Apr 2022 13:31:13 +0800
<![CDATA[PHP]]> https://notes.qq52o.me/#/code/php https://notes.qq52o.me/#/code/php <![CDATA[

PHP

进制转换

// 十六进制 十进制
var_dump(hexdec('abc'));
var_dump(dechex(2748));

// 二进制 十进制
var_dump(bindec('110011'));
var_dump(decbin(51));

// 八进制 十进制
var_dump(octdec('77'));
var_dump(decoct(63));
]]>
Sun, 14 Mar 2021 09:01:53 +0800
<![CDATA[Tools]]> https://notes.qq52o.me/#/tools/tools https://notes.qq52o.me/#/tools/tools <![CDATA[

Tools

jq

用于命令行解析json数据,文档

获取 Swoole Release 版本

curl -s https://api.github.com/repos/swoole/swoole-src/releases/latest | jq '.tag_name' -r

获取 tag

curl -s https://api.github.com/repos/swoole/swoole-src/tags | jq ".[].name" -r | grep v4.5 | head -1
]]>
Fri, 8 Jan 2021 09:07:36 +0800