-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
700 lines (636 loc) · 149 KB
/
atom.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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[qxly's Notes]]></title>
<subtitle><![CDATA[Walk steps step by step.]]></subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://qxly.info//"/>
<updated>2015-07-07T18:10:33.000Z</updated>
<id>http://qxly.info//</id>
<author>
<name><![CDATA[qxly]]></name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title><![CDATA[PHP的数据传输神器cURL]]></title>
<link href="http://qxly.info/2015/06/28/PHP%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E7%A5%9E%E5%99%A8cURL/"/>
<id>http://qxly.info/2015/06/28/PHP的数据传输神器cURL/</id>
<published>2015-06-27T18:48:18.000Z</published>
<updated>2015-07-07T18:10:33.000Z</updated>
<content type="html"><![CDATA[<h5 id="用cURL制作一个简单的网页爬虫">用cURL制作一个简单的网页爬虫</h5><a id="more"></a>
<p>查看对cURL支持<br>php -i |grep curl</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><?php</span><br><span class="line"> $curl = curl_init("http://www.baidu.com"); #初始化curl</span><br><span class="line"> curl_exec($curl); #执行</span><br><span class="line"> curl_close($curl); #关闭curl</span><br><span class="line">?></span><br></pre></td></tr></table></figure>
<p>将如上代码保存为a.php,在php目录下执行php -f a.php >baidu.html.<br>查看生成的baidu.html文件,可以发现百度页面已经被我们下载到本地了。</p>
<h5 id="用cURL抓取网页信息并替换部分内容">用cURL抓取网页信息并替换部分内容</h5><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><?php</span><br><span class="line"> $curlobj = curl_init(); #初始化</span><br><span class="line"> curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com" ); #设置访问网页的URL </span><br><span class="line"> curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true ); #执行之后不直接打印出来</span><br><span class="line"> </span><br><span class="line"> $output = curl_exec($curlobj); #执行 </span><br><span class="line"> curl_close($curlobj); #关闭cURL </span><br><span class="line"> echo str_replace("百度", "摆渡", $output ) ;</span><br><span class="line">?></span><br></pre></td></tr></table></figure>
<p>将如上代码保存为b.php,在php目录下执行php -f b.php >baidu.html.<br>查看生成的baidu.html文件,可以发现下载到本地的baidu.html中“百度”都被替换成“摆渡”了。</p>
<p><未完待续></p>
]]></content>
<summary type="html">
<![CDATA[<h5 id="用cURL制作一个简单的网页爬虫">用cURL制作一个简单的网页爬虫</h5>]]>
</summary>
<category term="PHP" scheme="http://qxly.info/tags/PHP/"/>
<category term="curl" scheme="http://qxly.info/tags/curl/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[体验HTML5的酷炫交互效果]]></title>
<link href="http://qxly.info/2014/03/26/%E4%BD%93%E9%AA%8CHTML5%E7%9A%84%E9%85%B7%E7%82%AB%E4%BA%A4%E4%BA%92%E6%95%88%E6%9E%9C/"/>
<id>http://qxly.info/2014/03/26/体验HTML5的酷炫交互效果/</id>
<published>2014-03-26T04:22:57.000Z</published>
<updated>2015-06-30T15:52:17.000Z</updated>
<content type="html"><![CDATA[<p><img src="/images/large.jpg" alt="手势控制幻灯片播放"></p>
<h4 id="手势控制幻灯片播放">手势控制幻灯片播放</h4><p>这个演示的是一个更为复杂的现代浏览器超前体验,名为 手势 + Reveal.JS,这个实验使用了 WebRTC 和 JavaScript 来调用摄像头,目前只有使用谷歌浏览器才能正确的运行。该技术为用户提供了一个手势操作的界面,允许你使用手势来上下左右翻动指挥幻灯片的运行。这里的手势并不是手机触摸屏手势,而是通过电脑上连接的摄像头观察你在空中挥舞双手动作判断如何翻页。当然这种控制方式看起来并不新鲜,但再强调一遍,因为它是用纯HTML+Javascript实现的,所以它能在任何一台过去 5 年内生产的电脑上完美运行。</p>
<p><a href="http://www.webhek.com/misc/gestures-reveal-js/#/" target="_blank" rel="external">观看演示</a></p>
<a id="more"></a>
<h4 id="萌妹子itsumo_kawaii">萌妹子itsumo kawaii</h4><p>该HTML5网站只有一副视频,里面PLMM一定会融化你的心。只不过,你不再只是一名单纯的观看者,而是作为视频里的“男一号”参与其中。比如妹纸会向你撒娇讨零食神马的,而你的决定会左右她的反应,视频可以右键下载。快在IE10上体验HTML5交互的酷炫魅力吧</p>
<p><a href="http://www.itsumokawaii.jp/en/" target="_blank" rel="external">观看演示</a></p>
<p>来源参考:<a href="http://www.webhek.com" target="_blank" rel="external">http://www.webhek.com</a></p>
<p>— EOF —</p>
]]></content>
<summary type="html">
<![CDATA[<p><img src="/images/large.jpg" alt="手势控制幻灯片播放"></p>
<h4 id="手势控制幻灯片播放">手势控制幻灯片播放</h4><p>这个演示的是一个更为复杂的现代浏览器超前体验,名为 手势 + Reveal.JS,这个实验使用了 WebRTC 和 JavaScript 来调用摄像头,目前只有使用谷歌浏览器才能正确的运行。该技术为用户提供了一个手势操作的界面,允许你使用手势来上下左右翻动指挥幻灯片的运行。这里的手势并不是手机触摸屏手势,而是通过电脑上连接的摄像头观察你在空中挥舞双手动作判断如何翻页。当然这种控制方式看起来并不新鲜,但再强调一遍,因为它是用纯HTML+Javascript实现的,所以它能在任何一台过去 5 年内生产的电脑上完美运行。</p>
<p><a href="http://www.webhek.com/misc/gestures-reveal-js/#/">观看演示</a></p>]]>
</summary>
<category term="Reveal.JS" scheme="http://qxly.info/tags/Reveal-JS/"/>
<category term="WebRTC" scheme="http://qxly.info/tags/WebRTC/"/>
<category term="html5" scheme="http://qxly.info/tags/html5/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[HTML5的撕布效果]]></title>
<link href="http://qxly.info/2014/02/28/HTML5%E7%9A%84%E6%92%95%E5%B8%83%E6%95%88%E6%9E%9C/"/>
<id>http://qxly.info/2014/02/28/HTML5的撕布效果/</id>
<published>2014-02-28T04:22:44.000Z</published>
<updated>2015-06-30T15:53:59.000Z</updated>
<content type="html"><![CDATA[<p><img src="/images/tear-able-cloth.jpg" alt="html5撕布"></p>
<p>撕扯布单的这个演示在过去的几个月里成为了互联网上的大明星。用你的鼠标在这个网状布单上拖拽,你会发现它动画效果非常的顺滑,而完成这些效果的只是一小段代码,想必它已经让你惊叹不已。然而,不仅这些,这个动画还能响应你的拖拽的力度和速度,根据不同的力道,表现出不同的撕扯破坏效果,够神奇吧,完美的HTML5画布功能的体现。</p>
<p><a href="/demo/a.html">观看演示</a> </p>
<a id="more"></a>
<p><来源参考:极客标签></p>
<p>— EOF —</p>
]]></content>
<summary type="html">
<![CDATA[<p><img src="/images/tear-able-cloth.jpg" alt="html5撕布"></p>
<p>撕扯布单的这个演示在过去的几个月里成为了互联网上的大明星。用你的鼠标在这个网状布单上拖拽,你会发现它动画效果非常的顺滑,而完成这些效果的只是一小段代码,想必它已经让你惊叹不已。然而,不仅这些,这个动画还能响应你的拖拽的力度和速度,根据不同的力道,表现出不同的撕扯破坏效果,够神奇吧,完美的HTML5画布功能的体现。</p>
<p><a href="/demo/a.html">观看演示</a> </p>]]>
</summary>
<category term="canvas" scheme="http://qxly.info/tags/canvas/"/>
<category term="html5" scheme="http://qxly.info/tags/html5/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[极客都应该知道的Linux技巧]]></title>
<link href="http://qxly.info/2014/02/26/%E6%9E%81%E5%AE%A2%E9%83%BD%E5%BA%94%E8%AF%A5%E7%9F%A5%E9%81%93%E7%9A%84Linux%E6%8A%80%E5%B7%A7/"/>
<id>http://qxly.info/2014/02/26/极客都应该知道的Linux技巧/</id>
<published>2014-02-26T04:22:31.000Z</published>
<updated>2015-06-30T17:12:27.000Z</updated>
<content type="html"><![CDATA[<p>是什么区分开普通的Linux用户和超级极客的呢?很简单:用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提高效率而又不用做这些搜集资料的跑腿活儿,那我们已经收集了50多条简单易学的Linux技巧,以帮助你更潇洒地工作,并且最大限度的利用你的电脑。开始享受吧!</p>
<a id="more"></a>
<h3 id="检查不是由你运行的程序">检查不是由你运行的程序</h3><p>难度:高级<br>应用程序:bash(译注:UNIX或者LINUX的shell)</p>
<p>想象下这个场景-你已经准备好了要和同事在办公室里对战一局快速的Crack Attack(译注:一款免费的OpenGL游戏,类似俄罗斯方块),不料却发现,当你正准备要击败你这个傲慢的下属时,方块却停止了-是什么让你的机器变得这么慢?这肯定是因为其他的用户运用他们娴熟的经验来盗取你宝贵的CPU时间、服务器或者其他的诡异方式,真烦人!</p>
<p>好,让我们列举出系统中所有不是由你运行的程序!</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ps aux | grep -v `whoami`</span><br></pre></td></tr></table></figure>
<p>或者,更巧妙些的是,为什么不列出最占用时间的前十个程序呢:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ps aux--sort=-%cpu | grep -m <span class="number">11</span> -v `whoami`</span><br></pre></td></tr></table></figure>
<p>也许最好使用root权限来运行这条指令,因为这样可以过滤出大部分活跃的后台程序。现在你有了这些信息,你可以终止他们的进程,但是更“卑鄙”的是反复地在他们的桌面上运行xeyes(译注:Linux下的一条好玩的命令)!</p>
<h3 id="在多个文件中替换掉相同的文本">在多个文件中替换掉相同的文本</h3><p>难度:中等<br>应用程序:find(译注:Linux下的一条命令)/Perl</p>
<p>如果你有个文件,想在多个位置进行替换,这里有很多方法来实现。调用test[someting]把当前目录里所有文件中的Windows替换成Linux,你可以像这样运行它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">perl -i -pe <span class="string">'s/Windows/Linux/;'</span> test*</span><br></pre></td></tr></table></figure>
<p>要替换当前目录以及下层目录里所有文件中的Windows为Linux,你可以这样运行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find . -name <span class="string">'*.txt'</span> -<span class="keyword">print</span> | xargs perl -pi -e<span class="string">'s/Windows/Linux/ig'</span> *.txt</span><br></pre></td></tr></table></figure>
<p>或者如果你更需要让它只作用于普通文件上:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find -type f -name <span class="string">'*.txt'</span> -print0 | xargs --null perl -pi -e <span class="string">'s/Windows/Linux/'</span></span><br></pre></td></tr></table></figure>
<p>节省了大量的时间并且获得了高水平的大师等级!</p>
<h3 id="合并一个不稳定的终端">合并一个不稳定的终端</h3><p>难度:简单<br>应用程序:bash</p>
<p>我们都已经做过这件事了-偶尔使用less或者cat来列出一个文件,或者以浏览二进制文件而结束,这通常包含各种可以轻易弄乱你的终端显示的控制代码、警报声、一些有趣的字符,以及一些奇怪的颜色组合,最后,你的字体将会被一些难以辨认的字符所替代,而你却不知道该怎么办。显然bash仍然继续工作着,但是你就是不能明白到底发生了什么!发送一个初始化命令给这个终端:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">reset</span><br></pre></td></tr></table></figure>
<p>然后一切就再次恢复正常了。</p>
<h3 id="创造Mozilla关键词">创造Mozilla关键词</h3><p>难度:简单<br>应用程序:Firefox/Mozilla</p>
<p>在浏览器上的一个有用的特征是,它们有一种能力,可以通过输入gg onion来通过Google搜索onion这个词的一切。同一功能在Mozilla上也可实现,通过单击Bookmarks(书签)>Manage Bookmarks(管理书签)然后添加一个新的书签,添加的URL就像这样:</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://www.google.com/search?q=%s</span><br></pre></td></tr></table></figure>
<p>现在选择书签编辑器中的条目并且点击Properties(属性)按钮,现在输入一个类似gg的关键字(或者可以是你选择的任何字符)就行了。在URL中的%s将被关键字之后的文本内容替代。你可以用这种方法向其他一些依赖你当前URL信息的网站发送请求。</p>
<p>或者,右击一个搜索区域然后选择菜单选项“为这个搜索添加一个关键词…”。接下来的会话将允许你使用一个指定的关键词。</p>
<h3 id="运行多种X会话">运行多种X会话</h3><p>难度:简单<br>应用程序:X</p>
<p>如果你给别人分享了你的Linux box(),而厌烦了不断的登入、登出,当你知道了这不是必要的时候,可能会如释重负。假设你的电脑以图形模式启动(runlevel 5),通过同时按下Control+Alt+F1键-你将得到一个登陆提示。输入你的登录名以及密码然后执行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">startx -- :<span class="number">1</span></span><br></pre></td></tr></table></figure>
<p>来进入你的图形环境。按下Ctrl+Alt+F7来回到在你之前的用户会话,如果想回到你自己的用户会话则按下Ctrl+Alt+F8。</p>
<p>你可以重复使用这项技巧:F1键到F6键可以识别六个控制台会话,而F7到F12可以识别六个X会话。警告:尽管这在多数情况下是适用的,但是不同的变种可能用不同的方式来实现这项功能。</p>
<h3 id="更快地浏览">更快地浏览</h3><p>难度:简单<br>应用程序:KDE(译注:一种Linux的桌面环境)</p>
<p>KDE是一个虽然小众,但是在提升你的网页浏览经验方面很有用的选择。启动一个KDE控制中心,然后从工具条中选择System(系统)>KDE performance。现在你可以选择预加载浏览器实例。实际上,这意味著浏览器在开机的时候就开始运行,在你用之前都保持隐藏状态。当你想要使用它的时候,它几乎是瞬间出现。</p>
<h3 id="简单地备份你的网站">简单地备份你的网站</h3><p>难度:简单<br>应用程序:Backups</p>
<p>如果你想要从一台电脑上备份一个目录,但你仅仅想要复制改变的文件到它的备份而不是复制所有的东西到各自的备份,你可以使用工具rsync来实现它。你需要在这个远程的源备份计算机上有一个账户。下面是这条命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rsync -vare ssh jono<span class="decorator">@192.168.0.2:/home/jono/importantfiles/* /home/jono/backup/</span></span><br></pre></td></tr></table></figure>
<p>这样我们就备份了192.168.0.2地址上/home/jono/importantfiles/目录下的所有文件到当前机器上的/home/jono/backup目录下。</p>
<h3 id="使你的时钟保持准时">使你的时钟保持准时</h3><p>难度:简单<br>应用程序:NTP</p>
<p>如果你发现电脑上的时钟似乎与时间脱轨了,你可以使用一个特殊的NTP工具,来确保它准到只有穿实验服的人才会需要的程度。你需要安装ntpdate工具,它通常包含在NTP包中,然后你就可以与NTP服务器保持同步了:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ntpdate ntp.blueyonder.co.uk</span><br></pre></td></tr></table></figure>
<p>可以在www.eecis.udel.edu/~mills/ntp/clock1b.html上获得相应的NTP服务器的列表。如果你修改了你的开机程序并且在脚本中包含这些命令,就可以确保无论何时你启动电脑都是完全准时的。你还可以运行一个定时任务来校对时间。</p>
<h3 id="找到最大的文件">找到最大的文件</h3><p>难度:简单<br>应用程序:Shell</p>
<p>计算机中一个常见的问题是,你可能想删一部分大的文件(类似音频或视频片段)。如下你可以找到当前目录中最大的那个文件:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -lSrh</span><br></pre></td></tr></table></figure>
<p>“r”的作用是将大的文件列在后面,而“h”则是给出易于人们阅读的输出(MB或者诸如此类)。你也可以搜寻最大的MP3/MPEG文件:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -lSrh *.mp*</span><br></pre></td></tr></table></figure>
<p>你也可以通过下面这条命令搜寻最大的目录:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">du -kx | egrep -v <span class="string">"\./.+/"</span> | sort -n</span><br></pre></td></tr></table></figure>
<h3 id="Nautilus快捷键">Nautilus快捷键</h3><p>难度:简单<br>应用程序:Nautilus(译注:Linux图形界面中的一个文件管理器)</p>
<p>尽管很多文件管理器近日来被设计为使用鼠标进行管理,但有时用键盘还是方便些。Nautilus有一些键盘快捷键,可以使你快速浏览文件:</p>
<p>打开一个定位文件 – Ctrl+L</p>
<p>打开父文件夹 – Ctrl+Up</p>
<p>用方向键来浏览当前文件夹</p>
<p>你也可以使用‘emblems’来定制文件图标。这里有少量的应用于个别文件或者组的图象展示。打开Edit(编辑) > Backgrounds and Emblems(背景和符号)菜单条目,然后拖放你想要的图片即可。</p>
<h3 id="整理你的数据库">整理你的数据库</h3><p>难度:简单<br>应用程序:MySQL</p>
<p>无论何时你改变一个MySQL数据库的结构,或者从中删掉大量的数据,文件都有可能被分散,并导致一些性能损失。尤其是当运行查询命令时这个情况最容易发生。每当你要改动数据库的时候,记得运行这个优化器:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysqlcheck -o <databasename></span><br></pre></td></tr></table></figure>
<p>也许你会发现,如果你使用VARCHAR文件,有必要定期的整理你的数据库表:这个变长列(variable-length columns)是非常倾向于分裂的。</p>
<h3 id="更快的邮件">更快的邮件</h3><p>难度:简单<br>应用程序:KMail</p>
<p>连三秒钟都不想花费在找邮箱客户端上面?不想被桌面上堆积成山日渐腐烂的图标搞得找不到鼠标指针?不管你正在KDE里干什么,按几下键盘就可以发邮件了。输入:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mailto:plop<span class="decorator">@ploppypants.com</span></span><br></pre></td></tr></table></figure>
<p>按下return,KMail将会自动启动,为你的至理名言做好准备。你甚至不需要填写完整的邮件地址。这对Internet地址也是有效的:尝试输入www.slashdot.org来启动浏览器。</p>
<h3 id="同化你的构造">同化你的构造</h3><p>难度:简单<br>应用程序:GCC</p>
<p>如果你运行一个拥有适量RAM的多处理机系统(SMP),你会发现,在写代码时,运行一个parallel make很有好处。与按照默认方式运行make并执行serial builds相比,parallel build 是一种很有效的改善方法。让make在building的时候允许同时存在多个child,用如下的-j转换即可:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make -j4; make -j4 modules</span><br></pre></td></tr></table></figure>
<h3 id="节省电池电源">节省电池电源</h3><p>难度:中等<br>应用程序:hdparm</p>
<p>很可能你已经对使用hdparm来调整一个硬件驱动很熟悉了,但是它还能节约你的笔记本的电池寿命,或者通过降低硬盘转速来使生活更宁静。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">hdparm -y /dev/hdb</span><br><span class="line">hdparm -Y /dev/hdb</span><br><span class="line">hdparm -S <span class="number">36</span> /dev/hdb</span><br></pre></td></tr></table></figure>
<p>按顺序,这些命令将让硬件转换成Standby(待命)模式,再转换成Sleep(睡眠)模式,并且最终设置Automatic(自动)旋转超时。这个结尾包含一个以5秒为单位的一块块数字变量(例如,值为12就等同于一分钟)。</p>
<p>顺便说一下,这个降低旋转时间至5秒为单位的习惯真值得拿一个特别的用户友好奖——这个值的设置也许有什么历史原因,但我们不知道。如果你恰好知道为什么,请来信告知我们!</p>
<h3 id="无线速度管理">无线速度管理</h3><p>难度:中等<br>应用程序:iwconfig</p>
<p>一个radio发送/接受设备和其他设备间的传输速度,取决于有多少可用信号。在信号减弱的时候如需维持传输,就需要降低radio的传输速度。一般情况下,radio都会自己找到可用信号,并自动选择最快的速度。</p>
<p>在边缘区域中,信号强度勉强够用,这时候就可能因radio不断调试连接速度而造成不必要的包丢失。如果不能加强天线增益,或移动设备位置来获取更充足的信号,可以尝试强制让card同步到一个较低的速率。这样,radio就会减少调试频率,实际上,还会比使用持续触发的链接传输得快一些。不同的驱动器有不同的链接速度设置方法。在Linux中,可用iwconfig来设置速度:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">iwconfig eth0 rate <span class="number">2</span>M</span><br></pre></td></tr></table></figure>
<p>这个指令能强制使广播总是同步在2Mbps,即使还存在其他可用速度。你也可以设置一个明确的速度作为上限,允许卡自动按照任何低于这个上限的速度来工作,但是不能高于它。例如,你可以把它作用于上文举例的连接上:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">iwconfig eth0 rate <span class="number">5.5</span>M auto</span><br></pre></td></tr></table></figure>
<p>如上的指令可以让驱动器将速度上限设为5.5Mbps,只慢不快。想要将card恢复为全自动缩放,只需要制定它自己自动工作。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">iwconfig eth0 rate auto</span><br></pre></td></tr></table></figure>
<p>通常卡在1Mbps时比它们在11Mbps时可以延伸的更远。在这两种速率之间,Orinoco卡有12dB的差别,即降低数据速率可获得的潜在传输距离的四倍。</p>
<h3 id="疏通开端口">疏通开端口</h3><p>难度:中等<br>应用程序:netstat</p>
<p>要获取在Linux服务器上处于监听状态的网络服务器的列表,可使用netstat程序:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">root<span class="decorator">@catlin:~# netstat -lnp</span></span><br><span class="line">Active Internet connections (only servers)</span><br><span class="line">Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">5280</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">698</span>/perl</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">80</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">217</span>/httpd</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">10.42</span>.3.2:<span class="number">53</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">220</span>/named</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">10.42</span>.4.6:<span class="number">53</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">220</span>/named</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">127.0</span>.0.1:<span class="number">53</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">220</span>/named</span><br><span class="line">tcp <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">22</span> <span class="number">0.0</span>.0.0:* LISTEN <span class="number">200</span>/sshd</span><br><span class="line">udp <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">32768</span> <span class="number">0.0</span>.0.0:* <span class="number">220</span>/named</span><br><span class="line">udp <span class="number">0</span> <span class="number">0</span> <span class="number">10.42</span>.3.2:<span class="number">53</span> <span class="number">0.0</span>.0.0:* <span class="number">220</span>/named</span><br><span class="line">udp <span class="number">0</span> <span class="number">0</span> <span class="number">10.42</span>.4.6:<span class="number">53</span> <span class="number">0.0</span>.0.0:* <span class="number">220</span>/named</span><br><span class="line">udp <span class="number">0</span> <span class="number">0</span> <span class="number">127.0</span>.0.1:<span class="number">53</span> <span class="number">0.0</span>.0.0:* <span class="number">220</span>/named</span><br><span class="line">udp <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">67</span> <span class="number">0.0</span>.0.0:* <span class="number">222</span>/dhcpd</span><br><span class="line">raw <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span>.0.0:<span class="number">1</span> <span class="number">0.0</span>.0.0:* <span class="number">7</span> <span class="number">222</span>/dhcpd</span><br></pre></td></tr></table></figure>
<p>如上消息告诉你PID为698的进程是一个绑定在5280端口的Perl进程。如果你不是超级用户,系统将不会显示哪个程序是运行在哪个端口上的。</p>
<h3 id="更快的硬件驱动">更快的硬件驱动</h3><p>难度:高级<br>应用程序:hdparm</p>
<p>也许你已经知道hkparm工具可以用于测试硬盘速度和更改一些设置。它还可以用于优化驱动性能,并且开启一些默认关闭的功能。在我们开始之前,敬告您,改变驱动选项可能会造成数据损坏,所以首先请备份你所有的重要数据。如下命令可以用来测试速度:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hdparm -Tt /dev/hda</span><br></pre></td></tr></table></figure>
<p>你将会看到类似于这样的东西:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/dev/hda:</span><br><span class="line"> </span><br><span class="line">Timing buffer-cache reads: <span class="number">128</span> MB in1.64 seconds =<span class="number">78.05</span> MB/sec</span><br><span class="line">Timing buffered disk reads:<span class="number">64</span> MB <span class="keyword">in</span> <span class="number">18.56</span> seconds = <span class="number">3.45</span>MB/sec</span><br></pre></td></tr></table></figure>
<p>现在我们可以尝试让它提速。找出你的驱动目前设置使用的是哪个选项,然后传递给hdparm这个硬件的名称:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">hdparm /dev/hda</span><br><span class="line"> /dev/hda:</span><br><span class="line"> multcount=<span class="number">16</span> (on)</span><br><span class="line"> I/O support=<span class="number">0</span> (default <span class="number">16</span>-bit)</span><br><span class="line"> unmaskirq=<span class="number">0</span> (off)</span><br><span class="line"> using_dma=<span class="number">0</span> (off)</span><br><span class="line"> keepsettings =<span class="number">0</span> (off)</span><br><span class="line"> readonly =<span class="number">0</span> (off)</span><br><span class="line"> readahead=<span class="number">8</span> (on)</span><br><span class="line"> geometry = <span class="number">40395</span>/<span class="number">16</span>/<span class="number">63</span>, sectors = <span class="number">40718160</span>, start = <span class="number">0</span></span><br></pre></td></tr></table></figure>
<p>这相当于一个默认设置。多数的Linux发行版本都会选择一个可以运行在多数硬件上的安全选项。为了获得更快的速度,你可能想要激活dma模式,然后当然要调整I/O支持。多数现代计算机支持模式3,这是一个近乎双倍通量的32位转换模式。你也可以尝试:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hdparm -c3 -d1/dev/hda</span><br></pre></td></tr></table></figure>
<p>然后返回这个速度,查看一下不同。检验你的硬件支持哪些模式,然后可以在hdparm的man手册中学习如何设置它们。</p>
<h3 id="在你手中的可用时间">在你手中的可用时间</h3><p>难度:高级<br>应用程序:Perl</p>
<p>对计算来说,浪费的资源就是那些本可以派上更好的用场的资源。不管你还运行了什么别的程序,为什么不尝试运行一个进程,在终端标题栏实时显示当前的平均负载呢?</p>
<p>将这个存为一个脚本并命名为tl,然后把它存到你的~/bin目录下:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/perl -w</span></span><br><span class="line"> </span><br><span class="line">use strict;</span><br><span class="line">$|++;</span><br><span class="line"> </span><br><span class="line">my $host=`/bin/hostname`;</span><br><span class="line">chomp $host;</span><br><span class="line"> </span><br><span class="line"><span class="keyword">while</span>(<span class="number">1</span>) {</span><br><span class="line"> </span><br><span class="line">open(LOAD,<span class="string">"/proc/loadavg"</span>) || die <span class="string">"Couldn't open /proc/loadavg: $!\n"</span>;</span><br><span class="line"> </span><br><span class="line">my <span class="decorator">@load=split(/ /,<LOAD>);</span></span><br><span class="line">close(LOAD);</span><br><span class="line"> </span><br><span class="line"><span class="keyword">print</span> <span class="string">"$host: $load[0] $load[1] $load[2] at "</span>, scalar(localtime);</span><br><span class="line"><span class="keyword">print</span> <span class="string">"07"</span>;</span><br><span class="line"> </span><br><span class="line">sleep <span class="number">2</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>如果你想用用load average和你登陆的机器的当前时间,来替换titlebar名字,与西宁tl&即可。它会很恰当的在后台运行,即使你运行一个类似Vim的交互式程序。</p>
<h3 id="不使用X完成抓取一次屏幕截图">不使用X完成抓取一次屏幕截图</h3><p>难度:简单<br>应用程序:Shell</p>
<p>确实有很多屏幕捕获的工具,但是他们大部分都是基于X的。这导致了一个问题,当你运行一个X应用程序时,将会干扰这个你想要抓取的应用程序——或许是一个游戏或者甚至是一个Linux安装程序。但如果你使用了超棒的ImageMagick(译注:一个开源的图片处理工具集和开发包)导入命令,你就可以通过控制台来对X模块进行抓取。很简单,打开一个虚拟终端(例如Ctrl+Alt+F1)然后输入如下:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chvt <span class="number">7</span>; sleep <span class="number">2</span>; <span class="keyword">import</span> -display :<span class="number">0.0</span> -window root sshot1.png; chvt <span class="number">1</span>;</span><br></pre></td></tr></table></figure>
<p>chvt命令改变了虚拟终端,而sleep命令给重绘屏幕提供了一个时间。导入命令会在最后的chvt命令把你再次打回到虚拟终端之前,捕获所有的显示并且保存到一个文件中。请确保你把所有的命令都输入在同一行中。</p>
<p>这是甚至在Linux安装程序上也是有效的,很多安装程序都只留下一个控制台而转去后台运行——一个一流的到处运行的屏幕抓取器只需要加载一些它所需要的库到一个floppy(译注:磁盘)/CD上。</p>
<h3 id="远程访问你的程序">远程访问你的程序</h3><p>难度:简单<br>应用程序:X</p>
<p>如果你想要躺在床上使用你的Linux笔记本从你的Window机器上访问你的应用程序,可以使用SSH来实现。首先你需要在/etc/ssh/sshd_config中激活以下设置:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">X11Forwarding yes</span><br></pre></td></tr></table></figure>
<p>现在我们可以使用如下命令在192.168.0.2上运行GIMP:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -X <span class="number">192.168</span>.0.2 gimp</span><br></pre></td></tr></table></figure>
<h3 id="用到man手册">用到man手册</h3><p>难度:简单<br>应用程序:man</p>
<p>如果你在一个特殊的项目或者命令中需要帮助,man手册是一个好的入门。通常你使用man来访问man手册,但是你也可以通过一个特殊的man页描述的关键词来搜索man页。举例来说,搜索所有详述login的man页:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">man -k login</span><br></pre></td></tr></table></figure>
<p>当你访问了一个man页,你也可以使用斜杠键来搜索一个特定的词而不是用man页本身。在你的键盘上按下“ / ”然后输入搜索项是非常简单的。</p>
<h3 id="和你的医生对话">和你的医生对话</h3><p>难度:简单<br>应用程序:Emacs</p>
<p>如果说Emacs只是个文本编辑器,就好像说Triumph只是个摩托车,或者说世界杯就是个四年一度的足球赛。好吧,它确实是个文本编辑器,但那只是一小~~~部分。举个栗子?打开编辑器,按下Esc键,紧接着按下X,然后进入doctor:你将会进入到一个离奇的对话中,有一个假想的但是熟练的精神治疗师。如果你想要磨蹭你的时间,这是一个很好的方法。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Esc-X tetris</span><br></pre></td></tr></table></figure>
<p>会将你的‘编辑器’转变成一个老的、受欢迎的游乐场游戏。</p>
<p>疯狂到此为止了吗?绝对没有!检查你的发行版本的包,列出他们在你的Emacs上捆绑的其他功能:我们看到有国际象棋,Perl集成,IRC chat(译注:一种聊天工具),法文翻译,HTML转换,一个Java开发环境,灵巧的编辑,甚至还有一个被称为“semanticbovinator”(语义纠错)的东西。我们确实对最后一个能做什么的毫无头绪,但是我们断定无论如何你都敢尝试它!(请先阅读免责声明!)</p>
<h3 id="生成包关联图表">生成包关联图表</h3><p>难度:简单<br>应用程序:Debian</p>
<p>Debian系统最受争议的是它能安装一个包,并自动满足其附属(dependency)。如果你想要以图形形式表现这些包之间的关系(这对于了解系统如何协调工作是非常有用的),你可以使用Debian中非自由的Graphviz包(apt-get install graphviz)然后使用如下命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-cache dotty > debian.dot</span><br></pre></td></tr></table></figure>
<p>这个命令会生成图片文件并存入dotty: dotty debian.dot</p>
<h3 id="卸载忙碌状态的驱动">卸载忙碌状态的驱动</h3><p>难度:简单<br>应用程序:bash</p>
<p>你应该很熟悉这种情况-尝试去卸载一个驱动,但是系统却告诉你它处于忙碌状态。但是什么程序在占用呢?一个短小的单行代码将告诉你:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lsof +D /mnt/windows</span><br></pre></td></tr></table></figure>
<p>这将返回命令和进程ID以及任何正在访问/mnt/windows目录的任务。接下来你就可以定位它们,或者使用kill命令来终结它们。</p>
<h3 id="文本文件的转换">文本文件的转换</h3><p>难度:简单<br>应用程序:recode</p>
<p>recode是一个小而实用并且可以帮你在不同平台上使用文本文件时节省大量精力的工具。它的缺陷主要是源于换行符。一些系统使用一个换行字符,而其他的一些系统使用回车。更多其他的系统两个都用。最后的结果就是,如果你从一个平台移动文本文件到另一个平台上,你会有太多或太少的换行符,还会有很多奇怪的字符残留。</p>
<p>然而,recode命令的参数是有一些神秘的,所以为什么不把这种技巧和HACK 26结合到这个功能中,然后建立一些有用的别名:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">alias dos2unix=<span class="string">'recode dos/CR-LF..l1'</span></span><br><span class="line">alias unix2win=<span class="string">'recode l1..windows-1250'</span></span><br><span class="line">alias unix2dos=<span class="string">'recode l1..dos/CR-LF'</span></span><br></pre></td></tr></table></figure>
<p>还有很多recode选项-它们确实可以转换大量字符间的设置。查阅man手册来获取更多信息。</p>
<h3 id="只列出今天的文件">只列出今天的文件</h3><p>难度:简单<br>应用程序:Various</p>
<p>你可能熟悉这个问题,今天早些时候你创建了一个文本文档,而现在立刻就需要它。然而,你想不起来你给它起了个什么可笑的名字,作为一个熟练的geek,你的家文件夹被836个不同的文件填满了。那你要如何找到它呢?哈哈,这里有很多方法,但是这个小技巧告诉你管道和结合使用两个强力的shell命令是多么有效:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ls -al --time-style=+%D | grep `date +%D`</span><br></pre></td></tr></table></figure>
<p>ls命令的参数使得这个日期戳以一种特殊的方式呈现。这个狡猾的位就是这样传递给grep来输出的。grep的参数是它自己的命令(因为是倒引号所以执行),用来将当前的日期替代成匹配的字符。你可以轻易的修改它来搜索其他特别的日期、时间、文件大小或者任何东西。结合它与HACK 26是非常节省输入的。</p>
<h3 id="避免常见的拼写错误和长命令">避免常见的拼写错误和长命令</h3><p>难度:简单<br>应用程序:Shell</p>
<p>这个alias命令对于设立长命令的快捷键是有用的,或者说是聪明的事情。HACK 25中,我们可以通过以下命令来得到一个新命令,lsnew:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alias lsnew=<span class="string">" ls -al --time-style=+%D | grep `date +%D` "</span></span><br></pre></td></tr></table></figure>
<p>然而alias还有其他的用处。例如,解决常见的拼写错误。有多少次你在改变父目录时忽略了空格?不用再苦恼了!</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alias cd..=<span class="string">"cd .."</span></span><br></pre></td></tr></table></figure>
<p>作为一种选择,试试重写一些已经存在的命令怎么样?</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">alias ls=<span class="string">"ls -al"</span></span><br></pre></td></tr></table></figure>
<p>像我们一样节省一些按键,或者你总是想要完成清单。</p>
<p>要为每一个会话激活这些快捷键,只用添加alias命令到你的用户里家文件目录中的.bashrc文件中。</p>
<h3 id="更改Mozilla的秘密设置">更改Mozilla的秘密设置</h3><p>难度:简单<br>应用程序:Mozilla</p>
<p>如果你想要改变Mozilla操作,但是在首选项中并没有提供可以点击的选项来帮助你,这里有一个特殊的模式可以让你在Mozilla中激活,这样你就能改变一切了。要访问它,在地址栏中输入这些:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">about:config</span><br></pre></td></tr></table></figure>
<p>这样你就可以改变表中文件里每一个你感兴趣的设置的值。</p>
<p>其他有趣的模式包括总体信息(about:),插件详情(about:plugins),开发者信息(about:credits)和一些总体情况(about:mozilla)。</p>
<h3 id="一个星星的背景">一个星星的背景</h3><p>难度:简单<br>应用程序:KStars</p>
<p>你可能已经玩过KStars了,但是如何创造一个每次当你启动时就更新的KStars背景图呢?</p>
<p>KStars可以和–dump switch一起运行,它可以从你的启动设置中打印出一幅图片,但一点也不会增加GUI的负载。你可以写一个脚本来运行它生成一个每天都更换的桌面图片(或者你可以只是使用这个方法生成图片)。</p>
<p>像这样使用KStars:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kstars --dump --width <span class="number">1024</span> --height <span class="number">768</span> --filename = ~/kstarsback.png</span><br></pre></td></tr></table></figure>
<p>你可以把它添加到~/.kde/Autostart文件夹的一个脚本中,一启动就开始运行。在浏览器中找到这个文件,把它拖到桌面上然后选择“设置为墙纸”,将它作为一个随机生成的背景图来使用。</p>
<h3 id="直接打开一个SVG">直接打开一个SVG</h3><p>难度:简单<br>应用程序:Inkscape</p>
<p>你可以通过shell运行Inkscape,然后直接通过一个URL来立刻编辑一张图片。只用输入:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">inkscape http://www.somehost.com/graphic.svg</span><br></pre></td></tr></table></figure>
<p>记得要另存为一下!</p>
<h3 id="不用编辑器来进行编辑">不用编辑器来进行编辑</h3><p>难度:中等<br>应用程序:好多</p>
<p>通常非常长的文件是很难用文本编辑器来进行操作的。如果你不时地要做这件事,可能你会发现用某些趁手的命令行工具会更快一些,就像下面这个例子一样。</p>
<p>从文件file1中打印第一列和第三列到文件file2中,我们可以使用awk:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">awk <span class="string">'{print $1, $3}'</span> file1 > file2</span><br></pre></td></tr></table></figure>
<p>只输出file1中第八列到第十五列中的字符,我们可以使用cut:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cut -c <span class="number">8</span>-<span class="number">15</span> file1 > file2</span><br></pre></td></tr></table></figure>
<p>要使用单词word2来替换文件file1中的单词word1,我们可以使用sed命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sed <span class="string">"s/word1/word2/g"</span> file1 > file2</span><br></pre></td></tr></table></figure>
<p>通常这是一个比打开文本编辑器更快得到结果的方式。</p>
<h3 id="只备份选中的文件">只备份选中的文件</h3><p>难度:中等<br>应用程序:tar</p>
<p>想要使用tar来备份一个目录中的某一文件?你可以使用-T标志。首先,用你想要备份的文件来创建一个文件:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">cat >> /etc/backup.conf</span><br><span class="line"><span class="comment"># /etc/passwd</span></span><br><span class="line"><span class="comment"># /etc/shadow</span></span><br><span class="line"><span class="comment"># /etc/yp.conf</span></span><br><span class="line"><span class="comment"># /etc/sysctl.conf</span></span><br><span class="line">EOF</span><br></pre></td></tr></table></figure>
<p>然后运行tar,并使用-T标志指向刚刚创建的文件。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar -cjf bck-etc-`date +%Y-%m-%d`.tar.bz2 -T /etc/backup.conf</span><br></pre></td></tr></table></figure>
<p>现在你已经备份好了。</p>
<h3 id="在文件中合并列">在文件中合并列</h3><p>难度:中等<br>应用程序:bash</p>
<p>在文件中拆分列是非常简单的,合并它们稍微复杂一点。下面是一个简单的完成这项工作的脚本:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/bin/sh</span></span><br><span class="line">length=`wc -l $<span class="number">1</span> | awk <span class="string">'{print $1}'</span>`</span><br><span class="line">count=<span class="number">1</span></span><br><span class="line">[ -f $<span class="number">3</span> ] && echo <span class="string">"Optionally removing $3"</span> && rm -i $<span class="number">3</span></span><br><span class="line"><span class="keyword">while</span> [ <span class="string">"$count"</span> -le <span class="string">"$length"</span> ] ; do</span><br><span class="line">a=`head -$count $<span class="number">1</span> | tail -<span class="number">1</span>`</span><br><span class="line">b=`head -$count $<span class="number">2</span> | tail -<span class="number">1</span>`</span><br><span class="line">echo <span class="string">"$a$b"</span> >> $<span class="number">3</span></span><br><span class="line">count=`expr $count + <span class="number">1</span>`</span><br><span class="line">done</span><br></pre></td></tr></table></figure>
<p>给这个脚本命名为merge.sh并且如下运行它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod u+x merge.sh</span><br></pre></td></tr></table></figure>
<p>现在,如果你想要合并file1和file2中的列到file3,下面是执行方法:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/path/to/merge.sh file1 file2 file3</span><br></pre></td></tr></table></figure>
<p>/path/to必须被你文件系统中的merge.sh位置所替代。</p>
<h3 id="大小写敏感">大小写敏感</h3><p>难度:中等<br>应用程序:bash</p>
<p>有些时候,一个词在不同操作系统间没有任何区别,在Linux中,“Command”和“command”是不同的东西。当从Windows移动文件到Linux中时会造成一些麻烦。tr是一个小的shell功能,可以用于改变一堆文件。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/bin/sh</span></span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> `ls -<span class="number">1</span>`; do</span><br><span class="line">file1=`echo $i | tr [A-Z] [a-z] `</span><br><span class="line">mv $i $file1 <span class="number">2</span>>/dev/null</span><br><span class="line">done</span><br></pre></td></tr></table></figure>
<p>通过执行这个,FILE1和fiLe2将被分别重命名为file1和file2.</p>
<h3 id="Emacs中的宏指令">Emacs中的宏指令</h3><p>难度:中等<br>应用程序:Emacs</p>
<p>当编辑文件时,你通常会发现那些任务都是冗长和重复的,所以为了节约你的时间,你应该录制一个宏指令。在Emacs中,你将必须经历以下步骤:</p>
<blockquote>
<p>1.按下 Ctrl+X 来开始一个记录。</p>
<p>2.插入所有你想要的按键和命令。</p>
<p>3.当你结束时按下Ctrl+X。</p>
</blockquote>
<p>现在,你可以用以下命令来执行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Ctrl -u <number> Ctrl -x e</span><br></pre></td></tr></table></figure>
<p>是你想执行宏指令的次数。如果你输入的值为0,这个宏指令将被一直执行直到文件的结束。Ctrl -x e等同于Ctrl -u 1 Ctrl-x e。</p>
<h3 id="简单的垃圾邮件清理">简单的垃圾邮件清理</h3><p>难度:中等<br>应用程序:KMail</p>
<p>垃圾邮件,或者不请自来的大批邮件,已经是个很普遍的问题,出于必要,现在几乎每个人都有某种形式的垃圾邮件保护。很多ISP包含垃圾邮件过滤,但是它并没有被设置的太过主动,而且通常很多都是简单的标记垃圾邮件,然后让它进来(ISP可不想因为丢失了你的邮件而被责备)。</p>
<p>所以,你在客户端上可能已经设置了反垃圾邮件的东西,要让它运行得更好,你可以写一些过滤器来移除被标记的垃圾邮件。标签是作为标题包含进来的。在KMail中,你可以只创建一个快速过滤器来将你的邮件装箱,或者干脆把它放到垃圾文件夹中。精确标题的使用将决定于你的ISP使用的软件,但是通常都是像SpamAssassin这样系统的类似X-Spam-Flag = YES。</p>
<p>在KMail中简单创建一个过滤器,选择Match Any of the Following(匹配下面的任何一个)然后输入标题细节和你需要的动作。应用过滤器到即将到来的邮件上,然后你的垃圾邮件的一半将不会再来打扰你了。</p>
<h3 id="阅读OOo文档但不使用OOo">阅读OOo文档但不使用OOo</h3><p>难度:中等<br>应用程序:OpenOffice.org(译注:一套跨平台办公室软件套件)</p>
<p>你曾经有没有过拿到一个OOo文档,但是没有OpenOffice.org来阅读?所以你就把它保存成普通的文本文件(.txt),但是被 StarOffice .sxw 格式所替代?这个文本文件可以得到拯救。首先,这个sxw文件是一个压缩文档,所以解压它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">unzip myfile.sxw</span><br></pre></td></tr></table></figure>
<p>你想要的是名为’content.xml’的文件。不幸的是,它充满了xml的标签以至于非常难以辨认,所以要用一些Perl魔法将它们过滤出去:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat content.xml | perl -p -e<span class="string">"s/<[^>]*>/ /g;s/\n/ /g;s/ +/ /;"</span></span><br></pre></td></tr></table></figure>
<p>这可能丢失了很多格式,但是至少现在它是可以阅读的。</p>
<h3 id="搜索和执行">搜索和执行</h3><p>难度:中等<br>应用程序:find</p>
<p>find命令并不只是在寻找文件方面很有用,它在处理以下问题时也是非常有用的。这里有一个简短的例子。</p>
<p>假设我们有很多的压缩文件,现在我们想找到所有的压缩文件:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find . -name <span class="string">'*.gz'</span></span><br></pre></td></tr></table></figure>
<p>将会定位出所有当前路径下的gzip文档。但是假设我们想要检查它们是否是有效文档,gunzip -vt选项将会帮我们实现这个,我们还可以机智地使用xargs结合这两个操作:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find . -name <span class="string">'*.gz'</span> | xargs gunzip -vt</span><br></pre></td></tr></table></figure>
<h3 id="正确使用whois服务器">正确使用whois服务器</h3><p>难度:中等<br>应用程序:whois</p>
<p>whois命令在追捕Internet上的恶棍以及给他们提供服务的ISP都是非常有用的。不幸的是,有很多whois服务器,如果你的反搜索一个域名,通常你不得不用一个指定的他们使用的TLD。然而,一些whois代理将自动转送你的查询到正确的服务器上。其中之一可以在<a href="http://whois.geektools.com/" target="_blank" rel="external">http://whois.geektools.com/</a> 上获得。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">whois -h whois.geektools.complop.info</span><br></pre></td></tr></table></figure>
<h3 id="驱动挂载到哪里了?">驱动挂载到哪里了?</h3><p>难度:中等<br>应用程序:bash</p>
<p>人们常碰到的一个问题是,你刚接通电源时,就有太多的可挂载外设(USB驱动,flash内存卡,USB键驱动)消耗光了驱动?</p>
<p>实际上,所有的驱动都调用一个驱动——就像usb-storage,会在日志中存储很多有用的信息。尝试:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dmesg | grep SCSI</span><br></pre></td></tr></table></figure>
<p>这将从dmesg输出过滤出指定的驱动规格。你可能发现一些这样的文本:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">SCSI device sda: <span class="number">125952</span> <span class="number">512</span>-byte hdwr sectors (<span class="number">64</span> MB)</span><br></pre></td></tr></table></figure>
<p>这个是说你的外设是在sda上。</p>
<h3 id="自动执行USB装置">自动执行USB装置</h3><p>难度:高级<br>应用程序:hotplug脚本</p>
<p>当添加一个特殊的外设时想要运行一个指定的应用程序?USB hotplug后台进程可以帮你!当有USB装置添加到系统中时,这个服务就会得到通知。对于需要内核驱动的装置,hotplug后台进程将在/etc/hotplug/usb/下调用一个同名的脚本,例如,这里的一个名为usb-storage的脚本。你可以直接在这个脚本的后面添加你自己的命令(或者更好的是,在它的最后添加一行来让脚本在别的地方执行)。那么你就可以播放音乐,autosync文件(译注:影像文件),搜寻图片或者其他什么的。</p>
<p>对于不依赖于内核驱动的装置,有一个检查表,可以用来匹配USB产品和制造商ID。很多发行版已经设置好去做一些事情,但是你可以依据你的需要定制这些脚本。到 <a href="http://jphoto.sourceforge.net/selected=sync" target="_blank" rel="external">http://jphoto.sourceforge.net/selected=sync</a> 去看一个我们能做什么的例子。</p>
<h3 id="重命名和调整图片大小">重命名和调整图片大小</h3><p>难度:高级<br>应用程序:bash</p>
<p>很喜欢你的新相机但是不能容忍那个糟糕的名字?你也想要准备发布它们到网上吗?没问题,一个简单的bash脚本真是你所需要的:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/bin/sh</span></span><br><span class="line">counter=<span class="number">1</span></span><br><span class="line">root=mypict</span><br><span class="line">resolution=<span class="number">400</span>x300</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> `ls -<span class="number">1</span> $<span class="number">1</span>/*.jpg`; do</span><br><span class="line">echo <span class="string">"Now working on $i"</span></span><br><span class="line">convert -resize $resolution $i ${root}_${counter}.jpg</span><br><span class="line">counter=`expr $counter + <span class="number">1</span>`</span><br><span class="line">done</span><br></pre></td></tr></table></figure>
<p>保存这个脚本到一个名为picturename.sh的文件中,然后用一下命令执行它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod u+x picturename.sh</span><br></pre></td></tr></table></figure>
<p>然后在你的某个路径下存储它。现在,如果你在directory /path/to/pictdir下有一堆.jpg文件,所有你需要做的就是执行这个:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">picturename.sh /path/to/pictdir</span><br></pre></td></tr></table></figure>
<p>而在当前的目录下你会发现 mypict_1.jpg, mypict_2.jpg之类的,它们是你初始图片调整大小后的版本。你可以根据你的需要改变脚本,或者,你只是期待一个超级简单的图片大小调整,试着看看mogrify命令和它的-geometry参数。</p>
<h3 id="安全登出">安全登出</h3><p>难度:简单<br>应用程序:bash</p>
<p>当你在一台共享机器上使用一个控制台,或者甚至只是在你自己的桌面使用控制台,都可能会发现当你登出时,屏幕仍然会显示谁已经登入正在做什么的痕迹。大多数发行版本将会清屏,但是有些不会。你可以通过编辑你的 ~/.bash_logout文件然后增加这个命令来解决问题:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">clear</span><br></pre></td></tr></table></figure>
<p>你也可以添加任何其他的有用命令在这里。</p>
<h3 id="传输文件但不使用ftp或者scp">传输文件但不使用ftp或者scp</h3><p>难度:简单<br>应用程序:netcat</p>
<p>需要传输一个目录给其他服务器但是没有FTP或者SCP使用权?那么这个小技巧将会帮助你使用netcat功能。在目的服务器上运行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nc -l -p <span class="number">1234</span> | uncompress -c | tar xvfp -</span><br></pre></td></tr></table></figure>
<p>并且在发送服务器上运行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar cfp - /some/dir | compress -c | nc -w <span class="number">3</span> [destination] <span class="number">1234</span></span><br></pre></td></tr></table></figure>
<p>现在你就可以不需要FTP并且不需要root权限,就能传送文件了。</p>
<h3 id="备份一个Debian包清单">备份一个Debian包清单</h3><p>难度:简单<br>应用程序:Debian</p>
<p>如果你正在运行Debian并且找不到你正在运行的包,为你当前正在安装的包做一个备份是非常有用的。你可以运行如下得到一个清单:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dpkg --get-selections > debianlist.txt</span><br></pre></td></tr></table></figure>
<p>这将把全部的清单放到debianlist.txt中,这样你就可以通过如下代码在不同的计算机上安装相同的包。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dpkg --set-selections < debianlist.txt</span><br></pre></td></tr></table></figure>
<p>当你复制你的系统到一个新的计算机上时,你要记住你还需要从/etc中复制配置文件。</p>
<p>要实际安装这些选项,使用如下指令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt-get -u dselect-upgrade</span><br></pre></td></tr></table></figure>
<h3 id="强化ssh">强化ssh</h3><p>难度:简单<br>应用程序:ssh</p>
<p>尽管SSH是一个非常安全的连接服务器的方式,这里还有两个简单的改变,可以让你进一步增强它的安全性。首先,你当然不希望别人直接以root用户登入——他们应该以普通用户登陆,然后使用su命令来转换。你可以在/etc/ssh/ssh_config 文件中通过添加如下代码改变这个件事:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">PermitRootLoginno</span><br></pre></td></tr></table></figure>
<p>现在唯一能得到root特权的方式是通过su,这意味着入侵者现在需要破解两个密码来得到全部的使用权。当你编辑这个文件时,找到这样一行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Protocol <span class="number">2</span>, <span class="number">1</span></span><br></pre></td></tr></table></figure>
<p>然后把它改为如下:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Protocol <span class="number">2</span></span><br></pre></td></tr></table></figure>
<p>这将消除最初的SSH协议中的撤销选项,现在被认为是非常易于攻击的。</p>
<h3 id="停止回应ping">停止回应ping</h3><p>难度:简单<br>应用程序:sysctl</p>
<p>ping在找出网络拓扑结构时是非常有用的命令,缺点是它只能做这件事,而且会使得网络上的黑客们更容易瞄准现场服务器。但是你可以告诉Linux忽略所有的ping服务器将不会回应。这里有很多的方法来实现它,但是最好的是使用sysctl。关掉ping回应:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sysctl -w net.ipv4.icmp_echo_ignore_all=<span class="number">1</span></span><br></pre></td></tr></table></figure>
<p>想要打开它,使用:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sysctl -w net.ipv4.icmp_echo_ignore_all=<span class="number">0</span></span><br></pre></td></tr></table></figure>
<p>关掉ping对你来说是非常严重的,看看接下来的技巧。</p>
<h3 id="降低ping速率">降低ping速率</h3><p>难度:简单<br>应用程序:sysctl</p>
<p>可能你想要保持服务器回复ping的功能,但是又想从被熟知的“ping flood”(封包洪流)的攻击中保护自己。那么你要如何完成这一壮举呢?最简单的方法是降低回应ping服务器的速率。它们仍然是有效的,但不会使服务器过载。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sysctl -w net.ipv4.icmp_echoreply_rate=<span class="number">10</span></span><br></pre></td></tr></table></figure>
<p>当回复被当作一个信号地址发送时,这将会降低速率。</p>
<h3 id="当登出的时候清理KDE">当登出的时候清理KDE</h3><p>难度:简单<br>应用程序:bash</p>
<p>在Windows中有很多程序会做一些清除网络缓存,移除临时文件事情。Linux上如果也可以这样是不是很cool呢?使用KDE,你甚至不需要安装任何新的软件,startkde脚本将会自动的执行你放在特殊地方的脚本。</p>
<p>首先,你需要在你的.kde目录下创建一个命令shutdown的目录:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mkdir /home/username/.kde/shutdown</span><br></pre></td></tr></table></figure>
<p>现在创建一个脚本,用来在关机时执行一些你想要的事情。这里是一个例子:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/bin/bash</span></span><br><span class="line"><span class="comment">#clear up temp folder</span></span><br><span class="line">rm -rf ~/tmp/*</span><br><span class="line"><span class="comment">#clear out caches</span></span><br><span class="line">rm -rf ~/.ee/minis/*</span><br><span class="line">rm -rf ~/.kde/share/cache/http/*</span><br><span class="line"><span class="comment"># delete konqueror form completions</span></span><br><span class="line">rm ~/.kde/share/apps/khtml/formcompletions</span><br></pre></td></tr></table></figure>
<p>现在确保你设置了正确的权限:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod ug+x ~/.kde/shutdown/cleanup.sh</span><br></pre></td></tr></table></figure>
<p>(或者随便你叫它什么)。可以清除敏感文件,也可以通过将脚本放在你的默认KDE文件夹中有一个名为shutdown的子文件夹里,给所有用户一个全局的关机脚本。找出你的默认KDE目录在哪里,试一下:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">kde-config --path exe</span><br></pre></td></tr></table></figure>
<h3 id="无密码的ssh">无密码的ssh</h3><p>难度:中等<br>应用程序:ssh</p>
<p>厌烦了每次登陆你的服务器时都要输入密码?ssh也支持密钥,所以当你登陆桌面时你只能输入你的密码。在你的桌面机器上生成一个密钥对:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t dsa -C your.email<span class="decorator">@ddress</span></span><br></pre></td></tr></table></figure>
<p>为你的密钥输入一个口令。这会将密钥放到 ~/.ssh/id_dsa and the public key in ~/.ssh/id_dsa.pub中。现在看看你是否有了一个正在运行的ssh-agent。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">echo $SSH_AGENT_PID</span><br></pre></td></tr></table></figure>
<p>如果安装了ssh-agent,大部分窗口管理器都会自动运行它。如果没有安装,开启一个:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">eval $(ssh-agent)</span><br></pre></td></tr></table></figure>
<p>现在,告诉这个代理你的密钥:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-add</span><br></pre></td></tr></table></figure>
<p>然后输入你的口令。你需要在每次登陆时都输入口令,如果你是使用X,尝试添加:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">SSH_ASKPASS=ssh-askpass ssh-add</span><br></pre></td></tr></table></figure>
<p>到你的.xsession文件。(你可能需要安装ssh-askpass)现在为每个你需要登入的服务器都创建这个目录 ~/.ssh,然后复制这个文件~/.ssh/id_dsa.pub into it as ~/.ssh/authorized_keys 。如果你是手动开启ssh-agent,当你登出时,使用如下代码终止它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-agent -k</span><br></pre></td></tr></table></figure>
<h3 id="通过ssh使用rsync">通过ssh使用rsync</h3><p>难度:中等<br>应用程序:Shell</p>
<p>rsync使大型目录结构保持同步。通过SSH使用tar远程复制一个文件系统的一部分是非常理想的,sync甚至更适合保持两台机器之间的文件系统的同步。为了使用SSH运行一个rsyns,传递给它一个-e转换:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rsync -ave ssh greendome:/home/ftp/pub/ /home/ftp/pub/</span><br></pre></td></tr></table></figure>
<p>注意从源端(在greendome上)来的文件说明后面的 / ,在源说明中,一个尾部的 / 告诉rsync这个目录的内容,但不是目录本身。为了将目录放入正在复制的内容的最高等级丢掉这个 /:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rsync -ave ssh bcnu:/home/six .</span><br></pre></td></tr></table></figure>
<p>这将在 ~/six/目录下保持一个与bcnu:/home/six/上的任何东西同步的复制品。rsync默认只拷贝文件和目录,但是当源端移除了文件时并不会在目的端移除它们的拷贝。为了保持复制的精确性,包含–delete这个标志:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rsync -ave ssh--delete greendome:~one/reports .</span><br></pre></td></tr></table></figure>
<p>现在当老的报表从greendome上的~one/reports/中移除了,在同步版本中,每次这个命令运行时,它们也将会从~six/public_html/reports/中移除。如果你在corn中像这样运行一条命令,记得丢掉v。这将会使输出稳定(除非rsync在运行中出现问题,在这种情况下你将会收到一封有错误输出的邮件)。使用SSH作为你的rsync运输方式,这样做的好处是使数据在网络传输过程中加密,并可以方便使用任何你已经用SSH客户端密钥建立的信任关系。</p>
<h3 id="资源扫描">资源扫描</h3><p>难度:中等<br>应用程序:nmap</p>
<p>例如,简单的TCP连接扫描可以在不需要root特权时进行:</p>
<p>一般来说,当人们想到nmap时,都假设nmap是用来进行一些违法的网络侦查,并为恶意攻击做准备的。但是作为一个强大的工具,nmap可以成为一个白帽子,做一些比入侵网络有意义得多的事。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nmap rigel</span><br></pre></td></tr></table></figure>
<p>nmap也可以通过指定范围或者CIDR符号来扫描IP地址:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">nmap <span class="number">192.168</span>.0.1-<span class="number">254</span></span><br><span class="line">nmap <span class="number">192.168</span>.0.0/<span class="number">24</span></span><br></pre></td></tr></table></figure>
<p>nmap如果以root身份运行,可以提供更多的信息。当它以root身份运行时,通过使用-O标志,它可以使用特殊的数据包来决定远程机器的操作系统。此外,你可以通过使用-sS标志来实现半开的TCP扫描。nmap将会发送一个SYN数据包到远程的主机,然后等待接收它回应的ACK。如果nmap收到一个ACK,它就知道这个端口是开放的。</p>
<p>这不同于普通的TCP三次握手,客户端会发送一个SYN包,如果它收到了初始的服务器ACK,客户端随后会将一个ACK送回服务器。攻击者们时常使用这个选项来避免使他们的扫描登陆到远程机器上。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">nmap -sS -O rigel</span><br><span class="line"> </span><br><span class="line">Starting nmap V. <span class="number">3.00</span> ( www.insecure.org/nmap/ )</span><br><span class="line">Interesting ports on rigel.nnc (<span class="number">192.168</span>.0.61):</span><br><span class="line">(The <span class="number">1578</span> ports scanned but <span class="keyword">not</span> shown below are <span class="keyword">in</span> state: filtered)</span><br><span class="line">Port State Service</span><br><span class="line"><span class="number">7</span>/tcpopen echo</span><br><span class="line"><span class="number">9</span>/tcpopen discard</span><br><span class="line"><span class="number">13</span>/tcp open daytime</span><br><span class="line"><span class="number">19</span>/tcp open chargen</span><br><span class="line"><span class="number">21</span>/tcp open ftp</span><br><span class="line"><span class="number">22</span>/tcp open ssh</span><br><span class="line"><span class="number">23</span>/tcp open telnet</span><br><span class="line"><span class="number">25</span>/tcp open smtp</span><br><span class="line"><span class="number">37</span>/tcp open time</span><br><span class="line"><span class="number">79</span>/tcp open finger</span><br><span class="line"><span class="number">111</span>/tcpopen sunrpc</span><br><span class="line"><span class="number">512</span>/tcpopen <span class="keyword">exec</span></span><br><span class="line"><span class="number">513</span>/tcpopen login</span><br><span class="line"><span class="number">514</span>/tcpopen shell</span><br><span class="line"><span class="number">587</span>/tcpopen submission</span><br><span class="line"><span class="number">7100</span>/tcp open font-service</span><br><span class="line"><span class="number">32771</span>/tcpopen sometimes-rpc5</span><br><span class="line"><span class="number">32772</span>/tcpopen sometimes-rpc7</span><br><span class="line"><span class="number">32773</span>/tcpopen sometimes-rpc9</span><br><span class="line"><span class="number">32774</span>/tcpopen sometimes-rpc11</span><br><span class="line"><span class="number">32777</span>/tcpopen sometimes-rpc17</span><br><span class="line">Remote operating system guess: Solaris <span class="number">9</span> Beta through Release on SPARC</span><br><span class="line">Uptime <span class="number">44.051</span> days (since Sat Nov1 <span class="number">16</span>:<span class="number">41</span>:<span class="number">50</span> <span class="number">2003</span>)</span><br><span class="line">Nmap run completed -- <span class="number">1</span> IP address (<span class="number">1</span> host up) scanned <span class="keyword">in</span> <span class="number">166</span> seconds</span><br></pre></td></tr></table></figure>
<p>伴随着OS探测的激活,nmap可以确认OS是Solaris,但是现在你还可以知道,它可能是运行在SPARC处理器上的Version 9。</p>
<p>一个强大的功能是可以被用于和你的nmap的XML输出性能保持联系。使用-oX命令行转换而激活,就像这样:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nmap -sS -O -oX scandata.xml rigel</span><br></pre></td></tr></table></figure>
<p>这在扫描IP地址范围或者你全部的网络时是特别有用的,你可以将所有通过扫描收集起来的信息放到一个XML文件里,并经过解析后插入到数据库中。这里是一个开放的端口的XML入口:</p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><port protocol="tcp" portid="22"></span><br><span class="line"> </span><br><span class="line"><state state="open" /></span><br><span class="line"><service name="ssh" method="table" conf="3" /></span><br><span class="line"></port></span><br></pre></td></tr></table></figure>
<p>nmap是一个强大的工具。通过使用它的XML输出性能,一点点的脚本,还有一个数据库,你可以创造一个更强大的可以在你的网络上监测未授权的服务和机器的工具。</p>
<h3 id="备份你的bootsector(引导扇区)">备份你的bootsector(引导扇区)</h3><p>难度:高级<br>应用程序:Shell</p>
<p>妨碍引导装入,双启动和很多其他下热闹的程序会留给你一个混乱的引导扇区。为什么不在你可以备份的时候给它创建一个备份呢:</p>
<p>引导装载器混乱、双启动及许多其他的可怕的进程可能造成乱七八糟的启动区。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dd <span class="keyword">if</span>=/dev/hda of=bootsector.img bs=<span class="number">512</span> count=<span class="number">1</span></span><br></pre></td></tr></table></figure>
<p>很显然,你应该改变这个装置来显示你的boot驱动(有可能是SCSI的sda)。还要非常小心,别把事情搞砸——你可能会轻而易举地毁掉你的驱动!恢复时使用:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dd <span class="keyword">if</span>=bootsector.img of=/dev/hda</span><br></pre></td></tr></table></figure>
<h3 id="保护日志文件">保护日志文件</h3><p>难度:高级<br>应用程序:很多</p>
<p>在一个入侵过程中,一个入侵者将会很可能在很多系统日志中留下能反映他行为的迹象:一个有价值的审计追踪应该被保护。没有可靠的日志,就很难发现攻击者是如何侵入,或者是从哪里来的攻击。这个信息在分析事件、联系相关方面并给予反馈上,是很关键的。但是,如果入侵成功,什么才能阻止他来移除他的这些错误行为的痕迹呢?</p>
<p>这就是文件属性能发挥作用、挽回败局的地方(或者至少使事情没那么糟)。Linux和BSD都有给文件和目录分配额外的属性这个功能。这不同于标准的Unix权限方案中,系统为所有的用户提供的普遍的属性设置,而且它们比文件权限或者ACL都要更深层次影响文件访问。</p>
<p>在Linux中,你可以看到并且通过lsattr和chattr命令分别修改一个给出文件的设置。在写这篇文章时,Linux的文件属性只能在你使用ext2和ext3时获得。这还有些XFS和ReiserFS的关于获得属性支持的内核补丁。一个保护日志文件的有用的属性是append-only。当这个属性被设置后,文件不能被删除,而且写操作只能被允许在文件的最后追加。</p>
<p>在Linux下要设置append-only标志,运行这条命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chattr +afilename</span><br></pre></td></tr></table></figure>
<p>看看+a属性是如何工作的:创建一个文件然后设置它的append-only属性:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">touch /var/log/logfile</span><br><span class="line">echo <span class="string">"append-only not set"</span> > /var/log/logfile</span><br><span class="line">chattr +a /var/log/logfile</span><br><span class="line">echo <span class="string">"append-only set"</span> > /var/log/logfile</span><br><span class="line">bash: /var/log/logfile: Operation <span class="keyword">not</span> permitted</span><br></pre></td></tr></table></figure>
<p>企图第二次写文件失败,因为它将覆盖这个文件。然而,在文件的末尾追加仍然是被允许的:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">echo <span class="string">"appending to file"</span> >> /var/log/logfile</span><br><span class="line">cat /var/log/logfile</span><br><span class="line">append-only <span class="keyword">not</span> set</span><br><span class="line">appending to file</span><br></pre></td></tr></table></figure>
<p>显而易见,一个获得root特权的侵入者能意识到使用了文件属性,并且可以通过运行chattr -a来移除append-only标志。为了防止这种情况,我们需要禁用移除append-only属性的性能,在Linux下使用功能机制完成这个。</p>
<p>Linux功能模型分割特权给全能的root账户,并且允许你有选择的禁用它们。为了防止一个用户移除一个文件的append-only属性,我们需要移除CAP_LINUX_IMMUTABLE功能。当体现在当前运行系统中时,这个功能允许append-only属性被修改。为了当前系统中获得修改这个功能的设置,我们将简单有效地调用lcap(<a href="http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2" target="_blank" rel="external">http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2</a>).</p>
<p>为了解压和编译这个工具,运行这条命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar xvfj lcap-<span class="number">0.0</span>.3.tar.bz2 && cd lcap-<span class="number">0.0</span>.3 && make</span><br></pre></td></tr></table></figure>
<p>然后,不允许修改append-only标志,运行:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">./lcap CAP_LINUX_IMMUTABLE</span><br><span class="line">./lcap CAP_SYS_RAWIO</span><br></pre></td></tr></table></figure>
<p>第一条命令移除了改变append-only标志的功能,然后第二条移除了原始I/O的功能。这是很有必要的,因为这样就能保护文件不被访问块设备时驻留在其上的东西修改。这阻止了访问/dev/mem和/dev/kmem,有可能给入侵者提供恢复CAP_LINUX_IMMUTABLE功能的漏洞。为了在boot上移除这项功能,添加之前的两条命令到你的系统启动脚本中(例如/etc/rc.local)。你应该确保这个功能在boot命令中被移除了,防止其他启动脚本出问题。一旦lcap移除了内核功能,就只能通过重启系统来恢复了。</p>
<p>在做这些之前,你应该明白,给你的日志文件添加append-only标志,将会造成日志循环脚本失败。然而,做这件事将会极大的提升你的审计追踪的安全性。安全性的提升在突发事件中会被证明是很有用的。</p>
<h3 id="自动加密连接">自动加密连接</h3><p>难度:高级<br>应用程序:FreeS/WAN</p>
<p>一个FreeS/WAN支持的特别cool的功能是,当其他主机运行FreeS/WAN时随机加密。这允许FreeS/WAN在所有支持随机加密的主机间透明传输。为了这个,每台主机必须使用FreeS/WAN生成一个公钥,这个公钥可以存储于那台主机的一个DNS TXT记录中。当一台主机要与另一个主机建立一个随机加密,希望初始化一个加密连接时,将会通过DNS查询这台主机的公钥并且初始化这个连接。</p>
<p>一开始,你想使用这个功能时,需要为每一台主机生成一个公钥。你可以通过运行如下命令来实现它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ipsec newhostkey --output /tmp/`hostname`.key</span><br></pre></td></tr></table></figure>
<p>现在你需要添加通过那条命令创建的文件的内容到/etc/ipsec.secrets中。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat /tmp/`hostname`.key >> /etc/ipsec.secrets</span><br></pre></td></tr></table></figure>
<p>然后,你需要生成一个TXT记录来存放你的DNS区域。你可以通过运行如下命令来实现它:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ipsec showhostkey --txt <span class="decorator">@colossus.nnc</span></span><br></pre></td></tr></table></figure>
<p>现在添加这条记录到你的空间然后重载它。你会证实DNS已经通过这条命令正确的运行了:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">ipsec verify</span><br><span class="line"> </span><br><span class="line">Checking your system to see <span class="keyword">if</span> IPsec got installed <span class="keyword">and</span> started correctly</span><br><span class="line">Version check <span class="keyword">and</span> ipsec on-path[OK]</span><br><span class="line">Checking <span class="keyword">for</span> KLIPS support <span class="keyword">in</span> kernel [OK]</span><br><span class="line">Checking <span class="keyword">for</span> RSA private key (/etc/ipsec.secrets) [OK]</span><br><span class="line">Checking that pluto <span class="keyword">is</span> running [OK]</span><br><span class="line">DNS checks.</span><br><span class="line">Looking <span class="keyword">for</span> TXT <span class="keyword">in</span> forward map: colossus [OK]</span><br><span class="line">Does the machine have at least one non-private address [OK]</span><br></pre></td></tr></table></figure>
<p>现在只需要重启FreeS/WAN-你现在应该能连接到任何支持随机加密的主机上了。但是如果其他的主机想要连接你该怎么办?要授权连接,你需要在你的DNS反向查找区域为你的机器创建一个TXT记录。</p>
<p>你可以通过运行一个简单的命令来生成一条记录:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ipsec showhostkey --txt <span class="number">192.168</span>.0.64</span><br></pre></td></tr></table></figure>
<p>为你的子网添加这条记录到反向查找区域,然后其他的机器就可以和你的机器初始化随机加密了。伴随着随机加密的使用,所有主机间的传输将被自动加密,同时保护所有的服务。</p>
<h3 id="消除二进制suid">消除二进制suid</h3><p>难度:中等<br>应用程序:find</p>
<p>如果你的服务器有比你自身多的shell用户,你应该在你的系统上定期的审核setuid和setgid的二进制文件。可能你会惊讶你找到了那么多文件。这里有一个搜寻所有setuid或者setgid的文件的命令位设置:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">find / -perm +<span class="number">6000</span> -type f -<span class="keyword">exec</span> ls -ld {} \; > setuid.txt &</span><br></pre></td></tr></table></figure>
<p>这将会创建一个名为setuid.txt的文件,包含了所有当前系统上匹配的文件的细节。要移除任何你不用的工具的s位,输入:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">chmod a-s program</span><br></pre></td></tr></table></figure>
<h3 id="Mac过滤Host_AP">Mac过滤Host AP</h3><p>难度:高级<br>应用程序:iwpriv</p>
<p>你可以在链路层使用iptables或者ebtables执行MAC过滤,那比让Host AP为你做这些更安全。这不仅仅是阻碍指向你的网络传输,也是预防邪恶的人关联你的站。这能帮助组织某些人给你的其他无线客户端造成麻烦的可能,即使他们没有更多的网络通道。</p>
<p>当使用MAC过滤时,很多人会列出一个他们希望允许的无线装置清单,然后拒绝所有其他的。使用iwpriv命令完成这个功能:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">iwpriv wlan0 addmac <span class="number">00</span>:<span class="number">30</span>:<span class="number">65</span>:<span class="number">23</span>:<span class="number">17</span>:<span class="number">05</span></span><br><span class="line">iwpriv wlan0 addmac <span class="number">00</span>:<span class="number">40</span>:<span class="number">96</span>:aa:<span class="number">99</span>:fd</span><br><span class="line">...</span><br><span class="line">iwpriv wlan0 maccmd <span class="number">1</span></span><br><span class="line">iwpriv wlan0 maccmd <span class="number">4</span></span><br></pre></td></tr></table></figure>
<p>addmac指示添加一个MAC地址到内部表。只要你喜欢你就可以通过执行更多的addmac命令添加更多的MAC地址到表中。然后你需要告诉Host AP对你已经建好的表做什么。maccmd 1命令告诉Host AP就像使用一个“允许”清单一样使用这个表,并且拒绝所有其他的MAC地址来关联。最终,maccmd 4命令去除掉所有的关联客户端,强制使它们重新关联。对表中的客户端来说是自动发生的,但是其他的任何企图关联的客户端都是被拒绝的。</p>
<p>有时,你只需要禁止一个或者两个捣蛋鬼,而不是设置一个详细的被允许的硬件规则。如果你需要禁止两三个MAC地址而允许其他所有的地址,尝试这个:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">iwpriv wlan0 addmac <span class="number">00</span>:<span class="number">30</span>:<span class="number">65</span>:fa:ca:de</span><br><span class="line">iwpriv wlan0 maccmd <span class="number">2</span></span><br><span class="line">iwpriv wlan0 kickmac <span class="number">00</span>:<span class="number">30</span>:<span class="number">65</span>:fa:ca:de</span><br></pre></td></tr></table></figure>
<p>像以前一样,你可以不限次数的使用addmac,只要你乐意。Maccmd2命令会将规则设置为“拒绝”,而如果该MAC恰巧已经关联,kickmac会立刻将特定的MACboot。这也许比只为了禁止一个捣蛋鬼而消除所有关联然后让他们重新邻接要好一些。顺便说一下,如果你想要消除所有的MAC过滤,尝试maccmd 0。</p>
<p>如果你错误的输入了一个MAC地址,你可以像使用addmac一样使用delmac命令,然后它(可以预见)就会从表中删掉这个给出的MAC地址。你有时会需要完全清除当前的MAC表但是保留它当前的规则,使用这条命令:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">iwpriv wlan0 maccmd <span class="number">3</span></span><br></pre></td></tr></table></figure>
<p>最后,你可以通过使用/proc浏览正在运行的MAC表:</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cat /proc/net/hostap/wlan0/ap_control</span><br></pre></td></tr></table></figure>
<p>iwpriv程序操纵正在运行的Host AP驱动,但是重启后不保留设置。一旦你对你的MAC过滤表感到满意,请确保你在一个rc脚本中添加了相关命令在启动时间运行。</p>
<p>注意,未关联的客户端仍然可以监听网络传输,所以MAC过滤实际上只能预防一点点窃取。为了与被动的监听技巧搏斗,你需要加密你的数据。</p>
<p><文章来自:伯乐在线 ></p>
]]></content>
<summary type="html">
<![CDATA[<p>是什么区分开普通的Linux用户和超级极客的呢?很简单:用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提高效率而又不用做这些搜集资料的跑腿活儿,那我们已经收集了50多条简单易学的Linux技巧,以帮助你更潇洒地工作,并且最大限度的利用你的电脑。开始享受吧!</p>]]>
</summary>
<category term="Linux" scheme="http://qxly.info/tags/Linux/"/>
<category term="极客" scheme="http://qxly.info/tags/%E6%9E%81%E5%AE%A2/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[生活的意义]]></title>
<link href="http://qxly.info/2014/02/26/%E7%94%9F%E6%B4%BB%E7%9A%84%E6%84%8F%E4%B9%89/"/>
<id>http://qxly.info/2014/02/26/生活的意义/</id>
<published>2014-02-26T04:22:19.000Z</published>
<updated>2015-06-30T16:14:28.000Z</updated>
<content type="html"><![CDATA[<iframe height="498" width="700" src="http://player.youku.com/embed/XMzA0ODE4ODc2" frameborder="0" allowfullscreen></iframe>
<p>人生的意义是什么?一百年的时光?不!人生不是公式,它是由人而定,由人而生的。</p>
<a id="more"></a>
<p>对于霍金来说,人生便是无尽的探索;对于海伦来说,人生将是绚丽的想象;对于孔子来说,人生就是仁爱的奋斗。与其反之,对于海子来说,人生便是无望的黑暗;对于秦桧来说,人生将是肮脏的权利;对于和珅来说,人生就是贪污的金子。</p>
<p>每一个人的人生意义都是不一样的,或光明或黑暗,或奋进或颓废,或美丽或丑陋。话说回来,人生只是一个过程,来时几声哭泣,走时几人叹息。但世间万物无不在走这个过程,每一个人都是首先活在这世间,然后历经沧桑,最后走向灭亡。而人生的意义便是在这个过程中定下的。</p>
<p>我想人生的意义是没有止境的,因为你活着一天就会有一天的意义。就不能有满足的思想,就要不断的追求,要在珍惜自己所拥有的前提下。追求自己眼下所没有的、追求自己通过努力能够得到的。当然这里面还有一个关键,那就是应该属于自己的才去追求。</p>
<p>如果我们奋斗了,努力了,既使我们没有成功,起码是无怨无悔!这也是人生的意义。</p>
<p>曾经听过这样一个故事:</p>
<blockquote>
<p>一个旅客在沙漠里走着,忽然后面出现了一群饿狼,追着他来要群起而噬。他大吃一惊,拼命狂奔,为生命而奋斗。就在饿狼快追上他时,他见到前面有口不知有多深的井,不顾一切跳了进去。那井不但没有水,还有很多毒蛇,见到有食物送上门来,昂首吐舌,热切引项以待。他大惊失色之下,胡乱伸手想去抓到点什么可以救命的东西。想不到天从人愿,给他抓到了一棵横在井中间的小树,把他稳在半空处。于是乎上与饿狼,下有毒蛇,不过那人虽陷身在进退两难的绝境,但暂时总仍是安全的。在他松了一口气的时刻,奇怪的异响传入他的耳内。他骇然循声望去,魂飞魄散地发觉有一群大老鼠正以尖利的牙齿咬着树根,这救命的树已是时日无多了。就在这生死一瞬的时候,他看到眼前树叶上有一滴蜜糖,于是他忘记了上面的饿狼,下面的毒蛇,也忘掉了快要给老鼠咬断的小树,闭上眼睛,伸出舌头,全心全意去舐尝那滴蜜糖。 </p>
</blockquote>
<p>有人说,人生的意义就在于那滴蜜糖。</p>
<p>所以人生的意义就是在有限的时间里,去体会真正的快乐。</p>
<p><文章来自:中国散文网 ></p>
]]></content>
<summary type="html">
<![CDATA[<iframe height=498 width=700 src="http://player.youku.com/embed/XMzA0ODE4ODc2" frameborder=0 allowfullscreen></iframe>
<p>人生的意义是什么?一百年的时光?不!人生不是公式,它是由人而定,由人而生的。</p>]]>
</summary>
<category term="人生的意义" scheme="http://qxly.info/tags/%E4%BA%BA%E7%94%9F%E7%9A%84%E6%84%8F%E4%B9%89/"/>
<category term="About life" scheme="http://qxly.info/categories/About-life/"/>
</entry>
<entry>
<title><![CDATA[CSS初始化方案收集]]></title>
<link href="http://qxly.info/2014/02/19/CSS%E5%88%9D%E5%A7%8B%E5%8C%96%E6%96%B9%E6%A1%88%E6%94%B6%E9%9B%86/"/>
<id>http://qxly.info/2014/02/19/CSS初始化方案收集/</id>
<published>2014-02-19T04:22:06.000Z</published>
<updated>2015-06-30T16:17:48.000Z</updated>
<content type="html"><![CDATA[<p>CSS为什么要初始化?建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异。当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。</p>
<a id="more"></a>
<p>最简单的初始化方法就是: {padding: 0; margin: 0;} 。有很多人也是这样写的。这确实很简单,但有人就会感到疑问: 号这样一个通用符在编写代码的时候是快,但如果网站很大,CSS样式表文件很大,这样写的话,他会把所有的标签都初始化一遍,这样就大大的加强了网站运行的负载,会使网站加载的时候需要很长一段时间。</p>
<p>写过css的都知道每个网页引进的css首先都需要初始化,而出名的css reset有YUI css reset(QQ、淘宝等都出现他的影子),业内用的最多的还有Erik Meyer’s CSS Reset。</p>
<p>花了点时间,把一些门户及大型网站的样式初始化罗列了下来(仅供参考)</p>
<h5 id="腾讯-_http://www-qq-com">腾讯- <a href="http://www.qq.com" target="_blank" rel="external">http://www.qq.com</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:<span class="number">0</span>;padding:<span class="number">0</span>}</span><br><span class="line">body{font:<span class="number">12</span>px<span class="string">"宋体"</span>,<span class="string">"Arial Narrow"</span>,HELVETICA;background:<span class="comment">#fff;-webkit-text-size-adjust:100%;}</span></span><br><span class="line">a{color:<span class="comment">#2d374b;text-decoration:none}</span></span><br><span class="line">a:hover{color:<span class="comment">#cd0200;text-decoration:underline}</span></span><br><span class="line">em{font-style:normal}</span><br><span class="line">li{list-style:none}</span><br><span class="line">img{border:<span class="number">0</span>;vertical-align:middle}</span><br><span class="line">table{border-collapse:collapse;border-spacing:<span class="number">0</span>}</span><br><span class="line">p{word-wrap:<span class="keyword">break</span>-word}</span><br></pre></td></tr></table></figure>
<h5 id="新浪-_http://www-sina-com-cn/">新浪- <a href="http://www.sina.com.cn/" target="_blank" rel="external">http://www.sina.com.cn/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">body,ul,ol,li,p,h1,h2,h3,h4,h5,h6,form,fieldset,table,td,img,div{margin:<span class="number">0</span>;padding:<span class="number">0</span>;border:<span class="number">0</span>;}</span><br><span class="line">body{background:<span class="comment">#fff;color:#333;font-size:12px; margin-top:5px;font-family:"SimSun","宋体","Arial Narrow";}</span></span><br><span class="line"> </span><br><span class="line">ul,ol{list-style-type:none;}</span><br><span class="line">select,input,img,select{vertical-align:middle;}</span><br><span class="line"> </span><br><span class="line">a{text-decoration:none;}</span><br><span class="line">a:link{color:<span class="comment">#009;}</span></span><br><span class="line">a:visited{color:<span class="comment">#800080;}</span></span><br><span class="line">a:hover,a:active,a:focus{color:<span class="comment">#c00;text-decoration:underline;}</span></span><br></pre></td></tr></table></figure>
<h5 id="淘宝-_http://www-taobao-com/">淘宝- <a href="http://www.taobao.com/" target="_blank" rel="external">http://www.taobao.com/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:<span class="number">0</span>; padding:<span class="number">0</span>; }</span><br><span class="line">body, button, input, select, textarea { font:<span class="number">12</span>px/<span class="number">1.5</span>tahoma, arial, \<span class="number">5</span>b8b\<span class="number">4</span>f53; }</span><br><span class="line">h1, h2, h3, h4, h5, h6{ font-size:<span class="number">100</span>%; }</span><br><span class="line">address, cite, dfn, em, var { font-style:normal; }</span><br><span class="line">code, kbd, pre, samp { font-family:couriernew, courier, monospace; }</span><br><span class="line">small{ font-size:<span class="number">12</span>px; }</span><br><span class="line">ul, ol { list-style:none; }</span><br><span class="line">a { text-decoration:none; }</span><br><span class="line">a:hover { text-decoration:underline; }</span><br><span class="line">sup { vertical-align:text-top; }</span><br><span class="line">sub{ vertical-align:text-bottom; }</span><br><span class="line">legend { color:<span class="comment">#000; }</span></span><br><span class="line">fieldset, img { border:<span class="number">0</span>; }</span><br><span class="line">button, input, select, textarea { font-size:<span class="number">100</span>%; }</span><br><span class="line">table { border-collapse:collapse; border-spacing:<span class="number">0</span>; }</span><br></pre></td></tr></table></figure>
<h5 id="网易-_http://www-163-com/">网易- <a href="http://www.163.com/" target="_blank" rel="external">http://www.163.com/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">html {overflow-y:scroll;}</span><br><span class="line">body {margin:<span class="number">0</span>; padding:<span class="number">29</span>px00; font:<span class="number">12</span>px<span class="string">"\5B8B\4F53"</span>,sans-serif;background:<span class="comment">#ffffff;}</span></span><br><span class="line">div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,blockquote,p{padding:<span class="number">0</span>; margin:<span class="number">0</span>;}</span><br><span class="line">table,td,tr,th{font-size:<span class="number">12</span>px;}</span><br><span class="line">li{list-style-type:none;}</span><br><span class="line">img{vertical-align:top;border:<span class="number">0</span>;}</span><br><span class="line">ol,ul {list-style:none;}</span><br><span class="line">h1,h2,h3,h4,h5,h6{font-size:<span class="number">12</span>px; font-weight:normal;}</span><br><span class="line">address,cite,code,em,th {font-weight:normal; font-style:normal;}</span><br></pre></td></tr></table></figure>
<h5 id="雅虎-_https://www-yahoo-com/">雅虎- <a href="https://www.yahoo.com/" target="_blank" rel="external">https://www.yahoo.com/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">html { background: none repeat scroll <span class="number">0</span> <span class="number">0</span> <span class="comment">#FFFFFF; color: #000000; }</span></span><br><span class="line">body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td {</span><br><span class="line"> margin: <span class="number">0</span>; padding: <span class="number">0</span>; }</span><br><span class="line">table { border-collapse: collapse; border-spacing: <span class="number">0</span>; }</span><br><span class="line">fieldset, img { border: <span class="number">0</span> none; }</span><br><span class="line">address, caption, cite, code, dfn, em, strong, th, var { font-style: normal; font-weight: normal; }</span><br><span class="line">li { list-style: none outside none; }</span><br><span class="line">caption, th { text-align: left; }</span><br><span class="line">h1, h2, h3, h4, h5, h6 { font-size: <span class="number">100</span>%; font-weight: normal; }</span><br><span class="line">q:before, q:after { content: <span class="string">""</span>; }</span><br><span class="line">abbr, acronym { border: <span class="number">0</span> none; font-variant: normal; }</span><br><span class="line">sup { vertical-align: text-top; }</span><br><span class="line">sub { vertical-align: text-bottom; }</span><br><span class="line">input, textarea, select { font-family: inherit; font-size: inherit; font-weight: inherit; }</span><br><span class="line">legend { color: <span class="comment">#000000; }</span></span><br><span class="line">body { font: <span class="number">13</span>px/<span class="number">1.231</span> arial,helvetica,clean,sans-serif; }</span><br><span class="line">select, input, button, textarea { font: <span class="number">99</span>% arial,helvetica,clean,sans-serif; }</span><br><span class="line">table { font-size: inherit; }</span><br><span class="line">pre, code, kbd, samp, tt { font-family: monospace; line-height: <span class="number">100</span>%; }</span><br><span class="line">a { text-decoration: none; }</span><br><span class="line">a:hover, a:focus { text-decoration: underline; }</span><br><span class="line">strong { font-weight: bold; }</span><br><span class="line">input[type=<span class="string">"submit"</span>] { cursor: pointer; }</span><br><span class="line">button { cursor: pointer; }</span><br></pre></td></tr></table></figure>
<h5 id="博客园-_http://www-cnblogs-com/">博客园- <a href="http://www.cnblogs.com/" target="_blank" rel="external">http://www.cnblogs.com/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">/*version: <span class="number">2.7</span>.0*/</span><br><span class="line">html,body{color:<span class="comment">#000;background:#FFF;}</span></span><br><span class="line">body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,</span><br><span class="line"> th,td{ margin:<span class="number">0</span>;padding:<span class="number">0</span>; }</span><br><span class="line">table{border-collapse:collapse;border-spacing:<span class="number">0</span>;}</span><br><span class="line">fieldset,img{border:<span class="number">0</span>;}</span><br><span class="line">address,caption,cite,code,dfn,em,strong,th,var,optgroup{</span><br><span class="line"> font-style:inherit;font-weight:inherit;</span><br><span class="line">}</span><br><span class="line"><span class="keyword">del</span>,ins{text-decoration:none;}</span><br><span class="line">li{list-style:none;}</span><br><span class="line">caption,th{text-align:left;}</span><br><span class="line">h1,h2,h3,h4,h5,h6{ font-size:<span class="number">100</span>%;font-weight:normal;}</span><br><span class="line">q:before,q:after{content:<span class="string">''</span>;}</span><br><span class="line">abbr,acronym{border:<span class="number">0</span>;font-variant:normal;}</span><br><span class="line">sup{vertical-align:baseline;}</span><br><span class="line">sub{vertical-align:baseline;}</span><br><span class="line">legend{color:<span class="comment">#000;}</span></span><br><span class="line">input,button,textarea,select,optgroup,option{</span><br><span class="line"> font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;</span><br><span class="line">}</span><br><span class="line">input,button,textarea,select{*font-size:<span class="number">100</span>%;}</span><br><span class="line">.clear{clear:both;}</span><br><span class="line">input::-moz-focus-inner{ border: <span class="number">0</span>;padding: <span class="number">0</span>;}</span><br><span class="line">/*added*/</span><br><span class="line">input[type=button],input[type=submit] {-webkit-appearance: button;}</span><br></pre></td></tr></table></figure>
<h5 id="Erik_Meyer’s_CSS_Reset">Erik Meyer’s CSS Reset</h5><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">'html, body, div, span, applet, object, iframe, table, caption, tbody, tfoot, thead, tr, th, td,</span><br><span class="line">del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var,</span><br><span class="line">h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code,</span><br><span class="line">dl, dt, dd, ol, ul, li, fieldset, form, label, legend {</span><br><span class="line">vertical-align: baseline;</span><br><span class="line">font-family: inherit;</span><br><span class="line">font-weight: inherit;</span><br><span class="line">font-style: inherit;</span><br><span class="line">font-size: 100%;</span><br><span class="line">outline: 0;</span><br><span class="line">padding: 0;</span><br><span class="line">margin: 0;</span><br><span class="line">border: 0;</span><br><span class="line">}</span><br><span class="line">/* remember to define focus styles! */</span><br><span class="line">:focus { outline: 0; }</span><br><span class="line">body { background: white; line-height: 1; color: black; }</span><br><span class="line">ol, ul { list-style: none; }</span><br><span class="line">/* tables still need cellspacing="0" in the markup */</span><br><span class="line">table { border-collapse: separate; border-spacing: 0; }</span><br><span class="line">caption, th, td { font-weight: normal; text-align: left; }</span><br><span class="line">/* remove possible quote marks (") from <q> & <blockquote> */</span><br><span class="line">blockquote:before, blockquote:after, q:before, q:after { content: ""; }</span><br><span class="line">blockquote, q { quotes: "" ""; }'</span><br></pre></td></tr></table></figure>
<h5 id="Condensed_Meyer_Reset">Condensed Meyer Reset</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6,</span><br><span class="line">pre, form, fieldset, input, textarea, p, blockquote, th, td {</span><br><span class="line">padding: <span class="number">0</span>;</span><br><span class="line">margin: <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line">fieldset, img { border: <span class="number">0</span>; }</span><br><span class="line">table { border-collapse: collapse; border-spacing: <span class="number">0</span>; }</span><br><span class="line">ol, ul { list-style: none; }</span><br><span class="line">address, caption, cite, code, dfn, em, strong, th, var { font-weight: normal; font-style: normal; }</span><br><span class="line">caption, th { text-align: left; }</span><br><span class="line">h1, h2, h3, h4, h5, h6 { font-weight: normal; font-size: <span class="number">100</span>%; }</span><br><span class="line">q:before, q:after { content: <span class="string">''</span>; }</span><br><span class="line">abbr, acronym { border: <span class="number">0</span>; }</span><br></pre></td></tr></table></figure>
<h5 id="前端开发-_http://www-webcjs-com/">前端开发- <a href="http://www.webcjs.com/" target="_blank" rel="external">http://www.webcjs.com/</a></h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">/*======== 全局 ========*/</span><br><span class="line">body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote, th, td { margin:<span class="number">0</span>; padding:<span class="number">0</span>; }</span><br><span class="line">body { font-size:<span class="number">12</span>px; color:<span class="comment">#666; font-family:Verdana, Microsoft YaHei, Simsun; background:#fff; line-height:24px; }</span></span><br><span class="line">fieldset, img { border:<span class="number">0</span>; }</span><br><span class="line">ol, ul { list-style:none; }</span><br><span class="line">h1, h2, h3, h4, h5, h6{ font-size:<span class="number">100</span>%; }</span><br><span class="line">em { font-style:normal; }</span><br><span class="line">input, button, select, textarea { outline:none; } </span><br><span class="line">textarea { resize:none; } //禁用了文本的拖拉,尤其在谷歌下</span><br><span class="line">p{ text-align:justify; text-justify:distribute;} //为了使文本段落左右两边对齐</span><br><span class="line">/*======== Link ========*/</span><br><span class="line">a { color: <span class="comment">#666; text-decoration:none; }</span></span><br><span class="line">a:hover { color: <span class="comment">#f60; text-decoration:none; }</span></span><br></pre></td></tr></table></figure>
<p>来源转自:WebCjs-前端开发</p>
]]></content>
<summary type="html">
<![CDATA[<p>CSS为什么要初始化?建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异。当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。</p>]]>
</summary>
<category term="css" scheme="http://qxly.info/tags/css/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[GoAgent神器]]></title>
<link href="http://qxly.info/2014/01/30/GoAgent%E7%A5%9E%E5%99%A8/"/>
<id>http://qxly.info/2014/01/30/GoAgent神器/</id>
<published>2014-01-30T04:21:50.000Z</published>
<updated>2015-06-30T16:18:28.000Z</updated>
<content type="html"><![CDATA[<p>很多时候亲们在google上检索资源的时候,不可避免都会经常遇上类似“无法显示网页”的提示信息,对于GFW的封锁我已无力吐槽,还是乖乖寻个代理翻出去吧,于是发现了GoAgent,下面是过程:</p>
<a id="more"></a>
<h3 id="创建appid">创建appid</h3><p>打开网址:<a href="https://appengine.google.com/" target="_blank" rel="external">https://appengine.google.com/</a><br>申请appid,根据提示填写手机号和接收的验证码,然后ID和ID的识别代码,如果提示”Application Registered successfully“字样appid就算是申请成功了。</p>
<hr>
<h3 id="客户端安装与配置">客户端安装与配置</h3><p>URL:<a href="https://goagent.codeplex.com/releases/view/110172" target="_blank" rel="external">https://goagent.codeplex.com/releases/view/110172</a><br>安装的就不多说了,主要是绿色版和安装版的区别,绿色版本是需要手动安装.Net Framework 4.0和Microsoft Visual C++ 2010 Redistributable Package两个组件包的。</p>
<p>运行程序,点击进入「快速部署」,左边填写google的账号密码,右边先删除原有的两个服务端在填入自己的google appid,点击「开始部署」。「命令行」停止之后,关闭部署窗口,回到主窗口,点击进入「高级设定」,三个选项全选。然后控制台开启代理完成。</p>
<hr>
<h3 id="安装Proxy_Switchy_Sharp插件">安装Proxy Switchy Sharp插件</h3><p>在chrome浏览器打开安装即可, 或者在chrome网上应用店搜索下载安装,然后配置如下</p>
<p><img src="/images/SwitchySharpOption.JPG" alt="Proxy Switchy Sharp"></p>
<p>现在就可以正常自由的浏览那些被和谐掉的东西了,效果如下:</p>
<p><img src="/images/youtube.jpg" alt="youtube"></p>
<h3 id="部署可能会遇上的问题">部署可能会遇上的问题</h3><p>1.命令行如果返回如下,原因是hosts文件被修改或没有权限。<br>解决办法:<1>.将修改了的hosts文件复原 <2>.恢复hosts后用命令ipconfig/flushdns清空一下dns缓存</2></1></p>
<figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">'Error 403: --- begin server output ---</span><br><span class="line"><!DOCTYPE html></span><br><span class="line"><html lang=en></span><br><span class="line"> <meta charset=utf-8></span><br><span class="line"> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"></span><br><span class="line"> <title>Error 403 (Forbidden)!!1</title></span><br><span class="line"> <style></span><br><span class="line"> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}</span><br><span class="line"> </style></span><br><span class="line"> <a href=//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a></span><br><span class="line"> <p><b>403.</b> <ins>That鈥檚 an error.</ins></span><br><span class="line"> <p>Your client does not have permission to get URL <code>/api/appversion/rollback</code> from this server. <ins>That鈥檚 all we know.</ins></span><br><span class="line">--- end server output ---'</span><br></pre></td></tr></table></figure>
<p>2.命令行提示“AttributeError: can’’t set attribute”字样,这个错误跟google账号设置有关系,尝试后发现上传应用的时候是使用应用程序密码,而不是google密码,如果你的google账号启用 了“两步验证”。<br>解决办法:登录gmail邮箱后,打开两步验证的邮件,点开生成的应用程序密码: <em> jlapdre</em>,用生成的新密码输入后<并不是邮箱密码>,上传成功。</p>
<p>3.开启代理后浏览器提示,只需要修改proxy.ini文件,把google_cn改成google_hk,重新再启动一下就可以了</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">“Google</span><br><span class="line"><span class="number">403.</span> That’s an error.</span><br><span class="line">Your client does <span class="keyword">not</span> have permission to get URL /<span class="number">2</span> <span class="keyword">from</span> this server. That’s all we know.”</span><br></pre></td></tr></table></figure>
<p>参考资料:<a href="https://code.google.com/p/goagent/wiki/InstallGuide" target="_blank" rel="external">https://code.google.com/p/goagent/wiki/InstallGuide</a></p>
<p>— EOF —</p>
]]></content>
<summary type="html">
<![CDATA[<p>很多时候亲们在google上检索资源的时候,不可避免都会经常遇上类似“无法显示网页”的提示信息,对于GFW的封锁我已无力吐槽,还是乖乖寻个代理翻出去吧,于是发现了GoAgent,下面是过程:</p>]]>
</summary>
<category term="goagent" scheme="http://qxly.info/tags/goagent/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[Centos 6.4安装Nodejs和npm]]></title>
<link href="http://qxly.info/2014/01/19/Centos-6-4%E5%AE%89%E8%A3%85Nodejs%E5%92%8Cnpm/"/>
<id>http://qxly.info/2014/01/19/Centos-6-4安装Nodejs和npm/</id>
<published>2014-01-19T04:13:35.000Z</published>
<updated>2015-06-30T16:18:47.000Z</updated>
<content type="html"><![CDATA[<h3 id="安装python">安装python</h3><p>由于nodejs的最新版本都要求python版本必须在2.7以上,所以要先升级python,我们查看一下机器现有的python版本。<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# python -v</span></span><br></pre></td></tr></table></figure></p>
<a id="more"></a>
<p>我的环境默认是python 2.6.6版本。乖乖升级吧。可以使用下面的命令直接下载解压,也可在浏览器中打开<a href="http://python.org/ftp/python/" target="_blank" rel="external">http://python.org/ftp/python/</a> 选择自己需要的版本下载然后解压,我安装的是Python-2.7.6rc1版本。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2</span></span><br><span class="line">[root<span class="decorator">@localhost ~]# tar xjf Python-2.7.3.tar.bz2</span></span><br></pre></td></tr></table></figure>
<p>开始安装python</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost 下载]# cd Python-2.7.6rc1</span></span><br><span class="line">[root<span class="decorator">@localhost Python-2.7.6rc1]# ./configure</span></span><br><span class="line">[root<span class="decorator">@localhost Python-2.7.6rc1]# make all</span></span><br><span class="line">[root<span class="decorator">@localhost Python-2.7.6rc1]# sudo make install</span></span><br><span class="line">[root<span class="decorator">@localhost Python-2.7.6rc1]# make clean</span></span><br><span class="line">[root<span class="decorator">@localhost Python-2.7.6rc1]# make distclean</span></span><br></pre></td></tr></table></figure>
<p>依次执行完上述命令后,重启机器,然后再次查看python版本,显示安装成功。</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# python -v</span></span><br><span class="line">Python <span class="number">2.7</span>.6rc1 (default, Jan <span class="number">12</span> <span class="number">2014</span>, <span class="number">16</span>:<span class="number">31</span>:<span class="number">58</span>) </span><br><span class="line">[GCC <span class="number">4.4</span>.7 <span class="number">20120313</span> (Red Hat <span class="number">4.4</span>.7-<span class="number">4</span>)] on linux2</span><br><span class="line">Type <span class="string">"help"</span>, <span class="string">"copyright"</span>, <span class="string">"credits"</span> <span class="keyword">or</span> <span class="string">"license"</span> <span class="keyword">for</span> more information.</span><br></pre></td></tr></table></figure>
<h3 id="安装nodejs">安装nodejs</h3><p>安装必要的make以及gcc,gcc-c++编译器</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# yum -y install make gcc gcc-c++</span></span><br></pre></td></tr></table></figure>
<p>安装nodejs</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# wget http://nodejs.org/dist/v0.10.15/node-v0.10.15.tar.gz</span></span><br><span class="line">[root<span class="decorator">@localhost ~]# tar xzf node-v0.10.15.tar.gz</span></span><br><span class="line">[root<span class="decorator">@localhost 下载]# cd node-v0.10.15</span></span><br><span class="line">[root<span class="decorator">@localhost node-v0.10.15]# ./configure</span></span><br><span class="line">[root<span class="decorator">@localhost node-v0.10.15]# make && make install</span></span><br></pre></td></tr></table></figure>
<p>运行安装npm的脚本</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# curl https://npmjs.org/install.sh | sudo sh</span></span><br><span class="line">[root<span class="decorator">@localhost ~]# node -v</span></span><br><span class="line">v0.10.15</span><br><span class="line">[root<span class="decorator">@localhost ~]# npm -v</span></span><br><span class="line"><span class="number">1.3</span>.5</span><br></pre></td></tr></table></figure>
<p>—EOF—</p>
]]></content>
<summary type="html">
<![CDATA[<h3 id="安装python">安装python</h3><p>由于nodejs的最新版本都要求python版本必须在2.7以上,所以要先升级python,我们查看一下机器现有的python版本。<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# python -v</span></span><br></pre></td></tr></table></figure></p>]]>
</summary>
<category term="centos" scheme="http://qxly.info/tags/centos/"/>
<category term="nodejs" scheme="http://qxly.info/tags/nodejs/"/>
<category term="npm" scheme="http://qxly.info/tags/npm/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
<entry>
<title><![CDATA[把头抬起,把心放低]]></title>
<link href="http://qxly.info/2014/01/18/%E6%8A%8A%E5%A4%B4%E6%8A%AC%E8%B5%B7%EF%BC%8C%E6%8A%8A%E5%BF%83%E6%94%BE%E4%BD%8E/"/>
<id>http://qxly.info/2014/01/18/把头抬起,把心放低/</id>
<published>2014-01-18T04:12:06.000Z</published>
<updated>2015-06-28T14:59:40.000Z</updated>
<content type="html"><![CDATA[<p>人生在世,总有些空城旧事,年华未央;总有些季节,一季花凉,满地忧伤。</p>
<a id="more"></a>
<p> 给自己一份坚强,擦干眼泪;给自己一份自信,不卑不亢;给自己一份洒脱,悠然前行。轻轻品,静静藏。为了看阳光,我来到这世上;为了与阳光同行,我笑对忧伤。</p>
<p> 许多人,许多事,过去了,就让它成为风景。生活的阡陌中,不必让自己背负太多,淡淡听风,才会走的更轻松。岁月好似指间的沙子,在轻轻合拢时,沙漏划过皮肤,总会惊醒淡淡的疼。记住该记住的,忘记该忘记的,改变能改变的,接受不能接受的。生命的精彩在于:把握现在,微笑向暖。</p>
<p> 既然太阳也有黑点,那么,人生也免不了瑕疵,懂得努力锻造完美的人,便是智者。当生活一帆风顺时,喜笑颜开是易事,而身处逆境还能微笑的人,才是真正的乐观。这世界上有许多事,并没你想象的那么好,也没你想象的那么糟。</p>
<p> 学会瞭望,给自己一份坚定;学会回眸,拂去浮躁。风雨中,把头抬起;辉煌中,把心放低。</p>
<p> 没有失败,便体会不到成功;没有摔倒,便成就不了辉煌。做一朵倔强的花,开在生命的旅途,身心,亲吻大地;灵魂,仰望星空,无论风雨,蕴积盛开的力量。生命,是一段旅途,生活,便是其中的过程,翻山越岭,还是涉水乘舟,一切全凭自己。走在生活的阡陌中,不必让自己背负太多,淡淡听风,才会走的更轻松……</p>
<p> 一些得到,不一定会长久;一些失去,未必不会再拥有。重要的是:让心,在阳光下学会舞蹈;让灵魂,在痛苦中学会微笑。无论何时何地,苦难和眼泪都只是生命的一个插曲,彩虹总在风雨后。心中若有桃花源,何处不是水云间?</p>
<p> 有一种承担,叫提得起,放得下;有一种负担,叫提得起,放不下。向前走,走过不属于自己的风景,潇洒的,不是唯美而是心情;收获的,不是沧桑而是淡定。因为爱,我们选择离开;因为恨,我们选择遗忘;因为痛,我们选择隐藏;因为还有梦,我们选择坚强。因为幸福始终在前方,所以,心,永远在路上。</p>
<p><作者:雅德琳 ></p>
]]></content>
<summary type="html">
<![CDATA[<p>人生在世,总有些空城旧事,年华未央;总有些季节,一季花凉,满地忧伤。</p>]]>
</summary>
<category term="美文" scheme="http://qxly.info/tags/%E7%BE%8E%E6%96%87/"/>
<category term="About life" scheme="http://qxly.info/categories/About-life/"/>
</entry>
<entry>
<title><![CDATA[github的安装与简单使用]]></title>
<link href="http://qxly.info/2014/01/15/github%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E7%AE%80%E5%8D%95%E4%BD%BF%E7%94%A8/"/>
<id>http://qxly.info/2014/01/15/github的安装与简单使用/</id>
<published>2014-01-15T04:10:25.000Z</published>
<updated>2015-06-30T16:27:11.000Z</updated>
<content type="html"><![CDATA[<h4 id="客户端安装">客户端安装</h4><p>使用yum命令下载资源包,直接安装</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# yum install git git-gui</span></span><br></pre></td></tr></table></figure>
<a id="more"></a>
<h4 id="注册github">注册github</h4><p>浏览器中打开github.com根据提示注册</p>
<h5 id="生成公钥">生成公钥</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# ssh-key -t rsa -c "github注册邮箱地址"</span></span><br></pre></td></tr></table></figure>
<h5 id="导入公钥">导入公钥</h5><p>打开根目录的.ssh文件夹下id_rsa.pub文件,复制其中的key,然后在github右上角点击设置按钮,单击左侧菜单栏的ssh key项,点击add ssh key添加公钥,在弹出的dialog中,key栏粘贴上刚才复 制的key,title随意填写。</p>
<h5 id="帐号配置">帐号配置</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# git config --global user.name "用户名"</span></span><br><span class="line">[root<span class="decorator">@localhost ~]# git config --global user.email github注册邮箱地址</span></span><br></pre></td></tr></table></figure>
<h5 id="校验">校验</h5><p>配置好后进行校验, 如果返回You‘ve successfully authenticated,but Github does not provide shell access.提示,则表示校验通过</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# ssh -t [email protected]</span></span><br></pre></td></tr></table></figure>
<h4 id="创建github仓库">创建github仓库</h4><p>登录github进入管理页面,点击Repositories,然后New一个新的库如blog,打开创建的库,在右下角会有一个仓库地址的url,是作为本地项目提交的地址,复制其中的ssh clone url:[email protected]:用户名/blog.git。</p>
<h5 id="创建项目目录并初始化">创建项目目录并初始化</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# mkdir blog</span></span><br><span class="line">[root<span class="decorator">@localhost blog]# cd blog</span></span><br><span class="line">[root<span class="decorator">@localhost blog]# git init</span></span><br></pre></td></tr></table></figure>
<h5 id="提交此文件到本地">提交此文件到本地</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost blog]# git add .</span></span><br><span class="line">[root<span class="decorator">@localhost blog]# git commit -m "说明"</span></span><br></pre></td></tr></table></figure>
<h5 id="提交到github">提交到github</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost blog]# git remote add origin "ssh clone url"</span></span><br><span class="line">[root<span class="decorator">@localhost blog]# git push origin master</span></span><br></pre></td></tr></table></figure>
<h5 id="删除origin连接和更新文件到本地命令">删除origin连接和更新文件到本地命令</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost blog]# git remote rm origin</span></span><br><span class="line">[root<span class="decorator">@localhost blog]# git pull origin master</span></span><br></pre></td></tr></table></figure>
<p>—EOF—</p>
]]></content>
<summary type="html">
<![CDATA[<h4 id="客户端安装">客户端安装</h4><p>使用yum命令下载资源包,直接安装</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root<span class="decorator">@localhost ~]# yum install git git-gui</span></span><br></pre></td></tr></table></figure>]]>
</summary>
<category term="github" scheme="http://qxly.info/tags/github/"/>
<category term="学习笔记" scheme="http://qxly.info/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
</entry>
</feed>