Logo

site iconHelloDog | 王奥

新加坡,TikTok,SRE。内容主要是新加坡生活和技术分享。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

HelloDog | 王奥 RSS 预览

字节跳动和TikTok内推

2025-03-12 12:12:12

前言

关于字节跳动网上有很多不同的声音,比如字节和心脏只有一个能跳动。伴随着字节跳动改名抖音集团,公司也在不断拥抱变化调整工作节奏,比如作息时间,OKR周期,福利持续改进等。每个人都拥有自由选择的权利,我们无法控制同事和领导都是善良的,可以逃离互联网选择外企、公务员、国企央企、读书出国甚至更换行业重新开始,也可以像围城一样选择在互联网行业深耕,实现自己的小目标。也许有人会担心35岁后的中年危机,也有人自信笃定,你可以孑然一身纵享人生丝滑,也可能面临上有老下有小的进退两难,无论是主动还是被动的选择生活总是需要继续,每迈出一步做出改变都需要勇气。

本文是基于发自内心的自愿为前提,和同事沟通不涉及敏感信息,与大家分享下字节跳动和TikTok招聘流程和内推的机会,以及我所在团队的氛围,如果各位对其中的职位感兴趣欢迎投递简历成为同事。

更新历史

2023年03月12日 - 初稿

阅读原文 - https://wsgzao.github.io/post/tiktok-referral/


字节跳动和TikTok招聘的区别

字节跳动和TikTok官方招聘网站的区别主要体现在Location和前端入口细分

字节跳动校园招聘,主要是应届生和实习生

https://jobs.bytedance.com/campus

字节跳动中国区的社招职位,职位描述大部分显示中文

https://jobs.bytedance.com/experienced/position

字节跳动海外招聘,Job Type可以筛选Experienced/Campus/Intern,显示英文

https://jobs.bytedance.com/en/position

TikTok海外招聘,Job Type可以筛选Experienced/Campus/Intern,Location基本都是全球各地的海外国家,显示英文

https://careers.tiktok.com/position

内推/直接投递/猎头推荐/简历池捞人

无论上述哪种方式最终候选人的简历都会进入到公司内部的简历池中,HR会定期从简历池捞人发起面试邀请,一般会安排3-5轮面试

大部分公司会鼓励员工内推,除了众所周知的内推奖金作为正向激励,更重要的是成年人之间的信任和效率

基础架构职位内部推荐

SG

ROLES / POSITIONS JOB ID Job Detail
SOFTWARE ENGINEER, CLOUD NATIVE D2909 https://careers.tiktok.com/position/7200631875395045669/detail
SOFTWARE ENGINEER, MIDDLEWARE U6798 https://careers.tiktok.com/position/7200633018326665531/detail
SOFTWARE ENGINEER, DEVOPS J4745 https://careers.tiktok.com/position/7200636052595231034/detail
SOFTWARE ENGINEER, R&D SYSTEM SQAV https://careers.tiktok.com/position/7059250273450313992/detail
SOFTWARE ENGINEER, CLOUD PLATFORM U4269 https://careers.tiktok.com/position/7202142775449241893/detail
SOFTWARE ENGINEER, DBA B6333 https://careers.tiktok.com/position/7203271607413066042/detail
SOFTWARE ENGINEER, SRE E5747 https://careers.tiktok.com/position/7203603759233304889/detail
TECH LEAD, DBA FB1V https://careers.tiktok.com/position/7064400706110900494/detail
TECH LEAD, SRE JRCMP https://careers.tiktok.com/position/7064408255376820511/detail

CN

角色 / 职位 职位ID 职位详情
云基架平台研发高级工程师 U1953 https://jobs.bytedance.com/experienced/position/7121618800360933639/detail
云基架平台云原生高级研发工程师/架构师 M3509 https://jobs.bytedance.com/experienced/position/7197317575860439353/detail
存储中间件研发高级工程师 C5736 https://jobs.bytedance.com/experienced/position/7121619956118948133/detail
业务架构高级研发工程师/架构师 M0063 https://jobs.bytedance.com/experienced/position/7197317521489381690/detail
存储研发工程师-广告架构 2XK2 https://jobs.bytedance.com/experienced/position/7013558889002830110/detail

团队氛围

Linus Torvalds Quote: “Talk is cheap. Show me the code.”

  1. 团队项目有阶段成果产出,受过公司级嘉奖,中长期目标清晰且重要,主要面向全球混合云+云原生的技术栈
  2. 团队负责人懂技术也懂管理,亲自参与具体架构规划,愿意倾听不同的声音灵活调整策略,充分授权
  3. 团队成员主要分布在新加坡和北京,没有PUA和向上管理,团队氛围和谐大家以德服人
  4. 尊重团队成员的作息习惯,一起做有挑战能获得成就感的事情 Always Day 1

如何内推

如果对上述职位或者全球其他职位感兴趣,觉得我分享的文章信息有价值,可以点击以下链接或者扫描二维码,搜索Job ID后上传简历即可完成内推,保护简历隐私,没有中间商赚差价

https://job.toutiao.com/s/SbyavxV

如果你希望与我在线沟通或者想了解新加坡的生活,可以访问以下链接

https://www.linkedin.com/in/aowang

https://wsgzao.github.io/index/

新加坡宽带套餐选择推荐和路由器配置经验分享

2024-10-06 10:59:49

前言

原本没有计划写新加坡个人宽带,但是在经历过Singtel合约转让以及续费并且手动debug登录光猫修改路由器配置后,我决定把自己了解到的信息和大家做下分享,而且由于新加坡疫情从2020年初到现在对所有人最重要的影响改变就是习惯WFH,除了房子以外宽带的可靠性其实决定了大家在家办公的舒适程度。这篇文章想和大家分享的不单纯是新加坡宽带套餐选择,更重要的是分享下在新加坡上网的经验之谈。

