-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlinux-note.html
More file actions
1952 lines (1549 loc) · 56.8 KB
/
linux-note.html
File metadata and controls
1952 lines (1549 loc) · 56.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2023-05-11 四 20:30 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>linux命令杂记</title>
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" type="text/css" href="org-html-themes/src/bigblow_theme/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="org-html-themes/src/bigblow_theme/css/bigblow.css"/>
<link rel="stylesheet" type="text/css" href="org-html-themes/src/bigblow_theme/css/hideshow.css"/>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/jquery-ui-1.10.2.min.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/jquery.localscroll-min.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/jquery.scrollTo-1.4.3.1-min.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/jquery.zclip.min.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/bigblow.js"></script>
<script type="text/javascript" src="org-html-themes/src/bigblow_theme/js/hideshow.js"></script>
<script type="text/javascript" src="org-html-themes/src/lib/js/jquery.stickytableheaders.min.js"></script>
</head>
<body>
<div id="content" class="content">
<h1 class="title">linux命令杂记</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org3766660">1. fd (find)</a></li>
<li><a href="#orgb4bf943">2. shell</a>
<ul>
<li><a href="#org9a43d6b">2.1. 忽略错误继续执行</a></li>
<li><a href="#org2a0730a">2.2. 退出 exit n</a></li>
<li><a href="#org5ce42c2">2.3. 判断文件是否存在</a></li>
</ul>
</li>
<li><a href="#org6e72e86">3. git</a>
<ul>
<li><a href="#org06b67fa">3.1. 设置/取消代理</a></li>
<li><a href="#org0882232">3.2. clone 子模块</a></li>
<li><a href="#org71dae92">3.3. 指定需要克隆的branch</a></li>
</ul>
</li>
<li><a href="#org0d47efc">4. grep -i 忽略大小写</a></li>
<li><a href="#orgb6f1276">5. fc-list 显示已安装字体</a></li>
<li><a href="#org41720d1">6. docker</a></li>
<li><a href="#orga5047f5">7. tar fvx XXX</a></li>
<li><a href="#orgfede6a4">8. du -h 以可读形式显示文件大小</a>
<ul>
<li><a href="#orgd6203f7">8.1. 查看目录下的大文件</a></li>
</ul>
</li>
<li><a href="#org0cc1a86">9. test命令</a></li>
<li><a href="#org836492d">10. bash脚本的编写</a>
<ul>
<li><a href="#org976a87f">10.1. <code>set -e</code> 遇到错误就停止</a></li>
</ul>
</li>
<li><a href="#org774f89f">11. pstree 查看进程树</a></li>
<li><a href="#org562155e">12. strace 追踪程序的系统调用</a></li>
<li><a href="#orgcd31302">13. objdump -D 显示可执行文件/库文件的反汇编</a></li>
<li><a href="#orgab42851">14. ldd 显示链接信息</a></li>
<li><a href="#org5dec9e4">15. code2html 的使用</a></li>
<li><a href="#org5feaf7b">16. wget 保存整个网站</a></li>
<li><a href="#org1ed9d66">17. 配置apt软件源</a></li>
<li><a href="#org26c06e7">18. 在ArchLinux中安装deb</a>
<ul>
<li><a href="#org5f89a47">18.1. debtap</a></li>
<li><a href="#org6d3030d">18.2. dpkg</a></li>
</ul>
</li>
<li><a href="#orgb00c1f6">19. <code>Xterm</code> 配置文件</a></li>
<li><a href="#org10cf1d4">20. ssh</a>
<ul>
<li><a href="#org250ee66">20.1. 重启ssh服务</a></li>
<li><a href="#org448d5de">20.2. 查看ssh服务是否启动</a></li>
</ul>
</li>
<li><a href="#orgde6aa5a">21. 递归改变文件owner</a></li>
<li><a href="#org6874d1e">22. 汇编文件(.s)的结构</a></li>
<li><a href="#orgbac7cc4">23. makefile</a>
<ul>
<li><a href="#org135ccae">23.1. 定义变量</a></li>
<li><a href="#orga60ea87">23.2. 伪目标 .PHONY</a></li>
<li><a href="#org92d112d">23.3. 为整个项目添加宏定义</a></li>
<li><a href="#orgabd670f">23.4. 为目标链接上库</a></li>
<li><a href="#org641d9ca">23.5. 通配符</a></li>
<li><a href="#org564dca4">23.6. 函数调用</a>
<ul>
<li><a href="#orgd48dc2c">23.6.1. 当前目录下某一类型的所有文件形成的列表</a></li>
<li><a href="#orgd539509">23.6.2. 将列表中的所有匹配项替换为指定形式</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org73834d2">24. GDB</a>
<ul>
<li><a href="#org75a7a21">24.1. 为可执行文件设置环境变量</a></li>
<li><a href="#org3ca96c9">24.2. 为可执行程序传参</a></li>
<li><a href="#orgab5d8cb">24.3. 显示某文件源代码</a></li>
<li><a href="#org01cc234">24.4. 添加断点</a></li>
<li><a href="#org1f5b8a2">24.5. 查看断点</a></li>
<li><a href="#org43a5966">24.6. 禁用断点</a></li>
<li><a href="#orgda59d2e">24.7. 重新启用断点</a></li>
<li><a href="#orga2c7a8d">24.8. 删除断点</a></li>
<li><a href="#org3c7a344">24.9. 保存断点到文件</a></li>
<li><a href="#org6a09d2a">24.10. 单步跳过 next</a></li>
<li><a href="#orgebfa63a">24.11. 继续执行, 直至遇到断点</a></li>
<li><a href="#orgfa7780c">24.12. 运行到某处,忽略期间的断点</a></li>
<li><a href="#orgab7ec9c">24.13. 进入到函数内部</a></li>
<li><a href="#org386d8b5">24.14. 从函数中跳出并暂停</a></li>
<li><a href="#orgde7f3c0">24.15. 强制从函数中返回特定值</a></li>
<li><a href="#org992d939">24.16. 跳转到指定位置继续执行</a></li>
<li><a href="#orgdc966cc">24.17. 显示当前所有的局部变量</a></li>
<li><a href="#org2bf9a09">24.18. 变量/表达式相关</a>
<ul>
<li><a href="#orgaac24c6">24.18.1. 打印变量/表达式</a></li>
<li><a href="#orgca13cf7">24.18.2. 自动显示变量值</a></li>
<li><a href="#org9206474">24.18.3. 取消对变量的自动显示</a></li>
<li><a href="#org5fd3c66">24.18.4. 显示变量/表达式类型</a></li>
<li><a href="#org124b2c1">24.18.5. 修改变量的值</a></li>
<li><a href="#orgdbe4131">24.18.6. 监视某变量的值</a></li>
</ul>
</li>
<li><a href="#org2a4793c">24.19. 栈相关</a>
<ul>
<li><a href="#org9668619">24.19.1. 显示堆栈信息: bt</a></li>
<li><a href="#org28f9c96">24.19.2. 切换栈帧</a></li>
</ul>
</li>
<li><a href="#org1692ab0">24.20. 调试已经运行的程序</a></li>
<li><a href="#org412df64">24.21. 检查点</a>
<ul>
<li><a href="#orge503029">24.21.1. 在当前位置添加checkpoint</a></li>
<li><a href="#org34e985e">24.21.2. 查看所有checkpoints</a></li>
<li><a href="#orge0c02b0">24.21.3. 删除指定checkpoint</a></li>
</ul>
</li>
<li><a href="#org1565b8c">24.22. 线程</a>
<ul>
<li><a href="#orgc2bbfbb">24.22.1. 显示所有线程</a></li>
<li><a href="#org63623b1">24.22.2. 切换到指定线程</a></li>
</ul>
</li>
<li><a href="#orgd887d01">24.23. 以指定格式显示某地址处的内容</a></li>
<li><a href="#org40faf3e">24.24. 反向运行</a></li>
</ul>
</li>
<li><a href="#org0e48f95">25. valgrind</a>
<ul>
<li><a href="#org0f47e0e">25.1. 无法使用, 报错</a></li>
</ul>
</li>
<li><a href="#org441336a">26. CMake</a></li>
<li><a href="#orgef9a14f">27. clangd 配置</a>
<ul>
<li><a href="#orgc9e1410">27.1. 配置纯C项目</a></li>
<li><a href="#org1d3fe76">27.2. 配置C++项目</a></li>
</ul>
</li>
<li><a href="#org6cd262a">28. cgroup v2</a>
<ul>
<li><a href="#org77d20c2">28.1. 组成</a></li>
<li><a href="#org469b329">28.2. 功能</a></li>
<li><a href="#org294aeac">28.3. 接口</a></li>
<li><a href="#org31eaef4">28.4. eg: pids控制器</a></li>
<li><a href="#orge5f34e4">28.5. 删除cgroup</a></li>
<li><a href="#orgf7f8d2b">28.6. 控制器概览</a>
<ul>
<li><a href="#org0fb2c19">28.6.1. cpu</a></li>
<li><a href="#orgfda2e86">28.6.2. cpuset: 控制cpu和内存亲和度</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div id="outline-container-org3766660" class="outline-2">
<h2 id="org3766660"><span class="section-number-2">1.</span> fd (find)</h2>
<div class="outline-text-2" id="text-1">
<p>
在当前目录下的所有文件中寻找某字符串:
</p>
<div class="org-src-container">
<pre class="src src-sh">fd . --type f <span style="color: #5B6268;"># </span><span style="color: #5B6268;">文件类型 f, d ..</span>
--exec grep --color=always -nH -e rust <span style="color: #98be65;">\{\}</span> <span style="color: #5B6268;"># </span><span style="color: #5B6268;">-exec 对每个查找出来的文件路径执行命令</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">其中{}代表路径, \{\} 是为了防止歧义</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-sh">find -type f -exec grep --color=always -nH -e hello <span style="color: #98be65;">\{\}</span> + <span style="color: #5B6268;"># </span><span style="color: #5B6268;">对于find 的-exec子命令, {}后面需要接上加号+ !!</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-sh">grep --color=always -nH -i -e hello <FILE>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">-n 行号</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">-H 文件名</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">-e 正则表达式</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">-i 忽略大小写</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">--color=always 给查询结果上色</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">--null 在文件名后面加上尾零.</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb4bf943" class="outline-2">
<h2 id="orgb4bf943"><span class="section-number-2">2.</span> shell</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-org9a43d6b" class="outline-3">
<h3 id="org9a43d6b"><span class="section-number-3">2.1.</span> 忽略错误继续执行</h3>
<div class="outline-text-3" id="text-2-1">
<div class="org-src-container">
<pre class="src src-bash"><span style="color: #c678dd;">set</span> +e
</pre>
</div>
<p>
恢复默认:
</p>
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #c678dd;">set</span> -e
</pre>
</div>
</div>
</div>
<div id="outline-container-org2a0730a" class="outline-3">
<h3 id="org2a0730a"><span class="section-number-3">2.2.</span> 退出 exit n</h3>
</div>
<div id="outline-container-org5ce42c2" class="outline-3">
<h3 id="org5ce42c2"><span class="section-number-3">2.3.</span> 判断文件是否存在</h3>
<div class="outline-text-3" id="text-2-3">
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #51afef;">if</span> [ -f $<span style="color: #dcaeea;">1</span> ]
<span style="color: #51afef;">then</span>
<span style="color: #51afef;">else</span>
<span style="color: #51afef;">fi</span>
</pre>
</div>
<p>
n* git
</p>
</div>
</div>
</div>
<div id="outline-container-org6e72e86" class="outline-2">
<h2 id="org6e72e86"><span class="section-number-2">3.</span> git</h2>
<div class="outline-text-2" id="text-3">
</div>
<div id="outline-container-org06b67fa" class="outline-3">
<h3 id="org06b67fa"><span class="section-number-3">3.1.</span> 设置/取消代理</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-bash"><span style="color: #5B6268;"># </span><span style="color: #5B6268;">设置ss</span>
git config --global http.proxy <span style="color: #98be65;">'socks5://127.0.0.1:1080'</span>
git config --global https.proxy <span style="color: #98be65;">'socks5://127.0.0.1:1080'</span>
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">设置代理</span>
git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">取消代理</span>
git config --global --unset http.proxy
git config --global --unset https.proxy
</pre>
</div>
</div>
</div>
<div id="outline-container-org0882232" class="outline-3">
<h3 id="org0882232"><span class="section-number-3">3.2.</span> clone 子模块</h3>
<div class="outline-text-3" id="text-3-2">
<pre class="example">
git submodule update --init --recursive
</pre>
<p>
此命令经常无速度, 可能需要手动clone, 见 <code>.gitmodules</code>
</p>
</div>
</div>
<div id="outline-container-org71dae92" class="outline-3">
<h3 id="org71dae92"><span class="section-number-3">3.3.</span> 指定需要克隆的branch</h3>
<div class="outline-text-3" id="text-3-3">
<pre class="example">
git clone -b fsf-gdb-10.1-with-sim<分支> https://github.com/riscv-collab/riscv-binutils-gdb.git riscv-gdb<别名>
</pre>
</div>
</div>
</div>
<div id="outline-container-org0d47efc" class="outline-2">
<h2 id="org0d47efc"><span class="section-number-2">4.</span> grep -i 忽略大小写</h2>
</div>
<div id="outline-container-orgb6f1276" class="outline-2">
<h2 id="orgb6f1276"><span class="section-number-2">5.</span> fc-list 显示已安装字体</h2>
</div>
<div id="outline-container-org41720d1" class="outline-2">
<h2 id="org41720d1"><span class="section-number-2">6.</span> docker</h2>
<div class="outline-text-2" id="text-6">
<p>
恢复容器的运行 :
</p>
<div class="org-src-container">
<pre class="src src-bash">sudo docker start <span style="color: #51afef; font-weight: bold;">`sudo docker ps -a -q`</span>
sudo docker attach <span style="color: #51afef; font-weight: bold;">`sudo docker ps -aq`</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orga5047f5" class="outline-2">
<h2 id="orga5047f5"><span class="section-number-2">7.</span> tar fvx XXX</h2>
</div>
<div id="outline-container-orgfede6a4" class="outline-2">
<h2 id="orgfede6a4"><span class="section-number-2">8.</span> du -h 以可读形式显示文件大小</h2>
<div class="outline-text-2" id="text-8">
<div class="org-src-container">
<pre class="src src-sh">$ du -h linux-note.org
12K linux-note.org
</pre>
</div>
</div>
<div id="outline-container-orgd6203f7" class="outline-3">
<h3 id="orgd6203f7"><span class="section-number-3">8.1.</span> 查看目录下的大文件</h3>
<div class="outline-text-3" id="text-8-1">
<pre class="example">
du -sh .* * | grep G
</pre>
</div>
</div>
</div>
<div id="outline-container-org0cc1a86" class="outline-2">
<h2 id="org0cc1a86"><span class="section-number-2">9.</span> test命令</h2>
<div class="outline-text-2" id="text-9">
<div class="org-src-container">
<pre class="src src-sh">test <span style="color: #51afef; font-weight: bold;">`命令`</span> = <span style="color: #98be65;">'str'</span>
test <span style="color: #51afef; font-weight: bold;">`命令`</span> = <span style="color: #98be65;">'string'</span> -a <span style="color: #51afef; font-weight: bold;">`命令`</span> = <span style="color: #98be65;">'string'</span>
test <span style="color: #51afef; font-weight: bold;">`命令`</span> = <span style="color: #98be65;">"string"</span> -o <span style="color: #51afef; font-weight: bold;">`命令`</span> = <span style="color: #98be65;">'string'</span>
</pre>
</div>
<p>
E.g
</p>
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #5B6268;"># </span><span style="color: #5B6268;">判断当前平台是否是linux</span>
test <span style="color: #51afef; font-weight: bold;">`uname -s`</span> = <span style="color: #98be65;">'Linux'</span>
<span style="color: #c678dd;">echo</span> $<span style="color: #dcaeea;">?</span> <span style="color: #5B6268;"># </span><span style="color: #5B6268;">返回零表示无错误发生 </span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org836492d" class="outline-2">
<h2 id="org836492d"><span class="section-number-2">10.</span> bash脚本的编写</h2>
<div class="outline-text-2" id="text-10">
</div>
<div id="outline-container-org976a87f" class="outline-3">
<h3 id="org976a87f"><span class="section-number-3">10.1.</span> <code>set -e</code> 遇到错误就停止</h3>
<div class="outline-text-3" id="text-10-1">
<p>
bash脚本默认行为是忽略错误,继续运行.
在脚本开头设置set -e就会使得: 只要有命令返回值!=0整个脚本的运行就会终止
</p>
</div>
</div>
</div>
<div id="outline-container-org774f89f" class="outline-2">
<h2 id="org774f89f"><span class="section-number-2">11.</span> pstree 查看进程树</h2>
<div class="outline-text-2" id="text-11">
<p>
<code>pstree -ap | grep mysql/redis ...</code>
</p>
<p>
在emacs中的shell运行pstree.
</p>
<pre class="example">
sun@Salted-PC:saltedf.github.io [main] $ pstree -ap | grep emacs
| `-emacs,65 -nw .
| | |-grep,217 --color=auto emacs
| `-{emacs},66
</pre>
</div>
</div>
<div id="outline-container-org562155e" class="outline-2">
<h2 id="org562155e"><span class="section-number-2">12.</span> strace 追踪程序的系统调用</h2>
<div class="outline-text-2" id="text-12">
<p>
用于debug和理解程序的流程.
</p>
<div class="org-src-container">
<pre class="src src-bash">strace -f -s 65535 -i -t -T -p <pid> -o 输出文件
</pre>
</div>
<p>
有时候会输出大量信息, 根本无法分析, 若只是需要特定的系统调用,可以使用 <code>-e trace=</code> 进行过滤, 如:负责读取/接收这类的系统调用.
</p>
<p>
<code>-e trace=recvfrom,read,recv,recvmsg</code>
</p>
<pre class="example">
strace -f -s 65535 -i -t -T -e trace=write,sendto,send -p <PID>
</pre>
<p>
统计各个系统调用总耗时:
</p>
<div class="org-src-container">
<pre class="src src-bash">strace -c <程序>
strace -c -p <PID>
</pre>
</div>
<p>
结果显示了各个系统调用所花费总时间以及所占百分比, 调用次数, 以及出错次数. 出错越多一般代码质量越差.
</p>
<div class="org-src-container">
<pre class="src src-bash">
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
49.27 0.009506 7 1281 clock_gettime
18.75 0.003617 9 390 rt_sigprocmask
9.05 0.001747 9 175 ioctl
8.12 0.001567 17 92 write
5.40 0.001042 23 45 pselect6
2.48 0.000478 28 17 fcntl
2.38 0.000459 13 35 rt_sigreturn
1.37 0.000265 6 38 read
1.37 0.000264 7 35 timerfd_settime
1.29 0.000249 27 9 poll
0.37 0.000071 35 2 kill
0.16 0.000030 15 2 getpid
0.00 0.000000 0 2 close
0.00 0.000000 0 2 openat
------ ----------- ----------- --------- --------- ----------------
100.00 0.019295 2125 total
</pre>
</div>
<p>
代码分析组合拳: strace看关键调用. ==> 用calltree找出关键系统调用的调用关系. ==>用IDE细看这条调用链
</p>
</div>
</div>
<div id="outline-container-orgcd31302" class="outline-2">
<h2 id="orgcd31302"><span class="section-number-2">13.</span> objdump -D 显示可执行文件/库文件的反汇编</h2>
<div class="outline-text-2" id="text-13">
<div class="org-src-container">
<pre class="src src-bash">objdump -D XXX | less
</pre>
</div>
<p>
不加less会显示太多!
</p>
</div>
</div>
<div id="outline-container-orgab42851" class="outline-2">
<h2 id="orgab42851"><span class="section-number-2">14.</span> ldd 显示链接信息</h2>
<div class="outline-text-2" id="text-14">
<div class="org-src-container">
<pre class="src src-sh">$ ldd ./build/udpclient
linux-vdso.so.1 (0x00007ffcb2d85000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4c64e2a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4c64e0f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4c64c1d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4c64ace000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4c65024000)
</pre>
</div>
</div>
</div>
<div id="outline-container-org5dec9e4" class="outline-2">
<h2 id="org5dec9e4"><span class="section-number-2">15.</span> <a href="https://github.com/agentzh/code2ebook/">code2html</a> 的使用</h2>
<div class="outline-text-2" id="text-15">
<p>
先进入项目根目录:
</p>
<ol class="org-ol">
<li>代码转html</li>
</ol>
<div class="org-src-container">
<pre class="src src-sh">src2html.pl --tab-width 4 --color --cross-reference <span style="color: #98be65;">\</span>
--navigator --line-numbers . <项目名>
</pre>
</div>
<ol class="org-ol">
<li>html合成pdf</li>
</ol>
<div class="org-src-container">
<pre class="src src-sh">ebook-convert html_out/index.html llvm_release_1.pdf <span style="color: #98be65;">\</span>
--use-profile-size <span style="color: #98be65;">\</span>
--paper-size a3 <span style="color: #98be65;">\</span>
--pdf-default-font-size 13 <span style="color: #98be65;">\</span>
--pdf-mono-font-size 13 <span style="color: #98be65;">\</span>
--margin-left 5 --margin-right 5 <span style="color: #98be65;">\</span>
--margin-top 5 --margin-bottom 5 <span style="color: #98be65;">\</span>
--page-breaks-before=<span style="color: #98be65;">'/'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org5feaf7b" class="outline-2">
<h2 id="org5feaf7b"><span class="section-number-2">16.</span> wget 保存整个网站</h2>
<div class="outline-text-2" id="text-16">
<p>
<a href="https://github.com/lujun9972/linux-document/blob/master/examples/10%20wget%20command%20examples.org">https://github.com/lujun9972/linux-document/blob/master/examples/10%20wget%20command%20examples.org</a>
</p>
<pre class="example">
wget --mirror --convert-links --page-requisites --no-parent -P /path/to/download https://example-domain.com
</pre>
<p>
但这样可能会下载不全,原因可能有很多。这里遇到的问题是默认是不跨域名下载的。
</p>
<p>
需要运行第二次,并附加上多个选项
</p>
<pre class="example">
wget --mirror --convert-links -r -D "www.seas.upenn.edu,www.cis.upenn.edu" -A.pdf -A.zip -A.shtml --tries=1 --timeout=8 --span-hosts -l 5 --page-requisites --no-parent -P ./ https://www.seas.upenn.edu/\~cis341/17sp/
</pre>
<ul class="org-ul">
<li>-A 指定那些没有被下载的文件类型 (需要观察网站特征获知)</li>
<li>–span-hosts 跨主机名下载。</li>
<li>-D 指定域名/主机名 list,否则将遍历大量无用的域名(需要观察网站特征获知)</li>
<li>–tries=1 重试一次,因为有些域名无法访问,也不含要下载的文件。</li>
<li>–timeout=10 设定超时时间,防止等待太长时间。</li>
</ul>
</div>
</div>
<div id="outline-container-org1ed9d66" class="outline-2">
<h2 id="org1ed9d66"><span class="section-number-2">17.</span> 配置apt软件源</h2>
<div class="outline-text-2" id="text-17">
<div class="org-src-container">
<pre class="src src-bash">sudo vim /etc/apt/source.list
sudo apt-get update
</pre>
</div>
</div>
</div>
<div id="outline-container-org26c06e7" class="outline-2">
<h2 id="org26c06e7"><span class="section-number-2">18.</span> 在ArchLinux中安装deb</h2>
<div class="outline-text-2" id="text-18">
</div>
<div id="outline-container-org5f89a47" class="outline-3">
<h3 id="org5f89a47"><span class="section-number-3">18.1.</span> debtap</h3>
</div>
<div id="outline-container-org6d3030d" class="outline-3">
<h3 id="org6d3030d"><span class="section-number-3">18.2.</span> dpkg</h3>
<div class="outline-text-3" id="text-18-2">
<div class="org-src-container">
<pre class="src src-sh">yay -Sy dpkg
dpkg -i xxx.deb
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb00c1f6" class="outline-2">
<h2 id="orgb00c1f6"><span class="section-number-2">19.</span> <code>Xterm</code> 配置文件</h2>
<div class="outline-text-2" id="text-19">
<div class="org-src-container">
<pre class="src src-sh">cat ~/.Xresources
</pre>
</div>
<p>
修改后使配置生效:
</p>
<div class="org-src-container">
<pre class="src src-sh">xrdb ~/.Xresources
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">or: </span>
xrdb -merge ~/.Xresources
</pre>
</div>
<p>
最后重启xterm.
</p>
<div class="org-src-container">
<pre class="src src-xml">
! font and locale
xterm.locale: true
xterm.utf8: true
xterm*utf8Title: true
xterm*fontMenu*fontdefault*Label: Default
! 斜体在最后添加`:italic`
xterm*faceName: Sarasa Mono SC:antialias=true:style=Book
xterm*faceSize: 15
xterm*faceNameDoublesize: Sarasa Mono SC ! Noto Sans CJK SC
xterm*renderFont: true
xterm*xftAntialias: true
xterm*cjk_width: true
! 窗口设置
! 窗口大小及位置
xterm*geometry: 80x25
xterm*dynamicColors: true
xterm*saveLines: 2048
xterm*scrollKey: true
xterm*scrollTtyOutput: false
xterm*scrollBar: true
xterm*rightScrollBar: true
xterm*jumpScroll: true
xterm*multiScroll: true
xterm*toolBar: false
xterm*Scrollbar*thickness: 10
xterm*Scrollbar*background: black
xterm*Scrollbar*foreground: gray90
xterm*background: rgb:1a/1a/1a
xterm*foreground: rgb:d6/d6/d6
xterm*cursorColor: rgb:d6/d6/d6
! 提供xterm-256color类型支持
! 如果修改后,没有得到正确的结果,说明你可能需要安装ncurses-term包来提供xterm-256color类型支持
xterm*termName: xterm-256color
! 启用 Sixel 图形支持
xterm*decTerminalID: vt340
! 配置选择文本自动复制到剪贴板
! https://askubuntu.com/questions/237942/how-does-copy-paste-work-with-xterm
xterm*selectToClipboard: true
! 启用“Ctrl+v”来复制
xterm*VT100.Translations: #override \
<<span style="color: #c678dd;">Btn1Up</span>>: select-end(CLIPBOARD,PRIMARY,CUT_BUFFER0) \n\
Ctrl <<span style="color: #c678dd;">KeyPress</span>> V: insert-selection(CLIPBOARD,PRIMARY,CUT_BUFFER0)
! 解决Alt键不好使
xterm*eightBitInput: false
xterm*altSendsEscape: true
! 配置主题
! -- Tango color scheme
xterm*color0: #2e3436
xterm*color1: #cc0000
xterm*color2: #4e9a06
xterm*color3: #c4a000
xterm*color4: #3465a4
xterm*color5: #75507b
xterm*color6: #0b939b
xterm*color7: #d3d7cf
xterm*color8: #555753
xterm*color9: #ef2929
xterm*color10: #8ae234
xterm*color11: #fce94f
xterm*color12: #729fcf
xterm*color13: #ad7fa8
xterm*color14: #00f5e9
xterm*color15: #eeeeec
</pre>
</div>
</div>
</div>
<div id="outline-container-org10cf1d4" class="outline-2">
<h2 id="org10cf1d4"><span class="section-number-2">20.</span> ssh</h2>
<div class="outline-text-2" id="text-20">
</div>
<div id="outline-container-org250ee66" class="outline-3">
<h3 id="org250ee66"><span class="section-number-3">20.1.</span> 重启ssh服务</h3>
<div class="outline-text-3" id="text-20-1">
<div class="org-src-container">
<pre class="src src-bash">sudo service ssh restart
</pre>
</div>
</div>
</div>
<div id="outline-container-org448d5de" class="outline-3">
<h3 id="org448d5de"><span class="section-number-3">20.2.</span> 查看ssh服务是否启动</h3>
<div class="outline-text-3" id="text-20-2">
<div class="org-src-container">
<pre class="src src-bash">sudo lsof -i :22
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgde6aa5a" class="outline-2">
<h2 id="orgde6aa5a"><span class="section-number-2">21.</span> 递归改变文件owner</h2>
<div class="outline-text-2" id="text-21">
<div class="org-src-container">
<pre class="src src-bash">chown -R sun:sun ./dir
</pre>
</div>
</div>
</div>
<div id="outline-container-org6874d1e" class="outline-2">
<h2 id="org6874d1e"><span class="section-number-2">22.</span> 汇编文件(.s)的结构</h2>
<div class="outline-text-2" id="text-22">
<pre class="example">
.text: 代码段
.data: 常量 字符串 初始化的全局变量
.bss: 不占用实际空间, 仅仅标记那些局部变量和未初始化的全局变量.
</pre>
<p>
因为已知初值的且生命周期长的变量才有提前为它们分配空间的必要,因此data段才占用空间. bss段中记录的是局部变量/未初始化的全局变量, 没必要一开始就为这些量准备好空间, 只要在程序实际运行时为其准备空间即可.
</p>
</div>
</div>
<div id="outline-container-orgbac7cc4" class="outline-2">
<h2 id="orgbac7cc4"><span class="section-number-2">23.</span> makefile</h2>
<div class="outline-text-2" id="text-23">
</div>
<div id="outline-container-org135ccae" class="outline-3">
<h3 id="org135ccae"><span class="section-number-3">23.1.</span> 定义变量</h3>
<div class="outline-text-3" id="text-23-1">
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #dcaeea;">CC</span> := gcc <span style="color: #5B6268;"># </span><span style="color: #5B6268;">定义常量, 后续不能用+=</span>
<span style="color: #dcaeea;">OBJS</span> = hello.o world.o <span style="color: #5B6268;"># </span><span style="color: #5B6268;">定义变量, 后续可以用+=增加</span>
<span style="color: #dcaeea;">ObJS</span> += fuck.o
</pre>
</div>
</div>
</div>
<div id="outline-container-orga60ea87" class="outline-3">
<h3 id="orga60ea87"><span class="section-number-3">23.2.</span> 伪目标 .PHONY</h3>
<div class="outline-text-3" id="text-23-2">
<p>
通常是指那些不生成文件的. 只负责执行某些命令的.
</p>
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #51afef;">.PHONY</span>: clean <span style="color: #5B6268;"># </span><span style="color: #5B6268;">这个之后的target都是伪目标</span>
<span style="color: #51afef;">clean</span>:
<span style="color: #ECBE7B;">-</span>${<span style="color: #dcaeea;">RM</span>} *.o ${<span style="color: #dcaeea;">target</span>}
echo <span style="color: #98be65;">"finish"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org92d112d" class="outline-3">
<h3 id="org92d112d"><span class="section-number-3">23.3.</span> 为整个项目添加宏定义</h3>
<div class="outline-text-3" id="text-23-3">
<div class="org-src-container">
<pre class="src src-makefile">
<span style="color: #dcaeea;">DEFS</span> = -D_DEBUG -D_POSIX_SOURCE
<span style="color: #dcaeea;">FLAGS</span> = -g ${<span style="color: #dcaeea;">DEFS</span>}
</pre>
</div>
</div>
</div>
<div id="outline-container-orgabd670f" class="outline-3">
<h3 id="orgabd670f"><span class="section-number-3">23.4.</span> 为目标链接上库</h3>
<div class="outline-text-3" id="text-23-4">
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #dcaeea;">LIBS</span> = -lpthread -lqt
</pre>
</div>
</div>
</div>
<div id="outline-container-org641d9ca" class="outline-3">
<h3 id="org641d9ca"><span class="section-number-3">23.5.</span> 通配符</h3>
<div class="outline-text-3" id="text-23-5">
<div class="org-src-container">
<pre class="src src-bash">* 所有
% :任意一个文件
? :
</pre>
</div>
<div class="org-src-container">
<pre class="src src-bash">$<span style="color: #dcaeea;">@</span> 目标
$^ 全部的依赖文件
$< 首个依赖项
</pre>
</div>
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #51afef;">${</span><span style="color: #51afef;">target</span><span style="color: #51afef;">}</span> : ${<span style="color: #dcaeea;">OBJS</span>}
${<span style="color: #dcaeea;">CC</span>} ${<span style="color: #dcaeea;">FLAGS</span>} -o <span style="color: #51afef;">$</span><span style="color: #a9a1e1;">@</span> $<span style="color: #a9a1e1;">^</span> ${<span style="color: #dcaeea;">LIBS</span>}
<span style="color: #51afef;">%.o</span> : %.c
${<span style="color: #dcaeea;">CC</span>} -o <span style="color: #51afef;">$</span><span style="color: #a9a1e1;">@</span> $<span style="color: #a9a1e1;">^</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org564dca4" class="outline-3">
<h3 id="org564dca4"><span class="section-number-3">23.6.</span> 函数调用</h3>
<div class="outline-text-3" id="text-23-6">
<div class="org-src-container">
<pre class="src src-makefile">$(<span style="color: #dcaeea;">my_func</span> arg1,arg2,arg3)
</pre>
</div>
</div>
<div id="outline-container-orgd48dc2c" class="outline-4">
<h4 id="orgd48dc2c"><span class="section-number-4">23.6.1.</span> 当前目录下某一类型的所有文件形成的列表</h4>
<div class="outline-text-4" id="text-23-6-1">
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #dcaeea;">SRC</span> = $(<span style="color: #dcaeea;">wildcard</span> *.c) ==> hello.c world.c fuck.c
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd539509" class="outline-4">
<h4 id="orgd539509"><span class="section-number-4">23.6.2.</span> 将列表中的所有匹配项替换为指定形式</h4>
<div class="outline-text-4" id="text-23-6-2">
<div class="org-src-container">
<pre class="src src-makefile"><span style="color: #dcaeea;">OBJS</span> = $(<span style="color: #dcaeea;">patsubset</span> %.c,%.o,${<span style="color: #dcaeea;">SRC</span>} )
<span style="color: #5B6268;"># </span><span style="color: #5B6268;">将 SRC = hello.c fuck.c 替换成 hello.o fuck.o </span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-org73834d2" class="outline-2">
<h2 id="org73834d2"><span class="section-number-2">24.</span> GDB</h2>
<div class="outline-text-2" id="text-24">
<p>
gef/cgdb/emacs gdb-many-windows
</p>
</div>
<div id="outline-container-org75a7a21" class="outline-3">
<h3 id="org75a7a21"><span class="section-number-3">24.1.</span> 为可执行文件设置环境变量</h3>
<div class="outline-text-3" id="text-24-1">
<p>
set environment FOO = XX
unset environment FOO
</p>
</div>