1.Linux 简介
Linux 是一种 免费使用、自由传播的类 Unix 操作系统
Linux操作系统内核,由林纳斯·托瓦兹在 1991年10月5日 首次发布
...
Linux 是一套开源操作系统,它有 稳定、消耗资源小、安全性高 等特点
大多数人都是直接使用 Linux 发行版 (就是将 Linux 内核与应用软件做一个打包)
...
目前市面上较知名的发行版有:Ubuntu、RedHat、 CentOS(市场占有率第一) 、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS
...
前端为什么要学习 Linux呢?
随着前后端分离进程的加速,前端程序和后端接口是两套程序,前端自己来部署程序就更加的合适
许多前端基建的工作,需要基于 Linux 环境来实施落地
2.安装 Linux 操作系统
2.1 通过 VMware 虚拟机安装 Linux
2.1.1 安装 VMware
推荐安装 VMware® Workstation 16 Pro
点击下方链接下载 VMware 后,根据安装向导安装即可
2.1.2 安装 Linux
2.1.2.1 下载 Linux 光盘
Centos 官网 下载:https://www.centos.org/download/
![](https://i-blog.csdnimg.cn/blog_migrate/e5c180e2da913429ac5badad94dffa09.png)
或者去 阿里云 下载:http://mirrors.aliyun.com/centos/7/isos/x86_64/
![](https://i-blog.csdnimg.cn/blog_migrate/5e1a90a4633253f5d412ffe4135048ed.png)
2.1.2.2 在虚拟机中安装 Centos7
https://blog.csdn.net/zhangjianfu2222/article/details/127443309
2.1.2.3 注意事项
安装时需要配置网络
安装时配置的密码,必须记住
鼠标在进入虚拟机出不来时,按住键盘 ctrl+alt
必须安装 VMware tools,可以解决鼠标出不来等很多问题
可以利用 快照、挂起 等操作,迅速恢复系统状态
2.1.3 配置网络
查看 Linux 系统的宿主设备 IP,比如这里的192.168.1.5
![](https://i-blog.csdnimg.cn/blog_migrate/a7a4ce186216c245aedeaadb0b6e93ab.png)
在Linux 系统中,通过 ping 测试网络,发现不能跟宿主设备连接,因此需要配置网络
![](https://i-blog.csdnimg.cn/blog_migrate/0dfadf6a0418f641dc7fb48dac9da3fc.png)
使用 Linux系统自带的 vi 编辑器,打开网路配置文件,按照以下标注进行修改
文件地址: /etc/sysconfig/network-scripts/ifcfg-ens33
![](https://i-blog.csdnimg.cn/blog_migrate/4748b8f5cd285a76a64d1491c95db6be.png)
修改完成后,重启网络服务
systemctl restart network
再次测试网络连接状态
![](https://i-blog.csdnimg.cn/blog_migrate/ea1cd37714a712cc649df0b90d019ea6.png)
2.1.4 查看ip、安装 net-tools
查看 ip 有两种方式:
ip addr
ifconfig
注意:如果安装精简版 Linux,则 ifconfig、netstat 等命令可能不存在,需要安装 net-tools
使用下方命令,搜索 ifconfig 包所在的模块,可以看到:打印了 net-tools,这就是 ifconfig 包所在的模块,安装这个模块就能使用 ifconfig 包了
yum search ifconfig
使用下方命令,强制安装 net-tools
yum install -y net-tools
![](https://i-blog.csdnimg.cn/blog_migrate/100ee5aaf9f40a2ae3137c67862c5fb2.png)
2.2 直接购买服务器
西部数码
阿里云
腾讯云
百度云
3.vi/vim 文本编辑器
3.1 vi/vim 是什么?
vi 是一个文本编辑器,一般 Linux 系统都会内置 vi
vim 是从 vi 发展出来的一个文本编辑器,功能更强大,一般 Linux 系统不会内置 vim,需要单独安装
如果只是常规使用, vi 就足够了
3.2 vi/vim 三种模式
![](https://i-blog.csdnimg.cn/blog_migrate/7a7cca8cf36c2e040d5780cfd74e6ed1.png)
3.2.1 命令模式
启动 vi/vim,便进入了命令模式,该模式下的敲击键盘动作,会被识别为命令,而非输入字符
比如按下 i,并不会输入一个字符,i 被当作了一个命令
i —— 切换到输入模式,可以直接编辑文件
x —— 删除当前光标所在处的字符
: —— 切换到底线命令模式,在最底行输入命令
3.2.2 输入模式
在命令模式中按下 i ,就进入了输入模式,输入模式可以使用以下按键编辑文件:
直接按键输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
Esc,退出输入模式,切换到命令模式
文本修改相关命令:
![](https://i-blog.csdnimg.cn/blog_migrate/9f175db7a5d38db4346d2da3daadeacc.png)
剪切粘贴相关命令:
![](https://i-blog.csdnimg.cn/blog_migrate/7d9ca66727d54c7a87c062be2388cd67.png)
3.2.3 底线命令模式
在命令模式中按下英文冒号:,就进入了底线命令模式,基本命令有(已经省略了冒号):
q 退出程序
w 保存文件
一般这俩命令都连起来用,也就是“:wq”,代表执行保存文件并退出
退出相关命令:
![](https://i-blog.csdnimg.cn/blog_migrate/eabdb64953fe3e46f5dfb10dfe7c7e20.png)
3.2 vi/vim 使用示例
vi/vim 使用流程一般为:
在文件所在目录下执行命令 —— vi 文件名称
-->按键盘 i 进入输入模式
-->编辑内容
-->按Esc退出输入模式进入命令模式
-->输入:wq 回车退出
![](https://i-blog.csdnimg.cn/blog_migrate/2f1fa964542d7a77c370682888882c23.gif)
以test.text 文件为例~
命令行切换到 test.text 文件所在的目录,执行以下命令
vi test.text
![](https://i-blog.csdnimg.cn/blog_migrate/ead5f9ec0495869ee0a21c569abd0393.png)
如果执行命令所在的目录下,不存在 test.text 文件,vi 命令会打开一个空白文件等待编辑内容
展示出文本内容后,键盘按下 i ,进入输入模式,输入模式页面下边,会有一个 INSERT 标识
![](https://i-blog.csdnimg.cn/blog_migrate/202da891c87a9bf90bb504097187e71f.png)
移动光标,编辑文件;编辑完成后,按键盘 Esc 退出输入模式;按:wq,保存并退出
4.远程工具 Xshell
Xshell 可以在 Windows 系统下,访问远端不同系统下的服务器
4.1 安装 Xshell
下载地址:https://xshell.en.softonic.com/download
下载完成后,根据提示安装即可
4.2 创建会话
首次连接服务器,需要新建会话连接,后续再使用时,无需再次新建
左上角文件-新建
![](https://i-blog.csdnimg.cn/blog_migrate/708ad8c7db3679c884e230e7fd57d83b.png)
按照说明填写信息,点击确定
![](https://i-blog.csdnimg.cn/blog_migrate/8ba7923ed9cc5435d14dfe1eb6b024e4.png)
输入 Linux 的用户名、密码,即可访问 Linux 系统,后面直接双击左侧会话即可远程访问
4.3 shell 常见命令
1、init 0 关机
2、init 6 重启
3、ls 、 ls -l 、 ll 列出出当前目录下的文件
4、cd 切换目录
5、pwd 查看当前完整路径
7、cd - 切换最近使用过的两个目录
8、ctrl+c 中断当前程序
9、ctrl+l / (clear) 清屏
10、ip addr / ifconfig 查看网卡信息
11、ping 127.0.0.1 看网络是否通畅
4.4 shell 命令技巧
4.4.1自动补全命令
命令+(1 次)tab
命令+(2 次)tab
4.4.2 查看历史命令
上下键盘 —— 查看最近的历史命令
history —— 查看命令历史
!22 —— 调用 历史命令中 编号为 22 的命令
!h —— 调用历史中最后一次以 h 开头的命令
4.4.3 获取帮助
ls --help
man ls
5.文件、目录、权限
为了保证安全,Linux 系统对 不同用户 访问 同一文件或目录 的权限,做了不同的规定
5.1 Linux 文件相关命令
5.1.1 创建文件 touch
创建单个文件:
touch file1
批量创建文件:
touch file{1..10}
5.1.2 删除文件 rm -rf
-r:递归的删除目录下面文件以及子目录下文件
-f:强制删除,忽略不存在的文件,从不给出提示
删除单个文件:
rm -rf file11
批量删除文件:
rm -rf file{1..10}
5.1.3 复制、移动文件/重命名文件 cp mv
复制文件:
cp file2 file22
移动文件/重命名文件(本质上就是移动文件):
mv file1 file11
5.1.4 查看、筛选文件内容 cat
查看文件全部内容:
cat file1
查看文件前三行(| 把前面的执行结构给后面):
cat file1 | head -3
查看文件后三行(| 把前面的执行结构给后面):
cat file1 | tail -3
查找(过滤)文件中的某个字符:
cat httpd.conf | grep listen
查找(过滤)文件中的某个字符(忽略大小写):
cat httpd.conf | grep -ignore listen
cat httpd.conf | grep -i listen
5.1.5 编辑文件 vi
进入编辑模式:
vi file1
使用 vi 搜索文件内容
vi 命令进入 file1 文件后,输入 /Listen,按 N搜索下一个 Listen 单词
5.1.6 查找文件 find
5.1.6.1 find(内置)
find 目录 -name 文件名
举个例子:查找根目录下名为 httpd.conf 的文件
find / -name httpd.conf
5.1.6.2 updatedb(需单独安装)
相较于 find,updatedb 的查找速度更快,需单独安装
安装命令:
yum install mlocate -y
查找示例:
建立一个小型数据库:updatedb
在数据库里面搜索:locate httpd.conf
5.2 Linux 目录
5.2.1 Linux 目录功能介绍
在 Linux 系统根目录下,执行 ls,查看根目录下所有文件/目录
![](https://i-blog.csdnimg.cn/blog_migrate/ca85d7aa6cd7a1d5d4bf9374e54b7186.png)
*root 目录:Linxu 超级权限 root 的主目录
*home 目录:系统默认的用户主目录,如果添加用户时 不指定 用户主目录,则默认在/home
下创建与用户同名的文件夹
*usr 目录:应用程序存放目录,安装 Linux 软件包时,默认安装到/usr/local 目录下
*etc 目录:存放系统的配置文件,如 /etc/fstal 存放系统分析信息
*bin 目录:存放系统所需要的重要命令,比如文件或目录操作的命令 ls、cp、mkdir 等,另外
/usr/bin 也放了一些系统命令
*sbin 目录:存放只有 root 超级管理员才能执行的程序
media 目录:即插即用型设备挂载点,光盘默认挂载点,通常光盘挂载于/mnt/cdrom 下
mnt 目录: 临时文件挂载目录(测试目录)
opt 目录: 第三方软件存放目录(测试目录)
tmp 目录:临时文件夹(测试目录)
boot 目录:存放 Linux 启动时内核及引导系统程序所需要的核心文件,内核文件和 grub
系统引导管理器都位于此目录
dev 目录:存放这 Linux 系统下的设备文件,如光驱等
var 目录:目录经常变动,/var/log 存放系统日志、系统库文件
5.2.2 Linux 目录相关命令
5.2.2.1 创建目录 mkdir
创建多个同级目录:
mkdir dir1 dir2 dir3
递归创建树目录:
mkdir -p a/b/c/d/e/f/g
5.2.2.2 删除目录 rm -rf
-r:递归的删除目录下面文件以及子目录下文件。
-f:强制删除,忽略不存在的文件,从不给出提示
删除 dir1、dir2 目录
rm -rf dir1 dir2
删除以 dir 开头的所有文件:
rm -rf dir*
5.2.2.3 复制目录、移动目录/重命名目录 cp、mv
复制目录及目录下的文件(注意别忘记递归复制,否则只会复制空文件夹):
cp -rf wwwroot/ mywwwroot/
移动目录/重命名目录(本质上就是移动目录):
mv dir1 dir11
5.2.2.4 查看目录 ls tree
普通方法查看目录
ls
递归查看目录树
tree a
tree 命令需要单独安装
yum install tree -y
5.3 Linux 权限
5.3.1 权限分类、用户分类
权限分类【用户对文件所拥有的权限】:
r读
w写
x执行
用户分类【u+g+o=a(表示所有人)】:
所有者 user u
所属组 group g
其他用户 other o
所有用户 all a
5.3.2 文件/目录中的权限
5.3.2.1 文件的 rwx
r 查看文件内容
w 在文件里写内容
x 执行该文件(文件不是普通文件,是程序或脚本)
5.3.2.2 目录的 rwx
r 查看目录里面的文件(4)
w 在目录里创建或删除文件(2)
x 切换进目录(1)
5.3.2.3 查看并分析文件信息
显示一个文件的属性、文件所属的用户/组
ls -l
![](https://i-blog.csdnimg.cn/blog_migrate/f4cf39f34369f3a91cf4b5eb7480b210.png)
-rw-r--r--. 1 root root 60 5月 16 17:54 test.txt
红色这部分代表 类型,可以是‘-’、‘d’、‘l’、b’、‘c’、‘s’、‘p’
‘-’ :普通文件(没有系统功能的文件/命令)
‘d’ :目录
‘l’ :链接文档 ( link file )(相当于快捷方式)
‘b’ :装置文件里面的可供储存的接口设备(一般情况系统用于管理存储文件的类型)
‘c’ :装置文件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )
黄色这部分代表 用户权限,三个为一组,且均为『rwx-』 的三个参数的组合
第一组表示所有者(user)的权限
第二组表示所属组(group)的权限
第三组表示其他人(other)的权限
[ r ] 代表可读(read)
[ w ] 代表可写(write)
[ x ] 代表可执行(execute)
三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]
![](https://i-blog.csdnimg.cn/blog_migrate/d1225f69a95a907245747ef7cde97ea8.png)
蓝色这部分代表 文件加载了安全上下文,安全上下文的启动程序是由SELlinux开启,加载过安全上下文的文件,就会出现第三位的点,否则没有该点
粉色这部分代表 文件拥有者
绿色这部分代表 文件拥有组
5.3.2.4 举个例子
举个例子~~分析下方数据中的信息
drwxr-x---. 2 root root 6 4 月 11 2018 mnt
d —— 表示目录
rwx —— root 对 mnt 目录具有读、写和执行的权限
r-x —— root 组内其他用户对 mnt 目录具有读和执行权限
--- —— other 其他所有用户对 mnt 目录没有任何权限
. —— 表示 ACL 的属性
2 —— mnt 里面的目录数量
root —— 当前目录所属用户
root —— 当前目录所属组
6 —— 文件大小(以字节为单位),如果是一个文件夹,则表示该文件夹的大小(注意是文件夹本身的大小,而不是文件夹及其内部的文件的总大小)
人不能理解文件夹是一个特殊的文件的含义,这样的话理解文件夹大小的含义就比较困难了.
4 月11 2018 —— 文件创建时间
mnt —— 目录名称
5.3.2.5 更改文件属主、更改文件属组(不常用)
更改文件属组(group)
chgrp [-R] 属组名 文件名
更改文件属主(user)
chown [–R] 属主名 文件名
同时更改文件属主、属组:
chown [-R] 属主名:属组名 文件名
-R:递归更改文件属组
在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改
5.3.3 权限的数字表示法
Linux 文件权限有两种设置方法
一种是数字 421(4r,2w,1x)
一种是符号 rwx(r4,w2,x1)
user/group/others 三种用户,都有 read/write/execute 权限,且可以累加
举个例子~~当权限为:[-rwxrwxr--],这表示:
user = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= r-- = 4+0+0 = 4
再举个例子~~ 755 表示-rwxr-xr-x
chmod 755 file.txt
当前用户对 file.txt 具有读/写/执行的权力
当前用户组对 file.txt 具有读/写/执行的权力
其他用户对 file.txt 具有读/写/执行的权力
5.3.4 chmod 权限分配(针对群体用户,批量设置权限)
+增加权限
-删除权限
5.3.4.1 增加权限
给 当前用户 分配执行 my.sh 的权限
chmod u+x my.sh
给 其他用户 分配对 file.txt 的读写权限
chmod o+r,o+w file.txt
给 其他用户 分配对 mnt 目录的读取、写入、执行(进入)权限
给 其他用户 分配对 mnt 目录及 mnt目录下所有文件的读取、写入、执行(进入)权限
chmod o+r,o+w,o+x mnt
chmod -R o+r,o+w,o+x mnt
修改 所有用户 对指定目录下文件 的权限为可读、可修改、可执行
chmod -R 777 wwwroot/
5.3.4.2 删除权限
让 其他用户 对 mnt 目录没有任何权限
chmod o-r,o-w,o-x mnt
让 所有用户 对 test.sh 文件具有 x 的权限
让 所有用户 对 test.sh 都没有 x 权限
chmod a+x test.sh
chmod a-x test.sh
5.3.5 用户权限管理 ACL(针对单独用户,设置单独权限)
5.3.5.1 查看 opt 拥有的 ACL 权限
getfacl opt
5.3.5.2 设置 opt 的 ACL 权限
让 zhangsan 对 opt 目录具有 rx 权限(-m 表示修改权限)
setfacl -m u:zhangsan:rx opt/
让 lisi 对 opt 目录具有 rwx 的权限(-m 表示修改权限)
setfacl -m u:lisi:rwx opt/
5.3.5.3 删除 opt 的 user1 拥有的 ACL 权限
让 zhangsan 失去对 opt 目录的权限(-x 表示删除权限)
setfacl -x u:zhangsan opt
5.3.5.4 删除 opt 上设置过的所有 ACL 权限
setfacl -b opt/
5.3.6 用户权限管理 visudo
5.3.6.1 获取命令的bin文件(可执行文件)
每个命令对应着一个可执行文件
查找 userdel 命令的 bin 文件
which userdel
![](https://i-blog.csdnimg.cn/blog_migrate/89ebefc0fbd72028d39ad563e70d78c2.png)
5.3.6.2 root 超级管理员配置提权
前面说过,sbin 目录下存放的是 root 用户才能执行的命令
但是有时候其他用户(比如 zhangsan)也可能需要执行 sbin 目录下的命令
此时就需要超级管理员给其他用户设置一下,让其他用户可以通过提权的方式,使用 sbin 目录下的命令
具体步骤:
命令行输入 —— visudo
允许zhangsan使用 useradd 命令 —— %zhangsan localhost=/usr/sbin/useradd
允许lisi使用 userdel 命令 —— %lisi localhost=/usr/sbin/userdel
5.3.6.3 普通用户使用 sudo 调用 sbin 中的命令
sudo useradd wangwu
sudo userdel wangwu
5.3.7 用户增删改查
Linux 同时可以支持多个用户,每个用户对自己的文件设备有特殊权限,保证用户之间互不干扰;
当硬件配置非常高时,每个用户还可以同时执行多个任务,多个线程同时工作,提高效率
多用户是 Linux 优于其他操作系统的一大特点
5.3.7.1 添加用户
useradd lisi
5.3.7.2 设置密码
passwd lisi
5.3.7.3 删除用户
userdel -r lisi
注意:
-r:递归的删除目录下面文件以及子目录下文件
删除用户的时候,用户组被删除
5.3.7.4 查看用户
who 命令:显示当前正在系统中的所有用户名字、使用终端设备号、注册时间
whoami 命令:显示出当前终端上使用的用户
last 命令:last 作用是显示近期用户或终端的登录情况
5.3.7.5 用户加入组/移出组
把用户 testuser 加入到 root 组,加入组后,testuser 获取到 user 组及 root 组所有权限
gpasswd -a testuser root
移出组
gpasswd -d testuser root
6.Linux安装软件
推荐安装方式:yum > rpm > 二进制解压 > 源代码编译
6.1 rpm 方式安装
RPM 全称为 Redhat Package Manager ,是由 Redhat 公司提出的,用于管理 Linux 下软件包的软件。Linux 安装时,除了几个核心模块以外,其余几乎所有的模块均通过 RPM 完成安装
6.1.1 本示例基于 httpd 来演示
6.1.1.1 挂载光盘
必须把把光盘放在光驱中
光驱必须放连上电脑
mount dev/cdrom /media 挂载
df 查看光盘是否挂载
查找 ls | grep httpd
6.1.1.2 安装
rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
rpm -i 需要安装的包文件名
rpm -iv 安装过程中显示正在安装的文件信息;
rpm -ivh 安装过程中显示正在安装的文件信息及安装进度;
6.1.1.3 卸载、升级
httpd 表示要卸载的软件包
rpm -e httpd
查找 httpd
rpm -q httpd
升级 httpd
rpm -Uvh httpd
6.1.2 本示例基于Java8 来演示
6.1.2.1 下载 jdk
下载对应版本 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
![](https://i-blog.csdnimg.cn/blog_migrate/66b0736f9d67c2901607f3a1dd8ab502.png)
6.1.2.2 上传并安装 jdk
使用Xftp 将刚下载的 jdk-8u291-linux-x64.rpm 文件进行上传到服务器
检查是否安装OpenJDK,如果有则卸载
执行命令 java -version 出现以下内容,表示系统已经安装 OpenJDK
![](https://i-blog.csdnimg.cn/blog_migrate/0f59681752c611e0cd64ad87c504457e.png)
执行 rpm-qa | grep java 查看系统自带的 Java 相关文件
![](https://i-blog.csdnimg.cn/blog_migrate/58a5d19da165b21c2ab7a8e9d600c501.png)
将 java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64 所有文件全部删除
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
验证是否全删除:执行命令 rpm-qa | grep java 无任何文件,表示删除成功
在上一步上传文件所在目录,执行命令安装 jdk
rpm -ivh jdk-8u291-linux-x64.rpm
![](https://i-blog.csdnimg.cn/blog_migrate/8f76d6002846a41e53af0d1ae4ad278b.png)
验证是否安装成功
![](https://i-blog.csdnimg.cn/blog_migrate/8be2a52b75982f179d51959a32226434.png)
6.2 yum 方式安装
Yum全称为 Yellow dog Updater, Modified,是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell
前端软件包管理器。主要功能是更方便的添加/删除/更新 RPM 包,自动解决包的依赖性问题
6.2.1 yum 基本操作
6.2.1.1 yum 安装 rpm 包
yum install -y net-tools —— 包括 netstat ifconfig 等命令
yum install -y unzip zip —— zip 压缩减压
yum install -y mlocate —— updatedb
yum install -y wget —— 直接从网址下载文件
yum -y install psmisc —— ① 查看进程pstree | grep httpd ② 显示进程以及子进程 pstree -p
6.2.1.2 yum 卸载 rpm 包
yum -y remove wget
6.2.1.3 yum 搜索 rpm 包
yum search xxx
6.2.1.4 yum 查看 rpm 包
yum list
yum list | grep httpd
yum list updates —— 列出所有可更新的软件包
yum list installed —— 列出所有已安装的软件包
6.2.1.5 yum 显示 rpm 包信息
yum info package1
举个例子~~
yum info httpd
6.2.2 yum 仓库配置
yum 的主配置文件 —— etc/yum.conf
yum 的仓库配置文件 —— /etc/yum.repo.d/*.repo,这里可以配置一个或多个 repository
yum 仓库就是使用 yum 命令下载软件的镜像地址
我们通常使用 yum install 命令来在线安装 Linux 系统的软件,这种方式可以自动处理依赖性关系,并且一次安装所有依赖的软体包
但是经常会遇到从国外镜像下载速度慢,无法下载的情况,此时就需要把 yum 源改为国内的镜像
6.2.3本示例基于 nginx 来演示
直接执行 yum install nginx 发现提示没有可用 nginx 包,这是因为本地没有 nginx 存储库的源
![](https://i-blog.csdnimg.cn/blog_migrate/bb9f13c4bc896c2822fab246a28388c5.png)
6.2.3.1 安装 yum-utils
安装 yum-utils , 安装过的可以不必重复安装
sudo yum install yum-utils
6.2.3.2 设置 yum 存储库,安装 nginx 源
创建 /etc/yum.repos.d/nginx.repo 文件,并写入以下内容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
也可以直接安装 nginx 源
sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
查看 nginx 源是否配置成功:
yum search nginx,若搜索到信息,则添加成功
npm info nginx,若获取到信息,则添加成功
6.2.3.3 安装 nginx 并验证
sudo yum install -y nginx
注意:
通过 yum 安装的 nginx,配置文件在/etc/nginx 目录下(修改端口、配置代理之类的都在这里)
通过 yum 安装的 nginx,安装完后无需配置环境变量,可以直接使用nginx 相关命令
验证是否安装成功:
![](https://i-blog.csdnimg.cn/blog_migrate/f4c7a356b330b2d72bf571bf6e7b5ea6.png)
6.2.3.4 启动 nginx 并设置开机运行
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
启动成功后,如果还是访问不到,可以考虑防火墙是否关闭
http://bbs.itying.com/topic/5bd5d4460e525017c449479a
6.3 二进制解压安装
本示例基于 Node.js 来演示
6.3.1 下载
打开 https://nodejs.org/en/ 官网,按照图示进行下载,会得到一个压缩包
![](https://i-blog.csdnimg.cn/blog_migrate/f2e00065292e14a6f580be4b97d56caa.png)
6.3.2 上传文件并解压
使用 Xftp 将刚下载的 Node.js 压缩包上传到服务器,比如这个目录 /home/node
解压压缩包
tar -xvf node-v14.17.0-linux-x64.tar.xz
将解压出来的文件重命名(也可以使用 Xftp 工具直接重命名)
mv node-v14.17.0-linux-x64 nodejs
6.3.3 配置环境变量
在刚解压的 node 目录的 bin 目录下,执行 pwd 命令获取路径(/home/node/nodejs/bin)
![](https://i-blog.csdnimg.cn/blog_migrate/b2a58168b69cb32dcff2a6138a335aeb.png)
使用 vi 编辑 profile 文件
vi /etc/profile
添加环境变量
export NODE_HOME=/home/node/nodejs/bin
export PATH=$NODE_HOME:$PATH
:qw保存,执行下方命令,使环境变量生效
source /etc/profile
验证配置是否生效
node -v
npm -v
6.4 源代码安装
此种方式不推荐,因为比较麻烦
6.4.1 安装 Linux 中源代码编译软件
yum install -y gcc make gcc-c++ openssl-deve
检查是否安装成功
rpm -qa | grep gcc
rpm -ql gcc
6.4.2 编译安装 Linux 源代码
基本步骤:
生成编译配置文件 - Makefile
开始编译 - make(或者 make -j4)
开始安装 - make install
举个例子~~
下载httpd-2.2.9.tar.gz 源代码
解压并 cd 到对应目录
生成编译配置文件,输入命令(注意路径调整) —— ./configure --prefix=/usr/local/apache
开始编译,输入命令 —— make 或者 make -j4,后者速度更快
开始安装,输入命令 —— make install
如果使用源代码安装 httpd,则上面第三步的命令应该是:
./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc/ --with-included-apr --enable-dav
--enable-so --enable-deflate=shared --enable-expires=shared
--enable-rewrite=shared
6.4.3 卸载源代码安装的软件
分为两步:结束当前进程、删除源代码
结束进程
pstree | grep httpd
pkill httpd
删除源代码
cd /usr/local/
rm -rf apache/ 直接删除源代码
7.防火墙相关操作
Centos7 默认使用 firewalld,该防火墙默认是启动状态
开启防火墙之后,有些服务就会访问不到,因为服务相关端口被防火墙控制,没有打开
7.1 Nginx 启动后访问不到
nginx 默认使用80端口,安装完成后启动,会发现使用IP直接访问不到,这时,就需要开放80端口
![](https://i-blog.csdnimg.cn/blog_migrate/2105ec46bb8eb2dda74e2fe780274583.png)
查看 80 端口是否开启:firewall-cmd --query-port=80/tcp
![](https://i-blog.csdnimg.cn/blog_migrate/47a68374c5be8adf1fd368e91551ac70.png)
发现未开启,开启 80 端口:firewall-cmd --permanent --add-port=80/tcp
![](https://i-blog.csdnimg.cn/blog_migrate/bf8d42ea2d88f7b061034dbe14b8faef.png)
重启服务:service firewalld restart
重新访问
![](https://i-blog.csdnimg.cn/blog_migrate/4eb2c64e0e3d162f708db46a8a22070c.png)
7.2 使用 nginx 部署程序简单示例
修改 /etc/nginx/conf.d 文件,设置端口及部署文件的目录
![](https://i-blog.csdnimg.cn/blog_migrate/0983727b408350b6892e0b9d7582b621.png)
重新加载配置文件
nginx -s reload
执行命令后,页面依然无法访问,这是因为 防火墙 未开放 对应端口
输入命令开启 8888端口,并重新加载防火墙配置
firewall-cmd --permanent --add-port=8888/tcp
service firewalld restart
![](https://i-blog.csdnimg.cn/blog_migrate/fc56c1c053eb2a3c3836fd97a560444c.png)
在服务器路径下新建要部署的项目文件夹(本示例为 pinxx)
![](https://i-blog.csdnimg.cn/blog_migrate/e542294801bf8d8446e792c6f78c7530.png)
本地打包生成静态资源上传服务器
![](https://i-blog.csdnimg.cn/blog_migrate/dcf4f72da15abd2eba8e82d23cd06d96.png)
浏览器输入地址,测试验证
![](https://i-blog.csdnimg.cn/blog_migrate/b5bbc4c28551ab5f07f0fb36b59a04fa.png)
7.3 防火墙常用命令
启动:systemctl start firewalld
关闭:systemctl stop firewalld
重启:service firewalld restart
查看 firewall 服务状态: systemctl status firewalld
查看 firewall 的状态:firewall-cmd --state
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
查看防火墙规则:firewall-cmd --list-all
更新防火墙规则: firewall-cmd --reload 修改 firewall-cmd 配置后必须重启
查看所有打开的端口: firewall-cmd --zone=public --list-ports
查询端口是否开放(示例:8080端口):firewall-cmd --query-port=8080/tcp --permanent (–permanent 永久生效,没有此参数重启后失效)
开放指定端口(示例:8080端口):firewall-cmd --permanent --add-port=8080/tcp
关闭指定端口(示例:8080端口):firewall-cmd --permanent --remove-port=8080/tcp
7.4 关闭 SELinux 防火墙
安全增强型 Linux(Security-Enhanced Linux),简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统
SELinux 由美国国家安全局开发,2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块
SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大;很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了,阿里云、西部数码云服务器 安装的 Centos 默认已经关闭 SELinux了
查看 SELinux 状态(下面两个命令都行)
/usr/sbin/sestatus -v
getenforce
SELinux status: enabled
如果 SELinux status 参数为 enabled,则为开启状态
关闭 SELinux:
setenforce 0 —— 设置 SELinux 成为 permissive 模式
setenforce 1 —— 设置 SELinux 成为 enforcing 模式
修改/etc/selinux/config 文件 —— 将 SELINUX=enforcing 改为 SELINUX=disabled
8.内存、cpu、进程、端口、硬盘管理
8.1 top 命令 / uptime 命令
![](https://i-blog.csdnimg.cn/blog_migrate/82c23fb136de3cbd572c299338e536a8.png)
8.1.1 top 命令第一行 uptime
top - 15:31:47 up 9:30, 3 users, load average: 0.00, 0.02, 0.05
依次对应:
15:31:47 —— 系统当前时间
9:30 —— 系统到目前为止运行的时间
3 users —— 当前登陆系统的用户数量
load average 后面的三个数字 —— 距离现在一分钟,五分钟,十五分钟的负载情况
第一行信息,相当于输入命令 uptime
8.1.2 top 命令第二行 Tasks
Tasks: 133 total, 1 running, 132 sleeping, 0 stopped, 0 zombie
依次对应:
tasks —— 表示任务(进程)
133 total —— 表示现在有 133 个进程,其中运行中的进程数为1 ,休眠(挂起)进程数为132 ,停止的进程数为 0,僵尸进程数为 0
8.1.3 top 命令第三行 cpu
%Cpu(s): 0.2 us, 0.4 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
依次对应:
us —— user 用户空间占用 cpu 的百分比
sy —— system 内核空间占用 cpu 的百分比
ni —— niced 改变过优先级的进程占用 cpu 的百分比
空闲 cpu 百分比(一般只需要关注这里)
wa —— IO wait IO 等待占用 cpu 的百分比
hi —— Hardware IRQ 硬中断 占用 cpu 的百分比
si —— software 软中断 占用 cpu 的百分比
st —— 被 hypervisor 偷去的时间
单独查看cpu,还可以使用下方命令:
cat /proc/cpuinfo | grep name
![](https://i-blog.csdnimg.cn/blog_migrate/d868799989f521319fc78aad6d50ec3c.png)
8.1.4 top 命令第四行 Mem
KiB Mem : 2897496 total, 1995628 free, 191852 used, 710016 buff/cache
依次对应:
总内存:2.76g
空闲内存:1995628/1024/1024=1.9g
已使用内存:0.18g
缓存区内存:0.67g,缓冲区是从主内存中特地预留出的内存,用来存放特定的一些信息,例如从磁盘获取的文件表,程序正在读取的内容等等
单独查看内存,还可以使用下方命令:
cat /proc/meminfo | grep Mem
![](https://i-blog.csdnimg.cn/blog_migrate/96f7fd49dc12b655421960e8fbe1d4bf.png)
8.1.5 top 命令第七行 进程监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
依次对应:
PID — 进程 id
USER — 进程所有者
PR — 进程优先级
NI — nice 值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATA
SHR — 共享内存大小,单位 kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的 CPU 时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND — 进程名称(命令名/命令行)
8.2 进程管理
8.2.1 查看进程
pstree 查看进程树
pstree -ap 显示所有信息
pstree | grep httpd
pstree -ap | grep httpd
ps -au
ps -au | grep httpd
ps -aux
ps 中 aux 的含义:
显示现行终端机下的所有程序,包括其他用户的程序(a)
以用户为主的格式来显示程序状况 (x)
显示所有程序,不以终端机来区分(u)
8.2.2 杀死进程
pkill 进程名字
pkill httpd
kill 进程号
kill 2245
kill -9 进程号 强制杀死
kill -9 1234
kill:执行 kill 命令,系统会发送一个 SIGTERM 信号给对应的程序。当程序接收到该 signal 信号后,将会发生以下事情:
程序立刻停止
当程序释放相应资源后再停止
程序可能仍然继续运行
大部分程序接收到 SIGTERM 信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待 IO,可能就不会立马做出响应,我在使用 wkhtmltopdf 转 pdf 的项目中遇到这现象),也就是说,SIGTERM 多半是会被阻塞的
kill -9:执行 kill -9 命令,系统给对应程序发送的信号是 SIGKILL,即 exit,exit 信号不会被系统阻塞,所以 kill -9能顺利杀掉进程
8.3 查看端口
netstat -tunpl |grep httpd
-t 或--tcp 显示 TCP 传输协议的连线状况
-u 或--udp 显示 UDP 传输协议的连线状况
-n 或--numeric 直接使用 IP 地址,而不通过域名服务器
-p 或--programs 显示正在使用 Socket 的程序识别码和程序名称
-l 或--listening 显示监控中的服务器的 Socket
关闭防火墙:
Firewalld 关闭:systemctl stop firewalld
SELinux 关闭:setenforce 0
http://bbs.itying.com/topic/5bd5d4460e525017c449479a
http://bbs.itying.com/topic/5bd7cb31dee9090efc61eccf
8.4 查看硬盘信息
列出文件系统的整体磁盘空间使用情况
df
以易读的方式显示,总共多少 g 用了多少 g
df -h
查看该文件夹所在磁盘的使用情况
df /home
![](https://i-blog.csdnimg.cn/blog_migrate/68dec708be675470dbd55fecff6753aa.png)
8.5 查看目录及文件大小
8.5.1 查看当前目录大小
du -sh [目录名]
不写目录名时为当前目录
![](https://i-blog.csdnimg.cn/blog_migrate/6425c661d8f807fd0e87f66b48dcb449.png)
8.5.2 查看指定文件夹下的所有文件大小(包含子文件夹)
du -h [目录名]
不写目录名时为当前目录
![](https://i-blog.csdnimg.cn/blog_migrate/ca40bd5cbc137dd7f36d0a9e12d531ec.png)
8.6 查看系统内核版本
cat /proc/version
![](https://i-blog.csdnimg.cn/blog_migrate/95500b0cf8bb944c24bbacf4225a82b0.png)
9.使用 systemctl 管理服务
9.1 什么是 systemclt
systemctl是系统服务管理器命令,定时执行某项操作
systemctl 是 service 和 chkconfig 这两个命令的整合,在 CentOS 7 就开始被使用了
![](https://i-blog.csdnimg.cn/blog_migrate/ab2a52836650b65c736820d47080647a.png)
9.2 systemclt 管理服务常用命令
启动服务:systemctl start httpd
关闭服务:systemctl stop httpd
重启服务:systemctl restart httpd
查看一个服务的状态:systemctl status httpd
查看一个服务是否在运行:systemctl is-active httpd
查看当前已经运行的服务:systemctl list-units -t service
列出所有服务(注意顺序): systemctl list-units -at service
列出所有自启动服务:
systemctl list-unit-files|grep enabled
systemctl list-unit-files|grep disabled
systemctl list-unit-files|grep disabled | grep httpd
设置开机自启动: systemctl enable httpd
停止开机自启动: systemctl disable httpd
使指定服务重新加载配置:systemctl reload httpd
9.3 定时执行某项操作
要实现定时执行某项操作,就需要使用 Linux 的系统定时任务服务,该服务会自动启动 crond 进程
crond 进程会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
9.3.1 实现原理
打开 /etc/crontab文件,可以看到以下内容:
![](https://i-blog.csdnimg.cn/blog_migrate/1ff1fd3827f0fe354350f4acb9cc9fb3.png)
增加定时任务
格式: * * * * * user-name command(也可以是Shell 脚本)
![](https://i-blog.csdnimg.cn/blog_migrate/5409cbe49427987701e5af27c54c2791.png)
特殊符号
*(星号) | 代表任何时间。比如第一个 "*" 就代表每分钟都执行一次 | |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分执行一次命令 | |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0分执行命令。 | |
/(正斜线) | 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。 |
重启服务
systemctl restart crond.service
9.3.2 实现 GitLab 凌晨2点定时备份
打开 /etc/crontab文件添加以下内容
00 02 * * * root sh /srv/gitlab/config/gitlab_backup.sh
在该目录(/srv/gitlab/config)下,创建备份脚本 gitlab_backup.sh ,内容如下:
#! /bin/bash
docker exec -t gitlab2021 gitlab-backup create SKIP=artifacts
虽然可以将命令直接写在 crontab文件中,但是更推荐写在 sh 文件中,这样方便后期修改以及备份迁移
重启服务
systemctl restart crond.service
9.3.3 定时相关命令
9.3.3.1 启动定时任务
# centos7 及以上
systemctl start crond.service
# 其他Linux
service crond start
9.3.3.2 查看服务启动状态
# centos7 及以上
systemctl status crond.service
# 其他Linux
service crond status
9.3.3.3 停止服务状态
# centos7 及以上
systemctl stop crond.service
# 其他Linux
service crond stop
9.3.3.4 重新启动服务
# centos7 及以上
systemctl restart crond.service
# 其他Linux
service crond restart
9.3.3.5 重新加载
# centos7 及以上
systemctl reload crond.service
# 其他Linux
service crond reload
10.系统开关机
10.1 重启
立即重启方式1
reboot
立即重启方式2
shutdown -r now
10 分钟后重启
shutdown -r +10
10.2 关机
立即关机
shutdown -h now
10 分钟后关机
shutdown -h 10