更新历史

2024年10月06日 - 更新新加坡宽带10Gbps购买建议
2021年09月07日 - 初稿

阅读原文 - https://wsgzao.github.io/post/singapore-broadband/


2024年新加坡宽带购买建议

Singtel已经下线1Gbps宽带,新用户压根没有选择的权利,调研了下现阶段各个运营商的套餐后,我还是续约2年留在Singtel

威胁不给保留1Gbps就换运营商后Singtel同意39.89价格续费,续约理由如下

  1. Singtel价格偏贵,但延迟较低,运行一直很稳定从没出过问题,稳定对经常WFH的用户来说很重要
  2. 更换运营商还要单独支付Netlink Trust (NLT)和Optical Network Terminal (ONT),如果质量不靠谱会浪费较多时间成本
  3. 按新加坡政府的宽带提升规划是10Gbps,那么目前的2Gbps、2.5Gbps、5Gbps在我看来也是过渡形态,WiFi 6升级WiFi 7也需要时间普及硬件设备
  4. 如果我是新用户那么StarHub 25新币5Gbps,Simba 29.99新币10Gbps或许价格上对我会有吸引力,但作为老用户我有自己的需求还是选择耐心等等,让子弹再飞一会

新加坡宽带没有那么复杂,像我用着Singtel送的老款光猫+WiFi 5/6路由器使用有线Mesh组网依然老当益壮,全屋信号覆盖

  1. 对办公/游戏/Netflix有高标准稳定性要求,首先就是要选择有口皆碑靠谱的运营商,不要贪图便宜
  2. 其次是带宽比如至少1Gbps起步,对Cloudflare家庭建站或者NAS上传下载有追求至可以升级至最新的10Gbps,搭配万兆家用交换机,减少短板,好马配好鞍
  3. 最后才是布线+路由器,先考虑配电间到各个房间的布线至少6类千兆网线+有线Mesh组网,老房子可能还是百兆网线,折中方案是无线Mesh组网,比如主流Mesh WiFi 6/7
  4. 大神可以继续刷固件或者旁路由网关控制家庭网络,软件层面玩法多样就不展开了

然后新加坡手机网络+家用带宽成本其实也不高

  • 移动运营商我从来新加坡选择的是Zero1,背后Singtel,每月7新币无限流量限速,除了没有eSIM稳定使用至今,海外Roaming免费接收短信都正常
  • 新加坡三大运营商Singtel/StarHub/M1旗下的虚拟运营商选择已经很多了,中国移动CMLink(Singtel)和中国联通CUniqSG(StarHub)也都可以考虑
  • 宽带选择Singtel,从一开始租房到买房搬家relocation,每月40新币1Gbps,用送的路由器合理搭配,从来没有稳定性问题,够用了
  • 如果大家选择其他运营商单纯买宽带就好,从国内买个小米Mesh傻瓜式无线组网,成本可能都不要500人民币

远程访问的方案

  1. 远程访问理想的方案:公网IP(IPv4/IPv6)+ Wireguard + DDNS
  2. 没公网第三方中转方案:CloudFlare Zero Trust、Tailscale、NetBird
  3. 低延迟远程串流控制推荐试下Parsec、网易GameViewer

DDNS v Tailscale v Cloudflared

Best Broadband in Singapore For Your Household Needs: Singtel vs M1 vs StarHub vs MyRepublic & More

Best SIM-Only Plans in Singapore (July 2024): Singtel, M1, Starhub, GOMO and More

新加坡宽带选择结论

我选择Singtel宽带

原因很简单

  1. 稳定压倒一切
  2. 一分价钱一分货,Singtel就是新加坡的中国电信
  3. 和其他宽带供应商比较已经算是优质的售后服务体验

如果大家在国内生活过,我举中国电信宽带对比联通/移动/有线通/鹏博士/长城宽带,相信各位就能明白在新加坡Singtel对比M1/StarHub/MyRepublic/ViewQwest/WhizComms的区别。被上述友商深深伤害过的朋友一定明白谁才真正掌握宽带核心科技

新加坡宽带套餐对比

关于新加坡宽带套餐对比网上已经有比较详细的分析,我这边主要强调3点,希望对大家有参考价值

  1. 合约时间一般分为1年和2年,宽带速率一般为1Gbps,当然也可以选择500Mbps或者2Gbps以上
  2. 性价比来说我个人觉得差价不大,建议优先考虑长期在家办公的稳定性
  3. 注意产品背后涉及合约转让,搬家迁移,提前解约等隐形成本,售后服务优先
Home Fibre Broadband Provider No Contract Plan 12-Months Plan 24-Months Plan Sign-Up and Installation Fees
M1 None 500Mbps: $39.90

1Gbps with Router: $49.90
500Mbps: $29.90

1Gbps with Router: $39.90

1Gbps (GamePRO): $52
Registration: $58.85 (waived for new sign-ups with promo code 'FREEREG' for 24-months 1 Gbps plan)

ONT Activation: $90.00 (waived for Mon to Fri, 9am to 6pm)

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)
MyRepublic 1Gbps: $59.99 1Gbps: $50.99 200Mbps: $27.99

1Gbps: $38.99

1Gbps with Router or WiFi Mesh: $41.99

1Gbps (Gamer): $49.99

2 x 1Gbps: $51.99

2 x 1Gbps (Gamer): $56.99
Service installation fee: $53.50 (one-time)

ONT Activation: $56.71

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)
Singtel None None 1Gbps with Router: $44.90

1Gbps with WiFi Mesh: $49.90

