计划任务
老师笔记
一、 单次任务
atd 服务负责管理单次任务
进行单次任务的程序是 at 命令, 管理他的服务是 atd。
systemctl restart atd
systemctl enable atd
systemctl status atd
工作方式
我们使用 at 这个指令来产生所要运行的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了
实际上有两个权限控制文件,规定了哪些用户可以使用,哪些用户不可以使用
规则是这样的:
一行一个用户
1、首先查看 /etc/at.allow 文件。
假如系统中存在此文件,就只允许在此文件的用户使用 at, 其他都拒绝。
2、假如没有 /etc/at.allow 文件,就看有没有 /etc/at.deny 文件。
这个文件意义就是,允许所有,拒绝部分。
就是在这个文件中的用户是被拒绝的,不在此文件中的用户是被允许的。
3、默认CentOS7系统是有一个空的 /etc/at.deny 文件。
意思是允许所有人使用 at 命令的意思。
具体操作
[root@study ~]# at [-mldv] TIME
[root@study ~]# at -c 工作号码
选项与参数:
-m :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
-l :at -l 相当于 `atq` 命令,列出目前系统上面的所有该使用者的 at 调度;
-d :at -d 相当于 `atrm` 命令 ,可以取消一个在 `at` 调度中的工作;
-v :可以使用较明显的时间格式列出 at 调度中的工作列表;
-c :可以列出后面接的该项工作的实际指令内容。
TIME:
时间格式,可以定义出『什么时候要进行 at 這项工作』的时间.格式有:
HH:MM 如: 04:00
在今日的 HH:MM 进行,若时间已过,则在明天的 HH:MM 进行行此工作。HH:MM YYYY-MM-DD 如: 04:00 2019-07-28
強制在某年某月的某一天的特殊時刻進行該工作!HH:MM[am|pm] + number [minutes|hours|days|weeks]
如:
now + 5 minutes
和
04pm + 3 days
就是說,在某個时间点『再加上几个时间后』才进行。
示例:
//创建
[root@kvm-docker ~]# at now + 5 minutes
at> echo "hello" > /dev/pts/0
at>
job 1 at Sat Jul 27 18:49:00 2019
按下 Ctrl+d 键退出编辑
//查询
[root@kvm-docker ~]# atq
1 Sat Jul 27 18:49:00 2019 a root
二、周期性的任务
就是 计划任务
循环执行的例行性工作调度则是由 cron (crond) 这个系统服务来控制的。
默认情况下,每个用户都可以通过 crontab 管理自己的计划任务。
和 at 一样,有两个文件控制权限。
- /etc/cron.allow
- /etc/cron.deny
使用规则是和之前的 at 的文件一样。
/etc/cron.allow 比 /etc/cron.deny 要优先, 请永远用一个文件进行控制,别给自己找麻烦!
'crontab -e' 设置格式
命令格式的前一部分是对时间的设定
后面一部分是要执行的命令。
关于时间
参考: cat /etc/crontab
周的数字为 0 或 7 时,都代表“星期天”的意思!
总结记忆:
分 时 日 月 星
除了数字还有几个个特殊的符号:
就是 *、/ 和 -、, ,
- *代表所有的取值范围内的数字
- / 代表每的意思,*/5 表示每5个单位
-
代表从某个数字到某个数字- , 代表分隔时段的意思,就是 和 的意思
以下举几个例子说明:
每天早上6点:
0 6 * * * command
每两个小时:
0 */2 * * * command
23 点到早上7点之间每两个小时, 并且还有早上8点:
0 23-7/2,8 * * * command
每个月的 4 号的早上11点和每周的周一到周三的早上11点:
0 11 4 * 1-3 command
1月1日早上2点 30 分:
30 2 1 1 * command
管理当前用户的计划任务
创建/再次编辑
这会调用 `vi` 打开一个临时文件
➜ ~ crontab -e
*/1 * * * * /bin/echo "ok shark"
编辑好后,想使用 vi 一样保存退出。
保存后,这个信息会被保存在 /var/spool/cron/ 目录下的和用户同名的文件中。
比如目前操作的用户是 shark , shark 的计划任务会别保存在 /var/spool/cron/shark 文件中。
这个文件每个用户只有一个。
//查看
➜ ~ crontab -l
*/1 * * * * /bin/echo "ok shark"
➜ ~ cat /var/spool/cron/root
*/1 * * * * /bin/echo "ok shark"
修改/删除一个
再次使用 crontab -e 命令利用 vi 进行修改和删除单个计划任务。
删除全部
crontable -r
创建其他用户计划任务
crontable -u shark -e
cron 的系统级别的配置文件
/etc/crontab
和 /etc/cron.d/*
/etc/crontab
➜ ~ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
/etc/cron.d/*
在此目录下的所有文件都会被 crond 服务识别为一个计划任务的列表文件。
最佳实战
1、不要在统一时间段执行多个计划任务
2、将命令的错误输出重定向
*/1 * * * * /bin/echo "hello" 2> /dev/null
3、周与日月不可同时并存
anacron
作用
anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的执行! 以及因为某些原因导致的超过时间而没有被执行的调度工作。
其实 anacron 也是每个小时被 crond 执行一次,然后 anacron 再去检测相关的调度任务有没有被执行,如果有超过期限的工作在, 就执行该调度任务,执行完毕或无须执行任何调度时,anacron 就停止了。
crond 与 anacron 的关系:
1、crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据“分、时、日、月、周”的时间设置去各项工作调度;
2、根据 /etc/cron.d/0hourly 的设置,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的可执行文件;
因为 /etc/cron.hourly/0anacron 这个指令档的缘故,主动的每小时执行 anacron ,并调用 /etc/anacrontab 的配置文件;
3、根据 /etc/anacrontab 的设置,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 内的可执行文件,以进行固定周期需要执行的指令。
也就是说,如果你每个周日的需要执行的动作是放置于 /etc/crontab 的话,那么该动作只要过期了就过期了,并不会被抓回来重新执行。但如果是放置在 /etc/cron.weekly/ 目录下,那么该工作就会定期,几乎一定会在一周内执行一次~如果你关机超过一周,那么一开机后的数个小时内,该工作就会主动的被执行喔! 真的吗?对啦!因为 /etc/anacrontab 的定义啦!
网络基础之 TCP/IP 协议簇
老师笔记
概念性理解,主要看笔记
网络基础配置
老师笔记
配置本机 IP 和主机名
配置本机静态 IP
系统网卡的配置文件在/etc/sysconfig/network-scripts
目录下
网卡配置文件默认是以ifcfg-
开头的。
比如网卡名是 enp0s3 其配置文件名就是 ifcfg-enp0s3
//vim进行编辑
TYPE=Ethernet # 网络类型,不需要编辑
BOOTPROTO=none # 获取地址的方式,可选值 none 表示手动配置 , dhcp 表示从 DHCP 服务器自动获取
IPADDR=192.168.1.52 # 本机的IP 地址
PREFIX=24 # 子网掩码前缀的方式,24 表示 255.255.255.0
GATEWAY=192.168.1.1 # 网关
DNS1=114.114.114.114 # 手动配置的 DNS 地址
DEFROUTE=yes
PEERDNS=no # 使用这里设置的 DNS
ONBOOT=yes # 是否开机激活这个网卡,假如不激活,重启网络服务也是无效的。
配置好后,需要重启网络服务才能生效
systemctl restart network # 字符界面下
配置主机名
文件/etc/hostname
命令行设置主机名
hostnamectl set-hostname sharkhost
重新登录生效
获取主机名
hostname
或者
hostnamectl
配置本机解析主机名
文件路径/etc/hosts
一行一个
IP地址 主机名 完整的主机名
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
IP 命令
iproute 软件包 提供 ip 命令
给网卡接口配置 IP 地址,一个网卡可以配置多个 ip
ip addr add 192.168.0.193/24 dev enp0s3
删除一个网卡接口上的一个 IP 地址
ip addr del 192.168.0.193/24 dev enp0s3
查看指定网卡接口上的 IP 地址
ip addr show enp0s3
查看一个 ip 的路由路径
➜ ~ ip route get 220.181.111.188
# 百度的ip 从 本机的 网关IP 本机的设备 到 本机的 ip
220.181.111.188 via 172.16.153.2 dev bond0 src 172.16.153.129
cache mtu 1500 advmss 1460 hoplimit 64
查看本机的路由表
ip route show
default via 10.0.122.1 dev enp0s3 proto static metric 100
默认路由 网关的 ip 本机设备 enp0s3 路由协议 静态的
10.0.122.0/24 dev enp0s3 proto kernel scope link src 10.0.122.133 metric 100
目标网络号 本机设备 enp0s3 内核转发 源地址是 10.0.122.133
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.193
网卡上有的网络,内核都会自动有一条路由
设置默认路由
添加
ip route add default via 10.0.122.1 dev enp0s3
删除
ip route del default via 10.0.122.1 dev enp0s3
查看本机监听的端口
ss -l 显示本地打开的所有处于 LISTEN 监听状态的端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
ss -s 列出当前socket详细信息
ss -n 监听端口用数字表示
SSH和SSHD
老师笔记
sshd 服务
配置文件 /etc/ssh/sshd_config
登录的基本操作
以密码认证方式登录到远程服务器(ssh 服务端)
场景1:
ssh 客户端使用 root 用户连接到 ssh 服务端,假设服务端 ip 为 10.0.122.133
先决条件:
- 服务端有 root 用户
- 服务端开启了 sshd 服务,默认监听端口 22
- 客户端有个 ssh 客户端工具
1、首先在 客户端为当前的用户创建密钥对
ssh-keygen [-t dsa | ecdsa | ed25519 | rsa | rsa1]
- 默认就是 rsa
ssh-keygen
此时,当前用户的家目录的 .ssh 目录下就会有密钥对
公钥用于非密码认证方式时,传送给对方,作为信任的凭证。
私钥会报存到本地
- id_rsa 私钥
id_rsa.pub 公钥
2、以 服务端的用户 root 连接到 服务端
ssh root@服务端ip
或者
ssh root@服务端主机名
这里服务端的主机名必须可以被客户端主机正确解析
- 注意
假如第一次连接会得到一个提示。
大致的意思是,要不要信任 ssh 服务端的公钥。信任输入 yes。
此时,客户端会把 服务端的 公钥存放在当前用户家目录下的 .ssh/known_hosts
文件中,一行一个主机。
3、输入密码即可
之后就可以开始登录链接到的主机
非 22 端口登录
//服务端设置 /etc/sshd_config
Port 2222
//重启服务
systemctl restart sshd
//检查监听端口
[root@shark ~]# ss -natl |grep 2222
LISTEN 0 128 *:2222 *:*
LISTEN 0 128 :::2222 :::*
//客户端连接
ssh -p 2222 [email protected]
**注意这里是小写的p
以公钥的方式认证方式登录到远程服务器(ssh 服务端)
1、延续上面的实验继续。
客户端需要发送自己的公钥给服务端,服务端接收后会保存在用户家目录中的 .ssh/authorized_keys 文件中
ssh-copy-id [email protected]
ssh-copy-id 服务端用户@服务端ip
2、登录验证
ssh [email protected]
scp 传输文件
scp 是基于 ssh 协议的,可以实现客户端和服务端的文件传输
- 拷贝客户端到服务端
下面是把客户端的当前目录下的文件 local_file.txt 传输到服务端的 /tmp/ 目录下,文件名不变。
scp local_file.txt [email protected]:/tmp/
//假如指定端口
scp -P 2222 local_file.txt [email protected]:/tmp/
- 拷贝服务端文件到客户端
下面的命令是把服务端的文件 /tmp/local_file.txt 传输到客户端的当前操作命令的目录下
scp [email protected]:/tmp/local_file.txt .
//假如指定端口
scp -P 2222 [email protected]:/tmp/local_file.txt .
**注意后面的.
是指当前目录
常用配置参数
加速 SSH 的连接
GSSAPIAuthentication no
具体参考老师笔记