-
Notifications
You must be signed in to change notification settings - Fork 2
/
search.xml
1842 lines (1842 loc) · 742 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[Hexo博客系统报错解决方案]]></title>
<url>%2F2019%2F02%2F25%2FHexo%E5%8D%9A%E5%AE%A2%E7%B3%BB%E7%BB%9F%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%2F</url>
<content type="text"><![CDATA[问题描述部分报错信息:1Template render error: (unknown path) [Line 3, Column 440]unexpected token: ! 如图所示:今天在写完文章,准备发布时候,发现一直报错。我仔细查看了每一个我改动过的文件,发现并没有出现任何差错,也并无写入特殊字符。 问题原因折腾半天,才搞懂原来这是因为当文章中有{{时,解析会出问题。使用hexo创建博客写文章的时候,遇到的问题几乎都是特殊字符解析方面的问题,所以应该尽可能少写一些特殊字符,如果实在需要,可以使用转义码。遇到问题时,解决思路可以考虑下转义码+html标签。 查看[hexo语法使用手册]https://segmentfault.com/a/1190000011021195。 解决将特殊字符通过转义进行转换当然,最好的方案是避免写特殊字符123{% raw %} 含有双大括号的内容{% endraw %} 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/25/Hexo博客系统报错解决方案/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[怎么给Hexo博客添加一个README文件]]></title>
<url>%2F2019%2F02%2F24%2F%E6%80%8E%E4%B9%88%E7%BB%99Hexo%E5%8D%9A%E5%AE%A2%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AAREADME%E6%96%87%E4%BB%B6%2F</url>
<content type="text"><![CDATA[前言我们执行命令hexo g之后,会把source文件里的.md格式的文件渲染为html文件并放到public下面。继续执行命令hexo d之后,会把public下面的所有文件提交到对应的username.github.io这个仓库,由于本地public文件夹里没有README.md这个文件,所以在提交public文件时,github会认为你把README.md文件删掉了,同时github也会删掉仓库里的README.md文件。 但是GitHub上的项目没有一个漂亮的README文件,多丑啊。所以我们需要想方法加上去。 配置我们首先在本地网站的source文件里新建一个README.md文件。然后修改Hexo根目录下的网站配置文件_config.yml文件,将skip_render参数的值设置为README.md。如下所示:123456789# Directorysource_dir: sourcepublic_dir: publictag_dir: tagsarchive_dir: archivescategory_dir: categoriescode_dir: downloads/codei18n_dir: :langskip_render: README.md 然后我们再次部署更新博客,就再也不会删掉README文件了。以后你写完README文件,就再运行hexo的部署命令重新部署到GitHub即可。点击此链接https://github.com/lengyue1024/lengyue1024.github.io查看我的GitHub仓库的README文件。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/24/怎么给Hexo博客添加一个README文件/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo添加文章阅读量统计功能]]></title>
<url>%2F2019%2F02%2F23%2FHexo%E6%B7%BB%E5%8A%A0%E6%96%87%E7%AB%A0%E9%98%85%E8%AF%BB%E9%87%8F%E7%BB%9F%E8%AE%A1%E5%8A%9F%E8%83%BD%2F</url>
<content type="text"><![CDATA[前言本教程以next主题为例进行演示说明,但是对于以next主题为基础修改的主题或者其他类似主题也是同样适用的。 配置LeanCloud首先注册LeanCloud帐号,网址:https://leancloud.cn. 创建应用然后依次是:新应用名称(自定义) → 选中开发版 → 点击创建即可。 创建Class在创建的应用上点击存储.数据栏中,_开头的都是系统预定义好的表,为了区分,新建一张表来保存数据。为了保证对NexT主题的修改兼容,新建Class名字必须为 Counter。为了避免权限问题导致次数统计显示不正常,选择无限制,创建Class。 获取App ID和App KeyClass创建完成后,选择界面最左侧的设置 → 应用Key,复制App ID和App Key 配置主题修改_config.yml文件打开博客根目录/themes/next/下的_config.yml文件添加以下内容。(在新版的next主题中已经包含了此字段)123456# Show number of visitors to each article.# You can visit https://leancloud.cn get AppID and AppKey.leancloud_visitors: enable: true app_id: #<AppID> app_key: #<AppKEY> 填写复制来的App ID和App Key。 添加lean-analytics.swig文件在themes\next\layout\_scripts路径下,新建一个lean-analytics.swig文件,并向里面添加以下内容123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108{% if theme.leancloud_visitors.enable %} {# custom analytics part create by xiamo #} <script src="https://cdn1.lncld.net/static/js/av-core-mini-0.6.1.js"></script> <script>AV.initialize("{{theme.leancloud_visitors.app_id}}", "{{theme.leancloud_visitors.app_key}}");</script> <script> function showTime(Counter) { var query = new AV.Query(Counter); var entries = []; var $visitors = $(".leancloud_visitors"); $visitors.each(function () { entries.push( $(this).attr("id").trim() ); }); query.containedIn('url', entries); query.find() .done(function (results) { var COUNT_CONTAINER_REF = '.leancloud-visitors-count'; if (results.length === 0) { $visitors.find(COUNT_CONTAINER_REF).text(0); return; } for (var i = 0; i < results.length; i++) { var item = results[i]; var url = item.get('url'); var time = item.get('time'); var element = document.getElementById(url); $(element).find(COUNT_CONTAINER_REF).text(time); } for(var i = 0; i < entries.length; i++) { var url = entries[i]; var element = document.getElementById(url); var countSpan = $(element).find(COUNT_CONTAINER_REF); if( countSpan.text() == '') { countSpan.text(0); } } }) .fail(function (object, error) { console.log("Error: " + error.code + " " + error.message); }); } function addCount(Counter) { var $visitors = $(".leancloud_visitors"); var url = $visitors.attr('id').trim(); var title = $visitors.attr('data-flag-title').trim(); var query = new AV.Query(Counter); query.equalTo("url", url); query.find({ success: function(results) { if (results.length > 0) { var counter = results[0]; counter.fetchWhenSave(true); counter.increment("time"); counter.save(null, { success: function(counter) { var $element = $(document.getElementById(url)); $element.find('.leancloud-visitors-count').text(counter.get('time')); }, error: function(counter, error) { console.log('Failed to save Visitor num, with error message: ' + error.message); } }); } else { var newcounter = new Counter(); /* Set ACL */ var acl = new AV.ACL(); acl.setPublicReadAccess(true); acl.setPublicWriteAccess(true); newcounter.setACL(acl); /* End Set ACL */ newcounter.set("title", title); newcounter.set("url", url); newcounter.set("time", 1); newcounter.save(null, { success: function(newcounter) { var $element = $(document.getElementById(url)); $element.find('.leancloud-visitors-count').text(newcounter.get('time')); }, error: function(newcounter, error) { console.log('Failed to create'); } }); } }, error: function(error) { console.log('Error:' + error.code + " " + error.message); } }); } $(function() { var Counter = AV.Object.extend("Counter"); if ($('.leancloud_visitors').length == 1) { addCount(Counter); } else if ($('.post-title-link').length > 1) { showTime(Counter); } }); </script>{% endif %} 修改post.swig文件在themes\next\layout\_macro路径下,打开post.swig文件.我个人将阅读统计功能加到文章分类后面,所以就找到包含有post-category字样的代码段。然后将以下内容复制粘贴到其后即可。1234567891011121314{# LeanCould PageView #}{% if theme.leancloud_visitors.enable %} <span id="{{ url_for(post.path) }}" class="leancloud_visitors" data-flag-title="{{ post.title }}"> &nbsp; | &nbsp; <span class="post-meta-divider">阅读次数:</span> <span class="post-meta-item-icon"> <i class="fa fa-eye"></i> </span> {% if theme.post_meta.item_text %} <span class="post-meta-item-text">{{__('post.visitors')}}&#58;</span> {% endif %} <span class="leancloud-visitors-count"></span> </span>{% endif %} 修改layout.swig文件在themes\magiclamp\layout路径下,打开 _layout.swig文件,在</body>上方添加如下内容:123{% if theme.leancloud_visitors.enable %} {% include '_scripts/lean-analytics.swig' %}{% endif %} 添加完成之后,文件内容如下图所示: 修改zh-Hans.yml文件打开在NexT目录的languages路径下的zh-Hans.yml文件,在post:结点下添加visitors: 阅读次数,如下所示:12345678post: posted: 发表于 visitors: 阅读次数 updated: 更新于 in: 分类于 read_more: 阅读全文 untitled: 未命名 toc_empty: 此文章未包含目录 这个时候重新生成部署Hexo博客,应该就可以正常使用文章阅读量统计的功能了。需要特别说明的是:记录文章访问量的唯一标识符是文章的 发布日期以及文章的标题,因此应该确保这两个数值组合的唯一性,如果你更改了这两个数值,会造成文章阅读数值的清零重计。所以我们最好在发布之前就应该提前设置好发布日期以及文章的标题。 LeanCloud管理当你配置部分完成之后,初始的文章统计量显示为0,但是这个时候我们LeanCloud对应的应用的Counter表中并没有相应的记录,只是单纯的显示为0而已,当博客文章在配置好阅读量统计服务之后第一次打开时,便会自动向服务器发送数据来创建一条数据,该数据会被记录在对应的应用的Counter表中。 伪造阅读量 虽然该方法可行性很高,但我本人并不认同,这只是达到了欺骗自己欺骗读者的目的,并不能真正提高自己博客的知名度,个人认为还是真正做好自己的技术,写好自己的技术文章即可。 我们可以修改其中的time字段的数值来达到修改某一篇文章的访问量的目的。有两种操作方式: 双击具体的数值,修改之后使用组合键Ctr+Enter即可保存。 选中time字段的单元格,然后点击”编辑单元格”向其中写入数值,然后点击”保存”即可。Web安全因为AppID以及AppKey是暴露在外的,因此如果一些别用用心之人知道了之后用于其它目的是得不偿失的。(比如一些人使用你个人的AppID以及AppKey,那样流过的数据就流入了你的leancloud存储里)为了确保只用于我们自己的博客,建议开启Web安全选项,这样就只能通过我们自己的域名才有权访问后台的数据了,可以进一步提升安全性。选择应用的设置的安全中心选项卡,在Web 安全域名中填入我们自己的博客域名,来确保数据调用的安全: 当你已经按照教程正常配置之后,如果还是没有出现,那么你现在需要做的不是重新看教程,而是应该自己调试。“F12”打开开发者选项,选中”网络”选项,然后刷新网页。(此时我使用的是Firefox 65.0.1 (64 位)))可以看到403报错,这个状态码说明了资源不可用,服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。你可以更改为正确的安全域名或者如果你不知道如何修改,那么就干脆放弃设置Web安全域名。ok,再次设置好安全域名,我们再次刷新网页,状态码变成了200。我们随便打开一篇文章,查看一下是否能成功记录阅读次数。ok,成功。 后记趁着这几日还未开学,所以赶快趁着时间优化一下博客,给博客增加一些好玩的新功能。之前一直没时间做,所以一直不敢做优化。所幸这次时间充足,就一下子做了很多优化。但是依然存在很多问题,并且这些问题更加困难,这些问题我也都全部记录了下来,只能等下次有充足时间再来解决了。更新日志全部记录在GitHub仓库的README文件中,👉点击查看 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/23/Hexo添加文章阅读量统计功能/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo添加版权说明]]></title>
<url>%2F2019%2F02%2F22%2FHexo%E6%B7%BB%E5%8A%A0%E7%89%88%E6%9D%83%E8%AF%B4%E6%98%8E%2F</url>
<content type="text"><![CDATA[前言用hexo-addlink在文章尾部添加当前文章链接,注明版权,有利于SEO. 部署安装插件1$ npm install hexo-addlink --save 在站点配置文件_config.yaml中添加如下配置1234# 版权信息addlink: before_text: __本文作者__:冰羽<br/>__本文地址__: after_text: <br/>__版权声明__:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处! 你只需要复制上面这段代码,并且修改为你的信息即可。 效果展示各位也可以看一下本文末尾,就是成功后的样子。当然不一样的hexo主题渲染出的样式可能不同。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/22/Hexo添加版权说明/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo添加字数统计、阅读时长功能]]></title>
<url>%2F2019%2F02%2F21%2Fhexo%E6%B7%BB%E5%8A%A0%E5%AD%97%E6%95%B0%E7%BB%9F%E8%AE%A1%E3%80%81%E9%98%85%E8%AF%BB%E6%97%B6%E9%95%BF%E5%8A%9F%E8%83%BD%2F</url>
<content type="text"><![CDATA[安装插件1$ npm install hexo-wordcount --save 该插件提供了以下功能: 字数统计 WordCount 阅读时长预计 Min2Read 阅读速度 Set Reading Speed 总字数统计 TotalCount 配置NexT主题默认已经集成了文章【字数统计】、【阅读时长】统计功能,如果我们需要使用,只需要在主题配置文件 _config.yml 中打开 wordcount 统计功能即可。如下所示:12345678# Post wordcount display settings# Dependencies: https://github.com/willin/hexo-wordcountpost_wordcount: item_text: true wordcount: true min2read: true totalcount: true separated_meta: true 但是如果你的next版本过低或者你使用的hexo主题并没有集成该功能,那么你需要自己添加。我以我个人使用的这个hexo主题为例进行说明(该主题基于next主题)。修改themes\next\layout_macro\post.swig文件。 我们本来的页首已经有了发表时间和分类选项,此时我们需要加入文章数字统计、阅读时长统计功能。我这里是把新功能加入在分类后面,所以我们需要把以下代码写入class="post-category"块代码区域后面即可。 你加入的代码只要不影响其他的代码块即可正常显示,并且你也可以任意修改加入的这段代码的汉字。 1234567891011121314151617<span class="post-time"> &nbsp; | &nbsp;<span class="post-meta-item-icon"> <i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text">字数统计:</span><span class="post-count">{{ wordcount(post.content) }}(字)</span></span><span class="post-time"> &nbsp; | &nbsp;<span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i></span><span class="post-meta-item-text">阅读时长≈</span><span class="post-count">{{ min2read(post.content) }}(分)</span></span> 效果展示 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/21/hexo添加字数统计、阅读时长功能/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo增加网站运行时间统计]]></title>
<url>%2F2019%2F02%2F20%2Fhexo%E5%A2%9E%E5%8A%A0%E7%BD%91%E7%AB%99%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%E7%BB%9F%E8%AE%A1%2F</url>
<content type="text"><![CDATA[前言我以个人使用这个基于next主题修改的主题进行演示说明,但是该教程同样适用于其他主题。 配置打开 \themes\next\layout\_partials\footer.swig 文件然后你应该选定你放网站运行时间的位置。比如我的网站页脚如下图所示我个人是打算放到网站访问量后面的,那么就应该找到网站访问量所对应代码段,然后把运行时间统计代码放置其后即可。(因为hexo是从上自下开始渲染的)以下是我提供的两段代码,都是可以正常使用的,你只需挑选一个出来正常放置即可。 代码11234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556<span>本站已运行<span id="htmer_time"></span></span><script> function secondToDate(second) { if (!second) { return 0; } var time = new Array(0, 0, 0, 0, 0); if (second >= 365 * 24 * 3600) { time[0] = parseInt(second / (365 * 24 * 3600)); second %= 365 * 24 * 3600; } if (second >= 24 * 3600) { time[1] = parseInt(second / (24 * 3600)); second %= 24 * 3600; } if (second >= 3600) { time[2] = parseInt(second / 3600); second %= 3600; } if (second >= 60) { time[3] = parseInt(second / 60); second %= 60; } if (second > 0) { time[4] = second; } return time; } </script><script type="text/javascript" language="javascript"> function setTime() { var create_time = Math.round(new Date(Date.UTC(2018, 2, 20, 14, 0, 0)).getTime() / 1000); //这里设置建站时间 var timestamp = Math.round((new Date().getTime() + 8 * 60 * 60 * 1000) / 1000); currentTime = secondToDate((timestamp - create_time)); currentTimeHtml = currentTime[0] + '年' + currentTime[1] + '天' + currentTime[2] + '时' + currentTime[3] + '分' + currentTime[4] + '秒'; document.getElementById("htmer_time").innerHTML = currentTimeHtml; } setInterval(setTime, 1000); $(function(){ $("#learnmore").click(function(){ if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) { var $target = $(this.hash); $target = $target.length && $target || $('[name=' + this.hash.slice(1) + ']'); if ($target.length) { var targetOffset = $target.offset().top; $('html,body').animate({scrollTop: targetOffset},800); return false; } } }); });</script> 代码21234567891011121314151617181920212223242526<span>本站已运行<span id="showDays"></span></span><script> var seconds = 1000; var minutes = seconds * 60; var hours = minutes * 60; var days = hours * 24; var years = days * 365; var birthDay = Date.UTC(2018,02,20,14,00,00); // 这里设置建站时间 setInterval(function() { var today = new Date(); var todayYear = today.getFullYear(); var todayMonth = today.getMonth()+1; var todayDate = today.getDate(); var todayHour = today.getHours(); var todayMinute = today.getMinutes(); var todaySecond = today.getSeconds(); var now = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond); var diff = now - birthDay; var diffYears = Math.floor(diff/years); var diffDays = Math.floor((diff/days)-diffYears*365); var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours); var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes); var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds); document.getElementById('showDays').innerHTML=""+diffYears+"年"+diffDays+"天"+diffHours+"小时"+diffMinutes+"分钟"+diffSeconds+"秒"; }, 1000);</script> 效果图: 扩展知识很多人在根据网上教程给hexo博客增加以上代码片段后并不能正常显示或者根本不显示网站统计时间,在右击浏览器查看网页源代码的时候也可以看到该js代码是加载到网页上的。那么为什么还是不能正常显示出网站运行时间呢?这是因为你的<span>标签的位置不对或者你的js中取的值和你写入的<span>中的id不一致所造成的。很多人在写的时候要么遗漏,要么根本没在意这些细节。好,那么我接下来简短记述一下关于<span>标签的使用。 <span id="span_id">span的文本</span>的取值js取<span>的值并不是用document.getElementById('span_noticesg').value,而是document.getElementById('span_id').innerText。jquery取的值,是$("#span_noticesg").html(); <span id="span_id"></span>的赋值$(‘#span_id’).html(“span的文本”);document.getElementById(‘span_id’).innerText=”span的文本”;关于<span>标签使用的更多细节问题大家可以自行查阅网上教程,我就不再过多叙述了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/20/hexo增加网站运行时间统计/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[阿里巴巴iconfont的使用方法]]></title>
<url>%2F2019%2F02%2F05%2F%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4iconfont%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%2F</url>
<content type="text"><![CDATA[为什么要使用iconfont?iconfont就是把图标用字体的方式呈现,其优点在于以下几个方面: 可以通过css的样式改变其颜色 相对于图片来说,具有更高的分辨率 更小的存储 集结了大量优秀的图标作品,不用再切图或者P图了 缺点:浏览器兼容性不够普及,所幸目前大部分主流浏览器都支持 接下来,我们就一起看看怎么具体使用iconfont图标库到我们的网站项目中。首先,进入阿里巴巴iconfont,如果你要想在自己项目中引用这些图标,我强烈建议你登陆,可以使用GitHub或者新浪微博账号,这样也方便你管理你的图标项目。 登录以后,搜索自己需要的资源,然后直接下载使用,或者建立图标库然后再使用。选择需要的图标,然后可以执行三种操作:添加入库、收藏或者直接下载,可以根据自己的实际情况来选择相应操作。如果你是需要很多图标的话并且需要运用到网站上,我建议你在这里选择添加入库,操作完可以看到图标已经添加进右上角的购物车里了。我们点击“图标管理”-“我的项目”,可以专门创建一个自己的项目。我们把所需要的图标全部添加进购物车内,然后添加到项目,再下载到本地。从上图中我们也可以看到直接在线引用,这样就不必下载到本地了,但是这样却不利于我们进行本地化的管理与优化,所以在此我选择下载到本地。 我们先解压出来其中demo_index.html是使用说明,我们点击即可看到说明,所有带有’iconfont’字样的文件都是使用这个图标库所必须的文件,可根据使用的具体方式引用相应文件。一共包括Unicode、Fontclass以及Symbol:三种使用的方式。这三种方式的不同在说明上已经有了,所以自己查看即可,我便不多说了。至于这三种方式,你应该选择哪种,这完全取决于你个人。而且在我看来,三种方式各有优劣(也许是我没经过前端的系统训练,所以看不出来吧)好了,说了那么多。我下面演示一下怎么在自己的网页中引用。以我个人做的导航页项目为例进行演示,引用方式为Font class。我只以部分代码为例进行演示,但是你只要稍微懂点前端知识,肯定知道怎么用。我在这里只是提供了一种引用的方式,至于你如何布局,如何设计,如何优化这些都不在本文的讨论范围之中。首先把iconfont.css复制到你工程的css文件夹。首先应该做的是在HTML的头部引用iconfont.css文件。e.g.1234567<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/iconfont.css"></head> 而我们在项目中使用的时候,只需要按照下例即可。挑选相应图标并获取类名,应用于页面:1<span class="iconfont icon-xxx"></span> 下图只是我截取的部分代码示图类名就是你demo_index.html文件中的以.icon开头的,我们只需要把”.icon-“去掉,然后复制替换xxx到我们需要使用图标的位置即可。下图红线圈中的即是类名好的,接下来就是见证奇迹的时刻,在本地查看一下是否已经成功引用这是我做的导航页的侧边栏的一部分,和上方的代码保持一致。在此只是给各位演示一下效果,并不做他用。我个人认为Font class的引用方式是最简单易用的。我在此只是提供一种简单的引用图标的方法而已,各位完全可以根据说明自己定制。 最后祝您新年快乐,点此查看我做的春节祝福网页 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/02/05/阿里巴巴iconfont的使用方法/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[C语言之内存的动态分配]]></title>
<url>%2F2019%2F01%2F23%2FC%E8%AF%AD%E8%A8%80%E7%9A%84%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%2F</url>
<content type="text"><![CDATA[本文主要讲述在C语言程序中如何进行内存分配与释放。C语言中所有的资源都是存储在内存中的,合理的利用内存空间不仅能够使程序代码看起来更简洁、明了,还能提高程序的运行效率。计算机中的存储空间按照存储内容不同可以分为 C语言中,数组长度是固定的,也就是说,不能定义可变长度的数组。而在现实生活中,要处理的数据的规模有时是难于预期的。比如要处理的是某次考试的成绩,参加考试的考生有多少呢?可能是几十人的一个班,也可能是几千人的一个考点,甚至是几百万人的全国考生。如果使用数组,需要按最大规模设计程序,这在多数时候是不必要的。数组所占据的内存空间是相对固定的,那么能否根据需要动态地使用内存空间呢?可以,这就要使用动态内存分配技术了。C语言所提供的有关函数有3个,即malloc函数、calloc函数和free函数。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/01/23/C语言的内存分配/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
</entry>
<entry>
<title><![CDATA[C语言的sizeof运算符]]></title>
<url>%2F2019%2F01%2F23%2FC%E8%AF%AD%E8%A8%80%E7%9A%84sizeof%E8%BF%90%E7%AE%97%E7%AC%A6%2F</url>
<content type="text"><![CDATA[C语言的sizeof运算符 运算符又称为取内存字节 运算符,属于C语言中十分特殊的运算符,它与那些符号运算符不同。它是一个一元运算符,用于计算操作对象在内存中所占的字节数。即byte,表示8个二进制位。表达形式:1sizeof(类型标识符) 或 sizeof(变量名) C语言的程序和数据都是放在内存中的,不论是常量、变量还是复杂数据类型,都是按字节存储于系统存储区域中的。比如:char型变量在内存中占一个字节,int型变量在内存中占4个字节,短整型short在内存中占2字节,长整型long占4字节(以上所说均为32位计算机操作系统)。具体的请看下面的表格。而我们如果想要获取这些数据类型在内存中所占的字节数,就可以使用运算符sizeof来获取。e.g.12int a = 10,b=0;b = sizeof(a); sizeof运算符还可以用于计算数组、结构体、指针以及动态分配内存等额字节数,尤其是动态分配内存中,用的十分的普遍,而且再次也十分建议你在使用东陶分配内存时候,使用sizeof运算符来计算一下分配的内存字节数,便于你后续的管理。 使用sizeof运算符可以提高C语言程序的可移植性,以适应不同的系统平台。下面写一个程序来分别获取char,short,int,long,float,double等常用基本数据类型的内存字节数。12 这里需要注意的是字符常量在系统中以ASCII码形式存放,因此使用sizeof运算符时候,系统将整型常量会解析为常量97,而整型常量在系统中占用4字节,因此输出为4.所以我们遇到 char类型的需要用强制转换符转换一下即可。sizeof((char)’a’),那样系统就会把’a’当作字符看待了,因此就输出为1 。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/01/23/C语言的sizeof运算符/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
</entry>
<entry>
<title><![CDATA[禁止Linux系统被ping]]></title>
<url>%2F2019%2F01%2F20%2F%E7%A6%81%E6%AD%A2Linux%E7%B3%BB%E7%BB%9F%E8%A2%ABping%2F</url>
<content type="text"><![CDATA[从安全角度来说,设置禁止ping是可以增加系统安全的,但是此操作却是不必须的。因为我们有时候自己内部也会通过ping来检查服务器是否异常。此项操作在杜绝外部来源的ping操作时,同时也禁止了来自内部的ping操作。当然,对于安全要求很高的服务器来说,设置禁ping还是很有必要的。下面我来演示操作步骤操作系统:一台IP为192.168.217.148的 Ubuntu18.04,一台IP为192.168.217.145的Redhat 7操作方式:以Redhat向Ubuntu进行ping操作。在设置之前,我们首先验证一下Redhat是否可以ping通Ubuntu。1ping -c 4 192.168.217.148 然后我们对Ubuntu设置禁ping。此项操作只有root用户才有写入权限,所以Ubuntu需要切换到root用户才行。123echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conftail -1 /etc/sysctl.confsysctl -p 设置完成后,我们再次ping一下,查看是否已经禁止了被ping。可以从图中看到,Ubuntu已经禁止被ping了。下面我们取消被ping操作。我们用vim打开/etc/sysctl.conf,然后删除刚才写入的”net.ipv4.icmp_echo_ignore_all=1”。然后执行以下命令1echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 我们再次ping一下查看是否已经可以了。已经可以再次ping通了。 而我们比较好的策略是通过iptables设置让特定的IP可以ping,比如让我们的运维管理人员等或内网用户可以ping,其他外部用户不能ping。比如:我们可以使一个网段的IP可以ping。1iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 192.168.217.0/24 -j ACCEPT 此项操作使得192.168.217.0/24 网段内主机可以ping。当然我们可以通过iptables过滤的更加细致。这些不在本次讨论之中,就不说了。 总而言之,我们在做安全策略的时候,需要考虑各个方面,我们需要根据权限的不同设置不同的过滤规则。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/01/20/禁止Linux系统被ping/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[辨析静态网页和动态网页]]></title>
<url>%2F2019%2F01%2F20%2F%E8%BE%A8%E6%9E%90%E9%9D%99%E6%80%81%E7%BD%91%E9%A1%B5%E5%92%8C%E5%8A%A8%E6%80%81%E7%BD%91%E9%A1%B5%2F</url>
<content type="text"><![CDATA[摘要 : 本文主要讲解静态网页、动态网页的区别、特点以及如何分辨。不论你是站长、前端工作者、SEO优化抑或是架构师、后端程序员等职业,只要你涉及到web层面,该文对你都会有所帮助。了解这些知识,可以更便于你设计和优化网站。 静态网页概念在网站设计中, 纯HTML格式的网页(包含图片、 视频、js(前端功能实现)、css (样式)等)通常被称为 “静态网页” ,静态网页是相对于动态网页而言的, 是指没有后台数据库、 不含程序(如PHP、 JSP、 ASP)、 不可交互(这里的交互并不单纯是人与网站的交互,也是服务端、客户端数据之间的交互)的网页。 静态网页资源特点静态网页的维护和更新相对比较麻烦,每个不同的网页都需要单独编辑更新。你可能会说现在有很多网站模板系统,比如Hexo、Jekyll等只需要修改配置文件就可以实现批量化更新,但是这依然是我们从网页的文件本身入手的。静态网页一般适用于更新较少的宣传展示型网站,是早期很多中小网站展示的形式。 静态网页资源几个重要的特征 每个页面都有一个固定的URL地址, 且URL一般以.htm、.html、.shtml等常见形式为后缀,而且地址中不含有问号”?” 或”&” 等特殊符号。 网页内容一经发布到网站服务器上, 无论是否有用户访间, 每个网页的内容都是保存在网站服务器文件系统上的,静态网页是实实在在保存在服务器上的文件实体, 每个网页都是一个独立的文件。 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)。 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大, 当网站信息量很大时, 完全依靠静态网页比较困难(缺点) 网页的交互性较差,在程序的功能实现方面有较大的限制(缺点)。 网页程序在用户浏览器端解析,程序解析效率很高, 由于服务器端不进行解析, 并且不需要读取数据库,因此服务器端可以接受更多的并发访问。 当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析),待客户端拿到数据后,在浏览器端解析并展现出来(优点)。 综上所述,网站静态页面的特点就相当于在餐馆吃火锅, 餐馆把原材料和工具都给你准备好,你自己只需要涮着吃就行,不需要大厨给你炒菜做菜了。 因此,对于餐馆来讲,服务顾客的效率大大提高了。由于静态页面不需要在服务器端解析,因此服务器的压力也大大减轻了。常见的静态网页语言有 HTML 、 JS 、 CSS 、 XML 、 SHTML 等。 静态网页的核心特点 客户浏览器端解析程序。 不需要读取数据库, 性能和效率很高。 后端没有数据库支待, 和用户的交互性差, 功能实现很差。 动态网页所谓的动态网页是与静态网页相对而言的, 也就是说, 动态网页的URL后缀不是 .btm、 .html、 .sbtml、 .xml 、JS、 .css 等静态网页的常见扩展名形式, 而是 .asp 、.aspx 、 pbp 、 .js 、 .do 、 .cgi 等形式的, 并且一般在动态网页网址中会有标志性的符号”?,&”。此外,在大多数情况下后端都需要有数据库支持。 动态网页资源特点 网页扩展名后缀常见为: .asp 、 .aspx 、 .php、 .jsp、 .do、 .cgi 等。 2. 网页一般以数据库技术为基础,大大降低了网站维护的工作量。 采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理、发博文等。 动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能通过读取数据库来返回一个完整的网页内容。 动态网页中的”?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中”?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。 程序在服务器端解析, 这相当于顾客点餐,饭店厨师做饭做菜,耗时长、效率低。在这个过程中,会消耗大量的CPU和内存、IO等资源,并且多数还要提供读取数据库等服务,因此,其访问效率远不如静态网页。在服务器端解析动态程序的服务常见的有PHP引擎、Java容器(Tomcat、Resin、Jboss、Weblogic)等。 有关动态网页的架构思想一般来说, 静态网页的性能效率是动态网页的10-30倍。 且动态网站效率很差,并发能力也很低,在高并发场景中,应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师的职责所在。此外, 动态转静态也要根据业务需求设计,例如,对于更新频繁的网站,如果设计不好就可能会产生数据不一致的情况,即用户看到的数据不是网站最新的内容,而是静态的内容。 伪静态网页伪静态就是通过某些技术(如 rewrite)把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页,只不过看起来是符合静态网页地址特征的,因此,用户及某些搜索引擎会误认为是静态网页。 伪静态网页特点从网站的URL地址看, 伪静态表面上看起来是静态内容(如地址结尾带html), 但这其实是通过rewrite规则实现的URL地址重写。 改写后的URL地址规范、 美观, 有利于搜索引擎抓取,并且大大提升了用户的访问体验。但是伪静态网页终究还是动态网页, 所以从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能。 为什么动态网页不能直接转成静态网页呢?伪静态网页作用由于搜索引擎无法正确读取带参数的动态网页内容, 以致网页中很多具有丰富信息的页面无法被搜索引擎收录, 因此就有了伪静态技术。 它的作用是把动态网页URL改写成静态网页的URL, 虽然消除了动态网页中的参数, 但是并不需要生成任何网页, 仅仅是改变了网页地址路径。 这样做的主要目的有两个, 一是让搜索引擎收录网站内容, 让更多的用户访问企业网站内容。 二是提升用户访问体验, 动态地址带特殊符号等的URL看起来也不如静态网页地址简洁美观。 伪静态网页的缺点动态网页伪装成静态网页,虽然可以让搜索引擎收录,并且可提升用户访问体验,但伪静态网页并不能提升网站的访问效率,从理论上说还会降低网站的性能,没有动态转静态网页效率高,不过,对于一些并发不是很大的网站来说,或者是硬件资源充足的 网站来说,伪静态还是一个不错的功能。现在很多大型的网站都采用了动态网页生成静态网页的技术,用于消除动态网页中 的参数,使搜索引擎收录更多的内容,达到优化网站的效果。当网站遇到访问瓶颈时, 如果有技术力量将动态网页转化成静态网页,那就再好不过了,但是有些更新频率很快的业务并不适合这么做。此外,如果将动态转为静态有很大难度,这时也可以考虑将其设置伪静态。 伪静态网页小结□ 利用rewrite技术将动态网页伪装成静态网页(URL地址改写)。□ 便于搜索引擎搜录,提升用户访问掀及用户体验。□ 访问性能没有提升, 并且转换成伪静态会消耗资源, 因此性能反而会下降。□ 尽可能地将动态网页转换成真正的静态页面。□ 并发址不是很大或动态更新过于频繁时, 用rewrite实现伪静态也是不错的。 D伪静态网页的实现过程, 一般由产品运营提出需求, 开发和运维共同实现。 总结:这里的”动静”并不是移动、静止的意思,并不是网页上有特效在动就算是动态网页了,这里的动是指交互。 本文参考《Linux运维:集群实战》 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2019/01/20/辨析静态网页和动态网页/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[提取文本---cut命令]]></title>
<url>%2F2018%2F12%2F31%2F%E6%8F%90%E5%8F%96%E5%92%8C%E7%BB%84%E5%90%88%E6%96%87%E6%9C%AC%EF%BC%9Acut%E5%92%8Cpaste%E5%91%BD%E4%BB%A4%2F</url>
<content type="text"><![CDATA[cut命令可以从一个文本文件或文本流中提取文本列。cut命令将所有命令行参数理解为要执行操作的文件的文件名,如果没有参数,就对标准输入流进行操作。 在Linux系统中,我们可以通过’man cut’或者’cut –help’ 来查看cut的相关使用手册。我在这里做出一些总结: 参数说明 -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 -c :以字符为单位进行分割。 -d :自定义分隔符,默认为制表符。 -f :与-d一起使用,指定显示哪个区域。 -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。 cut命令主要是接受三个定位方法: 第一,字节(bytes),用选项-b 第二,字符(characters),用选项-c 第三,域(fields),用选项-f 字符串截取操作时候,cut以行为单位进行操作。其中在cut在进行截取字符串操作的时候,以-f选项使用最多,也是最好用的一个选项。下面就对-f选项进行详细讲解。-f选项是针对“域”信息的提取,为什么会有“域”的提取呢,因为-b和-c选项只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。 这时候就应该用“域”。 cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了什么是“域”呢?其实就是用分隔符分割的区域而已。首先要使用“域”,必须选定一个分隔符来进行界定“域”的存在。这个时候需要-d选项,所以使用-f选项的时候,通常会先使用-d选项。 cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。 OK,现在我们要实战一下cut的域的用法。随便找个常用的例子来说吧,就还拿获取IP地址来举例。我们通过grep来过滤IP地址,但是注意的是grep过滤的是那一行信息。所以我们需要用cut来截取字符串,当然你可以用其他的方法来截取。1bingyu@ubuntu:~$ ifconfig lo | grep "inet" | cut -d ":" -f 2 | cut -d " " -f 1 好了,这个命令看起来有那么一点长,但是其实很好理解,并且这些我们不论是在日常的工作中,还是在写shell程序时候,这个都是可以用得到的。下面我就来解释一下这个命令是怎么写的,并且是什么意思。命令之间使用管道命令来表示上一条命令的输出,作为下一条命令参数。首先我们使用ifconfig lo来输出本地的IP地址,当然你可以输出任何你计算机上的IP地址。然后使用grep来过滤掉不必要的字符,我们只想要包含IP地址的字符串。注意的是grep只能过滤掉包含所需信息的那一行。所以其他信息我们便不能通过grep来过滤了,此时我们需要用到一些特殊命令来截取字符串,这个时候我们使用cut命令来进行字符串的截取。我们只想要IP地址,我们只盯紧目标即可。我们需要观察我们目前所得到的这一行信息,然后利用规律以及可实现的方法来进去提取有效信息。我们会发现这些信息之间都是用“:”老i作为分割的。所以我们需要用到cut命令的域。我们把分割方式设置为”:”。此时,信息就被 分割为了3处,也就是三个域了。 此时我们需要提取第二个域,也就是使用参数”-f 2”来截取。然而这还不够,此时我们输出一下信息可以看到,还包含了我们不需要的一些信息,比如“mask”。所以我们需要把这些不需要的字符也过滤掉。也就是把他们也截取到。然后我们又会发现IP地址和”mask”之间多了一个空格,所以我们可以再次把它分为2个域,只截取空格前面的字符,即是IP地址了。但是这是在我zsh终端下的演示,也许你换个其他形式的终端或者换个操作系统就不行了。为什么呢?因为在我这个终端下显示的有冒号,可以利用冒号进行分域。比如下面的这个Ubuntu的bash终端,并没有出现冒号,全部是用空格来分割的,并且出现了多空格(红线标注处)。此时,我们自然不能使用“:”来进行分割域,也许你会想到使用空格来分割域,但是这样是不行的,这就需要我们了解到cut的缺陷与不足了。cut的缺陷和不足 :处理多空格,如果文件里面的某些域是由若干个空格来间隔的,那么用cut就不行了,因为cut只擅长处理“以一个字符间隔”的文本内容。 当你对本篇文章的内容全部理解后,我想你在什么地方使用cut命令,什么时候使用,怎么使用,已经有了一个基础的了解。这里我要再说一句,没有万能的命令,也没有不存在缺陷的命令,我们需要做的是在适合的时候,使用恰当的命令,包括组合命令。一个命令显然不能胜任任何需求,此时我们就需要组合命令来满足需求。 隐藏彩蛋,点击打开👈彩蛋其实就是我对各位的新年祝福啦,嘿嘿(≧∇≦)ノ 这是2018年的最后一篇博文了,希望各位2019年一切安好,心想事成。从2018年2月建站开始,截止到我写完这篇文章,这个时候是2018/12/31-22:41.已经历经了10个月,我写了153篇文章,基本全部是我本人原创文章。期间也收到了许多读者的反馈,谢谢各位的支持和陪伴,2019年,我会做的更好。你也要加油啊 \(0^◇^0)/ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/12/31/提取和组合文本:cut和paste命令/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[文本搜索工具---grep]]></title>
<url>%2F2018%2F12%2F31%2Fgrep%E5%91%BD%E4%BB%A4%2F</url>
<content type="text"><![CDATA[Linux系统中grep是一种强大的文本搜索工具,用于查找文件里符合条件的字符串。按照关键字或正则表达式过滤文本,并把匹配的行打印出来。grep的全称是Global Regular Expression Print,表示的是全局正则表达式打印,使用权限是所有用户。这里需要注意的是无论你如何设置过滤字符串的规则,grep都只能打印出包含该字符串信息的所有行信息,并不能只输出该字符串信息。如果你只想提取行中的特定字符串信息,那么你只能使用cut、sed、awk等命令。 参数:-a 或 --text : 不要忽略二进制的数据。 -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。 -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。 -c 或 --count : 计算符合样式的列数。 -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。 -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。 -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。 -E 或 --extended-regexp : 将样式为延伸的普通表示法来使用。 -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 -F 或 --fixed-regexp : 将样式视为固定字符串的列表。 -G 或 --basic-regexp : 将样式视为普通的表示法来使用。 -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。 -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。 -i 或 --ignore-case : 忽略字符大小写的差别。 -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。 -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。 -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。 -q 或 --quiet或--silent : 不显示任何信息。 -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。 -s 或 --no-messages : 不显示错误信息。 -v 或 --revert-match : 显示不包含匹配文本的所有行。 -V 或 --version : 显示版本信息。 -w 或 --word-regexp : 只显示全字符合的列。 -x --line-regexp : 只显示全列符合的列。 -y : 此参数的效果和指定"-i"参数相同。 由于grep支持正则表达式,所以你需要了解一些正则表达式的基础知识。用以更好的匹配出所需信息。grep默认的是贪婪匹配,也就是会将所有满足正则的行全部匹配出。为了更好的说明grep命令贪婪匹配的模式,下面我将示例一下。比如我们查看本机ipv4的IP地址。在此我以本地回环地址为例进行示范。1bingyu@ubuntu:~$ ifconfig lo | grep 'inet' 可以看到grep会把包含“inet”字符的全部都匹配出来。这就出现了我们并不需要的信息。我们本意是只取出ipv4的地址,但是此时把ipv6也打印了出来。由此例,我们就可以更好的理解grep的贪婪匹配规则了。 为了只匹配出ipv4的IP地址,我们需要用到grep的非贪婪模式。非贪婪模式就是一旦发现匹配符合要求,立马匹配成功,而不会继续匹配下去。也就是它只会匹配该字符串独立组成的字符,但是不会匹配出包含该字符串但是不独立的字符。要实现非贪婪匹配,其实只要增加参数就可以了。其中的12-w 或 --word-regexp : 只显示全字符合的列。-x --line-regexp : 只显示全列符合的列。 选项可以达到非贪婪匹配的效果。如下所示,我们就可以只去除ipv4的IP地址。当然grep主要用于匹配出文本信息,也可以说是查找特定字符串信息。但是如果你再想只取出一个IP地址,而不包含任何无关信息,那么就只能组合使用awk或sed命令了。1bingyu@ubuntu:~$ ifconfig lo | grep -w "inet" |awk '{print $2}' 这样子就只取出了ip地址。而没有输出任何无关信息,其实在真正的shell编写工作中,这样的匹配工作是十分常用的,还希望各位多多学习这些文本处理命令。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/12/31/grep命令/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Atom写C语言乱码问题解决]]></title>
<url>%2F2018%2F12%2F14%2Fatom%E5%86%99C%E8%AF%AD%E8%A8%80%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%2F</url>
<content type="text"><![CDATA[上次说了为Atom配置C语言编程环境。这次说说乱码的问题。在Atom中写的C语言程序中包含的有中文,但是只要拿到控制台运行,立马变乱码。 其实这个原因很明显,是编码的问题。但是我们需要细细分析一下,是哪部分编码问题导致的,我们又该如何来解决这个问题。首先我这里准备了一个简单的程序来作为示例。123456#include <stdio.h>int main(){ printf("hello world\n"); printf("你好 世界\n");} 以下是运行截图可以看到中文全部出现了乱码。而我们可以看到atom默认的编码是utf-8utf-8是支持中文编码的,但是控制台出现了乱码,说明控制台的编码并不是utf-8.我们可以右击控制台打开“属性”,查看一下编码。编码格式为gbk。所以我们此刻可以了解到文件编码是utf-8,控制台编码是GBK。也就是在做解码时候因为与编码出现了不一致而导致了乱码。所以我们可以任意调整一处编码,改为一致的即可。但是我们会发现控制台的编码是无法调整的。所以我们可以调整一下文件编码。而且文件编码也是很容易调整的。我们可以点击atom右下角的utf-8,然后会弹出一个对话框,我们选中chinese(gbk)就可以了。不过我们需要在每次写代码之前就完成这项工作。如果你不想每次都这么麻烦的话,你可以ato把整个的编码都设置为chinese(gbk)。依次打开”设置”—“核心设置”—“文件编码”,然后调整为chinese(gbk)即可。我们调整完编码后,再次编辑一下代码并运行,可以发现就可以了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/12/14/atom写C语言乱码问题解决/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>C语言</category>
</categories>
<tags>
<tag>atom</tag>
<tag>C语言</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Atom配置C语言代码编译环境]]></title>
<url>%2F2018%2F12%2F12%2FAtom%E9%85%8D%E7%BD%AEC%E8%AF%AD%E8%A8%80%E8%87%AA%E6%A3%80%E7%8E%AF%E5%A2%83%2F</url>
<content type="text"><![CDATA[环境:Windows 10 Atom 的安装就不需要说了。 首先我们需要配置好GCC环境。并保证已经配置到全局变量了。Windows上需要使用MinGW来配置GCC环境,下载链接为: https://sourceforge.net/projects/mingw/files/latest/download,然后按照提示安装就可以了。但是最重要的是需要设置环境变量。桌面-》鼠标右键单击我的电脑-》属性-》高级系统设置-》环境变量-系统变量(此处的安装路径为默认的,也建议使用默认安装路径) 将C:\MinGW\bin加入PATH 将C:\MinGW\include加入INCLUDE 将C:\MinGW\lib加入LIB 下面给atom安装扩展,搜索=并安装“linter-gcc”与“linter”两个插件。在安装过程中,可能会提示你需要安装依赖,那么你点击安装即可。下面我们需要设置一下插件。选择“linter-gcc”—–“setting” 。将路径改为“gcc”或“g++”。并且勾选“Lint on-the-fly”(表示在书写的同时编译)。如果不勾选此项,只有在文件被保存时才编译代码。如果勾选了“Lint on-the-fly”,只要写代码时有停顿的时候,软件就会自动编译整个程序并显示错误,停顿的等待时间可以在“Lint on-the-fly”选项下面的文本框中键入,单位是ms。 如果你输入了错误的代码后,atom就会动态显示错误个数并且能在错误那行代码前面显示红点。在下面可以设置检错的时间,以ms为单位,默认为300,为了提高速度,我在此改为了100,大家根据需要修改即可。 为了让程序真正的跑起来,我们还可以安装“gcc-make-run”插件,安装完成后,按“F6”即可编译并运行程序。这不是本文重点,在此便略去不说了。下面我演示一下效果,以便各位能自检插件是否设置成功以及快速上手该自检功能。我这里是随便打开一个自己写好的C程序并且做出一些错误来验证是否可以成功检错。并且我们可以看到,所有的error都会自动在该行显示红色图标,所有的warning都会显示黄色图标。 如果你写的是python,那么你可以使用 linter-python-pep8 这个插件;如果你写的是Java,你可以使用 linter-javac 。其设置方法和linter-gcc类似。 好了,各位如果哪里有不懂得或者按照步骤没有成功的可以加群联系我,欢迎与我讨论。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/12/12/Atom配置C语言自检环境/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>C语言</category>
</categories>
<tags>
<tag>atom</tag>
<tag>C语言</tag>
</tags>
</entry>
<entry>
<title><![CDATA[C语言中字符串与指针的关系]]></title>
<url>%2F2018%2F11%2F26%2FC%E8%AF%AD%E8%A8%80%E4%B8%AD%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%98%E9%87%8F%E7%9A%84%E8%A7%A3%E6%9E%90%2F</url>
<content type="text"><![CDATA[如果我说字符串也属于指针类型,你会信吗?其实大家在学习C语言基础的时候,都会把字符串当作字符类型处理,当然按照初学者的水平一般是不会出错的。但是事实上,字符串真的是只是属于字符类型的吗?那我今天就告诉你,并不是这么简单的。从功能上看,说字符串属于字符类型,这是没有任何错误的。但是如果你细究字符串在C语言中的运行的机制的话,字符串属于指针类型。 之所以说字符串常量是属于指针类型,是由于在程序中使用字符串常量会生成一个“指向字符串的常指针”。当一个字符串常量出现在一个表达式中时,表达式所引用的值是存储该字符串常量的内存首地址,而不是这些字符本身。 因此,用户可以把字符串常量赋值给一个字符类型的指针,用于指向该字符串在内存中的首地址。我们可以这么做。12char *p; // 创建字符类型的指针变量p p = "abcd"; // 直接将字符串变量abcd赋值给指针p 其实在这里双引号做了3件事: 申请了空间(在常量区),存放了字符串 在字符串尾加上了’/0’ 返回地址 而第三点的返回的地址赋值即给了p。 OK,说了这么多,直接上代码来验证一下以说明问题。12345678#include <stdio.h>int main(){ char *p = "hello world"; printf("%s",p); return 0;} 再来个测试代码(我代码功力拙劣,欢迎指正)12345678910#include <stdio.h>int main(){ char *p = "hello world"; printf("\n&p is %x\n",&p); printf("&p[0] is %x\n",&p[0]); printf("p is %x\n",p); return 0;} 此处,我们具体分析一下代码运行的过程。内存图示如下:计算机分配了两段内存,一个名为p,类型是一个字符指针,另外一段是一个字符串常量,且p里面存放着字符串常量的首地址。 &p:p这个字符指针变量的地址&p[0]:p所指字符常量第一个字符的地址p:p这个字符指针的值,即字符常量的首地址 因此,最后两个的值是一样的。 除了字符串常量可以直接赋值给指针外,字符串与字符也有着巨大的区别。 字符串常量看似是字符类型,但事实上,字符串常量与字符常量有着较大的区别。字符串常量是指用一对双引号括起来的一串字符,双引号只起定界作用,双引号括起的字符串中不能是双引号(“”)和反斜杠(\)。例如:”China”、”Cprogram”、”YES&NO”、”33312-2341”、”A”等都是合格的字符串常量。在C语言中,字符串常量在内存中存储时系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL,通常用‘\0’表示。因此在程序中,长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间。例如,字符串”BLOG”有4个字符,存储在内存中时占用5个字节。系统自动在字符串最后加上NULL字符,其存储形式如下图所示。 要特别注意字符常量与字符串常量的区别,除了表示形式不同外,其存储方式也不相同。字符’A’只占1个字节,而字符串常量”A”占2个字节。 OK,到此结束。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/11/26/C语言中字符串变量的解析/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>C语言</category>
</categories>
<tags>
<tag>C语言</tag>
</tags>
</entry>
<entry>
<title><![CDATA[单片机常用的14个C语言算法]]></title>
<url>%2F2018%2F10%2F30%2F%E5%8D%95%E7%89%87%E6%9C%BA%E5%B8%B8%E7%94%A8%E7%9A%8414%E4%B8%AAC%E8%AF%AD%E8%A8%80%E7%AE%97%E6%B3%95%2F</url>
<content type="text"><![CDATA[算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。 本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。12345678910111213141516171819202122232425void main(){int a[101],x[11],i,p;for(i=0;i<=11;i++)x=0;for(i=1;i<=100;i++){a=rand() % 100;printf("%4d",a);if(i%10==0)printf("\n");}for(i=1;i<=100;i++){p="a"%10;if(p==0) p="10";x[p]=x[p]+1;}for(i=1;i<=10;i++){p="i";if(i==10) p="0";printf("%d,%d\n",p,x);}printf("\n");} 二、求两个整数的最大公约数、最小公倍数 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)(1) 对于已知两数m,n,使得m>n;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4) m←n,n←r,再重复执行(2)。例如: 求 m=”14” ,n=6 的最大公约数. m n r14 6 26 2 012345678910111213void main(){ int nm,r,n,m,t;printf("please input two numbers:\n");scanf("%d,%d",&m,&n);nm=n*m;if (m<n){ t="n"; n="m"; m="t"; }r=m%n;while (r!=0){ m="n"; n="r"; r="m"%n; }printf("最大公约数:%d\n",n);printf("最小公倍数:%d\n",nm/n);} 三、判断素数 只能被1或本身整除的数称为素数 基本思想:把m作为被除数,将2—INT( )作为除数,如果都除不尽,m就是素数,否则就不是。(可用以下程序段实现)1234567891011121314151617181920void main(){ int m,i,k;printf("please input a number:\n");scanf("%d",&m);k=sqrt(m);for(i=2;i<k;i++)if(m%i==0) break;if(i>=k)printf("该数是素数");elseprintf("该数不是素数");}将其写成一函数,若为素数返回1,不是则返回0int prime( m%){int i,k;k=sqrt(m);for(i=2;i<k;i++)if(m%i==0) return 0;return 1;} 四、验证哥德巴赫猜想 (任意一个大于等于6的偶数都可以分解为两个素数之和)基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为止。 利用上面的prime函数,验证哥德巴赫猜想的程序代码如下:1234567891011121314151617181920212223242526#include "math.h"int prime(int m){ int i,k;k=sqrt(m);for(i=2;i<k;i++)if(m%i==0) break;if(i>=k)return 1;elsereturn 0;}main(){ int x,i;printf("please input a even number(>=6):\n");scanf("%d",&x);if (x<6||x%2!=0)printf("data error!\n");elsefor(i=2;i<=x/2;i++)if (prime(i)&&prime(x-i)){printf("%d+%d\n",i,x-i);printf("验证成功!");break;}} 五、排序问题1.选择法排序(升序) 基本思想:1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;2)除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置;3)依次类推,选择了n-1次后,这个数列已按升序排列。程序代码如下:1234567891011121314void main(){ int i,j,imin,s,a[10];printf("\n input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a);for(i=0;i<9;i++){ imin="i";for(j=i+1;j<10;j++)if(a[imin]>a[j]) imin="j";if(i!=imin){s=a; a=a[imin]; a[imin]=s; }printf("%d\n",a);}} 2.冒泡法排序(升序) 基本思想:(将相邻两个数比较,小的调到前头)1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。程序段如下123456789101112131415void main(){ int a[10];int i,j,t;printf("input 10 numbers\n");for(i=0;i<10;i++)scanf("%d",&a);printf("\n");for(j=0;j<=8;j++)for(i=0;i<9-j;i++)if(a>a[i+1]){t=a;a=a[i+1];a[i+1]=t;}printf("the sorted numbers:\n");for(i=0;i<10;i++)printf("%d\n",a);} 合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序) 基本思想:1)先在A、B数组中各取第一个元素进行比较,将小的元素放入C数组;2)取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;3)将另一个数组剩余元素抄入C数组,合并排序完成。程序段如下:123456789101112131415161718192021222324252627void main(){ int a[10],b[10],c[20],i,ia,ib,ic;printf("please input the first array:\n");for(i=0;i<10;i++)scanf("%d",&a);for(i=0;i<10;i++)scanf("%d",&b);printf("\n");ia=0;ib=0;ic=0;while(ia<10&&ib<10){ if(a[ia]<b[ib]){ c[ic]=a[ia];ia++;}else{ c[ic]=b[ib];ib++;}ic++;}while(ia<=9){ c[ic]=a[ia];ia++;ic++;}while(ib<=9){ c[ic]=b[ib];b++;ic++;}for(i=0;i<20;i++)printf("%d\n",c);} 六、查找问题 顺序查找法(在一列数中查找某数x)基本思想:一列数放在数组a[1]—a[n]中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a[p]比较,如果x不等于a[p],则使p=p+1,不断重复这个过程;一旦x等于a[p]则退出循环;另外,如果p大于数组长度,循环也应该停止。(这个过程可由下语句实现)12345678910111213141516void main(){ int a[10],p,x,i;printf("please input the array:\n");for(i=0;i<10;i++)scanf("%d",&a);printf("please input the number you want find:\n");scanf("%d",&x);printf("\n");p=0;while(x!=a[p]&&p<10)p++;if(p>=10)printf("the number is not found!\n");elseprintf("the number is found the no%d!\n",p);} 思考:将上面程序改写一查找函数Find,若找到则返回下标值,找不到返回-1②基本思想:一列数放在数组a[1]—a[n]中,待查找的关键值为key,把key与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。(查找子过程如下。index:存放找到元素的下标。)123456789101112131415161718void main(){ int a[10],index,x,i;printf("please input the array:\n");for(i=0;i<10;i++)scanf("%d",&a);printf("please input the number you want find:\n");scanf("%d",&x);printf("\n");index=-1;for(i=0;i<10;i++)if(x==a){ index="i"; break;}if(index==-1)printf("the number is not found!\n");elseprintf("the number is found the no%d!\n",index);} 七、二分法在一个数组中,知道一个数值,想确定他在数组中的位置下标,如数组:A[5] = {1,2,6,7,9};我知道其中的值为6,那么他的下标位置就是3。1234567891011121314151617181920int Dichotomy(int *ucData, int long, int num){ int iDataLow = 0 ; int iDataHigh = num - 1; int iDataMIDDLE; while (iDataLow <= iDataHigh) { iDataMIDDLE = (iDataHigh + iDataLow)/2; i f (ucData[iDataMIDDLE] > long) { iDataHigh = iDataMIDDLE - 1 ; } else if (ucData[iDataMIDDLE] < long) { iDataLow = iDataMIDDLE + 1 ; } else{ return iDataMIDDLE ; }}} 八、限幅滤波法对于随机干扰 , 限幅滤波是一种有效的方法;基本方法:比较相邻n 和 n - 1时刻的两个采样值y(n)和 y(n – 1),根据经验确定两次采样允许的最大偏差。如果两次采样值的差值超过最大偏差范围 ,认为发生可随机干扰 ,并认为后一次采样值y(n)为非法值 ,应予删除 ,删除y(n)后 ,可用y(n – 1) 代替y(n);若未超过所允许的最大偏差范围 ,则认为本次采样值有效。下面是限幅滤波程序:( A 值可根据实际情况调整,value 为有效值 ,new_value 为当前采样值滤波程序返回有效的实际值 )12345678#define A 10char value;char filter(){ char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A )) return value; return new_value;} 九、中位值滤波法中位值滤波法能有效克服偶然因素引起的波动或采样不稳定引起的误码等脉冲干扰;对温度 液位等缓慢变化的被测参数用此法能收到良好的滤波效果 ,但是对于流量压力等快速变化的参数一般不宜采用中位值滤波法;基本方法:对某一被测参数连续采样 n次(一般 n 取奇数) ,然后再把采样值按大小排列 ,取中间值为本次采样值。下面是中位值滤波程序:12345678910111213#define N 11char filter(){ char value_buf[N], count,i,j,temp; for ( count=0;count<N;count++) { value_buf[count] = get_ad(); delay(); } for (j=0;j<N-1;j++) { for (i=0;i<N-j;i++) { if ( value_buf>value_buf[i+1] ) {temp = value_buf; value_buf = value_buf[i+1]; value_buf[i+1] = temp; } } } return value_buf[(N-1)/2];} 十、算术平均滤波法算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动 ,如测量流量、 液位;基本方法:按输入的N 个采样数据 ,寻找这样一个 Y ,使得 Y 与各个采样值之间的偏差的平方和最小。编写算术平均滤波法程序时严格注意: 一.为了加快数据测量的速度 ,可采用先测量数据 存放在存储器中 ,测完 N 点后 ,再对 N 个数据进行平均值计算; 二.选取适当的数据格式 ,也就是说采用定点数还是采用浮点数。其程序如下所示:1234567#define N 12char filter(){int sum = 0,count; for ( count=0;count<N;count++) { sum+=get_ad(); delay();}return (char)(sum/N);} 十一、递推平均滤波法基本方法:采用队列作为测量数据存储器 , 设队列的长度为 N ,每进行一次测量 ,把测量结果放于队尾 ,而扔掉原来队首的一个数据 ,这样在队列中始终就有 N 个 “最新” 的数据。当计算平均值时 ,只要把队列中的 N 个数据进行算数平均 ,就可得到新的算数平均值。这样每进行一次测量 ,就可得到一个新的算术平均值。12345678910#define N 12char value_buf[N],i=0;char filter(){ char count; int sum=0; value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;count<N;count++) sum = value_buf[count];return (char)(sum/N);} 十二、一阶滞后滤波法优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合;缺点:相位滞后,灵敏度低.滞后程度取决于a值大小.不能消除滤波频率高于采样频率的1/2的干扰信号。程序如下:1234567#define a 50char value;char filter(){ char new_value; new_value = get_ad(); return (100-a)\*value + a*new_value;} 十三、PID控制算法在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器;对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制;PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。一 模拟PID调节器 模拟PID控制系统原理框图 PID调节器各校正环节的作用:比例环节:即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差;积分环节:主要用于消除静差,提高系统的无差度。积分时间常数TI越大,积分作用越弱,反之则越强;微分环节:能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。 PID调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。 程序片段如下:123456789101112#include <reg52.h>#include <string.h> typedef struct PID {double SetPoint; // 设定目标Desired valuedouble Proportion; // 比例常数Proportional Constdouble Integral; // 积分常数Integral Constdouble Derivative; // 微分常数Derivative Constdouble LastError; // Error[-1]double PrevError; // Error[-2]double SumError; // Sums of Errors} PID; 主程序:123456789101112131415161718192021double sensor (void){return 100.0; }void actuator(double rDelta){}void main(void){PID sPID;double rOut;double rIn;PIDInit ( &sPID );sPID.Proportion = 0.5;sPID.Derivative = 0.0;sPID.SetPoint = 100.0;for (;;) {rIn = sensor ();rOut = PIDCalc ( &sPID,rIn );actuator ( rOut );}} 十四、开根号算法单片机开平方的快速算法 因为工作的需要,要在单片机上实现开根号的操作。目前开平方的方法大部分是用牛顿迭代法。我在查了一些资料以后找到了一个比牛顿迭代法更加快速的方法。不敢独享,介绍给大家,希望会有些帮助。 1.原理因为排版的原因,用pow(X,Y)表示X的Y次幂,用B[0],B[1],…,B[m-1]表示一个序列,其中[x]为下标。 假设: B[x],b[x]都是二进制序列,取值0或1。 M = B[m-1]*pow(2,m-1) + B[m-2]*pow(2,m-2) + … + B[1]*pow(2,1) + B[0]*pow(2,0) N = b[n-1]*pow(2,n-1) + b[n-2]*pow(2,n-2) + … + b[1]*pow(2,1) + n[0]*pow(2,0) pow(N,2) = M (1) N的最高位b[n-1]可以根据M的最高位B[m-1]直接求得。 设 m 已知,因为 pow(2, m-1) <= M <= pow(2, m),所以 pow(2, (m-1)/2) <= N <= pow(2, m/2) 如果 m 是奇数,设m=2k+1, 那么 pow(2,k) <= N < pow(2, 1/2+k) < pow(2, k+1), n-1=k, n=k+1=(m+1)/2 如果 m 是偶数,设m=2k, 那么 pow(2,k) > N >= pow(2, k-1/2) > pow(2, k-1), n-1=k-1,n=k=m/2 所以b[n-1]完全由B[m-1]决定。 余数 M[1] = M - b[n-1]\pow(2, 2*n-2) (2) N的次高位b[n-2]可以采用试探法来确定。 因为b[n-1]=1,假设b[n-2]=1,则 pow(b[n-1]*pow(2,n-1) + b[n-1]*pow(2,n-2), 2) = b[n-1]*pow(2,2*n-2) + (b[n-1]*pow(2,2n-2) + b[n-2]\pow(2,2n-4)), 然后比较余数M[1]是否大于等于 (pow(2,2)\b[n-1] + b[n-2]) pow(2,2n-4)。这种比较只须根据B[m-1]、B[m-2]、…、B[2n-4]便可做出判断,其余低位不做比较。 若 M[1] >= (pow(2,2)\b[n-1] + b[n-2]) pow(2,2\n-4), 则假设有效,b[n-2] = 1; 余数 M[2] = M[1] - pow(pow(2,n-1)*b[n-1] + pow(2,n-2)*b[n-2], 2) = M[1] - (pow(2,2)+1)*pow(2,2*n-4); 若 M[1] < (pow(2,2)*b[n-1] + b[n-2]) pow(2,2\n-4), 则假设无效,b[n-2] = 0;余数 M[2] = M[1]。 (3) 同理,可以从高位到低位逐位求出M的平方根N的各位。 使用这种算法计算32位数的平方根时最多只须比较16次,而且每次比较时不必把M的各位逐一比较,尤其是开始时比较的位数很少,所以消耗的时间远低于牛顿迭代法。 实现代码这里给出实现32位无符号整数开方得到16位无符号整数的C语言代码。12345678910111213141516171819202122232425262728293031323334353637383940414243/****************************************//*Function: 开根号处理 *//*入口参数:被开方数,长整型 *//*出口参数:开方结果,整型 *//****************************************/unsigned int sqrt_16(unsigned long M){ unsigned int N, i; unsigned long tmp, ttp; // 结果、循环计数 if (M == 0) // 被开方数,开方结果也为0 return 0; N = 0; tmp = (M >> 30); // 获取最高位:B[m-1] M <<= 2; if (tmp > 1) // 最高位为1 { N ++; // 结果当前位为1,否则为默认的0 tmp -= N; } for (i=15; i>0; i--) // 求剩余的15位 { N <<= 1; // 左移一位 tmp <<= 2; tmp += (M >> 30); // 假设 ttp = N; ttp = (ttp<<1)+1; M <<= 2; if (tmp >= ttp) // 假设成立 { tmp -= ttp; N ++; } } return N;} 参考自https://mp.weixin.qq.com/s/3D6cVhHYskliWupWcLIRqQ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/30/单片机常用的14个C语言算法/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>C语言</category>
</categories>
<tags>
<tag>C语言</tag>
</tags>
</entry>
<entry>
<title><![CDATA[解决git push时候总提示输入账号密码]]></title>
<url>%2F2018%2F10%2F28%2F%E8%A7%A3%E5%86%B3git-push%E6%97%B6%E5%80%99%E6%80%BB%E6%8F%90%E7%A4%BA%E8%BE%93%E5%85%A5%E8%B4%A6%E5%8F%B7%E5%AF%86%E7%A0%81%2F</url>
<content type="text"><![CDATA[我最近在coding上创建了一个仓库。但是每次git push的时候,都会提示你输入账号和密码,特别麻烦,所以今天就记录一下解决过程。 运行环境:Ubuntu18.04。 下图是每次都要输入账号密码的截图然后我们到自己的家目录,执行以下命令1bingyu@ubuntu:~$ git config --global credential.helper store 然后我们可以查看一下.gitconfig 文件,已经添加了内容进去。(此处不用切换目录,.gitconfig就在家目录中,属于隐藏文件)然后,你切换到你的本地仓库目录下,重新git push 提交,输入用户名和密码。以后就再也不用每次提交的时候输入账号和密码了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/28/解决git-push时候总提示输入账号密码/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title><![CDATA[关于Hexo博客的调试方法]]></title>
<url>%2F2018%2F10%2F20%2F%E5%85%B3%E4%BA%8EHexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E8%B0%83%E8%AF%95%E6%96%B9%E6%B3%95%2F</url>
<content type="text"><![CDATA[前言本文的关注点在于博客后期的优化,维护上,而不是博客的运行修复,配置,更新上。调试的前提是你已经安装并成功运行了hexo博客,而且是已经成功发布了博文。而且对于博客的优化,美化等工作是长期的,不可能一蹴而就,这些工作往往需要花费我们更多的时间以及精力来完善博客。本篇教程将会处于长期更新状态,所以你需要不定时查看。 这个教程的火狐浏览器的版本已经很老旧了,火狐调整了控制台的一些选项和参数,但是基本的功能和调试方式还是没有变化的。所以我们还是可以按照本教程放心正常调试。 Hexo调试下面说几个对hexo的调试方法。首先你应该了解hexo的运行原理,然后清楚hexo的目录结构以及作用。这些都是你调试的基础。如果你不懂这些,请你一定要三思后再去调试。不然你的博客可能会整个瘫痪。官方的hexo文档是最权威的,请仔细阅读后再做调试。 Hexo文档地址:https://hexo.io/zh-cn/docs/ 然后有了这些基础后,你还需要懂得html,js,css这些知识,你不需要会写代码,但是你一定要可以看懂一些基础简单的代码。其实在hexo中,出错率最高的是js,所以你一定要先排查js,然后排查html和css的原因。在网页中html负责 结构,CSS负责 样式,js负责 功能。 首先你要在给博客增加新功能后,如果未成功出现应该有的效果,首先应该右击浏览器,查看源代码。接着按”Ctr+F”,查找关键字,查看一下css或者js文件是否已经成功加载到了html页面中。如果已经加载到了html页面,那么我们现在就只能通过控制台来调试了。首先你需要会使用浏览器的开发者工具。F12大法永远是你调试网站最有力的工具。 需要注意的是有些插件并不支持https,此时我们需要部署到本地调试。 我本人一直使用的火狐浏览器,所以我也只用火狐浏览器调试为例进行说明。但是要知道的是调试的方法都大致相同,所以你即使使用的是其他类型的浏览器,我们所关注的重点还是那些。 火狐浏览器一直更新频繁,因此很多功能选项卡都会出现些许不同,所以并不能保证你现在使用的版本和我这篇文章的一致。 打开你的博客,然后按“F12”,打开控制台后,首先调整到“错误”一栏,然后刷先网页。你查看报错信息即可。如果你看不懂报错信息,就把报错信息全部复制粘贴进搜索框,网上会有解决办法。 然后你再去你的博客的配置文件中,找到该段代码所在的文件。你打开后找到该段代码,进行分析即可。一般来说,出错的原因都是因为调用不到,这个时候你只需要查找代码的位置,然后使用相对于代码的位置来使代码可以成功调用即可。但是有一点必须要说明一下。就是这个调用的代码也许是在本地的配置文件中,也有可能是调用的cdn的代码。(那么什么是cdn调用的代码呢?在最下面我有讲到)如果是cdn的代码,你需要测试一下是否可以正常使用,并且需要查看一下是http的还是https的,你的博客支不支持调用等。因为就是很有可能一些代码已经不维护了,或者关闭了。比如网易跟帖的评论系统,jiathis的分享功能等。这些就只能换其他的了。 我使用hexo也才刚半年的时间,所以说,提供的方法可能不到位,还请各位给我多多反馈意见和建议。 还有就是当你运行hexo d和hexo g命令时候,如果出现了很多的报错,那么就将你刚才更改的文件再更改过来,然后重新审核你更改的代码,是否出现了比如”字母大小写,中文符号或者多了字母或多了空格”等问题。还有就是即使你的代码运行时没有出现报错,而且按照教程做的也全都对,但是并没有出现特殊的效果。有可能是出现了逻辑错误。比如,我曾经给博客加valine评论,我已经严格按照教程进行了设置了,但是最会出现逻辑错误。下面讲解一个我遇到的问题。特别麻烦,几乎折腾了我一天一夜。我各种百度谷歌,各种查找教程。当我准备放弃的时候,突然看到了这么一条语句,终于开窍了,原来是逻辑判断造成的。这个红线所示的代码是我在增加阅读统计功能时候加上去的,本来放上去是没有任何问题的。但是后来我在做valine评论的时候,直接将这么一条语句也放到了他的后面。12leancloud_visitors: enable: false 这段话的意思就是当此选项设置为true时候,才会加载valine文件和lean文件,然后才能出现评论和阅读统计。当设置为false时候,无论你的valine如何设置,都不会出现评论,我在调试过程中,也发现了此问题,但是一直没搞明白。这一下子终于明白了。其实和我们 些代码一样,即使没有任何的报错,还是会出现逻辑错误。而逻辑错误恰好是编译器查找不出来的。所以也希望各位多多重视一下此问题。 衷心提醒但是我需要给各位使用hexo以及其他类似于hexo博客的使用者说一句,并不是功能越多就越有趣。相反的,你增多了功能,反而会遏制博客打开的速度。很多插件看着是只有几行代码,短小精悍,其实你要是知道功能越花哨越复杂,代码量就会越多。当你一味的增大功能的时候,hexo需要调用很多api,外部的css等,这样反而弄巧成龊,把你的博客搞得速度很慢,那么访客的浏览体验就会下降。至少对于我来说,20秒还打不开一个网页的话,我便会丢弃使用。所以你只需要做的是提高个人技术,写好博文,让更多的技术爱好者受益,并可以真正解决别人的问题。这是我做博客的一点体验。 CDN下面我讲几句关于cdn加速的问题。 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。 网页中引用代码的两种方式: 下载代码文件至本地项目中引入。 通过 CDN(内容分发网络)引用。 使用CDN引用的一个好处:许多用户在访问其他站点时,已经从百度、又拍云、新浪、谷歌或微软加载过 jQuery。所有结果是,当他们访问您的站点时,会从缓存中加载 jQuery,这样可以减少加载时间。同时,大多数 CDN 都可以确保当用户向其请求文件时,会从离用户最近的服务器上返回响应,这样也可以提高加载速度。减少等待时间,增加网页的同时载入速度,更好的缓存,内容分发,解决网络拥挤和提供网站相应速度。 CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用。与将JS库存放在服务器单机上相比,CDN公共库更加稳定、高速。一般的CDN公共库都会包含全球所有最流行的开源JavaScript库。 免费的js库: BootCDN http://www.bootcdn.cn/ 目前前端开源的项目几乎都涵盖了,支持http和https。 百度静态资源公共库 http://cdn.code.baidu.com/一个是稳定,快速,全面,开源的国内CDN加速服务。 Staticfile CDN https://www.staticfile.org/基于CDN 加速由七牛云提供包括 JS、CSS、image 和 swf 等静态文件的,支持http和https。 来自微软的问候(发现并不这么好用) https://docs.microsoft.com/en-us/aspnet/ajax/cdn/overview资源不太全不如以上几个。可能是业务的原因吧。 一个基于github的cdn库,无论是数量还是质量都是不错的。 https://cdnjs.com/一个公益项目。英文的网站,但是加载速度还是可以的。 一个只有jQuery的cdn。 http://code.jquery.com/ 基于百度云的资源站 https://cloud.baidu.com/doc/Developer/index.html;各种开发语言的sdk均可以免费下载,是程序员不可多得福利站。 又拍云的js库(资源较少) http://jscdn.upai.com/ 360网站卫士常用前端公共库CDN服务(比较卡,资源丰富) http://libs.useso.com/资源丰富 提供Google公共库、Google字体库替换服务有时在国外无法加载,导致网页加载被阻塞。 今日头条静态资源公共库 https://cdn.bytedance.com/ 支持:https、http,支持 combo;代码查看;资源丰富,支持字体、css、png 等;更新频繁; CDNJS.NET http://cdnjs.net/ 我在博客的在线工具里已经添加了一些不错的js库,大家有需要的话,可以拿来用。 未完待续… 附:Firefox 开发者工具使用文档 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/20/关于Hexo博客的调试方法/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[解决Hexo博客的访问量无法显示]]></title>
<url>%2F2018%2F10%2F19%2F%E8%A7%A3%E5%86%B3Hexo%E5%8D%9A%E5%AE%A2%E7%9A%84%E8%AE%BF%E9%97%AE%E9%87%8F%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA%2F</url>
<content type="text"><![CDATA[在前天的时候,我浏览我博客的时候,我就发现博客最下方的访问量不能正确显示了。但是实在忙的要命,天天都是课,根本没时间去管这些事。便一直搁置到现在。今天终于有时间来解决一下了。特此记录一下,同时也给各位使用hexo博客的用户提供一个解决办法。相信这几天使用hexo的大部分用户的博客都不能正常显示访问量了吧。基本使用不蒜子统计的,都不能正常显示了。这其实不是不蒜子统计的锅。我也是今天开始着手解决这个问题的时候发现的。怎么说呢?不蒜子换了域名了,然后以前的那个调用的部署在不蒜子网站上的js代码,由于换了域名,导致了不能正常调用js,所以就不能正常使用了。 现在不蒜子统计的官方网址为http://busuanzi.ibruce.info/我们首先找到不蒜子统计调用的js代码所在的文件。这个代码是在Hexo主题文件夹的 \layout\_partials\footer.swig里。其中的这个js https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js,我们可以打开试试看,已经不行了。 所以我们可以直接替换掉原来不能用的js即可。这个js代码因主题不同而位置不同。我的打开后可以直接看到就在第一行。你直接把src中的那个链接替换为下面的即可。1//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js 然后我们提交部署代码。123$ hexo clean$ hexo g$ hexo d 然后刷新一下你的博客。我们就可以看到已经恢复正常了。更改之后,博客的访问量不会回到初始的访问量为0的状态,还是会以以前的数值继续增长。至于你是如何布局,是使用pv还是uv,是记录访问量还是访客人数等,这些都不在讨论的范围内,而且较为简单,也没必要专门写出来。如果你还有哪里不会直接联系我就行了。 好了,写完了,又到凌晨了,各位晚安( ̄o ̄) . z Z 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/19/解决Hexo博客的访问量无法显示/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
</tags>
</entry>
<entry>
<title><![CDATA[怎么申请注册 GitHub Actions]]></title>
<url>%2F2018%2F10%2F19%2F%E6%80%8E%E4%B9%88%E7%94%B3%E8%AF%B7-GitHub-Actions%2F</url>
<content type="text"><![CDATA[大三了,每天忙的要死,虽然前两天便得到了Actions的消息,但一直没有时间申请,今天星期五,可以利用一会的休息时间申请一下,也分享给大家。 虽然GitHub已经决定推出Actions了,但是目前该项目还处于测试阶段,并没有面向全体GitHub用户开放。目前开发者可以在网页中注册申请 Actions 工具的公测资格。不过相信,很快就会推出稳定版本,那个时候每个用户都可以使用该工具了。 GitHub Actions申请注册地址: https://github.com/features/actions好了,下面开始申请注册。选择你已有的GitHub账户。然后,我们就可以看到我们已经成功申请了。但是我们需要到设置里,验证一下有效的邮箱。该邮箱将用于接收你是否可以成为Actions工具的测试用户。当然,这只是你提交了申请,你是否有资格体验以及测试该工具,需要经过GitHub的审核后才行,只能慢慢等待GitHub的对你的回信。 当你申请成功后,GitHub会发送给你一封邮件。并且你的仓库页面的功能栏上会显示出”Actions”的选项卡。当我们点击进去后,会出现如下页面点击”create a new workflow”,即创建一个新的工作流。然后我们会看到如下界面(在此,我以自己的仓库为例进行演示说明)我已经成功申请了Actions,在此说明一下感受,我感觉actions会给你带来更高效更直观的体验,反正就是好用!你也赶快来申请吧, 最后说明几点内容: 你在GitHub上应该要有足够的活跃度,贡献值以及代码仓库。如果你不是那种很喜欢上GitHub的人,那么我忠心提醒你一句,别申请注册了,通过几率为0。 会使用GitHub的基础功能。既然这是个公开的测试版,那么Actions开发者的目的也是想更多的了解该项目的bug以及用户的需求。所以你要想作为测试的用户,那么一定要熟悉GitHub的基础使用,知道如何测试Actions工具。并且你需要积极使用此功能,争取发现更多的bug或者寻求更多人性化的设计,而不是浪费这个公测名额。 其实GitHub网站上还有一些小细节的更新,比如我今天打开GitHub才发现的一个更新的小细节这个“environment”是最近更新添加的新功能。他用来记录GitHub-pages的deploy(部署)。这个与记录提交历史的“commits”有些不同。这些小细节的更新,只有你是一位长期活跃于GitHub上的开发者才能注意得到。 总而言之,GitHub自从“嫁入”微软后,变得越来越有趣了。也希望各位多多支持她!!! GitHub Actions使用说明书地址https://help.github.com/articles/customizing-your-project-with-github-actions/https://help.github.com/articles/about-github-actions/https://developer.github.com/actions/ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/19/怎么申请-GitHub-Actions/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Github 宣布即将推出自动化流程工具 Actions]]></title>
<url>%2F2018%2F10%2F17%2FGithub-%E5%AE%A3%E5%B8%83%E5%8D%B3%E5%B0%86%E6%8E%A8%E5%87%BA%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%81%E7%A8%8B%E5%B7%A5%E5%85%B7-Actions%2F</url>
<content type="text"><![CDATA[在年度 GitHub Universe 大会上,GitHub 发布了一个版本更新:可以让所有人直接运行部分代码!Actions 是一项全新的自动化流程工具,可由 push、issue、release 等一系列平台事件触发,随后自动化按照序列运行一系列流程 GitHub 任务和动作。这是一种可以自动管理代码的工具,可以测试你的代码、并给你提供技术支持。目前开发者可以在网页中注册申请 Actions 工具的公测资格。 作为一个目前拥有3100万用户的、地球上最大的项目管理和开源协作平台、以及大(tong)型(xing)生(jiao)活(you)服务平台,发布了重大更新(GitHub平台主管Sam Lambert把这次更新,描述为“GitHub 史上最大转变”),怎能不让人激动!。 那么,为什么这个更新,如此让人惊喜? 话说以前,如果你需要测试GitHub上的项目,先得下载到本地运行,最痛苦的是,很有可能折腾了一番,却发现没法运行。 而现在,在GitHub上,你可以直接运行部分代码了!GitHub的平台主管Sam Lambert表示,老有用户自己编写机器人软件,来运行测试、或者有Bug报告被提交时、自动发送短信通知相关人员。 但这些工具,需要运行在GitHub平台之外的服务器上。而这个麻烦,现在只需交给GitHub就好。 以后,当你在GitHub贡献代码时,直接把贡献的部分代码,当做工作流,用类似于「if this then that」的逻辑,连接代码块,就可以直接运行、并测试代码了。 而GitHubActions的原理,就好比iOS 12允许用户,自己设置各种各样的shortcuts一样,但是GitHub actions,要比前者更灵活、且实现的功能更多。 Sam Lambert还说了,虽然GitHubActions,不能满足每个人的要求,但是开发者也可以在上面,开发自己的功能。 关于actions的更多介绍可以查看官方博客: https://blog.github.com/2018-10-17-action-demos/ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/17/Github-宣布即将推出自动化流程工具-Actions/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
</tags>
</entry>
<entry>
<title><![CDATA[GitHub年度报告]]></title>
<url>%2F2018%2F10%2F16%2FGitHub%E5%B9%B4%E5%BA%A6%E6%8A%A5%E5%91%8A%2F</url>
<content type="text"><![CDATA[GitHub 2018年度报告地址:https://octoverse.github.com 10月16日,在GitHub Universe开发者大会上,GitHub发布了史上最大更新:可直接运行部分代码的GitHub Actions,并发布了2018年GitHub年度报告(https://octoverse.github.com),详细到连程序员常用的emoji都涵盖了,你就说怕不怕? 下面咱们来一起看看都更新了什么? 在GitHub上,可以直接运行部分代码最重要的更新就是,GitHub发布了新产品GitHub Actions,对于程序员来讲,这是一种可以自动管理代码的工具,可以测试你的代码、并给你提供技术支持。 GitHub安全系统升级除了这个更新,GitHub安全系统也升级了。 现在,GitHub的安全漏洞警报,支持Java和.NET(包括现有的JavaScript、Ruby和Python支持)。 以后,当你在GitHub上传项目时,平台会监测你是否上传了、类似密码之类的隐私信息,如果发现了,就会给你警报。什么华住集团数据泄露,不存在的。 推出GitHub Connect为了在业务和开源社区之间,架起一座桥梁,GitHub还推出了GitHub Connect。有了它,GitHub将为开发人员,提供新的方式,以便在组织孤岛之外进行协作。 GitHub Connect包括三个功能:统一业务标识、统一搜索、统一贡献。无论你运行GitHub Enterprise、还是GitHub Business Cloud,这些初始版本,都可以让你轻松连接到,GitHub的公共数据和社区。 统一业务标识(有限的公共测试版)许多公司拥有不同的GitHub Business Cloud帐户,而这让管理员管理起来很麻烦。 但是以后,借助统一业务标识,管理员可以统一多个Business Cloud帐户的管理。 统一搜索和贡献这一条更新的好处是,以后大家可以在<github.com>上,搜索公共存储库。 以及在Business Cloud组织中,搜索私有存储库,而无需离开GitHub Enterprise。 在本次的年度报告中,除了这些更新,GitHub还对平台上的开发者们,做了很多有意思的统计! GitHub年度报告中的亮点数据们目前,GitHub上有全球超过9600万个软件项目的存储库。其中: 贡献者最多的开源项目 热门的开源项目 Microsoft/vscode: 微软推出的跨平台代码编辑器。 facebook/react-native:Facebook 推出的移动跨平台开发框架。 tensorflow/tensorflow: 谷歌推出的深度学习框架。 angular/angular-cli:Angular 是谷歌推出的前端框架,也是目前前端三大框架之一,这是它的脚手架工具。 MicrosoftDocs/azure-docs: 微软使用开源的方式来建设其 Azure 云平台的文档。 angular/angular: 谷歌推出的前端框架。 ansible/ansible:Ansible 公司推出的运维管理工具。 kubernetes/kubernetes: 谷歌推出的容器编排工具。 npm/npm:Node.js 的老牌包管理工具。 DefinitelyTyped/DefinitelyTyped:TypeScript 的类型声明文件仓库。 VS Code、React和Tensorflow,是贡献者数量最多的三大开源项目列表。 增长最快的开源项目 MicrosoftDocs/azure-docs:Azure 开源文档。 pytorch/pytorch:使用 GPU 和 CPU 优化的深度学习张量库。 godotengine/godot:支持 2D 和 3D 的跨平台游戏引擎。 nuxt/nuxt.js:基于 Vue 的 Web 开发框架。 ethereum/go-ethereum:知名的区块链平台以太坊项目。 wix/react-native-navigation:React Native 的原生导航栏组件。 spyder-ide/spyder:用于科研的 Python 开发集成工具。 tensorflow/models:TensorFlow 的模型项目。 home-assistant/home-assistant:开源的家庭自动化平台。 MarlinFirmware/Marlin:基于 Arduino 的 RepRap 3D 打印机固件。 这一年中,与机器学习、游戏、3D打印、家庭自动化、科学编程、数据分析和全堆栈JavaScript开发相关的项目增长最快。 最具潜力的新开源项目 google/dopamine:谷歌推出的给强化学习算法快速建立原型的研究框架。 facebookresearch/Detectron:Facebook 人工智能实验室推出的最新的物体检测算法实现的开源项目。 frappe/charts:响应式的 JavaScript SVG 图表库。 felixrieseberg/windows95:在 Electron 中运行完整的 Windows 95 镜像。 wangshub/wechat_jump_game:微信的跳一跳小游戏的 Python 辅助 值得中国用户惊喜的是,Made In China的微信跳一跳小游戏,进入了新开源项目“最佳新人奖”的前五。 开源贡献最多的组织 Github 上活跃的开源组织 Microsoft:7700 Google:5500 Red Hat:3300 UC Berkeley:2700 Intel:2200 Univ. of Washington:1800 Facebook:1700 MIT:1700 Univ. of Michigan:1600 Stanford:1600 微软能收购GitHub,就自然不是吃干饭的。在开源贡献最多的组织中,微软以7700个项目,相比谷歌,多出2200个项目。 此外,Red Hat、英特尔等公司、以及UC Berkeley、华盛顿大学、MIT、密歇根大学、斯坦福大学,也是开源贡献较大的组织。 GitHub2018年最热主题GitHub用户今年贡献的数百万个项目,跨越了数千个主题。而JavaScript(前端和后端)、机器学习、移动应用程序开发和容器等,是贡献最多的主题。 增长最快的主题Hacktoberfest名列榜首,而基于React的Web开发工具,如Gatsby,是今年发展最快的话题之一。 GitHub 2018年度最热门开发语言Top 10在GitHub上,JavaScript连续5年,稳占编程语言榜首。 无论是公开的、还是私有的项目、大公司还是小组织,在任何地方,JavaScript都排在第一。 增长最快的语言关于线程安全性和互操作性的静态类型语言Kotlin、TypeScript和Rust,增长趋势都叫一个迅猛。此外,自2017年以来,编写HCL(DevOps的人类可读语言)的贡献者数量,增加了一倍多。 在机器学习项目中,Python排名第8。今年写作Go的贡献者,比去年增加了1.5倍。 使用得最多的表情开发者们,使用点赞的表情使用得最多。Ruby的贡献者,最爱比心。C#贡献者,则是使用差评的表情最多。 开发者和组织今年总共有210万个组织,使用GitHub,比2017年报告中的150万,增加了 40%。 目前托管的9600万个项目中,约有三分之一,是在过去一年内创建的。可见,嫁给微软,果然让自己更强大! 而美国、中国和印度,是contributors数量最多的三个国家,中国今年占据第二位,提升了一个名次。 此外,今年有800万新开发者加入GitHub,并且新增注册数量最多的,也依次是美国、中国和印度。 以及GitHub,2018年的新增用户数,远远超过了前六年的总和。新的 contributors是去年的1.6倍。但代码提交最多的是亚洲,且亚洲开源项目数量,已超过其他任何地方。嗯!亚洲开发者,雄起!以上就是这次GitHub大动作的基本解析。 本文为GitHub的年度报告。而作为从事于互联网相关职业的人员,我们需要时刻了解这个圈子里最新的新闻资讯,而这份十分权威的报告,给我们提供了大量的信息,我们可以借助这份数据来分析当前我们需要学习的知识以及语言等。 本文参考http://www.sohu.com/a/260329128_115128https://www.oschina.net/news/100945/2018-github-conclusion 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/16/GitHub年度报告/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
</tags>
</entry>
<entry>
<title><![CDATA[模拟电路到底难在哪?]]></title>
<url>%2F2018%2F10%2F15%2F%E6%A8%A1%E6%8B%9F%E7%94%B5%E8%B7%AF%E5%88%B0%E5%BA%95%E9%9A%BE%E5%9C%A8%E5%93%AA%EF%BC%9F%2F</url>
<content type="text"><![CDATA[在子类专业中,模拟电路是一门非常重要,并且不少人觉得很难的一门课。这里我来说一说我对模拟电路这门课的理解,希望能对大家有所帮助。 1.工程思想如果说到考试成绩,我的考试成绩一般,并非什么高分;但如果说到对模拟电路的理解和应用,倒是用模拟电路做过一些东西,也参加过一些竞赛。模拟电路是一门工程性质的课程,学习它的重点在于掌握其中的工程思想,同时最好能用于实践,而不只是为了做题考试。 何为工程思想呢?百度百科的解释是这样的: 工程是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,是以最短的时间和精而少的人力做出高效、可靠且对人类有用的东西。于是工程的概念就产生了,并且它逐渐发展为一门独立的学科和技艺。 例如在模拟电路中,有个非常重要的工程思想——近似。中学物理课上,我们学的很多电路都是理想电路,导线电阻始终为0,变压器的效率是100%,理想电压表内阻无穷大,理想电流表内阻为0等。你可以发现,很多时候模拟电路中的计算会常常省略掉一两个比较小的项,而且直接用等号而不是约等号。 为什么要用近似呢?说白了就是人类科学对自然的理解还不够全面,无法绝对精确的描述自然现象;或者是人的理解力有限,精确描述代价太大。通过近似的手段,不仅对解决问题没有明显的影响,而且大大简化了步骤,节约了时间和精力。运用这种思想,人类科学取得了很多成果,也充分证明了其可靠性。 2.概要模电本身是一个非常复杂的学科,而模电课程只是其中最基础的东西。模拟电路(Analog Circuit)的含义是处理模拟信号的电子电路。自然界中绝大多数信号都是模拟信号,它们有连续的幅度值,比如说话时的声音信号。模拟电路可以对这样的信号直接处理(当然需要先转换成电信号),比如功放能放大声音信号,广播电台能将模拟的声音信号、图像信号进行发送。甚至可以认为,所有电路的基础都是模拟电路(即使是数字电路,其底层原理也是基于模拟电路的)。其重要性不言而喻。 由于数字电路、可编程器件的迅速发展,体现了很多优越特性。很多电子设备都慢慢数字化,但始终还是离不开模拟电路。 目前模拟电路中最重要的器件,则非半导体器件莫属。最基本和常用的半导体器件有二极管、三极管、场效应管和运算放大器。 二极管的作用很多,如普通二极管可用于整流,发光二极管可用于指示灯和照明,稳压管可进行稳压,变容二极管可用来进行信号调制等。模电课程中,涉及到二极管的部分相对比较简单,而场效应管的很多特性类似三极管,所以常以三极管或运放为主体进行讲解。 3.三极管与放大器三极管的基本功能是放大,通过这一特性,三极管构成各种电路,体现出了很多工程思想。 三极管基本电路就是放大器,例如功放就是一个放大器,输入的声音很小,输出的声音却很大。放大器的输出和输入电压(或电流)之比称为放大倍数,又叫做增益。 对于一个电压来说,如果以时间为横轴、电压为纵轴作图,这个图形则为这个电压的波形。 如果一个放大倍数为5的放大器,输入恒定的1V电压(波形如下左图),则输出应该始终是5V(波形如下中图),既不会随时间改变,也不会随温度而变化,输出和输入的电压形状完全一样。但如果放大倍数不稳定,不断变化,原先输入的信号就会变形(如下右图),信号可能由一条水平直线变成了一条曲线。这种波形变化叫做失真。 一个理想的放大器,希望其放大倍数是恒定值。如果功放的放大倍数不稳定,声音就会忽大忽小,波形变化还会导致声音发生变化,即失真。 现实总是和理想相违背。很不幸,三极管的特性并不理想,它在放大电路中工作时,放大倍数不仅受输入电压、电源电压影响,而且自身发热导致温度变化,也会影响它的放大倍数。这实在是让很多工程师头疼,如果不能找到有效的方法,减少这一特性带来的影响,三极管很难应用到实际中来。 4.负反馈基本概念于是一些非常厉害的人找到了好方法:负反馈。什么是负反馈呢? 反馈是指将系统的输出又返回到输入端而影响输入,从而对系统整体输出产生作用。反馈可分为正反馈和负反馈。负反馈是使输出起到与输入相反的作用,使系统输出趋于稳定。 上面的解释不好理解,我举两个例子。 1.玩倒立摆时,我们用手支撑起一个倒立的木棍,当木棍往某个方向倾斜时,我们通过将手移动到木棍倾斜的方向来抵消这种变化,使得木棍能在手上平衡。 2.高中的时候经常月考,我发现有些同学有这样的习惯:当一次成绩考得比较差的时候,就会开始好好学习,然后下次成绩就上涨;而考得比较好时,接下来的一个月又会松懈,于是成绩又会降下来,如此周而复始。 这两个例子都充分说明,负反馈可以让系统更稳定。 负反馈放大器我们忽略具体电路,只画一个简单的框图,来说明三极管放大电路是如何利用负反馈的。 下面三角形表示一个三极管构成的放大器,放大倍数为 A,输入为 I ,则输出 O=A*I ,由于放大倍数A不稳定,所以输出波形会有失真。在电路中添加了一些器件如下。 紫色的圆形是相加器,结合紫色的“+”、“-”符号,表示其输出 Y=(+I)+(-X)=I-X ,在实际电路中用电阻就可以实现; 方框F是反馈器件,表示从输出O取出信号,并将其与F相乘,得到 X ,所以 X=0*F ,这里 F<1 (这个部分在实际电路中可以用电阻实现); 三角形表示的放大器A,主要用三极管构成,满足 O=A*Y ,且A的放大倍数不稳定,很容易受干扰。可以列出方程组: 解得整个电路的放大倍数: 如果设计电路让放大倍数A非常大,同时F不至于很小,则 符号”>>”表示远大于 根据近似的思想,上述整个电路放大倍数: 由于反馈器件可由电阻实现,普通电阻的阻值不容易受外界干扰,因此F的值很稳定,于是整个电路的放大倍数就很稳定。我们成功的通过负反馈解决了三极管的放大倍数稳定性问题。 可以看到这里的反馈部分和放大部分构成了一个环形,所以将整个电路的放大倍数称为环路增益,或者闭环增益;而把增加反馈之前,电路的放大倍数A称为开环增益。由于是负反馈,虽然电路增益稳定性提高了,但也有代价:由于于是 A>>1/F 即开环增益远大于闭环增益,也就是放大器增益大大降低。但总的来说,为了稳定性,这样做是值得的。 5.运算放大器在上面的电路中,为了实际制造出开环增益A很大的放大器,往往要用多级三极管放大电路串联的方式设计。由于这种高增益放大器的需求很常见,于是历史上有人就把它们做成一个成品电路板模块,要用的时候直接当成一个元件用就行了,非常方便。这就是最初的运算放大器,简称运放。 集成电路的发展,使得大量晶体管元器件集成在一个小芯片上成为可能,于是就有了今天十分常用的集成运算放大器。 “运算放大器”由于最初用于模拟计算机上进行数学运算而得名。尽管现在广泛使用的数字计算机不再用运放进行计算操作,但名称还是保留了下来。而今天,运放在模拟电路中发挥着十分重要的作用,也成为模电课程的重点之一。 6.运放的虚短虚断特性通常运放有两个输入端U+和U−,一个输出端Uo,它们之间满足 运放开环增益A常常高达几十万~几百万,但运放的输出电压受电源电压限制,不能超出电源电压。于是运放的输入-输出关系类似下图形状。 图中横轴是,纵轴是U。 在中间那一段直线区域,运放在正常放大状态,称为线性区,满足 Uo=A∗(U+−U−) 而当输入的绝对值稍大一点时,输出就会受到电源限制,不再满足上述关系式,Uo的值通常比电源电压范围略小(注意运放可以用双电源,即电源电压范围可以在一个负值和一个正值之间),称为非线性区。 轨对轨运放的输出可以达到电源电压,有兴趣可以自行在网上搜索学习。 当运放工作在线性区时,Uo的值很有限,但是A很大,所以U+−U−=UoA≈0 即U+≈U− 此时运放正负输入端电压几乎相等,就像短路了一样,称为虚短。所以只有当运放工作在放大区才会有“虚短”的特点,而非运放自身固有属性。 另一方面,由于运放内部结构特性,其输入阻抗很大。 输入阻抗可以简单理解为 输入阻抗 = 输入端电压 / 输入端电流 输入阻抗大,意味着运放输入端只需很小的电流就能正常工作。正因为如此,运放才能用于一些微弱电流的检测,比如人体的脑电波、肌电波,其最高电压值只有几mV,电流值也非常小。 运放这一特性被称为虚断,也就是输入端和断路一样,几乎没有电流流入。 与虚短不同,虚断是运放自身固有属性,不会随着电路的不同而改变。 7.运放的非理想特性运放由三极管构成,显然和三极管一样,也会有很多不理想的特性。前面讲的都是理想运放的特点。而实际运放,它不会完全满足虚短虚断特性,正常工作时输入端需要电流流入,这个电流便被称作输入偏置电流。同样运放还有输入偏置电压、输入失调电压、输入失调电流等非理想参数。 这些非理想特性,比如输入偏置电流虽然很小,但有时候却会对电路造成很大影响,导致电路无法工作。因此则需要通过一些手段减小这些因素造成的影响。在实际应用中,运放的非理想特性是一个非常重要的问题。运放非理想特性的消除有很多方法,这里不做介绍。 8.其他内容模电课程的核心就是三极管和运放。围绕这些器件,讲解多种电路,包括: ●放大电路的计算分析、多级放大电路、放大器的频率特性、反馈的思想; ●功率放大电路; ●比较器、振荡器、积分器、微分器、波形发生等; ●信号运算处理; ●滤波器; ●集成稳压电源电路等。 9.运放和三极管的比较在实际设计电路时,运放比三极管用的相对会多一些。因为运放的很多特性比三极管要优秀,电路设计简单,而且往往运放的成本并不高。很多时候用三极管和运放实现同样的效果,使用运放的成本反而更低。因为运放是将大量晶体管集成在一块的,平均每个晶体管的制造成本非常低。 例如一个常规音频前级放大器,一个通用运放就能搞定,成本可能是0.2元,而用三极管实现同样的效果,可能需要10个甚至更多三极管,成本或许要0.5元,并且设计时所花费的人力成本远比运放方案高。 当然三极管也有其优势。在一些非常简单的电路中,并不严格要求放大倍数的稳定性,一两个三极管就能完成任务,往往会用三极管以节省成本。另外在一些比较极端的条件下,比如工作在高频率、大功率的环境下(例如射频信号发射电路),设计良好的三极管电路的性能会比运放效果好很多,或者成本低很多,甚至有些情况下只有直接使用晶体管才能完成,这时就需要使用三极管来搭建电路了。 10.结尾模电课程的介绍到此为止。但是我想说的是,模拟电路是一门非常复杂的学科,涉及的知识远不止书上的那些。书上都是按照工作原理大致介绍,简化了很多难以理解但实际中必须考虑的问题,因此实际电路和书上的差距非常之大。比如模电书中用运放搭建的三角波发生器,用于实际电路十有八九不能工作。不过实际电路的主要原理和书中描述是一致的。因此设计模拟电路往往需要大量的经验,有很多东西甚至难以解释无法计算得出。 转载自都说模电难,但到底难在哪?这位高手讲透了 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/15/模拟电路到底难在哪?/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>电子</category>
</categories>
<tags>
<tag>电子</tag>
</tags>
</entry>
<entry>
<title><![CDATA[人民日报痛批沉睡中的大学生,你不失业,天理难容]]></title>
<url>%2F2018%2F10%2F11%2F%E4%BA%BA%E6%B0%91%E6%97%A5%E6%8A%A5%E7%97%9B%E6%89%B9%E6%B2%89%E7%9D%A1%E4%B8%AD%E7%9A%84%E5%A4%A7%E5%AD%A6%E7%94%9F%EF%BC%8C%E4%BD%A0%E4%B8%8D%E5%A4%B1%E4%B8%9A%EF%BC%8C%E5%A4%A9%E7%90%86%E9%9A%BE%E5%AE%B9%2F</url>
<content type="text"><![CDATA[《人民日报》曾发文怒斥还在沉睡中的大学生:上课时,不是发呆、睡觉、就是玩手机,课余生活只有吃零食、看剧、沉迷游戏。图书馆里没有你的身影,运动场你更是从不迈进去…职场上,这样的人也同样不在少数。上班时踩着点走进公司大门,下班前一小时就心不在焉。玩玩手机,刷刷微博,手里的工作能拖则拖。实在拖不了就勉强自己加个班,但一定要发条朋友圈,问:“你见过深夜十二点的写字楼吗?”自我感动到不行,却忽略了这本是白天早就应该完成的工作。 工作,不必认真,能应付上司即可; 能力,不思进取,不被炒鱿鱼就行; 至于工资,只要心怀梦想,总有一天会涨的。” 这样的人,不是真“佛系”,而是依然会羡慕别人升职加薪,却拿着3千的工资,做着月薪5万的梦。(拿着父母血汗钱养老的年轻人) 有些人,二十多岁就开始养老了 一杯咖啡慢悠悠度过一整天,不再学习知识,看着别人加班工作,还要嘲笑一声“傻子”,将安于现状视为“知足常乐”。 而可悲的是,有多少月薪三千,就心满意足的人,过着“岁月静好”的生活,却是依靠父母提供经济支持。 根据中国老龄科研中心的统计,中国目前有30%的年轻人依靠“啃老”生活,65%以上的家庭存在着“啃老”的现象。 一些成年子女带给父母的经济压力,甚至比他们未成年时更大。 今年7月,武汉一位81岁的老人向社会求助,称自己的儿子已经在家宅了很多年了,不肯工作。他年纪大了,身体也不好,怕哪天离开了,儿子的生活就没着落了。老人说,他每个月有五千多的退休金,自己平日买药和日常开支,也花不了多少,只是因为小儿子的状况,家里日子过得非常紧张。 而面对老人的担心,儿子却表现得很反感,甚至指责老人“多管闲事”。 本该自立的年纪,不仅没有能力给家人幸福,还要依赖父母才能生活。这些患了“精神癌症的年轻人”,心安理得地“啃老”,却不肯为自己的未来奋斗。(可见的绝望未来) 不久前,一位已是两个孩子母亲的三十七岁女硕士在论坛发帖求职。 她毕业于国内顶尖的大学,在外企工作近十年,因为部门关闭被裁员,只能重新找工作。她的要求并不高,短期内月薪三千就可以。她在帖子中这样描述自己的工作经历:做过科研合作管理,但只是“打杂”;本专业的注册证书没考下来;考了个日语1级,却不能口头交流;英语还行,但也只是考研时英语成绩过得去。 很长时间过去了,还是没结果。 她说:“我承认我很失败,没有在这么长的职业生涯里磨砺好我的翅膀,所以现在才这么凄惨。” 有人评论:“在职场上混日子,迟早让职场把你混了。” 不进则退的道理,放之四海而皆准。 所有成功的事业都是时间和汗水熬出来的,你偷过的懒,迟早会变成打脸的巴掌。 最近,中年危机成了一个热门话题。 中国劳动关系学院行政管理教研室主任刘文军认为,中年人容易被淘汰,主要是因为他们知识结构已经基本固定,学习新知识新技能的效率较低,转型太慢。 但也不是所有人都在中年危机到来时一筹莫展,那些有一技之长的人,即使遭遇职场危机,也能轻松化解。 蔡玉洁是一名一线生产车间的技术员,在不到40岁的时候丢了饭碗。 但她下决心重新出发,通过自学和参加培训班,考取了会计和计算机相关资格证书。凭借这些新本领,她找到了一份会计工作。待遇甚至比原来还好。在企业从事员工选拔聘用工作的肖成萍说:“社会发展这么快,企业也要不断求新求变。如果平时没有忧患意识,放松学习,不管年龄是大还是小,被淘汰都是必然的。” 英国哲学家怀特海曾说:缺乏进取的精神,就意味着堕落。 BBC根据剑桥大学研究者的数据分析了 365 种职业在未来被淘汰的概率,AI技术越来越发达,“电话推销员”被机器人取代的几率接近100%。其次是打字员、会计、保险业务员、银行职员……淘汰率较高的工作都无需天赋,经过大量重复性、机械性训练就可以轻松掌握。 而在“如何避免被机器人取代”的建议里,专家说,必须培养自己的终身学习计划,提升职业技能。 在未来,有创新能力、更侧重于人类本性的工作者才不容易被替代。人比人能气死人,可若是连和人比的资本和机会都没了,岂不更惨。(走出懒丧穷的死循环) 微博曾上有一个反鸡汤语录,其中点赞很高的一句是:“努力不一定成功,但不努力一定很舒服。” 还在懒着的年轻人,从葛优瘫到悲伤蛙、从长腿的咸鱼到“佛系”青年,每天的生活都充斥着负能量。 “反正努力工作也未必能升职加薪,不如随便应付应付,空出时间来看看电影逛逛街多舒服。” 倪杰是同济大学的学霸,他学的汽车系在当时是号称“铁饭碗”的专业,倪杰毕业后不久,却选择了转行,用了一年多,通过了国家司法考试,成为了一名律师。 2013年,他再次转行创业,做起了手游。 许多人不理解,觉得他“善变”,工程师也好、律师也好,都是很令人羡慕的职业,他却一次又一次选择转行,甚至去自己创业。(倪杰在接受中新社采访)而在倪杰自己看来,能看清上升空间的职业不是他想要的,他想要做看不到上升空间的职业。 “善变”的他其实从来没有变过。 他一直坚持着深入骨髓的“不安于现状”。虽然每一次转行,都要付出更多的努力,但正是这种勇往直前的心态,让倪杰的路,越走越宽。 倪杰有很明确的目标,他知道自己想要什么,并且有毅力去践行决心,永远不满足现状,永远在冲破舒适区。 很多人,因为懒,时间一久就变得不敢这样做。 《奇葩说》有一期的辩题是“我没有上进心,有错吗?”当然,有人说,我就是有一颗平常心。生活嘛,过得去就好。 工作不肯较真,一时兴起买来的技能书早就落了灰,列了无数个新年计划,却没有一个执行超过三天。 体力和精力都足够,却在别人加班熬夜抠细节的时候,选择睡觉玩游戏。 只有领工资的时候会满腹牢骚,感叹自己“怀才不遇”,却在应该努力的时候告诉自己:“顺其自然吧,安逸最重要。” 一边喝着“毒”鸡汤,一边喊着“咸鱼翻身之后还是咸鱼”。 想努力却害怕拼尽全力也不如别人,于是选择放弃。意志慢慢消沉,颓废成了生活常态,越懒越丧,越丧越穷。 (年轻就是拼命学习的资本) 网上曾有人做过一份针对60岁以上老人的调查:你这一生最后悔的一件事是什么? 有75%的人为自己年轻时不够努力,一事无成,所以感到后悔。 年轻的时候,人的身体、精神都处于巅峰状态,如果不在这个时候拼命工作,等到体力、精力都不足以支撑你去拼搏的时候,再后悔,就迟了。 我们常常听到有人说:“读这么多书有什么用?能派上用场吗?”、“拼命工作有什么用?你能比那些富二代更有钱吗?” 也许都不能,但不可否认的是,越是月薪高的人,越不会容忍自己懒惰,因为他们知道,只有拼命工作,不断学习,才能永不落伍。 雅虎曾调查过一些全球顶尖科技公司CEO的作息时间,结果显示,他们中大多数人都有一个共同特点:早起。 苹果现任CEO蒂姆·库克每天4:30就会起床处理工作邮件,之后是健身。在公司,他往往是第一个到的人。 雅虎前任CEO梅丽莎·梅耶尔在接受采访时表示:她每天的睡眠时间只有4到6小时。 有人问,已经成功了,干嘛还那么拼?对于这些成功人士而言,拼命早已成了一种习惯,这是提升自己的最好方式,也是让他们成为佼佼者的资本。 奥斯卡最佳男配角摩根·弗里曼被人称为“美国最优秀的演员”之一,然而他是到了30岁才第一次出演歌舞剧。 虽然大器晚成,但他并没有因为错过了“青春饭”而懊恼。出道以后,他尝试各种不同的角色,从仆人到总统,从囚犯到特工。 57岁时,他因出演《肖申克的救赎》而获得第三次奥斯卡提名;68岁,凭借《百万美元宝贝》获得了奥斯卡最佳男配角奖。 如今已经80岁的摩根·弗里曼,依然活跃在荧幕上。 从什么时候开始都不晚作家杨昌溢曾说:“后来我才明白,要过上简单,安逸,自由的生活,前提依然是得赚到足够令你安心的钱。这个世界是现实的,只有你用努力和自我,令它柔软。” 你可以说服自己满足于月薪3千,但你的身后还有那么多人。 安于现状的确很舒服,但想要给父母更好的生活、让爱人不会为一件衣服犹豫不决,你必须拼命工作。 没什么需要怕的,因为年轻,就是允许失败的资本。 你加过的班、读过的书、学过的技能都不会白费,所以奋力拼搏吧,它们默默储存下的力量,会在未来某一个时间出现,帮你度过难关。不知道从什么时候开始,“学霸”、“学渣”、“学弱”(有学霸的心,但总取得学渣般的成绩)等一些名词开始流行。那些年,你认为高考分数将决定你一生的命运,于是你拿着自己的高考成绩寻找自己梦想的大学,把分数当做赌注,与梦想一决高下。可是后来,怎样了呢? 这些场景你是否觉得熟悉? 上课时 清醒没有发呆的多,发呆没有睡觉的多,睡觉没有玩手机的多;下课时,自修没有吃零食多,吃零食没有看连续剧多,看连续剧没有游戏多。如此这般,就业时的失败怎能不比成功多? 考试时 不给范围就不会考试,给了范围也只是复印同学准备的答案。你如果是老板,会雇用你自己这样的员工吗? 毕业前 上大学前填报志愿,你说不知道自己的兴趣特长,好吧,大学毕业找工作了,同样不知道自己的兴趣特长。自己都不认识自己,还有谁能认识你? 专业课 学技术不肯动手,学理论不肯动脑。等待你的除了失业还能是什么?你说,你修完了《计算机基础》,但真实水平却连个PPT都做不好。你的竞争力在哪里? 你说,你修了两年英语,然而,你的水平却连与外国人日常对话都打怵。有哪家用人单位需要你? 你说,你修了《思想修养》,但你根本就没听。你敢说,除了课堂上睡眠的抗干扰能力得到提升外,在思想修养和道德品德方面,得到了应有的提升吗? 你说,你修过《阅读与写作》,但你读的是手机,你写的是微信。对语文,自己都没信心,你还想指望别人对你有信心? 这些话是否直戳你的痛点?实习要让父母开假证明,评先进要让父母找关系,补办证书要父母跑学校。找工作的时候,你能有一分坦然和自信吗? 双休日你起来吃早饭吗?连吃饭都不会,还有谁会相信你会干活?军训的时候叠过被子,军训过后还叠过几次? 唯一投入的是游戏,耗时最多的是游戏,而你的自荐信对此又只字不提。自己做的连自己都不认可,世界上,还有谁会认可你? 讲大道理的时候你口若悬河,伸手要钱的时候你撒娇耍赖。你可以欺负你的父母亲,世界也能任由你欺负吗? 离开了电脑你还能做什么?离开了游戏你还喜欢什么?离开了家你还能到哪里去?离开了父母还有谁会给你送水端饭?对于这些问题,你都找不到答案,你还想找到前程吗? 图书馆里没有你的人影,运动场上没有你的人影,公益场上更没有你的人影。你退化的不是肌肉,你退化的不是责任感,你退化的是最基本的生存能力。 找工作时,在工作岗位上的最大价值在于不可替代。责任心、吃苦精神、写作水平、做事能力、专业修养、操作技术、学问素养、人际处理,有哪一方面是你的看家本领?有哪一点是他人不可替代的?你不失业谁失业? 有没有想过当年那些不如你的人也许有一天会超过你?L同学本科就读的大学是一所普通得不能再普通的高校。上大一的时候,身边大部分的同学都是挣脱出高考枷锁的飞鸟,渴望自由。大学对于他们来说,就好像是进了一个没有人管的”游乐场“,一进了”游乐场“的大门,他们便飞奔进去,奔向各自想要玩的游乐项目。 他们参加各种各样的社团,又或者去光明正大地恋爱。只是,课本知识对于他们来说,只要不挂科,大学便是圆满结束了。 你们是不是也有过这样的经历,也有过这样的同窗。 谁会偶然给你高薪又偶然让你过上想要的生活?但总有一些人进了”游乐场“,不是选择先玩耍,而是选择先苦练技能。而我们常常嘲笑这样的人。L同学就是这样的姑娘。从刚踏入校园的那一刻开始,她就和图书馆紧密相连。总之,在学校里见到她的时候,不是在教室的前排,就是在图书馆。 虽然她每一次都坐在第一排,但是很多科目,她常常没有那些进了游乐场就疯玩的人强。同学们甚至会偷偷嘲笑她,花了那么多的时间,不过是和大家差不多的分数,甚至还不如耍小聪明的同学。 “也许,看上去花了这么多的时间,最后出来的结果相差并不太大,甚至看不出什么差别,因为考试的偶然性很大。但是,我们不仅仅这一次考试,如果我们考一次试追求小聪明、考研也追求偶然性、找工作要偶然通过,那么谁又会偶然给你高薪,偶然让你过上你想要的生活呢?” 明明一同起跑却走向了不同的人生旅途有时你会突然发现,当时看上去和你差不多的人,甚至是不如你的人,原来蕴藏着如此巨大的能量。 而这样的能量,是无法用一次的考试成绩,用她所在的大学,甚至用她的智商来衡量的。 而其他人,那些还在“游乐场”里疯玩的孩子,等到游乐场打烊,等到灯光都熄灭的时候,甚至还没回过神来,究竟发生了什么。 L同学如愿考上了名牌大学的研究生,终于去了她想要的学校,过她想要的生活。再后来,硕士毕业,她找到了一份给应届生的special offer,刚入职年收入就有30万。 很多本科的同学都惊呆了,看着普普通通只知道死读书的她,究竟是怎么有了这么大的能量,在四年后、六年后与其他人走向了不同的人生旅途。熬过的辛苦最后都换成了幸福。 有人说,大学是一场长跑,这四年时光,有的人从一开始就踏上了其他跑道,也有人挤到了前面的队伍,是时间让大家变得不一样。 本篇文章是我无意中在一个公众号中看到的,此时的我已经大三了。当我读完本文后,反思了一下自己,想了想自己会些什么?以后可以找到什么样的工作?但是我发现我好像什么也不会。所以我大学读的很失败 。谨以此文激励自己,也送给正在迷茫的大学生们。不论你认为这是无病呻吟的鸡汤文也好,抑或是激人奋发的励志文也罢。这篇文章很多说的都是事实,大学生的确大部分都这样,我也是这样,你自己是不是,反思一下便知。但是告诉你,一切都没有太晚,趁着你还有机会,别浪费时间了,别懒了,抓紧时间学习吧。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/11/人民日报痛批沉睡中的大学生,你不失业,天理难容/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>大学</category>
</categories>
<tags>
<tag>大学生</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux内核编译]]></title>
<url>%2F2018%2F10%2F09%2FLinux%E5%86%85%E6%A0%B8%E7%BC%96%E8%AF%91%2F</url>
<content type="text"><![CDATA[编译环境: 虚拟机下的 Ubuntu18.04.1(LTS) 内核知识简述首先简单介绍一些有关Linux内核的知识,这些知识可以要你对Linux有一个全新的认识。 Linux内核历史Linux发行版本很多,但是他们共同的特征就是使用了Linux内核。Linux内核是基于C语言编写的符合POSIX标准的类Unix操作系统。内核是操作系统最基本的部分,也是最核心的部分。Linux内核于1991年由当时的芬兰大学生Linus Torvalds开发。目前linus仍然致力于内核的设计、开发和维护,目前通过https://www.kernel.org网站发布与提供Linux所有版本的内核以及补丁。在GitHub上也有一份Linux 内核的镜像文件,地址:https://github.com/torvalds/linux。不过Linus本人根本不想从 GitHub 接受 PR,可以拿来看看,但是不要随便发issue。可以这么说,当你真正了解内核的时候,你才算真正的懂Linux以及Linux的运行原理、工作机制,你才能从根本上来定制属于自己的Linux系统。当然这是属于系统底层的知识,并不需要每个使用Linux的人都了解内核。 Linux内核简介内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核并不是一套完整的操作系统。内核负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。当前系统的内核存放到/boot目录,我们可以进入该目录查看。同时/boot目录也存放了引导。 linux内核版本号说明使用uname -r命令可以查看当前系统的内核版本。说明: 4.15.0-34-generic 4代表的是内核主版本号,15代表的是次版本号,为不稳定版本(偶数是稳定版本,奇数是过渡版本),0代表的是末版本号,属于修订版本号(扩展版本号),表示修改次数。(以上版内核版本号说明是最新的内核版本命名方式,为Linux内核的第三种命名方式) 34为建立(build)号,每个建立可以增加少量新的驱动程序或缺陷修复。 generic 为通用版本的意思。 一些发行版本还会出现“pp”字样,就是“pre-patch”的意思,属于内核的测试版本。 编译内核的优劣那么,现在问题来了,我们下载的系统不是已经有稳定的Linux内核了吗,为什么还要编译内核?大部分情况是完全不用手动编译内核的,我们下载的系统默认已经安装了使用广泛的内核。但是我们仍然有其他理由来重新编译内核: 最优化服务器 处于安全原因需要禁止某些默认功能 添加系统默认未作选择的功能 为计算机更换超越原内核负载能力的硬件 需要更改无法用/proc/sys来变更的内核运行参数 更好的匹配用户计算机上的硬件特质 从根本上更好的定制系统,使系统更加符合自己的风格,这种方式是最彻底最高效的 通常新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快,更稳定,并且会修复老版本中的漏洞。 以上都是关于重新编译内核的好处,当然也有弊端。以下是我从实践中总结的几点: 难度较大,不适合Linux新手 过程复杂,要想完全的编译内核的话,整个过程过于繁琐复杂,时间周期会很长 不能出错,一旦出错,整个系统就会全部崩溃 综上所述,至于你需不需要编译内核,你需要想清楚,因为你一旦开始编译,你就不能停下也不能退回到系统初始状态了。一旦失败,你会发现你连桌面都进不去,如果要做就做好承担风险的准备。 内核编译方式目前,我已知的有4种编译方式: make config # 基于文本的配置界面,但操作极为麻烦,适合专业人员 make menuconfig # 基于文本菜单的配置界面,需要在终端下使用 make xconfig # 基于图像化窗口的配置界面,适合在桌面环境下使用,最适合初学者使用 make oldconfig # 在原来内核配置基础上修改一些小地方 编译的整个原理和操作方法是十分复杂的,如果你有兴趣的话,可以去看看一些关于内核编写的书。 配置内核本文采用最普遍最常用的编译内核方式:make menuconfig这里只是给出了较为简单的编译内核方式,如果要真实的编译内核,你需要根据具体的需求来配置不同的参数进行编译。 环境准备 保证网络环境良好 系统磁盘容量足够(40~60g,编译的选项越多占用磁盘容量越大) 保证系统文件完整,也就是你没有删除过任何的系统自带的文件系统(在编译时候很可能因为文件系统不完整而出错) 需要提醒你的是,你最好在虚拟机中做这个实验,而且最好给虚拟机开快照,以便你编译出错的时候还可以回退回来,不至于重新安装系统。 下载内核linux内核官方网站:http://kernel.org/这里我选择https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/中的版本号为4.18.11的当前最新稳定版。其中每个版本的内核都有2种不同的压缩方式,还有一个扩展名为sign的文件用于内核验证。把下载好的内核压缩包解压进/usr/src目录1bingyu@ubuntu:~$ sudo tar xvf linux-4.18.11.tar.xz -C /usr/src 搭建环境先刷新软件包列表1sudo apt-get update 安装gcc编译器。1sudo apt-get install gcc 如果你的系统已经自带了gcc,就不用安装了。使用gcc -version查看是否已经安装。安装运行库。这个会消耗很长的时间,中途一定不要终止。1sudo apt-get install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison 安装过程中会弹出这个:直接enter确定即可。如果你全部安装成功,是不会出现任何报错信息的。如下图即为安装成功。如果你安装失败的话,你可以重新运行以上安装命令再次安装一下。 配置内核在正式编译内核之前,我们首先必须配置需要包含哪些模块。当然,我们初次编译时,可以采取一些简单的方式来进行配置。我们可以把原来内核拥有的配置文件直接拿来用。使用如下命令来完成:1bingyu@ubuntu:~$ sudo cp /boot/config-4.15.0-34-generic/.config /usr/src/linux-4.18.11/ 此处我个人建议你开虚拟机全屏,并且把终端也是全屏显示。不然会出现如下报错(你的显示器太小,无法运行menuconfig)。OK,打开是这样的。在此窗口下,使用上下左右键进行选择,选择哪一项,回车即可。然后我们需要小心的配置,如果你不确定哪一步怎么做,就放弃操作,不要瞎点。此处由于我们已经把配置文件复制过去了,所以我们不需要一个一个的点了。如果你要一个一个去设置的话,应该需要一个月时间。我们不进行选择,直接选择“save”,然后回车,会提示你然后再回车即可退出。最后选择e退出menuconfig窗口。定制完内核后,我们所设置的编译选项全部会保存到.config文件,用ls-a查看。你也可以使用cat命令查看其内容。下面开始编译。1bingyu@ubuntu:~$ sudo make 应该会需要2~5小时吧。你现在可以做其他事。再次提醒保证你的磁盘容量足够,不然中途会因磁盘满而停止,就前功尽弃了,40-60g应该是足够的。此刻就不要再用你的计算机了,而且记着关闭其他正在运行的软件。只保留终端即可。下图是我编译结束的样子,花费了差不多4个小时。(这个过程的时间长短与你编译的选项多少有关,如果你省略了大部分的编译选项,那么编译将会很快完成。) 编译和安装用如下的命令安装那些之前启用的模块:1bingyu@ubuntu:~$ sudo make modules_install 使用这个命令来安装内核:1bingyu@ubuntu:~$ sudo make install 这个命令仍然会花费很长时间,你可以去做其他的事。 启用内核作为引导使用这个命令来实现:1bingyu@ubuntu:~$ sudo update-initramfs -c -k 4.18-rc2 其中的4.18替换为你编译的内核版本号。更新grub1bingyu@ubuntu:~$ sudo update-grub 好了,现在全部工作已经做完, 你可以重启系统了。当我们再次进入系统后,你可以再次运行uname -r来查看一下内核版本,是否和你重新编译的内核版本一致。在编译完成后,可能会生成一大堆的附属文件,这些文件对系统本身是没有用的,所以是可以删除的,但是如果你不确定这个文件是否需要删除,那么就保留。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/09/Linux内核编译/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux文件系统检测与修复]]></title>
<url>%2F2018%2F10%2F07%2FLinux%E7%B3%BB%E7%BB%9F%E4%BF%AE%E5%A4%8D%2F</url>
<content type="text"><![CDATA[fsck简述fsck(file system check)命令被用于检查并且试图修复文件系统中的错误。当文件系统发生错误,当Linux文件系统由于人为因素或是系统本身的原因(例如用户不小心冷启动系统(切断电脑的电源,重新启动)、磁盘关键磁道出错或机器关闭前没有来得及把cache(缓存)中的数据写入磁盘等)而受到损坏时,都会影响到文件系统的完整性和正确性,可用fsck指令尝试加以检查并修复。 查看帮助1234567891011121314151617181920bingyu@ubuntu:~$ fsck -hfsck,来自 util-linux 2.31.1fsck.ext4: 不适用的选项 -- h用法:fsck.ext4 [-panyrcdfktvDFV] [-b 超级块] [-B 块大小] [-l|-L 坏块文件] [-C fd] [-j 外部日志] [-E 扩展选项] [-z 撤销文件] 设备重要提示: -p 自动修复(不询问) -n 不对文件系统做任何更改 -y 对所有询问都回答“是” -c 检查可能的坏块,并将它们加入坏块列表 -f 强制进行检查,即使文件系统被标记为“没有问题” -v 显示更多信息 -b superblock 使用备选超级块 -B blocksize 使用指定块大小来查找超级块 -j external_journal 指定外部日志的位置 -l bad_blocks_file 添加到指定的坏块列表(文件) -L bad_blocks_file 指定坏块列表(文件) -z undo_file 创建一个撤销文件 下面是来自man手册的一些其他参数 语法fsck(选项)(参数)选项-a:自动修复文件系统,不询问任何问题;-A:依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统;-N:不执行指令,仅列出实际执行会进行的动作;-P:当搭配”-A”参数使用时,则会同时检查所有的文件系统;-r:采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式;-R:当搭配”-A”参数使用时,则会略过/目录的文件系统不予检查;-s:依序执行检查作业,而非同时执行;-t<文件系统类型>:指定要检查的文件系统类型;-T:执行fsck指令时,不显示标题信息;-V:显示指令执行过程。 那么我们应该如何修复损坏的文件系统?在通常情况下,可以不为fsck指定任何选项,只指定参数即可。例如,要检查/dev/sda1分区上的文件系统。1$ fask /dev/sda1 应该在没有mount该文件时候才使用fsck命令来检查文件系统,这样能在保证检查时该文件系统上没有文件被使用。fsck在发现文件系统有错误时候,可以修复它。如果需要fsck修复时,需要加入选项-P选项。当修复文件系统后,应该重新启动计算机,以便系统读取文件系统信息。 还有一种我了解到的就是Linux服务器有时会面临这样一种错误,即显示文件系统变成(Read Only System),即文件系统变成只读的方式,产生这一问题的原因可能有两种,一种是多机写入时同步机制出现问题,另一种方式是单机写入时出现服务器掉电的情况。我们同样可以使用fsck来试图修复一下。首先修改/etc/fstab,将受损的文件系统先注释掉,如果无法读写该文件则采用命令 mount -o remount,rw / 将文件系统改成读写模式。然后针对受损的文件系统,执行fsck命令,如:fsck /dev/sda1等。不过在执行命令之前最好先进行数据备份,以防止修复失效后数据丢失。 注意 :千万不能在运行的系统上面直接执行fsck,特别是RHEL6.0以下ext3的文件系统,否则100%损坏根文件系统,比如使用fsck -P /dev/sda1修复磁盘时,必须将sd1分区umount掉 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/07/Linux系统修复/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux的umask操作]]></title>
<url>%2F2018%2F10%2F04%2Fumack%2F</url>
<content type="text"><![CDATA[umask简述umask命令确定了创建文件的默认权限模式。这一命令实际上和chmod命令正好相反,umask指定的是“该默认值需要减掉的权限”。一般来说,umask命令是在/etc/profile文件中设置的,每个用户在登陆时候都会引用这个文件,所以希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久性的设置自己的umask值,那么就把它放在自己 /home 目录的.profile或.bashrc文件中,这个根据发行版而有所不同。系统管理员应该要为用户设置一个合理的umask值,以确保用户创建的文件具有所希望的默认权限,防止其他非同组用户对用户的文件具有写的权限。 计算umask的值对于文件来说,这一数字的最大值是6。系统不允许用户在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录的数值是7,目录运行设置执行权限。该命令的格式:umask 数值 # 数值设置的范围为000-777,八进制数字与权限位相对应的umask值(在计算umask的值时,可以针对各类用户分别在这张表中查找所需目录创建默认权限相应的umask值)下表是与权限位相对应的umask值 : umask 文件 目录 0 6 7 1 6 6 2 4 5 3 4 4 4 2 3 5 2 2 6 0 1 7 0 0 说明:比如umask为002,则对应的是文件权限为664和目录为775。我们试着使用一个例子来讲解清楚。一个umask的值为022.对于目录来说,我们只需要用777减去022即可,位数需要相照应,可以得到755,755就是用户创建目录的默认权限;而对于文件来说,我们用666减去022,可以得到644,644就是文件创建的默认权限了。 umask值意义umask是三组数字的,但是我们在Ubuntu上输入后,会发现出现了四组数字。第一组是特殊权限用的,我们可以不用管它,所以看后面3组即可。在linux下我们查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了。其中解释一下数值表示的意思:0 0 0 2第一个数值:为特殊权限,比如”SUID,SGID,SBIT”第二个数值:为属主权限第三个数值:为组权限第四个数值:为其他用户权限 通常我们使不需要理会第一个数值的,我们只需要关注一下后三位数值就可以了。 更改umask值如果想改变umask的值,使用以下命令:umask 数值示例:1umask 002 但是这是一种临时的更改,在系统重启后一切都会回归初始状态。我们要永久性的更改,就需要到/etc/profile文件中。 但是如果你想设置umask的值,那么你一定要清除你赋予权限的文件目录需要什么样的权限。如果你不是很清楚的话,那么你一定不要设置这个值。如果你错误的操作,也许会使用户没有任何的读写基本权限或是使用户拥有过大的执行权限,使整个操作系统处于危险的边缘。 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/04/umack/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[汉化Ubuntu18.04并设置时区]]></title>
<url>%2F2018%2F10%2F03%2F%E6%B1%89%E5%8C%96Ubuntu18-04%E5%B9%B6%E8%AE%BE%E7%BD%AE%E6%97%B6%E5%8C%BA%2F</url>
<content type="text"><![CDATA[当我们安装好Ubuntu后,默认时全英文的,所以我们有必要汉化一下。找到“language spport”然后会提示你安装,点击安装即可。安装完毕后,点击”install language”那个选项。勾选上“简体中文包”的选项,然后安装即可。然后把安装好的“汉语(中国)”拖拽到最上方。再点击“apply system-wide”,把这个系统全部调整为“中国”。然后重启系统,当你进入系统后,会弹出提示窗口,把文件夹更新到当前语言。 然后下面开始设置时区和时间。选右上角的开关机按钮,在菜单中选择设置图标,打开后找到“Redion & Language”,把“formats”改为”Shanghai”即可。但这个只是更改了时区,时间却不是正确的,我们可以通过命令来修改。 运行如下命令:1bingyu@ubuntu:~# sudo tzselect 然后选择亚洲Asia,继续选择中国China,最后选择北京Beijing。然后创建时区软链1sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 现在看下时间,是不是已经正常了呢。 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/03/汉化Ubuntu18-04并设置时区/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[SQL基本操作-增删改查]]></title>
<url>%2F2018%2F10%2F01%2FSQL%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5%2F</url>
<content type="text"><![CDATA[首先我们登录MySQL。1mysql -u root -p 查询目前已存在的数据库。1sql> show databases; 下面我们开始进行增删改查的操作。 本文按照 增删改查 的顺序进行说明和演示,每个分类又分别按照对数据库,对表,对数据操作进行。但是实际操作中不一定是按照此顺序进行的,所以请根据实际情况进行操作。 增增加数据库语法:create database + 数据库名称 + [库选项]库选项是用来约束数据库的,为可选项(有默认值),共有两种,分别为: 字符集设定:charset/ character set + 具体字符集,用来表示数据存储的编码格式,常用的字符集包括GBK和UTF8等。 校对集设定:collate+ 具体校对集,表示数据比较的规则,其依赖字符集。 示例:1create database blog charset utf8; 注意 :这里的字符编码应该写作utf8,不能写作utf-8。 增加表语法:create table [if not exists] + 表名( 字段名称 数据类型, …… 字段名称 数据类型 /* 最后后一行,不需要加逗号 */ )[表选项]; 其中,if not exists 表示如果表名不存在,就执行创建代码;如果表名存在,则不执行创建代码。(强烈建议你使用if not exists选项,因为当数据库中出现大量表时候,你很难判断该表是否存在,使用该选项可以避免很多的麻烦问题。) 表选项则是用来控制表的表现形式的,共有三种,分别为: 字符集设定:charset/ character set+ 具体字符集,用来表示数据存储的编码格式,常用的字符集包括GBK和UTF8等。 校对集设定:collate+ 具体校对集,表示数据比较的规则,其依赖字符集。 存储引擎:engine+具体存储引擎,默认为InnoDB,常用的还有MyISAM。 由于表是依附于数据库的,所以在创建表的时候,都必须先指定具体的数据库。指定数据库:use database_name;示例:1use blog; 下面开始创建表示例:1234create table if not exists user( -> name varchar(10), -> id int, -> age int)charset utf8; 增加数据语法:insert into + 表名 + values(值列表)[,(值列表)];示例:1insert into user values('bingyu',1,20); 删删除数据库基本语法:drop database + 数据库名称; 在这里,需要注意的是在删除数据库之前,应该先进行备份操作,因为删除为不可逆操作,所以不要随意删除数据库。 示例:1drop database blog; 删除表语法:drop table + 表名1,表名2 ...; 在这里,需要注意:删除表为不可逆操作,所以需要你谨慎使用此语法。 示例:1drop table user; 删除数据基本语法:delete from + 表名 + [where 条件]; 当然,我们也可以用drop来实现删除操作,不过与delete相比,drop的威力更强,其在执行删除操作的时候,不仅会删除数据,还会删除定义并释放存储空间;而delete在执行删除操作的时候,仅会删除数据,并不会删除定义和释放存储空间. 示例:1delete from user; 改改数据库语法:alter database + 数据库名称 + [库选项]; 数据库的修改仅限库选项,即字符集和校对集(校对集依赖字符集)。 charset/character set[=] 字符集; collate[=] 校对集; 示例:1alter database blog charset gbk; # 修改此数据库的字符集编码为gbk. 改表对表的修改包括新增、修改、重命名和删除字段。 新增字段语法: alter table + 表名 + add + [column] + 字段名 + 数据类型 + [列属性][位置]; 修改字段语法:alter table + 表名 + modify + 字段名 + 数据类型 + [列属性][位置]; 其中,位置表示此字段存储的位置,分为first(第一个位置)和after + 字段名(指定的字段后,默认为最后一个位置). 示例:1alter table user modify id int after age; 重命名字段语法:alter table + 表名 + change + 旧字段名 + 新字段名 + 数据类型 + [列属性][位置]; 其中,位置表示此字段存储的位置,分为first(第一个位置)和after + 字段名(指定的字段后,默认为最后一个位置). 示例:1alter table user change id ID int; 删除字段语法:alter table + 表名 + drop+ 字段名;示例:1alter table user drop age; 改数据语法:update + 表名 + set + 字段 = 值 + [where 条件]; 改数据其实是更新数据。 示例:1update user set age = 18 where id = 1; 查查数据库 查看全部数据库语法:show databases;示例:1show databases; 查看部分(模糊查询)基本语法:show databases like 'pattern'; 其中,pattern是匹配模式,有两种,分别为: % :表示匹配多个字符; _ :表示匹配单个字符。 示例:1show databases like 'blog'; # 表示匹配所有blog开头的数据库。 查看数据库的创建语法:show create database + 数据库名称; 在这里,查看的结果有可能与咱们书写的 SQL 语句不同,这是因为数据库在执行 SQL 语句之前会优化 SQL,系统保存的是优化后的结果。 查表 查看全部基本语法:show tables;示例:1show tables; 查看部分()模糊查询)基本语法:show tables like 'pattern'; 其中,pattern是匹配模式,有两种,分别为: %:表示匹配多个字符; _:表示匹配单个字符。 示例:1show tables like '%er' 查看表的相关 描述信息语法:describe 表名;示例:1describe user; 查数据 查看全部语法:select * from + 表名 + [where 条件];示例:1select * from user; 查看部分语法:select + 字段名称[,字段名称] + from + 表名 + [where 条件];示例:1select name,id from blog where age=10; 以上内容收集于网上,由我本人重新整理排版而成,如果哪里有误还请反馈于我,以便我及时更正。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/01/SQL基本操作-增删改查/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>SQL</category>
</categories>
<tags>
<tag>sql</tag>
<tag>mysql</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Win10安装、汉化并破解Multisim仿真软件]]></title>
<url>%2F2018%2F10%2F01%2FWin10%E5%AE%89%E8%A3%85Multisim%E4%BB%BF%E7%9C%9F%E8%BD%AF%E4%BB%B6%2F</url>
<content type="text"><![CDATA[安装Multisim是一个十分强大的仿真软件,主要用于搭建电路原理图,并对电路进行仿真,是学习模电、数电的必备软件,也是电子专业以及其相关专业必备必会的一个软件。 如果你没有安装包,你可以联系我,我会发给你的。 以multisim 14.0版本为例进行安装。打开multisim文件夹并以管理员身份运行setup.exe,选择好后并点击”next”。选择一个安装路径,并点击下一步。下一步。下一步。开始抽取文件了。下一步。选择“我接受协议”,点击“下一步”。下一步。下一步。开始安装。下一步。会弹出一个提示窗口,选择“yes”。然后会提示你现在是否重启,选择“稍后重启”。 汉化找到文件安装目录,找到stringfiles文件夹。把简体中文的汉化包复制粘贴进来。 破解找到NI License Activator 1文件夹。以管理员身份运行NI License Activator 1.2.exe。点亮这5个小方块去侧栏里找到multisim。打开运行multisim。可以看到已经成功汉化并破解了。OK,Now,you can enjoy it! 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/01/Win10安装Multisim仿真软件/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>电子</category>
</categories>
<tags>
<tag>电子</tag>
</tags>
</entry>
<entry>
<title><![CDATA[怎么解决终端打开软件窗口占用问题]]></title>
<url>%2F2018%2F10%2F01%2F%E6%80%8E%E4%B9%88%E8%A7%A3%E5%86%B3%E7%BB%88%E7%AB%AF%E6%89%93%E5%BC%80%E8%BD%AF%E4%BB%B6%E7%AA%97%E5%8F%A3%E5%8D%A0%E7%94%A8%E9%97%AE%E9%A2%98%2F</url>
<content type="text"><![CDATA[有些时候我们在终端直接输入命令来打开软件,这样简单高效。但是一些程序通常会占用窗口。如下图所示如果我们按CTR+C,这样又会关闭打开的软件。虽然我们可以再创建一个新的终端来使用,但是你不感觉太麻烦了吗?至少我是认为很麻烦的。我们可以使用gedit&来解决。你以后遇到任何占用窗口的软件,都可以直接在命令后面加一个&,这样就再也不会出现占用终端窗口的问题了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/10/01/怎么解决终端打开软件窗口占用问题/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[虚拟机中Linux与主机文件共享]]></title>
<url>%2F2018%2F09%2F28%2Flinux%E5%85%B1%E4%BA%AB%2F</url>
<content type="text"><![CDATA[虚拟机其实已经自带了文件共享功能。这其实是一种映射关系,一种双向映射的关系,把宿主机的文件夹通过vm-tools映射到了虚拟机系统里,同时虚拟机里也可以映射到宿主机,中间的媒介是vm-tools。这种功能比使用ftp等来进行传输文件以达到共享文件的方法更为简单高效。首先保证你的虚拟机已经安装并可以成功运行”vm-tools”。你可以按照kali安装vm-tools 来安装并运行”vm-tools”,Linux主流版本均可按照此教程进行设置。首先对虚拟机进行设置。打开VMware虚拟机,打开需要进行文件共享的虚拟机。双击”硬盘”依次选择”选项”,”共享文件夹”。共享文件夹默认是禁用的,我们需要手动启用。选择”总是启用”,点击”添加”。我们到自己电脑硬盘上自己创建一个用于给虚拟机共享文件的文件夹。我个人在E盘创建了一个名为”share”的文件夹用于共享文件。在”主机路径”里选择你创建用于共享文件的那个文件夹。然后点击”下一步”,设置共享文件夹的属性,”只读”这个属性按照个人需求进行选择(这里我选择了”只读”)。 但是有一点需要提醒,设置”只读”权限是为了保证安全,防止你共享的文件在宿主机上具有可操作的权限,只读权限可以在一定限度内保证虚拟机与宿主机之间的安全隔离。但是虽然安全了,由于是”只读”权限,一些文件在共享时候会遇到不能共享或者其他的问题。当然这个属性也是可以随时修改的。一定要记得传输一些安全可控的文件。 现在打开虚拟机里的系统。然后我们需要查看一下Linux的内核版本。1bingyu@ubuntu:~$ uname -r 然后根据你的内核版本号来确定使用下表哪个命令。命令语法 4.0 之前的 Linux 内核 4.0 及更高版本的 Linux 内核 说明 mount -t vmhgfs .host:/ /home/user1/shares /usr/bin/vmhgfs-fuse .host:/ /home/user1/shares -o subtype=vmhgfs-fuse,allow_other 将所有共享装载到 /home/user1/shares mount -t vmhgfs .host:/foo /tmp/foo /usr/bin/vmhgfs-fuse .host:/foo /tmp/foo -o subtype=vmhgfs-fuse,allow_other 将名为foo的共享装载到/tmp/foo mount -t vmhgfs .host:/foo/bar /var/lib/bar /usr/bin/vmhgfs-fuse .host:/foo/bar /var/lib/bar -o subtype=vmhgfs-fuse,allow_other 将共享foo中的子目录bar装载到 /var/lib/bar 我们此时需要在Linux上也创建一个用于共享的目录。1bingyu@ubuntu:~$ sudo mkdir share 我是高于4.0的内核版本。对于 Linux 内核版本 4.0 或更高版本,输入命令 /usr/bin/vmhgfs-fuse -h 可列出可用的选项。1bingyu@ubuntu:~$ sudo /usr/bin/vmhgfs-fuse .host:/ /home/bingyu/share -o subtype=vmhgfs-fuse,allow_other 命令中host:/后接你创建的共享目录,用绝对路径。此时,已经完全设置完毕,我们现在可以测试一下是否可以共享文件。我现在把一张图片复制到windows上的share文件夹。(当然任何文件都是可以共享的)我们进入Linux的share目录看看有没有。(这个时候会多出一层目录)1bingyu@ubuntu:~$ cd /share/share 我们可以打开看看是不是刚才的图片。1bingyu@ubuntu:~$ eog TIM图片20180917104312.jpg 然后,我们再测试一下虚拟机里的文件是否可以共享给宿主机。我在/home/bingyu/share/share里创建一个测试文档。然后打开宿主机的共享文件夹,查看是否已经共享。 关于共享文件的更多用法可以参考VMware使用共享文件夹 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/28/linux共享/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>VMware</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Ubuntu18.04安装QQ]]></title>
<url>%2F2018%2F09%2F22%2Fubuntu%E5%AE%89%E8%A3%85Tim%2F</url>
<content type="text"><![CDATA[GitHub地址:https://github.com/wszqkzqk/deepin-wine-ubuntu码云地址:https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu这个是我个人在我用过的最稳定最好用的wine QQ了。当然满足不满足你的要求,我不敢保证,还有就是崩溃以及一些功能不能正常使用是很正常的,这毕竟是Linux的wine环境,没法满足太多需求的。 演示环境: Ubuntu18.04(deepin桌面),其他桌面和版本和此操作相同。 安装deepin-wine环境1234567$ git clone https://github.com/wszqkzqk/deepin-wine-ubuntu.git $ git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.git # 国内用户用这个比较快速以上两条命令2选1即可$ cd deepin-wine-for-ubuntu/$ sudo ./install.sh 安装deepin.com应用容器我们选择那个.deb的包下载就可以了。推荐使用特别兼容支持包: QQ TIM QQ轻聊版 若无法访问上述地址,或想体验官方最新版,可选择下载安装以下包文件: QQ TIM QQ轻聊版 下载完成后,我们可以选择以下2种方式进行安装。(我个人下载的是TIM,就以TIM进行演示,其他的相同)命令行安装1$ sudo dpkg -i deepin.com.qq.office_2.0.0deepin4_i386.deb 如果中途出现任何意外或者报错,请尝试重复以上命令。 图形化安装当我们点击这个.deb安装包的时候,系统会自动打开图形化软件包管理器,你可以直接进行安装即可。初次打开的时候,会先进行初始化操作,稍等一会,就可以了。 安装成功后,我们找到TIM,点击图标打开即可。初次打开,会先进行初始化。初始化完毕后,就可以成功打开了。还可以进行视频聊天。 FAQ: 首次打开QQ,会提示你安装Flash,怎么办? (不安装,因为是.exe格式的,就是安装也没用,能聊天就可以了,你要是想和Windows的一样,那你就用Windows吧) 有哪些bug?该怎么处理? (目前KDE桌面环境无法使用!部分桌面环境无法正常使用视频通话功能!不处理,你要求降低点,就发现其实bug还是很少的) 打开缓慢,或者打开后很卡怎么办? (虚拟机安装的Linux就调大内存,本机安装和虚拟机安装的就在使用的时候,尽量少开其他应用程序) 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/22/ubuntu安装Tim/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Windows系统cmd命令集合]]></title>
<url>%2F2018%2F09%2F19%2FWindows%E7%B3%BB%E7%BB%9Fcmd%E5%91%BD%E4%BB%A4%E9%9B%86%E5%90%88%2F</url>
<content type="text"><![CDATA[操作步骤:CMD命令:开始->运行(可以直接用快捷键 win+R )->键入以下的cmd命令即可。动图演示: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364CMD命令锦集(cd d:进入d盘;cd..返回父目录;dir 该目录所有文件) 1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。(它在 Windows NT/2000/XP 中均可使用 , 但在 Windows 98 中却没有集成这一个工具。) 4. explorer-------打开资源管理器 5. logoff---------注销命令 6. shutdown-------60秒倒计时关机命令 7. lusrmgr.msc----本机用户和组 8. services.msc---本地服务设置 9. oobe/msoobe /a----检查XP是否激活 10. notepad--------打开记事本 11. cleanmgr-------垃圾整理 12. net start messenger----开始信使服务 13. compmgmt.msc---计算机管理 14. net stop messenger-----停止信使服务 15. conf-----------启动netmeeting 16. dvdplay--------DVD播放器 17. charmap--------启动字符映射表 18. diskmgmt.msc---磁盘管理实用程序 19. calc-----------启动计算器 20. dfrg.msc-------磁盘碎片整理程序 21. chkdsk.exe-----Chkdsk磁盘检查 22. devmgmt.msc--- 设备管理器 23. regsvr32 /u *.dll----停止dll文件运行 24. drwtsn32------ 系统医生,修理电脑 25. rononce -p----15秒关机 26. dxdiag---------检查(查看)电脑配置信息 27. regedt32-------注册表编辑器 28. msconfig.exe---系统配置实用程序 29. rsop.msc-------组策略结果集 30. mem.exe--------显示内存使用情况 31. regedit.exe----注册表 32. winchat--------XP自带局域网聊天 33. progman--------程序管理器 34. winmsd---------系统信息 35. perfmon.msc----计算机性能监测程序 36. winver---------检查Windows系统版本 37. sfc /scannow-----扫描错误并复原 38. taskmgr-----任务管理器 40. wmimgmt.msc----打开windows管理体系结构(WMI) 41. wupdmgr--------windows更新程序 42. wscript--------windows脚本宿主设置 43. write----------写字板 45. wiaacmgr-------扫描仪和照相机向导 46. snippingtool: 打开截屏工具 47. wupdmgr Windows:更新程序 48.mstsc:远程桌面连接(一般用作管理服务器) 49.mmc:打开控制台 50.sfc.exe:系统文件检查器 51.sfc /scannow windows:文件保护 52.eventvwr :事件查看器 53.explorer :打开资源管理器 54.clipbrd :剪贴板查看器 55.osk:打开屏幕键盘 56.iexpress :木马捆绑工具,系统自带 57.msconfig:修改启动项 58.psr.exe :录屏 59.tsshutdn-------60秒倒计时关机命令 60.lusrmgr.msc----本机用户和组 61.oobe/msoobe/a----检查XP是否激活 62.netstartmessenger----开始信使服务 63.netstopmessenger-----停止信使服务 64.regsvr32/u*.dll----停止dll文件运行 65.msinfo32-----查看电脑配置信息 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/19/Windows系统cmd命令集合/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Windows</category>
</categories>
<tags>
<tag>Windows</tag>
<tag>cmd命令</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux下的快捷键使用技巧]]></title>
<url>%2F2018%2F09%2F15%2FLinux%E4%B8%8B%E7%9A%84%E5%BF%AB%E6%8D%B7%E9%94%AE%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7%2F</url>
<content type="text"><![CDATA[Warning:下面一些按键组合(尤其使用 Alt 键的组合),可能会被 GUI 拦截来触发其它的功能。但是当你使用虚拟控制台时,所有的按键组合都应该正确地工作。 移动光标下表列出了移动光标所使用的按键: 光标移动命令 按键 说明 Ctr+a (ahead)移动光标到行首 Ctr+e (end)移动光标到行尾 Ctr+f (forward)光标前移一个字符;和右箭头作用一样。 Ctr+b (backward)光标后移一个字符;和左箭头作用一样 Ctrl+l 清空屏幕,移动光标到左上角。clear 命令完成同样的工作 Alt+f 光标前移一个字 Alt+b 光标后移一个字 修改文本下表列出了键盘命令,这些命令用来在命令行中编辑字符: 文本编辑命令 按键 说明 Ctrl-d (delete)删除光标位置的字符 Ctrl-t 光标位置的字符和光标前面的字符互换位置 Alt-t 光标位置的字和其前面的字互换位置 Alt-l 把从光标位置到字尾的字符转换成小写字母 Alt-u 把从光标位置到字尾的字符转换成大写字母 剪切和粘贴文本下表列出了剪切和粘贴命令: 剪切和粘贴命令 按键 说明 Ctr+k 剪切从光标位置到行尾的文本 Ctr+u 剪切(删除)从光标位置到行首的文本 Ctr+h 删除光标前的字符 Alt-d 剪切从光标位置到词尾的文本 Alt-Backspace 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词 Ctrl-y 把剪切环中的文本粘贴到光标位置 其他快捷键 按键 说明 Ctrl-c 终止正在运行的程序。 Ctrl-z 停止进程,并放入后台 crtl+s 停止屏幕输出 crtl+Q 恢复屏幕输出 crtl+l 清屏 crtl+D 标准输入结束 crtl+shift+N 新建终端窗口 alt+tab 切换当前的运行程序 Ctrl+Alt+Fn f1-f6为虚拟终端,f7回到图形界面 自动补全shell 能帮助你的另一种方式是通过一种叫做自动补全的机制。当你敲入一个命令时, 按下 tab 键,自动补全就会发生。12lengyue@ubuntu:~$ lsDesktop Documents Pictures Music Videos 试着输入下面的命令,但不要按下 Enter 键:1lengyue@ubuntu:~$ ls D 按下 tab 键:1lengyue@ubuntu:~$ ls D 没有补全,只是嘟嘟响。因为”D”不止匹配目录中的一个条目,包含“D”的有 Desktop 、Documents。为了自动补全执行成功, 你给它的”线索”必须不模棱两可。如果我们继续输入:1lengyue@ubuntu:~$ ls Do 然后按下tab:1lengyue@ubuntu:~$ ls Documents 自动补全成功了。这个实例展示了路径名自动补全,这是最常用的形式。自动补全也能对变量起作用(如果字的开头是一个”$”),用户名字(单词以”~”开始),命令(如果单词是一行的第一个单词), 和主机名(如果单词的开头是”@”)。主机名自动补全只对包含在文件/etc/hosts 中的主机名有效。 有一系列的控制和元键序列与自动补全相关联: 自动补全命令 按键 说明 Alt-? 显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按 两次 tab 键,这会更容易些 Alt-\* 插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助 可编程自动补全 目前的 bash 版本有一个叫做可编程自动补全工具。可编程自动补全允许你(更可能是,你的发行版提供商)来加入额外的自动补全规则。通常需要加入对特定应用程序的支持,来完成这个任务。例如,有可能为一个命令的选项列表,或者一个应用程序支持的特殊文件类型加入自动补全。默认情况下,Ubuntu 已经定义了一个相当大的规则集合。可编程自动补全是由 shell 函数实现的,shell 函数是一种小巧的 shell 脚本,我们会在后面的章节中讨论到。如果你感到好奇,试一下:1lengyue@ubuntu:~$ set | less 查看一下是否可以正常输出,如果你能找到它们的话。默认情况下,并不是所有的发行版都包括它们。 Tips:只需输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现;如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字。 利用历史命令bash 维护着一个已经执行过的命令的历史列表。这个命令列表被保存在你家目录下,一个叫做 .bash_history 的文件里。这个 history 工具是个有用资源,因为它可以减少你敲键盘的次数,尤其当和命令行编辑联系起来时。 搜索历史命令 在任何时候,我们都可以浏览历史列表的内容,通过:1lengyue@ubuntu:~$ history 在默认情况下,Bash会存储你所输入的最后 1000 个命令。如果我们想要找到列出目录 /usr/bin 内容的命令。我们可以这样做:1lengyue@ubuntu:~$ history | grep /usr/bin 如果在我们的搜索结果之中,我们得到一行,包含了有趣的命令,像这样:188 ls -l /usr/bin > ls-output.txt 数字 “88” 是这个命令在历史列表中的行号。随后在使用另一种展开类型时,叫做 历史命令展开,我们会用到这个数字。我们可以这样做,来使用我们所发现的行:1lengyue@ubuntu:~$ !88 bash 会把 “!88” 展开成为历史列表中88行的内容。bash 也具有按递增顺序来搜索历史列表的能力。这意味着随着字符的输入,我们可以告诉 bash 去搜索历史列表,每一个附加字符都进一步提炼我们的搜索。启动递增搜索, 输入 Ctrl-r ,其后输入你要寻找的文本。当你找到它以后,你可以敲入 Enter 来执行命令, 或者输入 Ctrl-j ,从历史列表中复制这一行到当前命令行。再次输入 Ctrl-r,来找到下一个 匹配项(向上移动历史列表)。输入 Ctrl-g 或者 Ctrl-c 或者 Esc ,退出搜索。OK,我们操作一遍。首先按键 Ctrl-r:1(reverse-i-search)`': 提示符改变,显示我们正在执行反向递增搜索。搜索过程是”反向的”,因为我们按照从”现在”到过去 某个时间段的顺序来搜寻。接下来,我们开始输入要查找的文本。在这个例子里是 “ls”1(reverse-i-search)`ls -Do': ls -ld Documents/ 搜索并返回了我们需要的结果。我们如果需要执行这个命令,就按下 Enter 键,或者我们也可以复制这个命令到我们当前的命令行,来进一步编辑它,按键 Ctrl-j 。复制它,输入 Ctrl-j:1lengyue@ubuntu:~$ ls -ld Documents/ 我们的 shell 提示符重新出现,命令行加载完毕。下表列出了一些按键组合, 这些按键用来操作历史列表: 历史命令 按键 说明 Ctrl-p (previous)移动到上一个历史条目。类似于上箭头按键 Ctrl-n (next)移动到下一个历史条目。类似于下箭头按键 Ctrl-o 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便 Ctrl-r 反向递增搜索。从当前命令行开始,向上递增搜索 Alt- 移动到历史列表结尾,即当前命令行 Alt-p 反向搜索,不是递增顺序。输入要查找的字符串,然后按下 Enter,执行搜索 Alt-n 向前搜索,非递增顺序 历史命令展开通过使用 “!” 字符,shell 为历史列表中的命令,提供了一个特殊的展开类型。一个感叹号 ,其后再加上一个数字,可以把来自历史列表中的命令插入到命令行中。还有一些其它的展开特性: 历史命令展开 按键 说明 !! 重复最后一次执行的命令 !number 重复历史列表中第 number 行的命令 !string 重复最近历史列表中,以这个字符串开头的命令 !?string 重复最近历史列表中,包含这个字符串的命令 Warning: 应该小心谨慎地使用 “!string” 和 “!?string” 格式,除非你完全确信历史列表条目的内容。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/15/Linux下的快捷键使用技巧/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Vim无法退出怎么办(显示recording)]]></title>
<url>%2F2018%2F09%2F11%2FVim%E6%97%A0%E6%B3%95%E9%80%80%E5%87%BA%E6%80%8E%E4%B9%88%E5%8A%9E-%E6%98%BE%E7%A4%BArecording%2F</url>
<content type="text"><![CDATA[我们有时在使用vim的时候,命令明明是对的,却不能退出,vim上显示recording。如下图所示:出现上图现象,主要是因为你进入了记录按键状态。你在退出vim的时候,没有先按esc进入命令模式。而是直接按了q键,一般你连按2次q键,才会出现上图所示的状况。按q之后,你按的第一个字母或者数字就是这个按键宏的快捷键。使用的时候按@和你记录时的第一个字母或数字,就可以执行刚才编辑的按键宏了。进入了记录状态(recording)不要慌,按 esc ,然后按 q ,就可以退出recording了。然后你可以先按 esc ,然后输入:wq 退出并保存文档了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/11/Vim无法退出怎么办-显示recording/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Vim</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Python爬虫:一些常用的爬虫技巧总结]]></title>
<url>%2F2018%2F09%2F10%2FPython%E7%88%AC%E8%99%AB%EF%BC%9A%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E7%9A%84%E7%88%AC%E8%99%AB%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93%2F</url>
<content type="text"><![CDATA[基本抓取网页get方法1234import urllib2url "http://www.baidu.com"respons = urllib2.urlopen(url)print response.read() post方法123456789import urllibimport urllib2url = "http://abcde.com"form = {'name':'abc','password':'1234'}form_data = urllib.urlencode(form)request = urllib2.Request(url,form_data)response = urllib2.urlopen(request)print response.read() 使用代理IP在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP; 在urllib2包中有ProxyHandler类,通过此类可以设置代理访问网页,如下代码片段:1234567import urllib2proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})opener = urllib2.build_opener(proxy)urllib2.install_opener(opener)response = urllib2.urlopen('http://www.baidu.com')print response.read() Cookies处理cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了cookielib模块用于处理cookies,cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.代码片段:123456import urllib2, cookielibcookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())opener = urllib2.build_opener(cookie_support)urllib2.install_opener(opener)content = urllib2.urlopen('http://XXXX').read() 关键在于CookieJar(),它用于管理HTTP cookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失,所有过程都不需要单独去操作。 手动添加cookie123cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="request.add_header("Cookie", cookie) 伪装成浏览器某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况。对有些 header 要特别留意,Server 端会针对这些 header 做检查: User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析 这时可以通过修改http包中的header来实现,代码片段如下:12345678910import urllib2headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}request = urllib2.Request( url = 'http://my.oschina.net/jhao104/blog?catalog=3463517', headers = headers)print urllib2.urlopen(request).read() 页面解析对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样,就不用过多的说明,附两个比较好的网址: 正则表达式入门:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式在线测试:http://tool.oschina.net/regex/ 其次就是解析库了,常用的有两个lxml和BeautifulSoup,对于这两个的使用介绍两个比较好的网站: lxml:http://my.oschina.net/jhao104/blog/639448 BeautifulSoup:http://cuiqingcai.com/1319.html 这两个库,都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxmlC语言编码,高效,支持Xpath。 验证码的处理对于一些简单的验证码,可以进行简单的识别。本人也只进行过一些简单的验证码识别。但是有些反人类的验证码,比如12306,可以通过打码平台进行人工打码,当然这是要付费的。 gzip压缩有没有遇到过某些网页,不论怎么转码都是一团乱码。哈哈,那说明你还不知道许多web服务具有发送压缩数据的能力,这可以将网络线路上传输的大量数据消减 60% 以上。这尤其适用于 XML web 服务,因为 XML 数据 的压缩率可以很高。但是一般服务器不会为你发送压缩数据,除非你告诉服务器你可以处理压缩数据。于是需要这样修改代码:123456import urllib2, httplibrequest = urllib2.Request('http://xxxx.com')request.add_header('Accept-encoding', 'gzip') opener = urllib2.build_opener()f = opener.open(request) 这是关键:创建Request对象,添加一个 Accept-encoding 头信息告诉服务器你能接受 gzip 压缩数据。然后就是解压缩数据:1234567import StringIOimport gzipcompresseddata = f.read()compressedstream = StringIO.StringIO(compresseddata)gzipper = gzip.GzipFile(fileobj=compressedstream)print gzipper.read() 多线程并发抓取单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。虽然说python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。1234567891011121314151617181920212223242526272829from threading import Threadfrom Queue import Queuefrom time import sleep# q是任务队列#NUM是并发线程总数#JOBS是有多少任务q = Queue()NUM = 2JOBS = 10#具体的处理函数,负责处理单个任务def do_somthing_using(arguments): print arguments#这个是工作进程,负责不断从队列取数据并处理def working(): while True: arguments = q.get() do_somthing_using(arguments) sleep(1) q.task_done()#fork NUM个线程等待队列for i in range(NUM): t = Thread(target=working) t.setDaemon(True) t.start()#把JOBS排入队列for i in range(JOBS): q.put(i)#等待所有JOBS完成q.join() 转载自:http://my.oschina.net/jhao104/blog/647308?fromerr=KzH2VGaK 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/10/Python爬虫:一些常用的爬虫技巧总结/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux常见文件目录解析]]></title>
<url>%2F2018%2F09%2F08%2FLinux%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%2F</url>
<content type="text"><![CDATA[Linux系统能支持多种目前流行的文件系统,推荐用EXT4。 Linux下面的文件类型主要有: 1) -,普通文件,分为纯文本和二进制。2) d,目录文件,存储文件的地方。3) l,链接文件,指向同一个文件或目录的的文件。4) 设备文件,分为b块设备和c字符设备。5)p,管道文件,提供进程间通信6)s,套接字文件,与网络通信有关 Linux使用标准的目录结构,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。 1234567891011121314151617181920212223242526272829303132333435目录名 简要说明/bin 二进制可执行命令,binary(二进制的):许多“指令”对应的可“执行程序文件”目录/sbin super binary,超级的 二进制 许多“指令”对应的可“执行程序文件”目录,该目录文件 对应指令都是"root"用户可以执行的指令普通用户不能使用该目录里的命令: 普通用户:用$开头 root用户:用#开头 /dev device,系统硬件设备目录(linux系统所有的硬件都通过文件表示)/etc 系统管理和配置文件,/etc/passwd 用于存储用户信息的文件,/etc/group 用于存储组别信息的文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户abc的主目录就是/home/user,可以用~abc表示,普通用户的“家目录” 系统每增加一个普通用户的同时,都会在该目录为该目录设置一个文件目录代表该用户的“家目录”用户后期使用系统的时候首先会首先进入其目录家目录名字默认与当前用户名字一致用户对家目录拥有绝对最高的权限 /lib 标准程序设计库/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序/tmp 公用的临时文件存储点/root 系统管理员的主目录/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。存放临时的映射文件系统./lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。/var variable,某些大文件的溢出区,比方说各种服务的日志文件,该目录存储的文件经常会发生变化(增加、修改、删除)/usr unxi system resource(unix系统资源文件目录)最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:/usr/X11R6 存放X window的目录/usr/bin 众多的应用程序/usr/sbin 超级用户的一些管理程序/usr/doc linux文档/usr/include linux下开发和编译应用程序所需要的头文件/usr/lib 常用的动态链接库和软件包的配置文件/usr/man 帮助文档/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里/usr/local/bin 本地增加的命令/usr/local/lib 本地增加的库该目录类似win系统的 C:/Program files 目录,该目录经常用于安装各种软件,软件安装完毕会形成对应的指令,该指令对应的可执行程序文件就存放在以下目录 /usr/bin 许多“指令”对应的可“执行程序文件”目录 /usr/sbin root用户执行的指令 对应的 可“执行程序文件”目录 /boot 系统启动核心目录,用于储存系统启动文件 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/08/Linux文件目录/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux性能检测常用的10个基本命令]]></title>
<url>%2F2018%2F09%2F06%2FLinux%E6%80%A7%E8%83%BD%E6%A3%80%E6%B5%8B%E5%B8%B8%E7%94%A8%E7%9A%8410%E4%B8%AA%E5%9F%BA%E6%9C%AC%E5%91%BD%E4%BB%A4%2F</url>
<content type="text"><![CDATA[uptime12$ uptime23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.0212 该命令可以大致的看出计算机的整体负载情况,load average后的数字分别表示计算机在1min、5min、15min内的平均负载。 dmesg | tail123456$ dmesg | tail[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0[...][1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.123456 打印内核环形缓存区中的内容,可以用来查看一些错误; 上面的例子中,显示进程18694 因引内存越界被kill掉以及TCP request被丢弃的错误。通过dmesg可以快速判断是否有导致系统性能异常的问题。 vmstat 1123456789$ vmstat 1procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 032 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 032 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 032 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 032 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0^C123456789 打印进程、内存、交换分区、IO和CPU等的统计信息; vmstat的格式如下1> vmstat [options] [delay [count]] vmstat第一次输出表示从开机到vmstat运行时的平均值;剩余输出的都是在指定的时间间隔内的平均值,上述例子中delay的值设置为1,除第一次以外,剩余的都是1秒统计一次,count未设置,将会一直循环打印。123456$ vmstat 10 3procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 2527112 1086888 13720228 0 0 1 14 2 1 1 1 99 0 0 0 0 0 2527156 1086888 13719856 0 0 0 104 3003 4901 0 0 99 0 0 0 0 0 2526412 1086888 13719904 0 0 0 10 3345 4870 0 1 99 0 0123456 上述的例子中delay设置为10,count设置为3,表示每行打印10秒内的平均值,只打印3次。 需要检查的列 r:表示正在运行或者等待CPU调度的进程数。因为该列数据不包含I/O的统计信息,因此可以用来检测CPU是否饱和。若r列中的数字大于CPU的核数,表示CPU已经处于饱和状态。 free:当前剩余的内存; si, so:交换分区换入和换出的个数,若换入换出个数大于0,表示内存不足; us, sy, id, wa:CPU的统计信息,分别表示user time、system time(kernel)、idle、wait I/O。I/O处理所用的时间包含在system time中,因此若system time超过20%,则I/O可能存在瓶颈或异常; mpstat -P ALL 11234567891011$ mpstat -P ALLLinux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/30/2018 _x86_64_ (16 CPU)04:03:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle04:03:55 PM all 3.67 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 95.0204:03:55 PM 0 3.52 0.00 0.57 0.76 0.00 0.00 0.00 0.00 0.00 95.1504:03:55 PM 1 3.83 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 94.8504:03:55 PM 2 3.80 0.00 0.61 0.60 0.00 0.00 0.00 0.00 0.00 94.9904:03:55 PM 3 3.68 0.00 0.58 0.60 0.00 0.00 0.00 0.00 0.00 95.1304:03:55 PM 4 3.54 0.00 0.57 0.60 0.00 0.00 0.00 0.00 0.00 95.30[...]1234567891011 该命令用于每秒打印一次每个CPU的统计信息,可用于查看CPU的调度是否均匀。 pidstat 1123456789101112131415161718$ pidstat 1Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)07:41:02 PM UID PID %usr %system %guest %CPU CPU Command07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/007:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat07:41:03 PM UID PID %usr %system %guest %CPU CPU Command07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat^C123456789101112131415161718 该命令用于打印各个进程对CPU的占用情况,类似top命令中显示的内容。pidstat的优势在于,可以滚动的打印进程运行情况,而不像top那样会清屏。 上述例子中,%CPU中两个java进程的cpu利用率分别达到了1590%和1573%,表示java进程占用了16颗CPU。 iostat -xz 1类似vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;123456789101112131415$ iostat -xz 1Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 73.96 0.00 3.73 0.03 0.06 22.21Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilxvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03[...]^C123456789101112131415 检查列 r/s, w/s, rkB/s, wkB/s,表示每秒向I/O设备发出的reads、writes、read Kbytes、write Kbytes的数量。 await,表示应用程序排队等待和被服务的平均I/O时间,该值若大于预期的时间,这表示I/O设备处于饱和状态或者异常。 avgqu-sz,表示请求被发送给I/O设备的平均时间,若该值大于1,则表示I/O设备可能已经饱和; %util,每秒设备的利用率;若该利用率超过60%,则表示设备出现性能异常; free -m12345$ free -m total used free shared buffers cachedMem: 245998 24545 221453 83 59 541-/+ buffers/cache: 23944 222053Swap: 0 0 012345 检查的列: buffers: For the buffer cache, used for block device I/O. cached: For the page cache, used by file systems. 若buffers和cached接近0,说明I/O的使用率过高,系统存在性能问题。Linux中会用free内存作为cache,若应用程序需要分配内存,系统能够快速的将cache占用的内存回收,因此free的内存包含cache占用的部分。 sar -n DEV 1sar是System Activity Reporter的缩写,系统活动状态报告。 -n { keyword [,…] | ALL },用于报告网络统计数据。keyword可以是以下的一个或者多个: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和UDP6。 -n DEV 1, 每秒统计一次网络的使用情况;-n EDEV 1,每秒统计一次错误的网络信息;123456789101112131415$ sar -n DEV 1Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/31/2018 _x86_64_ (16 CPU)03:54:57 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s03:54:58 PM ens32 3286.00 7207.00 283.34 18333.90 0.00 0.00 0.0003:54:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0003:54:58 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.0003:54:58 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.0003:54:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s03:54:59 PM ens32 3304.00 7362.00 276.89 18898.51 0.00 0.00 0.0003:54:59 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0003:54:59 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.0003:54:59 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00^C123456789101112131415 IFACE ,网络接口名称; rxpck/s ,每秒接收到包数; txpck/s ,每秒传输的报数;(transmit packages) rxkB/s ,每秒接收的千字节数; txkB/s ,每秒发送的千字节数; rxcmp/s ,每秒接收的压缩包的数量; txcmp/s ,每秒发送的压缩包的数量; rxmcst/s,每秒接收的组数据包数量; sar -n TCP,ETCP 1该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量; TCP, 报告关于TCPv4网络流量的统计信息; ETCP, 报告有关TCPv4网络错误的统计信息; 12345678910111213$ sar -n TCP,ETCP 1Linux 3.10.0-514.26.2.el7.x86_64 (aushop) 05/31/2018 _x86_64_ (2 CPU)04:16:27 PM active/s passive/s iseg/s oseg/s04:16:44 PM 0.00 2.00 15.00 13.0004:16:45 PM 0.00 3.00 126.00 203.0004:16:46 PM 0.00 0.00 99.00 99.0004:16:47 PM 0.00 0.00 18.00 9.0004:16:48 PM 0.00 0.00 5.00 6.0004:16:49 PM 0.00 0.00 1.00 1.0004:16:50 PM 0.00 1.00 4.00 4.0004:16:51 PM 0.00 3.00 171.00 243.00^C12345678910111213 检测的列: active/s: Number of locally-initiated TCP connections per second (e.g., via connect()),发起的网络连接数量; passive/s: Number of remotely-initiated TCP connections per second (e.g., via accept()),接收的网络连接数量; retrans/s: Number of TCP retransmits per second,重传的数量; toptop命令包含更多的指标统计,相当于一个综合命令。12345678910111213141516171819$ toptop - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffersKiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java 4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave 66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top 5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java 4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java 1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0 8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched12345678910111213141516171819 总结下面的图片很好的展示了各个命令的主要作用,如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等。 Linux常用性能工具一览 转载自https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/06/Linux性能检测常用的10个基本命令/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Git创建远程仓库]]></title>
<url>%2F2018%2F09%2F05%2FGit%E5%88%9B%E5%BB%BA%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%2F</url>
<content type="text"><![CDATA[首先说几个基本概念,明白这些概念对你以后使用GitHub帮助会很大。 工作区:就是你在电脑里能看到的目录。暂存区:英文叫stage或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 首先要有一个GitHub账户,这是必须的。然后我们访问https://github.com/new ,开始在GitHub网站上创建一个新的仓库。其中对其中三个选项具体说明一下。Initialize this repository with a README: 在 Initialize this repository with a README选项上打钩,随后 GitHub会自动初始化仓库并设置README文件,让用户可以立刻clone这个仓库。如果想向GitHub添加手中已有的Git仓库,建议不要勾选,直接手动 push。我在此为仓库添加了README.md文件Add .gitignore: 该文件用来描述 Git 仓库中不需管理的文件与目录。通过它可以在初始化时自动生 成.gitignore文件A。这个设定会帮我们把不需要在Git仓库中进行版本管 理的文件记录在.gitignore文件中,省去了每次根据框架进行设置的麻 烦。下拉菜单中包含了主要的语言及框架,选择今后将要使用的即可。Add a license: 择要添加的许可协议文件。如果这个仓库中 包含的代码已经确定了许可协议,那么请在这里进行选择。随后将自动 生成包含许可协议内容的LICENSE文件,用来表明该仓库内容的许可协议。我在此添加了MIT协议。点击“Create repository”后,就成功创建了一个仓库。README.md在初始化时已经生成好了。README.md文件的内容 会自动显示在仓库的首页当中。其中README.md和Issue、Wiki等都是需要用到GFM(GitHub Flavored Markdown)语法的,这是GitHub自家基于markdown的扩展语法。一般情况下只要按照原本的Markdown语法进行描述就可以。 此时我们需要安装git ,下载地址:https://git-scm.com/ 。具体安装过程百度即可,但是有一点需要提醒的是 把git添加到全局环境变量中 。初次运行git需要配置一下,才能使用。12git config --global user.name "Your Name" # Your Name填GitHub用户名git config --global user.email "[email protected]" # [email protected]填你注册GitHub的邮箱 打开git,把版本库克隆到本地。1$ git clone https://github.com/lengyue1024/ubuntu-guide.git 然后,我们进入/ubuntu-guide目录创建一个文件,并写入一点东西进去。12$ touch ubuntu-wiki.md$ vim ubuntu-wiki.md 操作方式和Linux基本一致。保存退出后,我们可以查看一下是否已经成功写入。12$ cat ubuntu-wiki.mdubuntu是一款以桌面应用为主的开源GNU/Linux操作系统 我们可以查看一下当前的状态。1$ git status 可以从中看出我们新建的ubuntu-wiki.md还未提交。然后我们需要关联远程仓库,使本地的git和GitHub关联在一起,以便我们可以在本地管理并提交代码到GitHub上去初次使用的时候,需要先进行连接。1$ ssh-keygen -t rsa -C "[email protected]" 一直回车即可。git会提示你key的目录,你进入该目录,找到id_rsa.pub文件,打开即可看到key了。id_rsa.pub 是公开密钥。我们打开后,把里面的内容全部复制粘贴进https://github.com/settings/ssh/new中的key里,1$ ssh -T [email protected] 你需要手动输入一下你的GitHub的登陆密码。如图所示,已经成功连接。 现在我们可以把我们刚才新建的ubuntu-wiki.md提交到GitHub上去了。 123$ git add . # 向暂存区中添加文件,.表示提交全部文件,你也可以后跟具体文件名,指定只提交某个文件$ git commit -m "添加描述" # 添加描述是为了以后方便进行版本回退,找到历史版本$ git push # 提交暂存区到仓库区 我们刷新一下GitHub的页面,可以看到已经把新建的ubuntu-wiki.md文件提交到了GitHub上去。我们以后需要做的就是,在本地写好代码,然后继续按照git add .——git commit -m "描述" —–git push的顺序提交给GitHub上去就可以了。 WARNING:有一点很重要,你如果不是在本地创建文件,也就是你在GitHub上直接使用了”create new file”来创建的文件,那么一定要先运行git pull命令,把添加的文件拉取到本地,再运行”git push”。这其实是因为GitHub和本地的内容需要保持一致。 更多git使用命令可以查看Git常用命令速查手册 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/05/Git创建远程仓库/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title><![CDATA[交恶微软、拒绝乔布斯,21岁的他是如何开发出Linux的?]]></title>
<url>%2F2018%2F09%2F01%2F%E4%BA%A4%E6%81%B6%E5%BE%AE%E8%BD%AF%E3%80%81%E6%8B%92%E7%BB%9D%E4%B9%94%E5%B8%83%E6%96%AF%EF%BC%8C21%E5%B2%81%E7%9A%84%E4%BB%96%E6%98%AF%E5%A6%82%E4%BD%95%E5%BC%80%E5%8F%91%E5%87%BALinux%E7%9A%84%EF%BC%9F%2F</url>
<content type="text"><![CDATA[几天前,Linux迎来了它的27岁生日。从最初诞生在芬兰的一间卧室里,到现在成为,全球网民都离不开的操作系统。绝对堪称神话般的存在! 先来看个Linux牛X简史迄今为止,在全球范围内: 80%以上智能手机,均使用基于Linux内核的Android系统。 全球排名前500超算中,98%在用Linux。 纽交所、纳斯达克等证券交易市场,都在用Linux。 75%的云计算企业报告平台,也在用Linux。 全球主机行业33.8%的服务器用Linux。 亚马逊、沃尔玛等电商平台都在用Linux。 可以说,每一次程序员的女票去淘宝“败家”,都受恩惠于Linux。 不过,Linux,却被一位来自圣诞老人故乡芬兰的60后大叔,因着Just for fun的缘故,开发于“一个窗帘紧闭黑灯瞎火的芬兰少年的卧室中”。芬兰风光 如今,Linux的父亲——李纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,以下简称“李纳斯”),也已49岁。李纳斯近照 能亲眼见证自己的“儿子”,如此惠及全球,一定很有成就感。然而,他开发出Linux,却不过是兴趣使然。 一个有电脑的外公李纳斯的外公,在赫尔辛基大学当教授,近水楼台先得月,李纳斯因此可以使用外公单位发的电脑。小李纳斯 这台Commodore VIC-20计算机,唯一能做的事,就是用Basic语言,在上面编程序。 外公经常在上面做数学运算,因为眼花就让李纳斯,帮自己录程序。而这也建立了李纳斯的数学认知,并学会了编写小游戏。 整个中学年代,李纳斯都是在电脑前度过的,期间还掌握了汇编语言。李纳斯年轻时用过的电脑 一本书,一辈子考入赫尔辛基大学后,他遇到了影响一生的那本书——《操作系统:设计和实现》,作者是Andrew S. Tanenbaum。李纳斯曾如此美誉该书,“这本书把我推上了生命的高峰”。《操作系统:设计和实现》中文版 那时, Unix已开发出来。Unix最早是用汇编写的,开发过程中,Unix的两位创始人肯·汤普逊和丹尼斯·里奇,觉得用汇编写程序,实在太痛苦了!于是,哥俩决定用高级语言,来完成下一个版本,他们先后尝试了Fortran和B语言,却只遇见了成功他妈——失败! 这其中,哥俩中的丹尼斯,收拾好情绪,继续改造 B 语言。丹尼斯为B增加了数据类型,并让B语言,能直接编译为机器码,然后又以「New B」来命名这门语言(好名字O(∩_∩)O)。 后来,丹尼斯把「New B」改为C语言,并用C语言,重新编写Unix的内核,从此,Unix与C白首不相离。 尽管Unix可以完成很多操作,但是必须由人来完成。正是这一bug,催促着灵魂不安分的李纳斯,想去优化它。 抛砖引玉:Unix的不完美,催生“宝玉”Linux1991年初,22岁的李纳斯,花3500美元,分期付款买了台杂牌组装电脑,然后又买了MINIX(Mini Unix的缩写)操作系统。 李纳斯在摸清MINIX 的优点缺点后,把MINIX系统改成了自己得心应手的「战斗机」。也就是在这台电脑上,Linux的初始版本诞生了。Linux的形象是一个企鹅,之所以用企鹅,是因为李纳斯曾被企鹅咬过 事后回忆这段经历,李纳斯说,“这花费了我大量的精力:编程-睡觉-编程-睡觉-编程-吃饭(饼干)-编程-睡觉-编程-洗澡(冲冲了事)-编程”。 熬了四五个月昏天黑地的日子后,这位刚过弱冠之年的北欧大鼻子青年,开发出了Linux 0.01。自此,他成了那个时代,被追捧的程序员偶像。青年李纳斯 不过,比生孩子更重要的,是养孩子。Linux之所以成功,主要凭借它的开源特点。 Linux从出生,就打着开源的烙印,这对Linux的后续发展至关重要。从1991年,内核0.01版本发布,到1994年1.0版本登场,世界各地无数的开发者,都为Linux提交了代码。 李纳斯还为Linux建立了讨论组comp.os.linux,吸引全世界的程序员,不断地推进Linux长成巨人。comp.os.linux讨论组截图 对于Linux的成功,他“归功”于自己的缺点:1.他很懒散;2.他喜欢授权给其他人。 作为版权所有者,李纳斯如此制定Linux规则:1.可免费使用该操作系统,但不得将它作为商品。2.对其所作的改动和改进,必须以源代码的形式,将其公开(而不是二进制,这是不公开的)。3.如不同意以上规定,则无权对它进行复制或从事任何行为。 硅谷多了个小李子1996年底,李纳斯在接到Transmeta(全美达)这家在美国并不知名的公司的offer后,离开芬兰飞赴美国。在全美达,一待就是六年。 某种程度上,这六年,严重影响了Linux操作系统的前进,因为李纳斯成了“硅谷小李子·没时间·分身乏术打工男”。 好在李纳斯在离开全美达后,开始为开放源代码开发实验室(OSDL : Open Source Development Labs, Inc)工作。 这一次,Linux终于迎来系统人生第二春。交恶微软,拒绝苹果 Linux出现前,桌面操作系统基本由微软和苹果控制。Linux出现后,桌面操作系统的蛋糕格局,依旧变化甚小,但服务器端市场却是瞬息万变。 最初,微软希望在服务器领域,复制桌面操作系统的辉煌,然而半路杀出的 Linux竟在后来,占据了服务器市场半壁江山。商场如战场,李纳斯也因此,和微软结下梁子。他的头像,被钉在了微软公司的飞镖靶心上。李纳斯对此调侃道,“一定是我的大鼻子太好瞄准了。”大鼻子·李 而李纳斯和苹果之间,就没那么剑拔弩张,毕竟Linux和OS X也算是一起从前辈Unix那里一起学(mo)过(fang)的同门师兄。 而且,他还收到了乔布斯发来的工作邀约,前提是——停止开发Linux。 面对乔帮主邀约,李纳斯果然没有……接受,他说,“为什么我要关心这些?为什么我要对苹果公司的故事表现出兴趣?我不觉得苹果公司所做的事情有什么吸引我的地方。我一生的目标也不是占领什么面操作系统的市场(的确,虽然我马上就要做到这点了,但这从来就不是我的生活目标)。” 这次“谈判”虽不愉快,却影响了后续的IT格局。被拒了的苹果,从关注Linux转向BSD。 与此同时,Linux的开源模式,也红得发紫。Linux 1.0版本推出后,很多基于Linux操作系统的公司纷纷冒出,“红帽”公司便是典型代表,连IBM和英特尔,也给Linux打call。1999年,IBM还花费10亿美元来推广Linux。本鹅就是这么红,红红红红 Linux以开源、独立、自由之风,在服务器端大获成功,甚至可以说,没有Linux,就没有互联网的今天。 再后来,移动互联网时代来了。OS X发出了新枝——iOS,Linux则诞生了 Android,而这两位共同的祖父,就是Unix。 或许,这就是命吧! 当初,乔布斯和李纳斯的一次不愉快谈话,让OS X和Linux井水不犯河水。十几年后的今天,它们的“后代”,终于还是成了肩并肩行走在移动互联网时代的双子星。 不爱名利爱代码 凭借Linux,李纳斯获得了无数成就和荣誉。其中,曾两次给李纳斯颁发奖项的美国《时代》周刊,对其给出了极高的评价: “有些人生来就具有统率百万人的领袖风范;另一些人则是为写出颠覆世界的软件而生。唯一一个能同时做到这两者的人,就是托瓦兹(李纳斯的姓氏)”。 甚至,在《时代》周刊根据读者投票,评选出的二十世纪100位最重要人物中,林纳斯竟排到第15位,而从20世纪的最后几年,就开始霸占全球首富称号的比尔·盖茨,是第17位。 然而,他却是一个不像名人的名人,他和妻子——芬兰空手道冠军托夫、以及两个女儿,住在圣克拉拉的一个公寓里。对于“Linux之父”的美誉,他声称自己发明LINUX“只是为了好玩”。 而他的名为《Just for Fun》的自传,也呼应了他的淡泊。李纳斯的自传《Just for Fun》 如果说他有啥缺点的话,大概就是会在社交媒体爆粗口、以及会因为技术问题而在演讲中竖中指。 在中国,有无可能成为“XX之父”? 中国晚于欧美“触网”,所以国内也相对缺少,能成为程序员们的压倒性偶像的人物。 不过在中国,比李纳斯大5岁的、有着“WPS之父”之称的求伯君,曾于1988年,独自开发出WPS,时年仅24岁。求伯君 巧合是,两个人创立传奇的工具都是386电脑,或许,是时代造就了李纳斯和求伯君这样的独立软件英雄。 当然,仁者见仁,或许每个程序员心中,都有一个专属自己的榜样。 当下,中国已是仅次于美国的互联网第二大国,没准看文章的你,就是下一个“XX之父”呢?愿未来可期! 最后,生日快乐,Linux! 本文转载自: https://zhuanlan.zhihu.com/p/43241810本文简述了Linus创造出Linux的故事,又正值Linux生日,特转载记录。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/09/01/交恶微软、拒绝乔布斯,21岁的他是如何开发出Linux的?/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Atom编辑器里的中间竖线的意义何在?]]></title>
<url>%2F2018%2F08%2F30%2FAtom%E7%BC%96%E8%BE%91%E5%99%A8%E9%87%8C%E7%9A%84%E4%B8%AD%E9%97%B4%E8%99%9A%E7%BA%BF%E7%9A%84%E6%84%8F%E4%B9%89%E4%BD%95%E5%9C%A8%2F</url>
<content type="text"><![CDATA[Windows平台上有很多的编辑器,但是我个人认为atom是最好用的编辑器,我本人也是一直在用。atom支持markdown语法,插件丰富,可以连接GitHub账户,可谓是优点多多。但是不知道各位发现了没有,你打开atom,在编辑器里总是会出现一个竖线。为什么会出现这个竖线呢?其实这个竖线是wrap-guide插件引起的,该插件为atom默认安装的插件。如何关闭atom中的这个竖线呢?我们可以在“设置”—“扩展”—“已安装扩展”中找到wrap-guide插件。点击“关闭”按钮就不会再出现竖线了。这个竖线有什么用呢?这个竖线其实是一个规则亦或是标准,也许说是一个标尺更为合适,它表示了代码到了这里该换行,有些语言每行字符是不能超过80个字符的。我们可以打开“设置”—“编辑器设置”—“一行的长度”,可以看到默认是80个,我们可以修改数字来改变这个默认值。其实,当我们真正理解这个竖线的意义的时候,我们可能会改变去掉这个竖线的念头,它对于我们并不是没有任何意义的。这个竖线给了我们一个标准,我们可以通过该竖线来适当换行。现在不论是写什么,我都会在遇到这个竖线的时候另起一行。这样写的东西也会更加工作整齐。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/30/Atom编辑器里的中间虚线的意义何在/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>atom</tag>
</tags>
</entry>
<entry>
<title><![CDATA[容器与虚拟化技术实现原理对比]]></title>
<url>%2F2018%2F08%2F28%2F%E5%AE%B9%E5%99%A8%E4%B8%8E%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86%E5%AF%B9%E6%AF%94%2F</url>
<content type="text"><![CDATA[在互联网技术日益革新、产品快速迭代的今天,如何在提高资源使用率、提升效率的同时又兼顾互不干涉、安全隔离的原则,促使了虚拟化技术和容器技术的相继诞生。 虚拟化技术有KVM、VMWare等并驾齐驱,容器技术为docker独领风骚。 传统虚拟化技术与容器虚拟化技术的简要技术架构对比如下: Part.1 虚拟化技术虚拟化技术是指在同一台计算机上通过hypervisor虚拟出多个包括完整虚拟机系统镜像,每个虚拟机拥有独立的操作系统和硬件资源。 以KVM为例,下面初探一下虚拟化技术的实现原理。 1.1 KVM虚拟化技术KVM虚拟化的实现,主要是通过嵌入linux内核的kvm模块与QEMU相互配合实现全虚拟化,而两者的通信主要通过一系列针对特殊设备文件/dev/kvm的IOCTL调用实现。 Kvm模块的主要功能为cpu虚拟化+内存虚拟化,在提供虚拟化功能时,它会暴露一个/dev/kvm的接口,这个接口主要是用来创建和运行vCPU(虚拟CPU)以及分配虚拟内存空间、vCPU寄存器的读写。 而QEMU则是以动态二进制转换来创建和管理各种设备,通过IOCTL调用kvm的接口将部分CPU指令交给vCPU执行,kvm也依赖qemu模拟IO设备(磁盘,网卡,显卡等),从而实现完整意义上的全虚拟化。 从下图QEMU简化的内核代码可以管中窥豹领略两者的联系。 Qemu启动代码:可以看到,kvm提供了一个设备/dev/kvm,对kvm的控制要通过这个设备提供的io_ctl接口实现。 Kvm内核在主机上虚拟出vCPU,虚拟内存,再通过QEMU创建和管理各个虚拟I/O设备包括虚拟网卡,磁盘等,安装上OS(操作系统),实现虚拟机创建的每个虚拟机相当于独立出来的计算机。 1.2 举个例子从技术上无法理解的童鞋可以不看上面的原理,我用通俗的语言说明一下,好比我们有一个冷藏室,我有很多种类的食物需要冷藏,但是为了空间利用,快速分类和互不串味,虚拟化技术的实现就是将冷藏室隔成各个小库房,并且把冷冻机拆开组装成多个小制冷机每个房间放一个,这样小房间温度也可控,而且味道也不会串。Part.2 容器技术 容器技术是后于虚拟化技术出现的,如果说虚拟化技术的出现主要是为了解决资源调配和隔离的问题,那么容器技术解决的是应用开发、测试和部署等提升效率的问题。而Docker在众多容器解决方案中脱颖而出,俨然成为了容器技术的代表,现在就以Docker为例,介绍一下容器技术的实现原理。 2.1 DockerDocker的理念为“Build,Ship and Run Any App,Anywhere”,非常美好的愿景。为了实现这个目标,Docker通过Namespace分离进程,隔离网络接口、挂载点和进程间通信,使用Croups将CPU和内存等物理资源隔离开,这样就将一个完全对宿主机“一无所知”而且拥有“独立”资源的容器构造出来了,相比虚拟化技术,实际上容器还是容器之间共享同一个系统内核。 2.1.1 NamespaceNamespace的目的为通过抽象方法使得namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例,linux内核实现了六种namespace:Mount namespaces,UTS namespaces,IPC namespaces,PID namespaces,Network namespaces,User namespaces,分别的功能为:隔离文件系统、定义hostname和domainame、特定的进程间通信资源、独立进程ID结构、独立网络设备、用户和组ID空间。 Docker在创建一个容器的时候,会创建以上六种Namespace实例,然后将隔离的系统资源放入到相应的Namespace中,使得每个容器只能看到自己独立的系统资源。 以PID namespaces为例,Docker是怎么使容器拥有独立的PID空间的: Linux内核中通过pid_namespace隔离PID,首先来看下pid_namespace的简要数据结构: struct pid_namespace { struct kref kref; //引用计数 struct pidmap pidmap[PIDMAP_ENTRIES]; //pid分配的bitmap,如果位为1,表示这个pid已经分配了 int last_pid; //记录上次分配的pid,理论上,当前分配的pid=last_pid+1 struct task_struct *child_reaper; //表示进程结束后,需要这个child_reaper进程对这个进程进行托管 struct kmem_cache *pid_cachep; unsigned int level; //记录这个pid namespace的深度 struct pid_namespace *parent; //记录父pid namespace struct fs_pin *bacct; #endif }; 其中数组pidmap记录了PID的分配情况,每一位代表了对应偏移量的PID是否分配,保证了PID不重复。 每一个进程都会生成一个task_struct,task_struct的简单数据结构如下: struct task_struct { …………. pid_t pid; struct pid_link pids[PIDTYPE_MAX]; …………. } 其中pid的简单数据结构如下: struct pid { unsigned int level; //这个pid所在的层级 struct hlist_head tasks[PIDTYPE_MAX]; //一个hash表,又三个表头,分别是pid表头,进程组id表头,会话id表头,用于和task_struct进行关联 struct upid numbers[1]; //这个pid对应的命名空间,一个pid不仅要包含当前的pid,还有包含父命名空间,默认大小为1,所以就处于根命名空间中 }; 可以看出来,PID namespace主要通过以上三种数据结构的关联,将容器内部也就是独立的namespace中的uPID与宿主机上的PID建立起查找关系。 具体的做法为,task_struct结构体中的pid_link成员的node字段就被邻接到pid中的upid。upid通过pid_hash和pid数值关联了起来,这样就可以通过pid数值快速的找到所有命名空间的upid结构,numbers是一个struct pid的最后一个成员,利用可变数组来表示这个pid结构当前有多少个命名空间.这样Docker就实现了容器进程间PID的隔离。 其它系统资源的实现方式虽然与PID隔离有所差异,但是总体来说大同小异,都是通过linux内核的namespace实现资源隔离。 2.1.2 Croups前面介绍了Docker如何将系统资源进行隔离,下面简单介绍一下Docker如何利用Croups控制各个容器使用系系统资源。 Croups也是linux内核中提供一种机制,它的功能主要是限制、记录、隔离进程所使用的物理资源,比如:CPU、mermory、IO、network等,下面我们就看看它是如何做到的吧。 简单来说,Cgroups在接收到调用时,会给指定的进程挂上钩子,这个钩子会在资源被使用的时候触发,触发时会根据资源的类别(CPU,mermory,io等)使用对应的方法进行限制。 Croups中有一个术语叫做subsystem(子系统),也就是一个资源调度控制器,CPU subsystem负责CPU的时间分配,mermory subsystem负责mermory的使用量等。Cgroups的资源控制单位为组称之为cgroup,每个cgroup都包含一个或者多个subsystem。当一个任务加入了某个cgroup,cgroup对应的subsystem就开始工作,像上文提到的钩子就会触发subsystem进行资源的限制。 Docker 启动一个容器后,会在/sys/fs/cgroup目录下生成带有此容器ID的文件夹,里面就是调用Croups的配置文件,从而实现通过cgroups限制容器的资源使用率。 2.2 举个例子结合最开始虚拟化的例子,我们有一个冷藏室,容器化技术就好比将冷藏室隔成各个小房间(namespace),然后用导管和阀门(cgroups)将冷气输送到各个房间。相比与之前提到的“虚拟化冷藏”,这种方式占用更少的资源和扩展启动速度更快的优点。 Part.3 总结综上,虚拟化技术为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。容器化技术为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,容器之间共享同一个系统内核。 两种技术都有各自的优点,比如虚拟化有更佳的隔离性和安全性,容器化快速扩展、灵活性和易用性。也有各自的缺点,比如虚拟化技术实施难度高、更新和升级困难、相比容器过于笨重。容器化技术也存在较差的隔离性、安全性不高(宿主机被感染,所有容器受到影响)等缺点。 虽然两者的出现希望解决相同的问题,但是目前看来,并无孰优孰劣的定论。反而将两种技术结合起来,一个容器中运行一个虚拟机或者一个虚拟机中运行多个容器。这样,既保证了强隔离性和安全性的同时,也有了快速扩展、灵活性和易用性。所以说,除了世界上最好的语言PHP,技术都是不完美的,但是不能阻挡我们追求完美的步伐,就酱. 转载文章 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/28/容器与虚拟化技术实现原理对比/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>虚拟化</category>
</categories>
<tags>
<tag>虚拟化</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo在新建文章时候怎么默认在.md文件中添加categories标签]]></title>
<url>%2F2018%2F08%2F25%2FHexo%E5%86%8D%E6%96%B0%E5%BB%BA%E6%96%87%E7%AB%A0%E6%97%B6%E5%80%99%E6%80%8E%E4%B9%88%E9%BB%98%E8%AE%A4%E5%9C%A8-md%E6%96%87%E4%BB%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0categories%E6%A0%87%E7%AD%BE%2F</url>
<content type="text"><![CDATA[我属于那种懒癌症晚期的人,所以只要可以省点力气就会千方百计的省。最近发现在写博客,新建文章时候,每次都要手动添加categories和photos标签。我实在受不了啊(苦恼>︿<)在我不懈的努力下,终于找到了解决办法。在博客的scaffolds文件夹里有个post.md文件,添加上需要的配置就行了。默认是只有tags标签。我们新建一篇文章后,可以看到也是只有tags标签,我们只能手动添加categories和photos标签。我们在post.md中添加需要的配置信息即可。下面是我个人的配置,你只需要按照你个人的需求设置即可。1234567---title: {{ title }}date: {{ date }}tags:categories:photos:--- 然后我们打开Git。1234# 清除静态页面缓存(清除 public 文件夹)git clean# 在本地生成静态页面(生成 public 文件夹)git g 你现在可以使用hexo new “new_blogname”新建一篇文章,并测试一下效果。部署1234# 启动本地服务 http://localhost:4000,进行预览调试hexo s# 远程部署,同步到 GitHubhexo d 下面我感觉十分有必要说说该模板文件的具体配置。(这部分属于进阶,你可以忽略不看,但是看完过后你对hexo一定会有个 更深刻的认识的)在hexo中文章的—分割区域属于Front-matter,用于指定个别文件的变量。以下是预先定义的参数,我们可在模板中使用这些参数值并加以利用。 参数 描述 默认值 layout 布局 title 标题 date 建立日期 文件建立日期 updated 更新日期 文件更新日期 comments 开启文章的评论功能 true tags 标签(不适用于分页) categories 分类(不适用于分页) permalink 覆盖文章网址 Hexo中有一个模板文件夹scaffolds。该文件夹主要用于设置文章的布局。注意:这不是博客网页的布局。我们刚才在设置post.md时候,里面的参数就需要从此表格中选定,我们不能随便添加额外的参数,这样会导致博客出现混乱现象。更多说明请移步:hexo Front-matter关于Scaffold文件夹的更多信息可查阅hexo模板打开scaffold文件夹可以看到三个文件。三个文件各司其职。 布局 解释 路径 注释 post 文章 source/_posts 新建一个文章文件 draft 草稿 source/_drafts 新建一个草稿文件 page 页面 source 新建一个页面文件 不过需要注意的是source文件夹里默认是没有draft和page文件的,你可以去主题的_config.yml中配置就有了。 参考:hexo写作 所以我们可以看出,我们只需要修改post.md即可配置出发表文章的模板来。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/25/Hexo再新建文章时候怎么默认在-md文件中添加categories标签/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>Markdown</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Git常用命令速查手册]]></title>
<url>%2F2018%2F08%2F24%2FGit%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5%E8%A1%A8%2F</url>
<content type="text"><![CDATA[Github名词释义 master: 默认开发分支 origin: 默认远程版本库 Index / Stage:暂存区 Workspace:工作区 Repository:仓库区(或本地仓库) Remote:远程仓库 Git原理 分布式版本控制 直接记录快照,而非差异比较 五个工作区域:工作区,暂存区、本地代码库、本地远程代码库、远程远程代码库 四种文件状态:未修改,已修改、已暂存、已提交,已推送(已推送=未修改) Git操作新建代码仓库1234567891011# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url] 配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。123456789101112131415161718192021222324252627282930313233# 显示当前的Git配置$ git config --list# 编辑Git配置文件$ git config -e [--global]# 设置提交代码时的用户信息$ git config [--global] user.name "[name]" # 修改用户名$ git config [--global] user.email "[email address]" # 修改邮箱地址# 修改编译器为 vim$ git config --global core.editor vim# status 缩写为 st$ git config --global alias.st status# checkout 缩写为 co$ git config --global alias.co checkout# branch 缩写为 br$ git config --global alias.br branch# commit 缩写为 ci$ git config --global alias.ci commit 增加/删除/修改文件12345678910111213141516171819202122232425262728293031323334353637#查看状态$ git status #查看变更内容$ git diff # 添加指定文件到暂存区$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录$ git add [dir]# 添加当前目录的所有文件到暂存区$ git add .# 添加每个变化前,都会要求确认# 对于同一个文件的多处变化,可以实现分次提交$ git add -p# 删除工作区文件,并且将这次删除放入暂存区$ git rm [file1] [file2] ...# 停止追踪指定文件,但该文件会保留在工作区$ git rm --cached [file]# 改名文件,并且将这个改名放入暂存区$ git mv [file-original] [file-renamed] 代码提交12345678910111213141516171819202122232425# 提交暂存区到仓库区,message代表说明信息$ git commit -m [message]# 提交暂存区的指定文件到仓库区$ git commit [file1] [file2] ... -m [message]# 提交工作区自上次commit之后的变化,直接到仓库区$ git commit -a# 提交时显示所有diff信息$ git commit -v# 使用一次新的commit,替代上一次提交# 如果代码没有任何新变化,则用来改写上一次commit的提交信息$ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新变化$ git commit --amend [file1] [file2] ... 分支12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#显示所有本地分支$ git branch # 列出所有远程分支$ git branch -r# 列出所有本地分支和远程分支$ git branch -a# 新建一个分支,但依然停留在当前分支$ git branch [branch-name]# 新建一个分支,与指定的远程分支建立追踪关系$ git branch --track [branch] [remote-branch]# 删除分支$ git branch -d [branch-name]# 删除远程分支$ git push origin --delete [branch-name]$ git branch -dr [remote/branch]# 撤销某一个文件当前的修改$ git chechout [FILE]# 新建一个分支,并切换到该分支$ git checkout -b [branch]# 切换到指定分支,并更新工作区$ git checkout [branch-name]# 切换到上一个分支$ git checkout -# 建立追踪关系,在现有分支与指定的远程分支之间$ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到当前分支$ git merge [branch]#衍合指定分支到当前分支$ git rebase <branch> # 选择一个commit,合并进当前分支$ git cherry-pick [commit] 标签123456789$ git tag #列出所有本地标签$ git tag <tagname> #基于最新提交创建标签$ git tag -a [tagname] -m [message] # 创建标签,基于最新版本提交,附带注释信息$ git tag -a [tagname] -m [message] [CommitID] # 创建标签,基于指定的Commit,附带注释信息$ git tag -d <tagname> #删除标签 1234567891011121314151617181920212223# 删除远程tag$ git push origin :refs/tags/[tagName]# 查看tag信息$ git show [tag]# 提交指定tag$ git push [remote] [tag]# 提交所有tag$ git push [remote] --tags# 配合Gerrit使用$ git push origin [tagname]:refs/tags/[tagname]# 新建一个分支,指向某个tag$ git checkout -b [branch] [tag] 查看信息123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293# 显示有变更的文件$ git status# 查看指定文件状态$ git status [FILE]# 显示当前分支的版本历史$ git log# 显示commit历史,以及每次commit发生变更的文件$ git log --stat# 搜索提交历史,根据关键词$ git log -S [keyword]# 显示某个commit之后的所有变动,每个commit占据一行$ git log [tag] HEAD --pretty=format:%s# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件$ git log [tag] HEAD --grep feature# 显示某个文件的版本历史,包括文件改名$ git log --follow [file]$ git whatchanged [file]# 显示指定文件相关的每一次diff$ git log -p [file]# 显示过去5次提交$ git log -5 --pretty --oneline# 显示所有提交过的用户,按提交次数排序# 查看代码库日志,简洁有图$ git log --graph --pretty=oneline --abbrev-commit -20$ git shortlog -sn# 显示指定文件是什么人在什么时间修改过$ git blame [file]# 显示暂存区和工作区的差异$ git diff# 显示暂存区和上一个commit的差异$ git diff --cached [file]# 显示工作区与当前分支最新commit之间的差异$ git diff HEAD# 查看变更内容,对比本地代码库与本地远程代码库,origin代表远程的意思$ git diff master origin/master# 显示两次提交之间的差异$ git diff [first-branch]...[second-branch]# 显示今天你写了多少行代码$ git diff --shortstat "@{0 day ago}"# 显示某次提交的元数据和内容变化$ git show [commit]# 显示某次提交发生变化的文件$ git show --name-only [commit]# 显示某次提交时,某个文件的内容$ git show [commit]:[filename]# 显示当前分支的最近几次提交$ git reflog 远程操作123456789101112131415161718192021222324252627282930313233343536373839# 下载远程仓库的所有变动$ git fetch [remote]# 取回远程仓库的变化,并与本地分支合并$ git pull [remote] [branch]# 显示所有远程仓库$ git remote -v# 显示某个远程仓库的信息$ git remote show [remote]# 增加一个新的远程仓库,并命名$ git remote add [shortname] [url]# 从远程远程库获取代码到本地远程库$ git fetch [remote]# 上传本地指定分支到远程仓库$ git push [remote] [branch]# 强行推送当前分支到远程仓库,即使有冲突$ git push [remote] --force# 推送所有分支到远程仓库$ git push [remote] --all# 下载代码及快速合并$ git pull [remote] [branch] 12345$ git push [remote] [branch] # 上传代码及快速合并,把所有文件从本地仓库推送进远程仓库$ git push <remote> :<branch/tag-name> # 删除远程分支或标签$ git push --tags # 上传所有标签 撤销123456789$ git reset --hard HEAD # 撤销工作目录中所有未提交文件的修改内容$ git checkout HEAD <file> # 撤销指定的未提交文件的修改内容$ git revert <commit> # 撤销指定的提交$ git clean -xfd # 清除所有非GIT跟踪文件,例如编译生成的内容$ git log --before="1 days" # 退回到之前1天的版本 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667# 恢复暂存区的指定文件到工作区$ git checkout [file]# 恢复某个commit的指定文件到暂存区和工作区$ git checkout [commit] [file]# 恢复暂存区的所有文件到工作区$ git checkout .# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变$ git reset [file]# 将文件从暂存区中回退到工作区,git add的反操作$ git reset HEAD# 只改变提交点,工作目录与暂存区中内容都不改变$ git reset --soft HEAD# 回撤到指定版本$ git reset 版本号(前七位)# 回撤到当前版本,撤销工作目录与暂存区中的所有内容$ git reset --hard HEAD# 回撤到上一个版本$ git reset --hard HEAD^# 回撤到上上一个版本$ git reset --hard HEAD^^# 重置暂存区与工作区,与上一次commit保持一致$ git reset --hard# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变$ git reset [commit]# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致$ git reset --hard [commit]# 重置当前HEAD为指定commit,但保持暂存区和工作区不变$ git reset --keep [commit]# 新建一个commit,用来撤销指定commit# 后者的所有变化都将被前者抵消,并且应用到当前分支$ git revert [commit]# 暂时将未提交的变化移除,稍后再移入$ git stash$ git stash pop 其他12345$ git archive # 生成一个可供发布的压缩包$ git log --graph --pretty=oneline --abbrev-commit -20$ git push origin master:refs/for/master Gerrit日常开发 master 常驻分支,要求常驻分支时刻可用 feature-XXX 功能分支,新建分支用于开发新功能 bugfix-XXX 问题分支,新建分支用于修改问题下载版本 BASE_IPC_HI3518EV200_SPC0401git clone & scp 新建分支1git checkout -b feature-XXX master 在新分支上完成功能修改和测试验证12git addgit commit -m "XXX" 将功能合并到master123git checkout master # 切换到master分支git pull --rebase # 更新代码 合并操作有如下四种方式: git merge --no-ff -m "XXXX" feature-XXX/bugfix-XXX 合并修改到master并commit,在master中可以查看到分支的log历史。如果产生冲突,通过git status 查看冲突文件,手动解决冲突后 git add,git commit git merge --squash -m "XXXX" feature-XXX/bugfix-XXX 合并修改到master分支并commit,分支的所有修改一次commit到master,无法在master中查看分支的log历史,需要稍后手动 git commit git rebase feature-XXX/bugfix-XXX 合并修改到master分支,master的修改和commit将接在分支修改的末端,合并后log中无法查看到分支的存在 git cherry-pick [Commit-ID].... 合并指定的修改到master分支,分支修改会合并到master历史log的末端,如果发生冲突,手动解决冲突后 git add,git cherry-pick --continue -m "XXXX"` git branch -d feature-XXX/bugfix-XXX ` 删除指定分支 上传远程服务器1git push origin master:refs/for/master git push origin master:refs/for/master 参考文章:https://mp.weixin.qq.com/s/xezQTCV9s-L0sjqkXgtCog 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/24/Git常用命令速查表/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title><![CDATA[科学上网教程5-全平台软件萤火虫]]></title>
<url>%2F2018%2F08%2F23%2F%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91%E6%95%99%E7%A8%8B5-%E5%85%A8%E5%B9%B3%E5%8F%B0%E8%BD%AF%E4%BB%B6%E8%90%A4%E7%81%AB%E8%99%AB%2F</url>
<content type="text"><![CDATA[下载 Windows: 安装版 | 单文件版 Android 4.0.3 及以上: 直接下载 | Google Play iOS 9.3 及以上: 中国 App Store | US App Store OSX: 安装版 | 单文件版 Ubuntu 64位: 安装版 | 单文件版 Ubuntu 32位: 安装版 | 单文件版 项目地址: https://github.com/yinghuocho/firefly-proxy 以Ubuntu版本为例说明。首先直接下载.deb安装包,然后进行安装。1lengyue@ubuntu:~$ sudo dpkg -i firefly_linux_amd64_install.deb 然后终端输入firefly打开即可使用。至于速度方面,我个人认为还是很可以的。动图演示: 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/23/科学上网教程5-全平台软件萤火虫/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>科学上网</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
<tag>科学上网</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo博客显示markdown流程图]]></title>
<url>%2F2018%2F08%2F22%2FHexo%E5%8D%9A%E5%AE%A2%E6%98%BE%E7%A4%BAmarkdown%E6%B5%81%E7%A8%8B%E5%9B%BE%2F</url>
<content type="text"><![CDATA[Markdown语法是支持流程图、序列图的。但是我们需要安装一个插件来实现。插件地址:https://github.com/bubkoo/hexo-filter-flowchart 安装先进入你的博客根目录,然后输入以下命令1npm install --save hexo-filter-flowchart 使用打开你的hexo博客的 站点配置文件_config.yml 。然后找一个位置,把下面的代码复制进去,注意对齐和缩进。这是为了方便自定义该插件的配置选项,我们只需要修改以下少量代码就可成功配置,而不必去烦乱的代码里修改插件的配置文件。(当然即使你不去博客的配置文件中进行配置,也是可以正常使用的。如果你不会添加,请忽略此步)1234flowchart: # raphael: # optional, the source url of raphael.js # flowchart: # optional, the source url of flowchart.js options: # options used for `drawSVG` 我们可以根据自己的使用习惯进行修改,默认配置为如下所示。我们同时需要根据该默认配置来自定义配置。1234567891011{ "raphael": "https://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.7/raphael.min.js", "flowchart": "https://cdnjs.cloudflare.com/ajax/libs/flowchart/1.6.5/flowchart.min.js", "options": { "scale": 1, "line-width": 2, "line-length": 50, "text-margin": 10, "font-size": 12 }} 接下来我们可以用markdown语法画一个流程图来测试一下是否已经安装成功。语法参照1234567891011121314151617```flowst=>start: Start|past:>http://www.google.com[blank]e=>end: End:>http://www.google.comop1=>operation: My Operation|pastop2=>operation: Stuff|currentsub1=>subroutine: My Subroutine|invalidcond=>condition: Yesor No?|approved:>http://www.google.comc2=>condition: Good idea|rejectedio=>inputoutput: catch something...|requestst->op1(right)->condcond(yes, right)->c2cond(no)->sub1(left)->op1c2(yes)->io->ec2(no)->op2->e``` 然后提交123hexo cleanhexo ghexo d 当你在你的博客中看到如下所示的图,就说明你已经成功了。 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/22/Hexo博客显示markdown流程图/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>Markdown</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Hexo中插入HTML表格出现过多空白的解决办法]]></title>
<url>%2F2018%2F08%2F20%2Fhexo%E4%B8%AD%E6%8F%92%E5%85%A5HTML%E8%A1%A8%E6%A0%BC%E5%87%BA%E7%8E%B0%E8%BF%87%E5%A4%9A%E7%A9%BA%E7%99%BD%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95%2F</url>
<content type="text"><![CDATA[早先我写博客的时候,就发现Hexo中插入HTML表格会留出大量空白。虽然markdown语法也是可以生成表格的,但是写的时候特别麻烦,所以我一直是直接插入的HTML表格的,仅仅是因为简单高效。当时,我刚搭建好这个博客,所以对hexo并不是很了解。我当时以为这只是在我个人markdown语法用的不对或者是编辑器造成的,造成了表格出现大量空白,此后也并没有解决这件事,遇到需要表格的文章时,都是直接插入图片代替的,大家在一些文章中可以看到表格基本都是用图片代替了。最近我又写博客的时候,又出现了这个问题,才发现这也许是hexo的一个bug。下面开始分析并解决这个问题。我用下面的HTML代码做一个表格。12345678910<table> <tr> <th>姓名</th> <th>性别</th> </tr> <tr> <td>冰羽</td> <td>男</td> </tr></table> Tips: 出现的大量空白是为了演示使用,这里会出现一个表格。 姓名 性别 冰羽 男 可以看到在atom编辑器中预览的时候,并没有出现大量的空白。这说明并不是编辑器的问题。而我用markdown语法写出的内容也没有任何涉及到表格的,也绝对不是markdown语法的问题。我们可以在浏览器中右击“查看源代码”,找到这个表格会看到,多出很多<br>标签来。html中<br>标签用于换行。我后来在hexo的Issues中也发现了其他人出现了这个问题。然后开始各种找解决办法,下面给出两种解决办法。 解决方法1将代码改为紧凑模式,修改代码如下1<table><tr><th>姓名</th><th>性别</th></tr><tr><td>冰羽</td><td>男</td></tr></table> 也就是说代码标签之间不要留白,全部改为紧贴着的。Tips 这里会出现一个表格,没有大量空白 姓名性别冰羽男我们还可以利用这个Table Generator在线工具来编辑表格,提供了html表格和markdown表格来生成用于hexo的表格 解决方法2(推荐)123{% raw %}html tags & content{% endraw %} 我们可以利用上面的格式来编写表格,我个人认为这种最为简单便捷。我们只需要把代码修改为以下这样即可。 123456789101112{% raw %} <table> <tr> <th>姓名</th> <th>性别</th> </tr> <tr> <td>冰羽</td> <td>男</td> </tr></table>{% endraw %} 姓名 性别 冰羽 男 生成的表格同样不会出现大量空白。 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/20/hexo中插入HTML表格出现过多空白的解决办法/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Hexo</category>
</categories>
<tags>
<tag>Hexo</tag>
<tag>Markdown</tag>
</tags>
</entry>
<entry>
<title><![CDATA[科学上网教程4-Linux实现科学上网]]></title>
<url>%2F2018%2F08%2F19%2F%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91%E6%95%99%E7%A8%8B4-Linux%E5%AE%9E%E7%8E%B0%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91%2F</url>
<content type="text"><![CDATA[我以前写过用openvpn在kali上实现科学上网,点击查看今天换个软件,我们用大名鼎鼎的蓝灯来实现。我试过了,Linux的蓝灯还是很稳的,我一直都在用。蓝灯的项目地址:https://github.com/getlantern/download当然,我蓝灯同时还具备了Widows、Android、Mac版本,所以基本可以满足大家的需要,但是今天只以Linux版本举例来说,其他版本用法基本相同。首先我们先下载,这是.deb安装包,适合Ubuntu、Debian、kali等系统安装。 32位下载64位下载 Tips: 官方提供的这个软件包是Ubuntu 14.04的,但是我用16.04也安装成功并可正常使用。下载完成后,我们进入蓝灯软件包所在目录。下面开始安装1lengyue@ubuntu:~$ sudo dpkg -i lantern-installer-64-bit.deb 安装成功后,我们直接在终端打开测试一下,此时你应该具备一个良好的网络环境。1lengyue@ubuntu:~$ lantern 连接可能会有点慢,但是这些完全取决于你的网速,你需要有耐心等待一会。当出现蓝灯图标变为蓝色的时候,就说明已经成功连接了。可以看到成功打开了谷歌。我个人感觉速度十分的快,而且很稳定,为了证明,请看下面的动图。怎么样,还是很可以的吧,反正我用Google搜索和看YouTube视频一点没感觉卡。好了,如果大家有更好的方法也欢迎推荐一下哦(o゚v゚)ノ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/19/科学上网教程4-Linux实现科学上网/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>科学上网</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
<tag>科学上网</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Git常用命令汇总]]></title>
<url>%2F2018%2F08%2F13%2FGit%E5%91%BD%E4%BB%A4%E6%B1%87%E6%80%BB%2F</url>
<content type="text"><![CDATA[(以下排序按照是否常用进行)12345678910111213141516git clone # 获取远程仓库git push # 推送至远程仓库git pull # 获取最新的远程仓库分支git init # 初始化仓库git remote add # 添加远程苍老git status # 查看仓库状态git add # 向暂存区添加文件git commit # 保存仓库历史记录git log # 查看提交日志git reset # 回溯历史版本git diff # 查看更改前后差别git branch # 显示分支一览表git checkout # 创建、切换分支git merge # 合并分支git reflog # 查看当前仓库执行过的操作日志git rebase # 压缩为一个历史记录 下面是一些可以帮助深入理解Git的资料以及网站https://git-scm.com/book/zh/v2 (《Pro Git》在线阅读,还可以免费下载PDF、equb电子书)http://try.github.io/ (web上尝试操作git的网站,需要翻墙)https://learngitbranching.js.org/ (学习Git命令的在线练习网站,强烈推荐,需要翻墙) 本文参考自《GitHub从入门到实战》 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/13/Git命令汇总/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>Git</tag>
</tags>
</entry>
<entry>
<title><![CDATA[利用Django搭建博客]]></title>
<url>%2F2018%2F08%2F10%2F%E5%88%A9%E7%94%A8django%E6%90%AD%E5%BB%BA%E5%8D%9A%E5%AE%A2%2F</url>
<content type="text"><![CDATA[django说明8月1日,Django 2.1发布了。此次发布有以下几个重点:最低支持Python3.5,Python3.4正式被丢弃。如果你想了解更多的更新新特性,可以查阅更新日志:https://docs.djangoproject.com/en/2.1/releases/2.1/Django 是一个python的web框架。其实django架站挺复杂的。就是20篇文章也说不完整个过程。所以今天只是简述一个过程,但是你可以放心,按照本教程操作,是可以搭建出一个简易网站的,有多简易呢?只有简单的静态html网页当然美化需要后期进行处理。我们只是做出一个样板来。但是这已经是整个过程中最重要的一步了。以后美化也只是在现有基础上进行改进工作而已。首先准备一个python环境。我以Linux环境为例介绍,但是其他操作系统也可按照此方法进行搭建。本人操作环境: Ubuntu 16.04 (LTS) [本人并没有用Mac系统,只是给Ubuntu安装了Mac主题],python2.7,django1.1.各位,以自己的实际环境为准,首先说明一点,django 1.x和django2.x的存在很大的区别,而且各版本之间存在很大的差异,不向下兼容。一切以你的环境为主。首先你应该验证一下你的python环境是否符合该django版本。12lengyue@ubuntu:~$ python -Vpython 2.7 Django对Python版本的依赖关系如下表所示Django本身的版本支持路线图如下所示 下载安装django首先下载django框架,适用pip包管理工具进行下载,并指定版本号为1.11,因为这个版本号是LTS的,可以得到很长时间的技术支持,而且该版本存在大量的学习文档,方便学习与使用。1lengyue@ubuntu:~$ sudo -H pip install django==1.11 我们从图中可以看到已经成功安装,我们还可以通过以下2个命令来进行查看是否成功安装。1234lengyue@ubuntu:~$ python -m django --versionlengyue@ubuntu:~$ python>>> import django>>> print(django.get_version()) 创建myblog项目12lengyue@ubuntu:~$ django-admin startproject mybloglengyue@ubuntu:~$ ls 下面切换到myblog目录,并创建blog应用。12345lengyue@ubuntu:~$ cd myblog/lengyue@ubuntu:~/myblog$ lsmanage.py mybloglengyue@ubuntu:~/myblog$ sudo python manange.py startapp bloglengyue@ubuntu:~/myblog$ ls 项目结构说明然后我们来看一下项目目录结构图1lengyue@ubuntu:~$ tree myblog 以下是项目的目录介绍,如果你想学习django的话,那么下面每个文件的作用都要十分的清晰。目录介绍:1234567891011121314151617181920manage.py : Django项目里面的工具,通过它可以调用django shell和数据库等。myblog/| --- settings.py : 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。| --- urls.py : 负责把URL模式映射到应用程序。| --- wsgi.py : 用于项目部署。blog /| --- admin.py : django 自带admin后面管理,将models.py 中表映射到后台。| --- apps.py : blog 应用的相关配置。| --- models.py : Django 自带的ORM,用于设计数据库表。| --- tests.py : 用于编写Django单元测试。| --- veiws.py :视图文件,用于编写功能的主要处理逻辑。 我们到 myblog/myblog/目录下,找到settings.py文件,这是django的主要配置文件。123lengyue@ubuntu:~/myblog$ cd myblog/lengyue@ubuntu:~/myblog/myblog$ ls__init__.py __init__.pyc settings.py settings.pyc urls.py wsgi.py 打开settings.py配置文件,添加blog应用。1lengyue@ubuntu:~/myblog/myblog$ sudo gedit settings.py 初始化数据库然后我们需要初始化数据库,记得一定要初始化数据库。Python 自带SQLite3数据库,Django同意也是默认使用SQLite3数据库,如果你使用其它数据库可以在settings.py文件中进行设置。此时回退到myblog目录,然后我们需要执行数据库同步,把相关表生成出来。12lengyue@ubuntu:~/myblog/myblog$ cd ..lengyue@ubuntu:~/myblog$ sudo python manage.py migrate 然后我们需要为自己的博客创建一个后台账户,以方便以后的管理,键入你创建的账户名称和密码。(一定要记住你的登陆密码)1lengyue@ubuntu:~/myblog$ sudo python manage.py createsuperuser 启动应用&访问admin后台1lengyue@ubuntu:~/myblog$ sudo python manage.py runserver 现在打开浏览器,地址栏输入 http://127.0.0.1:8000现在访问一下后台: http://127.0.0.1:8000/admin ,输入刚才创建的账户即可登陆进去。OK,一切成功,你已经做成功了最重要的步骤。下一步就是开始配置自己的博客了。我们可以看到默认的网站是英文的,而且时间也是错乱,和本机时间对不上的。其实django默认的时区是America/Chicago。现在我们开始通过配置文件来修改这些信息。12lengyue@ubuntu:~/myblog$ cd mybloglengyue@ubuntu:~/myblog/myblog$ sudo gedit settings.py 把其中的相关配置设置为如下所示。123LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'USE_TZ = False 保存退出后,我们现在刷新一下界面,OK! 创建Model(即设计数据库表)创建blog表。12lengyue@ubuntu:~/myblog$ cd bloglengyue@ubuntu:~/myblog/blog$ sudo gedit models.py 打开后,将如下内容复制进去。1234class BlogsPost(models.Model): title = models.CharField(max_length = 150) # 博客标题 body = models.TextField() # 博客正文 timestamp = models.DateTimeField() # 创建时间 在该app下建立migrations目录,该目录包含了我们创建的模型,并且指出这个类的成员属性id,name,以及他们的属性。1lengyue@ubuntu:~/myblog$ sudo python manage.py makemigrations blog 执行数据库同步,将该改动作用到数据库文件,使模型类对应的数据表。1lengyue@ubuntu:~/myblog$ sudo python manage.py migrate 创建模板在blog项目下创建templates目录(myblog/blog/templates/)。(注意: 文件名一定需要是templates,其他任何名字都会报错),不然会出现如下所示错误。并在templates目录下创建模板文件。1234lengyue@ubuntu:~/myblog$ cd bloglengyue@ubuntu:~/myblog/blog$ sudo mkdir templateslengyue@ubuntu:~/myblog/blog$ cd templateslengyue@ubuntu:~/myblog/blog/templates$ sudo touch index.html 将以下内容复制粘贴进去。12345{% for blog in blog_list %} <h2>{{ blog.title }}</h2> <p>{{ blog.timestamp }}</p> <p>{{ blog.body }}</p>{% endfor %} 创建视图函数打开myblog/blog/views.py文件,向其中添加如下内容:12345from blog.models import BlogsPostdef blog_index(request): blog_list = BlogsPost.objects.all() # 获取所有数据 return render(request,'index.html', {'blog_list':blog_list}) # 返回index.html页面 blog_list = BlogPost.objects.all() :获取数据库里面所拥有BlogPost对象。render返回一个页面(index.html),顺带把数据库中查询出来的所有博客内容(blog_list)也一并返回。 创建blog的URL模式我们需要blog可以索引到我们的发布的文章。在myblog/urls.py文件里添加blog的url,将下面内容复制粘贴进文件的对应地方,注意缩进。123456from blog import viewsurlpatterns = [ path(r'^admin/', admin.site.urls), path(r'^blog/', views.blog_index),] 刷新网页,访问blog应用(http://127.0.0.1:8000/blog/)。好了,现在我们已经做出一个最基本的博客了,虽然整体界面实在太简洁了,好像除了文字没有任何东西了,但是你已经做出了一个blog最基础的模样了。我们可以发布一篇文章来试试看是否已经成功创建出一个博客框架了。点击’Blogs posts’中的’增加’按钮,向其中任意写入内容。然后点击’保存’.我们即可看到如下界面。然后我们去博客主页看是否已经成功发布到主页。地址:http://127.0.0.1:8000/blog/接下来,我们应该做的就是对自己的blog进行美化了。当然美化也是需要更为系统的知识的。你需要了解django的样式结构,了解HTML,CSS,JavaSprite,BootStrap等前端知识。本文参考《Django web开发指南》,如果你需要本书,可以扫描下方二维码进群获取。 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/10/利用django搭建博客/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Mysql基础命令汇总]]></title>
<url>%2F2018%2F08%2F10%2Fmysql%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4%E6%B1%87%E6%80%BB%2F</url>
<content type="text"><![CDATA[Windows服务123456789101112-- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格)``` ### 连接与断开服务器``` sqlmysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 数据库操作123456789101112131415161718-- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version();-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE 'PATTERN']-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 表的操作12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576-- 创建表 CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [库名.]表名 ( 表的结构定义 )[ 表选项] 每个字段必须有数据类型 最后一个字段后不能有逗号 TEMPORARY 临时表,会话结束时表自动消失 对于字段的定义: 字段名 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']-- 表选项 -- 字符集 CHARSET = charset_name 如果表没有设定,则使用数据库字符集 -- 存储引擎 ENGINE = engine_name 表在管理数据时采用的不同的数据结构,结构不同会导致处理方式、提供的特性操作等不同 常见的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive 不同的引擎在保存表的结构和数据时采用不同的方式 MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引 InnoDB表文件含义:.frm表定义,表空间数据和日志文件 SHOW ENGINES -- 显示存储引擎的状态信息 SHOW ENGINE 引擎名 {LOGS|STATUS} -- 显示存储引擎的日志或状态信息 -- 自增起始数 AUTO_INCREMENT = 行数 -- 数据文件目录 DATA DIRECTORY = '目录' -- 索引文件目录 INDEX DIRECTORY = '目录' -- 表注释 COMMENT = 'string' -- 分区选项 PARTITION BY ... (详细见手册)-- 查看所有表 SHOW TABLES[ LIKE 'pattern'] SHOW TABLES FROM 表名-- 查看表机构 SHOW CREATE TABLE 表名 (信息更详细) DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN'] SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']-- 修改表 -- 修改表本身的选项 ALTER TABLE 表名 表的选项 eg: ALTER TABLE 表名 ENGINE=MYISAM; -- 对表进行重命名 RENAME TABLE 原表名 TO 新表名 RENAME TABLE 原表名 TO 库名.表名 (可将表移动到另一个数据库) -- RENAME可以交换两个表名 -- 修改表的字段机构(13.1.2. ALTER TABLE语法) ALTER TABLE 表名 操作名 -- 操作名 ADD[ COLUMN] 字段定义 -- 增加字段 AFTER 字段名 -- 表示增加在该字段名后面 FIRST -- 表示增加在第一个 ADD PRIMARY KEY(字段名) -- 创建主键 ADD UNIQUE [索引名] (字段名)-- 创建唯一索引 ADD INDEX [索引名] (字段名) -- 创建普通索引 DROP[ COLUMN] 字段名 -- 删除字段 MODIFY[ COLUMN] 字段名 字段属性 -- 支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上) CHANGE[ COLUMN] 原字段名 新字段名 字段属性 -- 支持对字段名修改 DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性) DROP INDEX 索引名 -- 删除索引 DROP FOREIGN KEY 外键 -- 删除外键-- 删除表 DROP TABLE[ IF EXISTS] 表名 ...-- 清空表数据 TRUNCATE [TABLE] 表名-- 复制表结构 CREATE TABLE 表名 LIKE 要复制的表名-- 复制表结构和数据 CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名-- 检查表是否有错误 CHECK TABLE tbl_name [, tbl_name] ... [option] ...-- 优化表 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...-- 修复表 REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]-- 分析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 数据库操作12345678910111213141516-- 增 INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...] -- 如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表。 -- 可同时插入多条数据记录! REPLACE 与 INSERT 完全一样,可互换。 INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]-- 查 SELECT 字段列表 FROM 表名[ 其他子句] -- 可来自多个表的多个字段 -- 其他子句可以不使用 -- 字段列表可以用*代替,表示所有字段-- 删 DELETE FROM 表名[ 删除条件子句] 没有条件子句,则会删除全部-- 改 UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新条件] 字符集编码1234567891011121314151617-- MySQL、数据库、表、字段均可设置编码-- 数据编码与客户端编码不需一致SHOW VARIABLES LIKE 'character_set_%' -- 查看所有字符集编码项 character_set_client 客户端向服务器发送数据时使用的编码 character_set_results 服务器端将结果返回给客户端所使用的编码 character_set_connection 连接层编码SET 变量名 = 变量值 SET character_set_client = gbk; SET character_set_results = gbk; SET character_set_connection = gbk;SET NAMES GBK; -- 相当于完成以上三个设置-- 校对集 校对集用以排序 SHOW CHARACTER SET [LIKE 'pattern']/SHOW CHARSET [LIKE 'pattern'] 查看所有字符集 SHOW COLLATION [LIKE 'pattern'] 查看所有校对集 CHARSET 字符集编码 设置字符集编码 COLLATE 校对集编码 设置校对集编码 数据类型(列类型)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081. 数值类型-- a. 整型 ---------- 类型 字节 范围(有符号位) tinyint 1字节 -128 ~ 127 无符号位:0 ~ 255 smallint 2字节 -32768 ~ 32767 mediumint 3字节 -8388608 ~ 8388607 int 4字节 bigint 8字节 int(M) M表示总位数 - 默认存在符号位,unsigned 属性修改 - 显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修改 例:int(5) 插入一个数'123',补填后为'00123' - 在满足要求的情况下,越小越好。 - 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。-- b. 浮点型 ---------- 类型 字节 范围 float(单精度) 4字节 double(双精度) 8字节 浮点型既支持符号位 unsigned 属性,也支持显示宽度 zerofill 属性。 不同于整型,前后均会补填0. 定义浮点型时,需指定总位数和小数位数。 float(M, D) double(M, D) M表示总位数,D表示小数位数。 M和D的大小会决定浮点数的范围。不同于整型的固定范围。 M既表示总位数(不包括小数点和正负号),也表示显示宽度(所有显示符号均包括)。 支持科学计数法表示。 浮点数表示近似值。-- c. 定点数 ---------- decimal -- 可变长度 decimal(M, D) M也表示总位数,D表示小数位数。 保存一个精确的数值,不会发生数据的改变,不同于浮点数的四舍五入。 将浮点数转换为字符串来保存,每9位数字保存为4个字节。2. 字符串类型-- a. char, varchar ---------- char 定长字符串,速度快,但浪费空间 varchar 变长字符串,速度慢,但节省空间 M表示能存储的最大长度,此长度是字符数,非字节数。 不同的编码,所占用的空间不同。 char,最多255个字符,与编码无关。 varchar,最多65535字符,与编码有关。 一条有效记录最大不能超过65535个字节。 utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符 varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。 varchar 的最大有效长度由最大行大小和使用的字符集确定。 最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。 例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是多少? 答:(65535-1-2-4-30*3)/3-- b. blob, text ---------- blob 二进制字符串(字节字符串) tinyblob, blob, mediumblob, longblob text 非二进制字符串(字符字符串) tinytext, text, mediumtext, longtext text 在定义时,不需要定义长度,也不会计算总长度。 text 类型在定义时,不可给default值-- c. binary, varbinary ---------- 类似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。 char, varchar, text 对应 binary, varbinary, blob.3. 日期时间类型 一般用整型保存时间戳,因为PHP可以很方便的将时间戳进行格式化。 datetime 8字节 日期及时间 1000-01-01 00:00:00 到 9999-12-31 23:59:59 date 3字节 日期 1000-01-01 到 9999-12-31 timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07 time 3字节 时间 -838:59:59 到 838:59:59 year 1字节 年份 1901 - 2155datetime YYYY-MM-DD hh:mm:sstimestamp YY-MM-DD hh:mm:ss YYYYMMDDhhmmss YYMMDDhhmmss YYYYMMDDhhmmss YYMMDDhhmmssdate YYYY-MM-DD YY-MM-DD YYYYMMDD YYMMDD YYYYMMDD YYMMDDtime hh:mm:ss hhmmss hhmmssyear YYYY YY YYYY YY4. 枚举和集合-- 枚举(enum) ----------enum(val1, val2, val3...) 在已知的值中进行单选。最大数量为65535. 枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。 表现为字符串类型,存储却是整型。 NULL值的索引是NULL。 空字符串错误值的索引值是0。-- 集合(set) ----------set(val1, val2, val3...) create table tab ( gender set('男', '女', '无') ); insert into tab values ('男, 女'); 最多可以有64个不同的成员。以bigint存储,共8个字节。采取位运算的形式。 当创建表时,SET成员值的尾部空格将自动被删除。 选择类型1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081. 数值类型-- a. 整型 ---------- 类型 字节 范围(有符号位) tinyint 1字节 -128 ~ 127 无符号位:0 ~ 255 smallint 2字节 -32768 ~ 32767 mediumint 3字节 -8388608 ~ 8388607 int 4字节 bigint 8字节 int(M) M表示总位数 - 默认存在符号位,unsigned 属性修改 - 显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,zerofill 属性修改 例:int(5) 插入一个数'123',补填后为'00123' - 在满足要求的情况下,越小越好。 - 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。-- b. 浮点型 ---------- 类型 字节 范围 float(单精度) 4字节 double(双精度) 8字节 浮点型既支持符号位 unsigned 属性,也支持显示宽度 zerofill 属性。 不同于整型,前后均会补填0. 定义浮点型时,需指定总位数和小数位数。 float(M, D) double(M, D) M表示总位数,D表示小数位数。 M和D的大小会决定浮点数的范围。不同于整型的固定范围。 M既表示总位数(不包括小数点和正负号),也表示显示宽度(所有显示符号均包括)。 支持科学计数法表示。 浮点数表示近似值。-- c. 定点数 ---------- decimal -- 可变长度 decimal(M, D) M也表示总位数,D表示小数位数。 保存一个精确的数值,不会发生数据的改变,不同于浮点数的四舍五入。 将浮点数转换为字符串来保存,每9位数字保存为4个字节。2. 字符串类型-- a. char, varchar ---------- char 定长字符串,速度快,但浪费空间 varchar 变长字符串,速度慢,但节省空间 M表示能存储的最大长度,此长度是字符数,非字节数。 不同的编码,所占用的空间不同。 char,最多255个字符,与编码无关。 varchar,最多65535字符,与编码有关。 一条有效记录最大不能超过65535个字节。 utf8 最大为21844个字符,gbk 最大为32766个字符,latin1 最大为65532个字符 varchar 是变长的,需要利用存储空间保存 varchar 的长度,如果数据小于255个字节,则采用一个字节来保存长度,反之需要两个字节来保存。 varchar 的最大有效长度由最大行大小和使用的字符集确定。 最大有效长度是65532字节,因为在varchar存字符串时,第一个字节是空的,不存在任何数据,然后还需两个字节来存放字符串的长度,所以有效长度是64432-1-2=65532字节。 例:若一个表定义为 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 问N的最大值是多少? 答:(65535-1-2-4-30*3)/3-- b. blob, text ---------- blob 二进制字符串(字节字符串) tinyblob, blob, mediumblob, longblob text 非二进制字符串(字符字符串) tinytext, text, mediumtext, longtext text 在定义时,不需要定义长度,也不会计算总长度。 text 类型在定义时,不可给default值-- c. binary, varbinary ---------- 类似于char和varchar,用于保存二进制字符串,也就是保存字节字符串而非字符字符串。 char, varchar, text 对应 binary, varbinary, blob.3. 日期时间类型 一般用整型保存时间戳,因为PHP可以很方便的将时间戳进行格式化。 datetime 8字节 日期及时间 1000-01-01 00:00:00 到 9999-12-31 23:59:59 date 3字节 日期 1000-01-01 到 9999-12-31 timestamp 4字节 时间戳 19700101000000 到 2038-01-19 03:14:07 time 3字节 时间 -838:59:59 到 838:59:59 year 1字节 年份 1901 - 2155datetime YYYY-MM-DD hh:mm:sstimestamp YY-MM-DD hh:mm:ss YYYYMMDDhhmmss YYMMDDhhmmss YYYYMMDDhhmmss YYMMDDhhmmssdate YYYY-MM-DD YY-MM-DD YYYYMMDD YYMMDD YYYYMMDD YYMMDDtime hh:mm:ss hhmmss hhmmssyear YYYY YY YYYY YY4. 枚举和集合-- 枚举(enum) ----------enum(val1, val2, val3...) 在已知的值中进行单选。最大数量为65535. 枚举值在保存时,以2个字节的整型(smallint)保存。每个枚举值,按保存的位置顺序,从1开始逐一递增。 表现为字符串类型,存储却是整型。 NULL值的索引是NULL。 空字符串错误值的索引值是0。-- 集合(set) ----------set(val1, val2, val3...) create table tab ( gender set('男', '女', '无') ); insert into tab values ('男, 女'); 最多可以有64个不同的成员。以bigint存储,共8个字节。采取位运算的形式。 当创建表时,SET成员值的尾部空格将自动被删除。 列属性(列约束)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647481. PRIMARY 主键 - 能唯一标识记录的字段,可以作为主键。 - 一个表只能有一个主键。 - 主键具有唯一性。 - 声明字段时,用 primary key 标识。 也可以在字段列表之后声明 例:create table tab ( id int, stu varchar(10), primary key (id)); - 主键字段的值不能为null。 - 主键可以由多个字段共同组成。此时需要在字段列表后声明的方法。 例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));2. UNIQUE 唯一索引(唯一约束) 使得某字段的值也不能重复。3. NULL 约束 null不是数据类型,是列的一个属性。 表示当前列是否可以为null,表示什么都没有。 null, 允许为空。默认。 not null, 不允许为空。 insert into tab values (null, 'val'); -- 此时表示将第一个字段的值设为null, 取决于该字段是否允许为null4. DEFAULT 默认值属性 当前字段的默认值。 insert into tab values (default, 'val'); -- 此时表示强制使用默认值。 create table tab ( add_time timestamp default current_timestamp ); -- 表示将当前时间的时间戳设为默认值。 current_date, current_time5. AUTO_INCREMENT 自动增长约束 自动增长必须为索引(主键或unique) 只能存在一个字段为自动增长。 默认为1开始自动增长。可以通过表属性 auto_increment = x进行设置,或 alter table tbl auto_increment = x;6. COMMENT 注释 例:create table tab ( id int ) comment '注释内容';7. FOREIGN KEY 外键约束 用于限制主表与从表数据完整性。 alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id); -- 将表t1的t1_id外键关联到表t2的id字段。 -- 每个外键都有一个名字,可以通过 constraint 指定 存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。 作用:保持数据一致性,完整性,主要目的是控制存储在外键表(从表)中的数据。 MySQL中,可以对InnoDB引擎使用外键约束: 语法: foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时的动作] [主表记录更新时的动作] 此时需要检测一个从表的外键需要约束为主表的已存在的值。外键在没有关联的情况下,可以设置为null.前提是该外键列,没有not null。 可以不指定主表记录更改或更新时的动作,那么此时主表的操作被拒绝。 如果指定了 on update 或 on delete:在删除或更新时,有如下几个操作可以选择: 1. cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被删除,从表相关记录也被删除。 2. set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表记录被删除,从表相关记录外键被设置成null。但注意,要求该外键列,没有not null属性约束。 3. restrict,拒绝父表删除和更新。 注意,外键只被InnoDB存储引擎所支持。其他引擎是不支持的。 建表规范12345678910111213-- Normal Format, NF - 每个表保存一个实体信息 - 每个具有一个ID字段作为主键 - ID主键 + 原子表 -- 1NF, 第一范式 字段不能再分,就满足第一范式。 -- 2NF, 第二范式 满足第一范式的前提下,不能出现部分依赖。 消除符合主键就可以避免部分依赖。增加单列关键字。 -- 3NF, 第三范式 满足第二范式的前提下,不能出现传递依赖。 某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。 将一个实体信息的数据放在一个表内实现。 SELECT1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合计函数] -> HAVING -> ORDER BY -> LIMITa. select_expr -- 可以用 * 表示所有字段。 select * from tb; -- 可以使用表达式(计算公式、函数调用、字段也是个表达式) select stu, 29+25, now() from tb; -- 可以为每个列使用别名。适用于简化列标识,避免多个列标识符重复。 - 使用 as 关键字,也可省略 as. select stu+10 as add10 from tb;b. FROM 子句 用于标识查询来源。 -- 可以为表起别名。使用as关键字。 SELECT * FROM tb1 AS tt, tb2 AS bb; -- from子句后,可以同时出现多个表。 -- 多个表会横向叠加到一起,而数据会形成一个笛卡尔积。 SELECT * FROM tb1, tb2; -- 向优化符提示如何选择索引 USE INDEX、IGNORE INDEX、FORCE INDEX SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3; SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;c. WHERE 子句 -- 从from获得的数据源中进行筛选。 -- 整型1表示真,0表示假。 -- 表达式由运算符和运算数组成。 -- 运算数:变量(字段)、值、函数返回值 -- 运算符: =, <=>, <>, !=, <=, <, >=, >, !, &&, ||, in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor is/is not 加上ture/false/unknown,检验某个值的真假 <=>与<>功能相同,<=>可用于null比较d. GROUP BY 子句, 分组子句 GROUP BY 字段/别名 [排序方式] 分组后会进行排序。升序:ASC,降序:DESC 以下[合计函数]需配合 GROUP BY 使用: count 返回不同的非NULL值数目 count(*)、count(字段) sum 求和 max 求最大值 min 求最小值 avg 求平均值 group_concat 返回带有来自一个组的连接的非NULL值的字符串结果。组内字符串连接。e. HAVING 子句,条件子句 与 where 功能、用法相同,执行时机不同。 where 在开始时执行检测数据,对原数据进行过滤。 having 对筛选出的结果再次进行过滤。 having 字段必须是查询出来的,where 字段必须是数据表存在的。 where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。 where 不可以使用合计函数。一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。f. ORDER BY 子句,排序子句 order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]... 升序:ASC,降序:DESC 支持多个字段的排序。g. LIMIT 子句,限制结果数量子句 仅对处理好的结果进行数量限制。将处理好的结果的看作是一个集合,按照记录出现的顺序,索引从0开始。 limit 起始位置, 获取条数 省略第一个参数,表示从索引0开始。limit 获取条数h. DISTINCT, ALL 选项 distinct 去除重复记录 默认为 all, 全部记录 UNION1234567将多个select查询的结果组合成一个结果集合。 SELECT ... UNION [ALL|DISTINCT] SELECT ... 默认 DISTINCT 方式,即所有返回的行都是唯一的 建议,对每个SELECT查询加上小括号包裹。 ORDER BY 排序时,需加上 LIMIT 进行结合。 需要各select查询的字段数量一样。 每个select查询的字段列表(数量、类型)应一致,因为结果中的字段名以第一条select语句为准。 子查询12345678910111213141516171819202122232425262728- 子查询需用括号包裹。-- from型 from后要求是一个表,必须给子查询结果取个别名。 - 简化每个查询内的条件。 - from型需将结果生成一个临时表格,可用以原表的锁定的释放。 - 子查询返回一个表,表型子查询。 select * from (select * from tb where id>0) as subfrom where id>1;-- where型 - 子查询返回一个值,标量子查询。 - 不需要给子查询取别名。 - where子查询内的表,不能直接用以更新。 select * from tb where money = (select max(money) from tb); -- 列子查询 如果子查询结果返回的是一列。 使用 in 或 not in 完成查询 exists 和 not exists 条件 如果子查询返回数据,则返回1或0。常用于判断条件。 select column1 from t1 where exists (select * from t2); -- 行子查询 查询条件是一个行。 select * from t1 where (id, gender) in (select id, gender from t2); 行构造符:(col1, col2, ...) 或 ROW(col1, col2, ...) 行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。 -- 特殊运算符 != all() 相当于 not in = some() 相当于 in。any 是 some 的别名 != some() 不等同于 not in,不等于其中某一个。 all, some 可以配合其他运算符一起使用。 连接查询(join)123456789101112131415161718192021222324将多个表的字段进行连接,可以指定连接条件。-- 内连接(inner join) - 默认就是内连接,可省略inner。 - 只有数据存在时才能发送连接。即连接结果不能出现空行。 on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真) 也可用where表示连接条件。 还有 using, 但需字段名相同。 using(字段名) -- 交叉连接 cross join 即,没有条件的内连接。 select * from tb1 cross join tb2;-- 外连接(outer join) - 如果数据不存在,也会出现在连接结果中。 -- 左外连接 left join 如果数据不存在,左表记录会出现,而右表为null填充 -- 右外连接 right join 如果数据不存在,右表记录会出现,而左表为null填充-- 自然连接(natural join) 自动判断连接条件完成连接。 相当于省略了using,会自动查找相同字段名。 natural join natural left join natural right joinselect info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id; 导出1234567891011121314151617181920select * into outfile 文件地址 [控制格式] from 表名; -- 导出表数据load data [local] infile 文件地址 [replace|ignore] into table 表名 [控制格式]; -- 导入数据 生成的数据默认的分隔符是制表符 local未指定,则数据文件必须在服务器上 replace 和 ignore 关键词控制对现有的唯一键记录的重复的处理-- 控制格式fields 控制字段格式默认:fields terminated by '\t' enclosed by '' escaped by '\\' terminated by 'string' -- 终止 enclosed by 'char' -- 包裹 escaped by 'char' -- 转义 -- 示例: SELECT a,b,a+b INTO OUTFILE '/tmp/result.text' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;lines 控制行格式默认:lines terminated by '\n' terminated by 'string' -- 终止 INSERT1234567891011121314select语句获得的数据可以用insert插入。可以省略对列的指定,要求 values () 括号内,提供给了按照列顺序出现的所有字段的值。 或者使用set语法。 INSERT INTO tbl_name SET field=value,...;可以一次性使用多个值,采用(), (), ();的形式。 INSERT INTO tbl_name VALUES (), (), ();可以在列值指定时,使用表达式。 INSERT INTO tbl_name VALUES (field_value, 10+10, now());可以使用一个特殊值 DEFAULT,表示该列使用默认值。 INSERT INTO tbl_name VALUES (field_value, DEFAULT);可以通过一个查询的结果,作为需要插入的值。 INSERT INTO tbl_name SELECT ...;可以指定在插入的值出现主键(或唯一索引)冲突时,更新其他非主键列的信息。 INSERT INTO tbl_name VALUES/SET/SELECT ON DUPLICATE KEY UPDATE 字段=值, …; DELETE123456DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]按照条件删除。where指定删除的最多记录数。limit可以通过排序条件删除。order by + limit支持多表删除,使用类似连接语法。delete from 需要删除数据多表1,表2 using 表连接操作 条件。 TRUNCATE12345678TRUNCATE [TABLE] tbl_name清空数据删除重建表区别:1,truncate 是删除表再创建,delete 是逐条删除2,truncate 重置auto_increment的值。而delete不会3,truncate 不知道删除了几条,而delete知道。4,当被用于带分区的表时,truncate 会保留分区 备份与还原1234567891011121314151617181920备份,将数据的结构与表内数据保存起来。利用 mysqldump 指令完成。-- 导出mysqldump [options] db_name [tables]mysqldump [options] ---database DB1 [DB2 DB3...]mysqldump [options] --all--database1. 导出一张表 mysqldump -u用户名 -p密码 库名 表名 > 文件名(D:/a.sql)2. 导出多张表 mysqldump -u用户名 -p密码 库名 表1 表2 表3 > 文件名(D:/a.sql)3. 导出所有表 mysqldump -u用户名 -p密码 库名 > 文件名(D:/a.sql)4. 导出一个库 mysqldump -u用户名 -p密码 --lock-all-tables --database 库名 > 文件名(D:/a.sql)可以-w携带WHERE条件-- 导入1. 在登录mysql的情况下: source 备份文件2. 在不登录的情况下 mysql -u用户名 -p密码 库名 < 备份文件 视图1234567891011121314151617181920212223242526272829什么是视图: 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 视图具有表结构文件,但不存在数据文件。 对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。 视图是存储在数据库中的查询的sql语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。-- 创建视图CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement - 视图名必须唯一,同时不能与表重名。 - 视图可以使用select语句查询到的列名,也可以自己指定相应的列名。 - 可以指定视图执行的算法,通过ALGORITHM指定。 - column_list如果存在,则数目必须等于SELECT语句检索的列数-- 查看结构 SHOW CREATE VIEW view_name-- 删除视图 - 删除视图后,数据依然存在。 - 可同时删除多个视图。 DROP VIEW [IF EXISTS] view_name ...-- 修改视图结构 - 一般不修改视图,因为不是所有的更新视图都会映射到表上。 ALTER VIEW view_name [(column_list)] AS select_statement-- 视图作用 1. 简化业务逻辑 2. 对客户端隐藏真实的表结构-- 视图算法(ALGORITHM) MERGE 合并 将视图的查询语句,与外部查询需要先合并再执行! TEMPTABLE 临时表 将视图执行完毕后,形成临时表,再做外层查询! UNDEFINED 未定义(默认),指的是MySQL自主去选择相应的算法。 事务(transaction)123456789101112131415161718192021222324252627282930313233343536373839404142434445事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。 - 支持连续SQL的集体成功或集体撤销。 - 事务是数据库在数据晚自习方面的一个功能。 - 需要利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成。 - InnoDB被称为事务安全型引擎。-- 事务开启 START TRANSACTION; 或者 BEGIN; 开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。-- 事务提交 COMMIT;-- 事务回滚 ROLLBACK; 如果部分操作发生问题,映射到事务开启前。-- 事务的特性 1. 原子性(Atomicity) 事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 2. 一致性(Consistency) 事务前后数据的完整性必须保持一致。 - 事务开始和结束时,外部数据一致 - 在整个事务过程中,操作是连续的 3. 隔离性(Isolation) 多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。 4. 持久性(Durability) 一个事务一旦被提交,它对数据库中的数据改变就是永久性的。-- 事务的实现 1. 要求是事务支持的表类型 2. 执行一组相关的操作前开启事务 3. 整组操作完成后,都成功,则提交;如果存在失败,选择回滚,则会回到事务开始的备份点。-- 事务的原理 利用InnoDB的自动提交(autocommit)特性完成。 普通的MySQL执行语句后,当前的数据提交操作均可被其他客户端可见。 而事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作。-- 注意 1. 数据定义语言(DDL)语句不能被回滚,比如创建或取消数据库的语句,和创建、取消或更改表或存储的子程序的语句。 2. 事务不能被嵌套-- 保存点 SAVEPOINT 保存点名称 -- 设置一个事务保存点 ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点 RELEASE SAVEPOINT 保存点名称 -- 删除保存点-- InnoDB自动提交特性设置 SET autocommit = 0|1; 0表示关闭自动提交,1表示开启自动提交。 - 如果关闭了,那普通操作的结果对其他客户端也不可见,需要commit提交后才能持久化数据操作。 - 也可以关闭自动提交来开启事务。但与START TRANSACTION不同的是, SET autocommit是永久改变服务器的设置,直到下次再次修改该设置。(针对当前连接) 而START TRANSACTION记录开启前的状态,而一旦事务提交或回滚后就需要再次开启事务。(针对当前事务) 锁表123456表锁定只用于防止其它客户端进行不正当地读取和写入MyISAM 支持表锁,InnoDB 支持行锁-- 锁定 LOCK TABLES tbl_name [AS alias]-- 解锁 UNLOCK TABLES 触发器12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152触发程序是与表有关的命名数据库对象,当该表出现特定事件时,将激活该对象监听:记录的增加、修改、删除。-- 创建触发器CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt参数:trigger_time是触发程序的动作时间。它可以是 before 或 after,以指明触发程序是在激活它的语句之前或之后触发。trigger_event指明了激活触发程序的语句的类型 INSERT:将新行插入表时激活触发程序 UPDATE:更改某一行时激活触发程序 DELETE:从表中删除某一行时激活触发程序tbl_name:监听的表,必须是永久性的表,不能将触发程序与TEMPORARY表或视图关联起来。trigger_stmt:当触发程序激活时执行的语句。执行多个语句,可使用BEGIN...END复合语句结构-- 删除DROP TRIGGER [schema_name.]trigger_name可以使用old和new代替旧的和新的数据更新操作,更新前是old,更新后是new.删除操作,只有old.增加操作,只有new.-- 注意1. 对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。-- 字符连接函数concat(str1,str2,...])concat_ws(separator,str1,str2,...)-- 分支语句if 条件 then 执行语句elseif 条件 then 执行语句else 执行语句end if;-- 修改最外层语句结束符delimiter 自定义结束符号 SQL语句自定义结束符号delimiter ; -- 修改回原来的分号-- 语句块包裹begin 语句块end-- 特殊的执行1. 只要添加记录,就会触发程序。2. Insert into on duplicate key update 语法会触发: 如果没有重复记录,会触发 before insert, after insert; 如果有重复记录并更新,会触发 before insert, before update, after update; 如果有重复记录但是没有发生更新,则触发 before insert, before update3. Replace 语法 如果有记录,则执行 before insert, before delete, after delete, after insert SQL编程123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157--// 局部变量 ------------ 变量声明 declare var_name[,...] type [default value] 这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个default子句。值可以被指定为一个表达式,不需要为一个常数。如果没有default子句,初始值为null。-- 赋值 使用 set 和 select into 语句为变量赋值。 - 注意:在函数内是可以使用全局变量(用户自定义的变量)--// 全局变量 ------------ 定义、赋值set 语句可以定义并为变量赋值。set @var = value;也可以使用select into语句为变量初始化并赋值。这样要求select语句只能返回一行,但是可以是多个字段,就意味着同时为多个变量进行赋值,变量的数量需要与查询的列数一致。还可以把赋值语句看作一个表达式,通过select执行完成。此时为了避免=被当作关系运算符看待,使用:=代替。(set语句可以使用= 和 :=)。select @var:=20;select @v1:=id, @v2=name from t1 limit 1;select * from tbl_name where @var:=30;select into 可以将表中查询获得的数据赋给变量。 -| select max(height) into @max_height from tb;-- 自定义变量名为了避免select语句中,用户自定义的变量与系统标识符(通常是字段名)冲突,用户自定义变量在变量名前使用@作为开始符号。@var=10; - 变量被定义后,在整个会话周期都有效(登录到退出)--// 控制结构 ------------ if语句if search_condition then statement_list [elseif search_condition then statement_list]...[else statement_list]end if;-- case语句CASE value WHEN [compare-value] THEN result[WHEN [compare-value] THEN result ...][ELSE result]END-- while循环[begin_label:] while search_condition do statement_listend while [end_label];- 如果需要在循环内提前终止 while循环,则需要使用标签;标签需要成对出现。 -- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环--// 内置函数 ------------ 数值函数abs(x) -- 绝对值 abs(-10.9) = 10format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46ceil(x) -- 向上取整 ceil(10.1) = 11floor(x) -- 向下取整 floor (10.1) = 10round(x) -- 四舍五入去整mod(m, n) -- m%n m mod n 求余 10%3=1pi() -- 获得圆周率pow(m, n) -- m^nsqrt(x) -- 算术平方根rand() -- 随机数truncate(x, d) -- 截取d位小数-- 时间日期函数now(), current_timestamp(); -- 当前日期时间current_date(); -- 当前日期current_time(); -- 当前时间date('yyyy-mm-dd hh:ii:ss'); -- 获取日期部分time('yyyy-mm-dd hh:ii:ss'); -- 获取时间部分date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j'); -- 格式化时间unix_timestamp(); -- 获得unix时间戳from_unixtime(); -- 从时间戳获得时间-- 字符串函数length(string) -- string长度,字节char_length(string) -- string的字符个数substring(str, position [,length]) -- 从str的position开始,取length个字符replace(str ,search_str ,replace_str) -- 在str中用replace_str替换search_strinstr(string ,substring) -- 返回substring首次在string中出现的位置concat(string [,...]) -- 连接字串charset(str) -- 返回字串字符集lcase(string) -- 转换成小写left(string, length) -- 从string2中的左边起取length个字符load_file(file_name) -- 从文件读取内容locate(substring, string [,start_position]) -- 同instr,但可指定开始位置lpad(string, length, pad) -- 重复用pad加在string开头,直到字串长度为lengthltrim(string) -- 去除前端空格repeat(string, count) -- 重复count次rpad(string, length, pad) --在str后用pad补充,直到长度为lengthrtrim(string) -- 去除后端空格strcmp(string1 ,string2) -- 逐字符比较两字串大小-- 流程函数case when [condition] then result [when [condition] then result ...] [else result] end 多分支if(expr1,expr2,expr3) 双分支。-- 聚合函数count()sum();max();min();avg();group_concat()-- 其他常用函数md5();default();--// 存储函数,自定义函数 ------------ 新建 CREATE FUNCTION function_name (参数列表) RETURNS 返回值类型 函数体 - 函数名,应该合法的标识符,并且不应该与已有的关键字冲突。 - 一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。 - 参数部分,由"参数名"和"参数类型"组成。多个参数用逗号隔开。 - 函数体由多条可用的mysql语句,流程控制,变量声明等语句构成。 - 多条语句应该使用 begin...end 语句块包含。 - 一定要有 return 返回值语句。-- 删除 DROP FUNCTION [IF EXISTS] function_name;-- 查看 SHOW FUNCTION STATUS LIKE 'partten' SHOW CREATE FUNCTION function_name;-- 修改 ALTER FUNCTION function_name 函数选项--// 存储过程,自定义功能 ------------ 定义存储存储过程 是一段代码(过程),存储在数据库中的sql组成。一个存储过程通常用于完成一段业务逻辑,例如报名,交班费,订单入库等。而一个函数通常专注与某个功能,视为其他程序服务的,需要在其他语句中调用函数才可以,而存储过程不能被其他调用,是自己执行 通过call执行。-- 创建CREATE PROCEDURE sp_name (参数列表) 过程体参数列表:不同于函数的参数列表,需要指明参数类型IN,表示输入型OUT,表示输出型INOUT,表示混合型注意,没有返回值。/* 存储过程 */ ------------------存储过程是一段可执行性代码的集合。相比函数,更偏向于业务逻辑。调用:CALL 过程名-- 注意- 没有返回值。- 只能单独调用,不可夹杂在其他语句中-- 参数IN|OUT|INOUT 参数名 数据类型IN 输入:在调用过程中,将数据输入到过程体内部的参数OUT 输出:在调用过程中,将过程体处理完的结果返回到客户端INOUT 输入输出:既可输入,也可输出-- 语法CREATE PROCEDURE 过程名 (参数列表)BEGIN 过程体END 用户与权限管理12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576-- root密码重置1. 停止MySQL服务2. [Linux] /usr/local/mysql/bin/safe_mysqld --skip-grant-tables & [Windows] mysqld --skip-grant-tables3. use mysql;4. UPDATE `user` SET PASSWORD=PASSWORD("密码") WHERE `user` = "root";5. FLUSH PRIVILEGES;用户信息表:mysql.user-- 刷新权限FLUSH PRIVILEGES;-- 增加用户CREATE USER 用户名 IDENTIFIED BY [PASSWORD] 密码(字符串) - 必须拥有mysql数据库的全局CREATE USER权限,或拥有INSERT权限。 - 只能创建用户,不能赋予权限。 - 用户名,注意引号:如 'user_name'@'192.168.1.1' - 密码也需引号,纯数字密码也要加引号 - 要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD-- 重命名用户RENAME USER old_user TO new_user-- 设置密码SET PASSWORD = PASSWORD('密码') -- 为当前用户设置密码SET PASSWORD FOR 用户名 = PASSWORD('密码') -- 为指定用户设置密码-- 删除用户DROP USER 用户名-- 分配权限/添加用户GRANT 权限列表 ON 表名 TO 用户名 [IDENTIFIED BY [PASSWORD] 'password'] - all privileges 表示所有权限 - *.* 表示所有库的所有表 - 库名.表名 表示某库下面的某表 GRANT ALL PRIVILEGES ON `pms`.* TO 'pms'@'%' IDENTIFIED BY 'pms0817';-- 查看权限SHOW GRANTS FOR 用户名 -- 查看当前用户权限 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();-- 撤消权限REVOKE 权限列表 ON 表名 FROM 用户名REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用户名 -- 撤销所有权限-- 权限层级-- 要使用GRANT或REVOKE,您必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。全局层级:全局权限适用于一个给定服务器中的所有数据库,mysql.user GRANT ALL ON *.*和 REVOKE ALL ON *.*只授予和撤销全局权限。数据库层级:数据库权限适用于一个给定数据库中的所有目标,mysql.db, mysql.host GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。表层级:表权限适用于一个给定表中的所有列,mysql.talbes_priv GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。-- 权限列表ALL [PRIVILEGES] -- 设置除GRANT OPTION之外的所有简单权限ALTER -- 允许使用ALTER TABLEALTER ROUTINE -- 更改或取消已存储的子程序CREATE -- 允许使用CREATE TABLECREATE ROUTINE -- 创建已存储的子程序CREATE TEMPORARY TABLES -- 允许使用CREATE TEMPORARY TABLECREATE USER -- 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。CREATE VIEW -- 允许使用CREATE VIEWDELETE -- 允许使用DELETEDROP -- 允许使用DROP TABLEEXECUTE -- 允许用户运行已存储的子程序FILE -- 允许使用SELECT...INTO OUTFILE和LOAD DATA INFILEINDEX -- 允许使用CREATE INDEX和DROP INDEXINSERT -- 允许使用INSERTLOCK TABLES -- 允许对您拥有SELECT权限的表使用LOCK TABLESPROCESS -- 允许使用SHOW FULL PROCESSLISTREFERENCES -- 未被实施RELOAD -- 允许使用FLUSHREPLICATION CLIENT -- 允许用户询问从属服务器或主服务器的地址REPLICATION SLAVE -- 用于复制型从属服务器(从主服务器中读取二进制日志事件)SELECT -- 允许使用SELECTSHOW DATABASES -- 显示所有数据库SHOW VIEW -- 允许使用SHOW CREATE VIEWSHUTDOWN -- 允许使用mysqladmin shutdownSUPER -- 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。UPDATE -- 允许使用UPDATEUSAGE -- “无权限”的同义词GRANT OPTION -- 允许授予权限 表维护1234567-- 分析和存储表的关键字分布ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ...-- 检查一个或多个表是否有错误CHECK TABLE tbl_name [, tbl_name] ... [option] ...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}-- 整理数据文件的碎片OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 杂项123456789101112131. 可用反引号(`)为标识符(库名、表名、字段名、索引、别名)包裹,以避免与关键字重名!中文也可以作为标识符!2. 每个库目录存在一个保存当前数据库的选项文件db.opt。3. 注释: 单行注释 # 注释内容 多行注释 /* 注释内容 */ 单行注释 -- 注释内容 (标准SQL注释风格,要求双破折号后加一空格符(空格、TAB、换行等))4. 模式通配符: _ 任意单个字符 % 任意多个字符,甚至包括零字符 单引号需要进行转义 \'5. CMD命令行内的语句结束符可以为 ";", "\G", "\g",仅影响显示结果。其他地方还是用分号结束。delimiter 可修改当前对话的语句结束符。6. SQL对大小写不敏感7. 清除已有语句:\c 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/10/mysql基础命令汇总/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>MySql</category>
</categories>
<tags>
<tag>mysql</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux的存储结构与磁盘划分]]></title>
<url>%2F2018%2F08%2F08%2FLinux%E7%9A%84%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84%E4%B8%8E%E7%A3%81%E7%9B%98%E5%88%92%E5%88%86%2F</url>
<content type="text"><![CDATA[Linux系统遵循的一个原则就是”一切操作皆文件”.所以在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件。常见的硬件设备及其文件名称 硬件设备 文件名称 IDE设备 /dev/hd[a-d] SCSI/SATA/U盘 /dev/sd[a-p] 软驱 /dev/fd[0-1] 打印机 /dev/lp[0-15] 光驱 /dev/cdrom 鼠标 /dev/mouse 磁带机 /dev/st0或/dev/ht0 现在一般硬件设备都以“/dev/sd”开头。由于一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配)。而硬盘的分区编号的规则是: 1.主分区或扩展分区的编号从1开始,到4结束。2.逻辑分区从编号5开始。 下面分析一下”/dev/sda5 “这个设备文件名称都包含了哪些信息? /dev : 保存了硬件设备文件的目录sd : 存储设备a : 系统中同类接口中第一个被识别到的设备5 : 分区中编号为5的一个逻辑分区 所以,总体而言,“ /dev/sda5 ” 就表示系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件。在创建磁盘分区时,用户一般会采用使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而满足多分区的需求。为什么一定是3个主分区呢?因为主分区是不能超过4个的。然后我们可以通过下面的图例来看一下硬盘分区的规划。我们在使用Linux的过程中,有时候会遇到需要挂载,我们都知道需要用到mount命令,但是什么是挂载?什么时候需要挂载?挂载:当你需要使用硬盘设备或分区中的数据时候,需要先将其与一个已存在的目录文件进行关联,而此关联的过程就是挂载。根文件系统之外的其他文件要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”,此目录即为“挂载点”,解除此关联关系的过程称之为“卸载”。mount命令用于挂载文件系统,格式:mount 文件 挂载目录eg:1mount /dev/sdb2 /newfs 挂载点:mount_point,用于作为另一个文件系统的访问入口。作为挂载点应该具备以下条件: 1.事先存在 2.应该使用未被或不会被其它进程使用到的目录 3.挂载点下原有的文件将会被隐藏 我们可以用fdisk命令来管理硬盘设备。终端下输入123456789101112lengyue@ubuntu:~$ sudo fdisk -lDisk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0x25f0794b设备 启动 Start 末尾 扇区 Size Id 类型/dev/sda1 * 2048 39845887 39843840 19G 83 Linux/dev/sda2 39847934 41940991 2093058 1022M 5 扩展/dev/sda5 39847936 41940991 2093056 1022M 82 Linux 交换 / Solaris 当然此命令也是需要有管理员权限才能使用的。fdisk命令的参数: m : 获取帮助信息 n : 添加新的分区 p : 查看分区信息 w : 保存并退出 q : 不保存直接退出 d : 删除某个分区信息 l : 列出所有可用的分区类型 t : 改变某个分区的类型 先使用df -h选项来查看一下挂载状态和硬盘使用量信息。我们使用fdisk命令来管理/dev/sda硬盘设备。下面通过虚拟机进行添加硬盘设备模拟,我以个人的Ubuntu16.04(LTS)为例进行操作。首先关闭虚拟机中的系统,点击”编辑虚拟机设置”。然后点击”添加”,点击”下一步”。虚拟磁盘类型选择默认的SCSI(S)类型,然后点击”下一步”。点击”创建新虚拟磁盘(V)”,然后继续”下一步”。指定磁盘容量,你可以为其自定义容量。再次点击”下一步”后,即可看到新添加的硬盘。依照刚才说过的命名原则,刚才新增加硬盘将会被识别为/dev/sdb可以查看是否和我说的一样。1lengyue@ubuntu:~$ ls -l /dev/sdb 然后我们利用fdisk命令来管理硬盘设备,对刚添加的硬盘进行分区。输入参数”p”来查看一下当前硬盘设备内已有的分区信息。1lengyue@ubuntu:~$ sudo fdisk /dev/sdb 输入参数”n”开始添加新的分区。接着按照图示信息进行操作即可。从图中我们可以了解到已经成功创建了一个分区。然后利用file命令来查看一下该分区的信息。1lengyue@ubuntu:~$ file /dev/sdb1 这个时候我们需要先格式化硬盘,一块未经使用的硬盘,一定要先格式化,否则Linux系统是不知道怎么在其上写入数据的。如果你不格式化,在挂载时候你会得到如下的报错信息。123456lengyue@ubuntu:~$ sudo mount /dev/sdb1 /newfs/mount: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. 当然你需要先安装xfsprogs工具才能对硬盘进行格式化。1lengyue@ubuntu:~$ sudo apt install xfsprogs 开始格式化硬盘。1lengyue@ubuntu:~$ sudo mkfs.xfs /dev/sdb1 创建一个挂载点1lengyue@ubuntu:~$ sudo mkdir /newfs 然后开始进行挂载1lengyue@ubuntu:~$ sudo mount /dev/sdb2 /newfs 查看一下是否成功挂载。1lengyue@ubuntu:~$ df -h 看到如图所示的信息,就已经表明你已成功挂载了。运行上述命令后,即可立即使用已经挂载好的分区,但是系统重启后挂载就会失效,所以我们需要在每次开机后再次挂载一次。但是这样是十分麻烦的。我们可以通过修改配置文件来进行用永久性的挂载,而不必为重启失效而担心。下面就演示一下如何通过修改12```lengyue@ubuntu:~$ sudo gedit /etc/fstab 接下来,添加交换分区。SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其目的是解决真实物理内存不足的问题。交换分区的添加过程和和刚才的挂载管理硬件设备的过程是一样的。我只截图,就不给出命令了。使用mkswap命令对新建的主分区进行格式化操作。1lengyue@ubuntu:~$ sudo mkswap /dev/sdb2 我们先使用free命令来查看一下目前交换分区的情况。1lengyue@ubuntu:~$ free -m 然后开始挂载,将刚才创建的SWAP分区挂载到系统中。1lengyue@ubuntu:~$ sudo swapon /dev/sdb2 为了使新的交换分区设备在重启后依然生效,我们还是可以通过修改 /etc/fstab 配置文件,修改过程和修改方法和刚才的一样,把以下信息复制进最后一行即可,注意上下对齐。1/dev/sdb2 swap swap defaults 0 0 好了,基本就是这些了,如果哪里不懂,可以联系我讨论。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/08/Linux的存储结构与磁盘划分/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Markdown的toc语法]]></title>
<url>%2F2018%2F08%2F06%2FMarkdown%E7%9A%84toc%E8%AF%AD%E6%B3%95%2F</url>
<content type="text"><![CDATA[MarkDown 语法是当下非常流行的文本标记语言,它语法简便排版优美。目前很多博客都已经支持MarkDown语法编辑博客,比如我的这个博客就是全部用的markdown语法写的教程。著名的分布式系统社群 GitHub 也用MarkDown语法写README文件,当然准确而言,应该是GitHub Flavored Markdown(GFM)语法,该语法虽然是 GitHub在 Markdown语法基础 上扩充而来的,但一般情况下只要按照原本的Markdown语法进行描述就可以。最近在GitHub上写了一些东西,写README文件需要用到toc,所以就特地来记录一下。因为坑真的好多,README文件我写了一天才搞明白toc的用法细节。TOC:自动生成目录,其实就是设置锚点。你写的文件很大,你不可能一下子就可以看得完。所以就需要设置一个目录,来进行查询。点击该目录,即可索引到该部分内容上去。这个其实也即是锚点,百度百科上的分类就是一个个锚点。而markdown语法的锚点设置是非常严格的。 语法:12* [标题](#锚点)# 标题 与 []之间是有空格的。我发现在GitHub上只需一个空格,而在CSDN和本博客使用的hexo中需要2个空格。锚点中不能出现除-之外的任何字符,不能出现大写字母,可以出现汉字。也就是说锚点中只能出现小写字母、汉字、-这些字符。其余的全部是非法字符。这些很好理解,这种写法也是符合URL规范的。而且链接和锚点中的字母汉字必须保持一致,不能漏写,错写。空格用-代替若是链接中出现()?等特殊字符,直接省略不写即可。但是字母(数字汉字英文)必须写出来。例:1* [46 Python和多线程(multi-threading)。这是个好主意吗?列举一些让Python代码以并行方式运行的方法。](#46-python和多线程multi-threading这是个好主意吗列举一些让python代码以并行方式运行的方法) 本例中,可以看到出现了大写字母,汉字和特殊字符,但是均做了处理。 如果你设置分级锚点,需要在分级锚点处空至少2格出来。例:1234567* [目录 1](#目录-1) * [目录 2](#目录-2) * [目录 3](#目录-3)...此处省略1000字...## 目录1### 目录2#### 目录3 示例: 目录 1 目录 2 目录 3目录 1目录 2目录 3 演示效果: 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/06/Markdown的toc语法/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>GitHub</category>
</categories>
<tags>
<tag>GitHub</tag>
</tags>
</entry>
<entry>
<title><![CDATA[为什么网上Python教程这么多,但是做爬虫的这么少呢?]]></title>
<url>%2F2018%2F08%2F06%2F%E4%B8%BA%E4%BB%80%E4%B9%88%E7%BD%91%E4%B8%8APython%E6%95%99%E7%A8%8B%E8%BF%99%E4%B9%88%E5%A4%9A%EF%BC%8C%E4%BD%86%E6%98%AF%E5%81%9A%E7%88%AC%E8%99%AB%E7%9A%84%E8%BF%99%E4%B9%88%E5%B0%91%E5%91%A2%2F</url>
<content type="text"><![CDATA[很多人学习Python进阶可能都写过几个爬虫,但是最终做爬虫的人却比较少,是什么原因导致的呢?是爬虫真的没“技术含量”,还是随着反爬的不断提升,做爬虫的代价越来越高难以维持成本?网上的确有很多Python教程,因为只考虑爬虫逻辑的话,爬虫逻辑很简单,无非就是构造请求、发送请求、解析响应、获得数据,可能几行代码就搞定了,因为简单,而且获得的数据又很好展示,所以网上才会有很多简单的爬虫教程,即使教了,也只是教怎么用Python模拟请求和搜索DOM,最多只能算是真正做爬虫的基础问题。实际上做爬虫,关键问题永远不是怎么去模拟请求这件事。一个强大的爬虫,涉及到很多学科的知识,是一门很大的学问。要懂得HTTP协议,知道哪个协议可以帮助节省带宽和时间;要了解数据库知识,不然怎么优化、存储数据?数据库分布式总要懂一点,不然爬虫怎么协作呢?要学习算法,基本的调度算法、爬虫调度需要了解;要学习JavaScript,数据是怎么处理的,如何反向解析这些数据等等。 基础爬虫很简单,普通的开发都能通过很短的时间学习并胜任简单的爬虫任务,前后端数据分析工程师,时不时都能写点爬虫;对于复杂爬虫而言,如何进行进行大规模数据的爬取和存储或者如何绕过复杂的认证,都不是轻易就可以搞定的,需要熟悉分布式的架构和使用、网络底层协议、各类网站前后端架构及数据加密方式,甚至要有网络安全攻防的功底,大规模数据爬虫的技术难度是成倍增加的,网上的基础教程哪里会教这些? 有业内人士表示:爬虫的本质是下载数据。但重要的是数据本身,而不是如何去下载数据,真正的、专业的爬虫,是泡在搜索引擎的数据中心里,直接读缓存的。 在业务上,爬虫的需求虽不少,但专职做爬虫的却不多,对一般公司来讲,无论从哪个方向来看,数据的爬取都不是工作重点,如果不是完全靠数据驱动的公司,对于数据的需求并没那么大,也并不需要专人专岗来写爬虫。只会用Python模拟请求,这样的岗位说难听点叫做伪岗位,就算是靠着写爬虫吃饭,大体上也吃的不太好,最好的出路其实是开课教别人做爬虫。 所以说,学习爬虫是需要很多知识的,你在网上所看到的那些视频等教程,也只是为了培训而做的,那算不得真正意义上的爬虫。那只是提取网页信息而已。而且可以从本文中看到,你需要的知识是很多的,不仅仅需要python知识。所以说:任重而道远。同学们,好好学习吧。 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/06/为什么网上Python教程这么多,但是做爬虫的这么少呢/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title><![CDATA[LAMP环境下搭建word press个人博客]]></title>
<url>%2F2018%2F08%2F04%2FLAMP%E7%8E%AF%E5%A2%83%E4%B8%8B%E6%90%AD%E5%BB%BAword-press%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%2F</url>
<content type="text"><![CDATA[本次也只是在本地环境下进行测试而已,当然你在自己的服务器上也是完全可以这么做的。环境:Ubuntu16.04(LTS)首先搭建LAMP环境。 安装 Apache2在终端输入以下命令安装 Apache2。1sudo apt-get install apache2 -y 安装好后,打开浏览器,地址栏输入 http://127.0.0.1/看到如下界面即成功安装。 安装 PHP1sudo apt-get install php7.0 -y 但是需要提示一下,你若是利用其他的网站系统来搭建的时候,需要注意那个网站模板系统支持的PHP版本,我这里安装PHP7.0就可以。还要提醒一句,PHP7.0的版本已经在apt软件库了,所以可以直接用apt install安装。但是并不是所有版本都在,如果不在,就去官网下载,然后自己安装依赖。安装 php 相关组件1sudo apt-get install libapache2-mod-php7.0 安装 MySQL 服务1sudo apt-get install mysql-server -y 安装过程中,会要你输入 MySQL 的密码,你需要输入两次密码,并记住你输入的密码。 安装 php MySQL相关组件:1sudo apt-get install php7.0-mysql 为 wordpress 配置一个数据库。终端下输入以下命令,然后会提示你输入设置的MySQL密码。1mysql> mysql -u root -p 为 wordpress 创建一个叫 wordpress 的数据库1mysql> CREATE DATABASE wordpress; 可以查看一下刚才创建的数据库1mysql> SHOW DATABASE; 为这个数据库设置一个用户为 wordpress_user1mysql> CREATE USER wordpress_user; 为这个用户配置一个密码为123456789(密码改为你自己设的,一定不要使用我这种弱口令密码,我只是为了测试而已)1mysql> SET PASSWORD FOR wordpress_user= PASSWORD("123456789"); 这个用户配置数据库的访问权限:1mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser IDENTIFIED BY"password123"; 生效这些配置1mysql> FLUSH PRIVILEGES; 然后退出 mysql1mysql> exit; 配置 Wordpress需要下载一个 Wordpress 压缩包并解压12wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zipsudo unzip wordpress-4.9.4-zh_CN.zip 由于PHP默认访问 /var/www/html/ 文件夹,所以我们需要把 wordpress 文件夹里的文件都复制到 /var/www/html/ 文件夹1sudo mv wordpress/* /var/www/html/ 修改一下 /var/www/html/ 目录权限:1sudo chmod -R 777 /var/www/html/ 将apache指定到index.html1sudo mv /var/www/html/index.html /var/www/html/index~.html 重启 Apache 服务:1sudo systemctl restart apache2.service 安装word press刷新一下页面:http://127.0.0.1/ ,即可看到安装界面。点击”现在就开始”,开始初始设置,然后开始接入刚才设置的数据库。如图所示,是我的配置,其中用户名密码,需要根据你的设置来进行设定。好了,数据库接入成功。然后设置站点信息,用户名和密码根据自己喜好进行设置。但是 设置的密码一定不能是弱口令。OK,安装成功。登陆后台试试, http://127.0.0.1/wp-login.php刷新一下 http://127.0.0.1/当然,即使你使用的是服务器,安装的过程和这个教程的也是如出一辙的。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/04/LAMP环境下搭建word-press个人博客/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>建站</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux防毒软件-Sophos]]></title>
<url>%2F2018%2F08%2F02%2FLinux%E9%98%B2%E6%AF%92%E8%BD%AF%E4%BB%B6-Sophos%2F</url>
<content type="text"><![CDATA[官方站点:https://www.sophos.com/zh-cn.aspxLinux的安全性被认为要高于其他操作系统.但是随着越来越多的Linux操作系统开始担当开发人员工作站,网站服务器和内部文档服务器等关键角色,它也逐渐成为黑客攻击的目标.除了Linux和跨平台系统容易被黑客利用外,没有得到保护的Linux设备还会成为Windows, Mac和安卓恶意软件的分布点。Sophos Antivirus for Linux可以为Linux服务器和台式机提供随用随需的可计划扫描。它为分布广泛的Linux系统提供了卓越的性能,稳定性和可靠性。而关于该防毒软件的特点,可以进去官网进行查看。该产品有免费版和付费版,而我个人认为免费版已经足够你的使用了。如果需要下载的话,首先需要注册账户,然后就没什么好说的了,就直接下载安装就好了。 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/02/Linux防毒软件-Sophos/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Windows10怎么进入干净启动模式]]></title>
<url>%2F2018%2F08%2F02%2FWindows10%E6%80%8E%E4%B9%88%E8%BF%9B%E5%85%A5%E5%B9%B2%E5%87%80%E5%90%AF%E5%8A%A8%E6%A8%A1%E5%BC%8F%2F</url>
<content type="text"><![CDATA[提示:以下操作存在风险,可能会导致第三方软件使用异常或系统无法进入,建议提前备份好数据后操作。按下快捷键 win+R,在运行里输入”msconfig”。回车即可打开“系统配置”,选中”服务”选项卡。单击选中”隐藏所有 Microsoft 服务”复选框,然后开始勾选你需要禁用的服务,注意你一定要只禁用你认为不需要的服务,这些服务通常是一些你不常用的软件的服务,然后单击“全部禁用”即可。如果你无疑间,禁用了某个服务,导致某个软件无法正常打开,提示说xxx service或xxx服务无法正常启动,那么你直接去”服务”里打开即可正常使用了。注意: 按照此步骤操作可让 Microsoft 服务继续运行。这些服务包括网络连接、即插即用、事件日志记录、错误报告和其他服务。如果禁用这些服务,可能会永久性删除所有还原点。在“系统配置”对话框的“启动”选项卡上,单击“打开任务管理器”。在任务管理器的“启动”选项卡上,针对你认为需要禁用的启动项,选择启动项并右击“禁用”。在“系统配置”对话框的“启动”选项卡上,点按或单击“确定”,会弹出”重启电脑”的对话框,然后重新启动电脑。 Tips: 如果你无意间,禁用了某个服务,导致某个软件无法正常打开,提示说xxx service或xxx服务无法正常启动,那么你直接去”服务”里打开即可正常使用了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/08/02/Windows10怎么进入干净启动模式/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Windows</category>
</categories>
<tags>
<tag>Windows</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python]]></title>
<url>%2F2018%2F07%2F28%2FOracle-%E5%8F%91%E5%B8%83%E4%BA%86%E4%B8%80%E4%B8%AA%E5%85%A8%E6%A0%88%E8%99%9A%E6%8B%9F%E6%9C%BA-GraalVM%EF%BC%8C%E6%94%AF%E6%8C%81-Python%EF%BC%81%2F</url>
<content type="text"><![CDATA[近日,Oracle 发布了一个黑科技”GraalVM“,号称是一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,真有这么神奇? GraalVM 简介Oracle开源了一个实验性的产品GraalVM,官方称之为Universal GraalVM。它打通了不同语言之间的鸿沟,让我们可以进行混合式多语言编程。GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python 和 R 语言等。 GraalVM 的特性1.更加高效快速的运行代码2.能与大多数编程语言直接交互3.使用 Graal SDK 嵌入多语言4.创建预编译的原生镜像5.提供一系列工具来监视、调试和配置所有代码 GraalVM 的作用支持多种语言组合编程来看下面这段代码这段代码它同时使用了Node.js、Java、R三种语言拿node平台的express框架跑起了一个简单的web服务器。 GraalVM 消除了各种编程语言之间的隔离性,那这种多编程语言结合使用会不会有性能影响?官方的说明是:零开销的互操作,这样,我们就可以为应用程序选择最佳的编程语言组合。 原生镜像加速来看下面这段代码GraalVM支持镜像加速,类似于Android的Ahead-Of-Time编译,将程序编译为原生的二进制程序,加速程序启动过程。GraalVM 可以预编译成原生镜像,从而极大提速了启动时间,并能减少 JVM 应用的内存占用。 可嵌入式运行环境GraalVM 可以被嵌入到各种应用程序中,既可以独立运行,也可以在已经内置好的 OpenJDK、Node.js、Oracle、MySQL 等环境中运行。 结合上面的特性,我们来看下 GraalVM 的架构图 GraalVM 版本介绍如下图所示,GraalVM 提供了社区版和企业版两个版本。从特性来看,上述所说的高性能、内存优化貌似都在企业版中,企业版也可能只是在社区版上又增加了额外的提升吧!官网下载地址 :http://www.graalvm.org/downloads/社区版下载地址:https://github.com/oracle/graal/releases 总结GraalVM 总体看起来还是很不错的,可以说这就是一个全栈开发平台,不仅支持主流编程语言,还能组合在一起编程,根据不同任务来选择最佳的语言。另外。它还能提高更高的执行效率,以及占用更少的内存。即使目前仍然处于测试阶段,而且功能先对来说并没有太稳定,但是这种包含多语言功能的开发平台,仍然具有很大的改进空间和发展前景,我们不妨一试,相信会给你带来不同的体验。至于应用场景,是否可应用于生产,现在还不能过早的下定论。对于这么一个变态级的产品,我们能做的只是期待它有更好的发展,仅此而已。 本文参考: 1. http://www.oracle.com/technetwork/cn/oracle-labs/program-languages/overview/index.html2.https://en.wikipedia.org/wiki/GraalVM 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/28/Oracle-发布了一个全栈虚拟机-GraalVM,支持-Python!/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>python</category>
</categories>
<tags>
<tag>python</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Nmap使用详解]]></title>
<url>%2F2018%2F07%2F25%2FNmap%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3%2F</url>
<content type="text"><![CDATA[导读Nmap 是一个网络探测和安全扫描程序,系统管理员和个人都可以使用Nmap软件扫描大型的网络,获取一台主机正在运行以及提供什么服务等信息。Nmap是在免费软件基金会的GNU General Public License (GPL)下发布的,可从 https://nmap.org/ 站点上免费下载。下载格式可以是tgz格式的源码或RPM格式。目前较稳定的版本是2.12。带有图形终端,本文集中讨论Nmap命令的使用。 简介:Nmap 是一个网络探测和安全扫描程序,系统管理员和个人都可以使用Nmap软件扫描大型的网络,获取一台主机正在运行以及提供什么服务等信息。Nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。Nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定.Nmap的命令语法相当简单。Nmap的不同选项和-s标志组成了不同的扫描类型,比如:一个Ping-scan命令就是”-sP”。在确定了目标主机和网络之后,即可进行扫描。如果以root来运行Nmap,Nmap的功能会大大的增强,因为超级用户可以创建便于Nmap利用的定制数据包。 Nmap命令使用详解[Ping扫描(Ping Sweeping)] [端口扫描(Port Scanning)] [隐蔽扫描(Stealth Scanning)][UDP扫描(UDP Scanning)][操作系统识别(OS Fingerprinting)][Ident扫描(Ident Scanning)] 说明 :找出网络上的主机,测试哪些端口在监听,这些工作通常是由扫描来实现的。扫描网络是黑客进行入侵的第一步。通过使用扫描器(如Nmap)扫描网络,寻找存在漏洞的目标主机。一旦发现了有漏洞的目标,接下来就是对监听端口的扫描。Nmap通过使用TCP协议栈指纹准确地判断出被扫主机的操作系统类型。在目标机上,Nmap运行灵活。使用Nmap进行单机扫描或是整个网络的扫描很简单,只要将带有”/mask”的目标地址指定给Nmap即可。地址是”victim/24”, 则目标是c类网络,地址是”victim/16”, 则目标是B类网络。另外,Nmap允许你使用各类指定的网络地址,比如 192.168.7.* , 是指192.168.7.0/24, 或 192.168.7.1,4,8-12,对所选子网下的主机进行扫描。 Ping扫描(Ping Sweeping)入侵者使用Nmap扫描整个网络寻找目标。通过使用” -sP”命令,进行ping扫描。缺省情况下,Nmap给每个扫描到的主机发送一个ICMP echo和一个TCP ACK, 主机对任何一种的响应都会被Nmap得到。举例:扫描192.168.7.0网络:123456root@kali:~# nmap -sP 192.168.7.0/24Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Host (192.168.7.11) appears to be up.Host (192.168.7.12) appears to be up.Host (192.168.7.76) appears to be up.Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second 如果不发送ICMP echo请求,但要检查系统的可用性,这种扫描可能得不到一些站点的响应。在这种情况下,一个TCP”ping”就可用于扫描目标网络。一个TCP”ping”将发送一个ACK到目标网络上的每个主机。网络上的主机如果在线,则会返回一个TCP RST响应。使用带有ping扫描的TCP ping选项,也就是”PT”选项可以对网络上指定端口进行扫描(本文例子中指的缺省端口是80(http)号端口),它将可能通过目标边界路由器甚至是防火墙。注意,被探测的主机上的目标端口无须打开,关键取决于是否在网络上。1234567root@kali:~# nmap -sP -PT80 192.168.7.0/24TCP probe port is 80Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Host (192.168.7.11) appears to be up.Host (192.168.7.12) appears to be up.Host (192.168.7.76) appears to be up.Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second 当潜在入侵者发现了在目标网络上运行的主机,下一步是进行端口扫描。Nmap支持不同类别的端口扫描TCP连接, TCP SYN, Stealth FIN, Xmas Tree,Null和UDP扫描。 端口扫描(Port Scanning)一个攻击者使用TCP连接扫描很容易被发现,因为Nmap将使用connect()系统调用打开目标机上相关端口的连接,并完成三次TCP握手。黑客登录到主机将显示开放的端口。一个tcp连接扫描使用”-sT”命令如下。1234567891011root@kali:~# nmap -sT 192.168.7.12Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Interesting ports on (192.168.7.12):Port State Protocol Service7 open tcp echo9 open tcp discard13 open tcp daytime19 open tcp chargen21 open tcp ftp...Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds 隐蔽扫描(Stealth Scanning)如果一个攻击者不愿在扫描时使其信息被记录在目标系统日志上,TCP SYN扫描可帮你的忙,它很少会在目标机上留下记录,三次握手的过程从来都不会完全实现。通过发送一个SYN包(是TCP协议中的第一个包)开始一次 SYN的扫描。任何开放的端口都将有一个SYN|ACK响应。然而,攻击者发送一个RST替代ACK,连接中止。三次握手得不到实现,也就很少有站点能记录这样的探测。如果是关闭的端口,对最初的SYN信号的响应也会是RST,让NMAP知道该端口不在监听。”-sS”命令将发送一个SYN扫描探测主机或网络:1234567891011root@kali:~# nmap -sS 192.168.7.7Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Interesting ports on saturnlink.nac.net (192.168.7.7):Port State Protocol Service21 open tcp ftp25 open tcp smtp53 open tcp domain80 open tcp http...Nmap run completed -- 1 IP address (1 host up) scanned in 1 second 虽然SYN扫描可能不被注意,但他们仍会被一些入侵检测系统捕捉。Stealth FIN,Xmas树和Null scans可用于躲避包过滤和可检测进入受限制端口的SYN包。这三个扫描器对关闭的端口返回RST,对开放的端口将吸收包。一个 FIN “-sF”扫描将发送一个FIN包到每个端口。然而Xmas扫描”-sX”打开FIN, URG和PUSH的标志位,一个Null scans “-sN”关闭所有的标志位。因为微软不支持TCP标准,所以FIN, Xmas Tree和Null scans在非微软公司的操作系统下才有效。 UDP扫描(UDP Scanning)如果一个攻击者寻找一个流行的UDP漏洞,比如 rpcbind漏洞或cDc Back orifice。为了查出哪些端口在监听,则进行UDP扫描,即可知哪些端口对UDP是开放的。Nmap将发送一个O字节的UDP包到每个端口。如果主机返回端口不可达,则表示端口是关闭的。但这种方法受到时间的限制,因为大多数的UNIX主机限制ICMP错误速率。幸运的是,Nmap本身检测这种速率并自身减速,也就不会产生溢出主机的情况。12345678910111213root@kali:~# nmap -sU 192.168.7.7WARNING: -sU is now UDP scan -- for TCP FIN scan use -sFStarting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Interesting ports on saturnlink.nac.net (192.168.7.7):Port State Protocol Service53 open udp domain111 open udp sunrpc123 open udp ntp137 open udp netbios-ns138 open udp netbios-dgm177 open udp xdmcp1024 open udp unknownNmap run completed -- 1 IP address (1 host up) scanned in 2 seconds 操作系统识别(OS Fingerprinting)通常一个入侵者可能对某个操作系统的漏洞很熟悉,能很轻易地进入此操作系统的机器。一个常见的选项是TCP/IP上的指纹,带有”-O”选项决定远程操作系统的类型。这可以和一个端口扫描结合使用,但不能和ping扫描结合使用。Nmap通过向主机发送不同类型的探测信号,缩小查找的操作系统系统的范围。指纹验证TCP包括使用FIN探测技术发现目标机的响应类型。BOGUS的标志探测,发现远程主机对发送的带有SYN包的不明标志的反应,TCP 初始序列号(ISN)取样发现ISN数值的样式,也可以用另外的方式决定远程操作系统。有一篇权威的关于指纹(fingertprinting)的文章, 作者:Fyodor,也是namp的作者,参见地址:http://www.insecure.org/nmap/nmap-fingerprinting-article.htmlNmap’s操作系统的检测是很准确也是很有效的,举例:使用系统Solaris 2.7带有SYN扫描的指纹验证堆栈。123456789101112131415root@kali:~# nmap -sS -O 192.168.7.12Starting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Interesting ports on comet (192.168.7.12):Port State Protocol Service7 open tcp echo9 open tcp discard13 open tcp daytime19 open tcp chargen21 open tcp ftp...TCP Sequence Prediction: Class=random positive incrementsDifficulty=17818 (Worthy challenge)Remote operating system guess: Solaris 2.6 - 2.7Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds Ident扫描(Ident Scanning)一个攻击者常常寻找一台对于某些进程存在漏洞的电脑。比如,一个以root运行的WEB服务器。如果目标机运行了identd,一个攻击者使用Nmap通过 “-I”选项的TCP连接,就可以发现哪个用户拥有http守护进程。我们将扫描一个Linux WEB服务器为例:1234567891011root@kali:~# nmap -sT -p 80 -I -O www.yourserver.comStarting nmap V. 2.12 by Fyodor ([email protected], www.insecure.org/nmap/)Interesting ports on www.yourserver.com (xxx.xxx.xxx.xxx):PortState Protocol Service Owner80 open tcp http rootTCP Sequence Prediction: Class=random positive incrementsDifficulty=1140492 (Good luck!)Remote operating system guess: Linux 2.1.122 - 2.1.132; 2.2.0-pre1 - 2.2.2Nmap run completed -- 1 IP address (1 host up) scanned in 1 second 如果你的WEB服务器是错误的配置并以root来运行,像上例一样,它将是很危险的。Apache 运行在root下,是不安全的。你可以通过把/etc/indeed.conf中的auth服务注销来阻止ident请求,并重新启动ident。另外也可使用ipchains或你最常用的防火墙,在网络边界上执行防火墙规则来终止ident请求,这可以阻止来路不明的人探测你的网站用户拥有哪些进程。 其他选项(Options)除了以上这些扫描,Nmap还提供了无数选项。有一个是”-PT”,,我们已经介绍过了。在目标机或网络上常见的未经过滤的端口,进行TCP “ping”扫描。另一个选项是”-P0”。在缺省设置下试图扫描一个端口之前,Nmap将用TCP ping” 和 ICMP echo命令ping一个目标机,如果ICMP 和TCP的探测扫描得不到响应,目标主机或网络就不会被扫描,即使他们是运行着的。而”-P0”选项允许在扫描之前不进行ping,即可进行扫描。你应该习惯使用”-v”命令,它详细列出所有信息,能和所有的扫描选项一起使用。你能反复地使用这个选项,获得有关目标机的更多信息。使用”-p “选项,可以指定扫描端口。比如 ,攻击者想探测你的web服务器的ftp(port 21),telnet (port 23), dns (port 53), http (port 80),想知道你所使用的操作系统,它将使用SYN扫描。1root@kali:~# nmap -sS -p 21,23,53,80 -O -v www.yourserver.com 总结我们可以使用工具来抵制黑客使用Nmap进行扫描,比如 Scanlogd, Courtney等,然而使用这样的工具并不能代替网络安全管理员。因为扫描只是攻击的前期准备,站点使用它只可以进行严密的监视,但是还是需要一个有着丰富经验的运维管理人员的存在的,比较没用任何工具可以代替人的。关于Nmap更多的资料可以参考该网站: http://www.nmap.com.cn/ 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/25/Nmap使用详解/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
<tag>Nmap</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Ubuntu搭建LNMP环境]]></title>
<url>%2F2018%2F07%2F25%2FUbuntu%E6%90%AD%E5%BB%BALNMP%E7%8E%AF%E5%A2%83%2F</url>
<content type="text"><![CDATA[导读Lightbot是一款由加拿大学生Danny Yaroslavski编写的关于计算机编程的迷宫游戏,游戏的目标是让机器人举起所有的蓝色瓷砖,当然它还会为孩子提供各种各样的指导和提示,直到完成目标。 安装nginx1yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel 1wget http://nginx.org/download/nginx-1.6.2.tar.gz 搭建Nginx静态服务器1lengyue@ubuntu:~# sudo apt-get install nginx 12lengyue@ubuntu:~$ sudo /etc/init.d/nginx start[ ok ] Starting nginx (via systemctl): nginx.service. 安装MySQL数据库1sudo apt-get install mysql-server安装过程中会出现如下图所示的界面,你只需要一直回车就可以了。搭建PHP环境 1234sudo apt-add-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get install php7.1-cli php7.1-cgi php7.1-mysqlsudo apt-get install php7.1-fpm 配置Nginx并运行PHP程序 12 本文参考: http://wiki.ubuntu.org.cn/Nginx 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/25/Ubuntu搭建LNMP环境/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Metasploit连接postgresql数据库]]></title>
<url>%2F2018%2F07%2F24%2Fmetasploit%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE%2F</url>
<content type="text"><![CDATA[扫描的时候为了方便查看扫描的结果,那么需要开启数据库服务。metasploit默认的数据库是postgresql数据库。首先开启postgresql数据库服务。12root@kali:~# /etc/init.d/postgresql start[ ok ] Starting postgresql (via systemctl): postgresql.service. 下面打开msfconsole,查看一下是否已连接数据库。123root@kali:~# msfconsolemsf > db_status[*] postgresql selected, no connection 表明未连接上postgresql数据库。 下面初始化一下meatsploit的数据库。1msf > msfdb init 查看数据库的配置文件(主要是查看数据库名,用户名,密码)。123456789101112131415161718192021222324252627282930root@kali:~# cat /usr/share/metasploit-framework/config/database.ymldevelopment: adapter: postgresql database: msf username: msf password: LlvOHTrjwhh52tjZWdNNIqDA2hHrkr4d90vGCg1+LEg= host: localhost port: 5432 pool: 5 timeout: 5production: adapter: postgresql database: msf username: msf password: LlvOHTrjwhh52tjZWdNNIqDA2hHrkr4d90vGCg1+LEg= host: localhost port: 5432 pool: 5 timeout: 5test: adapter: postgresql database: msf_test username: msf password: LlvOHTrjwhh52tjZWdNNIqDA2hHrkr4d90vGCg1+LEg= host: localhost port: 5432 pool: 5 timeout: 5 然后开始连接数据库。格式为:db_connect 用户名:密码@localhost:5432/数据库名12msf > db_connect msf:LlvOHTrjwhh52tjZWdNNIqDA2hHrkr4d90vGCg1+LEg=@localhost:5432/msf[*] Rebuilding the module cache in the background... 我们再次查看一下数据库状态12msf > db_status[*] postgresql connected to msf 如图所示,我们已经成功连接上了数据库,如果你想连接其他的数据库,需要先断开当前已经连接的数据库,可以直接在msfconsole下执行 msf> 。如果你在使用search参数查找模块的时候出现 Module database cache not built yet, using slow search ,那么你首先应该查看是否已经连接数据库,然后重新构建数据库缓存,只需要运行 db_rebuild_cache 即可。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/24/metasploit初始化配置/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Metasploit</tag>
</tags>
</entry>
<entry>
<title><![CDATA[一款hash破解工具-Dagon]]></title>
<url>%2F2018%2F07%2F11%2F%E4%B8%80%E6%AC%BE%E5%85%88%E8%BF%9B%E7%9A%84hash%E7%A0%B4%E8%A7%A3%E5%B7%A5%E5%85%B7%2F</url>
<content type="text"><![CDATA[Dagon是一是一种先进的哈希破解工具,支持多种哈希类型的暴力破解,支持自定义字符字典进行暴力,可以自动验证散列所用算法,从Unicode到ASCII的随机slat生成,等等。GitHub地址: https://github.com/Ekultek/Dagon 安装运行环境:python2.7.x1234root@kali:~# git clone https://github.com/ekultek/dagon.gitroot@kali:~# cd Dagon/root@kali:~/Dagon# pip install -r requirements.txt # 安装所需依赖的库![1](https://ws1.sinaimg.cn/large/006DGX4tly1ft66vh89p0j31kw18tamj.jpg) 基本用法123456python dagon.py -h 这将运行“帮助”菜单,并提供所有可能的标志python dagon.py -c <HASH> --bruteforce 这将为给定散列暴力破解尝试python dagon.py -l <FILE-PATH> --bruteforce 这将尝试暴力破解给定文件的散列(每行一个)python dagon.py -v <HASH> 这将检验hash的加密类型python dagon.py -V <FILE-PATH> 这将尝试验证每个文件的散列中,每行一个以上只是这个工具几个较为常用的参数,更多参数可以通过 *-h* 选项获取帮助。 使用查看hash加密类型1root@kali:~/Dagon# python dagon.py -v 49ba59abbe56e057 -L 破解单个加密的hash值1root@kali:~/Dagon# python dagon.py -c 49ba59abbe56e057 --bruteforce 以上只是最简单的操作,其余操作还需要你自己摸索。首先有必要说明一点,工具到底好不好用,hash值的破解率到底高不高,还是需要你经过测试才能知道的,而且对于MD5等加密算法,本身破解就十分有难度,目前根本不存在可以破解任何MD5加密的密码的工具。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/11/一款先进的hash破解工具/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>加密解密</category>
</categories>
<tags>
<tag>Kali</tag>
<tag>MD5</tag>
</tags>
</entry>
<entry>
<title><![CDATA[解决一下利用免费云主机暂时不能访问的问题]]></title>
<url>%2F2018%2F07%2F08%2F%E8%A7%A3%E5%86%B3%E4%B8%80%E4%B8%8B%E5%88%A9%E7%94%A8%E5%85%8D%E8%B4%B9%E4%BA%91%E4%B8%BB%E6%9C%BA%E6%9A%82%E6%97%B6%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AE%E7%9A%84%E9%97%AE%E9%A2%98%2F</url>
<content type="text"><![CDATA[实在要说一句’对不起,各位’,上次写的利用云虚拟主机搭建typecho博客的教程,有一些错误在里面,所以在此进行一些修正。如果各位看了那篇文章,就知道我建的那个博客显示”该网站不能正常访问”的问题了。其实我也是最近才知道不能正常访问的。但是我根据提示来排查错误,一直找不到原因。首先并不是需要备案的原因,”主机屋”的这个免费云主机是不需要备案的就可以正常访问的。其次,我将其加入白名单也是不可以的,因为这个是免费云主机,其IP是公共的故不能加入白名单。那就剩网站域名解析错误合格原因了。但是我检查了多次,发现并没有任何错误。解析是正常的,但是不能正常访问,那么说明解析的记录值也许是不正确的。后来,我在云虚拟主机的控制台找到了这个小细节。首先有必要说明一下,该记录值是根据用户自动分配的,也就是说不同用户的解析的记录值是不一样的,你需要根据自己的记录值来解析。果然是解析的记录值不正确。需要按照提示进行解析。在建站教程中,我是以ipv4作为记录值解析的,当时解析的IP地址就是FTP地址。其实这样解析正不正确,大家可以验证一下,如果解析正确的话,直接在浏览器输入该IP地址,也是可以正常访问到网站的,但是你会看到如下界面,则说明解析的是不正确的,该地址是没有映射到网站上去的。那么,我们正确解析上去就可以了。解析完毕后,也许不能立即生效,我们稍等一小会,再次刷新网页,就可以正常访问网站了。ok,成功解决问题!!!网址: http://lengyue1024.cn/ ,欢迎各位的访问。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/07/08/解决一下利用免费云主机暂时不能访问的问题/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[一款运行在Linux平台的轻型笔记软件CherryTree]]></title>
<url>%2F2018%2F06%2F30%2F%E4%B8%80%E6%AC%BE%E8%BF%90%E8%A1%8C%E5%9C%A8Linux%E5%B9%B3%E5%8F%B0%E7%9A%84%E8%BD%BB%E5%9E%8B%E7%AC%94%E8%AE%B0%E8%BD%AF%E4%BB%B6CherryTree%2F</url>
<content type="text"><![CDATA[软件官方主页: http://www.giuspen.com/cherrytree/GitHub项目地址: https://github.com/giuspen/cherrytreeCherryTree 是一款轻型笔记软件应用,配有丰富的文字和语法高亮显示、数据存储在单个XML文件或Sqlite。一个层级式笔记记录程序,具有富文本和代码高亮的功能。同时支持Windows平台和Linux平台,支持纯文本,富文本,markdown,支持代码高亮显示。今天只说Linux平台上。支持Debian、Ubuntu以及其衍生版本,支持Redhat以及其衍生版本。这款编辑神器很值得你拥有。我曾多次在国外的视频教程中看到那些大佬使用CherryTree作为教学记录笔记使用。 安装(以Ubuntu16.04 LTS演示)第一种方法:首先进入官网下载 ,然后直接用dpkg软件包管理工具安装即可。1lengyue@ubuntu:~$ sudo dpkg -i cherrytree_0.38.4-0_all.deb 有可能会遇到缺少依赖的问题,你只需运行以下命令即可成功安装。1lengyue@ubuntu:~$ sudo apt-get -f install 第二钟方法:添加ppa仓库,然后再安装。12lengyue@ubuntu:~$ sudo add-apt-repository ppa:giuspen/ppalengyue@ubuntu:~$ sudo apt-get install cherrytree 打开运行1lengyue@ubuntu:~$ cherrytree 使用点击左上角的那个樱桃🍒图标即可新建文本,然后根据自己需求设置格式,最后点击确定即可。以下是演示文本好了,更多操作可以自己摸索,哪里不会可以联系我询问。 扫码进群,我等到你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/30/一款运行在Linux平台的轻型笔记软件CherryTree/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Kali</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[利用云虚拟主机搭建typecho博客]]></title>
<url>%2F2018%2F06%2F29%2F%E5%88%A9%E7%94%A8%E4%BA%91%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E6%90%AD%E5%BB%BAtypecho%E5%8D%9A%E5%AE%A2%2F</url>
<content type="text"><![CDATA[首先晒一下自己做的站,网址: http://lengyue1024.cn/(没解析出wwww类型的网址,所以不能访问http://www.lengyue1024.cn)利用的是前天领取的免费云虚拟主机做的网站,仅仅是为了做一些测试以及练习建站,并没有作为主站使用,首先各位也可以参照本教程来搭建一个博客或者个人网站。OK,开始!首先下载typecho博客系统.官方地址: http://typecho.org/download官方文档: http://docs.typecho.org/doku.php主题网站: https://typecho.me/插件网站: https://plugins.typecho.me/首先下载FTP软件,我个人用的是“8uftp”,然后Linux系统上我推荐的是filezilla ,然后可以直接 sudo apt-get install filezilla 即可完成安装。我们首先进入主机屋的控制台页面,然后找到自己的FTP账号与FTP地址,你需要自己设置一个FTP密码用于连接FTP服务 。然后运行8uftp软件,填写FTP地址、账号、密码,连接上。如下图即为连接成功的样子。其中web文件存放网站程序文件,log文件为缓存的日志文件,data为备份文件。我们把下载好的typecho文件解压出来,然后把解压出来的文件全部上传到web文件中。还有一点一定要记住,你不要把web文件的上层目录也一同传进去,这样你打开网站的时候,会找不到主页,多了一层目录,就需要多访问一个目录才能进入网站主页。同时把web目录默认存在的index.htm也要删除了。做的类似我图中所示这样即可。然后右击上传即可。此时你点击主机屋默认为你分配的网站域名,即可看到网站安装页面了。如果你看到如下图所示。该主机默认的PHP版本是5.2.9,我们需要调整一下PHP版本才可以,调整为如图所示,才可以。然后刷新一下页面,好了,安装页面出来了。然后可以点击”开始下一步”,进行安装。这个时候我们需要MySQL数据库的信息,我们需要初始化数据库。即可看到数据库的信息了,我们需要设置一个数据库的密码,自己一定要记住这个密码,一会会用到。我们开始填写配置信息,数据库地址设置为127.0.0.1,数据库名称、账号、密码均在数据库基本信息这里,按照你的MySQL数据库基本信息填写即可。然后设置博客后台登陆账号、密码。这些一定要仔细填写,并且记住,以方便后期进入后台管理自己的博客。然后即可看到安装成功的界面了。然后我们可以进入首页访问自己的博客这里我换个主题,将下载好的主题解压出来。 上传到/Web/usr/themes/文件夹下。然后进入后台管理界面,启用刚才安装的主题即可。刷新一下页面,即可看到新主题已经上线,嘿嘿~~~如果你需要安装什么新的插件的话,你首先下载解压出来,然后上传到/Web/usr/plugins/目录下,再到后台启用即可。一切都设置好的话,我们可以自己买个域名,我这里有几个域名,都是在阿里云购买的,解析了,开始解析并绑定域名。点击”域名绑定”,输入你购买的域名。再进入阿里云控制台,开始解析域名,我这里解析出一个www和@类型。如果你是初次建站,你也许不理解这是什么意思,但是这里不做过多解释了,你只需按照我图示操作即可。还有一点就是,你解析出来的是什么类型的网址,你就绑定什么类型的。一定要全部绑定,否则不能正常访问。其中的记录值即为FTP地址。解析成功后,点击你的域名即可打开你的博客了。好了,整个过程就是这样,如果你还有哪里不懂的,可以加我QQ与我讨论。我所用到的软件以及主题都传到群文件了,如果你需要的话,可以加群。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/29/利用云虚拟主机搭建typecho博客/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[hash查询破解工具Hash-Buster]]></title>
<url>%2F2018%2F06%2F28%2Fhash%E6%9F%A5%E8%AF%A2%E7%A0%B4%E8%A7%A3%E5%B7%A5%E5%85%B7Hash-Buster%2F</url>
<content type="text"><![CDATA[导读Hash Buster是一个调用了多个API接口去查询并破解hash的自动化工具,速度快且成功率很高。识别并破解单个hash值仅仅在3秒以下 GitHub项目地址: https://github.com/s0md3v/Hash-Buster 0x01 特点 自动标识hash加密类型 支持MD5、SHA1、SHA2加密 支持从文件中提取hash密码并且破解 支持以wordlist形式存储的hash值 同时调用了6个API接口 0x02 安装安装12root@kali:~# git clone https://github.com/s0md3v/Hash-Busterroot@kali:~# make && make install 0x03 选项选项 -s HASH hashed string # hash值 -f PATH file containing hashes # 包含hash值的文件 -d DIR directory containing hashes # 包含hash值的字典文件 0x04 使用(以下仅仅是我为测试而使用的hash加密过的值)1234567891011121314root@kali:~/Hash-Buster# python hash.py -s 7cec85c75537840dad40251576e5b757|__| |__| [__ |__| |__] | | [__ | |___ |__/| | | | ___] | | |__] |__| ___] | |___ | \ v2.0[!] Hash function : MD512356root@kali:~/Hash-Buster# python hash.py -s 9fe2839c7d19fe2511ef5cc3d63bd475b139fc83_ _ ____ ____ _ _ ___ _ _ ____ ___ ____ ____|__| |__| [__ |__| |__] | | [__ | |___ |__/| | | | ___] | | |__] |__| ___] | |___ | \ v2.0[!] Hash function : SHA112356 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/28/hash查询破解工具Hash-Buster/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>加密解密</category>
</categories>
<tags>
<tag>Kali</tag>
<tag>MD5</tag>
</tags>
</entry>
<entry>
<title><![CDATA[领取免费虚拟主机]]></title>
<url>%2F2018%2F06%2F27%2F%E9%A2%86%E5%8F%96%E5%85%8D%E8%B4%B9%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%2F</url>
<content type="text"><![CDATA[其实主机屋早就有这个活动了,只是今天才知道,但还是有必要写出来给不知道的同学玩玩的。该主机只适合做测试或者简单学习使用,不要存储数据,也不要利用它做网站。免费的没好货,你明白这一点就不要抱怨这台主机的各种缺点了。网址: http://www.zhujiwu.com首先注册账户,这些不必多说什么,需要手机号、 QQ号。然后进入免费专区,选择”免费虚拟主机”。需要绑定微信号。然后进入控制台,在左侧栏点击”产品”就可以看到自己的虚拟主机了。这是一台Windows NT主机。然后点击”管理”就可以管理自己的云虚拟主机了。首先要设置一个密码,记住你的主机的IP地址、账号、密码。方便以后登陆管理。默认只有30天使用时间,但是可以免费延期,你可以提交申请延期,具体步骤看网站即可。点击网站域名即可登陆进去。当然你需要利用FTP软件进行上传网站程序上去才可以。上传点你写的网页还是可以的。忠心提醒: 不适合做个人网站或者博客 还请你一定记住。但是你可以利用该主机学习一下建站,但也只是做测试而已,别想着做太多事。s 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/27/领取免费虚拟主机/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[在Linux终端听网易云音乐]]></title>
<url>%2F2018%2F06%2F26%2F%E5%9C%A8Linux%E7%BB%88%E7%AB%AF%E5%90%AC%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90%2F</url>
<content type="text"><![CDATA[演示环境: Ubuntu16.04(LTS)如果你是其他的系统,你可以去GitHub地址 寻找安装方法。 功能特性 ➢ 320kbps的高品质音乐 ➢ 歌曲,艺术家,专辑检索 ➢ 网易22个歌曲排行榜 ➢ 网易新碟推荐 ➢ 网易精选歌单 ➢ 网易主播电台 ➢ 私人歌单,每日推荐 ➢ 随心打碟 ➢ 本地收藏,随时加❤ ➢ 播放进度及播放模式显示 ➢ 现在播放及桌面歌词显示 ➢ 歌曲评论显示 ➢ 一键进入歌曲专辑 ➢ 定时退出 ➢ Vimer式快捷键让操作丝般顺滑 ➢ 可使用数字快捷键 ➢ 可使用自定义全局快捷键 安装12lengyue@ubuntu:~$ sudo pip install NetEase-MusicBoxlengyue@ubuntu:~$ sudo apt-get install mpg123 如果你遇到以下情况请使用以下命令进行安装1lengyue@ubuntu:~$ sudo -H pip install NetEase-MusicBox 安装成功后,就可以直接使用了。1lengyue@ubuntu:~$ musicbox 由于该工具完全依赖于终端,所以指南使用快捷键方式来进行操作,类似于vim的命令行模式。 J Down 下移 K Up 上移 H Back 后退 L Forword 前进 U Prev page 上一页 D Next page 下一页 F Search 快速搜索 [ Prev song 上一曲 ] Next song 下一曲 = Volume + 音量增加 - Volume - 音量减少 Space Play/Pause 播放/暂停 ? Shuffle 手气不错 M Menu 主菜单 P Present/History 当前/历史播放列表 I Music Info 当前音乐信息 ⇧+P Playing Mode 播放模式切换 A Add 添加曲目到打碟 ⇧+A Enter album 进入专辑 G To the first 跳至首项 ⇧+G To the end 跳至尾项 Z DJ list 打碟列表 S Star 添加到收藏 C Collection 收藏列表 R Remove 删除当前条目 ⇧+J Move Down 向下移动当前项目 ⇧+K Move Up 向上移动当前项目 ⇧+C Cache 缓存歌曲到本地 , Like 喜爱 . Trash FM 删除 FM / Next FM 下一FM Q Quit 退出 T Timing Exit 定时退出 W Quit&Clear 退出并清除用户信息 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/26/在Linux终端听网易云音乐/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux终端下查看天气预报]]></title>
<url>%2F2018%2F06%2F25%2FLinux%E7%BB%88%E7%AB%AF%E4%B8%8B%E6%9F%A5%E7%9C%8B%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5%2F</url>
<content type="text"><![CDATA[wttr.in 是一个面向控制台的天气预报服务,支持各种信息表示方法像终端面向ANSI-序列用于HTTP客户端控制台例如curl、wgethttpie,HTML的web浏览器或用于PNG图形。 GitHub地址: https://github.com/chubin/wttr.in演示环境为 Ubuntu16.04(LTS)首先安装curl。1lengyue@ubuntu:~$ sudo apt-get install curl 查看帮助1lengyue@ubuntu:~$ curl wttr.in/:help 然后直接运行1lengyue@ubuntu:~$ curl wttr.in 他会自动获取你的IP地址,然后来显示当地的3天的天气预报,十分具体。当然因为是根据你的IP地址来定位的,所以有时候并不可能定位到你的准确位置。所以我们还可以指定自己城市。你只需要用/作为前缀,加上城市名即可。当然城市名需要是准确存在的才行。1lengyue@ubuntu:~$ curl wttr.in/Beijing 你还可以用指定使用IP地址或域名,以/@作为前缀,加上IP地址或者域名即可。12lengyue@ubuntu:~$ curl wttr.in/@bingyublog.comlengyue@ubuntu:~$ curl wttr.in/@151.101.41.147 你还可以将天气预报直接下载到本地,生成png图片来进行查看。你只需要以/作为前缀,然后加上图片名称.png即可。12lengyue@ubuntu:~$ wget wttr.in/tianqi.pnglengyue@ubuntu:~$ eog tianqi.png 个人感觉 ,这些就是最常用的操作了,如果你想获取更多的用法可以直接访问其GitHub项目地址。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/25/Linux终端下查看天气预报/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Windows系统进程及其基本含义]]></title>
<url>%2F2018%2F06%2F21%2FWindows%E7%B3%BB%E7%BB%9F%E8%BF%9B%E7%A8%8B%E5%8F%8A%E5%85%B6%E5%9F%BA%E6%9C%AC%E5%90%AB%E4%B9%89%2F</url>
<content type="text"><![CDATA[接下来,我以个人win10系统为例,教你快速认识Windows系统进程及其基本含义。进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操 作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。 系统进程的主要作用是确保操作系统能够正常运行,在Windows10系统中,右击任务栏任意空白处,在弹出的跨界菜单中单击“启动任务管理器”,打开“任务管理器”窗口,切换至“进程”选项卡,便可看见当前正在运行的所有进程。用户名为“Admin”所对应的进程就是系统进程。当然你也可以使用快捷键 ctr+alt+delete,然后点击”任务管理器”打开。打开后是这样。 我们切换至”详细信息”选项卡。可以看到更为详细的进程信息,包括运行程序名称、PID(进程的ID)、运行状态、运行程序所属的用户名、CPU占有率、占用内存大小、对该进程的描述。这些信息对于我们管理自己的系统提供了大量的信息。 最主要的系统进程及其基本含义如下: conime.exe :该进程与输入法编辑器相关,能够确保正常调整和编辑系统中的输入法。 carss.exe :该进程是微软客户端/服务端运行时子系统,该进程管理Windows图形相关任务。 ctfmon.exe :该进程与输入法有关,该进程的正常运行能够确保语言栏能正常显示在任务栏中。 explorer.exe :该进程是Windows资源管理器,可以说是Windows图形界面外壳程序,该进程的正常运行能够确保在桌面上显示桌面图标和任务栏。 lsass.exe :该进程用于Windows操作系统的安全机制、本地安全和登录策略。 services.exe :该进程用于启动和停止系统中的服务,如果用户手动终止该进程,系统也会重新启动该进程。 smss.exe :该进程用于调用对话管理子系统,负责用户与操作系统的对话。 svchost.exe :该进程是从动态链接库(DLL)中运行的服务的通用主机进程名称,如果用户手动终止该进程,系统也会重新启动该进程。 system :该进程是Windows页面内存管理进程,它能够确保系统的正常运行。 system idle process :该进程的功能是在CPU空闲时发出一个命令,使CPU挂起(暂时停止工作),从而有效降低CPU内核的温度。 winlogon.exe :该进程是Windows NT 用户登录程序,主要用于管理用户登录和退出。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/21/Windows系统进程及其基本含义/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Windows</category>
</categories>
<tags>
<tag>Windows</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux中的官方源、镜像源汇总]]></title>
<url>%2F2018%2F06%2F19%2FLinux%E4%B8%AD%E7%9A%84%E5%AE%98%E6%96%B9%E6%BA%90%E3%80%81%E9%95%9C%E5%83%8F%E6%BA%90%E6%B1%87%E6%80%BB%2F</url>
<content type="text"><![CDATA[0x00 企业站 0x00 搜狐 http://mirrors.sohu.com/ 0x01 网易 http://mirrors.163.com/ 0x02 阿里云 http://mirrors.aliyun.com/ 0x03 腾讯 http://android-mirror.bugly.qq.com:8080/(仅针对APP开发的软件,限流,不推荐) 0x04 淘宝 http://npm.taobao.org/ 0x01 教育站0x00 上海交通大学http://ftp.sjtu.edu.cn/html/resources.xml(部分移动运营商出口状况不佳,无法访问)0x01 华中科技大学http://mirror.hust.edu.cn/(当前已用容量估计:4.83T)0x02 清华大学http://mirrors.tuna.tsinghua.edu.cn/(当前已用容量估计:9.8T)0x03 北京理工大学http://mirror.bit.edu.cn/web/0x04 兰州大学http://mirror.lzu.edu.cn/0x05 中国科技大学http://mirrors.ustc.edu.cn/(当前已用容量估计:21.32T)0x06 大连东软信息学院 http://mirrors.neusoft.edu.cn/(当前已用容量估计:2.5T) 0x07 东北大学http://mirror.neu.edu.cn/0x08 大连理工大学http://mirror.dlut.edu.cn/0x09 哈尔滨工业大学http://run.hit.edu.cn/html/(部分联通运营商出口状况不佳,无法访问)0x0A 北京交通大学http://mirror.bjtu.edu.cn/cn/0x0B 天津大学http://mirror.tju.edu.cn(无法访问,ping超时)0x0C 中国地质大学http://mirrors.cug.edu.cn/(当前已用容量估计:2.3T)0x0D 浙江大学http://mirrors.zju.edu.cn/0x0E 厦门大学http://mirrors.xmu.edu.cn/0x0F 中山大学http://mirror.sysu.edu.cn/0x10 重庆大学 http://mirrors.cqu.edu.cn/(当前已用容量估计:3.93T)0x11 北京化工大学http://ubuntu.buct.edu.cn/(Android SDK镜像仅供校内使用,当前已用容量估计:1.72T)0x12 南阳理工大学http://mirror.nyist.edu.cn/0x13 中国科学院http://www.opencas.org/mirrors/0x14 电子科技大学http://ubuntu.uestc.edu.cn/(无法访问,ping超时)0x15 电子科技大学星辰工作室http://mirrors.stuhome.net/(当前已用容量估计:1.08T)0x16 西北农林科技大学http://mirrors.nwsuaf.edu.cn/(只做CentOS镜像,当前已用容量估计:140GB)0x17 浙江大学http://mirrors.zju.edu.cn/0x18 台湾淡江大学 http://ftp.tku.edu.tw/Linux/0x03 其他 0x00 首都在线科技股份有限公司http://mirrors.yun-idc.com/0x01 中国电信天翼云 http://mirrors.noc.im/(当前已用容量估计:3.74T)0x02 常州贝特康姆软件技术有限公司 http://centos.bitcomm.cn/(只做CentOS镜像,当前已用容量估计:140GB)0x03 公云PubYun(母公司为贝特康姆)http://mirrors.pubyun.com/0x04 Linux运维派:http://mirrors.skyshe.cn/(使用阿里云服务器,界面使用浙江大学的模板,首页维护,内容可访问)0x05 中国互联网络信息中心:http://mirrors.cnnic.cn/(只做Apache镜像,当前已用容量估计:120GB)0x06 Fayea工作室:http://apache.fayea.com/(只做Apache镜像,当前已用容量估计:120GB)0x07 开源中国社区:http://mirrors.oss.org.cn/0x04 Ubuntu0x00 阿里云:http://mirrors.aliyun.com/ubuntu-releases/0x01 网易: http://mirrors.163.com/ubuntu-releases/0x02 搜狐:http://mirrors.sohu.com/ubuntu-releases/0x03 首都在线科技股份有限公司:http://mirrors.yun-idc.com/ubuntu-releases/0x05 CentOS 0x00 网易:http://mirrors.163.com/centos/0x01 搜狐: http://mirrors.sohu.com/centos/0x02 阿里云:http://mirrors.aliyun.com/centos/0x06 Apache 0x00 中国互联网络信息中心:http://mirrors.cnnic.cn/apache/0x01 华中科技大学http://mirrors.hust.edu.cn/apache/0x02 北京理工大学:http://mirror.bit.edu.cn/apache/0x03 TOMCAT全版本: https://archive.apache.org/dist/tomcat/0x07 MySQL 0x00 北京理工大学:http://mirror.bit.edu.cn/mysql/Downloads/0x01 中国电信天翼云: http://mirrors.ctyun.cn/Mysql/0x02 搜狐镜像源:http://mirrors.sohu.com/mysql/0x08 PostgreSQL 0x00 浙江大学: 0x09 MariaDB 0x00 中国电信天翼云: 0x0A VideoLAN 0x00 大连东软信息学院:http://mirrors.neusoft.edu.cn/videolan/0x01 中国科技大学:http://mirrors.ustc.edu.cn/videolan-ftp/0X0B PHP 0x00 php全版本https://secure.php.net/releases/0X0C Eclipse 0x00 中国科技大学http://mirrors.ustc.edu.cn/eclipse/0x01 中国科学院http://mirrors.opencas.cn/eclipse/0x02 东北大学http://ftp.neu.edu.cn/mirrors/eclipse/,http://mirror.neu.edu.cn/eclipse/0x0D Android SDK 0x00 中国科学院http://mirrors.opencas.ac.cn/android/repository/0x01 南洋理工学院http://mirror.nyist.edu.cn/android/repository/0x02 中国科学院http://mirrors.opencas.cn/android/repository/0x03 腾讯http://android-mirror.bugly.qq.com:8080/android/repository/(限流,不推荐)0x04 大连东软信息学院http://mirrors.neusoft.edu.cn/android/repository/(同步效果不如中科院的镜像,不推荐)(十四)、Xcode 0x00 腾讯http://android-mirror.bugly.qq.com:8080/Xcode/(从7.2之后不再更新,建议直接从官网下载)容器 0x00 lxc国内镜像源https://mirrors.tuna.tsinghua.edu.cn/lxc-images/ 官方镜像列表状态地址 0x00 CentOShttp://mirror-status.centos.org/#cn 0x01 Archlinuxhttps://www.archlinux.org/mirrors/status/ 0x02 Ubuntuhttps://launchpad.net/ubuntu/+cdmirrors 0x03 Debianhttp://mirror.debian.org/status.html 0x04 Fedora Linux/Fedora EPELhttps://admin.fedoraproject.org/mirrormanager/mirrors 0x05 Apachehttp://www.apache.org/mirrors/#cn 0x06 Cygwinhttps://www.cygwin.com/mirrors.html 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/19/Linux中的官方源、镜像源汇总/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[手把手搭建个人博客(图文教程)]]></title>
<url>%2F2018%2F06%2F17%2F%C2%96%E6%89%8B%E6%8A%8A%E6%89%8B%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%EF%BC%88%E5%9B%BE%E6%96%87%E6%95%99%E7%A8%8B%EF%BC%89%2F</url>
<content type="text"><![CDATA[请输入密码(不要尝试暴力破解,没用的) Incorrect Password! No content to display! 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]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[kali渗透信息收集工具sparta]]></title>
<url>%2F2018%2F06%2F16%2Fkali%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E5%B7%A5%E5%85%B7sparta%2F</url>
<content type="text"><![CDATA[导读Sparta是一款集合渗透工具套件,集合了nmap、nikto、hydra等工具,利用各个优秀工具的结合,使渗透测试更加便捷 0x00 工具简介 SPARTA 是一款可以通过帮助渗透测试者分阶段扫描和枚举来简化网络基础设施渗透测试的python GUI应用。通过指向和点击这些工具套件以及简便地显示所有工具扫描结果来允许测试者节省时间。花越少的时间在设置命令和工具上,就可以有更多的时间花在聚焦分析结果上。工具主页:http://sparta.secforce.com/GitHub地址: https://github.com/secforce/spartakali官方简介: https://tools.kali.org/information-gathering/sparta 0x01 工具使用 我开了一台Ubuntu作为测试主机,开启了lampp。Sparta已经集成到kali系统中了,所以我们无需安装,可以直接运行使用。我们可以在 applications—information gathering—sparta 双击打开或者直接在命令行里输入 sparta 运行。在左侧栏“ Click here to add host(s) to scope ”进行添加主机,可以是一个IP地址,也可以是一个范围,即可扫描,速度还是很快的。下方”log”处显示扫描进度以及扫描状态。默认扫描的是最彻底和完全的,所以完成需要一定的时间。Sparta一旦发现活跃的主机和开发的端口,那么它就会运行其他的工具,比如Nikto,smbenum,snmpcheck,等等,另外的发现服务。然后我们指定扫描到的主机,点击”Services”可以查看主机开放的端口以及对应的服务等信息,可以对扫描出来的服务进一步分析。我们可以看到已经扫描出这是一台运行Linux系统的主机,而且已经开启了mysql,http,telnet等服务,然后我们点击具体的端口可以查看更加详细的信息,这些都是有助于我们接下来进行渗透测试的。接下来,我们还可以指定特定的服务来使用工具套件进行渗透测试。如图所示然后对于那些需要登陆的服务,例如Telnet、SSH、FTP等,我们可以使用一些密码破解工具来尝试暴力破解密码。按照如图所示的进行配置,我们指定爆破用户名为root的账户,并且我们为破解指定一个字典,点击”run”开始破解。成功率取决于你的字典以及运气。 好了,它最基础的操作已经说完了,当然它的功能远不止于此,这些需要你在实践中自己操作来学习,你要永远记住一个自动化渗透工具可以为你节省大量的时间来完成自动化渗透测试中的许多繁琐的任务。 扫描进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/16/kali信息收集工具sparta/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>
</entry>
<entry>
<title><![CDATA[无法建立目录wp-content/uploads/xxx/xxx.有没有上级目录的写权限?]]></title>
<url>%2F2018%2F06%2F12%2F%E6%97%A0%E6%B3%95%E5%BB%BA%E7%AB%8B%E7%9B%AE%E5%BD%95wp-content-uploads-xxx-xxx-%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%8A%E7%BA%A7%E7%9B%AE%E5%BD%95%E7%9A%84%E5%86%99%E6%9D%83%E9%99%90%2F</url>
<content type="text"><![CDATA[今天在设置站点图标、上传图片的时候,遇到了这个问题。提示”无法建立目录wp-content/uploads/2018/06.有没有上级目录的写权限?”首先根据提示,我们可以知道是因为权限的问题,所以我可以根据提示进行解决问题。我们进入word press的文件夹。找到wp-content文件夹,发现在这个文件夹下是没有uploas这个文件夹的,所以我们需要创建一个.1lengyue@ubuntu:/opt/lampp/htdocs/wordpress/wp-content$ sudo mkdir uploads/ 然后我们对整个word press文件夹都设置权限,经过我自己亲测,发现你设置755的文件权限,并不能解决这个问题,而是需要777的权限。1lengyue@ubuntu:~$ sudo chmod -R 777 /opt/lampp/htdocs/wordpress/ 好了,这样就可以了。你再次向网站上传文件的时候,就再也不会出现这个问题了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/12/无法建立目录wp-content-uploads-xxx-xxx-有没有上级目录的写权限/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[更改word press站点主题]]></title>
<url>%2F2018%2F06%2F11%2F%E6%9B%B4%E6%94%B9word-press%E7%AB%99%E7%82%B9%E4%B8%BB%E9%A2%98%2F</url>
<content type="text"><![CDATA[word press提供了大量精美的主题,我们可以直接在线搜索就可以了,但是一些主题是经过别人更改的,所以是在wordpress主题站点里是搜索不出来的。这个时候,我们需要下载到本地,再进行安装。今天就来说说本地下载安装的方法。在此,我推荐一个自己喜欢的二次元风格的主题。地址: https://github.com/ShawnZeng1996/Memory直接下载zip文件,先解压,再复制到wordpress的主题文件夹中。12lengyue@ubuntu:~$ sudo unzip Memory.ziplengyue@ubuntu:~$ sudo cp -r Memory /opt/lampp/htdcos/wordpress/wp-content/themes/ 然后打开浏览器输入 http://127.0.0.1/wordpress/wp-admin/themes.php 打开即可看到你安装的主题了,然后点击启用就可以了。当然这个时候,主题还是初始化的状态,还需要设置一下才可以接续使用。我们下拉仪表盘的选项,就可以看到Memory主题设置这个按钮了,我们进去按照自己的需求设置一下就可以使用了,这个主题还是提供了许多功能选项的。设置好,打开主页就可以了,下面是我初步设置好的图例。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/11/更改word-press站点主题/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[本地搭建wordpress站点]]></title>
<url>%2F2018%2F06%2F07%2F%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BAwordpress%E7%AB%99%E7%82%B9%2F</url>
<content type="text"><![CDATA[环境: 虚拟机中的Ubuntu 16.04 (Windows、Mac系统操作步骤大致相同)本篇文章为在自己电脑上本地搭建wordpress站点,虽然不能进行外网访问,但是对于建站小白或者没有服务器的同学,本篇文章还是很有借鉴意义的。对你学习配置站点,也同样有意义。 首先准备xampp集成环境,这个在Ubuntu搭建DVWA靶机环境 文章中已经详细介绍,具体可以参考该篇文章。 接着打开终端启动xampp。1lengyue@ubuntu:~$ sudo /opt/lampp/lampp start 下面开始建立数据库,浏览器地址栏输入 http://127.0.0.1/phpmyadmin/ 即可打开数据库。接下来为wordpress站点设置一个专属的数据库。按图示操作即可。选择 账户-新增用户账户自定义设置用户名,主机名必须选择为本地,然后点击生成密码,会自动为你设置一个强加密类型的密码,一定要记住这个密码,是你登陆、操作数据库唯一的凭证。然后下拉,设置数据库权限等数据库相关信息。下拉,点击提交,即成功创建了一个新的数据库。 下面开始安装wordpress。下载地址: https://cn.wordpress.org/txt-download/下载后解压并添加到xampp中。12lengyue@ubuntu:~$ sudo unzip wordpress-4.9.4-zh_CN.ziplengyue@ubuntu:~$ sudo cp -r wordpress /opt/lampp/htdocs/ ## 解压后文件名设置为wordpress 浏览器地址栏输入 http://127.0.0.1/wordpress/ 打开即可。将数据库添加到站点。然后就设置站点信息了。自定义即可。好了,安装成功。然后我们登陆进网站后台。打开网站首页。 如果你在安装过程中出现以下报错界面。我们根据提示操作即可,创建一个wp-config.php文件,并将框内内容全部复制粘贴进去,保存退出即可。123lengyue@ubuntu:~$ cd /opt/lampp/htdocs/wordpresslengyue@ubuntu:/opt/lampp/htdocs/wordpress$ sudo touch wp-config.phplengyue@ubuntu:/opt/lampp/htdocs/wordpress$ sudo gedit wp-config.php 浏览器刷先后,就可以正常安装了。 OK,大功告成!!!余下的工作就是设置网站,样式和添加网站内容了,wordpress提供了大量的插件以及主题,所以余下工作还是很简单的。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/06/07/本地搭建wordpress站点/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Web</category>
</categories>
<tags>
<tag>建站</tag>
</tags>
</entry>
<entry>
<title><![CDATA[一款强大的IP定位工具]]></title>
<url>%2F2018%2F05%2F24%2F%E4%B8%80%E6%AC%BE%E5%BC%BA%E5%A4%A7%E7%9A%84IP%E5%AE%9A%E4%BD%8D%E5%B7%A5%E5%85%B7%2F</url>
<content type="text"><![CDATA[首先说明一下,此工具可以根据你指定的IP或网址,查询出国家、城市、经度、纬度、时区等详细信息。这个工具最重要的就是可以查询出经纬度这个信息了,并且会直接提供给你此经纬度所在位置的谷歌地图。当然根据IP地址定位的在线工具也有很多,但是通常只能精确到某一城市,但是该工具会根据查询到的经纬度精确到街道。我感觉还是有必要说明一下,你查询的IP只是所用流量运营商出口的地址,可能与真实位置有偏差,这是很正常的。下面开始安装并使用。需要python3运行环境(kali已经自带)1root@kali:~# git clone https://github.com/maldevel/IPGeoLocation 安装pip3,一会需要用pip3安装所需的库函数12root@kali:~# apt-get install python3-piproot@kali:~# pip3 --version ##验证是否已经成功安装pip3 安装所需库函数12root@kali:~# cd IPGeoLocation/root@kali:~/IPGeoLocation# pip3 install -r requirements.txt --user 选项说明:1234567891011121314151617181920212223242526272829303132333435$ python3 ipgeolocation.pyusage: ipgeolocation.py [-h] [-m] [-t TARGET] [-T file] [-u User-Agent] [-U file] [-g] [--noprint] [-v] [--nolog] [-x PROXY] [-X file] [-e file] [-ec file] [-ex file]IPGeolocation 2.0.4--[ Retrieve IP Geolocation information from ip-api.com--[ Copyright (c) 2015-2016 maldevel (@maldevel)--[ ip-api.com service will automatically ban any IP addresses doing over 150 requests per minute.optional arguments: -h, --help show this help message and exit -m, --my-ip Get Geolocation info for my IP address. -t TARGET, --target TARGET IP Address or Domain to be analyzed. -T file, --tlist file A list of IPs/Domains targets, each target in new line. -u User-Agent, --user-agent User-Agent Set the User-Agent request header (default: IP2GeoLocation 2.0.3). -U file, --ulist file A list of User-Agent strings, each string in new line. -g Open IP location in Google maps with default browser. --noprint IPGeolocation will print IP Geolocation info to terminal. It is possible to tell IPGeolocation not to print results to terminal with this option. -v, --verbose Enable verbose output. --nolog IPGeolocation will save a .log file. It is possible to tell IPGeolocation not to save those logfiles with this option. -x PROXY, --proxy PROXY Setup proxy server (example: http://127.0.0.1:8080) -X file, --xlist file A list of proxies, each proxy url in new line. -e file, --txt file Export results. -ec file, --csv file Export results in CSV format. -ex file, --xml file Export results in XML format. 我以自己博客为例演示简单的操作1234567891011121314151617181920212223root@kali:~/IPGeoLocation# python3 ipgeolocation.py -t bingyublog.comIPGeolocation 2.0.4--[ Retrieve IP Geolocation information from ip-api.com--[ Copyright (c) 2015-2016 maldevel (@maldevel)--[ ip-api.com service will automatically ban any IP addresses doing over 150 requests per minute.Target: bingyublog.comIP: 151.101.41.147ASN: AS54113 FastlyCity: San JoseCountry: United StatesCountry Code: USISP: FastlyLatitude: 37.3388Longtitude: -121.8914Organization: FastlyRegion Code: CARegion Name: CaliforniaTimezone: America/Los_AngelesZip Code: 95141Google Maps: http://www.google.com/maps/place/37.3388,-121.8914/@37.3388,-121.8914,16z 我们复制此链接,在浏览器中打开即可查看地理位置了,还可以切换平面图和3D地图。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/24/一款强大的IP定位工具/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>
</entry>
<entry>
<title><![CDATA[ubuntu密码正确,一直无法进入桌面系统,又跳回到登录界面]]></title>
<url>%2F2018%2F05%2F23%2Fubuntu%E5%AF%86%E7%A0%81%E6%AD%A3%E7%A1%AE%EF%BC%8C%E4%B8%80%E7%9B%B4%E6%97%A0%E6%B3%95%E8%BF%9B%E5%85%A5%E6%A1%8C%E9%9D%A2%E7%B3%BB%E7%BB%9F%EF%BC%8C%E5%8F%88%E8%B7%B3%E5%9B%9E%E5%88%B0%E7%99%BB%E5%BD%95%E7%95%8C%E9%9D%A2%2F</url>
<content type="text"><![CDATA[今天晚上回来用ubuntu的时候,发现Ubuntu一直无法进入桌面系统,又跳回到登陆界面,但是密码一直是正确的。应该是我前几天卸载了一个桌面的主题,然后把桌面的一些配置、依赖什么的也删除了吧。所以我马上就进行了修复,毕竟重装系统是在你实在没办法的时候才用到的办法。下面就记录一下修复过程,过程属于那种简单暴力的办法。提醒各位一句,如果你的系统安装在硬盘上或者Ubuntu系统里存储了大量的数据,我不建议你按照我的办法进行修复。开始!我们按ctr+alt+F2,进入命令模式。这个时候我们输入命令 startx 是可以看到报错的。我们可以根据报错对配置文件进行更改以修复。但是不这样了,麻烦,也不一定看得懂报错的意思。既然桌面进不去,就是桌面出现问题了,那就卸载原本桌面,重装新的桌面系统。12lengyue@ubuntu:~$ sudo apt-get remove ubuntu-desktop ##卸载桌面lengyue@ubuntu:~$ sudo apt-get install ubuntu-desktop ##安装桌面 然后重启系统,再次进入,就可以成功进入桌面了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/23/ubuntu密码正确,一直无法进入桌面系统,又跳回到登录界面/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux面试题解析第3天]]></title>
<url>%2F2018%2F05%2F20%2FLinux%E9%9D%A2%E8%AF%95%E9%A2%98%E8%A7%A3%E6%9E%90%E7%AC%AC3%E5%A4%A9%2F</url>
<content type="text"><![CDATA[21.在Linux中,如何标识接在IDE0上的slave硬盘的第2个扩展分区? ( ) A. /dev/hdb2 B. /dev/hd1b2 C. /dev/hdb6 D. /dev/hd1b6 22.在应用程序起动时,如何设置进程的优先级? ( ) A. priority B. nice C. renice D. setpri 23.在 bash 中, 在一条命令后加入”1>&2” 意味着: ( ) A. 标准错误输出重定向到标准输入 B. 标准输入重定向到标准错误输出 C. 标准输出重定向到标准错误输出 D. 标准输出重定向到标准输入 24.下面哪条命令可以把f1.txt复制为f2.txt? ( ) A. cp f1.txt | f2.txt B. cat f1.txt | f2.txt C. cat f1.txt > f2.txt D. copy f1.txt | f2.txt 25.显示一个文件最后几行的命令是: ( ) A. tac B. tail C. rear D. last 26.如何快速切换到用户John的主目录下? ( ) A. cd @John B. cd #John C. cd &John D. cd ~John 27.把一个流中所有字符转换成大写字符,可以使用下面哪个命令? ( ) A. tr a-z A-Z B. tac a-z A-Z C.sed /a-z/A-Z D. sed –toupper 28.使用什么命令可以查看Linux的启动信息? ( ) A. mesg -d B. dmesg C. cat /etc/mesg D. cat /var/mesg 29.运行级定义在: ( ) A. in the kernel B. in /etc/inittab C. in /etc/runlevels D. using the rl command 30.如何装载(mount)上在 /etc/fstab 文件中定义的所有文件系统? ( ) A. mount -a B. mount /mnt/* C. mount D. mount /etc/fstab ——————分割线——————- 21.在Linux中,如何标识接在IDE0上的slave硬盘的第2个扩展分区? ( ) A. /dev/hdb2 B. /dev/hd1b2 C. /dev/hdb6 D. /dev/hd1b6 解析:22.在应用程序起动时,如何设置进程的优先级? ( ) A. priority B. nice C. renice D. setpri 解析: nice 命令在你日常工作中并不常用,这个命令用于调整程序运行的优先级。23.在 bash 中, 在一条命令后加入”1>&2” 意味着: ( ) A. 标准错误输出重定向到标准输入 B. 标准输入重定向到标准错误输出 C. 标准输出重定向到标准错误输出 D. 标准输出重定向到标准输入 解析: >&用于将标准输出重定向到标准错误输出。这个我在Linux之输入输出重定向一文中提到过,具体可以查看此文获取。 24.下面哪条命令可以把f1.txt复制为f2.txt? ( ) A. cp f1.txt | f2.txt B. cat f1.txt | f2.txt C. cat f1.txt > f2.txt D. copy f1.txt | f2.txt 解析:25.显示一个文件最后几行的命令是: ( ) A. tac B. tail C. rear D. last 解析:26.如何快速切换到用户John的主目录下? ( ) A. cd @John B. cd #John C. cd &John D. cd ~John 解析:27.把一个流中所有字符转换成大写字符,可以使用下面哪个命令? ( )A. tr a-z A-Z B. tac a-z A-Z C.sed /a-z/A-Z D. sed –toupper 解析:28.使用什么命令可以查看Linux的启动信息? ( ) A. mesg -d B. dmesg C. cat /etc/mesg D. cat /var/mesg 解析:29.运行级定义在: ( ) A. in the kernel B. in /etc/inittab C. in /etc/runlevels D. using the rl command 解析:30.如何装载(mount)上在 /etc/fstab 文件中定义的所有文件系统? ( ) A. mount -a B. mount /mnt/* C. mount D. mount /etc/fstab 解析: 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/20/Linux面试题解析第3天/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>试题研究</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>试题解析</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux面试题解析第2天]]></title>
<url>%2F2018%2F05%2F19%2FLinux%E9%9D%A2%E8%AF%95%E9%A2%98%E8%A7%A3%E6%9E%90%E7%AC%AC2%E5%A4%A9%2F</url>
<content type="text"><![CDATA[11.作为一个管理员,你希望在每一个新用户的目录下放一个文件 .bashrc ,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。 ( ) A. /etc/skel/ B. /etc/default/ C. /etc/defaults/ D. /etc/profile.d/ 2.在bash中,export命令的作用是: ( ) A. 在子shell中运行命令 B. 使在子shell中可以使用命令历史记录 C. 为其它应用程序设置环境变量 D. 提供NFS分区给网络中的其它系统使用 13.在使用了shadow口令的系统中,/etc/passwd和/etc/shadow两个文件的权限正确的是:( ) A. -rw-r—– , -r——– B. -rw-r–r– , -r–r–r– C. -rw-r–r– , -r——– D. -rw-r–rw- , -r—–r– 14.下面哪个参数可以删除一个用户并同时删除用户的主目录? ( ) A. rmuser -r B. deluser -r C. userdel -r D. usermgr -r 15.有一个备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次,下面哪条crontab的项可以完成这项工作? ( ) A. 0 13,20 1,5 mybackup B. 0 13,20 1,2,3,4,5 mybackup C. 13,20 * 1,2,3,4,5 mybackup D. 0 13,20 1,5 mybackup 16.如何从当前系统中卸载一个已装载的文件系统 ( ) A. umount B. dismount C. mount -u D. 从 /etc/fstab 中删除这个文件系统项 17.如果你的umask设置为022,缺省的你创建的文件的权限为:( ) A. —-w–w- B. -w–w—- C. r-xr-x— D. rw-r–r– 18.在一条命令中如何查找一个二进制命令 Xconfigurator 的路径? ( ) A. apropos Xconfigurator B. find Xconfigurator C. where Xconfigurator D. which Xconfigurator 19.哪一条命令用来装载所有在 /etc/fstab 中定义的文件系统? ( ) A. amount B. mount -a C. fmount D. mount -f 20.运行一个脚本,用户不需要什么样的权限? ( ) A. read B. write C. execute D. browse on the directory ———————–分割线———————– 11.作为一个管理员,你希望在每一个新用户的目录下放一个文件 .bashrc ,那么你应该在哪个目录下放这个文件,以便于新用户创建主目录时自动将这个文件复制到自己的目录下。 ( ) A. /etc/skel/ B. /etc/default/ C. /etc/defaults/ D. /etc/profile.d/ 解析: C./etc/目录下并没有defaults这个文件夹。D. 在/etc/profile.d 目录中存放的是一些应用程序所需的启动脚本,全部是.sh的shell脚本文件。B./etc/default/目录下存放的都是一些与开机关机和系统设置有关的文件和文件夹。A.etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。 这个目录下的所有文件都是隐藏文件(以.点开头的文件),这个文件特别重要有用, 12.在bash中,export命令的作用是: ( ) A. 在子shell中运行命令 B. 使在子shell中可以使用命令历史记录 C. 为其它应用程序设置环境变量 D. 提供NFS分区给网络中的其它系统使用 解析: export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。 13.在使用了shadow口令的系统中,/etc/passwd和/etc/shadow两个文件的权限正确的是:( ) A. -rw-r—– , -r——– B. -rw-r–r– , -r–r–r– C. -rw-r–r– , -r——– D. -rw-r–rw- , -r—–r– 解析: 首先有必要说明一点/etc/passwd和/etc/shadow是属于配置文件的,可以通过 cat 命令进行查看 ,在有权限的情况下也可以通过文本编辑器进行编辑。用 ls -l /etc/shadow ls 和 -l /etc/passwd 来查看权限等信息。如图所示 14.下面哪个参数可以删除一个用户并同时删除用户的主目录? ( ) A. rmuser -r B. deluser -r C. userdel -r D. usermgr -r 解析: A.没有rmuser这个命令。B.deluser用来删除用户或组。 C.userdel用于删除指定的用户以及用户相关的文件。其中r选项为递归的进行删除,也就是删除用户的主目录。在Linux大部分的命令中r选项都是递归的用法。D.没有usermgr这个命令。 15.有一个备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次,下面哪条crontab的项可以完成这项工作? ( ) A. 0 13,20 1,5 mybackup B. 0 13,20 1,2,3,4,5 mybackup C. 13,20 * 1,2,3,4,5 mybackup D. 0 13,20 1,5 mybackup 解析: crontab命令是用于设置周期性被执行的指令, 用法:0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务),分别对应 分,时,日,月,星期,需要执行的命令。多个日期用.隔开,不进行设置的参数用*。 16.如何从当前系统中卸载一个已装载的文件系统 ( ) A. umount B. dismount C. mount -u D. 从 /etc/fstab 中删除这个文件系统项 解析: B.没用dismount这个命令。 C.mount用于挂载。A.umount用于卸载一个已装载的文件系统。 17.如果你的umask设置为022,缺省的你创建的文件的权限为:( ) A. —-w–w- B. -w–w—- C. r-xr-x— D. rw-r–r– 解析: umask设置了用户创建文件的默认权限,umask设置为022就是默认的权限,也可以理解为普通用户吧。由于此文件是你创建的,所以你一定具备r(读)和w(写)的权限,你此时并没用x(执行)的权限,可以通过chmod命令来提升权限。所以D一定是正确的。 18.在一条命令中如何查找一个二进制命令 Xconfigurator 的路径? ( ) A. apropos Xconfigurator B. find Xconfigurator C. where Xconfigurator D. which Xconfigurator 解析: A. Linux中没有apropos命令。B.find命令用来在指定目录下查找文件。C.没用where命令,有whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。 D.which命令用于查找并显示给定命令的绝对路径。 19.哪一条命令用来装载所有在 /etc/fstab 中定义的文件系统? ( ) A. amount B. mount -a C. fmount D. mount -f 解析: /etc/fstab包含了系统在启动时挂载文件系统和存储设备的详细信息,而挂载文件用mount。 20.运行一个脚本,用户不需要什么样的权限? ( ) A. read B. write C. execute D. browse on the directory 解析: 执行一个脚本的时候,我们是不需要写入的权限,在我看来,也是没用必要的,因为你可以通过查看来确定该脚本的作用,然后来进行运行,你并不需要来写入进行更改该脚本。 以上解析均属个人观点,如有不足之处可以联系我进行更正扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/19/Linux面试题解析第2天/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>试题研究</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>试题解析</tag>
</tags>
</entry>
<entry>
<title><![CDATA[kali美化教程2---定制个性化终端]]></title>
<url>%2F2018%2F05%2F13%2Fkali%E7%BE%8E%E5%8C%96%E6%95%99%E7%A8%8B2-%E5%AE%9A%E5%88%B6%E4%B8%AA%E6%80%A7%E5%8C%96%E7%BB%88%E7%AB%AF%2F</url>
<content type="text"><![CDATA[上次我们设置了桌面,但是我们的终端好像和桌面颜色显得毫无违和感。今天就教各位设置一下终端,使你的终端看起来更加符合职业黑客。打开终端,依次打开:设置-编辑当前方案-外观-新建.然后开始设置(如图是我进行的设置,你可以根据喜欢自定义)。然后调整终端字体。(可自定义)接着安装figlet,cowsay.12root@kali:~# apt-get install figletroot@kali:~# apt-get install cowsay 开始对终端的配置文件进行设置.(注意,此处一定要小心,否则你的终端可能不能正常使用)1root@kali:~# gedit .bashrc 先对figlet和cowsay进行设置。插入如下代码(必须在最后一个”fi”后面)12figlet "bingyublog"/usr/games/cowsay -f dragon "bingyu" 其中红线标注的地方都是可以自定义的。“ “中的可以替换为你喜欢的字符。而”dragon”需要你根据以下的文件名进行替换,也就是说你只能替换为下面所给的文件名,不能随意替换为其他的名称。1234567891011121314root@kali:~# cd /usr/share/cowsay/cows/root@kali:/usr/share/cowsay/cows# lsapt.cow elephant.cow milk.cow three-eyes.cowbud-frogs.cow elephant-in-snake.cow moofasa.cow turkey.cowbunny.cow eyes.cow moose.cow turtle.cowcalvin.cow flaming-sheep.cow pony.cow tux.cowcheese.cow ghostbusters.cow pony-smaller.cow unipony.cowcock.cow gnu.cow ren.cow unipony-smaller.cowcower.cow hellokitty.cow sheep.cow vader.cowdaemon.cow kiss.cow skeleton.cow vader-koala.cowdefault.cow koala.cow snowman.cow www.cowdragon-and-cow.cow kosh.cow stegosaurus.cowdragon.cow luke-koala.cow stimpy.cowduck.cow mech-and-cow.cow suse.cow 保存退出后,重启终端,就可以看到效果了。接下来,我们再向终端添加一点提示信息。将下面的代码直接复制到最后一个”fi”后面。一定不能插入到”if….fi”中去,这是个shell中的判断,插入后你的终端将会不能正常使用。123echo -ne "${lightgreen}Today is:\t\t${red}" `date`; echo ""echo -e "${lightgreen}Kernel Information: \t${red}" `uname -smr`export PS1="\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\]:\[\033[1;31m\]\w\[\033[1;36m\]\\$ \[\033[0m\]"; 然后保存,重启终端。好了,整个终端设置完毕。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/13/kali美化教程2-定制个性化终端/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>
</entry>
<entry>
<title><![CDATA[kali美化教程1---教你打造极客类型3D旋转桌面]]></title>
<url>%2F2018%2F05%2F10%2Fkali%E7%BE%8E%E5%8C%96-%E6%95%99%E4%BD%A0%E6%89%93%E9%80%A0%E6%9E%81%E5%AE%A2%E7%B1%BB%E5%9E%8B%E6%A1%8C%E9%9D%A2%2F</url>
<content type="text"><![CDATA[以上是美化后的桌面,怎么样,是不是很炫酷啊?一股浓厚的 极客风 铺面而来,有没有???下面就教大家安装并设置。首先提醒一下各位,我写的教程已经足够清晰了,每个步骤都会截图给你看,你只要严格按照我的步骤操作,是绝对不会出现任何问题的,此次教程难度有点大,你要具备一颗喜欢折腾的心,我就折腾了接近2个小时才搞好。 安装KDE-plasma桌面1root@kali:~# apt-get install kde-plasma-desktop 下载安装速度取决于你的网速,所以需要你有耐心。下载完成后会自动弹出显示管理器窗口,这个说明你已经成功下载了KDE桌面,然后设置默认管理器。回车后,会自动为你进行安装设置,你需要有耐心等待这个过程。成功安装后需要重启kali,并选择plasma桌面。 安装主题开启KDE桌面后,我们进入系统设置。选择桌面主题-获得新主题-在搜索框里输入”ghost”,并安装。然后设置”ghost”主题。 设置界面颜色-获取新方案-搜索”ghost”,并安装。颜色-选择”cyan”-选择应用。应用程序风格-窗口装饰-获得新窗口装饰-搜索”ghost”,并安装。设置窗口装饰,窗口装饰-选择”Ghost-Deco 2.2”-选择应用。 设置虚拟桌面桌面行为-虚拟着桌面-桌面数量设置为4-并应用。虚拟桌面-桌面特效动画设置为”桌面立方动画”-并应用。 设置桌面特效桌面特效-下拉找到”桌面立方”-勾选并应用。对”桌面立方特效进行设置,如图所示。 设置选择桌面屏幕边缘-勾选右上方的空格-勾选”桌面立方-立方”-应用。现在就可以开启3D旋转桌面了。打开方式是”ctr+F11”,然后用鼠标进行旋转桌面。 设置桌面部件现在整个3D旋转桌面已经完成了,但是我们为了使整个界面更加美观,更加符合极客的桌面,我们可以对桌面进行再次设置(大家可以根据自己的喜好进行设置,不必完全照搬我的步骤,我这里只是做个演示)。我们先把终端放到桌面上,因为终端是我们在kali中最常用的软件了。(你可以根据自己需要把其他软件也放到桌面)点击开始按钮-在搜索框搜索”konsole”-右击添加到桌面。在桌面右击”添加部件”-选中你需要的部件。(我这里选择了3个部件)但是这样,部件会随意移动,影响你的使用,所以我们需要锁定部件。右击最下方面板-锁定部件。好了,大功告成。(当然KDE桌面的特性远不止如此,如果你喜欢折腾,你可以自己摸索一下,定制出更加适合自己风格的界面)现在你可以享受整个炫酷的kali系统了。想必在这种炫酷的系统中,你的心情也会变得好起来吧。壁纸我放到群里了,如果你想要,就进群来拿。下次教程教各位设置炫酷的Konsole终端,让你更像职业黑客。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/10/kali美化-教你打造极客类型桌面/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux面试题解析第1天]]></title>
<url>%2F2018%2F05%2F08%2FLinux%E9%9D%A2%E8%AF%95%E9%A2%98%E8%A7%A3%E6%9E%90%E7%AC%AC1%E5%A4%A9%2F</url>
<content type="text"><![CDATA[首先对这份迟到的解析,我要对各位说一句对不起。因为我最近一直奔波于实验室,教室,自习室,从下周开始,每周都要考试,这段时间真的很忙,博客我只能抽空去写,所以最近更新有点慢了,很对不起。1.cron 后台常驻程序 (daemon) 用于:( ) A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度 2.在大多数Linux发行版本中,以下哪个属于块设备 (block devices) ? ( ) A. 串行口 B. 硬盘 C. 虚拟终端 D. 打印机 3.下面哪个Linux命令可以一次显示一页内容? ( ) A. pause B. cat C. more D. grep 4.怎样了解您在当前目录下还有多大空间? ( ) A. Use df B. Use du / C. Use du . D. Use df . 5.怎样更改一个文件的权限设置? ( ) A. attrib B. chmod C. change D. file 6.假如您需要找出 /etc/my.conf 文件属于哪个包 (package) ,您可以执行:( ) A. rpm -q /etc/my.conf B. rpm -requires /etc/my.conf C. rpm -qf /etc/my.conf D. rpm -q | grep /etc/my.conf 7.假如当前系统是在 level 3 运行,怎样不重启系统就可转换到 level 5 运行? ( ) A. Set level = 5 B. telinit 5 C. run 5 D. ALT-F7-5 8.那个命令用于改变 IDE 硬盘的设置? ( ) A. hdparam B. ideconfig C. hdparm D. hddparm 9.下面哪个命令可以列出定义在以后特定时间运行一次的所有任务?( ) A. atq B. cron C. batch D. at 10.下面命令的作用是:set PS1=”[\u\w\t]\$” ; export PS1 ( ) A. 改变错误信息提示 B. 改变命令提示符 C. 改变一些终端参数 D. 改变辅助命令提示符 ————————————–分割线———————————– 1.cron 后台常驻程序 (daemon) 用于:( ) A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度解析: cron服务是实现Linux定时任务的服务,也就是管理系统日常任务的调整。A.NFS和CIFS负责文件在网络中的共享,可能有人会说FTP服务,但是FTP只是文件传输协议,并不是文件共享的。D.strace常用来跟踪进程执行时的系统调用和所接收的信号。2.在大多数Linux发行版本中,以下哪个属于块设备 (block devices) ? ( )A. 串行口B. 硬盘 C. 虚拟终端 D. 打印机解析: Linux中I/O设备分为两类:字符设备和块设备。块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备,块设备(blockdevice)是一种具有一定结构的随机存取设备,对这种设备的读写是按块(所以叫块设备)进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 3.下面哪个Linux命令可以一次显示一页内容? ( ) A. pause B. cat C. more D. grep解析: Linux命令中并没有pause命令。cat是“Concatenate(连续)”的简写,主要将一个文件的内容连续显示到屏幕上,不会进行分页。more是 一个过滤器, 用于分页显示 (一次一屏) 。文本grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出,通常与”cat”搭配使用。 4.怎样了解您在当前目录下还有多大空间? ( ) A. Use df B. Use du / C. Use du . D. Use df .解析: 注意!这题的前面的”Use”是使用xxx命令的意思,不属于运行的命令。df:列出指定的每一个文件名所在的文件系统上可用磁盘空间的数量,如果没有指定文件名,则显示当前所有使用中的文件系统。du(disk usage):报告磁盘空间使用情况.题目说是当前目录下的,所以A忽略了当前目录下。B.属于主目录/。需要区分的是du会把指定目录下所有文件、目录、目录下的文件都统计。是建立在文件系统能看到的的确确是有这样一些文件的基础上的。也就是说我们能在文件系统里面看到的文件才会被du统计。df则是基于文件系统总体来计算,通过文件系统中未分配空间来确定系统中已经分配空间的大小。 5.怎样更改一个文件的权限设置? ( ) A. attrib B. chmod C. change D. file解析: A.Linux中没有attrib命令。B.Linux中没有change命令。C.chmod是更改文件权限的命令。D.file命令用来探测给定文件的类型。 6.假如您需要找出 /etc/my.conf 文件属于哪个包 (package) ,您可以执行:( ) A. rpm -q /etc/my.conf B. rpm -requires /etc/my.conf C. rpm -qf /etc/my.conf D. rpm -q | grep /etc/my.conf解析: rpm用来进行查询的命令格式为:rpm -q options.这也就是说你在进行查询操作的时候,是不能直接用-q的,你需要附加其他参数进行查询,所以A、D是错误的。B.–requires (or -R) 显示软件包所需的功能。不符合题目要求。C.rpm -qf /etc/my.conf 查看某个文件属于哪个软件包,可以是普通文件或可执行文件,跟文件的绝对路径。 7.假如当前系统是在 level 3 运行,怎样不重启系统就可转换到 level 5 运行? ( ) A. Set level = 5 B. telinit 5 C. run 5 D. ALT-F7-5解析: 除了B选项,其他几个选项全部是瞎写的,根本不存在这几个命令以及快捷方式。C.telinit 用于设置当前系统的运行等级.可以直接跟0~6运行等级. 8.那个命令用于改变 IDE 硬盘的设置? ( ) A. hdparam B. ideconfig C. hdparm D. hddparm解析: 除了C选项的命令,其他几个命令也是不存在Linux系统的。C.hdparm显示与设定硬盘的参数.具体参数可以查看man手册。 9.下面哪个命令可以列出定义在以后特定时间运行一次的所有任务? ( ) A. atq B. cron C. batch D. at解析: B.cron是服务,不是命令,Linux存在crontab命令,用于定时执行操作命令。C.batch命令用于在指定时间,当系统不繁忙时执行任务。D.at命令用于在指定时间执行命令。A.atq命令显示系统中待执行的任务列表,和at -l一样。 10.下面命令的作用是:set PS1=”[\u\w\t]\$” ; export PS1 ( ) A. 改变错误信息提示 B. 改变命令提示符 C. 改变一些终端参数 D. 改变辅助命令提示符解析: 这是一个shell,set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。而PS1是命令提示符的环境变量,这个环境变量是默认的。\u:表示当前用户的帐号名称;\w:完整的工作目录之外,家目录会以 ~ 取代;\t: 显示系统时间;$:提示字符,如果是 root 时,提示符为 #,普通用户则为 $.这个shell的意思其实就是先重新设置命令行的环境变量,然后用export命令用于将新设置的变量输出为环境变量。作用就是改变命令提示符。 以上解析均属个人观点,如有不足之处可以联系我进行更正扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/08/Linux面试题解析第1天/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>试题研究</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>试题解析</tag>
</tags>
</entry>
<entry>
<title><![CDATA[注意注意!说一件重要的事]]></title>
<url>%2F2018%2F05%2F07%2F%E6%B3%A8%E6%84%8F%E6%B3%A8%E6%84%8F%EF%BC%81%E8%AF%B4%E4%B8%80%E4%BB%B6%E9%87%8D%E8%A6%81%E7%9A%84%E4%BA%8B%2F</url>
<content type="text"><![CDATA[最近在看到了一篇51CTO看到了一个Linux笔试题,想着自己做一下,检测一下自己的水平。这是原文地址。题我已经初步写过了,题目并不是太难,只要你完整看过任何一本Linux书籍,我相信你可以轻松及格的。 我决定写一下该份试题的解析答案,每天更新一篇博文,每篇博文讲解10道题,目前我还未从网上看到该试题的任何解析答案。 我不是运维人员,只是普通大学生而已,但是这100道题我会认真写的,网上只给了答案,我会写出具体解析,讲解一下哪里对,哪里不对,第一次写试题解析,难免有些不足的地方,希望各位多多指教。每天更新一篇博文,每篇博文讲解10道题,本教程适合有Linux基础的同学查看,如果你连基础命令还不太会,可以去看看一些书,我群里放了很多关于Linux入门的资料,有需要的可以进群下载。对于这套题如果各位感觉我写的解析哪里不对,也可以进群联系我纠正。以后遇到其他面试题或者好的试题也还会做解析的,也希望各位遇到好的试题分享出来,共同交流。 这种试题解析的博文,我对先放出题目,供各位先自测一下。然后我会在下面写出答案,答案用 红色字体 进行标注,然后紧跟是解析。这种试题解析文章,统一分类到 试题研究 中去,还会设置一个标签为 试题解析,可以分别到分类和标签统一查看。 好了,就说这么多了,如果你喜欢Linux,最好每天都看一下试题解析这些文章,我相信只要你坚持下来,10天过后,你的Linux水平会提升的。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/07/注意注意!说一件重要的事/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux简单命令总结]]></title>
<url>%2F2018%2F05%2F06%2FLinux%E7%AE%80%E5%8D%95%E5%91%BD%E4%BB%A4%E5%B0%8F%E6%80%BB%E7%BB%93%2F</url>
<content type="text"><![CDATA[Linux命令它们与英语口语十分相似,其命令格式如下:命令 [选项] [参数](command [options] [arguments])命令:告诉linux操作系统执行什么。选项:说明命令的方式。选项如果是单个英语字母是以“-”字符开始,如果是多个英语字母基本都是以“–”字符开始。参数:说明命令影响的是什么(如一个文件、一个目录、一段正文文字) 查看的命令whoami 命令的功能是列出目前您操作系统所使用的用户名who 目前有几个用户在操作系统上工作,比whoami多了系统上工作的其他用户users 目前有哪些用户登陆了linux系统tty 目前用户登陆linux系统所使用的终端 uname 显示当前的操作系统uname -n显示目前操作系统的主机名(n是nodename的第一个字符可看成缩写)uname -i显示目前操作系统所使用的硬件平台名(i是information第一个字符可看成缩写)uname -r显示目前操作系统发布的版本信息(r是release的第一个字符)uname -s显示目前操作系统名(r是release的第一个字符)uname -m显示目前机器硬件名(m是machine的第一个字符)uname -p显示中央处理器的类型(p是processor的第一个字符)uname -a显示所有信息(a是all的第一个字符)这里-n、-i、-r、-s等等都是选项.即说明命令的方式。选项部分是以“-”字符开始。uname -m -s -r空格隔开同时显示信息uname -msr也能同时显示信息uname –help查看uname的全部选项 date 显示当前系统的日期和时间cal 显示某月的日历,直接输入cal显示本月的日历(cal为calendar的前三个字符)cal 8 2008显示2008年8月的日历(第一个参数为月份8,第二个参数为年2008)clear 清楚窗口中的显示信息,即清屏作用(也可以使用快捷键CTR+L) 获得帮助信息whatis 命令获得linux命令的帮助信息eg:whatis uname显示uname命令的用法,这里uname被看做一个参数(whatis获得)whatis who显示who命令的含义作用 man是manual(手册)的前三个字符。(linux大哥有小弟无数,分堂无数。man是花名册,可以查看任何到任何小弟的名字)每个命令都对应着说明文件,这些说明文件叫做Man Pages。提供命令详细描述和使用方法。man的命令格式如下man []eg: man su浏览Man Pages箭头上下左右End最后一页Home第一页:/string向前查找字符串, q键为退出 info以网页的结构显示命令的信息,是一种基于正文的帮助系统info的命令格式如下info []eg: info who使用控制n键转到下一小节u键跳转到上层的章节输入s屏底出现“Search for string[]:”提示,此时输入要查找的字符串q为退出 cd切换进入目录pwd显示当前目录的绝对路径(print working directory打印工作目录) ls列出当前目录ls [options] [directories|files]选项目录|文件ls.当前目录Ls..当前目录的上级目录ls . ..同屏分别同时显示这两个目录中的内容ls -F参数显示类型ls -l参数显示所有目录中所有非隐藏文件的细节ls -ld只想知道本身的属性用d 创建文件mkdir目录名创建一个新目录(make directory,伟大随心的缩写)mkdir -p目录名可以创建指定路径中所有不存在的目录touch文件名创建一个新文件或多个文件,可以绝对路径可以使相对路径,touch目录名1目录名2目录名3如果目标文件已存在就会修改文件的时间戳 复制文件cp[-option(s)]source(s)targetsource(源):可以是一个或者多个文件和目录target(目的):可以是一个文件或者一个目录-i(interactive,交互的),覆盖文件给出提示信息-r(recursive,递归的)复制一个目录时,复制当前目录中所有内容,包括复制其下子目录的所有内容。-p(presever,维持)保留一些特性,如时间戳-f(force,强制)若目标文件存在,并不咨询直接覆盖原来所有文件 移动文件mv(move的缩写)mv a b从a移动到b包括移动及修改文件和目录名 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/06/Linux简单命令小总结/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux必备神器-系统监测和优化器]]></title>
<url>%2F2018%2F05%2F05%2FLinux%E5%BF%85%E5%A4%87%E7%A5%9E%E5%99%A8-%E7%B3%BB%E7%BB%9F%E7%9B%91%E6%B5%8B%E5%92%8C%E4%BC%98%E5%8C%96%E5%99%A8%2F</url>
<content type="text"><![CDATA[在Windows上我们常用xxx助手,xxx管家进行管理电脑,今天就说一款专为Linux设计的系统监测和优化器—stacer,我感觉是你安装Linux桌面版本的必备神器,实在是太好用了。GitHub项目地址: https://github.com/oguzhaninan/Stacer我以自己的Ubuntu进行安装以及演示,其他发行版本可以去GitHub上查找安装方法,很详细。123lengyue@ubuntu:~$ sudo add-apt-repository ppa:oguzhaninan/stacerlengyue@ubuntu:~$ sudo apt-get updatelengyue@ubuntu:~$ sudo apt-get install stacer 运行1lengyue@ubuntu:~$ stacer 该神器还支持多种语言,接下来看图设置为中文。然后需要重启一下stacer,再次打开就可以看到中文界面了,使用很简单,就不一一赘述了。 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/05/Linux必备神器-系统监测和优化器/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>Ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[网站目录结构扫描器-dirsearch]]></title>
<url>%2F2018%2F05%2F04%2F%E7%BD%91%E7%AB%99%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E6%89%AB%E6%8F%8F%E5%99%A8-dirsearch%2F</url>
<content type="text"><![CDATA[dirsearch是一个基于python3.x的命令行工具,旨在暴力扫描页面结构,包括网页中的目录和文件。GitHub项目地址:https://github.com/maurosoria/dirsearch#overview支持 WindowsXP/7/8/10 ,GNU/Linux,MacOSX操作系统。 特点:多线程可保持连接支持多种后缀(-e|–extensions asp,php)生成报告(纯文本,JSON)启发式检测无效的网页递归的暴力扫描支持HTTP代理用户代理随机化批量处理请求延迟 扫描器与字典字典必须是文本文件,除了使用特殊的%EXT%之外,其余每行都会被处理。例:12example/example.%EXT% 使用扩展名“asp”和“aspx”会生成下面的字典:123example/example.aspexample.aspx 安装以及使用示例(kali下进行安装)123456root@kali:~# git clone https://github.com/maurosoria/dirsearch.gitroot@kali:~# cd dirsearch/root@kali:~/dirsearch# lsCHANGELOG.md default.conf lib README.md thirdpartydb dirsearch.py logs reportsroot@kali:~/dirsearch# python3 dirsearch.py -u 目标网址 -e * 参数说明: 必选参数: -u 目标网站 -e 扩展名 可选参数: 其余参数均为可选参数,可以通过运行 python3 dirsearch.py –help 命令来查看参数 扫码进群,我等待你的加入 本文作者:冰羽本文地址: https://bingyublog.com/2018/05/04/网站目录结构扫描器-dirsearch/ 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!]]></content>
<categories>
<category>Kali</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>