2Gbps with WiFi Mesh: $64.90

1+1 Gbps Gamer Bundle: $64.90

10Gbps with WiFi Mesh: $169
Registration: $53.50 (one time, free for online sign ups)

ONT Activation: $56.71

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)
StarHub None 1Gbps with Router: $49.90 500Mbps: $29.90

1Gbps with Router: $45.90

2Gbps with Router: $54.90
Registration: None

ONT Activation: $56.71

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)
ViewQwest 1Gbps: $62.50 None 500Mbps: $29.90

1Gbps with Router: $42.90

1Gbps with WiFi Mesh: $53.90

1Gbps (Gamer): $52.90

2 Gbps: $48.90

2Gbps (Gamer): $64.90

2Gbps with WiFi Mesh: $65.90
Registration: $53.50 (one-time)

ONT Activation: $56.71

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)
WhizComms None 300Mbps: $32

1Gbps: $40

1Gbps with Router: $47
300Mbps: $28.90

1Gbps: $34.90

1Gbps with Router: $39.90

1Gbps with WiFi Mesh: $49.90
Service activation fee: $53.50 (one-time)

ONT Activation: $56.71

Optical Fibre Termination Point Installation: $160.50 (Condo & HDB) or $288.90 (landed)

Note: Prices listed are regular prices correct as at the time of writing; there are usually promos which give free installation, registration fee waivers and etc.

Best Home Fibre Broadband Plan in Singapore: Which Is the Cheapest Home Fibre Broadband Plan?
https://blog.seedly.sg/best-broadband-plan/

新加坡宽带套餐,哪家速度快?又实惠?
https://www.xiaohongshu.com/discovery/item/5fb9bfaf0000000001009143

新加坡宽带测速

Netflix出品的FAST
https://fast.com/

老牌的SPEEDTEST
https://www.speedtest.net/

Singapore Speedtest Server
http://speed-portal.singnet.com.sg/

Singtel使用体验

因为我自己使用的是Singtel,所以会和大家分享下Singtel宽带使用体验。

新加坡的宽带和手机套餐是完全分开的,这个和法律政策有关,大家就不要考虑类似中国电信乐享家无限流量宽带融合套餐了。

购买经历

我购买的是别人转让给我的Singtel宽带套餐1Gbps
原价$49.90/mth,24-month contract,Add-ons是

  • Broadband Monthly Bill Rebate - $7/mth (24 mths)

所以每月实际付费为$42.91

如果你是首次购买可以通过Singtel官网查看优惠活动
https://www.singtel.com/personal/products-services/broadband/fibre-broadband-plans

因为我的套餐2021年12月底到期,9月份就可以开始提前续约,所以也了解清楚Recontracting续约的优惠方案,主要有3种

  1. 每月直减优惠,一般是5新币左右,每月就是45.9
  2. 免费送3个月左右,实际消费按合同24-3=21个月,平均每月也差不多43.66
  3. 绑定合约套餐,如路由器,戴森等数码产品,给一个很低的数字如39.9吸引你,然后你会发现分期价格更坑爹,不推荐办理

Singtel服务热线主要分两种
1609 销售
1688 技术支持

合约转让或者提前解约

转让一般分两种情况

  1. 你转让给别人或者别人转让给你,流程基本类似
  2. relocate搬家

Transfer of account and service ownership
https://www.singtel.com/personal/support/account/transfer-of-account-and-service-ownership

合约转让注意2点

  1. 被人转让给你,建议提前打电话给Singtel评估家里是否可以安装Singtel
  2. 转让Singtel一定需要双方携带证件前往指定的Singtel实体店面签,比如我去的是乌节路313后面的Singtel总部

relocate搬家注意的是

  1. 预约Singtel宽带迁移时间,评估新地址是否可用
  2. 安装费用分为2笔Singtel服务费(可免)和NLT,费用会根据工作日和非工作日收取不同费用,NetLink Trust (NLT)通常免不了

提前解约违约成本较高,建议通过合约转让的形式避免,承担1笔40新币左右转让费用就完事了

其他问题可以浏览官方或者拨打1688咨询,支持中文客服
https://www.singtel.com/personal/support

Singtel路由器设置方法

Singtel路由器简介

  1. Huawei HG8240T5 Optical Network Router (ONR) ,就是文章里feiyang提到的Singtel光纤+路由硬件
    https://www.singtel.com/personal/support/broadband/routers-ont
  2. Singtel-issued AC Plus router,这个大家伙算是路由器,但真的登录上去又会发现有很多阉割限制
    https://www.singtel.com/personal/support/broadband/routers-ont/arcadyan-ac-plus-guide
  3. 一般首次安装Singtel工作人员会上门配置,如果涉及resale转让或者搬家建议和Singtel官方客服确认清楚细节流程,这样可以有效减少不必要的麻烦

Singtel路由器常见问题

  1. 路由器到底怎么登录进去?官网留了个坑就是feiyang提到的需要移除网线断电重启才能真正进入路由器后台,无需密码,http://192.168.1.254/
    https://www.singtel.com/personal/support/broadband/routers-ont/arcadyan-ac-plus-guide/change-wireless-settings
  2. Band Steering自动频段切换要不要禁用,禁用的好处是可以分别独立开启2.4G和5G并重新命名不同名字的SSID,但我还没有详细的评测数据,目前体验下来暂未发现问题,欢迎补充
  3. 如果是游戏用户或者对网速要求较高,老老实实用有线网络会比较合适,充分榨干1Gbps

Singtel路由器配置过程小结

  1. 我最初的需求是计划修改SSID,默认密码,独立设置2.4G和5G,交换机和路由器192.168.1.1/24网段分离避免192.168.1.254地址冲突导致无法进入路由器后台的尴尬
  2. 最后不做任何配置修改,感觉也没必要折腾,但如果我未来觉得有其它问题还是会再回来调优的

