0%

linux相关

Linux 服务器介绍和使用
常用 Linux 版本分析
常用工具/概念/使用方式
以前和现在的服务器(托管和云平台)
服务器配置
部署项目

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
域名购买(腾讯云买 .cc 域名)
VPS购买, 可以用下面的服务(论坛使用的主机商), 2.5刀/月的即可
http://www.vultr.com/?ref=6991688
地址选 日本, 如果不能访问, 那么就删除再新建一个


为什么服务器多用 Linux?
微软很贵, Linux 免费
Linux 生态圈更好


Linux 的各种版本分析
Debian 最好的 最稳定
Ubuntu 抄的 debian, 用途广泛, 用户多(我们用的是 ubuntu 1604)
CentOS 垃圾 工具老旧, 使用不方便


连接服务器推荐使用 cmder 软件(windows下)
如果在 mac 下, 直接用终端连接



系统配置
程序安装
PATH
命令
参数
权限
用户
用户组


常用操作
pwd
print working dir
显示现在所处的目录

ls
不带参数就显示当前目录下的所有文件
程序可以加选项
-l 显示详细信息
-h 人性化显示文件尺寸
-a 显示所有文件, 以 . 开头的文件是隐藏文件
还可以带一个目录当参数,这样就会显示这个目录
ls /usr
下面两个是等价的
ls -l -h
ls -lh


输入命令时, 可以用 tab 补全

cd
cd /usr
改变当前目录
. 代表当前目录
.. 代表上级目录
cd 不带参数就回到默认的家目录, 与 cd ~ 的效果是一样的
每个用户都有一个家目录,默认在 /home/用户名
root 用户的家目录是 /root

我们可以在 linux 命令行中使用 nano 这个编辑器, 很方便

操作文件与目录
cp
复制出一个文件,用法如下
cp a.txt b.txt
复制 a.txt 并把新文件取名为 b.txt
复制目录要加上 -r 参数
cp -r a b
mkdir
创建一个目录
-p 可以一次性创建多层目录
mkdir -p a/b/c
rmdir
只能用来删除一个空目录
rm
这个命令直接删除东西,很危险,一般不要用
删除文件或者目录
-f 强制删除
-r 用来递归删除目录
mv
移动文件或者文件夹
也可以用来改名
mv a.txt b.txt
mv b.txt ../
mv b.txt ../gua.txt
可以用 mv xx /tmp 的方式来将文件放入临时文件夹
(/tmp是操作系统提供的临时文件夹,重启会删除里面的所有文件)

ls -l /usr/bin/ > b.txt

cat
显示文件内容
tac
反过来显示文件内容
nl
显示内容并附带行号
more less head tail
more 可以分屏分批看文件内容
less 比 more 更高级,可以前后退看文件
h 显示屏幕帮助, q 退出 less 程序

head 可以显示文件的前 10 行
tail 可以显示文件的后 10 行
head 和 tail 有一个 -n 参数
head -n 20 a.gua
touch
touch a.gua
如果 a.gua 存在就更新修改时间
如果 a.gua 不存在就创建文件

权限操作
腾讯主机默认是用 ubuntu 这个用户登录, 为了方便操作, 统一选择 root 用户登录
sudo
用管理员帐户执行程序
比如安装程序或者修改一些系统配置都需要管理员权限

文件权限 文件类型 用户 用户组 文件大小 修改日期 文件名
-rw-r--r-- 1 root root 45 May 24 10:17 lazy_dog.txt
-rw-r--r-- 1 root root 56 May 24 09:47 ls-error.txt
-rw-r--r-- 1 root root 30 May 24 09:45 ls-output.txt
drwxr-xr-x 4 root root 4096 May 24 03:37 node9

drwxr-xr-x 第一位是表示文件类型, 后面每三位分为一组, 每组表示的权限意思是一样的
文件类型 是否可读 是否可写 是否可执行
d r w x
- r w x

