Kaynağa Gözat

学习linux脚本

master
qdjjx 3 yıl önce
ebeveyn
işleme
8ac0a4326f

+ 69
- 1
产品/智能照明版/智能照明2.0.0模块化.md Dosyayı Görüntüle

@@ -1,5 +1,73 @@
1
+# 设想
2
+
1 3
 - 模块自描述:包括模块程序集名称、显示名称、版本
2 4
 - 模块可配置:通过总部运营后台配置
3 5
 - 自洽的:包括领域层、设施层、应用程序层、接口层
4 6
 - 具备基础支撑:基础领域层、基础设施层、基础类库层
5
-- 模块间可通讯:通过事件订阅
7
+- 模块间可通讯:通过事件订阅
8
+
9
+# 模拟演示
10
+
11
+- 场景模块
12
+
13
+  ```
14
+  -- 获取所有场景
15
+  ```
16
+
17
+  
18
+
19
+- 可视化模块
20
+
21
+  ```
22
+  -- 获取所有开关
23
+  -- 把某个开关添加到场景模块的某张表
24
+  ```
25
+
26
+  # 架构依赖
27
+
28
+  ![架构依赖](F:\SourceCodes\DDWiki\产品\智能照明版\架构依赖.png)
29
+
30
+  
31
+
32
+# 模块化实践步骤
33
+
34
+
35
+
36
+- 开发:开发模块的`Domain`, `Infra`,`Application`,`API`层
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
+- 收益

BIN
产品/智能照明版/架构依赖.png Dosyayı Görüntüle


+ 81
- 0
运维/安装/2021.4.18使用Nginx部署网站.md Dosyayı Görüntüle

@@ -0,0 +1,81 @@
1
+```
2
+sudo apt-get update
3
+sudo apt-get install apt-transport-https
4
+sudo apt-get update
5
+cd tmp
6
+wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
7
+sudo dpkg -i packages-microsoft-prod.deb
8
+sudo apt-get update
9
+sudo apt install dotnet-sdk-3.1
10
+```
11
+
12
+
13
+
14
+```
15
+sudo apt update
16
+sudo apt install nginx
17
+sudo systemctl status nginx
18
+```
19
+
20
+
21
+
22
+```
23
+sudo apt update
24
+sudo apt install nano
25
+nano demo2.txt
26
+```
27
+
28
+
29
+
30
+```
31
+cd /
32
+cd etc/nginx/sites-available
33
+nano default
34
+
35
+server {
36
+    listen        80;
37
+    server_name   {api.your-domain-name.com};
38
+    root /home/ubuntu/apps/{your-folder-name};
39
+    location / {
40
+        proxy_pass         http://localhost:5000;
41
+        proxy_http_version 1.1;
42
+        proxy_set_header   Upgrade $http_upgrade;
43
+        proxy_set_header   Connection keep-alive;
44
+        proxy_set_header   Host $host;
45
+        proxy_cache_bypass $http_upgrade;
46
+        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
47
+        proxy_set_header   X-Forwarded-Proto $scheme;
48
+    }
49
+}
50
+
51
+sudo service nginx restart
52
+cd /etc/systemd/system
53
+nano demo.service
54
+
55
+[Unit]
56
+Description=This is a sample application for my tutorial
57
+[Service]
58
+WorkingDirectory=/home/ubuntu/apps/sample
59
+ExecStart=/usr/bin/dotnet /home/ubuntu/apps/sample/Harrys.Sample.ddl
60
+Restart=always
61
+# Restart service after 10 seconds if the dotnet service crashes:
62
+RestartSec=10
63
+KillSignal=SIGINT
64
+SyslogIdentifier=dotnet-example
65
+User=www-data
66
+Environment=ASPNETCORE_ENVIRONMENT=Production
67
+Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
68
+# If you need to run multiple services on different ports set
69
+# the ports environment variable here:
70
+# Environment=ASPNETCORE_URLS=http://localhost:6000
71
+[Install]
72
+WantedBy=multi-user.target
73
+
74
+
75
+sudo systemctl enable demo.service
76
+sudo systemctl status demo.service
77
+```
78
+
79
+
80
+
81
+> https://hbhhathorn.medium.com/install-an-asp-net-core-web-api-on-linux-ubuntu-18-04-and-host-with-nginx-and-ssl-2ed9df7371fb

+ 552
- 0
运维/安装/2021.4.20学习Linux脚本.md Dosyayı Görüntüle