singtel 路由器踩坑经历
https://feiyang233.club/post/singtel/

新电信 Singtel vs 星和 StarHub 宽带对比
https://www.pupboss.com/singtel-fibre-vs-starhub-fibre/

新加坡网络的特点

  1. 新加坡号称全球网速最快的国家之一,Singtel 1Gbps用有线测速上行和下行基本对等,而你只需要搭配一个更加强大的路由器或者Mesh路由器组网来覆盖更大的面积
  2. 宽带供应商公网IP逐步像国内一样不再开放,动手能力强的话依然可以debug下光猫
  3. 如果你发现某些网站不能正常访问比如P站,可以试着修改主DNS为8.8.8.8,然后见证奇迹的时刻
  4. 新加坡可以非常自由的观看Netflix/Disney+/YouTube Premium等流媒体,可以通过合租降低成本,比如Netflix合租后3个月仅45人民币
  5. 新加坡的网络对国内的产品出海也都比较友好,像微信读书,腾讯视频,QQ音乐,爱奇艺,B站,小红书在新加坡都可以流畅使用,部分受到海外版权播放限制,不过都有办法解除,想追的电影/电视剧/综艺基本都可以和国内或者国际保持同步
  6. 我手机使用的是zero1.sg虚拟运营商无限流量套餐9.9新币每月,背后实际运营依然是Singtel,达量限速对大部分不看高清视频的用户绝对够用而且不用担心流量超出问题,从来新加坡使用至今几乎没有让我失望过。因为新加坡携号转网很方便,我也是在用爱发电推荐zero1.sg给周围的朋友

MacBook从mac intel升级到apple silicon

2024-10-03 19:59:49

前言

本文主机记录从MacBook 从 mac intel 升级到 apple silicon M1 M2 M3 芯片的通用经验

更新历史

2024年10月03日 - 初稿

阅读原文 - https://wsgzao.github.io/post/macbook-from-mac-intel-to-apple-silicon/

时间线备注

系统升级建议

拿到MacBook Pro M3的时候OS版本为Sonoma 14.6.1 (23G93),此时系统升级有2个选择

  1. 升级小版本至macOS Sonoma 14.7
  2. 升级大版本至macOS Sequoia 15.0

个人建议是这样

  1. 如果是生产力工具,小版本升级问题不大,刚发布的大版本一般等迭代N个小版本猴观察稳定性口碑再升级,避免成为小白鼠影响日常办公体验,通常没有遇到重大安全漏洞公司很少强制要求立即升级
  2. 自用电脑随意吧

数据备份迁移

尽管苹果 Mac 自带迁移助理,但升级跨度较大且很多App也无法直接从Intel平滑迁移到M系列芯片,为了降低不可控风险顺便重温下macOS生产力工具初始化流程,还是选择手动迁移

有实力的同学付费走iCloud或者NAS私有化,不想特别折腾可以参考以下方案

  • Dropbox,文件实时同步备份,免费用户18G空间足够了,国内类似产品有坚果云,百度网盘同步空间等
  • LocalSend,免费、开源、跨平台的局域网文件传输工具,大文件迁移的首选方案
  • Notion,代替Evernote作为新一代的笔记同步工具
  • Enpass,简单易用的跨平台密码管理器,买断性价比高于LastPass、1Password等订阅制吧
  • Google Chrome,浏览器用户习惯和扩展同步,某种程度上也可以代替密码管理器了
  • Google Authenticator,双因素动态口令身份验证器,自从学习微软Microsoft Authenticator允许在线同步数据后,担心隐私泄露风险的同学可能也都转投阵营了

常用软件

搜狗输入法Mac版 - https://pinyin.sogou.com/mac/

LocalSend - https://localsend.org/

iTerm2 - https://iterm2.com/

Tabby - https://tabby.sh/

Rectangle - https://rectangleapp.com/

PDF Expert - https://pdfexpert.com/

OmniPlayer - https://okaapps.com/product/1470926410

MacZip - https://ezip.awehunt.com/

qBittorrent-Enhanced-Edition - https://github.com/c0re100/qBittorrent-Enhanced-Edition

国光的 macOS Ventura 13 软件清单

https://www.sqlsec.com/2023/09/softmac.html

https://www.sqlsec.com/macsoft.html

独立配置

国光的 macOS Ventura 13 优化配置(基于 ARM 平台)

https://www.sqlsec.com/2023/07/ventura.html

Homebrew

Homebrew - https://brew.sh/

Install Homebrew - https://mac.install.guide/homebrew/3

Homebrew国内源 - https://gitee.com/cunkai/HomebrewCN

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Homebrew原版直接安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 修改环境变量
==> Next steps:
- Run these two commands in your terminal to add Homebrew to your `$PATH`:
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

# Homebrew国内源安装
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

# Homebrew国内源卸载
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"

# brew install 常用包
brew install iterm2 wget git

# 安装 brew-cask
brew install cask

# 空格预览 markdown
brew install qlmarkdown

# 空格高亮预览代码文件
brew install syntax-highlight

# 目录切换神器
brew install autojump

Oh My ZSH

Oh My Zsh 是基于 zsh 命令行的一个扩展工具集,提供了丰富的扩展功能。

  • iTerm2: 代替默认的 Terminal,提供了很多高级设置,例如自动补全、高亮等
  • oh-my-zsh: 可以自定义主题、Git 显示、Tab 补全等

http://ohmyz.sh/

https://www.haoyep.com/posts/zsh-config-oh-my-zsh/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安装Oh My Zsh官网命令
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 自动建议提示接下来可能要输入的命令
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

