一文搞定“Linux简单但实用的学习”两万字Linux通关笔记2

简介: 一文搞定“Linux简单但实用的学习”两万字Linux通关笔记2

系统时间同步优化

时间配置查看

timedatectl

查看时区表

timedatectl list-timezones |grep Shanghai

设置上海时区

timedatectl set-timezone Asia/Shanghai    #linux中中国时区为上海

开启网络时间同步

timedatectl set-ntp 1

手动同步时间服务器

ntpdate ntp1.aliyun.com

手动调整时间

timedatectl set-time '2021-12-18 12:03:23'

查看、修改系统时间

date
date -s "2023-8-7 12:30:59"    #修改时间为2023-8-7 12:30:59

系统远程连接优化

/etc/ssh/sshd_config
79 GGSSAPIauthentication no
115 UseDNS no
sed -i "79s#yes#no$g" /etc/ssh/sshd_config
sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config
systemctl reload sshd

系统内核优化

vim /etc/sysctl.d/99-sysctl.conf
添加:
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#关闭sysrq功能
kernel.sysrq = 0
#core文件名中添加pid作为扩展名
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
#修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536
#设置最大内存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
#timewait的数量,默认180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
#内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries = 1
#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 1
#启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time = 30
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024    65000
#修改防火墙表大小,默认65536
net.netfilter.nf_conntrack_max=655350
net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
保存退出
sysctl -p   刷新生效

内核版本升级

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64
#重启
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64
#查看
rpm -qa | grep kernel
yum remove -y kernel-3.10.0-1127.el7.x86_64

系统重要配置文件

#网卡配置文件 
/etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" 
#网卡类型:以太网 
BOOTPROTO="static" 
#ip获取方式:
dhcp 动态
static 静态 
#网卡名 
NAME="ens33" 
#设备名
DEVICE="ens33"
#是否开机启动
ONBOOT="yes"
#ip地址 
IPADDR=192.168.8.10
#子网掩码
NETMASK=255.255.255.0
#网关
GATEWAY=192.168.8.2 
#首选dns
DNS1=8.8.8.8 
备选dns
DNS2=114.114.114.114

2.域名解析配置文件

cat /etc/resolv.conf    #查看dns
nameserver 8.8.8.8    #dsn格式

查看网关

route -n   

3.自动挂载配置文件

扫描磁盘

#新添加磁盘时,使用此代码进行磁盘扫描
echo "- - -" >> /sys/class/scsi_host/host0/scan
echo "- - -" >> /sys/class/scsi_host/host1/scan
echo "- - -" >> /sys/class/scsi_host/host2/scan 

磁盘配置

fdisk -l    #查看目前已有磁盘
fdisk /dev/sdb    #编辑磁盘
n    #新建分区
w    #保存并退出
mount /dev/sdb1 /data    #挂载已经新建好的分区到文件夹
vim /etc/fstab    #磁盘挂载配置文件
/dev/sdb1   /data   xfs     defaults 0 0    #永久挂载格式

系统运行级别

0 关机

poweroff.target 1 单用户

rescue.target 2 字符多用户,不常用,

multi-user.target 3 字符多用户,有网络,常用

multi-user.target 4 字符多用户,不常用

multi-user.target 5 图形

graphical.target 6 重启

reboot.target

切换运行级别

init 5 #切换至运行级别5

查看默认级别

systemctl get-default    #查看当前所在运行级别

设置默认级别

systemctl set-default granhical/runlevel5    #设置开机默认级别

破解root密码

 #重启过程中按e
 #在linux16行末尾添加 rd.break 按Ctrl+x
mount -o remount,rw /sysroot
chroot /sysroot
echo "123" |password --stdin root
touch .autorelabel
exit
exit

系统用户与组

/etc/passwd 用户信息文件

/etc/shadow 用户密码信息文件  

/etc/group 用户组配置文件

创建用户

useradd zhangsan
-u #指定用户的uid
-g #指定用户的基本组
-G #指定附属组,可以有多个, 但是这些附属组必须是系统内已经存在的
-c #指定描述
-d #指定家目录
-M #不建立家目录
-s #指定shell
-e #指定用户过期时间, 日期
-f #指定用户过期时间, 天数
#useradd -u 1010 zhangsan

