Linux高级学习目标
-
能够使用Linux中的crontab命令
-
能够使用Linux中的网络管理命令
-
能够使用Linux中SSH免密登录命令
-
能够使用Linux中基本用户管理命令
-
能够使用Linux中防火墙配置命令
-
能够理解web的通讯原理
-
能够在windows中安装,配置和部署Nginx服务器
第1章 crontab
命令功能
通过crontab命令,我们可以在固定的间隔时间执行指定的系统指令。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合做周期性的工作,如:数据备份,程序自动运行。
-
安装crontab
-
语法:yum install package 安装指定的软件包解释:
-
yum(全称为 Yellow dog Updater,Modified):是一个软件包管理器。能够从指定的服务器自动下载安装包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
-
package:表示需要指定的安装包或服务
-
-
调度配置(定时任务操作)
1.3.1 配置说明
语法:crontab [参数]
参数解释:
-
-u user 给指定用户设置定时任务,如果不写的话,默认是给当前用户设置定时任务
-
-l 显示当前用户所有的定时任务
-
-e 编辑当前用户的定时任务,一行一个定时任务,使用这个命令进入编辑器进行编辑定时任务
-
-r 删除当前用户的定时任务
13.2 定时器任务配置编辑示例
当输入crontab -e后,会启动vi编辑器,来编写新的定时任务,一行写一个定时任务。格式如下:
*调度任务编辑语法,如下: * * * * * 命令(号之间有空格,命令,就是要进行的定时任务) 格式说明如下:其中5个*分别代表如下意义,就是按照指定的时间执行命令 , {minute} {hour} {day} {month} {week} 命令 没有秒数
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令
分 时 日 月 周 需要执行的命令
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如小时“0-23/2”或者“*/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
当保存并退出vi编辑器后,定时任务立刻生效。
等一分钟,显示一下当前用户下的定时任务,和执行的输出内容
其它示例:
命令1:30 21 * * * date >> /mydate.txt
每天的21点30分,将时间输出到/mydate.txt文件中
命令2:10 10 1,10,20,30 * * date >> /mydate.txt
每月1,10,20,30号,的10点10分,将时间输出到/mydate.txt文件中。
命令3: */2 * * * * date >> /mydate.txt
每隔2分钟执行将时间输出到/mydate.txt文件中
命令4:2 * * * * date >> /mydate.txt
每天每小时的第2分钟都执行将时间输出到mydate.txt
每隔2小时执行将时间输出到mydate.txt
* */2 * * * date >> /mydate.txt
总结
如果每个*直接写成数字,就是按照固定的时间循环进行执行定时器
如果每个*写成*/数字,就是按照每隔对应时间循环执行定时器
应用场景
定时清理缓存数据,以后大家会用很多服务器,每个服务器都有缓存数据,可以使用定时器来清理垃圾文件
定时备份文件
定时器服务的管理
crontab如果安装到linux系统上,默认开启的服务,会占用一定的资源消耗。
-
语法:service crond start 启动定时服务(默认已开启)
-
语法:service crond stop 停止定时服务
-
语法:service crond restart 重启定时服务(重启后识别最新配置定时任务)
-
语法:service crond reload 重新加载定时任务配置文件(用户体验更好,不用重启服务就可以识别最新的配置定时任务)
执行停止服务的时候,提示systemctl。。。。等
centos6操作服务都是以service命令开头,但是在centos7键以使用systemctl代替
Centos6和以前系统命令 | Centos7以后命令(系统建议使用) |
---|---|
Service crond stop | Systemctl stop crond.service |
第2章 网络管理
主机名配置
语法1 :hostname
获取主机名
语法2:hostname 新主机名
修改主机名,但重启后无效,这是内存中临时的修改
语法3:hostnamectl set-hostname 新主机名称
reboot重启,永久生效
ping内网网卡
ping localhost
激活外网网卡
1、进入CentOS,查看网络配置
2、根据上面会发现2张网卡
enp0s3,上外网的网卡,一般是没有激活,需要手动激活之后才能上外网。如果在安装linux系统是配置了网卡开机启动,那么就已经激活了网卡,如果没有这个配置就要手动激活
enp0s8,局域网网卡(一般配置好就可以,我们无需配置)
3、激活网卡,进入并编辑外网网卡ifcfg-enp0s3文件
配置动态IP。将ONBOOT=no改为ONBOOT=yes激活网卡,激活后才可以上外网(如果在安装时配置网卡启动,那么这里就是为yes,否则为no)
4、重启网络服务,查看动态IP配置结果
这时,再通过命令:ip addr查看虚拟机的IP地址。
5、重启网络服务后,使用ping 外网无服务地址,如果如下图说明已能连接外网
域名映射
需求:
ip是由4段0~255数字组成的,互联网计算机通信也是通过ip。但是ip很难记住,怎么办呢?
答:使用域名代替ip
浏览器访问域名www.itcast.cn的寻址原理
案例 使用ping
局域网主机名默认是ping不通的,如何ping通呢?,注意主机名也是域名的一种。
步骤1:编辑etc/hosts文件
vim etc/hosts
步骤2:添加主机名与ip映射
步骤3:在本机ping 局域网主机名,效果如下
ping zzw,效果如下
网络服务管理
后台服务管理命令
使用新命令方式
systemctl status network.service
查看所有后台服务状态
service ‐‐status‐all (centos6方式)
systemctl status *.service (centos7方式)
设置后台服务的自启动配置命令
自启动,就是开启时启动
使用chkconfig
数字说明
- 等级0表示:表示关机
- 等级1表示:单用户模式
- 等级2表示:无网络连接的多用户命令行模式
- 等级3表示:有网络连接的多用户命令行模式
- 等级4表示:不可用
- 等级5表示:带图形界面的多用户模式
- 等级6表示:重新启动
静态ip设置
BOOTPROTO网络配置参数如下:
- BOOTPROTO=static 静态IP
- BOOTPROTO=dhcp 动态IP
- BOOTPROTO=none 无(不指定)
通常情况下是dhcp或者static,通过指定方式的办法来获得地址,如果没有指定的话可能会出现问题。 可以通过以下命令进行指定:
a. 修改/etc/sysconfig/network配置文件:
[root@localhost ~]# vi /etc/sysconfig/network
# Created by anaconda
GATEWAY=192.168.12.2
b. 修改/etc/sysconfig/network-scripts/ifcfg-ens33配置文件:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.12.131
GATEWAY=192.168.12.2
NETMASK=255.255.255.0
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=193e7f5e-e25b-40ef-b292-0fe5c8970af5
DEVICE=ens33
ONBOOT=yes
ZONE=public
c. 重启网关
[root@localhost ~]# service network restart
Restarting network (via systemctl): [ 确定 ]
系统中网络进程端口的监听
需求:
查看当前机器上运行的进程,IP,端口等信息。
语法:netstat [参数]
显示网络状态参数解释:
-a 显示所有连线中的Socket
命令:netstat ‐a
扩展
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如pid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
常用组合
netstat -nulp 查看正在监听的udp协议连接和不使用别名的端
netstat -ntlp 查看正在监听的tcp协议连接和不使用别名的端口
说明
I-NODE,内存索引编号
PID,进程ID
PPID,父进程ID
Recv-Q Send-Q分别表示网络接收队列,发送队列。Q是Queue的缩写。
这两个值通常应该为0,如果不为0可能是有问题的。packets(数据包)在两个队列里都不应该有堆积状态。可接受短暂的非0情况。如文中的示例,短暂的Send-Q队列发送pakets非0是正常状态。
第3章 SSH免密登录
SSH工作机制
需求:
在企业中,多台Linux机器是可以相互之间进行登录和退出的。用Linux自带的SSH客户端命令,可以用输入用户名和密码的方式登录到另一台Linux机器中。但每次登录另一台Linux机器都要输入用户名和密码,难免让用户觉得麻烦。那么能不能一个用户在不输入用户名和密码的情况下,也能登录另一台Linux机器呢,答案是肯定的,这就是SSH免密登录。
SSH是Secure Shell(安全外壳协议)的缩写。
SSH是专为远程登录会话和其他网络服务提供安全性的协议。
SSH的具体实现是由客户端和服务端的软件组成的:
-
服务端是一个守护进程,他在后台运行并响应来自客户端的连接请求。
-
客户端可以使用Linux自带的SSH工具,进行远程连接服务端。
SSH采用二种验证机制:
- 基于口令的安全验证
只要你知道另一台机器上用户的帐号和口令,就可以登录到远程主机。实战:JavaEE77-01这台机器有密登录JavaEE77-02这台机器
步骤如下:
- 机器名:itheima87
IP是:192.168.56.3
用户名:root密码:root
- 机器名:itheima86
IP是:192.168.56.4
用户名:root密码:root
3. 在itheima87这台机器中中输入:ssh 192.168.56.4
4. 输入root用户在192.168.56.4这台机器上的密码:123456
5. exit,退出192.168.56.4这台机器,回到itheima87这台机器
- 基于密钥的安全验证
你无需知道另一台机器上用户的帐号和口令,也可以登录到远程主机。我们说的SSH免密登录,就说的是这种方式。
了解一下工作原理:
免密登录的原理流程
免密登录方式配置
实战:itheima87这台机器免密登录itheima86这台机器步骤如下:
1、机器名:itheima87
- IP是:192.168.56.3
- 用户名:root密码:root
2、机器名:itheima86
- IP是:192.168.56.4
- 用户名:root密码:root
3、在itheima87这台机器上输入:ssh-keygen,如有提示,按回车,生成itheima87这台机器的公钥和私钥。
密钥生成在/root/.ssh/目录下
id_rsa,私钥
id_rsa.pub,公钥
4、在itheima87这台机器上输入:ssh-copy-id 192.168.56.4,如有提示,按回车,将itheima87的公钥发送给itheima86进行保存
这时免密配置成功。
查看itheima86服务器保存的公钥数据~/.ssh/authorized_keys文件中
查看内容
5、在itheima87上面免密登录itheima86, 这台机器上输入:ssh 192.168.56.4,再也不用密码了。
第4章 Nginx
Nginx的概念
Nginx是一种服务器软件,其最主要,最基本的功能是可以与服务器硬件结合,让程序员可以将程序发布在Nginx
服务器上,让成千上万的用户可以浏览。除此之外,Nginx还是一种高性能的HTTP和反向代理服务器,同时也是一个代理邮件服务器。也就是说,我们在
Nginx上可以:
-
可以发布静态网站
-
可以实现负载均衡,集群服务器,项目1或2
-
实现反向代理,web阶段项目实战第4天学习
-
可以作为邮件服务器实现收发邮件等功能
所谓的负载均衡是指,当同时有多个用户访问我们的服务器的时候,为了减少服务器的压力,我们需要将用户引入服务器集群中的较轻压力的服务器,分担较重压力服务器的负担。
Windows安装Nginx
1、进入http://nginx.org/网站,下载nginx-1.13.8.zip文件
2、进入CMD模式,并切换到Nginx安装文件所在的目录
3、用start nginx命令,启动Nginx服务器
4、打开Windows中的浏览器,访问Nginx服务器首页
5、修改部署资源位置
修改文件/conf/nginx.conf
6、用nginx -s reload命令,重新启动Nginx服务器
7、可以使用浏览器访问服务器
8、用nginx -s stop命令,停止Nginx服务器
Linux安装Nginx
1、下载Nginx
进入http://nginx.org/网站,下载nginx-1.13.9.tar.gz文件。
2、 上传Nginx到Linux的root目录下
用Windows版本的SSH客户端工具,将刚下载好的nginx-1.13.9.tar.gz文件上传到root目录下。
3、安装Gcc
Nginx是C语言开发,要在Linux上运行,安装Nginx需要先将官网下载的源码进行编译,编译依赖gcc环境;所以需要安装gcc。
安装gcc,期间有提示,一律选
yum install gcc-c++
4、安装Nginx
安装Nginx依赖环境,‐y表示所有提示默认选择y
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
解压,并进入解压文件夹
tar ‐xvf nginx‐1.13.9.tar.gz ‐C/usr/local
创建安装目录,存放安装文件位置
mkdir /usr/local/nginx
cd /usr/local/nginx‐1.13.9
进入nginx‐1.13.9进行编译并安装
./configure --prefix=/usr/local/nginx
make && make install
5、启动Nginx
进入nginx的sbin目录
cd /usr/local/nginx/sbin
在sbin目录下启动
./nginx
在sbin目录下停止
./nginx ‐s stop
在sbin目录下重写加载
./nginx ‐s reload
开放linux的对外访问的端口80,在默认情况下,Linux不会开发端口号
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
开放的端口永久保存到防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent
查看是否有nginx的线程是否存在
ps ‐ef | grep nginx
6、用浏览器访问Nginx
打开Windows平台中的浏览器,输入:http://192.168.0.106:80回车,即可看到Nginx服务器软件的启动界面。
7、部署
修改配置文件
打开/usr/local/nginx/conf/nginx‐conf文件,修改server段的内容:
server {
listen 80; server_name localhost; location / {
root /ly;
index index.html index.htm;
}
}
核心解释如下:
Nginx服务器监听localhost:80的请求,
root表示项目的根目录,这里指向/ly目录
index表示项目中的默认首页是index.html或者是index.htm,Nginx自动访问默认首页
启动Nginx
停止Nginx
./nginx ‐s stop
启动Nginx
./nginx
部署项目
打开Windows中的浏览器,输入如下地址访问web应用
http://192.168.0.106/
web的通讯原理
学习Java开发Web应用之前,首先我们得对日常生活中,用浏览器访问服务器之间的HTTP通信过程要了解一下,基本内容如下:
-
建立Web浏览器与Web服务器的TCP连接
-
Web浏览器向Web服务器发送请求命令
-
Web浏览器发送请求头信息
-
Web服务器应答
-
Web服务器发送应答头信息
-
Web服务器向浏览器发送数据
-
Web服务器关闭TCP连接
第5章 基本用户管理
需求:
创建用户组,创建用户,并分配用户所属的用户组。
添加用户
添加用户语法:useradd -m [-g] [已存在组名] 新用户名
修改用户密码语法:passwd 新用户名
参数解释:
1. -m 自动在/home目录了,建立用户主目录,主目录名字就是新用户名
2. -g 组名 指定新用户所在的组,如果不带"-g 组名"参数的话,会建立和新用户名同名的组
命令:useradd ‐m userA
使用SSH Secure客户端工具,用userA普通用户,root密码,登录上Linux。
修改用户
语法:usermod -l 新登录名 原登录名
修改原登录名为新登录名,但所在组名不变参数解释:
1. -l 修改登录名
用户组操作
添加组操作
语法:groupadd 组名
添加一个新组
命令:groupadd groupA
修改用户将用户添加到指定组
语法:usermod -g|G 组名 用户
将用户添加到组中
g:代表的是基本组。
G:代表的附属组。
一个用户只能属于一个基本组,但是可以属于多个附属组
参数解释:
-g 修改用户所属的基本组
命令:usermod ‐g groupA testA
修改testA的附属组,设置一个用户多个附属组语法如下:
命令:usermod -G 附属组1,附属组2… 用户
查看用户与附属组之间关系和所有的组列表
命令:cat /etc/group
将用户从附属组中删除
语法:gpasswd -d 用户 附属组组名
将用户从组中删除
注意:
由于一个用户只有一个基本组,所以无法从基本组中删除,只可以修改用户的基本组,可以从附属组中删除用户
参数解释:
-d 从组中删除用户
命令:gpasswd ‐d testA groupB
修改组名
语法:groupmod -n 新组名 原组名将原组名修改为新组名
参数解释:
-n 设置使用的组名称
命令:groupmod ‐n groupAA groupA
删除用户组
groupdel 用户组名称。
在删除用户基本组之前,必须先删除用户组中的用户才能删除组。删除附属组不需要。
为用户配置sudo权限
sudo,可以理解为超级管理员执行的操作,通常是系统级别的指令。
用root编辑 vi /etc/sudoers 在文件的如下位置,在 root ALL=(ALL) ALL
下面添加一行testA ALL=(ALL) ALL
然后保存并强制退出wq!,testA 用户就可以用sudo来执行系统级别的指令。
命令:sudo useradd ‐m testAA
第6章 防火墙配置
需求:
我们查看,启动和停止机器中的防火墙。
防火墙类似于一个安全卫士管家,它能对你访问它人电脑,它人访问你的电脑,进行拦截并处理,有的阻止,有的放行,有的转发。
Linux中防火墙根据配置文件/etc/sysconfig/iptables来控制本机的“出、入”网络访问行为,其对行为的配置策略有四个策略表,如下图:
上述表解释如下,同学们了解一下即可:
raw表
主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。
mangle表
主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以 及为数据包设置Mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。
nat表
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、
REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。
filter表
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG)。filter 表对应的内核模块为iptable_filter,包含三个规则链:
INPUT链:INPUT针对那些目的地是本地的包
FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包
OUTPUT链:OUTPUT是用来过滤所有本地生成的包
查看防火墙状态(centos6命令)
命令:service iptables status,centos6的命令(centos7无法运行)
centos7的命令
systemctl status firewalld.service
关闭防火墙
命令:service iptables stop(centos6命令)
centos7命令
启动防火墙
命令:service iptables start(centos6命令)
centos7命令
禁止防火墙自启(linux绝对不建议禁止或关闭)
命令:chkconfig iptables off(centos6命令)
centos7命令
--设置开机启动
systemctl enable firewalld.service
--关闭开机启动
systemctl disable firewalld.service
--查看启动状态
systemctl list-unit-files \|grep firewalld