# 命令语法检测
git clone https://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

# 修改插件
plugins=(git autojump zsh-autosuggestions zsh-syntax-highlighting)

# 关掉 URL 反斜杠转义
echo "DISABLE_MAGIC_FUNCTIONS=true" >> ~/.zshrc

# 禁用 on my zsh 自动更新
echo " zstyle ':omz:update' mode disabled" >> ~/.zshrc

# 通过环境变量控制代理
with_proxy(){
HTTPS_PROXY=http://xxx:6666 HTTP_PROXY=http://xxx:6666 "$@"
}

你可以在内置主题样式截图中查看所有 zsh 内置的主题样式和对应的主题名。这些内置主题已经放在 ~/.oh-my-zsh/themes 目录下,不需要再下载。

1
2
3
4
5
6
7
8
cd ~/.oh-my-zsh/themes && ls

# 修改主题为agnoster
vi ~/.zshrc
# 默认主题为robbyrussell,可选修改为其他如agnoster,代价就是修改字体,否则会导致显示乱码
ZSH_THEME="robbyrussell"
ZSH_THEME="agnoster"
ZSH_THEME="dracula"

根据 What’s the best theme for Oh My Zsh? 中的排名,以及自定义化、美观程度,强烈建议使用 powerlevel10k 主题。

Dracula Theme for Zsh - https://draculatheme.com/

配合iTerm2主题系统自带主题Colors我推荐Smoooooth,或者其他主题如Dracula

Dracula Theme for iTerm - https://draculatheme.com/iterm

https://iterm2colorschemes.com/

Shell

Bash
Bash是最常见的Linux Shell,如果你在Mac上打开终端(直到macOS Mojave为止)

Zsh
zsh相对于bash 高可配置、高扩展。目前是mac上的默认的shell工具。推荐它的主题网址:https://ohmyz.sh/

通过扩展可以获得如下功能:

  • 自动补全
  • 语法高亮
  • 插件系统(插件管理)
  • 命令行提示(git仓库)
  • 颜色主题

Fish
官网:https://fishshell.com/

相比于zsh,fish会有很多自动化的配置,默认的安装即可。
特点:

  • 命令历史
  • 自动补全、自动搜索
  • 语法高亮
  • 运算+逻辑
  • 运行行颜色设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 通过命令zsh --version查看本机zsh版本
zsh --version
zsh 5.9 (x86_64-apple-darwin23.0)

# 没有zsh可以单独安装
brew install zsh

cat /etc/shells

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

# 输入如下命令更改zsh为默认shell
chsh -s /bin/zsh

# 查看是否切换成功, 返回 /bin/zsh 就对了
echo $SHELL

Vim

macOS 自带的 vim 是没有任何配色的,以下是常用的配色方案,先在用户目录下新建一个 vim 的配置文件:

1
2
3
4
5
vim ~/.vimrc

set nu " 显示行号
colorscheme desert " 颜色显示方案,其他方案查看:ls /usr/share/vim/vim*/colors
syntax on " 打开语法高亮

VimConfig - https://vimconfig.com/
My .vimrc - https://chrisyeh96.github.io/2017/12/18/vimrc.html

Python

pyenv 是一个强大 Python 包管理工具,可以灵活地切换各种 Python 版本,Linux 和 macOS 强烈建议使用 pyenv 来管理我们的 Python 版本,优雅高效且不会破坏掉系统自带的 Python 环境

https://github.com/pyenv/pyenv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 安装 pyenv
brew install pyenv

# 接着为 pyenv 配置 shell 环境,提高工作效率,可自动联想 Tab 补全我们本地安装的 Python 版本:
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

# 查看已经安装的Python版本
pyenv versions

# 查看当前的 Python 版本
pyenv version

# 查看可安装的版本
pyenv install -l

# 安装与卸载 3.12
pyenv install 3.12
pyenv global 3.12.6
pyenv uninstall 3.12

# 版本切换确实很方便,所安装的版本都在 ~/.pyenv/versions 目录下:

# global 全局设置 一般不建议改变全局设置
pyenv global <python版本>

# shell 会话设置 只影响当前的shell会话
pyenv shell <python版本>
# 取消 shell 会话的设置
pyenv shell --unset

# local 本地设置 只影响所在文件夹
pyenv local <python版本>

pyenv 的 global、local、shell 的优先级关系是:shell > local > global

Java

无论是 Oracle JDK 还是近期比较流行的 Azul Zulu JDK,我们都可以先自己安装一遍,默认都在安装在**/Library/Java/JavaVirtualMachines** 目录下

这里推荐使用 jenv 来切换我们的 Java 版本,类似于 pyenv 一样很优雅

https://www.jenv.be/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装 jenv
brew instal jenv

# brew 安装后我们得配置一下 zshrc 的环境:
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

# 查看当前的 Java 版本
jenv version

# 手动添加本地的 Java Home 路径
jenv add /Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/
jenv add /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home/

# 列出目前 jenv 所有可切换管理的版本
jenv versions

# global 全局设置 一般不建议改变全局设置
jenv global <java 版本>

# shell 会话设置 只影响当前的shell会话
jenv shell <java 版本>
# 取消 shell 会话的设置
jenv shell --unset

# local 本地设置 只影响所在文件夹
jenv local <java 版本>

ssh用法技巧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
vim ~/.ssh/config

Host *
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
UserKnownHostsFile /dev/null
CheckHostIP no
StrictHostKeyChecking no
TCPKeepAlive yes
ForwardAgent yes
HostKeyAlgorithms +ssh-rsa
ServerAliveCountMax 3
ServerAliveInterval 15
SendEnv *VOLC*

