[{"data":1,"prerenderedAt":5201},["ShallowReactive",2],{"all-posts":3},[4,59,1087,1156,1315,1614,1894,1930,2003,2030,2083,2102,2157,2172,2309,2427,2446,2863,2953,3011,3076,3346,3573,4543,4593,4842,5123,5163],{"id":5,"title":6,"body":7,"categories":48,"date":50,"description":51,"extension":52,"meta":53,"navigation":54,"path":55,"seo":56,"stem":57,"__hash__":58},"content\u002Fblog\u002F00-hello-world.md","Hello World",{"type":8,"value":9,"toc":44},"minimark",[10,14,17,20,23,26,29,32,35,38,41],[11,12,13],"p",{},"古往今来按照传统,不论广厦还是草屋，落成之际总是要写点什么的，以示纪念。",[11,15,16],{},"既如此，xwill.cn(更新：x-will.cn 做备用了)搭建起来，这\"hello world\"也就在情理之中了。",[11,18,19],{},"个人的一片小天地。没有主题,任意记录,按照自己的想法去尝试。",[11,21,22],{},"如果以餐饮业来论，我们程序员差不多就是厨子。不管是在星级酒店后厨炒菜，亦或在巷间小馆掌勺，终归会梦想自己开间自己的店。",[11,24,25],{},"想来，从接触第一行printf 到现今也差不多10个年头了。天生愚钝又不够勤奋，在0-1的世界里管中窥豹数年，门门道道还是没那么清楚。加之IT技术之发展如比迅猛。在前后端那些刚刚知晓些皮毛而沾沾自喜之际，分布式\u002F高并发\u002F大数据\u002F云计算\u002FAI已经铺天盖地。",[11,27,28],{},"随着年岁的增长,人到中年生活的压力也无法免除。这无疑又加重了厨子的焦虑。\n偶然间同事谈论云主机优惠活动，一个瞬间的念头，也买了下来。想这念头大概是那个时候埋下了要炒最牛B的菜还要有间大酒店，到如今还没熄灭吧。",[11,30,31],{},"有了这个小破站，也差不多自己有了自己的门脸。按眼前这样子，最多算个大排档的摊点。",[11,33,34],{},"无碍，无妨。",[11,36,37],{},"现如今的我大抵只要，一个人去菜场挑土豆，青椒，洗切上锅，盛盘。",[11,39,40],{},"能够整出点能吃的东西，简单美味足矣。",[11,42,43],{},"那，就先支棱起来～～～",{"title":45,"searchDepth":46,"depth":46,"links":47},"",2,[],[49],"随笔杂记","2021-01-11","1st, but not important","md",{},true,"\u002Fblog\u002F00-hello-world",{"title":6,"description":51},"blog\u002F00-hello-world","WpVrBPhzCr0mLquaf30MHvK2AbadHAynEXayfcvWT_w",{"id":60,"title":61,"body":62,"categories":1078,"date":1080,"description":1081,"extension":52,"meta":1082,"navigation":54,"path":1083,"seo":1084,"stem":1085,"__hash__":1086},"content\u002Fblog\u002F01-blog_construction.md","blog搭建",{"type":8,"value":63,"toc":1075},[64,67,75,117,124,129,132,163,166,170,185,213,222,229,234,292,298,301,306,330,341,355,358,458,463,526,529,533,536,541,562,567,570,605,619,622,645,648,665,668,682,685,738,743,751,754,762,767,893,897,903,907,910,919,922,928,931,992,994,997,1000,1003,1006,1009,1012,1014,1017,1022,1025,1057,1059,1062,1064,1071],[11,65,66],{},"刚搭起来，趁着热乎劲，做个记录.",[11,68,69,70,74],{},"记得，从开始打算搭建自己的博客那一刻起，你就是这个网站的",[71,72,73],"strong",{},"cto","了。",[76,77,78,82,85,102,105,108,111,114],"ul",{},[79,80,81],"li",{},"注册域名，购买云主机(管局备案)",[79,83,84],{},"域名添加dns解析，a地址到云主机提供的外网ip",[79,86,87,88],{},"云主机设置\n",[76,89,90,93,96,99],{},[79,91,92],{},"ssh登陆：",[79,94,95],{},"下载安装 openresty",[79,97,98],{},"修改or配置文件 & 新建一个server的配置文件",[79,100,101],{},"下载 certbot，生成证书。 配置到 新建的or server配置文件中",[79,103,104],{},"hugo 安装",[79,106,107],{},"下载git，添加 ssh-key到 github",[79,109,110],{},"挑选hugo主题，下载到theme文件夹",[79,112,113],{},"本机安装hugo + 下载主题。调试+写文",[79,115,116],{},"rsync public文件夹到远程主机",[118,119,121],"h3",{"id":120},"details",[122,123,120],"em",{},[125,126,128],"h4",{"id":127},"ssh-登陆","ssh 登陆",[11,130,131],{},"下载云主机秘钥到本机；",[133,134,140],"pre",{"className":135,"code":136,"highlights":137,"language":139,"meta":45,"style":45},"language-bash shiki shiki-themes github-light github-dark","ssh -i  本机路径\u002F秘钥   root@云主机外网ip\n",[138,138],0,"bash",[141,142,143],"code",{"__ignoreMap":45},[144,145,148,152,156,160],"span",{"class":146,"line":147},"line",1,[144,149,151],{"class":150},"sScJk","ssh",[144,153,155],{"class":154},"sj4cs"," -i",[144,157,159],{"class":158},"sZZnC","  本机路径\u002F秘钥",[144,161,162],{"class":158},"   root@云主机外网ip\n",[11,164,165],{},"  还可以参考云主机相关帮助文档",[125,167,169],{"id":168},"安装openresty-并配置","安装openresty 并配置",[76,171,172,182],{},[79,173,174,181],{},[175,176,180],"a",{"href":177,"rel":178},"https:\u002F\u002Fopenresty.org\u002Fcn\u002Flinux-packages.html",[179],"nofollow","安装文档"," 有详细linux系统安装命令，登陆云主机依葫芦画瓢执行即可",[79,183,184],{},"安装完毕查看",[133,186,189],{"className":135,"code":187,"highlights":188,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ openresty -v\nnginx version: openresty\u002F1.19.3.1\n",[138,138],[141,190,191,202],{"__ignoreMap":45},[144,192,193,196,199],{"class":146,"line":147},[144,194,195],{"class":150},"ubuntu@VM-4-5-ubuntu:~$",[144,197,198],{"class":158}," openresty",[144,200,201],{"class":154}," -v\n",[144,203,204,207,210],{"class":146,"line":46},[144,205,206],{"class":150},"nginx",[144,208,209],{"class":158}," version:",[144,211,212],{"class":158}," openresty\u002F1.19.3.1\n",[11,214,215,218,219],{},[141,216,217],{},"openresty -V"," (大写) 可查看编译的支持的模块，和一些已经设置的默认配置值: ",[141,220,221],{},"--prefix=\u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx",[11,223,224,225,228],{},"  ",[141,226,227],{},"ubuntu@VM-4-5-ubuntu:~$ sudo openresty"," 启动or，就可以在浏览器访问了域名了。 一切正常就是默认的 or欢迎页",[76,230,231],{},[79,232,233],{},"修改配置文件",[133,235,238],{"className":135,"code":236,"highlights":237,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ mkdir or_conf  \u002F\u002F 新建一个我们自己的server配置文件\nubuntu@VM-4-5-ubuntu:~$ cd or_conf\nubuntu@VM-4-5-ubuntu:~\u002For_conf$ touch myserver.conf\nubuntu@VM-4-5-ubuntu:~$ sudo vi \u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx\u002Fconf\u002Fnginx.conf\n",[138,138],[141,239,240,256,266,278],{"__ignoreMap":45},[144,241,242,244,247,250,253],{"class":146,"line":147},[144,243,195],{"class":150},[144,245,246],{"class":158}," mkdir",[144,248,249],{"class":158}," or_conf",[144,251,252],{"class":158},"  \u002F\u002F",[144,254,255],{"class":158}," 新建一个我们自己的server配置文件\n",[144,257,258,260,263],{"class":146,"line":46},[144,259,195],{"class":150},[144,261,262],{"class":158}," cd",[144,264,265],{"class":158}," or_conf\n",[144,267,269,272,275],{"class":146,"line":268},3,[144,270,271],{"class":150},"ubuntu@VM-4-5-ubuntu:~\u002For_conf$",[144,273,274],{"class":158}," touch",[144,276,277],{"class":158}," myserver.conf\n",[144,279,281,283,286,289],{"class":146,"line":280},4,[144,282,195],{"class":150},[144,284,285],{"class":158}," sudo",[144,287,288],{"class":158}," vi",[144,290,291],{"class":158}," \u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx\u002Fconf\u002Fnginx.conf\n",[293,294,295],"ol",{},[79,296,297],{},"启用user,并改为root.不然后续访问文件等，启动的worker进程可能权限问题。有403的error : forbidden (13: Permission denied)",[11,299,300],{}," \t#user  nobody;  ==>  user root;",[293,302,303],{"start":46},[79,304,305],{},"http 块最后添加我们server配置的引用",[133,307,310],{"className":135,"code":308,"highlights":309,"language":139,"meta":45,"style":45},"include \u002Fhome\u002Fubuntu\u002For_conf\u002F*.conf;\n",[138,138],[141,311,312],{"__ignoreMap":45},[144,313,314,317,320,323,326],{"class":146,"line":147},[144,315,316],{"class":150},"include",[144,318,319],{"class":158}," \u002Fhome\u002Fubuntu\u002For_conf\u002F",[144,321,322],{"class":154},"*",[144,324,325],{"class":158},".conf",[144,327,329],{"class":328},"sVt8B",";\n",[293,331,332,335,338],{"start":268},[79,333,334],{},"注释掉server",[79,336,337],{},"关闭，保存",[79,339,340],{},"修改 myserver.conf",[133,342,345],{"className":135,"code":343,"highlights":344,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~\u002For_conf$ vi myserver.conf\n",[138,138],[141,346,347],{"__ignoreMap":45},[144,348,349,351,353],{"class":146,"line":147},[144,350,271],{"class":150},[144,352,288],{"class":158},[144,354,277],{"class":158},[11,356,357],{},"  以域名 abc.com为例",[133,359,362],{"className":135,"code":360,"highlights":361,"language":139,"meta":45,"style":45},"server {\n    listen 80 default；\n    server_name  abc.com;\n\n    location \u002F {\n        default_type  text\u002Fhtml;\n        content_by_lua_block {\n            ngx.say(\"this is helloworld test\")\n        }\n    }\n}\n",[138,138],[141,363,364,372,383,393,398,409,420,428,440,446,452],{"__ignoreMap":45},[144,365,366,369],{"class":146,"line":147},[144,367,368],{"class":150},"server",[144,370,371],{"class":158}," {\n",[144,373,374,377,380],{"class":146,"line":46},[144,375,376],{"class":150},"    listen",[144,378,379],{"class":154}," 80",[144,381,382],{"class":158}," default；\n",[144,384,385,388,391],{"class":146,"line":268},[144,386,387],{"class":150},"    server_name",[144,389,390],{"class":158},"  abc.com",[144,392,329],{"class":328},[144,394,395],{"class":146,"line":280},[144,396,397],{"emptyLinePlaceholder":54},"\n",[144,399,401,404,407],{"class":146,"line":400},5,[144,402,403],{"class":150},"    location",[144,405,406],{"class":158}," \u002F",[144,408,371],{"class":158},[144,410,412,415,418],{"class":146,"line":411},6,[144,413,414],{"class":150},"        default_type",[144,416,417],{"class":158},"  text\u002Fhtml",[144,419,329],{"class":328},[144,421,423,426],{"class":146,"line":422},7,[144,424,425],{"class":150},"        content_by_lua_block",[144,427,371],{"class":158},[144,429,431,434,437],{"class":146,"line":430},8,[144,432,433],{"class":150},"            ngx.say(",[144,435,436],{"class":150},"\"this is helloworld test\"",[144,438,439],{"class":328},")\n",[144,441,443],{"class":146,"line":442},9,[144,444,445],{"class":328},"        }\n",[144,447,449],{"class":146,"line":448},10,[144,450,451],{"class":328},"    }\n",[144,453,455],{"class":146,"line":454},11,[144,456,457],{"class":328},"}\n",[293,459,460],{"start":411},[79,461,462],{},"测试一下",[133,464,467],{"className":135,"code":465,"highlights":466,"language":139,"meta":45,"style":45},"        ubuntu@VM-4-5-ubuntu:~\u002For_conf$ sudo openresty -t\n        nginx: the configuration file \u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx\u002Fconf\u002Fnginx.conf syntax is ok\n    nginx: configuration file \u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx\u002Fconf\u002Fnginx.conf test is successful\n",[138,138],[141,468,469,481,507],{"__ignoreMap":45},[144,470,471,474,476,478],{"class":146,"line":147},[144,472,473],{"class":150},"        ubuntu@VM-4-5-ubuntu:~\u002For_conf$",[144,475,285],{"class":158},[144,477,198],{"class":158},[144,479,480],{"class":154}," -t\n",[144,482,483,486,489,492,495,498,501,504],{"class":146,"line":46},[144,484,485],{"class":150},"        nginx:",[144,487,488],{"class":158}," the",[144,490,491],{"class":158}," configuration",[144,493,494],{"class":158}," file",[144,496,497],{"class":158}," \u002Fusr\u002Flocal\u002Fopenresty\u002Fnginx\u002Fconf\u002Fnginx.conf",[144,499,500],{"class":158}," syntax",[144,502,503],{"class":158}," is",[144,505,506],{"class":158}," ok\n",[144,508,509,512,514,516,518,521,523],{"class":146,"line":268},[144,510,511],{"class":150},"    nginx:",[144,513,491],{"class":158},[144,515,494],{"class":158},[144,517,497],{"class":158},[144,519,520],{"class":158}," test",[144,522,503],{"class":158},[144,524,525],{"class":158}," successful\n",[11,527,528],{},"   再浏览器访问，正确响应就是我们的\"this is helloworld test\"  \u002F\u002F 浏览器可能会有缓存，记得清除",[125,530,532],{"id":531},"使用certbot生成证书-和-配置https","使用certbot生成证书 和 配置https",[11,534,535],{},"先关闭nginx: sudo openresty -s stop",[293,537,538],{},[79,539,540],{},"安装certbot",[133,542,545],{"className":135,"code":543,"highlights":544,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ sudo apt install certbot\n",[138,138],[141,546,547],{"__ignoreMap":45},[144,548,549,551,553,556,559],{"class":146,"line":147},[144,550,195],{"class":150},[144,552,285],{"class":158},[144,554,555],{"class":158}," apt",[144,557,558],{"class":158}," install",[144,560,561],{"class":158}," certbot\n",[293,563,564],{"start":46},[79,565,566],{},"获取证书",[11,568,569],{},"以 域名 abc.com 为例",[133,571,574],{"className":135,"code":572,"highlights":573,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ sudo certbot certonly --manual -d \"abc.com\" -d \"*.abc.com\"--preferred-challenges dns\n",[138,138],[141,575,576],{"__ignoreMap":45},[144,577,578,580,582,585,588,591,594,597,599,602],{"class":146,"line":147},[144,579,195],{"class":150},[144,581,285],{"class":158},[144,583,584],{"class":158}," certbot",[144,586,587],{"class":158}," certonly",[144,589,590],{"class":154}," --manual",[144,592,593],{"class":154}," -d",[144,595,596],{"class":158}," \"abc.com\"",[144,598,593],{"class":154},[144,600,601],{"class":158}," \"*.abc.com\"--preferred-challenges",[144,603,604],{"class":158}," dns\n",[76,606,607,610,613,616],{},[79,608,609],{},"certonly  只为域名申请证书",[79,611,612],{},"--manual  不使用certbot的若干插件",[79,614,615],{},"-d: 证书申请域名。可指定多个",[79,617,618],{},"--preferred-challenges 优先使用域名所有权的校验方式。可设置参数值：http\u002Fdns (后续需要使用)\nhttp 需要再web根目录下\u002F.well-known\u002Facme-challenge\u002F 放置指定文件供访问;\ndns 需要配置dns解析 以 _acme-challenge 开头的文件值。",[11,620,621],{},"执行了命令后,会有交互操作:",[76,623,624,627,630,633,636,639,642],{},[79,625,626],{},"填邮箱地址。 (符合邮件格式即可)",[79,628,629],{},"同意",[79,631,632],{},"确认信息鸭",[79,634,635],{},"生成了一个 dns的 TXT解析记录。 到这一步后，需要把 解析记录填到你的域名解析里。",[79,637,638],{},"在dns 解析中增加 _acme-challenge.abc.com  值为certbot生成的",[79,640,641],{},"本地机器(或者另一个终端) 使用命令查看是否生效\nnslookup -q=txt _acme-challenge.abc.com",[79,643,644],{},"最后生成证书。目录 \u002Fetc\u002Fletsencrypt\u002Flive\u002Fabc.com\u002F",[11,646,647],{},"查看证书",[133,649,652],{"className":135,"code":650,"highlights":651,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ sudo certbot certificates\n",[138,138],[141,653,654],{"__ignoreMap":45},[144,655,656,658,660,662],{"class":146,"line":147},[144,657,195],{"class":150},[144,659,285],{"class":158},[144,661,584],{"class":158},[144,663,664],{"class":158}," certificates\n",[11,666,667],{},"运行后会打印:",[76,669,670,673,676,679],{},[79,671,672],{},"证书名",[79,674,675],{},"证书包含域名",[79,677,678],{},"过期时间啊",[79,680,681],{},"路径 等等等",[11,683,684],{},"证书续期\n重新运行创建证书命令，会根据已经存在证书自动renew\n重复更新 dns解析 txt文档值 （再新建一下，填入新生成字符串）",[133,686,689],{"className":135,"code":687,"highlights":688,"language":139,"meta":45,"style":45},"ubuntu@VM-4-5-ubuntu:~$ sudo certbot certonly --manual -d \"abc.com\" -d \"*.abc.com\"--preferred-challenges dns\n -----不要----- ubuntu@VM-4-5-ubuntu:~$ sudo certbot renew --cert-name  xxxx.com\n",[138,138],[141,690,691,713],{"__ignoreMap":45},[144,692,693,695,697,699,701,703,705,707,709,711],{"class":146,"line":147},[144,694,195],{"class":150},[144,696,285],{"class":158},[144,698,584],{"class":158},[144,700,587],{"class":158},[144,702,590],{"class":154},[144,704,593],{"class":154},[144,706,596],{"class":158},[144,708,593],{"class":154},[144,710,601],{"class":158},[144,712,604],{"class":158},[144,714,715,718,721,724,727,729,732,735],{"class":146,"line":46},[144,716,717],{"class":150}," -----不要-----",[144,719,720],{"class":158}," ubuntu@VM-4-5-ubuntu:~",[144,722,723],{"class":328},"$ ",[144,725,726],{"class":158},"sudo",[144,728,584],{"class":158},[144,730,731],{"class":158}," renew",[144,733,734],{"class":154}," --cert-name",[144,736,737],{"class":158},"  xxxx.com\n",[76,739,740],{},[79,741,742],{},"--cert-name 指定续期的证书名。查看证书中打印的Certificate Name:\n证书更新成功\n提示",[133,744,749],{"className":745,"code":747,"language":748},[746],"language-text","IMPORTANT NOTES:\n - Congratulations! Your certificate and chain have been saved at:\n   \u002Fetc\u002Fletsencrypt\u002Flive\u002F你的域名\u002Ffullchain.pem\n   Your key file has been saved at:\n   \u002Fetc\u002Fletsencrypt\u002Flive\u002F你的域名\u002Fprivkey.pem\n   Your cert will expire on 新-的-时间. To obtain a new or tweaked\n   version of this certificate in the future, simply run certbot\n   again. To non-interactively renew *all* of your certificates, run\n   \"certbot renew\"\n - If you like Certbot, please consider supporting our work by:\n","text",[141,750,747],{"__ignoreMap":45},[11,752,753],{},"最后需要nginx reload",[11,755,756,757],{},"其他证书相关管理，添加域名啊，强制更新啊之类的操作可参看certbot ",[175,758,761],{"href":759,"rel":760},"https:\u002F\u002Fcertbot.eff.org\u002Fdocs\u002Fusing.html#",[179],"官方文档",[293,763,764],{"start":268},[79,765,766],{},"配置or https",[133,768,771],{"className":135,"code":769,"highlights":770,"language":139,"meta":45,"style":45},"    server {\n        listen 443 ssl;\n        server_name  abc.com;\n\n        # 填 刚申请域名的证书路径(比如:abc.com)\n        ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fabc.com\u002Ffullchain.pem;\n        ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fabc.com\u002Fprivkey.pem;\n\n    }\n    server {\n        listen 80 default;\n        server_name abc.com;\n\n        return 301 https:\u002F\u002Fabc.com$request_uri;\n    }\n",[138,138],[141,772,773,780,793,802,806,812,822,832,836,840,846,857,867,872,888],{"__ignoreMap":45},[144,774,775,778],{"class":146,"line":147},[144,776,777],{"class":150},"    server",[144,779,371],{"class":158},[144,781,782,785,788,791],{"class":146,"line":46},[144,783,784],{"class":150},"        listen",[144,786,787],{"class":154}," 443",[144,789,790],{"class":158}," ssl",[144,792,329],{"class":328},[144,794,795,798,800],{"class":146,"line":268},[144,796,797],{"class":150},"        server_name",[144,799,390],{"class":158},[144,801,329],{"class":328},[144,803,804],{"class":146,"line":280},[144,805,397],{"emptyLinePlaceholder":54},[144,807,808],{"class":146,"line":400},[144,809,811],{"class":810},"sJ8bj","        # 填 刚申请域名的证书路径(比如:abc.com)\n",[144,813,814,817,820],{"class":146,"line":411},[144,815,816],{"class":150},"        ssl_certificate",[144,818,819],{"class":158}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fabc.com\u002Ffullchain.pem",[144,821,329],{"class":328},[144,823,824,827,830],{"class":146,"line":422},[144,825,826],{"class":150},"        ssl_certificate_key",[144,828,829],{"class":158}," \u002Fetc\u002Fletsencrypt\u002Flive\u002Fabc.com\u002Fprivkey.pem",[144,831,329],{"class":328},[144,833,834],{"class":146,"line":430},[144,835,397],{"emptyLinePlaceholder":54},[144,837,838],{"class":146,"line":442},[144,839,451],{"class":328},[144,841,842,844],{"class":146,"line":448},[144,843,777],{"class":150},[144,845,371],{"class":158},[144,847,848,850,852,855],{"class":146,"line":454},[144,849,784],{"class":150},[144,851,379],{"class":154},[144,853,854],{"class":158}," default",[144,856,329],{"class":328},[144,858,860,862,865],{"class":146,"line":859},12,[144,861,797],{"class":150},[144,863,864],{"class":158}," abc.com",[144,866,329],{"class":328},[144,868,870],{"class":146,"line":869},13,[144,871,397],{"emptyLinePlaceholder":54},[144,873,875,879,882,885],{"class":146,"line":874},14,[144,876,878],{"class":877},"szBVR","        return",[144,880,881],{"class":154}," 301",[144,883,884],{"class":158}," https:\u002F\u002Fabc.com",[144,886,887],{"class":328},"$request_uri;\n",[144,889,891],{"class":146,"line":890},15,[144,892,451],{"class":328},[125,894,896],{"id":895},"云主机上ssh-key-配置到-github","云主机上ssh-key 配置到 github",[133,898,901],{"className":899,"code":900,"language":748},[746],"在云主机上使用 ssh-keygen 生成 SSH key\n    ssh-keygen -o -t rsa -C \"email@example.com\"  \u002F\u002F一路enter, 生成密钥文件目录: \u002Fhome\u002Fxxxxx\u002F.ssh\u002F\n    -o 强制生成 OpenSSH格式 key\n    -t 设置 SSH-key 类型\n    -C 添加邮件为metadata做备注, 添加到public key文件的末尾\n\n登陆github, setting -- SSH and GPG keyss -- New SSH key, 复制已经生成的 .ssh\u002Fid_rsa.pub文件内容即可\n",[141,902,900],{"__ignoreMap":45},[125,904,906],{"id":905},"rsync-同步","rsync 同步",[11,908,909],{},"rsync -av source\u002F  username@remote_host:destination",[11,911,912,913,918],{},"  这篇",[175,914,917],{"href":915,"rel":916},"http:\u002F\u002Fwww.ruanyifeng.com\u002Fblog\u002F2020\u002F08\u002Frsync.html",[179],"rsync教程","讲的清楚详细，可参看",[125,920,921],{"id":921},"last",[133,923,926],{"className":924,"code":925,"language":748},[746],"以上, 有错误的地方或者任何疑问,请联系 email\n",[141,927,925],{"__ignoreMap":45},[929,930],"hr",{},[133,932,937],{"className":933,"code":934,"highlights":935,"language":936,"meta":45,"style":45},"language-go shiki shiki-themes github-light github-dark","    \u002F\u002F comment\n    \u002F*\n       another\n       markdown 格式测试\n    *\u002F\n    func Test(name string) bool {\n        if name == \"hello\" {\n            return true\n        }\n        return false\n    }\n",[138,138],"go",[141,938,939,944,949,954,959,964,969,974,979,983,988],{"__ignoreMap":45},[144,940,941],{"class":146,"line":147},[144,942,943],{},"    \u002F\u002F comment\n",[144,945,946],{"class":146,"line":46},[144,947,948],{},"    \u002F*\n",[144,950,951],{"class":146,"line":268},[144,952,953],{},"       another\n",[144,955,956],{"class":146,"line":280},[144,957,958],{},"       markdown 格式测试\n",[144,960,961],{"class":146,"line":400},[144,962,963],{},"    *\u002F\n",[144,965,966],{"class":146,"line":411},[144,967,968],{},"    func Test(name string) bool {\n",[144,970,971],{"class":146,"line":422},[144,972,973],{},"        if name == \"hello\" {\n",[144,975,976],{"class":146,"line":430},[144,977,978],{},"            return true\n",[144,980,981],{"class":146,"line":442},[144,982,445],{},[144,984,985],{"class":146,"line":448},[144,986,987],{},"        return false\n",[144,989,990],{"class":146,"line":454},[144,991,451],{},[929,993],{},[11,995,996],{},"首先得确定下大概怎么干这件事。随便一搜有很多的方案，当然有更多的教程。囫囵个大概。",[11,998,999],{},"本着满足核心需求即可，选， nginx + hugo（nginx做web服务，hugo来生成静态页面文件。）",[11,1001,1002],{},"nginx：有了解的基础。方便支持https。无需开发就完全cover响应静态页面的web",[11,1004,1005],{},"  讲道理，生成静态页面，很多框架都可以。hexo，hugo。。。。此处如果有熟悉的，选熟悉的更好。\n选hugo，一来较新go语言开发(假想自己以后可以追源码)。二来，轻简，当然官网上可选主题大都简陋（花花绿绿的不符合后端程序员的审美。）\n三，无他",[11,1007,1008],{},"  相信我，注册了域名，买了云主机，会加强开发动力。",[11,1010,1011],{},"  相信我，没有云主机，本地服务也可以完成所有开发和效果展示。",[929,1013],{},[11,1015,1016],{},"遇到的问题：",[76,1018,1019],{},[79,1020,1021],{},"文章的排版，简直惨不忍睹。代码块， markdown的正确使用迫在眉睫",[11,1023,1024],{},"还要做些什么？",[76,1026,1027,1030,1033,1036,1039,1042,1045,1048,1051,1054],{},[79,1028,1029],{},"or 日志完善",[79,1031,1032],{},"session 在前后交互的使用 --> 用户信息挂钩(设备id？)",[79,1034,1035],{},"文章索引",[79,1037,1038],{},"页面内位置跳转",[79,1040,1041],{},"回到顶部",[79,1043,1044],{},"点赞功能(交互页面的行为。)",[79,1046,1047],{},"留言 （插件，三方等等）",[79,1049,1050],{},"理解hugo，定制前端",[79,1052,1053],{},"访问路径\u002F二级域名使用",[79,1055,1056],{},"访问日志。服务器安全",[929,1058],{},[11,1060,1061],{},"做个自己的云盘，上传，下载\n爬虫 --> 考据\n大芒果 MaNGOS VS TrinityCore\nelectron\nreact",[929,1063],{},[11,1065,1066],{},[175,1067,1070],{"href":1068,"rel":1069},"https:\u002F\u002Fcloud.tencent.com\u002Fact\u002Fcps\u002Fredirect?redirect=10488&cps_key=2d60d337ba24d09654f0c08bf58ee784&from=activity",[179],"企鹅云",[1072,1073,1074],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":45,"searchDepth":46,"depth":46,"links":1076},[1077],{"id":120,"depth":268,"text":120},[1079],"tips","2021-01-01","从0-1的流水账记录",{},"\u002Fblog\u002F01-blog_construction",{"title":61,"description":1081},"blog\u002F01-blog_construction","baQgshrzBjd1nd_S7IA0o669LwrWsYxl8xtnGg5r3iA",{"id":1088,"title":1089,"body":1090,"categories":1148,"date":1149,"description":1150,"extension":52,"meta":1151,"navigation":54,"path":1152,"seo":1153,"stem":1154,"__hash__":1155},"content\u002Fblog\u002F02-bit.md","位运算",{"type":8,"value":1091,"toc":1146},[1092,1095,1110,1113,1116,1119,1122,1125,1128,1131,1134,1137,1140,1143],[11,1093,1094],{},"字符 大小写的转换",[76,1096,1097,1100,1107],{},[79,1098,1099],{},"转小写 | 和空格\n('a'| '') = 'a'\n('A'| '') = 'a'",[79,1101,1102,1103,1106],{},"转大写 & 和下划线\n('a'& '",[122,1104,1105],{},"') = 'A'\n('A'& '","') = 'A'",[79,1108,1109],{},"大小写互转 异或^ 和 空格\n('a' ^ '') = 'A'\n('A' ^ '') = 'a'",[11,1111,1112],{},"异或(^): 相同为0, 不同为1 --> 不进位加法",[11,1114,1115],{},"x最右边的n位清零  :  x & (~0 \u003C\u003C n)",[11,1117,1118],{},"获取第n位的值    : (x >> n) & 1",[11,1120,1121],{},"获取第n位的幂值  : x & (1 \u003C\u003C n)",[11,1123,1124],{},"仅将第n位置1    :  x | (1 \u003C\u003C n)",[11,1126,1127],{},"仅将第n位置0    :  x & (~(1\u003C\u003Cn))",[11,1129,1130],{},"最高位至第n位清零 :  x & ((1\u003C\u003Cn)-1)",[11,1132,1133],{},"判断奇偶:  x&1 == 1 (奇) x&1 == 0 (偶)",[11,1135,1136],{},"x >> 1 : x\u002F2",[11,1138,1139],{},"清零最低位的1: x= x&(x-1)",[11,1141,1142],{},"取得最低位的1: x&(-(x-1)",[11,1144,1145],{},"x & ~x =>0",{"title":45,"searchDepth":46,"depth":46,"links":1147},[],[1079],"2021-01-03","举个栗子,方便查找",{},"\u002Fblog\u002F02-bit",{"title":1089,"description":1150},"blog\u002F02-bit","eSbZ12yT95fbPvIs3PGXXlDTs-qJy12c7eqe0vlRLPc",{"id":1157,"title":1158,"body":1159,"categories":1307,"date":1308,"description":1309,"extension":52,"meta":1310,"navigation":54,"path":1311,"seo":1312,"stem":1313,"__hash__":1314},"content\u002Fblog\u002F03-regular.md","正则表达式",{"type":8,"value":1160,"toc":1305},[1161,1164,1170,1173,1176,1181,1184,1208,1211,1214,1217,1220,1226,1229,1235,1238,1244,1247,1253,1256,1259,1262,1265,1272,1289,1295,1302],[11,1162,1163],{},"开篇一条：",[133,1165,1168],{"className":1166,"code":1167,"language":748},[746],"`(https?|ftp|file):\u002F\u002F[-A-Za-z0-9+&@#\u002F%?=~_|!:,.;]+[-A-Za-z0-9+&@#\u002F%=~_|]`\n`((([A-Za-z]{3,9}:(?:\\\u002F\\\u002F)?)(?:[-;:&=\\+$,\\w]+@)?[A-Za-z0-9.-]+(:[0-9]+)?|(?:ww‌​w.|[-;:&=\\+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\\u002F[\\+~%\\\u002F.\\w-_]*)?\\??(?:[-\\+=&;%@.\\w_]*)#?‌​(?:[\\w]*))?)`\n",[141,1169,1167],{"__ignoreMap":45},[11,1171,1172],{},"通常看到正则总有火星文的感觉。其实正则就和我们打扑克一样，只要弄清楚了基本规则，也就能大致明白。至于高效优雅的耍起来，需要多理解练习。那就是下一个话题了。",[11,1174,1175],{},"开门见山:",[293,1177,1178],{},[79,1179,1180],{},"元字符\n|\n| :--:| :--\n| .  | 匹配除换行符以为的任意字符\n| \\w | 匹配字母，数字，下划线，汉字\n| \\s | 匹配任意空白符\n| \\d | 匹配数字\n| \\b | 匹配单词的开始或者结束\n| ^  | 匹配字符串的开始\n| $  | 匹配字符串的结束",[11,1182,1183],{},"注意以上w\u002Fs\u002Fd\u002Fb是小写字符。\n大写表示不同的含义。 或者更准确点，是非的含义。\n\\W  非字母，非数字，非下划线，非汉字的字符\n\\S  非空格的字符\n\\D  非数字的字符\n\\B  非单词的开始和结束（单词的中间）",[293,1185,1186,1189,1192,1195,1198],{"start":46},[79,1187,1188],{},"重复限定\n*, 0次or更多\n+, 1次or更多\n?, 0次or1次\n{n,m}, n次到m次\n重复限定是贪婪匹配。  \\d{3,6}   \u002F\u002F这个表示匹配3到6个数字，如果6个则匹配6个\n非贪婪(懒惰)\n语法： 重复限定幅号后面加 ?",[79,1190,1191],{},"组合\n() 为一个整体，内部可以 或这种，",[79,1193,1194],{},"转义",[79,1196,1197],{},"条件或\n|",[79,1199,1200,1201,1203,1204,1207],{},"区间\n",[144,1202],{},"   one of them 的意思，注意 ｜ 字符，即",[144,1205,1206],{},"a|b|c"," 指a\u002Fb\u002Fc\u002F｜ 4个字符中的一个",[11,1209,1210],{},"第二部分",[11,1212,1213],{},"零宽断言\n断言好懂，零宽的含义，可以理解为 断言语句在整个表达式里不占位置，只是用来标记位置，帮助准确匹配.",[11,1215,1216],{},"比如： \"a regular expression\" 要想匹配 regular 中的 re，但不能匹配 expression 中的 re",[11,1218,1219],{},"语法:",[133,1221,1224],{"className":1222,"code":1223,"language":748},[746],"?= pattern   正向先行 匹配pattern表达式前面的内容     可以写 re(?=gular)\n?\u003C=          正向后行 匹配pattern表达式后面\n?!           负向后行 匹配非pattern表达式的前面内容\n?\u003C!\n先行和后行\n正则表达式引擎在执行字符串和表达式匹配时，会从头到尾（从前到后）连续扫描字符串中的字符，\n设想有一个扫描指针指向字符边界处并随匹配过程移动。\n先行断言，是当扫描指针位于某处时，引擎会尝试匹配指针还未扫过的字符，先于指针到达该字符，故称为先行。\n后行断言，引擎会尝试匹配指针已扫过的字符，后于指针到达该字符，故称为后行。\n正向和负向\n\n不等于 (!=)、逻辑非 (!) 都是用 !号来表示，所以有 ! 号的形式表示不匹配、负向；\n将 ! 号换成 = 号，就表示匹配、正向。\n",[141,1225,1223],{"__ignoreMap":45},[11,1227,1228],{},"捕获  --> 匹配",[133,1230,1233],{"className":1231,"code":1232,"language":748},[746],"分组  --> ()\n\n给组号命名\u003Cname>\n    语法： (?\u003Cname>exp)\n",[141,1234,1232],{"__ignoreMap":45},[11,1236,1237],{},"反向引用",[133,1239,1242],{"className":1240,"code":1241,"language":748},[746],"捕获的捕获组，外部引用，内部引用即反向引用\n    语法：\\k \\number\n         \\k \\'name'  ?????\n",[141,1243,1241],{"__ignoreMap":45},[11,1245,1246],{},"贪婪 非贪婪",[133,1248,1251],{"className":1249,"code":1250,"language":748},[746],"多个贪婪的匹配权   ?????\n懒惰(非贪婪) 格式,后面加个 ？\n",[141,1252,1250],{"__ignoreMap":45},[11,1254,1255],{},"反义",[11,1257,1258],{},"前面的介绍，理解完，应该比较容易看懂别人的正则了。\n那么下面就是多写写正则，尝试用用规则，写的优雅高效些。",[11,1260,1261],{},"1>. 小括号()：匹配小括号内的字符串，可以是一个，也可以是多个，常跟“|”（或）符号搭配使用，是多选结构的",[11,1263,1264],{},"　　示例1：string name = \"way2014\";  regex：(way|zgw)  result：结果是可以匹配出way的，因为是多选结构，小括号是匹配字符串的",[11,1266,1267,1268,1271],{},"　　示例2：string text = \"123456789\";  regex：(0-9)　result：结果是什么都匹配不到的，它只匹配字符串\"0-9\"而不是匹配数字, ",[144,1269,1270],{},"0-9","这个字符组才是匹配0-9的数字",[11,1273,1274,1275,1277,1278,1281,1282,1284,1285,1288],{},"　2>.中括号",[144,1276],{},"：匹配字符组内的字符，比如咱们常用的",[144,1279,1280],{},"0-9a-zA-Z.*?!","等，在",[144,1283],{},"内的字符都是字符，不是元字符，比如“0-9”、“a-z”这中间的“-”就是连接符号，表示范围的元字符，如果写成",[144,1286,1287],{},"-!?*(","这样的话，就是普通字符",[11,1290,1291,1292,1294],{},"　　示例1： string text = \"1234567890\";  regex：",[144,1293,1270],{},"  result：结果是可以匹配出字符串text内的任意数字了，像上边的【或符号“|”在字符组内就是一个普通字符】",[11,1296,1297,1298,1301],{},"　　示例2：string text = \"a|e|s|v\";  regex：",[144,1299,1300],{},"a|e|s","  result：结果就是匹配字符a、e、|三个字符，这个跟(a|e|s)有区别的，区别就是(a|e|s)匹配的是a、e、s三个字符的随意一个，三个中的任意一个，这里的|是元字符",[11,1303,1304],{},"　3>.大括号{}：匹配次数，匹配在它之前表达式匹配出来的元素出现的次数，{n}出现n次、{n,}匹配最少出现n次、{n,m}匹配最少出现n次，最多出现m次",{"title":45,"searchDepth":46,"depth":46,"links":1306},[],[1079],"2021-01-04"," 火星文上路 ",{},"\u002Fblog\u002F03-regular",{"title":1158,"description":1309},"blog\u002F03-regular","E98AdssAJuwuYZ3_Dx8ZtenOp3QK1pEoWg4U7_4PX5I",{"id":1316,"title":1317,"body":1318,"categories":1601,"date":1603,"description":1604,"extension":52,"meta":1605,"navigation":54,"path":1610,"seo":1611,"stem":1612,"__hash__":1613},"content\u002Fblog\u002F04-poker.md","德州扑克",{"type":8,"value":1319,"toc":1595},[1320,1323,1326,1329,1364,1367,1370,1373,1405,1408,1411,1579,1581,1584,1587],[11,1321,1322],{},"德州扑克玩法上手",[118,1324,1325],{"id":1325},"基础玩法",[11,1327,1328],{},"一句话简单来讲，每人手上各自拿两张底牌，经过加注和发牌后，桌上5张公共牌，7张中的5张，组合成最大牌型比大小。或通过加注使其他对手弃牌退出。\n在到达最后一步中的过程中，会伴随几轮发牌和下注：",[293,1330,1331,1334,1337,1340,1343,1346,1349,1352,1355,1358,1361],{"start":138},[79,1332,1333],{},"确定庄家位(第一局可随机确定，以后每一局结束后，顺时针沿转给下一位),\n庄家位下一位为小盲位,再下一位为大盲位",[79,1335,1336],{},"小盲位\u002F大盲位，首先下注. 同时洗牌，切牌",[79,1338,1339],{},"按序发底牌(小盲位开始，每轮每人一张，发两轮)",[79,1341,1342],{},"开始第一轮(preflop圈)下注or弃牌\n（大盲位的下一位先说话，然后依次说话，直至玩家的下注额度都追平）",[79,1344,1345],{},"烧牌(burn card)后，发三张公共牌",[79,1347,1348],{},"第二轮(flop圈)下注（小盲位先说话-不加注\u002F加注\u002F弃牌，依次顺延，直至本轮下注金额追平）",[79,1350,1351],{},"烧牌后，发一张公共牌(转牌)",[79,1353,1354],{},"第三轮(turn圈)下注 (同5)",[79,1356,1357],{},"烧牌后，发一张公共牌(河牌)",[79,1359,1360],{},"第四轮(river圈)下注（同5）",[79,1362,1363],{},"最后摊牌，比大小",[11,1365,1366],{},"庄家，顺时针，下一位，小盲，大盲",[118,1368,1369],{"id":1369},"牌型比较",[11,1371,1372],{},"从大到小",[76,1374,1375,1378,1381,1384,1387,1390,1393,1396,1399,1402],{},[79,1376,1377],{},"皇家同花顺\t\troyal straight flush",[79,1379,1380],{},"同花顺\t\t\tstraight flush",[79,1382,1383],{},"四条 \t\t\tfour of a kind",[79,1385,1386],{},"葫芦 (3带2) \tfull house",[79,1388,1389],{},"同花 \t\t\tflush",[79,1391,1392],{},"顺子 \t\t\tstraight",[79,1394,1395],{},"三条 \t\t\tthree of a kind",[79,1397,1398],{},"两对\t\t\ttwo pair",[79,1400,1401],{},"对子\t\t\tpair",[79,1403,1404],{},"高牌\t\t\thigh-card\u002Fzitch",[118,1406,1407],{"id":1407},"一些术语",[11,1409,1410],{},"了解下，玩起来也Texas-style些",[1412,1413,1414,1426],"table",{},[1415,1416,1417],"thead",{},[1418,1419,1420,1424],"tr",{},[1421,1422],"th",{"align":1423},"left",[1421,1425],{"align":1423},[1427,1428,1429,1438,1446,1454,1462,1470,1478,1486,1494,1507,1515,1523,1531,1539,1547,1555,1563,1571],"tbody",{},[1418,1430,1431,1435],{},[1432,1433,1434],"td",{"align":1423},"shark",[1432,1436,1437],{"align":1423},"鲨鱼，一般指能够赢钱的高手",[1418,1439,1440,1443],{},[1432,1441,1442],{"align":1423},"fish",[1432,1444,1445],{"align":1423},"鱼， 指菜鸟玩家",[1418,1447,1448,1451],{},[1432,1449,1450],{"align":1423},"chip",[1432,1452,1453],{"align":1423},"筹码，通常以深度来形容筹码量",[1418,1455,1456,1459],{},[1432,1457,1458],{"align":1423},"pot",[1432,1460,1461],{"align":1423},"筹码池：玩家下注到桌上的筹码总和",[1418,1463,1464,1467],{},[1432,1465,1466],{"align":1423},"dealer",[1432,1468,1469],{"align":1423},"同button, 指 庄家",[1418,1471,1472,1475],{},[1432,1473,1474],{"align":1423},"blind",[1432,1476,1477],{"align":1423},"下盲注",[1418,1479,1480,1483],{},[1432,1481,1482],{"align":1423},"fold",[1432,1484,1485],{"align":1423},"盖牌，退出当前这一盘",[1418,1487,1488,1491],{},[1432,1489,1490],{"align":1423},"call",[1432,1492,1493],{"align":1423},"跟注：投入本轮其他玩家等量的筹码",[1418,1495,1496,1499],{},[1432,1497,1498],{"align":1423},"raise",[1432,1500,1501,1502,1506],{"align":1423},"加注：preflop(2bb",[1503,1504,1505],"del",{},"allin), flop (bb","allin);",[1418,1508,1509,1512],{},[1432,1510,1511],{"align":1423},"reraise",[1432,1513,1514],{"align":1423},"再加注. 指前位玩家加注后，继续加注(范围 上一个raise~allin)",[1418,1516,1517,1520],{},[1432,1518,1519],{"align":1423},"all-in",[1432,1521,1522],{"align":1423},"全押下注：投入手中所有的筹码",[1418,1524,1525,1528],{},[1432,1526,1527],{"align":1423},"bluff",[1432,1529,1530],{"align":1423},"吓唬其他玩家。让其他玩家误判的一种战术，但不会长期有效",[1418,1532,1533,1536],{},[1432,1534,1535],{"align":1423},"小盲(small blind)",[1432,1537,1538],{"align":1423},"庄家左边第一个玩家位小盲位，小盲位必须强制下注，小盲通常是牌局赌注的一半",[1418,1540,1541,1544],{},[1432,1542,1543],{"align":1423},"大盲(big blind)",[1432,1545,1546],{"align":1423},"庄家左边第二位玩家，大盲必须投一注钱。",[1418,1548,1549,1552],{},[1432,1550,1551],{"align":1423},"h(Heart)",[1432,1553,1554],{"align":1423},"红桃",[1418,1556,1557,1560],{},[1432,1558,1559],{"align":1423},"s(Spade)",[1432,1561,1562],{"align":1423},"黑桃",[1418,1564,1565,1568],{},[1432,1566,1567],{"align":1423},"d(Diamond)",[1432,1569,1570],{"align":1423},"方块",[1418,1572,1573,1576],{},[1432,1574,1575],{"align":1423},"c(Club)",[1432,1577,1578],{"align":1423},"梅花",[929,1580],{},[118,1582,1583],{"id":1583},"一些快速上手的小tip",[11,1585,1586],{},"关键词：新手, 娱乐局, 个人经验, 仅供参考",[293,1588,1589,1592],{},[79,1590,1591],{},"first & most important --- 舍得弃牌(fold)",[79,1593,1594],{},"明确下注的目标:\n01. 价值下注 -- 让更差的牌跟注\n02. bluff  -- 让更好的牌弃牌\n03. 获取池底",{"title":45,"searchDepth":46,"depth":46,"links":1596},[1597,1598,1599,1600],{"id":1325,"depth":268,"text":1325},{"id":1369,"depth":268,"text":1369},{"id":1407,"depth":268,"text":1407},{"id":1583,"depth":268,"text":1583},[1602,1079],"game","2021-01-05","Texas Hold’em poker",{"excerpt":1606},{"type":8,"value":1607},[1608],[11,1609,1322],{},"\u002Fblog\u002F04-poker",{"title":1317,"description":1604},"blog\u002F04-poker","e-rVwUEToNKPKMXQSEc0xdLQ24xqwh9SnCbwQw6XVWc",{"id":1615,"title":1616,"body":1617,"categories":1885,"date":1887,"description":1888,"extension":52,"meta":1889,"navigation":54,"path":1890,"seo":1891,"stem":1892,"__hash__":1893},"content\u002Fblog\u002F05-git.md","git 小tip",{"type":8,"value":1618,"toc":1883},[1619,1622],[1072,1620,1621],{},"\ntable th:first-of-type {\n    width: 50%;\n}\ntable th:nth-of-type(2) {\n    width: 30%;\n}\ntable th:nth-of-type(3) {\n    width: 20%;\n}\n",[1412,1623,1624,1637],{},[1415,1625,1626],{},[1418,1627,1628,1631,1634],{},[1421,1629,1630],{"align":1423},"命令",[1421,1632,1633],{},"说明",[1421,1635],{"align":1636},"center",[1427,1638,1639,1650,1661,1672,1682,1692,1702,1712,1723,1745,1758,1772,1780,1790,1800,1810,1818,1827,1837,1845,1855,1866,1875],{},[1418,1640,1641,1644,1647],{},[1432,1642,1643],{"align":1423},"git branch  -r",[1432,1645,1646],{},"查看远程仓库的分支信息",[1432,1648,1649],{"align":1636},"-r ：remote",[1418,1651,1652,1655,1658],{},[1432,1653,1654],{"align":1423},"git branch -a",[1432,1656,1657],{},"查看本地和远程仓库的分支信息",[1432,1659,1660],{"align":1636},"-a : all",[1418,1662,1663,1666,1669],{},[1432,1664,1665],{"align":1423},"git branch -m \u003Coldbranch> \u003Cnewbranch>",[1432,1667,1668],{},"重命名",[1432,1670,1671],{"align":1636},"-M 强制重命名",[1418,1673,1674,1677,1680],{},[1432,1675,1676],{"align":1423},"git branch",[1432,1678,1679],{},"查看本地",[1432,1681],{"align":1636},[1418,1683,1684,1687,1690],{},[1432,1685,1686],{"align":1423},"git branch  \u003Cbranchname>",[1432,1688,1689],{},"创建本地分支",[1432,1691],{"align":1636},[1418,1693,1694,1697,1700],{},[1432,1695,1696],{"align":1423},"git checkout -b \u003Cbranchname>",[1432,1698,1699],{},"创建新分支，并切换到该分支",[1432,1701],{"align":1636},[1418,1703,1704,1707,1710],{},[1432,1705,1706],{"align":1423},"git checkout \u003Cbranchname>",[1432,1708,1709],{},"切换分支",[1432,1711],{"align":1636},[1418,1713,1714,1717,1720],{},[1432,1715,1716],{"align":1423},"git branch    -d  \u003Cbranchname>",[1432,1718,1719],{},"删除分支(已参与过合并的分支)",[1432,1721,1722],{"align":1636},"-D  强制删除",[1418,1724,1725,1732,1735],{},[1432,1726,1727,1728,1731],{"align":1423},"git push ",[144,1729,1730],{},"远程仓库","  \u003C本地分支>: \u003C远程分支>",[1432,1733,1734],{},"推送本地分支的代码到远程仓库",[1432,1736,1737,1738,1741,1742,1744],{"align":1636},"\u003C远程分支> 名不填，则推送到与本地分支名相同的分支。",[1739,1740],"br",{},"如果远程仓库没有，则创建",[1739,1743],{}," git默认远程仓库 origin  分支 master",[1418,1746,1747,1752,1755],{},[1432,1748,1727,1749,1751],{"align":1423},[144,1750,1730],{},"  : \u003C远程分支>",[1432,1753,1754],{},"删除远程仓库的分支",[1432,1756,1757],{"align":1636},"推送一个空到远程仓库的分支",[1418,1759,1760,1766,1769],{},[1432,1761,1762,1763,1765],{"align":1423},"git pull ",[144,1764,1730],{}," \u003C远程分支>: \u003C本地分支>",[1432,1767,1768],{},"拉取远程仓库分支到本地",[1432,1770,1771],{"align":1636},"本地分支不填，则默认本地分支名为远程分支名",[1418,1773,1774,1776,1778],{},[1432,1775],{"align":1423},[1432,1777],{},[1432,1779],{"align":1636},[1418,1781,1782,1785,1788],{},[1432,1783,1784],{"align":1423},"git stash",[1432,1786,1787],{},"暂存修改",[1432,1789],{"align":1636},[1418,1791,1792,1795,1798],{},[1432,1793,1794],{"align":1423},"git stash pop",[1432,1796,1797],{},"应用最近的暂存修改",[1432,1799],{"align":1636},[1418,1801,1802,1805,1808],{},[1432,1803,1804],{"align":1423},"git stash list",[1432,1806,1807],{},"列出当前暂存所有修改",[1432,1809],{"align":1636},[1418,1811,1812,1814,1816],{},[1432,1813],{"align":1423},[1432,1815],{},[1432,1817],{"align":1636},[1418,1819,1820,1823,1825],{},[1432,1821,1822],{"align":1423},"tag",[1432,1824],{},[1432,1826],{"align":1636},[1418,1828,1829,1832,1835],{},[1432,1830,1831],{"align":1423},"git tag -l -n",[1432,1833,1834],{},"查看本地tag",[1432,1836],{"align":1636},[1418,1838,1839,1841,1843],{},[1432,1840],{"align":1423},[1432,1842],{},[1432,1844],{"align":1636},[1418,1846,1847,1850,1853],{},[1432,1848,1849],{"align":1423},"git fetch",[1432,1851,1852],{},"单单获取远程信息到本地，但不是pull",[1432,1854],{"align":1636},[1418,1856,1857,1860,1863],{},[1432,1858,1859],{"align":1423},"git diff --cached  path\u002Ffile",[1432,1861,1862],{},"查看暂存去修改",[1432,1864,1865],{"align":1636},"git add后 红的变绿的",[1418,1867,1868,1871,1873],{},[1432,1869,1870],{"align":1423},"git merge --squash ｜ 多次合并记录为一次提交记录",[1432,1872],{},[1432,1874],{"align":1636},[1418,1876,1877,1879,1881],{},[1432,1878],{"align":1423},[1432,1880],{},[1432,1882],{"align":1636},{"title":45,"searchDepth":46,"depth":46,"links":1884},[],[1886,1079],"git","2021-01-06T02:01:58+05:30"," 举个栗子,方便查找 ",{},"\u002Fblog\u002F05-git",{"title":1616,"description":1888},"blog\u002F05-git","9OBHGHV5HQiuAMhkFc0JKT7yzxAPZFtbC1s81MX88vA",{"id":1895,"title":1896,"body":1897,"categories":1923,"date":1924,"description":1888,"extension":52,"meta":1925,"navigation":54,"path":1926,"seo":1927,"stem":1928,"__hash__":1929},"content\u002Fblog\u002F06-nginx.conf.md","nginx.conf",{"type":8,"value":1898,"toc":1921},[1899,1912,1915,1918],[293,1900,1901,1904,1907,1910],{},[79,1902,1903],{},"conf文件工作机制\nreload",[79,1905,1906],{},"容易理解错误的概念\n顺序\n重复设置，优先级，默认值",[79,1908,1909],{},"main\u002Fhttp\u002Fserver\u002Flocation",[79,1911],{},[11,1913,1914],{},"include 相对路径，以nginx.conf文件为基准. 不以--prefix 变量值",[11,1916,1917],{},"http:\u002F\u002F 12.3.23.1:8100\u002Fxxx\u002Fxx\u002Ffil. -H \"Host: domain1-n\"",[11,1919,1920],{},"模块机制\n事件机制",{"title":45,"searchDepth":46,"depth":46,"links":1922},[],[206,1079],"2021-01-07",{"draft":54},"\u002Fblog\u002F06-nginx.conf",{"title":1896,"description":1888},"blog\u002F06-nginx.conf","_GfRlIt-ggcLTgIw_SFVb58Dpgl0JqoPn1oicWr1raw",{"id":1931,"title":1932,"body":1933,"categories":1994,"date":1995,"description":1996,"extension":52,"meta":1997,"navigation":54,"path":1999,"seo":2000,"stem":2001,"__hash__":2002},"content\u002Fblog\u002F07-书信.md","旧时书信用语",{"type":8,"value":1934,"toc":1992},[1935,1938,1941,1944,1947,1950,1953,1955,1960,1966,1968,1973,1979,1981,1986],[11,1936,1937],{},"\u002F\u002F 全文内容摘抄整理自互联网",[11,1939,1940],{},"格式：",[11,1942,1943],{},"用语例句：\n见字如晤；展信舒颜；\n久违芝宇，时切遐思（葭思）； \u002F\u002F 很久没有见到你的样子，内心十分想念",[11,1945,1946],{},"别经数月，思何可知。  \u002F\u002F 分别很久，对你的思念让我如何忍受\n暌违日久，拳念殊殷。 \u002F\u002F 许久没见到你，思念的心情越加殷切\n鄙寓君安，可释远念。 \u002F\u002F 我这边一切安好，你不必太过惦念\n音问久疏，垂念已深。  \u002F\u002F 很久没有收到你的消息，甚是想念。",[11,1948,1949],{},"并请诸安，顺颂时祺； \u002F\u002F 一切平安，祝愿你时时吉祥，身体健康",[11,1951,1952],{},"书信举例：",[929,1954],{},[293,1956,1957],{},[79,1958,1959],{},"鲁迅致母亲",[133,1961,1964],{"className":1962,"code":1963,"language":748},[746],"母亲大人膝下，敬禀者，日前寄上海婴照片一张，想已收到。小包一个，今天收到了。\n酱鸭、酱肉，昨起白花，蒸过之后，味仍不坏；只有鸡腰是全不能吃了。其余的东西，都好的。\n下午已分了一份给老三去。但其中的一种粉，无人认识，亦不知吃法，下次信中，乞示知。\n上海一向很暖，昨天发风，才冷了起来，但房中亦尚有五十余度。寓内大小俱安，请勿念为要。\n\n海婴有几句话，写在另一纸上，今附呈。\n\n专此布达，恭请金安。\n\n男树叩上广平及海婴同叩\n一月十六日\n",[141,1965,1963],{"__ignoreMap":45},[929,1967],{},[293,1969,1970],{"start":46},[79,1971,1972],{},"致老师",[133,1974,1977],{"className":1975,"code":1976,"language":748},[746],"澄宇先生夫子道席：\n既接光仪，又获手示，诲谕勤勤，感且不荆德芳返平，托致微物，尚祈哂纳。\n世局多故，至希为国自珍。\n肃此。敬颂\n教安。不具。\n受业 某某某\n",[141,1978,1976],{"__ignoreMap":45},[929,1980],{},[293,1982,1983],{"start":268},[79,1984,1985],{},"曾国藩致儿子曾纪鸿",[133,1987,1990],{"className":1988,"code":1989,"language":748},[746],"字谕纪鸿：\n   自尔还乡启行后，久未接尔来禀，殊不放心。今日天气奇热，尔在途次平安否？\n　　余在金陵与阮叔相聚二十五日，二十日等舟还皖，体中尚适。余与阮叔蒙恩晋封侯伯，门户大盛，\n深为袛惧。尔在省以谦、敬二字为主，事事请问意臣、芝生两姻叔，断不可送条子，致腾物议。十六\n日出闱，十七八拜客，十九日即可回家。九月初在家听榜信后，再启程来署可也。择交是第一要事，\n须择志趣远大者。\n\n此嘱。（涤生手示）\n",[141,1991,1989],{"__ignoreMap":45},{"title":45,"searchDepth":46,"depth":46,"links":1993},[],[49],"2021-01-08","一些例句摘抄,方便记录",{"draft":1998},false,"\u002Fblog\u002F07",{"title":1932,"description":1996},"blog\u002F07-书信","h7Ud5PH4ivwejSstoNbtCtOVMgjcugMGQcqncS3Tw0I",{"id":2004,"title":2005,"body":2006,"categories":2022,"date":2023,"description":2024,"extension":52,"meta":2025,"navigation":54,"path":2026,"seo":2027,"stem":2028,"__hash__":2029},"content\u002Fblog\u002F08-shell 学习.md","shell 学习",{"type":8,"value":2007,"toc":2020},[2008,2011,2014,2017],[11,2009,2010],{},"有用的命令\n\u002F\u002F\nss",[11,2012,2013],{},"top",[11,2015,2016],{},"ps",[11,2018,2019],{},"awk",{"title":45,"searchDepth":46,"depth":46,"links":2021},[],[1079],"2021-09-09","新手上路 ",{"draft":54},"\u002Fblog\u002F08-shell",{"title":2005,"description":2024},"blog\u002F08-shell 学习","PlAI-OINAVQCofbY9E_McegzWOSqpS56Py7JhpInjaE",{"id":2031,"title":2032,"body":2033,"categories":2075,"date":2076,"description":2077,"extension":52,"meta":2078,"navigation":54,"path":2079,"seo":2080,"stem":2081,"__hash__":2082},"content\u002Fblog\u002F09-暗黑破坏神.md","暗黑破坏神II",{"type":8,"value":2034,"toc":2073},[2035,2038],[11,2036,2037],{},"术语,缩写注释",[76,2039,2040,2043,2046,2049,2052,2055,2058,2061,2064,2067,2070],{},[79,2041,2042],{},"sor",[79,2044,2045],{},"nec",[79,2047,2048],{},"asn",[79,2050,2051],{},"bar",[79,2053,2054],{},"pal",[79,2056,2057],{},"dru",[79,2059,2060],{},"ring",[79,2062,2063],{},"jew",[79,2065,2066],{},"rune",[79,2068,2069],{},"kc      kill cow ,杀牛",[79,2071,2072],{},"kb",{"title":45,"searchDepth":46,"depth":46,"links":2074},[],[1602,1079],"2022-09-28","记录",{"draft":54},"\u002Fblog\u002F09",{"title":2032,"description":2077},"blog\u002F09-暗黑破坏神","lItRI005YsUf5nAd_rxv_h4BG6d45saSI-AQxNULQCU",{"id":2084,"title":2085,"body":2086,"categories":2093,"date":2095,"description":2096,"extension":52,"meta":2097,"navigation":54,"path":2098,"seo":2099,"stem":2100,"__hash__":2101},"content\u002Fblog\u002F10-linux_ps.md","linux -- ps",{"type":8,"value":2087,"toc":2091},[2088],[11,2089,2090],{},"ps\nprocesses snapshot: 进程快照\nps 显示当前",{"title":45,"searchDepth":46,"depth":46,"links":2092},[],[2094,1079],"linux","2022-10-10","man 中文",{"draft":54},"\u002Fblog\u002F10-linux_ps",{"title":2085,"description":2096},"blog\u002F10-linux_ps","bepCctuhgMpqyujiJ_lKR3tjT-rFptzqWg4wD34CXes",{"id":2103,"title":2104,"body":2105,"categories":2148,"date":2150,"description":2151,"extension":52,"meta":2152,"navigation":54,"path":2153,"seo":2154,"stem":2155,"__hash__":2156},"content\u002Fblog\u002F11-一些网络名词的注释.md","网络名词注释",{"type":8,"value":2106,"toc":2146},[2107,2110,2113,2116,2119,2122,2125,2128,2143],[11,2108,2109],{},"IP\n网关\n子网掩码",[11,2111,2112],{},"mac",[11,2114,2115],{},"自动分配\n手动",[11,2117,2118],{},"交换机\u002F路由器",[11,2120,2121],{},"dns\u002Fcdn",[11,2123,2124],{},"Lan\u002FVLan",[11,2126,2127],{},"segment\u002Ffragment",[11,2129,2130,2131,2135,2139],{},"reference：\n",[175,2132,2133],{"href":2133,"rel":2134},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002FyBVgJ2OQzAr_KHEU96jh9Q",[179],[175,2136,2137],{"href":2137,"rel":2138},"https:\u002F\u002Fmp.weixin.qq.com\u002Fs\u002Frl6u_1OHAtFyEzqnI11CwQ",[179],[175,2140,2141],{"href":2141,"rel":2142},"http:\u002F\u002Fdongdongdong.me\u002F2017\u002F11\u002F15\u002FNetwork\u002FMechanism\u002Fmac-arp-routing-table\u002F",[179],[11,2144,2145],{},"vip",{"title":45,"searchDepth":46,"depth":46,"links":2147},[],[2149,1079],"net","2022-10-20","常见",{"draft":54},"\u002Fblog\u002F11",{"title":2104,"description":2151},"blog\u002F11-一些网络名词的注释","WTAK5R8N2r-BlJKM2NeA5E2YZGKH4QcC22NUX0slr7A",{"id":2158,"title":2159,"body":2160,"categories":2164,"date":2165,"description":2166,"extension":52,"meta":2167,"navigation":54,"path":2168,"seo":2169,"stem":2170,"__hash__":2171},"content\u002Fblog\u002F13- js 代码.md","JS code",{"type":8,"value":2161,"toc":2162},[],{"title":45,"searchDepth":46,"depth":46,"links":2163},[],[1079],"2023-02-11","js 代码示例记录",{"draft":54},"\u002Fblog\u002F13-js",{"title":2159,"description":2166},"blog\u002F13- js 代码","HHlqbygj3bKOjb0TaMxeQe0KHOG0oGCi6JJgZuqnGj4",{"id":2173,"title":2174,"body":2175,"categories":2301,"date":2302,"description":2303,"extension":52,"meta":2304,"navigation":54,"path":2305,"seo":2306,"stem":2307,"__hash__":2308},"content\u002Fblog\u002F14- d2 pass流程.md","D2 pass",{"type":8,"value":2176,"toc":2294},[2177,2180,2183,2186,2188,2193,2204,2208,2240,2244,2258,2262,2273,2277],[11,2178,2179],{},"pass 1拖7",[11,2181,2182],{},"1 是大号，称司机(driver, bus)",[11,2184,2185],{},"7 是小号，称baby(bb) 1-7。 其中一个bb主跟随完成任务，称跑路bb。跑路bb各难度有等级限制，其他可以1级偷渡",[929,2187],{},[2189,2190,2192],"h2",{"id":2191},"act-1","act 1:",[293,2194,2195,2198,2201],{"start":138},[79,2196,2197],{},"bus直接飞走最后小站；安姐拐口，木桶处开门。",[79,2199,2200],{},"跑路bb 进门， 看bus杀安姐，安姐挂了回城。",[79,2202,2203],{},"bb1-7 找npc(瓦瑞夫),说完话去act 2",[2189,2205,2207],{"id":2206},"act-2","act 2:",[293,2209,2210,2213,2216,2219,2222,2225,2228,2231,2234,2237],{"start":138},[79,2211,2212],{},"任一bb 先点下 npc(杰海因)，跟他对下话，防止出现消失bug",[79,2214,2215],{},"跑路bb 可以先跑到港口，等bus门",[79,2217,2218],{},"bus去遥远的绿洲，到虫洞第三层清场后开门，跑路bb进来捡国王之杖后回程",[79,2220,2221],{},"bus 到利爪蝮蛇神殿第二层，把祭坛上的怪清了回程， 跑路bb进门踢蛇坛捡起蛇护身符回程。bus也回程",[79,2223,2224],{},"bus丢盒子给跑路bb，跑路bb用盒子把国王杖和蛇护符合成赫拉迪克之杖。跑路bb 和 凯恩，卓格南 对话。",[79,2226,2227],{},"bus去神秘的避难所清场，在召唤者附近开门，跑路bb进，bus杀召唤者，bb翻召唤者身后的日记，跑路bb回去，和旅店阿特玛对话",[79,2229,2230],{},"bus进红门去塔拉夏古墓，在插杖处开门，跑路bb进，插杖，bus进洞杀杜瑞尔，注意此时bb不要进洞，直到bus杀死boss再进。跑到最后和大天使对话，大天使开门，回程",[79,2232,2233],{},"跑路bb 去皇宫 和杰海因对话，再进皇宫开门回程。",[79,2235,2236],{},"其他bb 和杰海因对话，进皇宫，从跑路bb的门回程，和马席夫对话，去act 3",[79,2238,2239],{},"跑路bb和马席夫对话，去act 3",[2189,2241,2243],{"id":2242},"act-3","act 3:",[293,2245,2246,2249,2252,2255],{"start":138},[79,2247,2248],{},"跑路bb 和凯恩对话，等开门。",[79,2250,2251],{},"bus到崔凡客 3c背后开门，跑路bb进，bus杀3c，回程找凯恩时说话，（bus注意杀3c时bb离开不能超过两屏距离）。",[79,2253,2254],{},"bus去憎恨囚牢第三层杀掉平台上的3c，在红门前面开门，跑路bb进，bus杀劳模。从红门去act 4",[79,2256,2257],{},"其他bb 和凯恩对话，进bus门，从红门去act 4",[2189,2259,2261],{"id":2260},"act-4","act 4:",[293,2263,2264,2267,2270],{"start":138},[79,2265,2266],{},"bus去chaos清场，柱子后面开门，跑路bb进，躲在角落。",[79,2268,2269],{},"bus杀diablo后和bb一起回程，跑路bb和天使对话，红门去act 5。",[79,2271,2272],{},"其他bb 红门去act 5",[2189,2274,2276],{"id":2275},"act-5","act 5:",[293,2278,2279,2282,2285,2288,2291],{"start":138},[79,2280,2281],{},"bus去冰冷高原，督军山克前开门，跑路bb进,看bus杀山克，回程。（打孔任务）",[79,2283,2284],{},"bus到亚瑞特巅峰下图处开门，跑路bb进，点书激活野蛮人。（人物等级有要求:普通 20， 噩梦 40， 地狱60）",[79,2286,2287],{},"bus杀3bb后和bb一起回程。",[79,2289,2290],{},"bus去王座清场，在此处开门，bb进站吸经验。1级bb可以站城里等pass",[79,2292,2293],{},"bus清完5小队后，bb和bus一起进世界之石大殿，bus杀掉82，该难度的pass流程完成。",{"title":45,"searchDepth":46,"depth":46,"links":2295},[2296,2297,2298,2299,2300],{"id":2191,"depth":46,"text":2192},{"id":2206,"depth":46,"text":2207},{"id":2242,"depth":46,"text":2243},{"id":2260,"depth":46,"text":2261},{"id":2275,"depth":46,"text":2276},[1602,1079],"2023-02-22","暗黑2 pass流程",{},"\u002Fblog\u002F14-d2-pass",{"title":2174,"description":2303},"blog\u002F14- d2 pass流程","zYP29YNpsSOh4oAmMs0ZppgVUY04oimvlCCZYjTVO64",{"id":2310,"title":2311,"body":2312,"categories":2418,"date":2420,"description":2421,"extension":52,"meta":2422,"navigation":54,"path":2423,"seo":2424,"stem":2425,"__hash__":2426},"content\u002Fblog\u002F15-清平乐-村居.md","村居",{"type":8,"value":2313,"toc":2416},[2314,2360,2362,2380,2383,2392,2398,2413],[133,2315,2319],{"className":2316,"code":2317,"language":2318,"meta":45,"style":45},"language-shell shiki shiki-themes github-light github-dark","           清平乐 村居\n                宋 -- 辛弃疾\n        茅檐低小，溪上青青草。\n        醉里吴音相媚好，白发谁家翁媪？\n        大儿锄豆溪东，中儿正织鸡笼。\n        最喜小儿亡赖，溪头卧剥莲蓬。\n","shell",[141,2320,2321,2329,2340,2345,2350,2355],{"__ignoreMap":45},[144,2322,2323,2326],{"class":146,"line":147},[144,2324,2325],{"class":150},"           清平乐",[144,2327,2328],{"class":158}," 村居\n",[144,2330,2331,2334,2337],{"class":146,"line":46},[144,2332,2333],{"class":150},"                宋",[144,2335,2336],{"class":154}," --",[144,2338,2339],{"class":158}," 辛弃疾\n",[144,2341,2342],{"class":146,"line":268},[144,2343,2344],{"class":150},"        茅檐低小，溪上青青草。\n",[144,2346,2347],{"class":146,"line":280},[144,2348,2349],{"class":150},"        醉里吴音相媚好，白发谁家翁媪？\n",[144,2351,2352],{"class":146,"line":400},[144,2353,2354],{"class":150},"        大儿锄豆溪东，中儿正织鸡笼。\n",[144,2356,2357],{"class":146,"line":411},[144,2358,2359],{"class":150},"        最喜小儿亡赖，溪头卧剥莲蓬。\n",[929,2361],{},[11,2363,2364,2365,2367,2368,2370,2371,2373,2374,2376,2377,2379],{},"这首小诗描述了很简单的场景，",[1739,2366],{},"\n照着字面意思就可以理解。",[1739,2369],{},"\n字符间的画面也容易想象出来。",[1739,2372],{},"\n忍不住效颦一番：",[1739,2375],{},"\n真想给自己的房子也命名，那样也就能有这闲适的日子了。",[1739,2378],{},"\n暂且取上一个 -- \u003C江右村居>",[11,2381,2382],{},"眼前的社会，很难有这样的场景了。",[11,2384,2385,2386,2388,2389,2391],{},"诗中描绘的场景，是个让人羡慕的场景。",[1739,2387],{},"\n如果置身其中，也会悠闲快乐的。",[1739,2390],{},"\n自然环境可以寻得，但这样的生活又有几人能去过呢。",[11,2393,2394,2395,2397],{},"天下熙熙 皆为利来,天下攘攘 皆为利往。",[1739,2396],{},"\n世人慌慌张张，不过图碎银几两。",[11,2399,2400,2401,2403,2404,2406,2407,2409,2410,2412],{},"偏偏这碎银几两，能解世间万般惆怅。",[1739,2402],{},"\n我们有了太多的需求， 一箪食一瓢饮已经不能满足我们了。",[1739,2405],{},"\n不得不说，现在社会化分工，可以让我们生活品质提升很多。",[1739,2408],{},"\n但实际，我们的需求没有那么复杂。",[1739,2411],{},"\n如果我们满足点低些，只为饱腹奔波，是不是不会有那么多心累。",[1072,2414,2415],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":45,"searchDepth":46,"depth":46,"links":2417},[],[2419],"诗词","2023-03-20","诗",{},"\u002Fblog\u002F15",{"title":2311,"description":2421},"blog\u002F15-清平乐-村居","73s94KuoJ-Iem_hjxtNiw4cwxQfcU6jtk7_mT6a-HRc",{"id":2428,"title":2429,"body":2430,"categories":2437,"date":2439,"description":2440,"extension":52,"meta":2441,"navigation":54,"path":2442,"seo":2443,"stem":2444,"__hash__":2445},"content\u002Fblog\u002F16-url 编码\"解码.md","url 编码",{"type":8,"value":2431,"toc":2435},[2432],[11,2433,2434],{},"1， js\n2， nginx\u002Fopenresty\n3， go",{"title":45,"searchDepth":46,"depth":46,"links":2436},[],[2438,1079],"http","2023-04-06","url 中特殊字符的处理",{"draft":54},"\u002Fblog\u002F16-url-\"",{"title":2429,"description":2440},"blog\u002F16-url 编码\"解码","VxIuKlqqv1NHZBEiWBrknJq82bX2OXi1CCvOCGR3xF8",{"id":2447,"title":2448,"body":2449,"categories":2855,"date":2856,"description":2857,"extension":52,"meta":2858,"navigation":54,"path":2859,"seo":2860,"stem":2861,"__hash__":2862},"content\u002Fblog\u002F17- go reflect.md","go reflect学习",{"type":8,"value":2450,"toc":2853},[2451,2454,2457,2847,2850],[11,2452,2453],{},"需求：\nmongo 中的结构，可能会持续进行变更(新增成员)\n对外的接口，已经提供出去，期望接口不变，能对数据进行更新。",[11,2455,2456],{},"这个时候可以利用 mongo 的update 和 reflect 完成需求。",[133,2458,2462],{"className":2459,"code":2460,"language":2461,"meta":45,"style":45},"language-golang shiki shiki-themes github-light github-dark","import (\n    \"errors\"\n    \"reflect\"\n    \"strings\"\n)\n\nvar ErrInvalide = errors.New(\"invalid err\")\n\nfunc extractReflectValueMap(modifyValue reflect.Value, rMap map[string]interface{}) (err error) {\n    if !modifyValue.IsValid() || modifyValue.Kind() != reflect.Struct {\n        return ErrInvalide\n    }\n\n    for i := 0; i \u003C modifyValue.NumField(); i++ {\n        tag := modifyValue.Type().Field(i).Tag.Get(\"json\")\n        tag = strings.TrimSuffix(tag, \",omitempty\")\n        if _, ok := rMap[tag]; ok {\n            return ErrInvalide\n        }\n        switch modifyValue.Field(i).Kind() {\n        case reflect.Struct:\n            sMap := make(map[string]interface{})\n            err = extractReflectValueMap(modifyValue.Field(i), sMap)\n            if err != nil {\n                return\n            }\n            if tag != \"\" {\n                rMap[tag] = sMap\n            } else {\n                for k, v := range sMap {\n                    if _, ok := rMap[k]; ok {\n                        return ErrInvalide\n                    }\n                    rMap[k] = v\n                }\n            }\n        default:\n            if tag == \"\" {\n                return ErrInvalide\n            }\n            rMap[tag] = modifyValue.Field(i).Interface()\n        }\n    }\n    return\n}\n\ntype ApiData struct {\n    Name string `json:\"name,omitempty\" bson:\"name\"`\n    Age int `json:\"age,omitempty\" bson:\"age\"`\n}\n\ntype YourDB struct {\n    ApiData\n    AppendMember string `json:\"appendMember,omitempty\" bson:\"appendMember\"`\n}\n\nfunc ApiModifyData(data *ApiData) {\n    dealMap := make(map[string]interface{})\n    if err = extractReflectValueMap(reflect.ValueOf(*data), dealMap); err != nil {\n        return\n    }\n\n    m := bson.M{}\n    for k, v := range dealMap {\n        m[k] = v\n    }\n\n    yourMongo.update(bson.M{\"key\": key}, bson.M{\"$set\": m})\n    return\n}\n","golang",[141,2463,2464,2469,2474,2479,2484,2488,2492,2497,2501,2506,2511,2516,2520,2524,2529,2534,2540,2546,2552,2557,2563,2569,2575,2581,2587,2593,2599,2605,2611,2617,2623,2629,2635,2641,2647,2653,2658,2664,2670,2676,2681,2687,2692,2697,2703,2708,2713,2719,2725,2731,2736,2741,2747,2753,2759,2764,2769,2775,2781,2787,2793,2798,2803,2809,2815,2821,2826,2831,2837,2842],{"__ignoreMap":45},[144,2465,2466],{"class":146,"line":147},[144,2467,2468],{},"import (\n",[144,2470,2471],{"class":146,"line":46},[144,2472,2473],{},"    \"errors\"\n",[144,2475,2476],{"class":146,"line":268},[144,2477,2478],{},"    \"reflect\"\n",[144,2480,2481],{"class":146,"line":280},[144,2482,2483],{},"    \"strings\"\n",[144,2485,2486],{"class":146,"line":400},[144,2487,439],{},[144,2489,2490],{"class":146,"line":411},[144,2491,397],{"emptyLinePlaceholder":54},[144,2493,2494],{"class":146,"line":422},[144,2495,2496],{},"var ErrInvalide = errors.New(\"invalid err\")\n",[144,2498,2499],{"class":146,"line":430},[144,2500,397],{"emptyLinePlaceholder":54},[144,2502,2503],{"class":146,"line":442},[144,2504,2505],{},"func extractReflectValueMap(modifyValue reflect.Value, rMap map[string]interface{}) (err error) {\n",[144,2507,2508],{"class":146,"line":448},[144,2509,2510],{},"    if !modifyValue.IsValid() || modifyValue.Kind() != reflect.Struct {\n",[144,2512,2513],{"class":146,"line":454},[144,2514,2515],{},"        return ErrInvalide\n",[144,2517,2518],{"class":146,"line":859},[144,2519,451],{},[144,2521,2522],{"class":146,"line":869},[144,2523,397],{"emptyLinePlaceholder":54},[144,2525,2526],{"class":146,"line":874},[144,2527,2528],{},"    for i := 0; i \u003C modifyValue.NumField(); i++ {\n",[144,2530,2531],{"class":146,"line":890},[144,2532,2533],{},"        tag := modifyValue.Type().Field(i).Tag.Get(\"json\")\n",[144,2535,2537],{"class":146,"line":2536},16,[144,2538,2539],{},"        tag = strings.TrimSuffix(tag, \",omitempty\")\n",[144,2541,2543],{"class":146,"line":2542},17,[144,2544,2545],{},"        if _, ok := rMap[tag]; ok {\n",[144,2547,2549],{"class":146,"line":2548},18,[144,2550,2551],{},"            return ErrInvalide\n",[144,2553,2555],{"class":146,"line":2554},19,[144,2556,445],{},[144,2558,2560],{"class":146,"line":2559},20,[144,2561,2562],{},"        switch modifyValue.Field(i).Kind() {\n",[144,2564,2566],{"class":146,"line":2565},21,[144,2567,2568],{},"        case reflect.Struct:\n",[144,2570,2572],{"class":146,"line":2571},22,[144,2573,2574],{},"            sMap := make(map[string]interface{})\n",[144,2576,2578],{"class":146,"line":2577},23,[144,2579,2580],{},"            err = extractReflectValueMap(modifyValue.Field(i), sMap)\n",[144,2582,2584],{"class":146,"line":2583},24,[144,2585,2586],{},"            if err != nil {\n",[144,2588,2590],{"class":146,"line":2589},25,[144,2591,2592],{},"                return\n",[144,2594,2596],{"class":146,"line":2595},26,[144,2597,2598],{},"            }\n",[144,2600,2602],{"class":146,"line":2601},27,[144,2603,2604],{},"            if tag != \"\" {\n",[144,2606,2608],{"class":146,"line":2607},28,[144,2609,2610],{},"                rMap[tag] = sMap\n",[144,2612,2614],{"class":146,"line":2613},29,[144,2615,2616],{},"            } else {\n",[144,2618,2620],{"class":146,"line":2619},30,[144,2621,2622],{},"                for k, v := range sMap {\n",[144,2624,2626],{"class":146,"line":2625},31,[144,2627,2628],{},"                    if _, ok := rMap[k]; ok {\n",[144,2630,2632],{"class":146,"line":2631},32,[144,2633,2634],{},"                        return ErrInvalide\n",[144,2636,2638],{"class":146,"line":2637},33,[144,2639,2640],{},"                    }\n",[144,2642,2644],{"class":146,"line":2643},34,[144,2645,2646],{},"                    rMap[k] = v\n",[144,2648,2650],{"class":146,"line":2649},35,[144,2651,2652],{},"                }\n",[144,2654,2656],{"class":146,"line":2655},36,[144,2657,2598],{},[144,2659,2661],{"class":146,"line":2660},37,[144,2662,2663],{},"        default:\n",[144,2665,2667],{"class":146,"line":2666},38,[144,2668,2669],{},"            if tag == \"\" {\n",[144,2671,2673],{"class":146,"line":2672},39,[144,2674,2675],{},"                return ErrInvalide\n",[144,2677,2679],{"class":146,"line":2678},40,[144,2680,2598],{},[144,2682,2684],{"class":146,"line":2683},41,[144,2685,2686],{},"            rMap[tag] = modifyValue.Field(i).Interface()\n",[144,2688,2690],{"class":146,"line":2689},42,[144,2691,445],{},[144,2693,2695],{"class":146,"line":2694},43,[144,2696,451],{},[144,2698,2700],{"class":146,"line":2699},44,[144,2701,2702],{},"    return\n",[144,2704,2706],{"class":146,"line":2705},45,[144,2707,457],{},[144,2709,2711],{"class":146,"line":2710},46,[144,2712,397],{"emptyLinePlaceholder":54},[144,2714,2716],{"class":146,"line":2715},47,[144,2717,2718],{},"type ApiData struct {\n",[144,2720,2722],{"class":146,"line":2721},48,[144,2723,2724],{},"    Name string `json:\"name,omitempty\" bson:\"name\"`\n",[144,2726,2728],{"class":146,"line":2727},49,[144,2729,2730],{},"    Age int `json:\"age,omitempty\" bson:\"age\"`\n",[144,2732,2734],{"class":146,"line":2733},50,[144,2735,457],{},[144,2737,2739],{"class":146,"line":2738},51,[144,2740,397],{"emptyLinePlaceholder":54},[144,2742,2744],{"class":146,"line":2743},52,[144,2745,2746],{},"type YourDB struct {\n",[144,2748,2750],{"class":146,"line":2749},53,[144,2751,2752],{},"    ApiData\n",[144,2754,2756],{"class":146,"line":2755},54,[144,2757,2758],{},"    AppendMember string `json:\"appendMember,omitempty\" bson:\"appendMember\"`\n",[144,2760,2762],{"class":146,"line":2761},55,[144,2763,457],{},[144,2765,2767],{"class":146,"line":2766},56,[144,2768,397],{"emptyLinePlaceholder":54},[144,2770,2772],{"class":146,"line":2771},57,[144,2773,2774],{},"func ApiModifyData(data *ApiData) {\n",[144,2776,2778],{"class":146,"line":2777},58,[144,2779,2780],{},"    dealMap := make(map[string]interface{})\n",[144,2782,2784],{"class":146,"line":2783},59,[144,2785,2786],{},"    if err = extractReflectValueMap(reflect.ValueOf(*data), dealMap); err != nil {\n",[144,2788,2790],{"class":146,"line":2789},60,[144,2791,2792],{},"        return\n",[144,2794,2796],{"class":146,"line":2795},61,[144,2797,451],{},[144,2799,2801],{"class":146,"line":2800},62,[144,2802,397],{"emptyLinePlaceholder":54},[144,2804,2806],{"class":146,"line":2805},63,[144,2807,2808],{},"    m := bson.M{}\n",[144,2810,2812],{"class":146,"line":2811},64,[144,2813,2814],{},"    for k, v := range dealMap {\n",[144,2816,2818],{"class":146,"line":2817},65,[144,2819,2820],{},"        m[k] = v\n",[144,2822,2824],{"class":146,"line":2823},66,[144,2825,451],{},[144,2827,2829],{"class":146,"line":2828},67,[144,2830,397],{"emptyLinePlaceholder":54},[144,2832,2834],{"class":146,"line":2833},68,[144,2835,2836],{},"    yourMongo.update(bson.M{\"key\": key}, bson.M{\"$set\": m})\n",[144,2838,2840],{"class":146,"line":2839},69,[144,2841,2702],{},[144,2843,2845],{"class":146,"line":2844},70,[144,2846,457],{},[11,2848,2849],{},"伪代码的过程比较简单。\n其他还可以补充，数据判断，异常处理等。",[1072,2851,2852],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":45,"searchDepth":46,"depth":46,"links":2854},[],[2461,1079],"2023-03-23","go代码学习，实践示例 ",{"draft":1998},"\u002Fblog\u002F17-go-reflect",{"title":2448,"description":2857},"blog\u002F17- go reflect","iVJghKjP_a43hrtBOYEJJijKRUGG5qL466nVI89twuY",{"id":2864,"title":2865,"body":2866,"categories":2945,"date":2946,"description":2947,"extension":52,"meta":2948,"navigation":54,"path":2949,"seo":2950,"stem":2951,"__hash__":2952},"content\u002Fblog\u002F18-host.md","http_request中的host",{"type":8,"value":2867,"toc":2943},[2868,2871,2878,2938,2941],[11,2869,2870],{},"\u002F\u002F一点微不足道，但会者不难，难者不会的小知识。",[11,2872,2873,2874],{},"文档链接：",[175,2875,2876],{"href":2876,"rel":2877},"https:\u002F\u002Fpkg.go.dev\u002Fnet\u002Fhttp#Request",[179],[133,2879,2881],{"className":2459,"code":2880,"language":2461,"meta":45,"style":45},"type Request struct {\n    ...\n    URL *url.URL\n    Header Header\n    Host string\n    ...\n}\ntype URL struct {\n    ...\n    Host string \u002F\u002F host or host:port\n    ...\n}\n",[141,2882,2883,2888,2893,2898,2903,2908,2912,2916,2921,2925,2930,2934],{"__ignoreMap":45},[144,2884,2885],{"class":146,"line":147},[144,2886,2887],{},"type Request struct {\n",[144,2889,2890],{"class":146,"line":46},[144,2891,2892],{},"    ...\n",[144,2894,2895],{"class":146,"line":268},[144,2896,2897],{},"    URL *url.URL\n",[144,2899,2900],{"class":146,"line":280},[144,2901,2902],{},"    Header Header\n",[144,2904,2905],{"class":146,"line":400},[144,2906,2907],{},"    Host string\n",[144,2909,2910],{"class":146,"line":411},[144,2911,2892],{},[144,2913,2914],{"class":146,"line":422},[144,2915,457],{},[144,2917,2918],{"class":146,"line":430},[144,2919,2920],{},"type URL struct {\n",[144,2922,2923],{"class":146,"line":442},[144,2924,2892],{},[144,2926,2927],{"class":146,"line":448},[144,2928,2929],{},"    Host string \u002F\u002F host or host:port\n",[144,2931,2932],{"class":146,"line":454},[144,2933,2892],{},[144,2935,2936],{"class":146,"line":859},[144,2937,457],{},[11,2939,2940],{},"Host:",[1072,2942,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":2944},[],[2438,1079],"2023-04-25","http request url host",{"draft":54},"\u002Fblog\u002F18-host",{"title":2865,"description":2947},"blog\u002F18-host","1e4ld5RIK7CLB-FEL2Y2w2MAvE-Jf2XH2TARBN0OoqA",{"id":2954,"title":2955,"body":2956,"categories":3003,"date":3004,"description":3005,"extension":52,"meta":3006,"navigation":54,"path":3007,"seo":3008,"stem":3009,"__hash__":3010},"content\u002Fblog\u002F19- 大小端数据.md","大小端数据",{"type":8,"value":2957,"toc":3001},[2958,2961,2970,2978,2987],[11,2959,2960],{},"以一个10进制(base-10)的数：1234 为例",[11,2962,2963,2964,2966,2967],{},"我们日常读写，是以大端方式来对待的。",[1739,2965],{},"\n即 ",[141,2968,2969],{},"1234 = 1*10^3 + 2*10^2 + 3*10^1 + 4*10^0",[11,2971,2972,2973,2966,2975],{},"如果1234 用10进制的小端表示的话,则表示为 4321",[1739,2974],{},[141,2976,2977],{},"4321 = 4*10^0 + 3*10^1 + 2*10^2 + 1*10^3",[11,2979,2980,2981,2983,2984,2986],{},"可以认为",[1739,2982],{},"\n大端， 第一位数字代表的是 10的最大次方",[1739,2985],{},"\n小端， 第一位数字代表的是 10的最小次方",[11,2988,2989,2990,2992,2993,2995,2996,2998],{},"go代码中",[1739,2991],{},"\nencoding\u002Fbinary 包中",[1739,2994],{},"\nbase-256",[1739,2997],{},[141,2999,3000],{},"2,3,5,7 = 2*256^0 + 3*256^1 + 5*256^2 + 7*256^3",{"title":45,"searchDepth":46,"depth":46,"links":3002},[],[1079],"2023-05-08T13:25:58+08:00","big-endian little-endian",{"draft":1998},"\u002Fblog\u002F19",{"title":2955,"description":3005},"blog\u002F19- 大小端数据","-6vfGSk7MchdycNsvOWigSGZOrCUGbgn1SjIKg1jKNg",{"id":3012,"title":3013,"body":3014,"categories":3067,"date":3069,"description":3070,"extension":52,"meta":3071,"navigation":54,"path":3072,"seo":3073,"stem":3074,"__hash__":3075},"content\u002Fblog\u002F20-一句话.md","一句话知识点",{"type":8,"value":3015,"toc":3065},[3016,3022,3025],[11,3017,3018,3019,3021],{},"许多结论是在若干前提条件下才可以成立的。",[1739,3020],{},"\n某些结论，是在潜在条件下的语境里的结论,这些潜在条件，是大多数人共识，容易让人忽视。",[11,3023,3024],{},"本文的结论，不是绝对答案。",[293,3026,3027,3039,3050,3059],{},[79,3028,3029,3030,3032,3033,3035,3036],{},"喝酒脸红",[1739,3031],{},"\n乙醛堆积，没有转化，引起脸红。",[1739,3034],{},"\n酒精(乙醇)在肝脏中被乙醇脱氢酶转化为乙醛，乙醛再被乙醛脱氢酶转化为乙酸，最后被分解成二氧化碳，水和脂肪。  ",[141,3037,3038],{},"---from 知乎《人类停止进化了么》",[79,3040,3041,3042],{},"冰箱自制冰块不透明",[76,3043,3044,3047],{},[79,3045,3046],{},"水中是否有杂质",[79,3048,3049],{},"水中有溶解空气；冰箱中冰块冻结方向从外向内的冻结，总有气泡无法排出",[79,3051,3052,3053,3055,3056,3058],{},"没有2岁前的记忆",[1739,3054],{},"\n长期记忆功能还没有形成。大脑可能快速生长而降低了记忆的功能。",[1739,3057],{},"\n认知功能还没完善，比如语言组织。即，记忆编码和未来解码方式的差异。",[79,3060,3061,3062,3064],{},"84消毒液的名字",[1739,3063],{},"\n名字由来是因为其被发明于1984年，地坛医院的前身北京第一传染病医院研制成功能迅速杀灭各类肝炎病毒的消毒液，经北京市卫生局组织专家坚定，授予应用成果二等奖。",{"title":45,"searchDepth":46,"depth":46,"links":3066},[],[3068,1079],"生活","2023-08-01","简单的说",{"draft":1998},"\u002Fblog\u002F20",{"title":3013,"description":3070},"blog\u002F20-一句话","zjBmI6y9Yniqf1gXrXcCSzkNBs8mkp-fNYkAd3_OHhc",{"id":3077,"title":3078,"body":3079,"categories":3338,"date":3339,"description":3340,"extension":52,"meta":3341,"navigation":54,"path":3342,"seo":3343,"stem":3344,"__hash__":3345},"content\u002Fblog\u002F21-nginx_failed.md","nginx emerg --- getgrnam(\"root\") failed in nginx.conf",{"type":8,"value":3080,"toc":3336},[3081,3090,3093,3096,3099,3102,3117,3120,3334],[133,3082,3084],{"className":2316,"code":3083,"language":2318,"meta":45,"style":45},"nginx: [emerg] getgrnam(\"root\") failed in nginx.conf\n",[141,3085,3086],{"__ignoreMap":45},[144,3087,3088],{"class":146,"line":147},[144,3089,3083],{},[11,3091,3092],{},"这样的错误通常在mac上出现",[11,3094,3095],{},"在nginx配置文件中，group 值默认是和user名相同。",[11,3097,3098],{},"在mac系统上，对于root用户，或者使用sudo执行nginx时，系统并没有root的group，所以就提示了如上的错误。",[11,3100,3101],{},"快捷的修改方式：",[133,3103,3105],{"className":2316,"code":3104,"language":2318,"meta":45,"style":45},"#修改nginx.conf文件，指定root用户mac中的group\nuser root admin;\n",[141,3106,3107,3112],{"__ignoreMap":45},[144,3108,3109],{"class":146,"line":147},[144,3110,3111],{},"#修改nginx.conf文件，指定root用户mac中的group\n",[144,3113,3114],{"class":146,"line":46},[144,3115,3116],{},"user root admin;\n",[11,3118,3119],{},"如果nginx.conf不能修改，比如test::Nginx中，对应case自动生成nginx.conf\n那么，mac中增加一个root用户组，并把root用户加入到group中也可以。",[133,3121,3123],{"className":2316,"code":3122,"language":2318,"meta":45,"style":45},"\u002F\u002F 切换到root用户\nsu\n\n\u002F\u002F 新建root用户组，并指定id 为2024 (和现有id不冲突即可，尽量>500)\ndscl . -create \u002FGroups\u002Froot PrimaryGroupID 2024\n\u002F\u002F 添加root用户到root用户组中\ndscl . -append \u002FGroups\u002Froot GroupMembership root\n\n\n\u002F\u002F 其他的一些命令\n\n\u002F\u002F list所有的用户组\ngroups\n\u002F\u002F 查看user所属的用户组\ngroups \u003Cuser>\n\u002F\u002F 同上，同时展示用户组id\nid -a \u003Cuser>\n\n\u002F\u002F 查看当前登陆的用户名\nwhoami\n\n\u002F\u002F mac 管理用户及用户组命令\n\u002F\u002F dscl\n\n\u002F\u002F 创建\u003Cuser-name>用户,且id 为\u003Cid-num>\nsudo dscl . -create \u002FUsers\u002F\u003Cuser-name> UniqueID \u003Cid-num>\n\u002F\u002F 查看所有用户和id\nsudo dscl . -list \u002FUsers UniqueID\n\u002F\u002F 删除\nsudo dscl . -delete \u002FUsers\u002F\u003Cuser-name>\n\n\u002F\u002F 创建\u003Cgroup-name>用户组,且id 为\u003Cid-num>\nsudo dscl . -create \u002FGroups\u002F\u003Cgroup-name> PrimaryGroupID \u003Cid-num>\n\u002F\u002F 查看所有用户和id\nsudo dscl . -list \u002FGroups PrimaryGroupID\n\u002F\u002F 删除\nsudo dscl . -delete \u002FGroups\u002F\u003Cgroup-name>\n\n\u002F\u002F 添加\u003Cuser-name> 到用户组\u003Cgroup-name>中\nsudo dscl . -append \u002FGroups\u002F\u003Cgroup-name> GroupMembership \u003Cuser-name>\n\u002F\u002F 删除用户组\u003Cgroup-name>中\u003Cuser-name>\nsudo dscl . -delete \u002FGroups\u002F\u003Cgroup-name> GroupMembership \u003Cuser-name>\n\u002F\u002F 查看所有组下个用户信息\ndscl . -list \u002FGroups GroupMembership\n",[141,3124,3125,3130,3135,3139,3144,3149,3154,3159,3163,3167,3172,3176,3181,3186,3191,3196,3201,3206,3210,3215,3220,3224,3229,3234,3238,3243,3248,3253,3258,3263,3268,3272,3277,3282,3286,3291,3295,3300,3304,3309,3314,3319,3324,3329],{"__ignoreMap":45},[144,3126,3127],{"class":146,"line":147},[144,3128,3129],{},"\u002F\u002F 切换到root用户\n",[144,3131,3132],{"class":146,"line":46},[144,3133,3134],{},"su\n",[144,3136,3137],{"class":146,"line":268},[144,3138,397],{"emptyLinePlaceholder":54},[144,3140,3141],{"class":146,"line":280},[144,3142,3143],{},"\u002F\u002F 新建root用户组，并指定id 为2024 (和现有id不冲突即可，尽量>500)\n",[144,3145,3146],{"class":146,"line":400},[144,3147,3148],{},"dscl . -create \u002FGroups\u002Froot PrimaryGroupID 2024\n",[144,3150,3151],{"class":146,"line":411},[144,3152,3153],{},"\u002F\u002F 添加root用户到root用户组中\n",[144,3155,3156],{"class":146,"line":422},[144,3157,3158],{},"dscl . -append \u002FGroups\u002Froot GroupMembership root\n",[144,3160,3161],{"class":146,"line":430},[144,3162,397],{"emptyLinePlaceholder":54},[144,3164,3165],{"class":146,"line":442},[144,3166,397],{"emptyLinePlaceholder":54},[144,3168,3169],{"class":146,"line":448},[144,3170,3171],{},"\u002F\u002F 其他的一些命令\n",[144,3173,3174],{"class":146,"line":454},[144,3175,397],{"emptyLinePlaceholder":54},[144,3177,3178],{"class":146,"line":859},[144,3179,3180],{},"\u002F\u002F list所有的用户组\n",[144,3182,3183],{"class":146,"line":869},[144,3184,3185],{},"groups\n",[144,3187,3188],{"class":146,"line":874},[144,3189,3190],{},"\u002F\u002F 查看user所属的用户组\n",[144,3192,3193],{"class":146,"line":890},[144,3194,3195],{},"groups \u003Cuser>\n",[144,3197,3198],{"class":146,"line":2536},[144,3199,3200],{},"\u002F\u002F 同上，同时展示用户组id\n",[144,3202,3203],{"class":146,"line":2542},[144,3204,3205],{},"id -a \u003Cuser>\n",[144,3207,3208],{"class":146,"line":2548},[144,3209,397],{"emptyLinePlaceholder":54},[144,3211,3212],{"class":146,"line":2554},[144,3213,3214],{},"\u002F\u002F 查看当前登陆的用户名\n",[144,3216,3217],{"class":146,"line":2559},[144,3218,3219],{},"whoami\n",[144,3221,3222],{"class":146,"line":2565},[144,3223,397],{"emptyLinePlaceholder":54},[144,3225,3226],{"class":146,"line":2571},[144,3227,3228],{},"\u002F\u002F mac 管理用户及用户组命令\n",[144,3230,3231],{"class":146,"line":2577},[144,3232,3233],{},"\u002F\u002F dscl\n",[144,3235,3236],{"class":146,"line":2583},[144,3237,397],{"emptyLinePlaceholder":54},[144,3239,3240],{"class":146,"line":2589},[144,3241,3242],{},"\u002F\u002F 创建\u003Cuser-name>用户,且id 为\u003Cid-num>\n",[144,3244,3245],{"class":146,"line":2595},[144,3246,3247],{},"sudo dscl . -create \u002FUsers\u002F\u003Cuser-name> UniqueID \u003Cid-num>\n",[144,3249,3250],{"class":146,"line":2601},[144,3251,3252],{},"\u002F\u002F 查看所有用户和id\n",[144,3254,3255],{"class":146,"line":2607},[144,3256,3257],{},"sudo dscl . -list \u002FUsers UniqueID\n",[144,3259,3260],{"class":146,"line":2613},[144,3261,3262],{},"\u002F\u002F 删除\n",[144,3264,3265],{"class":146,"line":2619},[144,3266,3267],{},"sudo dscl . -delete \u002FUsers\u002F\u003Cuser-name>\n",[144,3269,3270],{"class":146,"line":2625},[144,3271,397],{"emptyLinePlaceholder":54},[144,3273,3274],{"class":146,"line":2631},[144,3275,3276],{},"\u002F\u002F 创建\u003Cgroup-name>用户组,且id 为\u003Cid-num>\n",[144,3278,3279],{"class":146,"line":2637},[144,3280,3281],{},"sudo dscl . -create \u002FGroups\u002F\u003Cgroup-name> PrimaryGroupID \u003Cid-num>\n",[144,3283,3284],{"class":146,"line":2643},[144,3285,3252],{},[144,3287,3288],{"class":146,"line":2649},[144,3289,3290],{},"sudo dscl . -list \u002FGroups PrimaryGroupID\n",[144,3292,3293],{"class":146,"line":2655},[144,3294,3262],{},[144,3296,3297],{"class":146,"line":2660},[144,3298,3299],{},"sudo dscl . -delete \u002FGroups\u002F\u003Cgroup-name>\n",[144,3301,3302],{"class":146,"line":2666},[144,3303,397],{"emptyLinePlaceholder":54},[144,3305,3306],{"class":146,"line":2672},[144,3307,3308],{},"\u002F\u002F 添加\u003Cuser-name> 到用户组\u003Cgroup-name>中\n",[144,3310,3311],{"class":146,"line":2678},[144,3312,3313],{},"sudo dscl . -append \u002FGroups\u002F\u003Cgroup-name> GroupMembership \u003Cuser-name>\n",[144,3315,3316],{"class":146,"line":2683},[144,3317,3318],{},"\u002F\u002F 删除用户组\u003Cgroup-name>中\u003Cuser-name>\n",[144,3320,3321],{"class":146,"line":2689},[144,3322,3323],{},"sudo dscl . -delete \u002FGroups\u002F\u003Cgroup-name> GroupMembership \u003Cuser-name>\n",[144,3325,3326],{"class":146,"line":2694},[144,3327,3328],{},"\u002F\u002F 查看所有组下个用户信息\n",[144,3330,3331],{"class":146,"line":2699},[144,3332,3333],{},"dscl . -list \u002FGroups GroupMembership\n",[1072,3335,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":3337},[],[206,1079],"2024-04-07T18:55:04+08:00","nginx getgrnam() failed",{"draft":1998},"\u002Fblog\u002F21-nginx_failed",{"title":3078,"description":3340},"blog\u002F21-nginx_failed","EkM6o-mBeKTJNCnTJkdbyIjofCHMCaQ321NQ22sq7U8",{"id":3347,"title":3348,"body":3349,"categories":3565,"date":3566,"description":3567,"extension":52,"meta":3568,"navigation":54,"path":3569,"seo":3570,"stem":3571,"__hash__":3572},"content\u002Fblog\u002F22-最大公约数_最小公倍数.md","最大公约数，最大公倍数",{"type":8,"value":3350,"toc":3563},[3351,3408,3427,3498,3561],[133,3352,3354],{"className":2459,"code":3353,"language":2461,"meta":45,"style":45},"    func gcd(a, b int) int {\n        for b != 0 {\n            tmp := b\n            b = a%b\n            a = tmp\n        }\n        return a\n    }\n\n    \u002F\u002F a%b a除以b的余数\n    \u002F\u002F a\u003Cb 余数为a\n",[141,3355,3356,3361,3366,3371,3376,3381,3385,3390,3394,3398,3403],{"__ignoreMap":45},[144,3357,3358],{"class":146,"line":147},[144,3359,3360],{},"    func gcd(a, b int) int {\n",[144,3362,3363],{"class":146,"line":46},[144,3364,3365],{},"        for b != 0 {\n",[144,3367,3368],{"class":146,"line":268},[144,3369,3370],{},"            tmp := b\n",[144,3372,3373],{"class":146,"line":280},[144,3374,3375],{},"            b = a%b\n",[144,3377,3378],{"class":146,"line":400},[144,3379,3380],{},"            a = tmp\n",[144,3382,3383],{"class":146,"line":411},[144,3384,445],{},[144,3386,3387],{"class":146,"line":422},[144,3388,3389],{},"        return a\n",[144,3391,3392],{"class":146,"line":430},[144,3393,451],{},[144,3395,3396],{"class":146,"line":442},[144,3397,397],{"emptyLinePlaceholder":54},[144,3399,3400],{"class":146,"line":448},[144,3401,3402],{},"    \u002F\u002F a%b a除以b的余数\n",[144,3404,3405],{"class":146,"line":454},[144,3406,3407],{},"    \u002F\u002F a\u003Cb 余数为a\n",[133,3409,3411],{"className":2459,"code":3410,"language":2461,"meta":45,"style":45},"    func lcm(a,b int) int {\n        return a*b\u002Fgcd(a,b)\n    }\n",[141,3412,3413,3418,3423],{"__ignoreMap":45},[144,3414,3415],{"class":146,"line":147},[144,3416,3417],{},"    func lcm(a,b int) int {\n",[144,3419,3420],{"class":146,"line":46},[144,3421,3422],{},"        return a*b\u002Fgcd(a,b)\n",[144,3424,3425],{"class":146,"line":268},[144,3426,451],{},[133,3428,3430],{"className":2459,"code":3429,"language":2461,"meta":45,"style":45},"    func ngcd(nums []int) int {\n        size := len(nums)\n        if size == 0 {\n            panic(\"empty nums\")\n        }\n        if size == 1{\n            return nums[0]\n        }\n        x := nums[0]\n        for i:=1; i\u003Csize; i++ {\n            x = gcd(x, nums[i])\n        }\n        return x\n    }\n\n",[141,3431,3432,3437,3442,3447,3452,3456,3461,3466,3470,3475,3480,3485,3489,3494],{"__ignoreMap":45},[144,3433,3434],{"class":146,"line":147},[144,3435,3436],{},"    func ngcd(nums []int) int {\n",[144,3438,3439],{"class":146,"line":46},[144,3440,3441],{},"        size := len(nums)\n",[144,3443,3444],{"class":146,"line":268},[144,3445,3446],{},"        if size == 0 {\n",[144,3448,3449],{"class":146,"line":280},[144,3450,3451],{},"            panic(\"empty nums\")\n",[144,3453,3454],{"class":146,"line":400},[144,3455,445],{},[144,3457,3458],{"class":146,"line":411},[144,3459,3460],{},"        if size == 1{\n",[144,3462,3463],{"class":146,"line":422},[144,3464,3465],{},"            return nums[0]\n",[144,3467,3468],{"class":146,"line":430},[144,3469,445],{},[144,3471,3472],{"class":146,"line":442},[144,3473,3474],{},"        x := nums[0]\n",[144,3476,3477],{"class":146,"line":448},[144,3478,3479],{},"        for i:=1; i\u003Csize; i++ {\n",[144,3481,3482],{"class":146,"line":454},[144,3483,3484],{},"            x = gcd(x, nums[i])\n",[144,3486,3487],{"class":146,"line":859},[144,3488,445],{},[144,3490,3491],{"class":146,"line":869},[144,3492,3493],{},"        return x\n",[144,3495,3496],{"class":146,"line":874},[144,3497,451],{},[133,3499,3501],{"className":2459,"code":3500,"language":2461,"meta":45,"style":45},"    func nlcm(nums []int) int {\n        size := len(nums)\n        if size == 0 {\n            panic(\"empty nums\")\n        }\n        if size == 1{\n            return nums[0]\n        }\n        x := nums[0]\n        for i:=1; i\u003Csize; i++ {\n            x = (x * nums[i]) \u002F gcd(x, nums[i])\n        }\n        return x\n    }\n",[141,3502,3503,3508,3512,3516,3520,3524,3528,3532,3536,3540,3544,3549,3553,3557],{"__ignoreMap":45},[144,3504,3505],{"class":146,"line":147},[144,3506,3507],{},"    func nlcm(nums []int) int {\n",[144,3509,3510],{"class":146,"line":46},[144,3511,3441],{},[144,3513,3514],{"class":146,"line":268},[144,3515,3446],{},[144,3517,3518],{"class":146,"line":280},[144,3519,3451],{},[144,3521,3522],{"class":146,"line":400},[144,3523,445],{},[144,3525,3526],{"class":146,"line":411},[144,3527,3460],{},[144,3529,3530],{"class":146,"line":422},[144,3531,3465],{},[144,3533,3534],{"class":146,"line":430},[144,3535,445],{},[144,3537,3538],{"class":146,"line":442},[144,3539,3474],{},[144,3541,3542],{"class":146,"line":448},[144,3543,3479],{},[144,3545,3546],{"class":146,"line":454},[144,3547,3548],{},"            x = (x * nums[i]) \u002F gcd(x, nums[i])\n",[144,3550,3551],{"class":146,"line":859},[144,3552,445],{},[144,3554,3555],{"class":146,"line":869},[144,3556,3493],{},[144,3558,3559],{"class":146,"line":874},[144,3560,451],{},[1072,3562,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":3564},[],[1079],"2024-04-28","golang 代码",{"draft":1998},"\u002Fblog\u002F22-_",{"title":3348,"description":3567},"blog\u002F22-最大公约数_最小公倍数","tU76hvDTUT6yKMn5kYcMX67Q6WCNo3WIdNhLvNPxsa8",{"id":3574,"title":3575,"body":3576,"categories":4535,"date":4536,"description":4537,"extension":52,"meta":4538,"navigation":54,"path":4539,"seo":4540,"stem":4541,"__hash__":4542},"content\u002Fblog\u002F23-古诗.md","古诗",{"type":8,"value":3577,"toc":4533},[3578,3603,3628,3653,3678,3747,3777,3806,3831,3855,3885,3910,3935,3959,3984,4009,4034,4059,4083,4107,4131,4155,4180,4205,4229,4274,4299,4323,4348,4373,4397,4422,4446,4471,4496,4531],[133,3579,3581],{"className":933,"code":3580,"language":936,"meta":45,"style":45},"咏鹅\n    唐 -- 骆宾王\n鹅，鹅，鹅，曲项向天歌，\n白毛浮绿水，红掌拨清波。\n",[141,3582,3583,3588,3593,3598],{"__ignoreMap":45},[144,3584,3585],{"class":146,"line":147},[144,3586,3587],{},"咏鹅\n",[144,3589,3590],{"class":146,"line":46},[144,3591,3592],{},"    唐 -- 骆宾王\n",[144,3594,3595],{"class":146,"line":268},[144,3596,3597],{},"鹅，鹅，鹅，曲项向天歌，\n",[144,3599,3600],{"class":146,"line":280},[144,3601,3602],{},"白毛浮绿水，红掌拨清波。\n",[133,3604,3606],{"className":933,"code":3605,"language":936,"meta":45,"style":45},"静夜思\n    唐 -- 李白\n床前明月光，疑似地上霜。\n举头望明月，低头思故乡。\n",[141,3607,3608,3613,3618,3623],{"__ignoreMap":45},[144,3609,3610],{"class":146,"line":147},[144,3611,3612],{},"静夜思\n",[144,3614,3615],{"class":146,"line":46},[144,3616,3617],{},"    唐 -- 李白\n",[144,3619,3620],{"class":146,"line":268},[144,3621,3622],{},"床前明月光，疑似地上霜。\n",[144,3624,3625],{"class":146,"line":280},[144,3626,3627],{},"举头望明月，低头思故乡。\n",[133,3629,3631],{"className":933,"code":3630,"language":936,"meta":45,"style":45},"春晓\n    唐 -- 孟浩然\n春眠不觉晓，处处闻啼鸟。\n夜来风雨声，花落知多少。\n",[141,3632,3633,3638,3643,3648],{"__ignoreMap":45},[144,3634,3635],{"class":146,"line":147},[144,3636,3637],{},"春晓\n",[144,3639,3640],{"class":146,"line":46},[144,3641,3642],{},"    唐 -- 孟浩然\n",[144,3644,3645],{"class":146,"line":268},[144,3646,3647],{},"春眠不觉晓，处处闻啼鸟。\n",[144,3649,3650],{"class":146,"line":280},[144,3651,3652],{},"夜来风雨声，花落知多少。\n",[133,3654,3656],{"className":933,"code":3655,"language":936,"meta":45,"style":45},"悯农\n    唐 -- 李绅\n锄禾日当午，汗滴禾下土。\n谁知盘中餐，粒粒皆辛苦。\n",[141,3657,3658,3663,3668,3673],{"__ignoreMap":45},[144,3659,3660],{"class":146,"line":147},[144,3661,3662],{},"悯农\n",[144,3664,3665],{"class":146,"line":46},[144,3666,3667],{},"    唐 -- 李绅\n",[144,3669,3670],{"class":146,"line":268},[144,3671,3672],{},"锄禾日当午，汗滴禾下土。\n",[144,3674,3675],{"class":146,"line":280},[144,3676,3677],{},"谁知盘中餐，粒粒皆辛苦。\n",[133,3679,3681],{"className":933,"code":3680,"language":936,"meta":45,"style":45},"赋得古原草送别\n    唐 -- 白居易\n离离原上草，一岁一枯荣。\n野火烧不尽，春风吹又生。\n\n\u002F*\n赋得：借古人诗句或成语命题作诗。诗题前一般都冠以“赋得”二字。\n    这是古代人学习作诗或文人聚会分题作诗或\n    科举考试时命题作诗的一种方式，称为“赋得体”\n*\u002F\n\u002F\u002F 后部分\n远芳侵古道，晴翠接荒城。\n又送王孙去，萋萋满别情。\n",[141,3682,3683,3688,3693,3698,3703,3707,3712,3717,3722,3727,3732,3737,3742],{"__ignoreMap":45},[144,3684,3685],{"class":146,"line":147},[144,3686,3687],{},"赋得古原草送别\n",[144,3689,3690],{"class":146,"line":46},[144,3691,3692],{},"    唐 -- 白居易\n",[144,3694,3695],{"class":146,"line":268},[144,3696,3697],{},"离离原上草，一岁一枯荣。\n",[144,3699,3700],{"class":146,"line":280},[144,3701,3702],{},"野火烧不尽，春风吹又生。\n",[144,3704,3705],{"class":146,"line":400},[144,3706,397],{"emptyLinePlaceholder":54},[144,3708,3709],{"class":146,"line":411},[144,3710,3711],{},"\u002F*\n",[144,3713,3714],{"class":146,"line":422},[144,3715,3716],{},"赋得：借古人诗句或成语命题作诗。诗题前一般都冠以“赋得”二字。\n",[144,3718,3719],{"class":146,"line":430},[144,3720,3721],{},"    这是古代人学习作诗或文人聚会分题作诗或\n",[144,3723,3724],{"class":146,"line":442},[144,3725,3726],{},"    科举考试时命题作诗的一种方式，称为“赋得体”\n",[144,3728,3729],{"class":146,"line":448},[144,3730,3731],{},"*\u002F\n",[144,3733,3734],{"class":146,"line":454},[144,3735,3736],{},"\u002F\u002F 后部分\n",[144,3738,3739],{"class":146,"line":859},[144,3740,3741],{},"远芳侵古道，晴翠接荒城。\n",[144,3743,3744],{"class":146,"line":869},[144,3745,3746],{},"又送王孙去，萋萋满别情。\n",[133,3748,3750],{"className":933,"code":3749,"language":936,"meta":45,"style":45},"画\n    唐 -- 王维\n远看山有色，近听水无声。\n春去花还在，人来鸟不惊。\n\u002F\u002F 教错后两句的顺序了。\n",[141,3751,3752,3757,3762,3767,3772],{"__ignoreMap":45},[144,3753,3754],{"class":146,"line":147},[144,3755,3756],{},"画\n",[144,3758,3759],{"class":146,"line":46},[144,3760,3761],{},"    唐 -- 王维\n",[144,3763,3764],{"class":146,"line":268},[144,3765,3766],{},"远看山有色，近听水无声。\n",[144,3768,3769],{"class":146,"line":280},[144,3770,3771],{},"春去花还在，人来鸟不惊。\n",[144,3773,3774],{"class":146,"line":400},[144,3775,3776],{},"\u002F\u002F 教错后两句的顺序了。\n",[133,3778,3780],{"className":933,"code":3779,"language":936,"meta":45,"style":45},"望庐山瀑布\n    唐 -- 李白\n日照香炉生紫烟，遥看瀑布挂前川。\n飞流直下三千尺，疑是银河落九天。\n\u002F\u002F 最后一句前两个字发音不友好，小朋友不易上口。\n",[141,3781,3782,3787,3791,3796,3801],{"__ignoreMap":45},[144,3783,3784],{"class":146,"line":147},[144,3785,3786],{},"望庐山瀑布\n",[144,3788,3789],{"class":146,"line":46},[144,3790,3617],{},[144,3792,3793],{"class":146,"line":268},[144,3794,3795],{},"日照香炉生紫烟，遥看瀑布挂前川。\n",[144,3797,3798],{"class":146,"line":280},[144,3799,3800],{},"飞流直下三千尺，疑是银河落九天。\n",[144,3802,3803],{"class":146,"line":400},[144,3804,3805],{},"\u002F\u002F 最后一句前两个字发音不友好，小朋友不易上口。\n",[133,3807,3809],{"className":933,"code":3808,"language":936,"meta":45,"style":45},"登鹳雀楼\n    唐 -- 王之涣\n白日依山尽，黄河入海流。\n欲穷千里目，更上一层楼。\n",[141,3810,3811,3816,3821,3826],{"__ignoreMap":45},[144,3812,3813],{"class":146,"line":147},[144,3814,3815],{},"登鹳雀楼\n",[144,3817,3818],{"class":146,"line":46},[144,3819,3820],{},"    唐 -- 王之涣\n",[144,3822,3823],{"class":146,"line":268},[144,3824,3825],{},"白日依山尽，黄河入海流。\n",[144,3827,3828],{"class":146,"line":280},[144,3829,3830],{},"欲穷千里目，更上一层楼。\n",[133,3832,3834],{"className":933,"code":3833,"language":936,"meta":45,"style":45},"夜宿山寺\n    唐 -- 李白\n危楼高百尺，手可摘星辰。\n不敢高声语，恐惊天上人。\n",[141,3835,3836,3841,3845,3850],{"__ignoreMap":45},[144,3837,3838],{"class":146,"line":147},[144,3839,3840],{},"夜宿山寺\n",[144,3842,3843],{"class":146,"line":46},[144,3844,3617],{},[144,3846,3847],{"class":146,"line":268},[144,3848,3849],{},"危楼高百尺，手可摘星辰。\n",[144,3851,3852],{"class":146,"line":280},[144,3853,3854],{},"不敢高声语，恐惊天上人。\n",[133,3856,3858],{"className":933,"code":3857,"language":936,"meta":45,"style":45},"寻隐者不遇\n    唐 -- 贾岛\n松下问童子，言师采药去。\n只在此山中，云深不知处。\n\u002F\u002F 第三句，只\u002F此，翘舌平舌不友好\n",[141,3859,3860,3865,3870,3875,3880],{"__ignoreMap":45},[144,3861,3862],{"class":146,"line":147},[144,3863,3864],{},"寻隐者不遇\n",[144,3866,3867],{"class":146,"line":46},[144,3868,3869],{},"    唐 -- 贾岛\n",[144,3871,3872],{"class":146,"line":268},[144,3873,3874],{},"松下问童子，言师采药去。\n",[144,3876,3877],{"class":146,"line":280},[144,3878,3879],{},"只在此山中，云深不知处。\n",[144,3881,3882],{"class":146,"line":400},[144,3883,3884],{},"\u002F\u002F 第三句，只\u002F此，翘舌平舌不友好\n",[133,3886,3888],{"className":933,"code":3887,"language":936,"meta":45,"style":45},"绝句\n    唐 -- 杜甫\n两个黄鹂鸣翠柳，一行白鹭上青天。\n窗含西岭千秋雪，门泊东吴万里船。\n",[141,3889,3890,3895,3900,3905],{"__ignoreMap":45},[144,3891,3892],{"class":146,"line":147},[144,3893,3894],{},"绝句\n",[144,3896,3897],{"class":146,"line":46},[144,3898,3899],{},"    唐 -- 杜甫\n",[144,3901,3902],{"class":146,"line":268},[144,3903,3904],{},"两个黄鹂鸣翠柳，一行白鹭上青天。\n",[144,3906,3907],{"class":146,"line":280},[144,3908,3909],{},"窗含西岭千秋雪，门泊东吴万里船。\n",[133,3911,3913],{"className":933,"code":3912,"language":936,"meta":45,"style":45},"清明\n    唐 -- 杜牧\n清明时节雨纷纷，路上行人欲断魂。\n借问酒家何处有，牧童遥指杏花村。\n",[141,3914,3915,3920,3925,3930],{"__ignoreMap":45},[144,3916,3917],{"class":146,"line":147},[144,3918,3919],{},"清明\n",[144,3921,3922],{"class":146,"line":46},[144,3923,3924],{},"    唐 -- 杜牧\n",[144,3926,3927],{"class":146,"line":268},[144,3928,3929],{},"清明时节雨纷纷，路上行人欲断魂。\n",[144,3931,3932],{"class":146,"line":280},[144,3933,3934],{},"借问酒家何处有，牧童遥指杏花村。\n",[133,3936,3938],{"className":933,"code":3937,"language":936,"meta":45,"style":45},"早发白帝城\n    唐 -- 李白\n朝辞白帝彩云间，千里江陵一日还。\n两岸猿声啼不住，轻舟已过万重山。\n",[141,3939,3940,3945,3949,3954],{"__ignoreMap":45},[144,3941,3942],{"class":146,"line":147},[144,3943,3944],{},"早发白帝城\n",[144,3946,3947],{"class":146,"line":46},[144,3948,3617],{},[144,3950,3951],{"class":146,"line":268},[144,3952,3953],{},"朝辞白帝彩云间，千里江陵一日还。\n",[144,3955,3956],{"class":146,"line":280},[144,3957,3958],{},"两岸猿声啼不住，轻舟已过万重山。\n",[133,3960,3962],{"className":933,"code":3961,"language":936,"meta":45,"style":45},"梅花\n    宋 -- 王安石\n墙角数枝梅，凌寒独自开。\n遥知不是雪，为有暗香来。\n",[141,3963,3964,3969,3974,3979],{"__ignoreMap":45},[144,3965,3966],{"class":146,"line":147},[144,3967,3968],{},"梅花\n",[144,3970,3971],{"class":146,"line":46},[144,3972,3973],{},"    宋 -- 王安石\n",[144,3975,3976],{"class":146,"line":268},[144,3977,3978],{},"墙角数枝梅，凌寒独自开。\n",[144,3980,3981],{"class":146,"line":280},[144,3982,3983],{},"遥知不是雪，为有暗香来。\n",[133,3985,3987],{"className":933,"code":3986,"language":936,"meta":45,"style":45},"小池\n    宋 -- 杨万里\n泉眼无声惜细流，树阴照水爱晴柔。\n小荷才露尖尖角，早有蜻蜓立上头。\n",[141,3988,3989,3994,3999,4004],{"__ignoreMap":45},[144,3990,3991],{"class":146,"line":147},[144,3992,3993],{},"小池\n",[144,3995,3996],{"class":146,"line":46},[144,3997,3998],{},"    宋 -- 杨万里\n",[144,4000,4001],{"class":146,"line":268},[144,4002,4003],{},"泉眼无声惜细流，树阴照水爱晴柔。\n",[144,4005,4006],{"class":146,"line":280},[144,4007,4008],{},"小荷才露尖尖角，早有蜻蜓立上头。\n",[133,4010,4012],{"className":933,"code":4011,"language":936,"meta":45,"style":45},"江雪\n    唐 -- 柳宗元\n千山鸟飞绝，万径人踪灭。\n孤舟蓑笠翁，独钓寒江雪。\n",[141,4013,4014,4019,4024,4029],{"__ignoreMap":45},[144,4015,4016],{"class":146,"line":147},[144,4017,4018],{},"江雪\n",[144,4020,4021],{"class":146,"line":46},[144,4022,4023],{},"    唐 -- 柳宗元\n",[144,4025,4026],{"class":146,"line":268},[144,4027,4028],{},"千山鸟飞绝，万径人踪灭。\n",[144,4030,4031],{"class":146,"line":280},[144,4032,4033],{},"孤舟蓑笠翁，独钓寒江雪。\n",[133,4035,4037],{"className":933,"code":4036,"language":936,"meta":45,"style":45},"出塞\n    唐 -- 王昌龄\n秦时明月汉时关，万里长征人未还。\n但使龙城飞将在，不教胡马渡阴山。\n",[141,4038,4039,4044,4049,4054],{"__ignoreMap":45},[144,4040,4041],{"class":146,"line":147},[144,4042,4043],{},"出塞\n",[144,4045,4046],{"class":146,"line":46},[144,4047,4048],{},"    唐 -- 王昌龄\n",[144,4050,4051],{"class":146,"line":268},[144,4052,4053],{},"秦时明月汉时关，万里长征人未还。\n",[144,4055,4056],{"class":146,"line":280},[144,4057,4058],{},"但使龙城飞将在，不教胡马渡阴山。\n",[133,4060,4062],{"className":933,"code":4061,"language":936,"meta":45,"style":45},"送元二使安西\n    唐 -- 王维\n渭城朝雨浥（yì）轻尘，客舍青青柳色新。\n劝君更尽一杯酒，西出阳关无故人。\n",[141,4063,4064,4069,4073,4078],{"__ignoreMap":45},[144,4065,4066],{"class":146,"line":147},[144,4067,4068],{},"送元二使安西\n",[144,4070,4071],{"class":146,"line":46},[144,4072,3761],{},[144,4074,4075],{"class":146,"line":268},[144,4076,4077],{},"渭城朝雨浥（yì）轻尘，客舍青青柳色新。\n",[144,4079,4080],{"class":146,"line":280},[144,4081,4082],{},"劝君更尽一杯酒，西出阳关无故人。\n",[133,4084,4086],{"className":933,"code":4085,"language":936,"meta":45,"style":45},"九月九日忆山东兄弟\n    唐 -- 王维\n独在异乡为异客，每逢佳节倍思亲。\n遥知兄弟登高处，遍插茱萸少一人。\n",[141,4087,4088,4093,4097,4102],{"__ignoreMap":45},[144,4089,4090],{"class":146,"line":147},[144,4091,4092],{},"九月九日忆山东兄弟\n",[144,4094,4095],{"class":146,"line":46},[144,4096,3761],{},[144,4098,4099],{"class":146,"line":268},[144,4100,4101],{},"独在异乡为异客，每逢佳节倍思亲。\n",[144,4103,4104],{"class":146,"line":280},[144,4105,4106],{},"遥知兄弟登高处，遍插茱萸少一人。\n",[133,4108,4110],{"className":933,"code":4109,"language":936,"meta":45,"style":45},"黄鹤楼送孟浩然之广陵\n    唐 -- 李白\n故人西辞黄鹤楼，烟花三月下扬州。\n孤帆远影碧空尽，惟见长江天际流。\n",[141,4111,4112,4117,4121,4126],{"__ignoreMap":45},[144,4113,4114],{"class":146,"line":147},[144,4115,4116],{},"黄鹤楼送孟浩然之广陵\n",[144,4118,4119],{"class":146,"line":46},[144,4120,3617],{},[144,4122,4123],{"class":146,"line":268},[144,4124,4125],{},"故人西辞黄鹤楼，烟花三月下扬州。\n",[144,4127,4128],{"class":146,"line":280},[144,4129,4130],{},"孤帆远影碧空尽，惟见长江天际流。\n",[133,4132,4134],{"className":933,"code":4133,"language":936,"meta":45,"style":45},"望天门山\n    唐 -- 李白\n天门中断楚江开，碧水东流至此回。\n两岸青山相对出，孤帆一片日边来。\n",[141,4135,4136,4141,4145,4150],{"__ignoreMap":45},[144,4137,4138],{"class":146,"line":147},[144,4139,4140],{},"望天门山\n",[144,4142,4143],{"class":146,"line":46},[144,4144,3617],{},[144,4146,4147],{"class":146,"line":268},[144,4148,4149],{},"天门中断楚江开，碧水东流至此回。\n",[144,4151,4152],{"class":146,"line":280},[144,4153,4154],{},"两岸青山相对出，孤帆一片日边来。\n",[133,4156,4158],{"className":933,"code":4157,"language":936,"meta":45,"style":45},"枫桥夜泊\n    唐 -- 张继\n月落乌啼霜满天，江枫渔火对愁眠。\n姑苏城外寒山寺，夜半钟声到客船。\n",[141,4159,4160,4165,4170,4175],{"__ignoreMap":45},[144,4161,4162],{"class":146,"line":147},[144,4163,4164],{},"枫桥夜泊\n",[144,4166,4167],{"class":146,"line":46},[144,4168,4169],{},"    唐 -- 张继\n",[144,4171,4172],{"class":146,"line":268},[144,4173,4174],{},"月落乌啼霜满天，江枫渔火对愁眠。\n",[144,4176,4177],{"class":146,"line":280},[144,4178,4179],{},"姑苏城外寒山寺，夜半钟声到客船。\n",[133,4181,4183],{"className":933,"code":4182,"language":936,"meta":45,"style":45},"题西林壁\n    宋 -- 苏轼\n横看成岭侧成峰，远近高低各不同。\n不识庐山真面目，只缘身在此山中。\n",[141,4184,4185,4190,4195,4200],{"__ignoreMap":45},[144,4186,4187],{"class":146,"line":147},[144,4188,4189],{},"题西林壁\n",[144,4191,4192],{"class":146,"line":46},[144,4193,4194],{},"    宋 -- 苏轼\n",[144,4196,4197],{"class":146,"line":268},[144,4198,4199],{},"横看成岭侧成峰，远近高低各不同。\n",[144,4201,4202],{"class":146,"line":280},[144,4203,4204],{},"不识庐山真面目，只缘身在此山中。\n",[133,4206,4208],{"className":933,"code":4207,"language":936,"meta":45,"style":45},"自提金山画像\n    宋 -- 苏轼\n心似已灰之木，身如不系之舟。\n问汝平生功业，黄州惠州儋州。\n",[141,4209,4210,4215,4219,4224],{"__ignoreMap":45},[144,4211,4212],{"class":146,"line":147},[144,4213,4214],{},"自提金山画像\n",[144,4216,4217],{"class":146,"line":46},[144,4218,4194],{},[144,4220,4221],{"class":146,"line":268},[144,4222,4223],{},"心似已灰之木，身如不系之舟。\n",[144,4225,4226],{"class":146,"line":280},[144,4227,4228],{},"问汝平生功业，黄州惠州儋州。\n",[133,4230,4232],{"className":933,"code":4231,"language":936,"meta":45,"style":45},"天净沙-秋思\n    元 -- 马致远\n枯藤老树昏鸦，\n小桥流水人家，\n古道西风瘦马。\n夕阳西下\n断肠人在天涯。\n\u002F\u002F 小朋友很好上口\n",[141,4233,4234,4239,4244,4249,4254,4259,4264,4269],{"__ignoreMap":45},[144,4235,4236],{"class":146,"line":147},[144,4237,4238],{},"天净沙-秋思\n",[144,4240,4241],{"class":146,"line":46},[144,4242,4243],{},"    元 -- 马致远\n",[144,4245,4246],{"class":146,"line":268},[144,4247,4248],{},"枯藤老树昏鸦，\n",[144,4250,4251],{"class":146,"line":280},[144,4252,4253],{},"小桥流水人家，\n",[144,4255,4256],{"class":146,"line":400},[144,4257,4258],{},"古道西风瘦马。\n",[144,4260,4261],{"class":146,"line":411},[144,4262,4263],{},"夕阳西下\n",[144,4265,4266],{"class":146,"line":422},[144,4267,4268],{},"断肠人在天涯。\n",[144,4270,4271],{"class":146,"line":430},[144,4272,4273],{},"\u002F\u002F 小朋友很好上口\n",[133,4275,4277],{"className":933,"code":4276,"language":936,"meta":45,"style":45},"风\n    唐 -- 李峤（jiào或qiáo）\n解落三秋叶，能开二月花。\n过江千尺浪，入竹万竿斜。\n",[141,4278,4279,4284,4289,4294],{"__ignoreMap":45},[144,4280,4281],{"class":146,"line":147},[144,4282,4283],{},"风\n",[144,4285,4286],{"class":146,"line":46},[144,4287,4288],{},"    唐 -- 李峤（jiào或qiáo）\n",[144,4290,4291],{"class":146,"line":268},[144,4292,4293],{},"解落三秋叶，能开二月花。\n",[144,4295,4296],{"class":146,"line":280},[144,4297,4298],{},"过江千尺浪，入竹万竿斜。\n",[133,4300,4302],{"className":933,"code":4301,"language":936,"meta":45,"style":45},"大林寺桃花\n    唐 -- 白居易\n人间四月芳菲尽，山寺桃花始盛开。\n长恨春归无觅处，不知转入此山中。\n",[141,4303,4304,4309,4313,4318],{"__ignoreMap":45},[144,4305,4306],{"class":146,"line":147},[144,4307,4308],{},"大林寺桃花\n",[144,4310,4311],{"class":146,"line":46},[144,4312,3692],{},[144,4314,4315],{"class":146,"line":268},[144,4316,4317],{},"人间四月芳菲尽，山寺桃花始盛开。\n",[144,4319,4320],{"class":146,"line":280},[144,4321,4322],{},"长恨春归无觅处，不知转入此山中。\n",[133,4324,4326],{"className":933,"code":4325,"language":936,"meta":45,"style":45},"赠汪伦\n    唐 - 李白\n李白乘舟将欲行，忽闻岸上踏歌声。\n桃花潭水深千尺，不及汪伦送我情。\n",[141,4327,4328,4333,4338,4343],{"__ignoreMap":45},[144,4329,4330],{"class":146,"line":147},[144,4331,4332],{},"赠汪伦\n",[144,4334,4335],{"class":146,"line":46},[144,4336,4337],{},"    唐 - 李白\n",[144,4339,4340],{"class":146,"line":268},[144,4341,4342],{},"李白乘舟将欲行，忽闻岸上踏歌声。\n",[144,4344,4345],{"class":146,"line":280},[144,4346,4347],{},"桃花潭水深千尺，不及汪伦送我情。\n",[133,4349,4351],{"className":933,"code":4350,"language":936,"meta":45,"style":45},"凉州词\n   唐 -- 王翰\n葡萄美酒夜光杯，欲饮琵琶马上催。\n醉卧沙场君莫笑，古来征战几人回？\n",[141,4352,4353,4358,4363,4368],{"__ignoreMap":45},[144,4354,4355],{"class":146,"line":147},[144,4356,4357],{},"凉州词\n",[144,4359,4360],{"class":146,"line":46},[144,4361,4362],{},"   唐 -- 王翰\n",[144,4364,4365],{"class":146,"line":268},[144,4366,4367],{},"葡萄美酒夜光杯，欲饮琵琶马上催。\n",[144,4369,4370],{"class":146,"line":280},[144,4371,4372],{},"醉卧沙场君莫笑，古来征战几人回？\n",[133,4374,4376],{"className":933,"code":4375,"language":936,"meta":45,"style":45},"凉州词\n   唐 -- 王之涣\n黄河远上白云间，一片孤城万仞山。\n羌笛何须怨杨柳，春风不度玉门关。\n",[141,4377,4378,4382,4387,4392],{"__ignoreMap":45},[144,4379,4380],{"class":146,"line":147},[144,4381,4357],{},[144,4383,4384],{"class":146,"line":46},[144,4385,4386],{},"   唐 -- 王之涣\n",[144,4388,4389],{"class":146,"line":268},[144,4390,4391],{},"黄河远上白云间，一片孤城万仞山。\n",[144,4393,4394],{"class":146,"line":280},[144,4395,4396],{},"羌笛何须怨杨柳，春风不度玉门关。\n",[133,4398,4400],{"className":933,"code":4399,"language":936,"meta":45,"style":45},"咏柳\n   唐 -- 贺知章\n碧玉妆成一树高，万条垂下绿丝绦。\n不知细叶谁裁出，二月春风似剪刀。\n",[141,4401,4402,4407,4412,4417],{"__ignoreMap":45},[144,4403,4404],{"class":146,"line":147},[144,4405,4406],{},"咏柳\n",[144,4408,4409],{"class":146,"line":46},[144,4410,4411],{},"   唐 -- 贺知章\n",[144,4413,4414],{"class":146,"line":268},[144,4415,4416],{},"碧玉妆成一树高，万条垂下绿丝绦。\n",[144,4418,4419],{"class":146,"line":280},[144,4420,4421],{},"不知细叶谁裁出，二月春风似剪刀。\n",[133,4423,4425],{"className":933,"code":4424,"language":936,"meta":45,"style":45},"回乡偶书\n   唐 -- 贺知章\n少小离家老大回，乡音无改鬓毛衰。\n儿童相见不相识，笑问客从何处来。\n",[141,4426,4427,4432,4436,4441],{"__ignoreMap":45},[144,4428,4429],{"class":146,"line":147},[144,4430,4431],{},"回乡偶书\n",[144,4433,4434],{"class":146,"line":46},[144,4435,4411],{},[144,4437,4438],{"class":146,"line":268},[144,4439,4440],{},"少小离家老大回，乡音无改鬓毛衰。\n",[144,4442,4443],{"class":146,"line":280},[144,4444,4445],{},"儿童相见不相识，笑问客从何处来。\n",[133,4447,4449],{"className":933,"code":4448,"language":936,"meta":45,"style":45},"晓出净慈寺送林子方\n   宋 -- 杨万里\n毕竟西湖六月中，风光不与四时同。\n接天莲叶无穷碧，映日荷花别样红。\n",[141,4450,4451,4456,4461,4466],{"__ignoreMap":45},[144,4452,4453],{"class":146,"line":147},[144,4454,4455],{},"晓出净慈寺送林子方\n",[144,4457,4458],{"class":146,"line":46},[144,4459,4460],{},"   宋 -- 杨万里\n",[144,4462,4463],{"class":146,"line":268},[144,4464,4465],{},"毕竟西湖六月中，风光不与四时同。\n",[144,4467,4468],{"class":146,"line":280},[144,4469,4470],{},"接天莲叶无穷碧，映日荷花别样红。\n",[133,4472,4474],{"className":933,"code":4473,"language":936,"meta":45,"style":45},"鹿柴\n   唐 -- 王维\n空山不见人，但闻人语响。\n返景入深林，复照青苔上。\n",[141,4475,4476,4481,4486,4491],{"__ignoreMap":45},[144,4477,4478],{"class":146,"line":147},[144,4479,4480],{},"鹿柴\n",[144,4482,4483],{"class":146,"line":46},[144,4484,4485],{},"   唐 -- 王维\n",[144,4487,4488],{"class":146,"line":268},[144,4489,4490],{},"空山不见人，但闻人语响。\n",[144,4492,4493],{"class":146,"line":280},[144,4494,4495],{},"返景入深林，复照青苔上。\n",[133,4497,4499],{"className":933,"code":4498,"language":936,"meta":45,"style":45},"山居秋暝\n  唐 -- 王维\n空山新雨后，天气晚来秋。\n明月松间照，清泉石上流。\n竹喧归浣女，莲动下渔舟。\n随意春芳歇，王孙自可留。\n",[141,4500,4501,4506,4511,4516,4521,4526],{"__ignoreMap":45},[144,4502,4503],{"class":146,"line":147},[144,4504,4505],{},"山居秋暝\n",[144,4507,4508],{"class":146,"line":46},[144,4509,4510],{},"  唐 -- 王维\n",[144,4512,4513],{"class":146,"line":268},[144,4514,4515],{},"空山新雨后，天气晚来秋。\n",[144,4517,4518],{"class":146,"line":280},[144,4519,4520],{},"明月松间照，清泉石上流。\n",[144,4522,4523],{"class":146,"line":400},[144,4524,4525],{},"竹喧归浣女，莲动下渔舟。\n",[144,4527,4528],{"class":146,"line":411},[144,4529,4530],{},"随意春芳歇，王孙自可留。\n",[1072,4532,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":4534},[],[2419],"2024-05-15","教小朋友的古诗列表",{"draft":1998},"\u002Fblog\u002F23",{"title":3575,"description":4537},"blog\u002F23-古诗","_bMqrxZqs05jdk4xgLcor0kbTgS8yZvaj5qS7IpH2EI",{"id":4544,"title":4545,"body":4546,"categories":4585,"date":4586,"description":4587,"extension":52,"meta":4588,"navigation":54,"path":4589,"seo":4590,"stem":4591,"__hash__":4592},"content\u002Fblog\u002F24-成语.md","成语",{"type":8,"value":4547,"toc":4583},[4548],[76,4549,4550,4553,4556,4559,4562,4565,4568,4571,4574,4577,4580],{},[79,4551,4552],{},"守株待兔",[79,4554,4555],{},"刻舟求剑",[79,4557,4558],{},"狐假虎威",[79,4560,4561],{},"亡羊补牢",[79,4563,4564],{},"掩耳盗铃",[79,4566,4567],{},"拔苗助长",[79,4569,4570],{},"专心致志",[79,4572,4573],{},"胸有成竹",[79,4575,4576],{},"画龙点睛",[79,4578,4579],{},"负荆请罪",[79,4581,4582],{},"三顾茅庐",{"title":45,"searchDepth":46,"depth":46,"links":4584},[],[2419],"2024-06-13","可以给小朋友讲古诗的成语",{"draft":1998},"\u002Fblog\u002F24",{"title":4545,"description":4587},"blog\u002F24-成语","KQyyJpXhczXZCqFwAYbhdL3rtLTse0u71xjdQn86pRQ",{"id":4594,"title":4595,"body":4596,"categories":4834,"date":4835,"description":4836,"extension":52,"meta":4837,"navigation":54,"path":4838,"seo":4839,"stem":4840,"__hash__":4841},"content\u002Fblog\u002F25-nginx-log处理.md","nginx日志",{"type":8,"value":4597,"toc":4832},[4598,4601,4604,4607,4615,4618,4621,4624,4630,4650,4656,4671,4674,4689,4692,4717,4719,4725,4735,4738,4741,4744,4747,4750,4820,4825,4830],[11,4599,4600],{},"##背景",[11,4602,4603],{},"随着nginx 运行，记录的access和error日志文件也会变的越来越大。无论文件存储，还是查阅都是不方便的。",[11,4605,4606],{},"我们需求：",[76,4608,4609,4612],{},[79,4610,4611],{},"对日志能自动分割，最好按照日期，每天生成一个文件。在未来如果某一天的文件过大的话，也能再继续分割。",[79,4613,4614],{},"日志文件的总大小过大后，可以自动删除较旧的文件，或者打包到另外的地方进行存档。",[11,4616,4617],{},"##方案",[11,4619,4620],{},"使用linux系统中logrotate 和 crontab两个工具",[11,4622,4623],{},"##介绍",[11,4625,4626,4629],{},[71,4627,4628],{},"cron"," 是linux里一个在后台运行任务调度的守护进程。任务调度包括:",[76,4631,4632,4639],{},[79,4633,4634,4635,4638],{},"系统任务 ",[141,4636,4637],{},"\u002Fetc\u002Fcrontab"," 文件",[79,4640,4641,4642,4645,4646,4649],{},"用户任务 通过 ",[141,4643,4644],{},"crontab"," 工具来设置任务。定义的文件在  ",[141,4647,4648],{},"\u002Fvar\u002Fspool\u002Fcron\u002Fcrontabs\u002Froot","  (root 用户 && 如果已经存在任务)",[11,4651,4652,4653,4655],{},"用户任务的文件不要直接编辑, 使用 ",[141,4654,4644],{}," 命令修改",[133,4657,4659],{"className":933,"code":4658,"language":936,"meta":45,"style":45},"crontab -l          \u002F\u002F 显示用户crontab任务文件\ncrontab -e      \u002F\u002F  修改crontab任务文件\n",[141,4660,4661,4666],{"__ignoreMap":45},[144,4662,4663],{"class":146,"line":147},[144,4664,4665],{},"crontab -l          \u002F\u002F 显示用户crontab任务文件\n",[144,4667,4668],{"class":146,"line":46},[144,4669,4670],{},"crontab -e      \u002F\u002F  修改crontab任务文件\n",[11,4672,4673],{},"任务文件中的格式  (一行一个任务)",[133,4675,4677],{"className":933,"code":4676,"language":936,"meta":45,"style":45},"*   *   *   *   *   command\n分   时  日   月  周   执行的命令\n",[141,4678,4679,4684],{"__ignoreMap":45},[144,4680,4681],{"class":146,"line":147},[144,4682,4683],{},"*   *   *   *   *   command\n",[144,4685,4686],{"class":146,"line":46},[144,4687,4688],{},"分   时  日   月  周   执行的命令\n",[11,4690,4691],{},"第1列表示分钟 00～59 每分钟用*或者 *\u002F1表示\n第2列表示小时 00～23（0表示0点）\n第3列表示日期 01～31\n第4列表示月份 01～12\n第5列标识号星期 0～6（0表示星期天）\n第6列要运行的命令  (使用绝对路径)\n此外每一列除了数字，还可以有这些符号：",[133,4693,4695],{"className":933,"code":4694,"language":936,"meta":45,"style":45},"*       代表任何时间，比如第一个 * 就代表一小时中的每分钟都执行\n,       逗号分割, 占一列位置。代表不连续的时间，比如 0 8,12,16 * * * 代表每天8，12，16点0分执行\n-       代表连续的范围，比如 0 5 * * 1-6 代表在周一到周六凌晨5点0分执行\n*\u002Fn     代表每个多久执行一次，比如*\u002F10 * * * *代表每隔10分钟执行一次\n",[141,4696,4697,4702,4707,4712],{"__ignoreMap":45},[144,4698,4699],{"class":146,"line":147},[144,4700,4701],{},"*       代表任何时间，比如第一个 * 就代表一小时中的每分钟都执行\n",[144,4703,4704],{"class":146,"line":46},[144,4705,4706],{},",       逗号分割, 占一列位置。代表不连续的时间，比如 0 8,12,16 * * * 代表每天8，12，16点0分执行\n",[144,4708,4709],{"class":146,"line":268},[144,4710,4711],{},"-       代表连续的范围，比如 0 5 * * 1-6 代表在周一到周六凌晨5点0分执行\n",[144,4713,4714],{"class":146,"line":280},[144,4715,4716],{},"*\u002Fn     代表每个多久执行一次，比如*\u002F10 * * * *代表每隔10分钟执行一次\n",[929,4718],{},[11,4720,4721,4724],{},[71,4722,4723],{},"logrotate"," 是linux中默认安装的日志文件管理工具。\n。\n分割日志文件，删除旧的文件，并创建新的日志文件",[133,4726,4728],{"className":933,"code":4727,"language":936,"meta":45,"style":45},"\u002Fetc\u002Flogrotate.conf\n\n",[141,4729,4730],{"__ignoreMap":45},[144,4731,4732],{"class":146,"line":147},[144,4733,4734],{},"\u002Fetc\u002Flogrotate.conf\n",[11,4736,4737],{},"crontab 定时任务",[11,4739,4740],{},"##设置",[11,4742,4743],{},"大",[11,4745,4746],{},"##验证",[11,4748,4749],{},"###备注\n环境信息",[133,4751,4753],{"className":933,"code":4752,"language":936,"meta":45,"style":45},"cat \u002Fetc\u002Fos-release\nNAME=\"Ubuntu\"\nVERSION=\"20.04 LTS (Focal Fossa)\"\nID=ubuntu\nID_LIKE=debian\nPRETTY_NAME=\"Ubuntu 20.04 LTS\"\nVERSION_ID=\"20.04\"\nHOME_URL=\"https:\u002F\u002Fwww.ubuntu.com\u002F\"\nSUPPORT_URL=\"https:\u002F\u002Fhelp.ubuntu.com\u002F\"\nBUG_REPORT_URL=\"https:\u002F\u002Fbugs.launchpad.net\u002Fubuntu\u002F\"\nPRIVACY_POLICY_URL=\"https:\u002F\u002Fwww.ubuntu.com\u002Flegal\u002Fterms-and-policies\u002Fprivacy-policy\"\nVERSION_CODENAME=focal\nUBUNTU_CODENAME=focal\n",[141,4754,4755,4760,4765,4770,4775,4780,4785,4790,4795,4800,4805,4810,4815],{"__ignoreMap":45},[144,4756,4757],{"class":146,"line":147},[144,4758,4759],{},"cat \u002Fetc\u002Fos-release\n",[144,4761,4762],{"class":146,"line":46},[144,4763,4764],{},"NAME=\"Ubuntu\"\n",[144,4766,4767],{"class":146,"line":268},[144,4768,4769],{},"VERSION=\"20.04 LTS (Focal Fossa)\"\n",[144,4771,4772],{"class":146,"line":280},[144,4773,4774],{},"ID=ubuntu\n",[144,4776,4777],{"class":146,"line":400},[144,4778,4779],{},"ID_LIKE=debian\n",[144,4781,4782],{"class":146,"line":411},[144,4783,4784],{},"PRETTY_NAME=\"Ubuntu 20.04 LTS\"\n",[144,4786,4787],{"class":146,"line":422},[144,4788,4789],{},"VERSION_ID=\"20.04\"\n",[144,4791,4792],{"class":146,"line":430},[144,4793,4794],{},"HOME_URL=\"https:\u002F\u002Fwww.ubuntu.com\u002F\"\n",[144,4796,4797],{"class":146,"line":442},[144,4798,4799],{},"SUPPORT_URL=\"https:\u002F\u002Fhelp.ubuntu.com\u002F\"\n",[144,4801,4802],{"class":146,"line":448},[144,4803,4804],{},"BUG_REPORT_URL=\"https:\u002F\u002Fbugs.launchpad.net\u002Fubuntu\u002F\"\n",[144,4806,4807],{"class":146,"line":454},[144,4808,4809],{},"PRIVACY_POLICY_URL=\"https:\u002F\u002Fwww.ubuntu.com\u002Flegal\u002Fterms-and-policies\u002Fprivacy-policy\"\n",[144,4811,4812],{"class":146,"line":859},[144,4813,4814],{},"VERSION_CODENAME=focal\n",[144,4816,4817],{"class":146,"line":869},[144,4818,4819],{},"UBUNTU_CODENAME=focal\n",[11,4821,4822],{},[71,4823,4824],{},"TODO",[76,4826,4827],{},[79,4828,4829],{},"代码块行号",[1072,4831,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":4833},[],[206,1079],"2024-07-04","nginx,log,crontab,logrotate",{"draft":1998},"\u002Fblog\u002F25-nginx-log",{"title":4595,"description":4836},"blog\u002F25-nginx-log处理","nzicbUw5ayx4YUe-8bZClImn5nfZACMrHOGEb-fdLU8",{"id":4843,"title":4844,"body":4845,"categories":5115,"date":5116,"description":5117,"extension":52,"meta":5118,"navigation":54,"path":5119,"seo":5120,"stem":5121,"__hash__":5122},"content\u002Fblog\u002F26-Nginx本地test(mac环境).md","Nginx本地test",{"type":8,"value":4846,"toc":5111},[4847,4850,4864,4867,4878,4903,4908,4928,4965,5015,5020,5044,5049,5078,5083,5092,5100,5109],[2189,4848,4849],{"id":4849},"介绍",[76,4851,4852,4858],{},[79,4853,4854],{},[175,4855,4856],{"href":4856,"rel":4857},"https:\u002F\u002Fgithub.com\u002Firesty\u002Fprogramming-openresty-zh\u002Fblob\u002Fmaster\u002Ftesting\u002FREADME.adoc",[179],[79,4859,4860],{},[175,4861,4862],{"href":4862,"rel":4863},"https:\u002F\u002Fopenresty.gitbooks.io\u002Fprogramming-openresty\u002Fcontent\u002F",[179],[2189,4865,4866],{"id":4866},"步骤",[76,4868,4869,4872,4875],{},[79,4870,4871],{},"切换root用户或者sudo 执行相关命令",[79,4873,4874],{},"nginx 启停更，或者读写文件需要。避免权限错误。所以后续操作统一用root级用户角色",[79,4876,4877],{},"本地安装好nginx",[133,4879,4881],{"className":933,"code":4880,"language":936,"meta":45,"style":45},"$ which nginx\n\u002Fusr\u002Flocal\u002Fbin\u002Fnginx\n$ nginx -v\nnginx version: openresty\u002F1.19.3.1\n",[141,4882,4883,4888,4893,4898],{"__ignoreMap":45},[144,4884,4885],{"class":146,"line":147},[144,4886,4887],{},"$ which nginx\n",[144,4889,4890],{"class":146,"line":46},[144,4891,4892],{},"\u002Fusr\u002Flocal\u002Fbin\u002Fnginx\n",[144,4894,4895],{"class":146,"line":268},[144,4896,4897],{},"$ nginx -v\n",[144,4899,4900],{"class":146,"line":280},[144,4901,4902],{},"nginx version: openresty\u002F1.19.3.1\n",[76,4904,4905],{},[79,4906,4907],{},"安装 test::Nginx",[133,4909,4911],{"className":933,"code":4910,"language":936,"meta":45,"style":45},"通过cpan安装（默认已经安装了perl，cpan）\n$ cpan -v\n$ cpan Test::Nginx\n",[141,4912,4913,4918,4923],{"__ignoreMap":45},[144,4914,4915],{"class":146,"line":147},[144,4916,4917],{},"通过cpan安装（默认已经安装了perl，cpan）\n",[144,4919,4920],{"class":146,"line":46},[144,4921,4922],{},"$ cpan -v\n",[144,4924,4925],{"class":146,"line":268},[144,4926,4927],{},"$ cpan Test::Nginx\n",[76,4929,4930,4933,4940,4943,4946,4953,4956,4959,4962],{},[79,4931,4932],{},"luacov 安装(不是必须的)",[79,4934,4935,4936],{},"下载源码：",[175,4937,4938],{"href":4938,"rel":4939},"https:\u002F\u002Fgithub.com\u002Flunarmodules\u002Fluacov\u002Ftree\u002Fv0.15.0\u002Fsrc",[179],[79,4941,4942],{},"cp luacov 到对应的lua_package_path 下即可。 比如 net-cache\u002Fnginx\u002Fshare_lua 下",[79,4944,4945],{},"chash动态库 mac 编译(也不是必须的，用到的话，linux和mac不同)",[79,4947,4948,4949],{},"如果本地没有chash的C代码，可以参考 ",[175,4950,4951],{"href":4951,"rel":4952},"https:\u002F\u002Fgithub.com\u002Fopenresty\u002Flua-resty-balancer\u002Ftree\u002Fmaster",[179],[79,4954,4955],{},"下载.chash.c,  chash.h, Makefile 到本地",[79,4957,4958],{},"make all 即可，生成libchash.dylib",[79,4960,4961],{},"mv libchash.dylib  到 nginx\u002Ffor_test_lib 下",[79,4963,4964],{},"增加root用户组",[133,4966,4968],{"className":933,"code":4967,"language":936,"meta":45,"style":45},"\u002F\u002F 针对nginx: [emerg] getgrnam(\"root\") failed in nginx.conf 错误\n\u002F\u002F 原因是mac下root用户不是在root用户组，nginx.conf 默认user group相同\n\n\n\u002F\u002F 新建root用户组，并指定id 为2024\n$ sudo dscl . -create \u002FGroups\u002Froot PrimaryGroupID 2024\n\n\n\u002F\u002F 添加root用户到root用户组中\n$ sudo dscl . -append \u002FGroups\u002Froot GroupMembership root\n",[141,4969,4970,4975,4980,4984,4988,4993,4998,5002,5006,5010],{"__ignoreMap":45},[144,4971,4972],{"class":146,"line":147},[144,4973,4974],{},"\u002F\u002F 针对nginx: [emerg] getgrnam(\"root\") failed in nginx.conf 错误\n",[144,4976,4977],{"class":146,"line":46},[144,4978,4979],{},"\u002F\u002F 原因是mac下root用户不是在root用户组，nginx.conf 默认user group相同\n",[144,4981,4982],{"class":146,"line":268},[144,4983,397],{"emptyLinePlaceholder":54},[144,4985,4986],{"class":146,"line":280},[144,4987,397],{"emptyLinePlaceholder":54},[144,4989,4990],{"class":146,"line":400},[144,4991,4992],{},"\u002F\u002F 新建root用户组，并指定id 为2024\n",[144,4994,4995],{"class":146,"line":411},[144,4996,4997],{},"$ sudo dscl . -create \u002FGroups\u002Froot PrimaryGroupID 2024\n",[144,4999,5000],{"class":146,"line":422},[144,5001,397],{"emptyLinePlaceholder":54},[144,5003,5004],{"class":146,"line":430},[144,5005,397],{"emptyLinePlaceholder":54},[144,5007,5008],{"class":146,"line":442},[144,5009,3153],{},[144,5011,5012],{"class":146,"line":448},[144,5013,5014],{},"$ sudo dscl . -append \u002FGroups\u002Froot GroupMembership root\n",[76,5016,5017],{},[79,5018,5019],{},"新建测试目录t",[133,5021,5023],{"className":933,"code":5022,"language":936,"meta":45,"style":45},"$ cd your-codedir\u002Fnginx\u002Fconf\u002Flua_dir\n\n$ sudo mkdir t\n$ touch test.sh\n",[141,5024,5025,5030,5034,5039],{"__ignoreMap":45},[144,5026,5027],{"class":146,"line":147},[144,5028,5029],{},"$ cd your-codedir\u002Fnginx\u002Fconf\u002Flua_dir\n",[144,5031,5032],{"class":146,"line":46},[144,5033,397],{"emptyLinePlaceholder":54},[144,5035,5036],{"class":146,"line":268},[144,5037,5038],{},"$ sudo mkdir t\n",[144,5040,5041],{"class":146,"line":280},[144,5042,5043],{},"$ touch test.sh\n",[76,5045,5046],{},[79,5047,5048],{},"新建自定义shell脚本",[133,5050,5052],{"className":933,"code":5051,"language":936,"meta":45,"style":45},"$ cat test.sh\n#! \u002Fusr\u002Fbin\u002Fenv bash\nexport PATH=\u002Fusr\u002Flocal\u002Fbin\u002Fnginx:$PATH\n\nexec prove \"$@\"\n",[141,5053,5054,5059,5064,5069,5073],{"__ignoreMap":45},[144,5055,5056],{"class":146,"line":147},[144,5057,5058],{},"$ cat test.sh\n",[144,5060,5061],{"class":146,"line":46},[144,5062,5063],{},"#! \u002Fusr\u002Fbin\u002Fenv bash\n",[144,5065,5066],{"class":146,"line":268},[144,5067,5068],{},"export PATH=\u002Fusr\u002Flocal\u002Fbin\u002Fnginx:$PATH\n",[144,5070,5071],{"class":146,"line":280},[144,5072,397],{"emptyLinePlaceholder":54},[144,5074,5075],{"class":146,"line":400},[144,5076,5077],{},"exec prove \"$@\"\n",[76,5079,5080],{},[79,5081,5082],{},"尝试运行下ut",[133,5084,5086],{"className":933,"code":5085,"language":936,"meta":45,"style":45},"$ .\u002Ftest.sh test\u002Fyour_testfile.t\n",[141,5087,5088],{"__ignoreMap":45},[144,5089,5090],{"class":146,"line":147},[144,5091,5085],{},[76,5093,5094,5097],{},[79,5095,5096],{},"如果出错，很多内容，不好分辨",[79,5098,5099],{},"可以尝试启动测试nginx，排除环境问题。如果nginx可以正常启动，那么就是测试文件 test\u002Fqtest_scheduler.t的问题，按照提示修正",[133,5101,5103],{"className":933,"code":5102,"language":936,"meta":45,"style":45},"$ nginx -p your-codedir\u002Fnginx\u002Fconf\u002Flua\u002Ft\u002Fservroot\u002F -c your-codedir\u002Fnginx\u002Fconf\u002Flua\u002Ft\u002Fservroot\u002Fconf\u002Fnginx.conf\n",[141,5104,5105],{"__ignoreMap":45},[144,5106,5107],{"class":146,"line":147},[144,5108,5102],{},[1072,5110,2852],{},{"title":45,"searchDepth":46,"depth":46,"links":5112},[5113,5114],{"id":4849,"depth":46,"text":4849},{"id":4866,"depth":46,"text":4866},[206,1079],"2024-10-04","nginx,test,mac",{"draft":1998},"\u002Fblog\u002F26-nginxtest(mac)",{"title":4844,"description":5117},"blog\u002F26-Nginx本地test(mac环境)","KrBch8xB9AKHIUWhKwo1Y-cwJzm64OPJXEZhfHei45s",{"id":5124,"title":5125,"body":5126,"categories":5155,"date":5157,"description":5130,"extension":52,"meta":5158,"navigation":54,"path":5159,"seo":5160,"stem":5161,"__hash__":5162},"content\u002Fblog\u002Fgetting-started.md","Go 并发编程入门",{"type":8,"value":5127,"toc":5150},[5128,5131,5134,5137,5140,5143,5147],[11,5129,5130],{},"Go 语言的并发模型是其最突出的特性之一。",[2189,5132,5133],{"id":5133},"goroutine",[11,5135,5136],{},"goroutine 是 Go 运行时管理的轻量级线程。",[2189,5138,5139],{"id":5139},"channel",[11,5141,5142],{},"channel 是 goroutine 之间通信的管道。",[2189,5144,5146],{"id":5145},"sync-包","sync 包",[11,5148,5149],{},"标准库 sync 提供了互斥锁等同步原语。",{"title":45,"searchDepth":46,"depth":46,"links":5151},[5152,5153,5154],{"id":5133,"depth":46,"text":5133},{"id":5139,"depth":46,"text":5139},{"id":5145,"depth":46,"text":5146},[5156],"技术后端","2026-05-12",{},"\u002Fblog\u002Fgetting-started",{"title":5125,"description":5130},"blog\u002Fgetting-started","QCJQTXqIeCH2wCWiONmtP_4WXaBijiQwyI3XwrtbXf0",{"id":5164,"title":5165,"body":5166,"categories":5194,"date":5195,"description":5170,"extension":52,"meta":5196,"navigation":54,"path":5197,"seo":5198,"stem":5199,"__hash__":5200},"content\u002Fblog\u002F生活\u002Fcooking.md","学做饭的乐趣",{"type":8,"value":5167,"toc":5189},[5168,5171,5174,5177,5180,5183,5186],[11,5169,5170],{},"这是一篇放在\"生活\"子目录下的测试文章。",[2189,5172,5173],{"id":5173},"准备食材",[11,5175,5176],{},"选择新鲜的食材很重要。",[2189,5178,5179],{"id":5179},"烹饪技巧",[11,5181,5182],{},"火候的掌控是关键。",[2189,5184,5185],{"id":5185},"dadfa",[11,5187,5188],{},"大斗法",{"title":45,"searchDepth":46,"depth":46,"links":5190},[5191,5192,5193],{"id":5173,"depth":46,"text":5173},{"id":5179,"depth":46,"text":5179},{"id":5185,"depth":46,"text":5185},[3068],"2026-05-14",{},"\u002Fblog\u002F\u002Fcooking",{"title":5165,"description":5170},"blog\u002F生活\u002Fcooking","IXhz7EyYLzVmQr6_K1dn5b3zQ--uUAX9VuJ8dpGHvJQ",1779428547420]