// linux常用命令
1. ssh root@192.168.100.20 // 登录系统,免密登录需要和 git 一样配置 ssh
2. ls // 查看当前文件夹下的文件和文件夹
3. ls -a // 查看当前文件夹下的文件和文件夹,包括以.开头的文件和隐藏文件
4. ll // 和2一样,显示不同,一个平铺,一个列表,功能一样
5. clear // 清屏
6. mkdir a // 创建一个a的文件夹
7. rm -rf a // 删除a文件夹,-r是递归删除,-f是强制删除
8. cd dist // 切换到dist目录中去
9. mv index.html index1.html // 把index.html改名变成index1.html
10. mv a.js ../a.js // 把a.js移动到上一级
11. cp a.js a1.js // 把a.js拷贝成a1.js
12. rm a.js // 删除a.js文件,不用加-rf参数
13. touch a.js // 创建a.js文件
14. vi/vim a.js // 进入a.js编辑,不存在则会新建,输入i进行编辑,按esc退出编辑,按:w保存,按:q退出编辑器,按:q!强制退出
15. cat a.js // 查看a.js的内容,直接打印在控制台上
16. head a.js // 查看a.js的内容(前几行)
17. tail a.js // 查看a.js的内容(后几行)
18. grep "babel" package.json // 在package.json中查找babel关键字
19. lsb_release -a // 查看当前操作系统的版本
20. uname -a // 查看系统内核
21. df -Th // 查看文件系统磁盘占用情况,-Th 表示以 1G 为计量,不加则以 1k 为计量
22. top // 查看运行的进程
23. echo 'test' > file.txt // 把 file 文件中的内容替换成 test
24. echo 'test' >> file.txt // 追加 test 到 file 文件中
25. tar zxvf test.tar.gz // 解压,z 表示以 z 结尾,x 表示解压,v 表示显示解压的过程,f 表示解压后的文件名和压缩包一致
26. tar zcvf test1.tar.gz test // 压缩,c 表示压缩,把 test 进行压缩,压缩后的文件叫 test1.tar.gz
27. sudo 的全称为:super user do 顾名思义:干超级用户才能干的事!所以 sudo 最常用的功能就是提升一个命名的执行权限。
sudo yum install git
28. yum install -y name // 安装 name 包,自动回答 yes
29. 下载安装:
1. apt-get:Debian及其衍生系统(如Ubuntu)的默认包管理器(系统自带)
2. yum:Red Hat系列Linux发行版(如CentOS、Fedora)的包管理器(系统自带)
3. curl: 用于从或向网络服务器传输数据,支持多种协议(如HTTP、HTTPS、FTP等)(系统自带)
4. wget: 专注于下载功能,支持递归下载整个网站或按需下载指定文件(需要安装)
30. 远程操作,如果已建立信任,则无需密码
1. 远程拷贝 scp
scp package.json root@192.168.100.20:/root/test-dir // 把 package.json 文件拷贝到云服务机子的 /root/test-dir 文件夹下面
2. 远程执行命令
ssh root@192.168.100.20 "cd /root/test-dir; touch a.txt" // 进入 root/test-dir 文件夹执行创建 a.txt 文件
31. 防火墙:默认的云服务器的端口,外部是访问不到的
1. 需要在平台上的安全组中进行开放
2. 并且在系统中开启端口
## 查看已开放端口
firewall-cmd --list-ports
## 开启指定端口
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
## 开启指定端口后必须重启防火墙
systemctl restart firewalld.service
3. nginx 服务报错:403 Forbidden
1. 原因:文件权限不够,增加权限即可
2. 例如,我们 nginx 静态服务的目录是 /root/test-server/html ,执行如下命令
```shell
## 假如 nginx 静态服务的目录是 /root/test-server/html
chmod -R 777 /root
chmod -R 777 /root/test-server
chmod -R 777 /root/test-server/html
nginx -s reload ## 重启 nginx
```
32. 通过 github actions 自动触发部署云服务器的代码
1. 整体思路:
1. 首先云服务器已经把代码拉取到了本地,这个可以直接通过 git clone 把代码拉下来
2. 通过 github actions 触发云服务器的命令执行
// 登录云服务器,并执行远程操作
// 注意:服务器已经进行了 git clone 动作,已经有了对应的代码目录
1. ssh root@192.168.100.20 "
1. cd /root/myblog/my-server // 切换到代码目录
2. git checkout . // 恢复本地代码
3. git checkout main // 切换到主分支
4. git pull origin main // 重新拉取代码
// 重启服务
5. npm install
6. npm run prd
"
3. 完成部署
2. 基于上面的思路,需要解决一个问题,就是怎么样在 github actions 中登录云服务器并且不需要输入密码?
1. 免密登录原理:本地生成 rsa 的私钥和公钥,在云服务器上配置公钥,这样就能实现免密登录,和 git 一样
2. 在 github actions 中生成 rsa,然后再把公钥上传到云服务器,理论上这样是可以的
但是 github actions 是一个临时的虚拟机,也就是说用完就会销毁,每次都需要生成然后上传
那这样就相当于每次都需要手动拷贝的过程,这步太麻烦!!!
3. 把本地电脑的 rsa 的公钥配置到云服务器上,把私钥通过 github secrets 配置进去
在 workflows 中进行获取,然后保存在 github actions 这个临时虚拟机的 ~/.ssh/id_rsa 中
这样子就能够解决当前这个问题!!!
4. 关于 gihub secrets 配置的知识
每个 github 项目都可以在 Settings 下的 Security 下的 Secrets and variables 配置 Actions 用到的秘钥
在 workflows 中可以使用 ${{ secrets.GH_TOKEN }} 进行获取,'GH_TOKEN' 是配置时的名称
当然,配置的名称和内容都是自定义的,如果是要配置 github token 则是需要在 'https://github.com/settings/tokens'
这里生成,生成后自己要记住,不然没办法查看已生成的内容,只能更新,如果是要配置 npm token 则是在
'https://www.npmjs.com/settings/webchenjie/tokens' 中生成,规则和 github 一样
3. 具体的 workflows 配置
```shell
name: deploy # 名字而已
on:
push:
branches:
- main # 监听 main 分支的 push 事件,有触发就执行下面的任务
jobs:
deploy: # 名字而已
runs-on: ubuntu-latest # 使用 ubuntu 系统
steps:
- name: Checkout
uses: actions/checkout@v3 # 切换分支
- name: set id_rsa # 获取配置的秘钥并保存在对应的目录中
run: |
mkdir -p ~/.ssh/ # 创建文件夹
echo "{{ secrets.MY_ID_RSA }}" > ~/.ssh/id_rsa # 把秘钥写入文件中
chmod 600 ~/.ssh/id_rsa # 设置权限
ssh-keyscan 192.168.100.20 >> ~/.ssh/known_hosts # 把云服务器的IP追加到信任域名中
- name: deploy # 部署
run: |
ssh root@192.168.100.20 "
# 注意:服务器已经进行了 git clone 动作,已经有了对应的代码目录
cd /root/myblog/my-server; # 切换到代码目录
git checkout .; # 恢复本地代码
git checkout main; # 切换到主分支
git pull origin main; # 重新拉取代码
# 重启服务
npm install;
npm run prd;
"
- name: delete id_rsa # 删除 id_rsa,避免泄漏,理论上不会
run: rm -rf ~/.ssh/id_rsa
```
34. 关于数据库,包括 Mysql、Mongodb、Redis
1. 在开发环境下可以通过本地安装,或者使用公司提供的内网服务
2. 如果是线上则需要单独购买,各个云服务都有提供
1. 注意,不能直接在云服务器上自己安装数据库!!!
2. 数据库不仅是一个服务,更是一个完善的管理系统
3. 如数据的管理、备份;管理员的增删、权限;大项目读写分离等
4. 数据应该和服务分离,避免服务被攻击而导致数据受损
35. 关于域名和 HTTPS 证书
1. 域名需要购买,每年 100 元左右
2. 域名需要备案,大约 1-2 周时间(免费)
1. 以前的域名是可以单独进行备案的,不需要购买云服务器
2. 现在,域名需要指定某个云服务器IP,才能进行备案
3. 如果换了云服务器,此前的域名备案可能失效
3. HTTPS 证书需要购买,每年 1000 元左右(免费的不安全)
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
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