Host test
HostName xxx
User root
Port 2222

Host test-jump
HostName xxx
User root
ProxyCommand ssh jumpserver nc -q0 %h %p 2> /dev/null

# jump server
Host jumpserver
HostName jumpserver.xxx.com
User xxx

# ansible中也可以传入跳板机的环境变量
[all:vars]
ansible_ssh_args="-A -J jumpserver"

使用GitHub和Hexo搭建免费静态Blog

2024-10-03 17:40:07

前言

习惯自己写Blog的朋友一定不会陌生Wordpress,或许也曾在新浪博客和QQ空间留过脚印,但静心认真思考一下,似乎我们又总是向往更加简单自由的写作方式。GitHub给我们提供了一个无限的空间,我们需要珍惜使用,而Hexo的出现从某种意义上来说代替了Jekyll,让我们可以更专注于写作本身。本文主要介绍自己的实践心得并不断完善内容,衍生知识和原理推荐大家认真阅读官网的手册,其它推荐参考内容链接在文中也会标注出来。

阮一峰 - 喜欢写Blog的人,会经历三个阶段

第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写。
第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客。
第三阶段,觉得独立博客的管理太麻烦,最好在保留控制权的前提下,让别人来管,自己只负责写文章。

更新历史

2024年10月03日 - 更新macOS M系列芯片升级[email protected]和node@22
2023年03月13日 - 升级[email protected]和node@18
2021年10月17日 - 更新macOS Node.js从16/14降级为12解决hexo g生成空文件问题
2020年09月06日 - 更新macOS下部署Hexo 5.0步骤,重构文章内容
2015年11月18日 - 推荐iissnan的主题,完善细节内容
2015年09月03日 - 完善Windows 10安装Hexo中的细节
2015年03月22日 - 更新Windows下Hexo 3.0安装和升级
2015年03月10日 - 增加Hexo 3.0降级 2.8
2014年12月19日 - 完善内容
2014年12月09日 - 更新Hexo配置修改部分
2014年06月19日 - 更新全部基础架构,待完善配置修改部分
2014年06月17日 - 更新部分Hexo建站过程,待完善
2014年05月29日 - 撰写初稿

阅读原文 - https://wsgzao.github.io/post/hexo/


macOS M系列芯片

如何安装brew等基础环境请参考
MacBook从mac intel升级到apple silicon - https://wsgzao.github.io/post/macbook-from-mac-intel-to-apple-silicon/

升级Hexo前建议压缩打包备份下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 查看可安装的node
brew search node

# 安装最新版node
brew install node

# 安装其他版本node
brew install node@18

# brew切换node版本
brew unlink node@22
brew link --overwrite --force node@18

# 查看node版本
node -v
v22.9.0

npm -v
10.8.3

# 安装Hexo
npm install hexo-cli -g

# Hexo初始化配置,如果是迁移数据可以跳过init
# hexo init blog

cd blog
npm install
hexo npm audit fix

# 本地启用hexo预览
hexo server
INFO Start processing
INFO Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.

# 安装插件解决报错依赖
npm install hexo-generator-feed
npm install hexo-generator-sitemap


准备工作

注意 本文主要介绍HexoWindowsmacOS上的通用配置

了解Hexo

A fast, simple & powerful blog framework

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

https://hexo.io/

安装Git

https://desktop.github.com/

简单可依赖,安装完成后依据提示操作即可,So Easy

安装Node.JS

https://nodejs.org/

注意 安装完成后添加Path环境变量,使npm命令生效。新版已经会自动配置Path

1
2
3
4
5
6
;C:\Program Files\nodejs\node_modules\npm

# macOS
brew install node@18
brew link --overwrite node@18

安装Hexo

配置好GitHub家目录后,双击桌面上的Git Shell,输入npm命令即可安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
npm install hexo-cli -g
npm install hexo --save

# 如果命令无法运行,可以尝试更换taobao的npm源
npm install -g cnpm --registry=https://registry.npm.taobao.org

