一、Linux定时任务调度
-
crond 任务调度:
-
任务调度:指系统在某个时间执行的特定的命令或者程序。
任务调度分类:① 系统工作:有些重要的工作必须周而复始的执行,如病毒扫描等;② 个别用户工作:个别用户可能希望执行某些程序,比如MySQL数据库的备份。
-
指令:crontab [选项]。常用选项:-e:编辑crontab定时任务;-l:查询crontab任务;-r:删除当前用户所有的crontab任务。重启任务调度:service crond restart。
-
具体示例:比如定时执行一条命令:ls -l /etc/ > /tmp/test.txt ,输入crontab -e后进入文本编辑模式中,接着输入:*/1**** ls -l /etc/ > /tmp/test.txt ,意思是每小时的每分钟执行ls -l /etc/ > /tmp/test.txt命令。其中5个占位符分别表示:
项目 含义 范围 第一个 “*” 一小时当中的第几分钟 0-59 第二个 “*” 一天当中的第几小时 0-23 第三个 “*” 一月当中的第几天 1-31 第四个 “*” 一年当中的第几月 1-12 第五个 “*” 一周当中的星期几 0-7 (0和7都代表周日) 其中 */1**** 中的 */1 代表每一分钟都执行一次。
特殊符号 含义 * 代表任何时间。比如第一个"*" 代表一小时中每分钟都执行一次 , 代表不连续的时间。比如"0 8,12,16***"代表每天8点,12点,16点的0分都各执行一次 - 代表连续的时间。比如"0 5 * * 1-6"代表在周一到周五凌晨5点0分执行一次 * /n 代表每隔多久执行一次。比如"*/10 * * * *"代表每隔10分钟执行一次 时间 含义 45 22 * * * 在22点45分执行 0 17 * * 1 每周一的17点0分执行 0 5 1,15 * * 每月1号和15号的凌晨5时0分执行 40 4 * * 1-5 每周一至周五的凌晨4时40分执行 */10 4 * * * 每天凌晨4时每隔10分钟执行一次 0 0 1,15 * 1 每月1号和15号,每周一0时0分都会执行 【注意:星期几和几号最好不要同时出现,因为都是定义天,非常容易让管理员混淆】
再比如:每天凌晨2点将MySQL数据库的testdb备份到文件中。具体操作步骤为:
① crontab -e;
② 0 2 * * * mysqldump -u root -p root testdb > /home/db.bak
-
-
at 定时任务:
-
at 指令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
-
at 指令是一次性定时计划任务,执行完一个任务后不再执行此任务了。
-
在使用at 指令时,一定要保证atd进程的启动,可以使用相关指令来查看 (比如:ps -ef | grep atd)。
-
指令:at [选项] [时间]。使用Ctrl + D 结束at指令的输入。删除一个at任务:atrm [任务编号]。常见选项:
选项 含义 -m 当指定的任务完成后,将给用户发送邮件,即使没有标准输出 -I atq的别名 -d atrm的别名 -v 显示任务将被执行的时间 -c 打印任务的内容到标准输出 -V 显示版本信息 -q <队列> 使用指定的队列 -f <文件> 从指定文件读入任务而不是从标准输入读入 -t <时间参数> 以时间参数的形式提交要运行的任务 -
at 时间定义(指定时间的方法):
① 接受在当天的 hh:mm(小时:分钟)式的时间指定。假如该时间已经过去,那么会在第二天执行。比如:04:00。
② 使用 midnight(深夜),noon(中午),teatime(下午4点)等比较模糊的词语来指定。
③ 采用12小时计时,即在时间后面加上AM或者PM。
④ 指定命令执行的具体日期,指定格式为 month day (月 日)或者 mm/dd/yy (月/日/年)或者 dd.mm.yy(日.月.年),指定的日期必须跟在指定的时间后面。比如:04:00 2022-03-1。
⑤ 使用相对计时法。指定格式:now + count time - units,now为当前时间,time-units为时间单位,可以为 minutes,hours,days,weeks。count为时间数量,如几天,几小时等,now + 5 minutes。
⑥ 直接使用today,tomorrow来指定完成命令的时间。
-
二、Linux磁盘分区和挂载
- Linux分区:
-
对于Linux来说,无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构。Linux中每个分区都是用来组成整个文件系统的一部分。
-
Linux采用了一种叫 “载入” 的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
-
查看所有设备挂载情况:lsblk 指令 或者 lsblk -f
-
硬盘说明:
① Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
② 对于IDE硬盘,驱动器标识符为:“hdx~”,其中 hd 表示分区所在设备的类型,这里指IDE硬盘。x 为盘号(a为基本盘,b为基本从属盘,c为辅助盘,d为辅助从属盘)。~ 代表分区,前4个分区用数字1-4表示,它们是主分区或者扩展分区。从5开始就是逻辑分区。比如:hda3 表示第一个IDE硬盘上的第三个主分区或扩展分区,hbd2 表示第二个IDE硬盘上的第二个主分区或扩展分区。
③ 对于SCSI硬盘,标识为 “sdx~”,sd 表示分区所在设备的类型,其余和IDE硬盘的表示方法一样。【分区的指令:fdisk /dev/ + [需要分区的硬盘]。开始分区后输入n,新增分区;然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w,写入分区并退出,若不保存退出则输入q。】
【格式化磁盘指令:mkfs -t ext4 /dev/ + [需要格式化的硬盘]。其中ext4是分区类型。】
【挂载指令:mount [设备名称] [挂载目录]。比如:mount /dev/sdb1 /newdisk。解除挂载:umount [设备名称 或者 挂载目录]。比如:umount /dev/sdb1。注意:用命令行挂载重启后失效(即命令行挂载是临时的挂载)】
【永久挂载:通过修改 /etc/fstab 实现挂载。添加后执行 mount -a 即刻生效。】
-
磁盘情况查询 指令:df -h
dh -h + /目录:查询指定目录的磁盘占用情况,默认为当前目录。
其他常用选项:-s:指定目录占用大小汇总;-h:带计量单位;-a:含文件;–max-depth=1:子目录深度;-c:列出明细的同时,增加汇总值。 -
磁盘情况-工作实用指令:
① 统计 /opt 文件夹下文件的个数:ls -l /opt | grep “^-” | wc -l
② 统计 /opt 文件夹下目录的个数:ls -l /opt | grep “^d” | wc -l
③ 统计 /opt 文件夹下文件的个数,包括子文件夹里的:ls -lR /opt | grep “^-” | wc -l
④ 统计 /opt 文件夹下目录的个数,包括子文件夹里的:ls -lR /opt | grep “^d” | wc -l
⑤ 以树状显示目录结构:tree /opt/
-
三、Linux网络配置
-
虚拟机、主机的网络原理图:
-
ping 指令:测试主机之间的网络连通性。
- 基本语法:ping [目的主机ip]。
- 案例:ping www.baidu.com。
-
Linux网络环境配置:
-
第一种方法(自动获取):登录后,通过界面来设置自动获取ip。特点:Linux启动后会自动获取ip;缺点:每次都是自动获取。
-
第二种方法(指定ip地址):直接修改配置文件来指定ip,并可以连接到外网(程序员推荐)。
① 编辑 vi /etc/sysconfig/network-scripts/ifcfg-ens33
② 配置 vmnet8
③ 重启网络服务或重启系统:service network restart
-
设置主机名:
① 为了方便记忆,可以给Linux系统设置主机名,也可以根据需要修改主机名。
② 操作指令:hostname 【查看主机名】。
③ 修改文件在 /etc/hostname 指定,修改后重启生效。 -
设置host映射:可以通过主机名,来找到某个Linux系统。比如:ping 某个Linux系统的ip,可以替代为ping 该系统的主机名。ping 192.168.1.1 => ping [hostname]。
① Windows系统:在 C:\Windows\System32\drivers\etc\hosts 文件中指定。
比如:192.168.200.130 hspedu10
② Linux系统:在 /etc/hosts 文件中指定。当配置Linux集群时,可以通过host映射,以主机名代替具体Linux系统的地址。
-
四、Linux进程管理
在Linux系统中,每个执行的程序都被称为一个进程。每一个进程都分配一个ID号(pid,进程号)。每个进程都可能以两种方式存在:前台与后台。前台进程就是用户目前屏幕上可以进行操作的进程。后台进程则是实际在操作,但是由于屏幕上无法看到的进程,通常使用后台方式执行。一般的系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
-
显示系统执行的进程:ps [选项] 指令 用来查看目前系统中有哪些正在执行的进程,以及它们的执行情况。常用选项:-a:显示当前终端的所有进程信息;-u:以用户的格式显示进程信息;-x:显示后台进程运行的参数。
字段 说明 PID 进程识别号 TTY 终端机号 TIME 此进程所消耗CPU时间 CMD 正在执行的命令或进程名 USER 用户名称 %CPU 进程占用CPU的百分比 %MEM 进程占用的物理内存的百分比 VSZ 进程占用的虚拟内存大小(单位:KB) RSS 进程占用的物理内存大小 STAT 进程状态:S表示睡眠;s表示该进程是会话的先导进程;N表示进程拥有比普通优先级更低 ;R表示正在运行;D表示短期等待;Z表示僵死进程;T表示被跟踪或者被停止等 COMMAND 启动进程所用的命令和参数,如果过长会截断显示 -
指令:ps -aux | grep xxx ,查看有没有xxx进程。ps -aux 显示全部的进程。
比如:ps -aux | grep sshd -
以全格式显示当前所有的进程:ps -ef
-
终止进程:kill [选项] [进程号] 通过进程号杀死进程。常用选项:-g 强迫进程立即停止。
killall [进程名称] 通过进程名称杀死进程,也支持通配符,这在系统因为负载过大而变得很慢时很有用。【该进程的所有子进程都会被沙掉】
比如:kill sshd 进程。查询启动sshd:/bin/systemctl start sshd.service。 -
查看进程树:pstree [选项] ,可以更加直观的来看进程信息。常用选项:-p:显示进程的PID;-u:显示进程的所属用户。
-
五、Linux服务(Service)管理
-
服务(service)的本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(MySQL,sshd等),因此又称为守护进程,是Linux中非常重要的概念。
-
Service的管理指令:
-
service [服务名] [start | stop | restart | reload | status]。
-
在CentOS7.0之后很多服务不再使用service,而是使用systemctl。
-
service指令管理的服务在 /etc/init.d 查看。
-
比如:service network status 查看网络服务状态。service network stop 关闭网络服务。
-
查看服务名:
① 使用 setup, 查看全部系统服务。
② ls - l /etc/init.d 看到service指令管理的服务。 -
服务的运行级别(runlevel):Linux系统有7种运行级别,常用的是3和5。
运行级别 说明 0 系统停机状态,系统默认运行级别不能为0,否则不能正常启动 1 单用户工作状态,root权限,用于系统维护,禁止远程登录 2 多用户状态(没有NFS),不支持网络 3 完全的多用户状态(有NFS),登录后进入控制台命令行模式 4 系统未使用,保留 5 X11控制台,登录后进入图形GUI模式 6 系统正常关闭并重启,默认运行级别不能为66,否则不能正常启动 开机流程:开机 -> BIOS -> /boot -> systemd进程 -> 运行级别 -> 运行级别对于的服务。
【运行级别在 /etc/initab 中设置】 -
chkconfig 指令:可以给服务的各个运行级别设置自 启动 / 关闭。该指令管理的服务在 /etc/init.d 中可以查看。chkconfig --list [| grep xxx]
chkconfig [服务名] --list
chkconfig --level 5 [服务名] on/off 在5级别开启或关闭服务。
【注意:chkconfig重新设置服务后自启动或关闭,需要重启机器才生效】 -
systemctl 指令:systemctl [start | stop | restart | status] [服务名]。该指令在 /usr/lib/systemd/system 中查看。
systemctl设置服务的自启动状态:
① systemctl list-unit-files [| grep 服务名] :查看服务开机启动状态。
② systemctl enable [服务名] :设置服务开机启动。
③ systemctl disable [服务名] :关闭服务开机启动。
④ systemctl is-enable [服务名] :查询某个服务是否自启动。比如:查看、关闭、重启防火墙服务:systemctl status | stop |restart firewalld.service。
细节讨论:
① 关闭或启动防火墙后,立即生效。
② 这种方式只是临时生效,当系统重启后,还是回归以前对服务的设置。
③ 如果希望设置某个服务自启动或者关闭永久生效,使用 systemctl [enable|disable] [服务名]。 -
打开或关闭指定端口:在真正的生产环境,往往需要将防火墙打开,但问题是,如果打开防火墙,那么外部请求数据包就不能跟服务器监听端口通信。这时,需要打开指定的端口。比如80端口,22端口等。可以通过 firewall 指令实现。
① 打开端口:firewall-cmd --permanent --add-port=端口号/协议。
② 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议。
③ 重新载入,才能生效:firewall-cmd --reload。
④ 查询端口是否开放:firewall-cmd --query-port=端口号/协议。
-