其中 d 表示 目录 directory, - 表示普通文件
三组 rwx 分表代表 所属用户|同组用户(文件所属的群组)|其他用户
rwx 可以用数字表示为 421

777 表示三组都是 rwx rwx rwx
也就是 -rwxrwxrwx

每一位使用的是 2 进制数字表示
210
于是乎
r-- 就是 4
rw- 就是 6
rwx 就是 7
r-x 就是 5

-rw-rw-r-- 文件的访问权限
1 文件的链接数目(这个不用关心)
root 文件所有者的用户名
root 文件所属用户组
10 文件大小(单位是字节)
11/09 20:28 上次修改文件的日期和时间
b.gua 文件名

// 我们只考虑一个 root 用户的情况, 所以这部分不演示了, 直接跳过
chown
改变文件的用户
chown gua c.gua
chown gua:gua c.gua


chmod
改变文件权限
666 这种表示按照 8 进制数字更改, 换成字符就是 rw- rw- rw-

u user 表示文件所有者
g group 表示文件所属群组
o others 表示其他用户
a all 表示 ugo 的组合
+x 表示添加 x 权限, 等价于 a+x, 文件所有者/文件所属群组/其他用户都添加 x 权限
-x 表示减少 x 权限
chmod 666 a.txt
chmod +x b.txt
chmod -x tmp


信息查找
file
显示文件的类型(不是百分之百准确)
uname
显示操作系统的名字或者其他信息
uname -r
uname -a
which
which perl
有时候开发语言里会提到 3p, 也就是 perl php python
which pwd
显示 pwd 的具体路径
whereis
whereis ls
显示更全面的信息
whoami
find . -name ""

奇怪符号

~ 家目录快捷方式
> 覆盖式重定向
>> 追加重定向
| 管道, 很麻烦 以后说
`` 获取命令执行的结果
比如 echo pwd 输出的就是 pwd 这个字符串
echo `pwd` 输出的是 pwd 命令执行的结果, 相当于一个变量


& 后台执行
node app.js &
可以用 fg 命令把一个在后台的程序拉到前台来
可以用 Ctrl-z 来把一个前台的程序放到后台去挂起
() 开新的子进程shell执行(不用掌握这一条, 因为几乎没人用)

history
查看历史命令
grep
查找
这两个一般配合使用
history | grep touch

ps
查看进程, 一般用下面的用法
ps ax
ps ax | grep node
查看带 node 字符串的进程

kill 和 killall 杀进程
用 ps ax 找到进程id (pid)
kill [pid]
kill -9 [pid]
kill -15 [pid]
killall 是用进程名字来杀进程

后台前台
fg
jobs

快捷键
C-z 把正在运行的程序挂起并放在后台
C-c 中断程序的执行
C-d 输入文件终止符(end of file, EOF)

比如输入 cat(不带参数), 会等待着从键盘输入内容
hello
输入 Ctrl-d 后会结束输入

输入快捷键
C-t 交换光标前面的两个字符(只在终端有效)
C-w 一次删除一个单词
C-u 一次删除一行(从光标删除到行首)
C-k 从光标删除到行尾
C-d 删除后一个字符
C-h 删除前一个字符


C-f forward 往前 就是右
C-b backward 往后 就是左箭头
C-p pres 往上 就是上箭头
C-n next 往下 就是下箭头
C-a 光标回到行首
C-e 光标跳到行尾

快捷键
C-z 挂起到后台
C-c 中断程序


reboot
重启
shutdown
关机
可以用参数指定时间
halt
关机







配置服务器免登陆设置
ssh-key
===
生成 ssh-key
===

*** 注意, 不懂就在群里问
Mac 用户直接打开终端输入命令
Win 打开 cmder 程序, 在里面输入下面的命令

1. 在本机生成 ssh key 公钥私钥
注意 下面的 mykey 随便换一个你喜欢的名字, 这是一个标注, 方便你看的
ssh-keygen -C <mykey>
会提示你生成的文件的地址, 并且让你输入密码, 你不要输入密码, 直接回车

