首页
留言
动态
归档
推荐
音乐
工具
Search
1
Emby公益服-上万部电影电视剧免费看
66,771 阅读
2
openwrt-docker部署lxk0301京东自动签到脚本
12,893 阅读
3
QuantumultX-京东签到撸京东豆
11,188 阅读
4
LXK0301京东签到脚本-自动提交互助码
9,634 阅读
5
微信-域名被封监测以及自动更换被封域名
9,172 阅读
随便写写
科学上网
Web开发
瞎折腾
Search
标签搜索
quantumultx
laravel
openwrt
laravel nova
laradock
telegram
DDC/CL
薅羊毛
google adsense
jd_scripts
京东签到
ubuntu
oh-my-zsh
web开发环境
nginx
工具
shadowsocks shadowsocksR
RBAC
权限管理
内网穿透
orzlee
累计撰写
46
篇文章
累计收到
595
条评论
首页
栏目
随便写写
科学上网
Web开发
瞎折腾
页面
留言
动态
归档
推荐
音乐
工具
搜索到
46
篇与
orzlee
的结果
2020-06-05
阿里云活动-答题送T恤
前言 阿里云活动,限量 Linux X Hands-on Labs T恤免费领,参与linux实验并答题送T恤!!! 开搞 活动6月1-10号 获取路径: 访问 https://summit.aliyun.com/hol 体验馆-《Linux命令入门》 体验Linux场景,通过10道测试题 拿90分,T恤 Get 点击开始体验,实例创建完成,然后直接结束体验,再点击再次体验,再结束就可以开始做下一个任务了。 每天凌晨刷新200件,上午11点刷新300件好像是这样的,听说8-9号每天1000件。 可以先完成所有任务包括考试,等到刷新T恤后直接领取,领取要填写姓名,手机和收货地址 T恤有码,活动后统一收集! 考试答案 题目都一样,只是顺序可能不同。 1,下面哪个命令可以用于删除文件而无需确认 B A. rm B. rm -f C.del D.remove 2,下面哪个命令可以获取到当前工作目录的绝对路径 B A.passwd B.pwd C.whereis D.whois 3,下面哪条命令可以把f1.tst 复制为f2.txt? C A. cp f1.txt | f2.txt B.cat f1.txt | f2.txt C.cat f1.txt > f2.txt D. copy f1.txt | f1.txt 4,为了让文件的所有者有读(r)和写{w}的权限,而其他用户只能进行只读访问,权限应设置为 C A.566 B.655 C.644 D.744 5,在vim 编辑器中的命令模式下,键入( )可以光标当前所在行下添加一新行 A A.o B.p C.i D.a 6.在ps命令中,哪个参数可以用来 显示所有用户的进程? A A.a B.b C.u D.x 7,如何在文件中查找显示所有以“*”开头的行? D A. find \* file B.wc -l * < file C.grep -n * file D.grep '^\*' file (多选)8,下面哪些命令可以看到文件的大小? ACD (D选项存疑 自行判断) A.wc B.df C.du D.state (多选)9,Linux下用哪些命令可以在管道统计一个文件中单词出现的次数?ABD A.grep B.wc C.find D.awk (多选)10,下面哪些命令可以停止sshd服务? ABD A.ps -ef | grep sshd | xargs kill -9 B.killall sshd C.kill -9 sshd D.pidof sshd |xargs kill -9 结语 赶紧去撸羊毛吧!!!
2020年06月05日
958 阅读
0 评论
1 点赞
2020-05-15
GTA5限免了-7天内领取
前言 《侠盗猎车手5》(Grand Theft Auto V)从昨晚11:00开始免费领取了,昨晚官方站点已爆炸,直接500错误。今天缓解很多,可以正常领取了。活动截止到5月21日。 领取 领取地址 领取时最好不要用代理,如果IP领取次数太多可能会出现您的账户目前无法下载更多的免费游戏。epic对同一IP申请的游戏数量进行了限制(您单独的IP是绝对不会达到这个限制的),加速器可能会使大量用户使用同一IP,造成无法下载更多免费游戏,建议遇到这个问题的玩家尝试更改自己的IP 免费的东西总有很多人批量领取,然后你懂的。风气太差了,哎不想多说。 正在下载,游戏真的大!!!
2020年05月15日
651 阅读
0 评论
0 点赞
2020-05-14
jetbrains 学生包 500个
前言 找到一部分jetbrains学生包领取码,分享给大家。500个学生包(让你爽一年jetbrains全家桶),领完就没了。 使用 登陆你的jetbrains账号,然后拼接链接https://www.jetbrains.com/shop/eform/students/request?code=加上下面的code,在登陆的浏览器打开链接,下面是500个学生包code: a1ys9j11ho0gznptueydc7kmo 1fn11mctn5o3w77cdxwvij5m6 a9pjjx1ommm33sh617xymejqw 70gm6f47o654e42xdt7gi3sw5 8kcz8nk8nrg1ez1fit1fxhejh 71znawiuth942frbm9hxl4z9s 6onm2yttj081k5mgf91ajj859 1u7rmph8e9h79luuwi6avnvqz 575jycq0lsghaxauvgqdyof5l 1z2sicdpclrpasss7w8mezxcd 3inceny3o2q5jvl7gnv9ivvc4 aaw0gdgweac8v4jz6wgtdqbho cxrilafk5w7dwobsrsj98ekoa de1cdyyk5coq6n18l9sg478ix dk5rfrtlbnu8gu32rrrkfz46y 2n2l0jqserhoxnvqp748nh9cc 752sxb43wlv6kpwtrcdmc9oig bbj4kvxlvcsv0957ch58xn8s4 551ofkn5oo1llgbkxxyiuecq5 ezm1em2doh7vcdh21m58sf2vj 22f7yf06b0ldxwqh84qgezoli dvamfusy9mvoqnbxsg15iz2xb 6wdxb6y0bx2deh1ij5blibhuu 88ph0ndl9vcrcoc5qzzv1hefx 8bfcl789ysy4g7vcqt4qix89n egu0rp627hn3pm8r8b4e9abn3 43myqmm80ya1qs4wwl29wkavk 1ir72n12u0818sptofcgx918u 4gui8p7di4h3wf9jngk4metvc cg62hrmqdr62q05ivea3cprhv 2l27ea99qqby8q7wk4iwi4we 65da9zpk5v6qgm5i6lveu5hbi 858qf7psg85n0f9jnziyq0v9d 5qjpiy3j5ch7bj28x7l1op8ew 2dy0uime2wp7b1a2jns4onlob a9eejeco8ella0dyzknnwdfif e9icd3z8xg6fwtr322h3wlozf 2e164sqay2k42je7gxlqzzi11 21k7ar53iqd5m7uf95rqh4rpb 4g1cv00mzb6i19eiaztgiae7g aifpm0qihnmektz7ixbwg2hkb 3rw3ack62cdjxjik3hl14x0jd 49ta0025b7xen7uzseh6hwm4o 5ptf61mvs920kl9424buof3ib 8hnpopzktzk2x9smqetiup1hb flwu756j3eng7t08jj5ba4jo 6izv80ko8ob0ub2swp2kt7hn1 57j0zroy21mvmts3u9jdsdiv7 5996f0mnu313qhi8cs67a7iux 8t2t3y27m2xsyn3qo1ayg1agp edgqnqpeuff432gobfo9yi98q bpqeedqn3g05rdonvfwnx53pg bha7vhm7obl2mitx8mr9ca02u dwsggvft4srp2043erf7lqsxh 1bt9op8mdbe8yvvfk2661p5gw 4eaz7cd8f6eif555z0cxra7o0 8g13tt42kz8xeibz76czqo26q mcxieql6bgz2z64b9y2zyszj 8ynpqwf0zhcwwynqhhfsm72c9 1t70tzll100rwjwytqml3gurt 32fg6el0okwgr9jdlazy78rvv dj6aj2638mase96n0nm1l7f7h 4rkv6xoafvy4oxgodl4z8k466 65pu9fbnsx3cauig826mh92he avuao8jvriardzjyscohgdl5a bvulstsxcvlfyzxsdsa9bglqp 5mmvssxj68t4fom98m76e9q9g tq9h731emxu8bj4ghvxd8ckx 2jkffukbvx39uk9hw8g2dug9q 13y66c3h1dxlxgj9f8u4xinua 71a40maqjsnvgidtihsabshf9 a7ghifeu14xs56bn9tsw32qvf 46d421bv69f25zyy0bo7gvtm2 cds86t50qy0c3vd3c6e86ocva 6ia9ctlr4rpg5necl4c8xuj42 65vbqj9xh3uckay102ohzi6x9 b4t8f5kiqlod3a1gyusfv0hej 210ltg5lt6xva8u4yrvq7b9rm 67itw48x2bermtek4a0wz3akk cc70400dng6mvo416s7kn54ie 636lksxeqdy8pzzrytoupsbhk dw6d69xgpx7s4vlibws74dg9q d7snq55iu52x7u0uofoyhz7mq 7cg94ong6cjnsjn1z5wj0e745 9cvas6eiu6bborb9l7amnedyt vp2n0iskt8ssexrprkxctxkp 4gvpv023bwopk5o6e4m8ofefg 5t36otvgd92v72c2gmpk9x7x3 48ar905nfzooeh65u4d7vrpz6 cjk0udxkidou5r2ly9csl6l9y 7ttt9omwx7unw64cp0cvetufl 44qre7zqh6dylbbcdcos0clyj 172135jehftcije2sf69q36sw 70ou9w1eeetm3f5824pgovdzt 62m3amr2ezo6ci9oh6hc1cuqz 9q98usyypvdopi9hsvg7ta9gn 6jv9p85wwxp0slzbpu5vdqrdj bzy3nk8cq7jdk4zm3k09tjpp6 907a65synhz4clqrnpr5abuok 16evb5eq2c481zapmdhxqu7xt dthzdxkgy39mhr4yxfh1i09u7 42fqa4w37h6stdtco76htj2v0 3wm5uxjcsv7nmps34apsugn42 6tvdsno543rahhbll13ljhkwm 1diymr6kdqd951qct3vsho1m6 b7g6g1b98ibnoa6rh208e4wjs c44cckhqup3cpi537wtnvqn1e 8y0sdjx1kuv5orx2b3y9hs2xr 5e4lk0s87vh79zgaal4ydqc4l 7yr8gx7drzknky3wx14r6npxe zq2o40p57d5jb1f2aqex9fta 2zrrqy06y72gv1z65mpb0zohg bb05yheqk7aus2jotd7xvrj5w eqsggefmxonra8xaz1wa5luz1 41ibj1o17droy698ro9u3mcu0 3zuhxu1od7q8snrdh62gd1qdy 31kmrd3q7so0neu0a3km4zitm b9dbv4fpggxrb7rx75ixbycu6 6qzunx0oy2zb9ldavceh1f6al bhdjpmtcdr8972itslcbirvor emfg4d9w0zvsq536t1wnk03tg b073f115pd45j86bthgu53s8p aslr0ivqmcd9bfb5gl5val7h9 2vvthdvnuj4qe8n7ox0q5es8a 20a0sa8ad8ja3s194pbt4nfgy 1e6qclo1qnzhdbft1b50if6t3 4lx1hwsqcoim2zw0i7u9h42py ejax44s5p0lqypunlmbhypfu bvu8gp95e1419ed1ph59123bn 8ztsxgguf5bgliksqtwxlmuz2 1ccxtf0iqs7wzbrqyvb8matjo aj6rzl56qu8qoknwtp0npgwvx bwtdyggkx5txe72chtvp7s3c ntncswqozls41p4k79wiy4pz 851a3kzpa6lmgaleuslu3t94h cvbr5b5ckv0dp2grpyjye2zec 8naq9rd3gxv0531nbyl88yfm0 5z1qlbq1qk2lj4tae96wb4s72 5099hdcn02lilpp59g3ay9rlt eydrkpq7hfv330yc0768l6u43 6bd2vvw2rvkq39t2bdgaacj5i b7jdg339jcetu3ggalsjjpmu5 avcgx6or0p5dfsl02eqyk4fsz 2fgl1izsodnsxpvemwvrz9dri dudg69lzzcnnijt09c5n571lc 4p672xoulhls3wu7kw0db365w 396pp48igvrjrag34pcou8c6s 6x6u4tbt8ygdphos03bg4wr4v 1q410gvqb716i7xzbuk3tpqif 4ukvfgavggfcqw4fmc9xykj8k kqkqjxfd7qhsik852jb9lmwl 86evjcgsz67scmr3p3pszujge b1383debllopietw07gum02nu 14bf5cj9xvbj0bqtmv7tmtshn 4epzzj2yijx36rp09bk9gocby 4sfqbzy4t7eg7mc622ddj4j6j 4v3bvykjtk4a9igtwqg6crngi 3rkg9fm3p9d6dqazy7mp87ldv 1452o399ulgekroz155mxjv2 mbrum25jqrv4d8rt7y828fes eb1eq48ws6s6727va5e2pqe83 44ae38lft8e9uoostutfeoaf2 8s4ejc7qh6h5g3ked50y0hknc 1dg9cfgz1f32yq1r85ahp9m91 53aj9h12d6cwn9leagt1t1kfx 665smsbk4tyuj6zujjqgbk72j egeg1j2k03vccadjit81w33l3 12pqv962bpwgnj7jjtk67o6vm ex57kvw9ftonbqfg735lrunri 5r2y58tuza8i3i46bzh2yu15e beftz7pxsl419ony8m7lef34b edav9gnyyi3tx0jswknukhe25 59szyzhspjmiaeynyoztwaal5 1k5qpvvc8xuymm9lzkzjbsxf5 anoll8k3sep3lkd5dg8q9uwd eajo5gy1u4tzwza39x1bhrut9 3qi6xdgza4m04jis0k3x8eev2 fn5vuocq3xfpmc61t49dfin4 dm9lxognqpisedi76uuou1jcc 97fe2tfdk0yfd0o42a3n1dl2l cqcl05br4vhcsm2tqv9badxtf 38bltii1m9jym329g93sqpkia 80rqul6ocprxmee2skffe2b6c c0j101805d0gbtg7s4xi8advi 19o8nq2zzu94q8l4i9miet8z8 bnkkfyeykv4t63xfy0wmy352k w0cqsm5twphjxi1la60cw5ga 4bygvwxvywxgxoedggg3hgafz 5cpaic6uxicn7oixfk2ia51ad cvp32bc3vi2kcbzwlbr8addu9 6hcmzzru4wmhtuczc8fwcfa4 dzg301g3uemf4wtzmxw9ttnwt 47r8jr01fz3taldqqpgby8aud 8ayevxq67ess0di9tzli527ag djp93d2zcgbzbzju4u17nx11x 12m5o1s15owzcxz6kopmx4roy 63oar10rccelbmz4w2e1nr3mi 1pbjzi1kmqprkwckfermkjyr8 6y5alezj47cti453w93bxrzk 2fihtyo754w2peoqdn11h13v5 10w52i1h3zrkbha0zwd4yshri 9cy77ofzr97sueuwczic6a2oo 12zlagt3l5gba82hhaqgzj482 3r3xi1jzpsz78iwv9vi0kesbi be5gnh4l2td2d44hhvrfwnwvo bw50nh8ca01gmorp3vw6dajtg ehglyxuwr9dr4twprvqxsbvw4 9w1u1tksxcelv2u6eepm0ql1l dplr9bw2ysjirzzcbpylrt2m9 7cpn3zqpdsup4twonshcyw8rh ekbmzrwbkv0h1hmrgloph1fla cvedj63zzx8yd40qy4ileqjhw 8ybidwxixdnoctnzr2gjrrlbb cciemiizalj6hrb1ntbdr6yq2 crvcyh5zl51tytn6cqtn11h6f e9t41pqy4d8eerh2bhs4wazec d7z53lg5ftlqzumrobq02din 7z3raqetqxgfgs8a6vmlbjpx1 eh635578cs82427u5rwdpmwnz bkpqedgfc9hfhjjc0g5inzs8l 1tywjw1gcjianj4d984rs3uyr 7dcus27vp3wmr3uptjm42kx1s 4pbfvnxuvs56ajxjsr73kxp35 a73nee2zxjmznwt42ercozmeq 94ogie2v6po71yn5azxituin6 ec9vi249qtbuizr153j7sn67h ao7sw7ip4ain6yb7x2otyebi6 c07sskia6brjpg924rfsxl6ja 999x3ecp64ee4z0ehslpoxb2r 34nik9ouvlyhgmihc75jfwz54 alr6s9yl0lwnv7j7o8vy1zbjk 91yo99o3r45epnonea1go66ee bpbyrnr37g0wlprifnixl7x84 7nnprg99lwj155ya4jyax4b27 80nptpf2vua2dj32pmbcq9u4 es8cjagwamdkm1utfzpgr3e5h aa96lnuum088x2zmzi9x95nqh ey485dm2zdpk81axgbitd55vn 4r5aahlxa4ghqhuvkeyyxdsl1 1hnnrjgcxfhwpi4168wb7qc4o 1rm5mieelpumnk9yx3q60j926 7vmz76tiyeh9hkel6dk394vdu 88rfrc1ibnjdknovttezgchm3 c1dhzw40lf0119dwmkl91zo3r ahdnk89nglgxurl5ja6u89xyo 4t8jkmhoet983zh4zfnazicmp 2ssul0lo64uj6rz50ajxg1fmh 40labewa808b4krderzspnrcx 42i78x99sjbrn2nxmrjd6dmul 45m3czoaaz46ldjw9m9n1ywv1 982vq5jzrod3oj3p3fg7d9kmp 4d59taxdtf3ik**uqtjvg0b1 7ch57im09h0ug5nduundd6wwx cn6bqsy4jz5iuxho7rgwpclov eiw0nxverf7wsznyc01dm2rwy 12vy5yok1k7bvhlbeoreqlzxj 2gky2gi8f25h5epythbyi92q0 c0vwwzu8d27r8eca2siqymcca 2a20z477jwwu5pw6zpp8yvxgi 36eo6436fktyn6unem4ar2l0b 925qbaw90v64tikbu5tl6o1be er7hrx64eaqgz13r5cjoh5kde c2677hyvjxcbmd9jf101fl386 3hlzb4b0k7kvemxpfpwao29dw 7vur6n2mz8ynzg3xk85rde1kg 8xm7sd2puv8pt7w0gzjm6883n aa3n7br1qbl78xgkl887oy80 1duucdri7oip1t29txwzgdssn eqpvgd501vxkf25bp0gyb4x5h 16suyms7ws89r3y2uqnv76vkj a83v66klg2c8fokpia99gg4ig 61vgll9osdqja0z5qhx1rlkse 1dh5m850luq788nv5lvjvui7w bch9hm9zx6n1lu5i6r2o5omba bl5jffhr7ytok9sn8f9gt2voh 8frhkt5vv3tuncmbjgfckx5zu 17ekeuw002hbeorl4e61uagza 8b34h8l88xuafnz05fh1bq79x d1e3z4eo9k1nzlkcd9edmhh9l 7bgbwtq0vujmyq29o6k5i8o4g 4glyhu0ffetmwa62nj4h1d9x9 31956p2mowvubzw3cvyhqjzi0 a32e0nahgqulrricarotsigra c5rnlzbn9vatd7ak3rx2lg72y 4q3s3q5i6p6ya0ckp3slubxgc dvzfeprnqug1zq6e2wol4xsy0 a58a6q7hm8jragcyl0c092zal c44f1khvcq5lp0tztg4wm7ea2 c3t4lmiimpd60l6hpp3jgdkqg cgwyazq7yvlqkssscs6awlv3u 8zruj1y8o4a2vlygap13gk4et 8iwhqnzczjbsq0c0999j1s8wh 5vigkqigbipffd6418gnt80gd ahotsny4ykdhmv3rhilqb8k6h dioxi6rk8ozmeyc7wryvteszv 7x0qbej4xjb580perumj9nlcj 9lxibxvvcx34gzwxyosnmhj5n 4bi5dxwiwctv5xjxqok1n3x09 9uhjjolej9fqiph12xyp5e00p c4j0wz3ixdo313r2ffco8srbe 1h987lxm1r1w6pr3yc0gsz3ip ds3t2t5kz2lc82zephf41c3b3 bibzbsnryc59rf0q3vdydj63x egjs0obnv1h8gee26fanvxw8b f1yo9d482l4a85m9kupm3emht 3pnj2xxqbdbf10sbll03x6wve afvamwfwmscoobt6gf0ovz5jm f14s9nq7lay90c8z959dcnty 1s5i3wg3i7n043qkzwer1by3a 4c8ejvcc1wqbikri8oeuaqysb co338b66qjivrptbepsz0c08m 7mldkuzr8vkrl3rk43441zg16 3sd02hjrcwjxl2xusydbx5vc1 31i47lnyaeu6wgypheqo3pwzd 5kishche3dwgrh4boutnz3d8s 2gv1tf4y0c16gdwmjwvfnpmew 49velndurayyspfuoy6cncrlq 30vhhi5fu8avf455qg95ezsok aaxdqive0unbnwoiy11fmhx6o 4t91ht0y5bmwyynmz5qhipnx 56u7bgbla0x32w0nfu7t4jv8z 9shhi9d4dgqkkrsjwqkladlqw duo7swzxu60vhnydjuie6vtbb 7akgfn8xkan3lcwayz8o141wo 3ug2pfdwicn905rwnnj0opepl 17i5xv2w7625d2p9r1ephlzgl 3cf1ruslqa7lt7mblpt5t2by0 1uaxuof6tujsnakrrqhv4gc6k 72hs3972da0cigcidfedbxdnw a9w2nuiloof59muuiacuvhe4b 6vk28kwma0b4d4edz41zqnksz 8i4b3v4k3vm67rj1u31iwicq8 eyp9m2ukg3541i69ktczg8bxi 1s29npl30faal3sx1g1rud9xo byts3bi0ashd40f8qihug2mfr efw4zpje3s65h7l7k0yv4rdii eo4t4aa9efe9p3g3dwkk12e0i 4mzqifwbdcaai3w1obcip27c1 ebnkecqgr9j7j4ktpq49961wf 3unjqfrfv5br6lqkw60xkukfa 5hfgkqb5eyzearg5h9fl3lqcb 4h0o6ta6en78osxcfp4r8qwma e0etx1b4q486gl485v0atb1uh adh01zyf08ia4tmpgiumi5fm5 1yjrzu3d0xxdnpinlob9rbc1l 66d1u2rl8pss6g4k1l8sb61m3 54t9snxzrysvphxa8fsfkh78a 8vjucis05k9j9knglgkdplfst 2236dyoequfn3klqkw7iu7xn9 8vsa0ta2airv7gtpfuhcrsb1 bjnrgmbc9xpp7r8oqe0rl863n 4xgvrca0zceeal2i91lwcyy96 oqydeeo1wx9w0h1mbvx1day1 7xy91bu21nxz172qrhgrn01rr 6tmle7x2o66obc75fl7y3awct 1caks9vr22btb470t20qyrjb3 7uh5jedeyblqamlnaxjqcnxzn a8lb4fztr1g52zl8xg2hj2alz c3xbtuh1rhbso3dx51h0lm2n 9ifk5bvct2trktyeo88coqbv 4ok5pixbffdyj9f900li5d07m 961terh0e8ipyueleniuslto3 7mdz77yx3tir86nc8xbnviy1u cmtdswut3bk6cn8sz2vkkb1ai bcgpn8cbycf9tkqhkv6y9yn0v 3ab5ni18y5bd8zdr72foiuvn5 2d9mp9jrbc93ttd7aph8ra32h 8lrslvsiygpssre08hz31uoid 6lwjv7ky8ht08374oe8es94ku bn1q83iz9tgduh1pslr82ojjc ab8pwz8w3ndlbkcg5q1tvypw4 c51rkuy2735o10m27515sash9 3c9vmqgn2uvnmatiqem4sbp22 d5uoykfcqfrjabmxp5oe3nujk 4xdbhrbixxpm8rsyilo49alga 4wmj46odsqrsbga1lzpghee8k 6zc9fcazrm3cu72z8z7trxxqn 1gu1ad88k4ali8td7qh5u8uuz azjeu2t9i6unuoeqcvx1v2li9 9axe8rv1ggjgzk3f3bmx07c88 bhkyyjwc33bvqautu41c7tplr ucmf8gpr1xkyqsdmbvdv9ulu 3rsgvmniutsly1fmuh5wo8nmu bkl8lpx711o8h0px4y13edb9h 4swvzmfrldcodersgy5j3e2xv c27aho4r9qdy9ecmnb4ja3nxz dnnnkw4svn1iele4nq1titmd9 42rjmab18tq5he1e2mvlc3mr5 d5fl67b04rsuxssl0awsb10q8 czeydcwmewr6xf4q8xmmjjdl5 dgyrmwqdcrds55feg62fjz96e gxfmtcdszg787b3y3t8xqqj3 327fg7wudceo7nkign6fbhfsy 5zwbw64swzits0z3xz0duk8y8 1ri8t74f797nzy75dmd4jl06s 80kmm7xia0y1frx6qfufvqw3w uv3m4nje8gyero8iidhghy33 2fdn60h8qq4n6dfm79ffji1wt 4cm1jpzqk4ydgsg5xodypdkfj ejpsd6davj2di1irvvtgrwyej 13w4o8046ev5i794zkpjwmv0u 3etqvhaxkthhhov4tdpkdg34j ecdv9lg5fq74a6ppkk1kgw05m u3i3pmahrv9a5eble2g7m6ku 9crmllkoomdjqne9u1umfe1e2 cpcocbpuect7t4i5tyt3swrfx 640el5d6u4mzk7zi2et0etmtv dc0dc7gqz5rxfqwlrhkx1uz9j 77re3oqv9jygowbe51nzr2ime 296zgefacz2ctae4ggy6im5ge vkjjfty7q71knjvd108ifbf0 6otvuxc2gkaj2z7abjq3eg6wp 9wwj7acfleqb08r5tp3g0z4k baac45w53i6fyu8jdoccop7k5 5fcprf3apbvv29i5w9ah0xdna 3qzkj3pwgp5fagb379t6p1rc2 chpbhihfkaposwpvwh4o44nqi 7sfwmcev6utmom3pkjagnb30s 4zigt23edivik37xq06ztpgph 541q14oly9b9s97a33vthz274 3svhdavtlma9xz0ag5flzeq64 d8sc6bo0mf9jcya9gl9qggz79 asg6yxxk7ozlqza7s04vfo456 av5xy88kwrdo3orvnybzhdiq9 a5zxptqj5qhcu32rtb16meem0 ehot8e1k7uaa0ybv5zhyzi8uo 7mdit3dkxb3xmr015dph7ubk8 30chg9fjlzmeiyb3rhfhd0rct 5q0y0c4y2eh6an51ys4k8vf2d 1vviccpxltp0iy7xjm2dmyo81 17ad429ogoqgplrwitqp5n0uo 3bxct227tyoapn7zg6dhygke3 12zchcgtj6hwupe8ug5odg207 e674df6mytv50vp0y1ty54hb6 b4rntonleum4jcen5vbuhob5b 4shtodz2g4oy5jv0l3113erpo djpuiawhg5erjm5wdzm7144nq 8fek5rtcmw9f8cijsuwi8c8lx 2hgmz0naaxx49yvc9sdqftqqj 4zk2lkfylyg95m1vgdhqhv1xf bs1ix4ifg54flbx2ep20kg9bt 27omr37rjs2wmd528spluep2i 44jow559auwkw7f31ymiia9z0 cgmokrwre2dp7567gde3hmz0b 4wpr027bvo6rmlcw99t5xifmv 72n988hdv3avwq5p1w4sploya 3b1l9nm8p11cliry9atxpslaq 4wbqp5n1dxd400lzwj5027fqb a8f8l5b0fdqzea86b5pejk4r4 7xmsgdptim5rzv659uo3u1soy 1ut35s8n3gch3s2u8n92po9xa 62gau6g56l4tk0z9kvradrj3d ckrtaslxjos9na3mwq7m46twb 1c9u1caw1ujchllkveq2oggm0 2i9horgp2hw9ywqm3xr8p4xlw 1hqq0pponbhkr1ced6wiiwstx 957k81updxije0zdm2m4p79rb dvdhbiusuhl7g5i5zfshv7v1f 26b8sr3ufn0n91dpixvql9prd 9ungr2hzx1hjoyykja1m9bkq2 3z5bk43oyn1pi02txxc76d7vh 6int508q42sz8l0elb74ocmlc 83a1m7kz3v8uw2m4j2gy3xwkl 6tqpkrnweda0m1kq0yn3n2wbj a4a83l411ffw3bt1hfnrurzup aufetm82g2el984pdrwq4vvlc 2gpfzy3ava40rvvdvd6cg1q8c e6ccyrsu5j1sa70qgo00fvl8x 1cu8cik5q22uhjii9zt6qvfqh 5g5pnn1r2t4ck3oz5p23ialyd e0xby9sknm28cb4p9dqcgk98h 2h90h8yn2s3k5aifm4quu69x3 71v6zldr2is8qyv8jvg0kynj8 8d6vtz9i9xw8jjlv02u0ueys0 7tsjqcbxu209qqg3bsz5loy4n 36dk4h8xp5uj6yw7hz6uxrm1o exnfs8e6y2jj5xa8w980wlvlc 2keyfnsso3g5v14lm12x0elec dbvfu3ud577r4jfwlj320wwb0 95ogfluh1izz0hqdtn24pjfq0 cqgyaydiunyr20ycd0bekkj5o 6xe7m8w8qsht5llhvmhzioydp 6b46ghava2q4oxbjwwxapi1xt 7dnbcgig61md966vsxwkr7zs6 dgci7uiae3gyv4qeiem0ary87 dwu36p3sx66uv9goc6a5z6fix 2dc7r4yqjpxr3w51jm25uu0xi 5y6er5gz31jia4wl6x12dz0q9 2x067vvk9n4xsayk4p849fn1w 6jiln85xesx3nmufzvnbc92yx 4hz7ontepmqvkrkrfllekt3ix otx7omf73czm2q8w4idmrygq 5a1fbz5axqo98yxuifnef240t 3pslpvafjxr0hf02r9xg3nskl 5xxkq6bjqk385gs2e8vmf0z61 9smokkesa5jpysb7u8jbgw3rq cmo8i802p8fa6162x38txdxlr 33pzs6gfsth9p5kma5x7dvo2a e4vxudaxxq499ngi7e0ue80a0 4ocrx9k7r4fmmhgu9b9snb7ax
2020年05月14日
2,678 阅读
2 评论
0 点赞
2020-03-27
Laradock-PHPStorm开启XDebug
前言 前几天写了一篇Laradock-部署本地开发环境,使用了几天发现确实很方便。最近又折腾点东西,没有XDebug确实不顺手,网上找了不少资料和教程,有些坑和解决方案记录一下。 开搞 开启XDebug 需要laradock容器php-fpm、workspace都安装XDebug,如果已经安装则不需要管它,否则需要修改你的laradock目录\.env。 PHP_FPM_INSTALL_XDEBUG=true WORKSPACE_INSTALL_XDEBUG=true PHP_IDE_CONFIG=serverName=laradock PHP_IDE_CONFIGXDebug服务名看你自己,你想改就改,不想改默认就行。 然后再重新build docker-compose build php-fpm workspace。每次build真心漫长,就一个扩展也要整个编译,这里不得不吐槽下。强烈建议科学上网或者修改laradock源地址(修改源地址我没有验证过,不会科学上网你可以试试): # If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true CHANGE_SOURCE=true # Set CHANGE_SOURCE and UBUNTU_SOURCE option if you want to change the Ubuntu system sources.list file. UBUNTU_SOURCE=aliyun 配置xdebug.ini 两处都要修改你的laradock目录\workspace\xdebug.ini、你的laradock目录\php-fpm\xdebug.ini: //xdebug.remote_host="docker.for.win.host.internal" xdebug.remote_connect_back=1 xdebug.remote_port=9000 xdebug.idekey=PHPSTORM xdebug.remote_autostart=0 xdebug.remote_enable=0 xdebug.cli_color=0 xdebug.profiler_enable=0 xdebug.profiler_output_dir="~/xdebug/phpstorm/tmp/profiling" xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.var_display_max_children=-1 xdebug.var_display_max_data=-1 xdebug.var_display_max_depth=-1 两种方法: 修改xdebug.remote_host值为Windows:docker.for.win.host.internal,MacOS:docker.for.mac.host.internal。xdebug.remote_connect_back修改为0。 注释掉xdebug.remote_host配置,不指定主机xdebug.remote_connect_back=1,让XDebug自动捕获主机。 网上很多教程说是改成xdebug.remote_host=docker.for.win.localhost或者xdebug.remote_host=docker.for.mac.localhost,这是之前的写法,巨坑。直接使用第二种方法省得坑爹。 默认xdebug.ini配置文件是不能动态修改的,每次修改都必须build,为了方便可以修改docker-compose.yml文件 ### Workspace Utilities ################################## workspace: build: context: ./workspace args: ... volumes: ... - ./workspace/xdebug.ini:/etc/php/${PHP_VERSION}/cli/conf.d/xdebug.ini ###添加磁盘挂载 ### PHP-FPM ############################################## php-fpm: build: context: ./php-fpm args: ... volumes: ... - ./php-fpm/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini ###添加磁盘挂载 ... 这样修改后可以热修改文件,就像配置nginx站点一样方便 配置PHPStorm 新建一个服务,服务名称就是这里配置的PHP_IDE_CONFIG=serverName=laradock laradock,Host填写你本地站点访问地址,开启Use path mappings,填写你的映射地址/var/www/you-project,然后OK。 点击Run菜单: 点击+添加一个PHP Remote Debug: 勾选Filter debug connection by IDE key,选择你的刚刚添加的Server,IDE key填写PHPSTORM,这个值是在xdebug.ini配置的。 再点击run, Debug 'xxx'就可以调试了。 我在调试的时候发现PHPStorm时不时断点,提示错误:Remote file path '/var/www/xxxxx artisan' is not mapped to any file path in project,这是因为XDebug也会调试php cli,如果不需要可以关掉: 进入workspace容器docker-compose exec workspace bash。 编辑cli的xdebug.ini,nano /etc/php/7.4/cli/conf.d/xdebug.ini,注意你自己的PHP版本,修改两项配置:xdebug.remote_autostart=0 xdebug.remote_enable=0 保存退出就好了,不会再调试php cli了。需要的时候再打开好了。 配置后所有laradock容器中的站点全部都有效。你可以试着访问容器中其他站点,当前项目也会进入调试模式,而且PHPStorm又出现错误:Remote file path '/var/www/xxxxx' is not mapped to any file path in project。因为当前目录映射找不到。要重新打开其他项目,配置下目录映射,然后再开启动调试,不要开多个PHPStorm一起调试,会疯掉的。 结语 在这里浪费不少时间,确实够折腾的,不过确实长记性了,最近又开始折腾Laravel nova,2018年刚出的时候确实很多不完善,一直使用Laravel admin,总得来说还是没有Laravel nova那么舒服。现在Laravel nova经过那么长时间过度已经很完善了,是时候使用Laravel nova继续折腾了。
2020年03月27日
1,671 阅读
0 评论
1 点赞
2020-03-23
Golang oh-my-zsh 自定义插件批量更新程序
前言 Golang很火啊,引用维基百科词条说明 Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。。并发对于我来说接触很少,几乎没有写过多线程并发之类的程序。之前折腾Python的时候使用过多线程,执行效率要高不少。PHP也有多线程,我真是一次都没有用到过。 oh my zsh(有兴趣可以了解下oh-my-zsh强大的zsh配置管理)会自动提示更新,但是自己安装的一些插件却不会一起更新,最近翻了一遍Go语言官方文档,写了个oh my zsh自定义插件更新程序。 开搞 oh my zsh的自定义插件都安装在了/root/.oh-my-zsh/custom/plugins目录下,我随便找了个已安装的插件试着git pull,果然没有更新。插件也不多,就两个。但是我看了Go语言文档有劲没处使啊,就要折腾下。 我不仅要写,我还要多线程,各种多线程。 第一步,找出需要更新的目录 上网查、看文档,折腾出这么个玩意: func GetDir(path string) ([]string, error) { var s []string rd, err := ioutil.ReadDir(path) if err != nil { fmt.Println("read dir error:", err) return s, err } for _, dir := range rd { if dir.IsDir() { s = append(s, path+"/"+dir.Name()) } } return s, err } ioutil.ReadDir读取传入路径下所有文件和目录,然后找出所有目录返回,这样一个简单的获取oh my zsh自定义插件目录的函数就封装好了。 第二步,进入目录更新 其实写这篇文章的时候我已经修改了好几遍程序了,还是贴最终的吧。 更新函数,遍历目录然后执行pull函数拉代码。 var wg sync.WaitGroup ... func Update(path string) { //不异步不需要执行 defer wg.Done() paths, _ := GetDir(path) if len(paths) != 0 { for _, dir := range paths { //添加进程数 wg.Add(1) fmt.Println("get pull dir:", dir) go Pull(dir) } } } 最开始的版本没有使用sync.WaitGroup,会出现问题。涉及到Channels,主线程也是用多线程,update函数中也有多线程。Channels在使用<- ch接收值时会堵塞,直到ch接收到Channels的值后继续执行。那么不使用sync.WaitGroup堵塞进程,还没等子线程/协程执行完主线程就已经执行完毕退出了。 func Pull(path string) { //每执行一个进程都要标记完成 defer wg.Done() //command := exec.Command("sh", "-c", "cd ", path, "&&", "git", "pull") command := exec.Command("sh", "-c", "cd " + path + "&& git pull") ch := make(chan int) go Stdout(command, ch) fmt.Println("ProcessState PID:", <- ch) } exec.Command有点讲究,起初我直接把命令作为第一个参数传入是不行的,需要把命令拆分成参数才能执行。 后面我又把获取参数封装成了Stdout函数,其实我想折腾下Channels。 第三步,返回命令行输出 折腾起来浑身是劲,编写命令行返回输出函数,我要看到所有git pull的执行结果。 func Stdout(command *exec.Cmd, ch chan int) { stdout, _ := command.StdoutPipe() stderr, _ := command.StderrPipe() if err := command.Start(); nil != err { fmt.Println("command start err:", err) ch <- 0 return } pid := command.Process.Pid output(stdout, pid) output(stderr, pid) err := command.Wait() //等待执行完成 if nil != err { fmt.Printf("Process PID %d command wait err: %s", pid, err) } ch <- command.ProcessState.Pid() return } command.StdoutPipe,command.StderrPipe分别获取命令正确输出返回和错误输出返回,好打印出来。command.Wait()等待命令结束。exec.Command需要好好看看文档。直接执行命令不需要这么麻烦,使用exec.Run()就行,但是我要捕获命令输出,所以相对麻烦。 func outputLine(oReader *bufio.Reader, pid int) { for { line, err := oReader.ReadString('\n') if nil != err{ if io.EOF != err { log.Printf("Process PID %d: err %v", pid, err) } break } log.Printf("Process PID %d: %s", pid, line) } } func output(stdout io.ReadCloser, pid int) { oReader := bufio.NewReader(stdout) outputLine(oReader, pid) } 这两个函数主要是重复代码太多,封装了下,outputLine函数主要是按行输出命令返回信息。 第四部,主函数 主函数我改进接收参数功能,在执行的时候可以接收多个目录参数,然后并发git pull。 func main() { // 接收多目录参数 args := os.Args[1:] if len(args) != 0 { for _, path := range args { fmt.Println(path) wg.Add(1) go Update(path) } } else { path := "/root/.oh-my-zsh/custom/plugins" //添加进程数,相对于Update异步,如果Update不异步可以不需要add wg.Add(1) go Update(path) //等待所有进程全部结束后退出主线程 } wg.Wait() } sync.WaitGroup就是一个计数器,使用Add()添加,Done()就释放,Wait()会等待所有Add()全部Done()后向下执行,否则一直堵塞进程。如果这里我使用Channels无法控制,主线程传入Channels,那么Update()函数何时返回呢?函数中又是多进程/协程,没有找到其他办法,因为Update()函数中还要输出,全部用Channels会乱成一锅粥的。 贴一下完整代码吧,看著挺乱的: package main import ( "bufio" "fmt" "io" "io/ioutil" "log" "os" "os/exec" "runtime" "sync" ) // 更新oh my zsh 自定义插件 //同步 var wg sync.WaitGroup func GetDir(path string) ([]string, error) { var s []string rd, err := ioutil.ReadDir(path) if err != nil { fmt.Println("read dir error:", err) return s, err } for _, dir := range rd { if dir.IsDir() { s = append(s, path+"/"+dir.Name()) } } return s, err } func Update(path string) { //不异步不需要执行 defer wg.Done() paths, _ := GetDir(path) if len(paths) != 0 { for _, dir := range paths { //添加进程数 wg.Add(1) fmt.Println("get pull dir:", dir) go Pull(dir) } } } func Stdout(command *exec.Cmd, ch chan int) { stdout, _ := command.StdoutPipe() stderr, _ := command.StderrPipe() if err := command.Start(); nil != err { fmt.Println("command start err:", err) ch <- 0 return } pid := command.Process.Pid output(stdout, pid) output(stderr, pid) err := command.Wait() //等待执行完成 if nil != err { fmt.Printf("Process PID %d command wait err: %s", pid, err) } ch <- command.ProcessState.Pid() return } func outputLine(oReader *bufio.Reader, pid int) { for { line, err := oReader.ReadString('\n') if nil != err{ if io.EOF != err { log.Printf("Process PID %d: err %v", pid, err) } break } log.Printf("Process PID %d: %s", pid, line) } } func output(stdout io.ReadCloser, pid int) { oReader := bufio.NewReader(stdout) outputLine(oReader, pid) } func Pull(path string) { //每执行一个进程都要标记完成 defer wg.Done() //command := exec.Command("sh", "-c", "cd ", path, "&&", "git", "pull") command := exec.Command("sh", "-c", "cd " + path + "&& git pull") ch := make(chan int) go Stdout(command, ch) fmt.Println("ProcessState PID:", <- ch) } func main() { // 接收多目录参数 args := os.Args[1:] if len(args) != 0 { for _, path := range args { fmt.Println(path) wg.Add(1) go Update(path) } } else { path := "/root/.oh-my-zsh/custom/plugins" //添加进程数,相对于Update异步,如果Update不异步可以不需要add wg.Add(1) go Update(path) //等待所有进程全部结束后退出主线程 } wg.Wait() } 最后使用go build 文件名编译就好了,跨平台。 结语 在看Golang文档的时候语法有点别扭,不过敲了几遍后居然特别顺手。敲这个程序真的试了很多只用Channels的方法,但是达不到想要的效果,还是总线程不等待所有子线程执行完毕的问题。因为这里线程/协程用得太杂乱了。不过这就是我的目的,让线程/协程极致的情况下怎么控制好。各种线程/协程满天飞是怎么样的体验。
2020年03月23日
1,131 阅读
0 评论
0 点赞
2020-03-22
Ubuntu-18.10降级至18.04
前言 不知什么时候买的一台服务器,很久没有管它了,今天无聊上去看看,本想装个oh my zsh(有兴趣的同学可以看看我写的文章oh-my-zsh强大的zsh配置管理),在更新源(apt update)出现错误Failed to fetch http://xxx 404 Not Found,一部分官方源404了,这种错误是由于Ubuntu18.10已经停止维护了,18.10并不是LTS版本,已经停止维护了。 网上找了一通,基本上替换源为old-releases.ubuntu.com即可: ### 一定要备份啊 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i -r 's/([a-z]{2}\.)?archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list sudo sed -i -r 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list sudo apt update 一般这样操作后可以继续使用当前Ubuntu版本了。 但是当前版本的Ubuntu已经停止更新维护了,索性还是降级算了。 降级Ubuntu至18.04LTS 1. 替换源代号 这些cosmic是Ubuntu18.10版本的代号,需要修改成bionic,用命令修改,不然头疼: ### 切记备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/cosmic/bionic/g' /etc/apt/sources.list 2. apt软件包降级 sudo nano /etc/apt/preferences ### 粘贴以下信息 Package: * Pin: release a=bionic Pin-Priority: 1001 3. 更新 接下来更新软件源,升级 sudo apt update sudo apt upgrade sudo apt dist-upgrade 出现警告很正常,不用管它,不是致命错误。 安装期间有些软件需要替换会堵塞询问,例如nginx,由于我有写小玩意在服务器,就不替换了,使用当前版本,具体看你的需求。默认选项是N,你也可以一路回车下去。 等待更新完成: 最后查看当前版本信息: cat /etc/os-release| grep -i version 到这里就成功啦!!! 还有些小问题 系统算是降级成功了,在执行apt update又出错了。 一堆错误直接退出了。 snap包管理器,从ubuntu 16.04LTS就默认安装。在执行apt update也会执行snap包管理器的更新,反正我没用过,如果有需要那就删了再装吧。 ### 删除snap sudo rm -rf /etc/apt/apt.conf.d/20snapd.conf 结语 又折腾到十一点,降级之前装oh my zsh敲太快,执行了chsh -s /bin/zsh,然后发现服务器内存吃紧,索性升级了一下。这倒好,进不去系统了,登录后弹出,又要登录,死循环。 我以为密码错了,打开服务商控制台后ctrl+alt+del 然后 esc,选择第一个引导项输入e,在linux /boot/...这一行后面加上init=/bin/bash,ctrl +x,系统会启动命令行,修改密码passwd然后exit,重启进入系统,发现还是登录不上去。研究了半天,各种资料一顿查。 这种情况网上都说/.Xauthority文件权限问题,我是用root用户登录能有什么问题呢? 挂载Finnix系统,挂载服务器磁盘mount /dev/vda1 /mnt,上去看auth.log日志,sshd[1192]: User root not allowed because shell /bin/zsh does not exist 发现这行错误,这个zsh真是特别打眼的,就是它的锅,因为18.10版本已经过期,apt update都失败,我都没看就直接装apt install zsh,当然也失败了。而且还直接使用chsh -s /bin/zsh,把密码验证shell给改成zsh了。 改回来试试吧(此时我的环境是在挂载的Finnix系统中): nano /mnt/etc/passwd 果不其然,改成root:x:0:0:root:/root:/usr/bin/bash,退出Finnix,移除Finnix,开机登录上去了。 累死了,不过又GET到新技能。
2020年03月22日
2,731 阅读
0 评论
0 点赞
2020-03-22
QuantumultX-IOS家族又添一员大将
前言 之前用过Suger、Shadowrocket,Suger由于价格昂贵而且特别需要的协议支持太少没有再购买新版本APP。Shadowrocket便宜实惠,协议支持齐全,很不错。但是Suger和QuantumultX有更加强大的功能,定时任务以及完善的MITM支持(Shadowrocket的MITM一直存在BUG)。有了MITM就可以篡改请求,实现一些爆炸的想法。 QuantumultX界面设计不亚于Suger,功能相对Suger相同,但是支持的协议更多,而且价格便宜不少,可惜只能国外Apple Store才能购买(相信大家都懂)。 QuantumultX有反盗版机制,不开启iCloud的情况下只能支持8太设备,开启iCloud多了三个独立授权名额,理论上通过iCloud可以授权无数台。以下是作者twitter说明: 使用 基本使用方法其实网上不少,对于开发者来说其实很简单,反之可能有点难度。分流、重写、MITM这些规则网上很多,像是神机规则、lhie1大神规则等等,都非常好用。神机规则貌似作者精力有限已经停止维护了。 节点自己部署,或者机场订阅,不了解机场可以看看毒药机场测速和简介,有排名先后,先上张图自己理解: 脚本 脚本是QuantumultX非常有可玩性的功能,例如签到脚本,各种VIP脚本,每天推送天气信息,淘宝、京东商品历史价格以及你能想到的其他功能脚本。 淘宝、京东商品历史价格这个蛮有意思的,我也在用,看看历史价格发现蛮多商品相对以往都翻倍的涨,防剁手必备啊。 yichahucha大神脚本中的jd_price.js,tb_price.js分别是京东和淘宝历史价格,Suger和QuantumultX两个版本通用。 还有netflix评分脚本nf_rating.js,用法看项目介绍,蛮有意思的。 NobyDa大神脚本,主要是签到功能很强大,JD_DailyBonus.js 京东自动签到,可以领取20+签到,京东豆,钢镚,红包和优惠券。 是不是很有意思? 上图中task_local是定时任务模块配置,也可以在设置构造请求中添加。 rewrite_local是本地重写脚本模块,主要是匹配链接通过一些脚本修改请求响应内容,达到想要的目的。 Mitm解密Https请求模块,其中多个域名不要重复写hostname = xxx.xxx.xx,应该: hostname = api.xxx.com, www.abc.com, ... nzw9314大佬汇集了上述以及其他大神的脚本,你也可以只关注nzw9314,他会自动同步其他大神的更新。 现在几乎全民Https,要是用以上脚本,务必开启MITM,否则脚本可能无法成功执行。 脚本同步 QuantumultX最好开启iCloud,将脚本存放至iCloud,方便设备间同步,也可以使用Working Copy更新仓库代码。 开启iCloud 点击QuantumultX右下角图标,滑到底部,其他设置中。 借上图说说排除路由 0.0.0.0/31功能就是隐藏VPN图标, 始终开启开机自动打开,简直爆炸 开启iCloud后,文件APP中应该有QuantumultX文件夹,里面是这样: 当然,刚刚开启iCloud应该都是空的。 Image: 图标文件夹 Profiles: 配置文件文件夹 Scripts: 脚本文件夹 在Scripts文件夹下添加一个空格文件夹,待会用来存放大神们的脚本库。 下载Working Copy,然后打开。 点击右上角+,然后点击Setup synced directory。 选择你刚刚新建的文件夹 选择后会弹出test syncing, 点击Done 点击Add Remote添加远程库 填入库地址到URL,库地址为git地址,不是网址。 如果不是自己的仓库或者没有git push权限务必关掉Allow Push 然后点击Save-Fetch获取。 如果报错或者获取失败,请将上个页面中的Branch切换为master, 如果Current branch是空的,就选择分支,一般是master分支,当然也有不同的。 回到主界面,下拉就会更新所有库的代码,更新后记得点击顶部绿色提示框合并代码,不然拉了也白拉。 有了同步之后事情就简单多了,看图片: nzw9314/NobyDa/JD-DailyBonus/JD_DailyBonus.js 这里是相对目录,相对于iCloud/QuantumultX/Scripts目录下的文件。以后需要更新就去Working Copy往下这么一拉,点击绿色提示合并代码就OK了,QuantumultX可能有缓存,需要重新开关一下。 结语 QuantumultX确实挺有意思,我自己也折腾了个机车游侠的自动签到脚本,知乎去内容广告。其实会点javasrcipt就能轻松搞定,QuantumultX-Github有很多示例可以参考。
2020年03月22日
7,140 阅读
0 评论
1 点赞
2020-03-21
Laradock-部署本地开发环境
前言 之前laravel开发环境一直都是homestead部署,最近发现docker蛮火的。这段时间没什么事,稍微研究了一番。 首先需要理解docker给我们解决了什么问题。 对于开发者来说,最重要的就是轻便。docker中的容器将每个进程单独分割,互不影响但又有使用关联。很神奇,试想一下homestead,它是一台虚拟机,一旦启动就会占用固定的资源,哪怕资源在虚拟机中没有使用,你也是无法干预的,在虚拟器启动的那刻就已经分配。这种情况会造成很多资源浪费。 使用docker,把每个应用/服务都单个放入容器中,不会占用固定资源。更多空闲资源可以被系统利用,不会浪费掉。 其实docker最大的特点是解决部署时的方便。项目上线需要生产环境,特别是分布式服务器,每台都要独立安装,但是使用docker部署起来就会相当方便,编写好docker-compose.yml 和各个 服务/应用的 Dockerfile 文件,几行命令就能部署好整个生产环境。 以上是我目前对docker的愚解。 安装docker 这部看docker文档就好了,很详细。 我是用的是windows,安装程序下一步... windows系统和MacOS使用安装程序不需要单独安装docker-compose。 安装laradock 其实laradock文档中也很详细,直接clone代码就好了。 说说cp env-example .env文件吧。 ### 主要是项目目录,你开发项目所在目录,如果在同目录下(多项目配置)则不用动 APP_CODE_PATH_HOST=../ ### 项目在容器中挂载路径 APP_CODE_PATH_CONTAINER=/var/www ### 这个比较重要,数据卷存方位置,例如你的mysql数据库文件,redis持久化文件等(windows在C:\Users\用户名\.laradock\data) DATA_PATH_HOST=~/.laradock/data ... ### workspace这个大项中,很多开发者用不到 ### 像是PYTHON,NODE等我都会不安装 ### 服务器上部署也是,不需要尽量别安装 WORKSPACE_INSTALL_NODE=true ### 开启zsh SHELL_OH_MY_ZSH=true ### 开发环境需要XDebug就开启(反正我是需要) WORKSPACE_INSTALL_XDEBUG=true ... ### php版本 PHP_VERSION=7.4 ... ### 是否修改源,没翻墙还是需要 CHANGE_SOURCE=false ### ubuntu源 UBUNTU_SOURCE=aliyun ... ### php5.6含一下注意,redis扩展不支持,会报错 PHP_FPM_INSTALL_PHPREDIS=true ### 如果WORKSPACE_INSTALL_XDEBUG=true 开启了 ### 那么这边也需要开启 PHP_FPM_INSTALL_XDEBUG=true ... ### 把我坑惨了,Supervisor是php-woker提供的,配置文件也在里面,如果不开启的话,php-woker容器中的php是不包含redis扩展的 PHP_WORKER_INSTALL_REDIS=true ... ### mysql配置,按自己需求该 MYSQL_VERSION=5.7 MYSQL_DATABASE=homestead MYSQL_USER=homestead MYSQL_PASSWORD=secret ### mysql外部端口,本地我已经装了mysql 3306、33060都已经被占用 MYSQL_PORT=33061 MYSQL_ROOT_PASSWORD=root ### 这里是多数据库配置,laradock/mysql/docker-entrypoint-initdb.d目录下对照样本加 MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d ... ### nginx配置 NGINX_HOST_HTTP_PORT=80 NGINX_HOST_HTTPS_PORT=443 ### 日志 NGINX_HOST_LOG_PATH=./logs/nginx/ ### 多站点配置目录,找样本加 NGINX_SITES_PATH=./nginx/sites/ NGINX_PHP_UPSTREAM_CONTAINER=php-fpm NGINX_PHP_UPSTREAM_PORT=9000 NGINX_SSL_PATH=./nginx/ssl/ ... 如果你开启了oh-my-zsh,默认是没有任何插件的,皮肤也是默认,laradock没有露出.zshrc配置文件文件,只能修改workspace的Dockerfile文件了,在Dockerfile文件找到下面代码(我是按照之前写得一篇文章oh-my-zsh强大的zsh配置管理配置安装的): ########################################################################### # Oh My ZSH! ########################################################################### USER root ARG SHELL_OH_MY_ZSH=false RUN if [ ${SHELL_OH_MY_ZSH} = true ]; then \ apt install -y zsh \ ;fi USER laradock RUN if [ ${SHELL_OH_MY_ZSH} = true ]; then \ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) --keep-zshrc" && \ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && \ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && \ sed -i -r 's/^plugins=\(.*?\)$/plugins=(laravel5 zsh-syntax-highlighting zsh-autosuggestions)/' /home/laradock/.zshrc && \ sed -i -r 's/^ZSH_THEME=\".*?\"$/ZSH_THEME="ys"/' /home/laradock/.zshrc && \ echo '\n\ bindkey "^[OB" down-line-or-search\n\ bindkey "^[OC" forward-char\n\ bindkey "^[OD" backward-char\n\ bindkey "^[OF" end-of-line\n\ bindkey "^[OH" beginning-of-line\n\ bindkey "^[[1~" beginning-of-line\n\ bindkey "^[[3~" delete-char\n\ bindkey "^[[4~" end-of-line\n\ bindkey "^[[5~" up-line-or-history\n\ bindkey "^[[6~" down-line-or-history\n\ bindkey "^?" backward-delete-char\n' >> /home/laradock/.zshrc \ ;fi 可以自定义安装插件,修改皮肤。git clone ...下载插件,记得在sed -i -r 's/^plugins=\(.*?\)$/plugins=(laravel5 zsh-syntax-highlighting zsh-autosuggestions)/' /home/laradock/.zshrc && \中加载你的插件,sed -i -r 's/^ZSH_THEME=\".*?\"$/ZSH_THEME="ys"/' /home/laradock/.zshrc && \ 修改皮肤(例如我这里修改的是ys皮肤,echo '\n\ ...默认绑定了一些快捷键,不需要可以删掉。有兴趣可以查看我的文章oh-my-zsh强大的zsh配置管理)。 其他没什么安装需要注意的了,执行: ### 启动容器 mysql redis nginx php-worker ### -d参数是后台运行 docker-compose up -d mysql redis nginx php-worker workspace、php 默认会自己启动,因为容器都依赖它们 如果你没有修改COMPOSE_FILE=docker-compose.yml配置文件的话,laradock项目中所有镜像全部会安装 !!!0.0!!!。 启动之后你可以进入容器: ### 就像虚拟机一样,很亲切 ### 像composer,git等命令都有,不需要单独安装 docker-compose exec workspace bash 进入workspace后执行: cd 你的项目名称/ php artisan migrate ... workspace可以换成你想操作的(已经启动)任何容器名称(mysql,nginx...),非常方便操作。 并非完美 laradock在修改配置后重新docker-compose build xxx又会重新安装/编译一次,非常耗时,特别是workspace容器,简直恐怖。这点没有虚拟机来得方便。 docker在MacOS中存在文件读取缓慢的问题。 mysql或者其他数据库在容器中部署还存在一定的安全隐患。 结语 其实自己手动折腾一遍之后并不像想象中那么难。 仔细查看Dockerfile文件后你会发现里面就是各种安装部署命令,只是用docker特定的语法包裹了。docker安装容器就是执行你编写好的命令。 服务器部署直接一套docker就搞定,而且服务器项目比较杂的话非常适合,毕竟各种项目(php,java,python...)环境在服务器上搭建难免出现奇奇怪怪的问题,在容器中的话互不干扰,横向扩展服务器简直不能再方便了。
2020年03月21日
2,069 阅读
0 评论
2 点赞
2019-08-11
实用-模型缓存trait
前言 好久没有写博客了,赖癌看来又发作了。也没有很高大上的东西写,就写写自己开发中比较顺手的小知识吧! 开发中经常会有些模型读取非常频繁,但是又很少做写入修改操作(类似于 分类、品牌等),这种情况缓存简直不能再好了,既可以大量减少数据库压力,又可以非常快速读取(前提要配置好缓存,比较推荐redis)。 Trait 如果你连trait都不认识的话好好看看文档吧。 起初最简单的思路就是能简单方便的让模型可以缓存和读取。laravel已经有了非常好用的缓存系统,非常方便,但是相对还可以封装一下,让模型缓存更加优雅。 代码非常简单,我就不多废话了: namespace App\Traits\Model; use Illuminate\Database\Eloquent\Collection; trait HasCache { protected $ttl; protected function tag(){ return 'model_cache'; } /** * @param null $key * @param \Closure|null $closure * * @return mixed|Collection */ public static function cache($key = null, \Closure $closure = null){ $model = new static(); if($key instanceof \Closure){ $closure = $key; $key = null; } return \Cache::tags($model->tag())->remember($key ?? get_class(),now()->addMinutes($model->getCacheTtl()),function () use ($closure, $model) { if($closure){ return $closure($model); } return $model->get(); }); } //删除缓存 public function forgetCache($key = null){ return \Cache::tags($this->tag())->forget($key ?? get_class()); } //设置缓存时间 public function setCacheTtl($minutes){ $this->ttl = $minutes; return $this; } public function getCacheTtl(){ return $this->ttl ?: 60; } 使用 我这是使用的laravel-admin后台,有兴趣可以了解下,极大节约后台程序开发周期。 在需要缓存的模型中使用HasCachetrait: class ProductCategory extends Model { use SoftDeletes, ModelTree, AdminBuilder, HasCache; ... //也可以自己扩展缓存自己想要的数据 public static function levelCache(){ return self::cache(get_class().'level_cache', function ($model){ $sort_closure = function ($query){ $query->sort(); }; return $model->with(['children' => $sort_closure,'children.children' => $sort_closure])->where('parent_id',0)->sort()->get(); }); } //对应的删除缓存方法 public static function forgetLevelCache(){ return (new static())->forgetCache(get_class().'level_cache'); } } 后台控制缓存,在更新、添加数据后及时清除缓存,防止脏读,虽然是缓存但是还是要保证数据及时性吧!(例子中使用的是laravel-admin扩展) /** * Make a form builder. * * @return Form */ protected function form() { $form = new Form(new ProductCategory); $form->display('id','ID'); ... $form->saved(function (Form $form){ //模型保存成功后的回调函数中删除缓存 $form->model()->forgetLevelCache(); }); return $form; 如果没有使用laravel-admin,可以手动删除缓存或者监听模型保存成功事件,laravel-Eloquent:Events。 平时使用: ProductCategory::levelCache(); ProductCategory::setCacheTtl(30)->cache() ProductCategory::cache(function(ProductCategory $model){ ... return $model->get(); //返回你想保存的数据 }) 结语 模型缓存后使用起来更加简单了,千万别把服务器内存玩爆了。开发中很多小技巧自己都没有好好总结,然后多了再总结就懒癌发作,哎!
2019年08月11日
1,107 阅读
0 评论
0 点赞
2019-06-06
IOS13-深色模式终于来了
前言 本该 iOS12 上的特性遗留到了 iOS13, 不过我确实非常期待。MAC OS-mojave上早已实现深色模式了,确实酷炫。orzlee在昨天把自己的iPhone XS更新了iOS13,这次开发者预览貌似没有描述文件,说说目前为止的体验吧。 升级 orzlee是在MAC下更新系统( 还好一起折腾了黑苹果,具体教程需要自己去远景论坛黑苹果区爬贴了 ),windows目前应该也可以更新了,具体方法可能需要自己找找了( i4助手应该可以更新了 )。 固件下载地址 iOS iOS 13 iPhone XS、iPhone XS Max iOS 13 iPhone XR iOS 13 iPhone X iOS 13 iPhone 7、iPhone 8 iOS 13 iPhone 7 plus、iPhone 8 plus iOS 13 iPhone SE iOS 13 iPhone 6s Plus iOS 13 iPhone 6s iPad OS iPad Pro (11 inch), iPad Pro (12.9-inch)(3rd generation) iPad Pro (10.5 inch), iPad Pro (12.9-inch)(2nd generation) iPad Pro (12.9‑inch)iPad Pro 2018 10.5/12.9 Inch iPad (5th generation), iPad (6th generation) iPad mini (5th generation), iPad Air (3rd generation)、iPad mini 4, iPad Air 2、iPad Pro (9.7‑inch) iPad 2017/2018 $329 one MAC OS MAC OS 描述文件 Watch OS Watch OS Apple TV OS Apple TV OS MAC OS下更新 首先需要安装 MobileDevice.pkg iTunes( 需要更新到最新版 )连接iPhone,按住Option( 黑苹果windows键盘按住 Alt)点击更新,选择下载好的固件。 等待更新完成 深色模式效果 等待IOS13正式上线后,其他APP开发者适配深色模式后就更完美了。 IOS13 已知更新 音量调节提示图标在众多吐槽下发生了改变,始终保持在左侧上半部分,并且会自动缩小,不会再挡在屏幕中间碍眼了,这点真的很赞 照片分类更加友好、详细了,配合深色模式非常酷。照片编辑也更加强大。 面容ID提升30%( 反正orzlee感觉不出来 ) APP体积压缩50%,升级容量压缩60%。启动速度对比iOS12快了两倍。 拟物化图标再次出现,还调整了iOS13截图画面,带有毛玻璃感。 Sign in Apple,第三方App的登入隐私保护。 两个AirPods,听同一首歌。 Memoji可以化妆了,甚至还能用它做联系人头贴。 结语 对于IOS13,orzlee目前在使用上还未发现BUG,一切还是那么丝滑,反正orzlee也只是奔着炫酷的深色模式去的。部分内容还没有完全翻译过来,但是不影响使用。如果不在乎可以升级体验尝鲜。 巨大BUG,非常影响正常使用,升级慎重!升级慎重!升级慎重! 。 2019-06-13更新 使用一段时间后发现巨大BUG: 联通在4G环境被叫几乎全是无法接通,特别是在使用流量的情况下。需要切换3G才可以解决。 经常莫名其妙重启,某些情况只会关机,需要手动开机( 频率有点高,几乎一天好几次 )。 某些APP键盘莫名奇妙无法收回,APP输入框被键盘遮挡。闪退也发现多次。
2019年06月06日
1,236 阅读
0 评论
5 点赞
1
2
3
4
5