# macOS首次安装hexo-cli会出现权限报错
npm install hexo-cli -g

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! [Error: EACCES: permission denied, access '/usr/local/lib/node_modules'] {
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR! /Users/wangao/.npm/_logs/2020-09-06T08_50_44_338Z-debug.log

# 使用以下命令修改权限解决
sudo chown -R `whoami` ~/.npm
sudo chown -R `whoami` /usr/local/lib/node_modules

# Node.js版本太高需要从18/16/14降级,否则hexo g生成的是空白文件
https://github.com/hexojs/hexo/issues/4257
https://nodejs.org/en/download/releases/

npm uninstall hexo-cli -g
brew uninstall node
brew search node
brew install node@14
brew link --overwrite node@14

npm ls --depth 0

Hexo初始化配置

Hexo官方步骤

简单几步就可以在本地执行,还有一些插件需要和第三方主题搭配使用

1
2
3
4
5
6
7
8
npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

npm install hexo-generator-feed
npm install hexo-generator-sitemap

创建Hexo文件夹

安装完成后,根据自己喜好建立目录(如E:\kuaipan\GitHub\hexo),进入Git Shell切换到该路径下E:\kuaipan\GitHub\hexo执行以下指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
hexo init

#安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
$ hexo init <folder>
$ cd <folder>
$ npm install

#新建完成后,指定文件夹的目录如下
.
├── _config.yml
├── package.json
├── scaffolds
├── scripts
├── source
| ├── _drafts
| └── _posts
└── themes

安装Hexo指定版本和插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# Hexo插件和主题要遵循版本
https://www.npmjs.com/package/hexo

# 版本
npm ls --depth 0
[email protected] /GitHub/hexo
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

本地查看效果

继续执行以下命令,成功后可登录localhost:4000查看效果

1
hexo server

Hexo简写命令

1
2
3
4
hexo n #生成文章,或者source\_posts手动编辑
hexo s #本地发布预览效果
hexo g #生成public静态文件
最后我选择手动同步更新至GitHub

部署静态网页到GitHub

注册设置GitHub

  1. 登录GitHub,注册自定义用户名如wsgzao
  2. 在主页右下角创建New repository,name必须和用户名一致如wsgzao.github.io
  3. 首次创建耐心等待10分钟左右审核,之后即可访问静态主页如https://wsgzao.github.io

同步内容至GitHub

  1. 下载GitHub Windows
  2. 设置Local pathE:\快盘\GitHub\
  3. 运行Git Shell切换到如E:\快盘\GitHub\hexo路径下
  4. 执行hexo g命令生成public文件夹
  5. 把生成的内容全部拷贝到Local path或其子目录
  6. 运行GitHub确认修改信息后执行右上角的Sync同步
  7. 最后访问主页观察效果

https://pages.github.com/

域名和DNS

域名购买

http://www.godaddy.com/

https://www.namecheap.com/

https://wanwang.aliyun.com/domain/

DNS托管

https://www.dnspod.com/

https://www.cloudflare.com/

设置CNAME

  1. 在Github的网站目录下创建CNAME文件
  2. 填写自己的域名如hellodog.com,保存结束
  3. 登录DNSPod,先添加域名,然后添加记录,设置如下
主机记录 记录类型 线路类型 记录值 MX优先级 TTL
@ CNAME 默认 wsgzao.github.io. - 10
www CNAME 默认 wsgzao.github.io. - 10

Hexo配置修改

告诉自己为什么要选择Hexo

知识储备

1.勤学勤练Markdown

本地+云端备份数据是一种习惯

Markdown学习路径 - https://wsgzao.github.io/post/markdown/

2.使用性感的文本编辑器

工欲善其事必先利其器

Hexo主题

选择主题建议遵循KISS原则

Hexo Themes

hexo-theme-next

hexo-theme-oranges

hexo-theme-keep

hexo-theme-fluid

hexo-theme-butterfly

hexo-theme-redefine

免费图床

PicGo + GitHub + jsDelivr

https://github.com/Molunerfinn/PicGo

jsdelivr加速github图片地址格式,目前中国访问jsdelivr不稳定或者不可用

1
2
3
4
5
6
7
8
9
10
11
12
# 如何把图片放到github repo不再赘述。图片路径格式如下:
https://raw.githubusercontent.com/{user}/{repo}/master/{folderpath}/{filename}

# 如果希望使用jsdelivr的CDN,需要将上面图片路径转换为:
https://cdn.jsdelivr.net/gh/{user}/{repo}/{folderpath}/{filename}

# 或者说可做前缀替换
https://raw.githubusercontent.com/{user}/{repo}/master/
https://cdn.jsdelivr.net/gh/{user}/{repo}/

![](https://raw.githubusercontent.com/wsgzao/storage-public/master/img/202303141408339.png)
![](https://cdn.jsdelivr.net/gh/wsgzao/storage-public/img/202303141408339.png)

CDN加速github图床

https://zhuanlan.zhihu.com/p/447408685

常见问题

  1. 修改配置文件时注意YAML语法,参数冒号:后一定要留 空格
  2. 中文乱码请修改文件编码格式为UTF-8
  3. 如何迁移至Hexo

参考文章

Hexo官方中文文档

Easy Hexo

macOS使用iterm2启用rz与sz功能

2024-10-03 10:59:49

前言

本文主要介绍macOS环境下使用iterm2的rz(上传)和sz(下载)功能的安装流程,某些时候这些小命令可以方便的代替scp绕过安全限制执行简单的上传和下载任务,同理SecureCRT和Xshell也可以启用rz和sz功能。

更新历史

2024年10月03日 - 更新M芯片配置变化
2021年11月18日 - 完善macOS lrzsz安装配置
2020年11月02日 - 初稿

阅读原文 - https://wsgzao.github.io/post/lrzsz/


lrzsz简介

lrzsz: free x/y/zmodem implementation

lrzsz is a unix communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols. lrzsz is a heavily rehacked version of the last public domain release of Omen Technologies rzsz package, and is now free software and released under the GNU General Public Licence.

Features of lrzsz

  • very portable, automagically configured with GNU autoconf.
  • crash recovery.
  • up to 8KB block sizes (ZMODEM8K).
  • internationalized (using GNU gettext). German translation of the programs output exists.
  • far more secure than the original sources.
  • high performance. say `make vcheck-z’ and have a look at the BPS rate - i recently saw 1.4 MB per second transfering a large file through pipes (on a I586/133 system. Beat that!).
  • good blocksize calculation (tries to compute an optimal blocksize based on the number of errors occured).
  • It’s free software.

https://www.ohse.de/uwe/software/lrzsz.html

lrzsz原理

下载文件
在服务器上执行sz(Send by ZMODEM),先在终端上输出**B00000000000000,然后客户端在终端发送指令,表示拒绝,还是接收(接收的话,就在客户端运行rz指令与服务端交互)

上传文件
在服务器上执行rz(Receive by ZMODEM),先在终端上输出rz waiting to receive.**B0100000023be50,然后客户端发送指令,表示取消,还是上传(上传的话,在客户端运行sz命令与服务端交互)。

可以看到在上述流程中,对Terminal的要求就是,遇到特殊指令,触发对应的操作(执行本地命令)

由于macOS自带的Terminal.app不支持这个,所以网上大部分教程都是使用iTerm2

如果你已经升级到最新的apple silicon比如M1/M2/M3/…
brew安装lrzsz的位置是在 /opt/homebrew/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
➜  ~ brew install lrzsz
==> Downloading https://formulae.brew.sh/api/formula.jws.json
##################################################################################################################### 100.0%
==> Downloading https://formulae.brew.sh/api/cask.jws.json
##################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/lrzsz/manifests/0.12.20_1
##################################################################################################################### 100.0%
==> Fetching lrzsz
==> Downloading https://ghcr.io/v2/homebrew/core/lrzsz/blobs/sha256:427b498d1c8853fdcd90bc96572f5f622c7c17b229101382fa235aad
##################################################################################################################### 100.0%
==> Pouring lrzsz--0.12.20_1.arm64_sonoma.bottle.tar.gz
🍺 /opt/homebrew/Cellar/lrzsz/0.12.20_1: 19 files, 660.0KB
==> Running `brew cleanup lrzsz`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

# 设置ln软连接修复问题
ln -s /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/rz /usr/local/bin/rz
ln -s /opt/homebrew/Cellar/lrzsz/0.12.20_1/bin/sz /usr/local/bin/sz

安装lrzsz

1
2
3
4
5
6
brew install lrzsz

==> Downloading https://homebrew.bintray.com/bottles/lrzsz-0.12.20_1.catalina.bottle.tar.gz
######################################################################## 100.0%
==> Pouring lrzsz-0.12.20_1.catalina.bottle.tar.gz
🍺 /usr/local/Cellar/lrzsz/0.12.20_1: 18 files, 473.9KB
  1. Install lrzsz on OSX: brew install lrzsz
  2. Save the iterm2-send-zmodem.sh and iterm2-recv-zmodem.sh scripts in /usr/local/bin/
  3. Set up Triggers in iTerm 2 like so:
    How to Create a Trigger
1
2
3
4
5
6
7
8
9
Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

To send a file to a remote machine:

  1. Type rz on the remote machine
  2. Select the file(s) on the local machine to send
  3. Wait for the coprocess indicator to disappear

The receive a file from a remote machine

  1. Type sz filename1 filename2 … filenameN on the remote machine
  2. Select the folder to receive to on the local machine
  3. Wait for the coprocess indicator to disappear

安装执行脚本

iterm2-send-zmodem.shiterm2-recv-zmodem.sh保存到/usr/local/bin目录下。

iterm2-send-zmodem.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
FILE=$(osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
else
FILE=$(osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
fi
if [[ $FILE = "" ]]; then
echo Cancelled.
# Send ZModem cancel
echo -e \\x18\\x18\\x18\\x18\\x18
sleep 1
echo
echo \# Cancelled transfer
else
/usr/local/bin/sz "$FILE" --escape --binary --bufsize 4096
sleep 1
echo
echo \# Received "$FILE"
fi

iterm2-recv-zmodem.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
FILE=$(osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
else
FILE=$(osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")")
fi

if [[ $FILE = "" ]]; then
echo Cancelled.
# Send ZModem cancel
echo -e \\x18\\x18\\x18\\x18\\x18
sleep 1
echo
echo \# Cancelled transfer
else
cd "$FILE"
/usr/local/bin/rz --rename --escape --binary --bufsize 4096
sleep 1
echo
echo
echo \# Sent \-\> $FILE
fi
1
2
3
4
5
6
7
8
# 在/usr/loal/bin 目录下创建两个文件
cd /usr/local/bin
wget https://raw.githubusercontent.com/RobberPhex/iterm2-zmodem/master/iterm2-recv-zmodem.sh
wget https://raw.githubusercontent.com/RobberPhex/iterm2-zmodem/master/iterm2-send-zmodem.sh

# 赋予这两个文件可执行权限
chmod 777 /usr/local/bin/iterm2-*

设置Iterm2的Tirgger特性

配置好配置文件之后,开始对iTerm2进行配置

点击 iTerm2 的设置界面 Perference-> Profiles -> Default -> Advanced -> Triggers 的 Edit 按钮,加入以下配置

添加两条trigger,分别设置 Regular expression,Action,Parameters,Instant如下:

1
2
3
4
5
6
7
8
9
Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

使用rz和sz

前提是客户端也要安装lrzsz

  • rz 上传功能
    • 在bash中,也就是iTerm2终端输入rz 就会弹出文件选择框,选择文件 choose 就开始上传,会上传到当前目录
    • rz中的r意为received(接收),告诉客户端,我(服务器)要接收文件 received by cilent,就等同于客户端在上传。
  • sz 下载功能
    • sz fileName(你要下载的文件的名字) 回车,会弹出窗体 我们选择要保存的地方即可。
    • sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sz用法:

下载一个文件
sz filename

下载多个文件
sz filename1 filename2

下载dir目录下的所有文件,不包含dir下的文件夹
sz dir/*

rz用法:

输入rz回车后,会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。


-b 以二进制方式,默认为文本方式。(Binary (tell it like it is) file transfer override.)

-e 对所有控制字符转义。(Force sender to escape all control characters; normally XON, XOFF, DLE, CR-@-CR, and Ctrl-X are escaped.)

果要保证上传的文件内容在服务器端保存之后与原始文件一致,最好同时设置这两个标志,如下所示方式使用:

rz -be

备注说明

  1. rz与sz只适合小的文件传输,大文件还是使用Filezilla与xftp等工具进行传输;
  2. 只能传输文件,而不能传输文件夹;
  3. 不是所有工具都支持rz与sz,必须支持ZModem协议才行,例如putty不能使用rz与sz。

参考文章

macOS下使用ZMODEM协议上传/下载文件

ZModem integration for iTerm 2

通过SecureCRT的rz、sz和sftp实现文件的上传和下载