针对已有用户修改属性

usermod 
选项等同于useradd
-L 锁定用户
-U 解除锁定
-l 改名

赋予密码

echo "123" |passwd --stdin zhangsan    #指定zhangsan用户密码为“123”

删除用户

userdel zhangsan     #删除zhangsan
userdel -r zhangsan    #删除关于zhangsan所有

组创建

groupadd cwd    #创建cwd组
groupadd -g 1001 cwd    #指定gid创建cwd

组删除

groupdel cwd    #删除cwd组

添加删除成员到组

gpasswd -a cw1 cwd    #添加
gpasswd -d cw1 cwd    #删除
gpasswd -M cw1,cw2 cwd    #同时添加多个用户

系统文件权限

r, w, x:可读、可写、可执行(r表示数字为4,w为2,x为1)

查看文件属性

ls -l test.txt    #查看此文件信息
-rw-r--r-- 1 root root 0 12月 23 10:33 test.txt    #权限 创建时间 创建用户等信息

第一栏代表这个文件的类型与权限 第一个字符代表这个文件是“目录、文件或链接文件等等”: [ d ]则是目录,例如上表文件名为“.config”的那一行; [ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行; [ l ]则表示为链接文件(link file); [ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备); [ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备) 接下来的rwx权限字符,以三个为一组: 第一组为“文件拥有者可具备的权限”; 第二组为“加入此群组之帐号的权限”; 第三组为“非本人且没有加入本群组之其他帐号的权限 第二栏表示有多少文件名链接到此节点 第三栏表示这个文件(或目录)的“拥有者账号” 第四栏表示这个文件的所属群组 第五栏表示这个文件的容量大小,默认单位是Bytes(字节) 第六栏表示这个文件的创建日期或者是最近修改日期 第七栏为这个文件的文件名

权限更改(所属组、拥有者、权限设置)

chgrp    #更改文件所属组
chown    #更改文件拥有者
chmod    #设施文件权限
chmod +x test.txt    #给此文件添加执行权限

系统安装软件方式

  • rpm方式

优点:无需网络安装软件

缺点:无法解决软件依赖

rpm  -ivh   #安装
rpm  -Uvh   #升级安装,未装则安装
rpm  -Fvh   #更新安装,未装则不装
rpm  -e     #卸载(--nodeps忽略依赖,强制卸载)
rpm  -q     #查看软件是否安装
rpm  -ql    #查看软件所有的安装文件列表
rpm  -qc    #查看软件的配置文件
rpm  -qd    #查看软件的模板文件
rpm  -qf    #查看命令文件由哪个软件所装
  • yum方式

优点:自动解决软件依赖

缺点:无法定制化安装

yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
yum info package1 #显示安装包信息package1 
yum list #显示所有已经安装和可以安装的程序包
yum provides #文件名  查看文件属于哪一个包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息
yum search string #根据关键字string查找安装包
yum remove | erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
yum clean, yum clean all (yum clean packages; yum clean oldheaders) #清除缓存目录下的软件包及旧的headers

仅下载

mkdir /http-rpm    #创建目录
yum -y install --downloadonly --downloaddir=/http-rpm httpd    #安装
cd /http-rpm    #进入
yum -y localinstall *.rpm    
  • 案例:安装mysql

首先挂载mysql包

tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
cd /usr/local/
mv mysql-5.7.20-linux-glibc2.12-x86_64  mysql
echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
source /etc/profile
rm -rf /var/run/yum.pid
yum remove -y mariadb-libs
useradd  mysql
mkdir -p /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/data
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#以下为配置文件编写,复制即可
cat >> /etc/my.cnf << end
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=6
port=3306
[mysql]
socket=/tmp/mysql.sock
prompt=mysql>
end
#分隔符
cat >> /etc/systemd/system/mysqld.service << end
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
end
systemctl restart mysql

linux磁盘分区

虚拟机扫描磁盘

echo "- - -" >> /sys/class/scsi_host/host0/scan
echo "- - -" >> /sys/class/scsi_host/host1/scan
echo "- - -" >> /sys/class/scsi_host/host2/scan 
fdisk -l    

磁盘分区

fdisk /dev/sdb    
#以下为进入分区程序后的分区方式
     p: 显示当前硬件的分区,包括没有保存的改动
     n: 创建一个新的分区
     d:删除一个分区
     w: 保存并退出
     q: 不保存退出
     t: 修改分区类型(文件系统类型)
     l: 显示所支持的所有类型
mkfs.xfs /dev/sdb1    #格式化磁盘为xfs格式

磁盘挂载

mount /dev/sdb1 /data

网络附加存储

NFS网络文件系统

服务端配置

mkdir /data    
echo "/data *(rw,sync,no_root_squash)" > /etc/exports    #对目录进行权限设置
systemctl start rpcbind nfs
systemctl enable rpcbind nfs
#所有网段都可访问 192.168.8.0/24 8.0都可以访问
#rw:读写访问
#sync:所有数据在请求时写入共享
#no_root_squash:用户具有根目录的完全管理访问权限 
  • 客户端配置
yum install -y nginx
systemctl start nginx
showmount -e 192.168.8.6
mount -t nfs 192.168.8.6:/data /usr/share/nginx/html
echo "192.168.8.6:/data usr/share/nginx/htmo nfs defaults._netdev 0 0" >> /etc/fstab

iscsi

一个基于 TCP/IP 的协议,主要用于通过 IP 网络仿真 SCSI,从而为远程块存储设备提供数据传输和管理。 说白了,就是通过网络由专门的服务器提供存储管理,以实现数据的远程储存,便于数据的集中管理,从而 简化了数据复制、迁移和容灾。

服务端安装与配置

yum -y install targetd targetcli
systecmtl start tatget
systemctl enable target
systemctl status target
#当出现"ImportError: cannot import name ALUATargetPortGroup"
yum install python-rtslib -y    #进行此条命令
targetcli    #进入配置模式
/backstores/block create server0.disk1 /dev/sdb
/iscsi create iqn.2022-10.com.bdqn:disk1
/iscsi/iqn.2022-10.com.bdqn:disk1/tpg1/acls create iqn.2022-10.com.bdqn:client1
#此处配置的是客户端名
/iscsi/iqn.2022-10.com.bdqn:disk1/tpg1/luns create /backstores/block/server0.disk1
exit

客户端安装与配置

yum -y install iscsi-initiator-utils
echo "InitiatorName=iqn.2022-10.com.bdqn:client1" > /etc/iscsi/initiatorname.iscsi
systemctl start iscsi
systemctl enable iscsi
iscsiadm -m discovery -t st -p 192.168.8.10 -l   #链接
lsscsi
gdisk /dev/sdb
partprobe /dev/sdb   #识别新设备
cat /proc/partitions
mkdir /iscsi
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /data
echo "/dev/sdb1 /data  xfs defaults,_netdev 0 0" >> /etc/fstab   #永久挂载

系统启动流程和服务管理

1、BIOS(Basic Input Output System 基本输入输出系统 )加电自检、硬件初始化、引导操作系统

2、读取并且执行第一个开机设备中的MBR(Master Boot Record 主引导记录 )的 bootloader(grub程序:Grand unified bootloader 大统一启动加载器 )

3、依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序

boot loader主要功能如下: 提供选单:用户可以选择不同的开机项目 载入核心文件:直接指向可开机的程序区域来开始操作系统 转交其他loader:将开机管理功能转交给其他Loader负责

内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载: vmlinuz-3.10.0-514.el7.x86_64 内核文件 initramfs-3.10.0-514.el7.x86_64.img 虚拟文件系统

可以使用:lsinitrd 命令查看虚拟文件系统。 [root@localhost boot]# lsinitrd initramfs-3.10.0-957.el7.x86_64.img

如果是sysvinit启动程序(linux6版本) 4、内核启动init进程 5、系统初始化 6、init找到/etc/inittab文件,决定系统的运行级别(X) 7、触发相应的运行级别的事件,运行/etc/rcX.d下的脚本 8、执行/etc/rc.local文件,来到登录界面 9、输入用户名密码,进入到系统中

如果是systemd启动程序(Linux7版本) GRUB2相较于GRUB一代的提升:更健壮、可移植、更强大。支持 BIOS、uEFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux 系统,如苹果HFS文件系统和Windows的NTFS文件系统 systemd 是 linux 系统中最新的初始化系统(init),它主要的设计目标 是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,但是时至今日 ubuntu 也采用了

4、在硬件驱动加载成功后,内核会主动呼叫systemd程序,并以 default.target流程开机 5、systemd执行sysinit.target初始化系统及basic.target准备操作系统 6、systemd启动multi-user.target下的本机与服务器服务 7、systemd执行multi-user.target下的/etc/rc.d/rc.local文件 8、systemd执行multi-user.target下的getty.target及登录服务 9、systemd执行graphical需要的服务

Init和Systemd的区别

init

1、启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程

2、启动脚本复杂,Init进程只是执行启动脚本,不管其他事情,脚本需要自己处 理各种情况,这往往使得脚本变得很长

3、由Linux内核加载运行,位于 /sbin/init ,是系统中第一个进程,PID永远为1

对于支持 service 的程序,安装的时候,会自动的在 /etc/init.d 目录添加一 个配置文件。当我们使用 service 控制程序时,比如执行开启httpd的服 务:service httpd start 。那么我们的 service 就会开启 /etc/init.d/httpd 配置文件里面指向的 /usr/sbin/httpd 可执行文件

systemd

1、按需启动服务,减少系统资源消耗。

2、尽可能并行启动进程,减少系统启动等待时间

3、由Linx内核加载运行,位于 /usr/lib/systemd/system,是系统中第一个进程, PID永远为1

对于支持 systemd 的程序,安装的时候,会自动的在 /usr/lib/systemd/system 目录添加一个配置文件。当我们使用 systemctl 控制该程序时,比如执行开启httpd服务:systemctl start httpd.service 。 那么我们的 systemctl 就会开启 httpd.service 配置里面指向的 /usr/sbin/httpd 可执行文件

如果我们想让该程序开机启动,我们可以执行命令 systemctl enable httpd,这个命令相当于在 /etc/systemd/system 目录添加一个软链接,指 向 /usr/lib/systemd/system 目录下的 httpd.service 文件。这是因为开机 时,Systemd只执行 /etc/systemd/system 目录里面的配置文件。

永久设置开机模式:

systemctl set-default multi-user.target/runlevel3    #开机默认为文本模式
systemctl set-default graphical.target/runlevel5    #开机默认为图形模式

二、Systemd服务管理

Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是 克服 sysvinit 固有的缺点,提高系统的启动速度。systemd和ubuntu的 upstart是竞争对手,从15.04版本开始,Ubuntu也已经采systemd作为其 标准的系统初始化系统.

系统初始化需要做的事情非常多。需要启动后台服务,比如启动 SSHD 服务; 需要做配置工作,比如挂载文件系统。这个过程中的每一步都被systemd 抽象 为一个配置单元,即 unit。可以认为一个服务是一个配置单元;一个挂载点 是一个配置单元;一个交换分区的配置是一个配置单元;

Service unit:系统服务,最常见的类型 Target unit:多个 Unit 构成的一个组,执行环境类型 Device Unit:硬件设备 Mount Unit:文件系统的挂载点 Automount Unit:自动挂载点 Path Unit:侦测特定文件或目录类型的 Scope Unit:不是由 Systemd 启动的外部进程 Slice Unit:进程组 Snapshot Unit:Systemd 快照,可以切回某个快照 Socket Unit:进程间通信的 socket服务 Swap Unit:swap 文件 Timer Unit:循环执行的服务

Rhel6 用 service 和 chkconfig 来管理服务,它是 SystemV 架构下的一个工具。

Rhel7 是用 systemctl 来管理服务,它融合了之前的 service 和 chkconfig 的功能于一体。 可以使用它永久性或只在当前会话中启用/禁用服务。systemctl 是 systemd 架构下的一个工具。

动作 Rhel6 旧指令 Rhel7新指令 启动某服务

#centos6
service  network  start    
#centos7
systemctl  start   network

停止某服务

#centos6
service  netowrk   stop                     
#centos7
systemctl  stop  network

重启某服务

#centos6
service  netowrk   restart                  
#centos7
systemctl  restart  network

检查服务状态

#centos6
service  netowrk  status                    
#centos7
systemctl  status  network

删除某服务

chkconfig  --del  httpd

使服务开机自启动

#centos6
chkconfig  --level   5  httpd   on      
#centos7
systemctl   enable  httpd

使服务开机不自启动

#centos6
chkconfig  --level   5  httpd   off     
#centos7
systemctl   disable  httpd

显示所有已启动的服务

#centos6
chkconfig  --list                       
#centos7
systemctl list-unit-files | grep enabled

加入自定义服务

#centos6
chkconfig  --add  test      
#centos7
systemctl   load  test

查询服务是否开机自启

#centos6
chkconfig --list | grep httpd           
#centos7
systemctl  is-enabled   httpd

查看启动失败的服务

systemctl  --failed

systemd的一些常用命令: 列出所有可用单元 :

systemctl  list-unit-files

列出所有运行的单元:

systemctl list-unit-files | grep enabled

列出所有可用服务:

systemctl list-unit-files  --type=service

列出所有运行的服务:

systemctl list-unit-files  --type=service | grep enabled

屏蔽httpd服务:

systemctl  mask httpd

取消屏蔽

httpd: systemctl unmask httpd

RHEL7的服务systemctl脚本存放在:/usr/lib/systemd/目录,有系统 (system)和用户(user)之分,像需要开机不登陆就能运行的程序,存 在系统服务里,即:/usr/lib/systemd/system目录下。每一个服务 以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],每个部 分内部是一些等号连接的键值对,注意,键值对的等号两侧不能有空格。