@@ -0,0 +1,552 @@
1
+# 跑通第一个在`Ubuntu`上的`Shell Script`
2
+
3
+
4
+
5
+## 什么是Shell Script?
6
+
7
+通常以`.sh`结尾,该文件中包含了`UNIX`的命令。在`Ubuntu`中,默认的`Shell`是`Bash`。
8
+
9
+
10
+
11
+可以在文件的开头注明是否以`shell script`运行。
12
+
13
+```
14
+#!/bin/bash 头一行也被称为shebang, 用来告诉Ubuntu kernel使用哪个解释器,这里表示使用Bash
15
+
16
+#!/bin/sh 表示使用Dash解释器
17
+```
18
+
19
+
20
+
21
+什么是`Bash`?
22
+
23
+默认的命令行解释器。
24
+
25
+```
26
+查看Bash: echo $SHELL
27
+```
28
+
29
+
30
+
31
+
32
+
33
+什么是`Shell`?
34
+
35
+用来执行命令的宏处理器`macro processor`。当打`Linux`控制台,默认就包含`Shell`。输入一些简单的命令,`Shell`默认借助`Bash`解释器,解释并执行命令。
36
+
37
+```
38
+date
39
+cal
40
+pwd
41
+ls
42
+```
43
+
44
+
45
+
46
+什么是`Script`或`Scripting`?
47
+
48
+其实可以理解成批处理命令。用来执行多个命令。
49
+
50
+
51
+
52
+## 第一个批处理命令脚本
53
+
54
+```
55
+创建批处理文件:nano task.sh
56
+#!/bin/bash
57
+
58
+date
59
+cal
60
+pwd
61
+ls
62
+
63
+给予该文件权限:sudo chmod +x task.sh
64
+
65
+执行批处理:./task.sh
66
+```
67
+
68
+
69
+
70
+# 文件名和权限
71
+
72
+
73
+
74
+```
75
+查看文件类型:file task.sh
76
+复制脚本文件:cp task.sh 0_xyz
77
+查看复制文件:file 0_xyz
78
+查看复制文件内容:nano 0_xyz
79
+```
80
+
81
+
82
+
83
+# 脚本执行方式
84
+
85
+
86
+
87
+```
88
+创建脚本文件:echo date > date.sh
89
+
90
+打印脚本文件内容:cat date.sh
91
+
92
+尝试执行脚本文件:./date.sh(执行不成功)
93
+
94
+尝试另外一种执行脚本文件的方式:bash date.sh(执行成功)
95
+
96
+编辑脚本文件:nano date.sh
97
+#!/bin/bash
98
+date
99
+
100
+更改脚本文件的权限:chmod +x date.sh
101
+
102
+使用第一种方式执行脚本文件:./date.sh
103
+```
104
+
105
+
106
+
107
+
108
+
109
+# 相对位置和绝对位置
110
+
111
+
112
+
113
+```
114
+来到根目录:cd /
115
+
116
+查看根目录:pwd
117
+
118
+进入home目录:cd home
119
+
120
+返回上一级: cd ..
121
+
122
+查看根目录内容:ls
123
+目录结构为:
124
+	home/lenovo
125
+	etc
126
+	
127
+进入etc目录:cd etc
128
+
129
+从etc目录进入home/lenovo目录:cd ../home/lenovo
130
+
131
+返回上一个目录:cd -
132
+
133
+再返回上一个目录:cd -
134
+
135
+后退两级返回根目录:cd ../../
136
+
137
+返回linux开机默认目录:cd
138
+```
139
+
140
+
141
+
142
+
143
+
144
+# `Hello World`脚本
145
+
146
+```
147
+创建并打开文件:nano hello-world.sh
148
+
149
+#!/bin/bash
150
+echo "Hello World"
151
+
152
+赋予权限:chmod +x hello-world.sh
153
+
154
+执行脚本:bash hello-world.sh
155
+```
156
+
157
+
158
+
159
+# 查看帮助文件
160
+
161
+
162
+
163
+```
164
+man ls
165
+q 
166
+
167
+ls --help
168
+ls -l
169
+ls -l hello-world.sh
170
+```
171
+
172
+
173
+
174
+# 备份脚本
175
+
176
+```
177
+创建tmp目录:mkdir tmp
178
+
179
+把home/lenovo目录备份:tar -czf /tmp/myhome_directory.tar.gz /home/lenovo
180
+
181
+列出刚刚创建的备份文件:ls -l /tmp/myhome_directory.tar.gz
182
+
183
+删除备份文件:rm /tmp/myhome_directory.tar.gz
184
+
185
+使用which bash创建批处理文件:which bash > back.sh
186
+
187
+在back.sh文件中输入另外一行内容:echo 'tar -czf /tmp/myhome_directory.tar.gz /home/lenovo/' >> backup.sh
188
+
189
+打开并编辑:nano backup.sh
190
+
191
+赋予权限:chmod +x bakcup.sh
192
+
193
+运行:bash backup.sh
194
+```
195
+
196
+
197
+
198
+
199
+
200
+# 变量
201
+
202
+
203
+
204
+```
205
+创建脚本文件:nano welcome.sh
206
+#!/bin/bash
207
+
208
+greeting="Welcome"
209
+user=$(whoami)
210
+day=$(date +%A)
211
+
212
+echo "$greeting back $user! Today is $day, which is the best day of the entire week!"
213
+echo "Your Bash shell version is: $BASH_VERSION. Enjoy!"
214
+
215
+赋予权限:chmod +x welcome.sh
216
+
217
+执行:bash welcome.sh
218
+```
219
+
220
+
221
+
222
+备份文件使用变量:
223
+
224
+```
225
+#!/bin/bash
226
+
227
+# This bash script is used to backup a user's home directory to /tmp/.
228
+
229
+user=$(whoami)
230
+input=/home/$user
231
+output=/tmp/${user}_home_$(date +%Y-%m-%d_%H%M%S).tar.gz
232
+
233
+tar -czf $output $input
234
+echo "Backup of $input completed! Details about the output backup file:"
235
+ls -l $output
236
+
237
+运行:bash backup.sh
238
+```
239
+
240
+
241
+
242
+
243
+
244
+# 输入、输出、错误导向
245
+
246
+
247
+
248
+```
249
+标准错误输出stderr: ls -l foobar 
250
+创建文件:touch foobar
251
+标准输出stdout:ls -l foobar
252
+把信息输出到一个文件:ls barfoo > stdout.txt
253
+把错误信息输出到一个文件:ls barfoo 2> stdout.txt
254
+把信息和错误信息输出到一个文件:ls barfoo &> stdoutandstderr.txt
255
+控制台打印文件内容:cat stdout
256
+```
257
+
258
+
259
+
260
+使用错误导向忽略错误提示。/dev/null可以看作是一个保存错误信息的容器、
261
+
262
+```
263
+nano backup.sh
264
+
265
+#!/bin/bash
266
+
267
+# This bash script is used to backup a user's home directory to /tmp/.
268
+
269
+user=$(whoami)
270
+input=/home/$user
271
+output=/tmp/${user}_home_$(date +%Y-%m-%d_%H%M%S).tar.gz
272
+
273
+tar -czf $output $input 2> /dev/null
274
+echo "Backup of $input completed! Details about the output backup file:"
275
+ls -l $output
276
+
277
+执行脚本:bash backup.sh
278
+```
279
+
280
+
281
+
282
+输入文件,从一个文件中获取信息。
283
+
284
+```
285
+在控制台打开并编辑内容:cat > file1.txt
286
+按ctrl+d完成编辑
287
+从file1.txt中读取文件内容:cat < file1.txt
288
+```
289
+
290
+
291
+
292
+
293
+
294
+# 功能
295
+
296
+
297
+
298
+```
299
+创建脚本:nano function.sh
300
+
301
+#!/bin/bash
302
+
303
+function user_details {
304
+	echo "User Name: $(whoami)"
305
+	echo "Home Directory: $HOME"
306
+}
307
+
308
+user_details
309
+
310
+赋予权限:chmod +x function.sh
311
+执行脚本:bash function.sh
312
+```
313
+
314
+
315
+
316
+更改备份脚本
317
+
318
+```
319
+#!/bin/bash
320
+
321
+# This bash script is used to backup a user's home directory to /tmp/.
322
+
323
+user=$(whoami)
324
+input=/home/$user
325
+output=/tmp/${user}_home_$(date +%Y-%m-%d_%H%M%S).tar.gz
326
+
327
+# The function total_files reports a total number of files for a given directory. 
328
+function total_files {
329
+        find $1 -type f | wc -l
330
+}
331
+
332
+# The function total_directories reports a total number of directories
333
+# for a given directory. 
334
+function total_directories {
335
+        find $1 -type d | wc -l
336
+}
337
+
338
+tar -czf $output $input 2> /dev/null
339
+
340
+echo -n "Files to be included:"
341
+total_files $input
342
+echo -n "Directories to be included:"
343
+total_directories $input
344
+
345
+echo "Backup of $input completed!"
346
+
347
+echo "Details about the output backup file:"
348
+ls -l $output
349
+```
350
+
351
+
352
+
353
+
354
+
355
+# 数字和字符串比较
356
+
357
+
358
+
359
+| 描述     | 数字比较 | 字符串比较 |
360
+| -------- | -------- | ---------- |
361
+| 小于     | -lt      | <          |
362
+| 大于     | -gt      | >          |
363
+| 等于     | -eq      | =          |
364
+| 不等于   | -nq      | !=         |
365
+| 小于等于 | -le      | N/A        |
366
+| 大于等于 | -ge      | N/A        |
367
+
368
+比较数字
369
+
370
+```
371
+a=1
372
+b=2
373
+[ $a -lt $b ]
374
+echo $?
375
+```
376
+
377
+比较字符串
378
+
379
+```
380
+[ "apples" = "oranges" ]
381
+echo $?
382
+```
383
+
384
+
385
+
386
+放在脚本中比较
387
+
388
+```
389
+nano comparison.sh
390
+
391
+#!/bin/bash
392
+
393
+string_a="UNIX"
394
+string_b="GNU"
395
+
396
+echo "Are $string_a and $string_b strings equal?"
397
+[ $string_a = $string_b ]
398
+echo $?
399
+
400
+num_a=100
401
+num_b=100
402
+
403
+echo "Is $num_a equal to $num_b ?" 
404
+[ $num_a -eq $num_b ]
405
+echo $?
406
+
407
+赋予权限:chmod +x comparison.sh
408
+执行脚本:bash comparison.sh
409
+```
410
+
411
+
412
+
413
+# 条件语句
414
+
415
+`if/then/else`语句
416
+
417
+```
418
+创建脚本:nano if_else.sh
419
+#!/bin/bash
420
+
421
+num_a=100
422
+num_b=200
423
+
424
+if [ $num_a -lt $num_b ]; then
425
+    echo "$num_a is less than $num_b!"
426
+fi
427
+
428
+赋予权限:chmod +x if_else.sh
429
+执行脚本:bash if_else.sh
430
+
431
+更改脚本:
432
+
433
+#!/bin/bash
434
+
435
+num_a=400
436
+num_b=200
437
+
438
+if [ $num_a -lt $num_b ]; then
439
+    echo "$num_a is less than $num_b!"
440
+else
441
+    echo "$num_a is greater than $num_b!"
442
+fi
443
+
444
+执行脚本:bash less_than.sh
445
+```
446
+
447
+
448
+
449
+# 占位符参数
450
+
451
+
452
+
453
+```
454
+创建脚本文件:nano param.sh
455
+
456
+#!/bin/bash
457
+
458
+echo $1 $2 $4
459
+echo $#
460
+echo $*
461
+
462
+赋予权限:chmod +x param.sh
463
+执行脚本:bash param.sh hello bash scripting world
464
+```
465
+
466
+
467
+
468
+# 循环
469
+
470
+
471
+
472
+`for`循环
473
+
474
+```
475
+创建文件:nano items.txt
476
+
477
+hello
478
+hi
479
+world
480
+
481
+在控制台打印文件内容:cat items.txt
482
+
483
+创建脚本文件:nano for.sh
484
+
485
+#!/bin/bash
486
+
487
+for i in $( cat items.txt ); do
488
+	echo -n $i | wc -c;
489
+done
490
+
491
+赋予权限:chmod +x for.sh
492
+执行脚本:bash for.sh
493
+```
494
+
495
+
496
+
497
+`while`循环
498
+
499
+```
500
+创建脚本:nano while.sh
501
+
502
+#!/bin/bash
503
+
504
+counter=0
505
+while [ $counter -lt 3 ]; do
506
+	let counter+=1;
507
+	echo $counter
508
+done;
509
+
510
+赋予权限:chmod +x while.sh
511
+执行脚本:bash while.sh
512
+```
513
+
514
+
515
+
516
+
517
+
518
+`until`循环
519
+
520
+```
521
+创建脚本文件:nano until.sh
522
+
523
+#!/bin/bash
524
+
525
+counter=6
526
+until [ $counter -lt 3 ]; do
527
+	let counter-=1
528
+	echo $counter
529
+done
530
+
531
+赋予权限:chmod +x until.sh
532
+运行脚本:bash until.sh
533
+```
534
+
535
+
536
+
537
+
538
+
539
+# 算术
540
+
541
+```
542
+a=$(( 12 + 5 ))
543
+echo a
544
+
545
+expr 2 + 2
546
+
547
+let a=2+2
548
+echo $a
549
+
550
+echo '8.5 / 2.3' | bc
551
+```
552
+

Loading…
İptal
Kaydet