这样你就得到了一对 ssh-key, 这是用于登录服务器用的
默认你会得到两个文件
id_rsa 是私钥 自己保存 不要给别人看
id_rsa.pub 是公钥, 是要到处使用的
这个是我们之前提到的非对称加密


===
重建服务器并且配置 ssh-key
===

去 vultr 的管理界面
先删除(Destory)现有的服务器
新建服务器的时候, 把刚才生成的 id_rsa.pub 文件(用 atom/webstorm 可以打开)里面的内容加入到 ssh-key 步骤中
这样你就可以不用密码, 自动登录服务器了


// 如果你不想重建服务器, 配置 ssh-key 的方法如下
// 在服务器把本机生成的 public key 添加到 /root/.ssh/authorized_keys 文件中
// 1 用 root 用户登录到服务器, 创建 .ssh 目录
cd /root
mkdir .ssh
// 2 编辑 authorized_keys 文件, 把刚才生成的 id_rsa.pub 文件里面的内容粘贴进去并保存退出
// 注意, 这里可以粘贴多个 key, 一行一个
nano .ssh/authorized_keys



// 安装必备软件
// 安装 oh-my-zsh 配置(方便你使用命令行的配置)
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

// 安装防火墙 和 防火墙的基本套路配置
// 防火墙的作用(redis安全漏洞)
apt-get install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw allow 3000
ufw allow 8090/8388(这个是留给飞机用的端口)
ufw default deny incoming
ufw default allow outgoing
ufw status verbose
ufw enable



部署项目
软件安装
====
安装 git nginx
apt-get install git nginx

ubuntu 的软件仓库中的 nodejs 更新很慢, 几乎可以认为不可用,
所以我们从 nodeSource 仓库中安装新款 nodejs

配置 nodeSource 仓库
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -

配置之后就可以安装最新的 nodejs
apt-get install nodejs

安装 yarn
npm install yarn -g(这个官网不推荐)
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn


用 git pull 项目
用 sourcetree

安装依赖
yarn install

配置 nginx
ln -s /var/www/weibo/weibo.nginx /etc/nginx/sites-enabled/weibo

` 这部分和部署无关
列出 nginx/sites-enabled 下面的文件
root@linlab:~# ls -l /etc/nginx/sites-enabled/

第一个字母是 l, 这个表示 weibo 是一个软链接, 当访问 weibo 时,
实际上访问的是 /var/www/weibo/weibo.nginx
这样做的好处是我们只需要更新 weibo.nginx 就可以
软链接类似 windows 下的快捷方式

lrwxrwxrwx 1 root root 26 May 23 14:09 weibo -> /var/www/weibo/weibo.nginx
`

移除默认的配置文件
mv /etc/nginx/sites-enabled/default /tmp

重启 nginx
service nginx restart

运行程序
yarn run start

安装 pm2
yarn global add pm2

pm2 日志
/root/.pm2/logs 文件夹会包含所有应用的日志

实时日志命令
pm2 logs


我们已经有 node 的情况下, 为什么要用 nginx
1. node 性能是不如 nginx 的, nginx 处理静态文件的性能非常高
2. nginx 接收 80 端口的请求(来自用户的请求), 然后转发给各个 app.js(app.js
实际上是应用服务器, 也就是我们常说的框架)
3. nginx 是使用非常广泛的静态服务器, 安全性方面是非常好的


给静态资源增加一个路由,如果发现请求是静态资源,
nginx直接处理, 不用让node来处理,可以这么理解吗
当然可以, 这个是完全正确的


1. 高性能的静态服务器 nginx nginx nginx nginx nginx
2. 高性能的网络(?)服务器 node gunicorn unicorn tomcat/jetty
3. 一般性能的开发服务器 node app app app

// ===
// 服务器中文编码问题
// ===
//
// 编辑下面的文件, 不要拼错
nano /etc/environment
// 加入下面的内容, 保存退出
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
*/