vim /usr/lib/systemd/system/sshd.service 
[Unit] 
Description=OpenSSH server daemon 
Documentation=man:sshd(8) man:sshd_config(5) 
After=network.target sshd-keygen.service 
Wants=sshd-keygen.service 
[Service]
Type=notify 
EnvironmentFile=/etc/sysconfig/sshd 
ExecStart=/usr/sbin/sshd -D $OPTIONS 
ExecReload=/bin/kill -HUP $MAINPID 
KillMode=process 
Restart=on-failure 
RestartSec=42s 
[Install] 
WantedBy=multi-user.target

[Unit] [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及 配置与其他 Unit 的关系。它的主要字段如下。 Description:简短描述 Documentation:文档地址 Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败 Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后 启动 After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前 启动 Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行 Condition...:当前 Unit 运行必须满足的条件,否则不会运行 Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败

[Service]

[Service]部分是服务的关键,是服务的一些具体运行参数的设置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。 Type:定义启动时的进程行为。它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程 会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继 续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下 执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:启动当前服务的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当前服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括 always(总是重启)、on-success、on-failure、on-abnormal、on abort、on-watchdog TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 Environment:指定环境变量

[install] [Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开 机启动。它的主要字段如下。 WantedBy:它的值是一个或多个 Target,当前 Unit 激活时 (enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中 RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号 链接会放入/etc/systemd/system目录下面以 Target 名 + .required后 缀构成的子目录中 Alias:当前 Unit 可用于启动的别名 Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit 注意: 如果服务没有Install段落,一般意味着应该通过其它服务自动调用它们

Target 简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说, Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状 态。 传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。 不同的是,RunLevel 是互斥的,不可能多个RunLevel同时启动,但是多个 Target可以同时启动。

//查看当前系统的所有 Target

systemctl list-unit-files --type=target

// 查看一个 Target 包含的所有 Unit

systemctl list-dependencies multi-user.target

//查看启动时的默认 Target

systemctl get-default

//设置启动时的默认 Target

systemctl set-default multi-user.target

//切换 Target 时,默认不关闭前一个 Target 启动的进程,

systemctl isolate

命令改变这种行为, //关闭前一个 Target 里面所有不属于后一个 Target 的进程

systemctl isolate multi-user.target

系统计划调度任务

1.一次性任务-at

yum -y install at
systemctl start atd
systemctl enable atd
at 23:30    #在23:30执行以下命令
tar zcf /backup/etc-boot_$(date +%F).tar.gz  /etc  /boot 
ctrl+d

atq #列出所有at任务  

atrm #删除at任务  

at -c 2 #显示第二条at任务内容

2.batch: batch直接调用at运行计划任务; batch不同于at的地方仅在于其所生成的任务计划是在系统空闲时执行的, 故batch命令后不能指定时间。

batch
tar zcf /backup/etc-boot_$(date +%F).tar.gz  /etc  /boot 
ctrl+d 

3.crond 周期性计划任务

yum -y install crontabs #crontans下载安装

crontab -e -u 用户名 0-59 0-23 1-31 1-12 0-7 命令 分 时 日 月 周

每分钟 2,5,7,9 3 * * * 每天的3点31分

//通常表示时间技巧: :表示任何时刻都接受的意思,所有时间段位上不能同时为 数字:表示具体某一小时某一分钟等,如 8 8 8 8 * 表示每年的8月 8日8时8分 ,:表示分隔时段,表示一段时间范围,如 8 9,13 * * * 表示每天 9:08和13:08 */: 在对应的时间位的有效取值上每#一次,如 */8 * * * * 表示每 8分钟一次 -:某个时间位上的连续区间,如 10-50/8 * * * * 表示第10分和 第50分之间每8分钟一次

案例: mysql数据库: 每周日晚上23:30做一次完整备份; 周一到周六晚上23:30做增量备份(扩展,自己查) 1.安装mysql5.7(参照笔记二进制安装) 2.改密码

mysql_secure_installation
mysqladmin -u root -p password    #更改root的密码,默认空密码第一个直接回车

3.复制world.sql到/root,登录数据库

mysql -uroot -p123.com     #-p后跟的是我设置的密码
source /root/world.sql 

授权 所有权限 库名.表名 用户 主机名 密码

grant all on test.* to  lisi@'%' identified by '123456'; 
#数据库内,命令翻译为添加能够设置test中所有表的用户lisi,‘%’为可远端登录
#密码为‘123456’

%表示任何人都能访问

       插入     删除     更新     查询     创建 删除  

all = insert + delete + update + select   create drop

4.查看库,切换库,查看表  

show databases; #查看数据库名
create database world; #创建数据库
use world; #进入数据库
show tables; #查看表名称
desc #表名称 查看表结构
create table stu(id int,name varchar(20);    #创建数据表
insert into stu values(1,'zhangsan'); #向表中插入数据
select * from stu; #查看表的内容
source #/备份文件路径/文件名

5.创建备份脚本

mkdir /sh 
vim  /sh/backup.sh
    #!/bin/bash
    /usr/local/mysql/bin/mysqldump -uroot -p123.com --all-databases > /backup/mysql_$(date                 +%F).sql

6.创建计划任务

crontab -e
30 23 * * 0 /bin/bash /sh/backup.sh 
crontab -l  #查看计划任务
crontab -r  #删除计划任务


目录
相关文章
|
5天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
21 0
|
6天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
1月前
|
Ubuntu 安全 Unix
【Linux学习】零基础学习Linux
【Linux学习】零基础学习Linux
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
5天前
|
Unix Linux Windows
Linux的学习之路:3、基础指令(2)
Linux的学习之路:3、基础指令(2)
28 0
|
5天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
20 1
|
5天前
|
存储 安全 Linux
Linux的学习之路:9、冯诺依曼与进程(1)
Linux的学习之路:9、冯诺依曼与进程(1)
18 0
|
5天前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
13 0
|
20天前
|
Linux 应用服务中间件 网络安全
小白学习Linux的学习建议和阶段
【4月更文挑战第5天】小白学习Linux的学习建议和阶段
48 0
|
22天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
38 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境