- A+
所属分类:linux技术
目录
虚拟机联网
查看IP地址
#centos系列! [root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.93.200 netmask 255.255.255.0 broadcast 192.168.93.255 inet6 fe80::20c:29ff:fe0c:5043 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:0c:50:43 txqueuelen 1000 (Ethernet) RX packets 78 bytes 8852 (8.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 81 bytes 9229 (9.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ifconfig命令查看ip或者用ip r命令查看路由和网关,如果这两个命令都无法显示ip地址,操作步骤如下: 首先输入ip addr,查看ens33(不一定是ens33)网卡配置,输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT权限改为yes
设置静态IP(NAT模式)
#centos系列 注意:配置静态ip时不能起冲突,可以先在本机ping一下你想要配置的ip,ping得通就不要用,ping超时可以使用。 [root@linux-server ~]# cd /etc/sysconfig/network-scripts/ #网卡配置文件存放路径 [root@linux-server network-scripts]# cp ifcfg-ens33 ifcfg-ens33.bak #将源文件备份 [root@linux-server network-scripts]# vi ifcfg-ens33 #编辑网卡配置文件 TYPE="Ethernet" #网络类型:以太网类型 PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" #默认值none或static 这两种属于静态获取ip地址,dhcp自动获取ip IPADDR=192.168.93.200 #设置静态ip地址 GATEWAY=192.168.93.2 #设置网关,nat模式网关是2,桥接为1 NETMASK=255.255.255.0 #设置子网掩码 #PREFIX=24 DEFROUTE="yes" #是否设置默认路由,yes表示该配置 NAME="ens33" #网卡名称,可以不存在 DEVICE="ens33" #设备名称 ONBOOT="yes" #开机启动 DNS1=114.114.114.114 #dns全国通用地址,dns最多可以设置三个 DNS2=8.8.8.8 #谷歌的dns DNS3=202.106.0.20 #北京的DNS。 #重启网络 [root@linux-server ~]# systemctl restart NetworkManager #centos8以后 [root@linux-server ~]# systemctl restart network #centos7
ubuntu配置静态IP
#查找网络接口 root@ubuntu:~# ip link #编辑 netplan 配置文件 root@ubuntu:~# vi /etc/netplan/01-netcfg.yaml network: version: 2 ethernets: enp0s3: dhcp4: no addresses: - 192.168.93.201/24 gateway4: 192.168.93.2 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 #配置生效 root@ubuntu:~# netplan apply
shell脚本实例
使用脚本判断主机所在网络内在线的主机IP有哪些
#!/bin/bash subnet="192.168.1" #定义子网前缀 start=1 end=254 #ip地址范围 #使用ping 测试一个 IP 地址 #函数 ping_test() { local ip=$1 if ping -c 1 -W 2 $ip &> /dev/null; #发送一个 ICMP 请求,超时时间为 2 秒 then echo "$ip is online" fi } #遍历子网中的所有 IP 地址 for ((i=start; i<=end; i++)) do ip="$subnet.$i" ping_test $ip & #调用 ping_test 函数,并将其放在后台执行(使用 &) done # 等待所有后台进程完成 wait [root@linux-server ~]# chmod +x network.sh [root@linux-server ~]# .network.sh or [root@linux-server ~]# bash network.sh
使用while read line和/etc/passwd,计算用户id总和
#!/bin/bash # 初始化用户ID总和变量 total_uid=0 # 读取 /etc/passwd 文件的每一行 while IFS=: read -r username password uid gid info home shell; do # 将当前行的UID加到总和中 total_uid=$((total_uid + uid)) done < /etc/passwd #指定输入文件为 /etc/passwd # 输出用户ID总和 echo "Total UID sum: $total_uid" 解读: 使用 IFS=: 指定字段分隔符为冒号,读取/etc/passwd 文件的每一行,并将字段分别赋值给 username、password、uid、gid、info、home 和 shell 变量。
使用递归调用,完成阶乘算法实现
#!/bin/bash # 定义递归阶乘函数 factorial() { local n=$1 if [[ $n -eq 0 ]]; then echo 1 else echo $(( n * $(factorial $((n - 1))) )) fi } # 测试阶乘函数 for i in {0..10}; do result=$(factorial $i) echo "$i! = $result" done 解读: 定义递归函数: * factorial() 是一个递归函数,接受一个参数 n。 * 如果 n 等于 0,返回 1(因为 0!=1), 否则,返回 n 乘以 factorial(n - 1) 的结果。 测试阶乘函数: * 使用 for 循环从 0 到 10 测试阶乘函数。 * 调用 factorial 函数并将结果存储在 result 变量中。 * 输出结果。
求10个随机数的最大值与最小值
#!/bin/bash # 创建索引数组 random_numbers=(1 3 100 9 10 18 0 77 96 2) # 初始化最大值和最小值 max_value=${random_numbers[0]} min_value=${random_numbers[0]} # 遍历数组,找到最大值和最小值 for num in "${random_numbers[@]}"; do if [[ $num -gt $max_value ]]; then max_value=$num fi if [[ $num -lt $min_value ]]; then min_value=$num fi done # 输出最大值和最小值 echo "Maximum value: $max_value" echo "Minimum value: $min_value"
索引数组和关联数组,字符串处理,高级变量
索引数组
特点
- 索引数组的键是整数,通常从0开始。
- 键值是自动生成的,除非显式指定。
范例: # 创建索引数组 array=(apple banana pear) # 访问元素 echo "${array[0]}" # 输出: apple echo "${array[1]}" # 输出: banana echo "${array[2]}" # 输出: pear # 获取数组长度 echo "${#array[@]}" # 输出: 3 # 遍历数组 for fruit in "${array[@]}"; do echo "$fruit" done # 添加元素 array+=("date") echo "${array[@]}" # 输出: apple banana pear date # 删除元素 unset array[1] echo "${array[@]}" # 输出: apple pear date
关联数组
特点
- 关联数组的键可以是任意字符串。
- 需要在声明时使用 declare -A。
范例: # 声明关联数组 declare -A fruits # 添加元素 fruits[apple]="red" fruits[banana]="yellow" fruits[pear]="green" # 访问元素 echo "${fruits[apple]}" # 输出: red echo "${fruits[banana]}" # 输出: yellow echo "${fruits[pear]}" # 输出: green # 获取所有键 echo "${!fruits[@]}" # 输出: apple banana pear # 获取所有值 echo "${fruits[@]}" # 输出: red yellow green # 遍历数组 for key in "${!fruits[@]}"; do echo "$key: ${fruits[$key]}" done # 删除元素 unset fruits[banana] echo "${!fruits[@]}" # 输出: apple pear
字符串处理
常用命令和操作
- length=${#string}:获取字符串长度。
- substring=${string:start:length}:获取子字符串。
- replace=${string//pattern/replacement}:替换字符串中的模式。
- lowercase=${string,,}:转换为小写。
- uppercase=${string^^}:转换为大写。
范例: # 定义字符串 string="Hello, World!" # 获取字符串长度 length=${#string} echo "Length: $length" # 输出: Length: 13 # 获取子字符串 substring=${string:0:5} echo "Substring: $substring" # 输出: Substring: Hello # 替换字符串中的模式 replace=${string//World/Universe} echo "Replace: $replace" # 输出: Replace: Hello, Universe! # 转换为小写 lowercase=${string,,} echo "Lowercase: $lowercase" # 输出: Lowercase: hello, world! # 转换为大写 uppercase=${string^^} echo "Uppercase: $uppercase" # 输出: Uppercase: HELLO, WORLD!
高级变量使用
参数扩展
- ${variable:-default}:如果变量未设置或为空,则使用默认值。
- ${variable:=default}:如果变量未设置或为空,则设置变量为默认值。
- ${variable:?message}:如果变量未设置或为空,则输出错误消息并退出。
- ${variable:+other}:如果变量已设置且非空,则使用其他值。
范例: # 参数扩展 variable="" echo "${variable:-default}" # 输出: default echo "${variable:=default}" # 变量现在被设置为 "default" echo "${variable:?error message}" # 输出: default echo "${variable:+other}" # 输出: other # 未设置变量的情况 unset variable echo "${variable:-default}" # 输出: default echo "${variable:=default}" # 变量现在被设置为 "default" echo "${variable:?error message}" # 输出: default echo "${variable:+other}" # 不输出,因为变量已设置
综合示例
#!/bin/bash # 定义索引数组 fruits=("apple" "banana" "pear") # 定义关联数组 declare -A colors colors[apple]="red" colors[banana]="yellow" colors[cherry]="green" # 遍历索引数组并打印颜色 for fruit in "${fruits[@]}"; do color=${colors[$fruit]} echo "The color of $fruit is ${color:-unknown}" done # 字符串处理 sentence="The quick brown fox jumps over the lazy dog." length=${#sentence} echo "Sentence length: $length" # 替换字符串中的单词 new_sentence=${sentence//fox/tiger} echo "New sentence: $new_sentence" # 参数扩展 default_value="default" value="" echo "Value: ${value:-$default_value}" # 输出: Value: default # 设置变量 unset value echo "Value: ${value:=set_now}" echo "Value: $value" # 输出: Value: set_now # 检查变量 unset value echo "Value: ${value:?Variable not set}" # 输出错误消息并退出
进程管理
进程的生命周期状态
创建状态:
- 进程正在被创建,但尚未准备好执行
- 进程的资源尚未完全分配,例如内存、文件描述符等
- 一旦资源分配完成,进程将从新建状态进入就绪状态
就绪状态:
- 进程已经准备好执行,但尚未获得 CPU 时间片。
- 进程在就绪队列中等待调度器分配 CPU 时间。
- 当调度器选择该进程时,进程将从就绪状态进入执行状态。
执行状态:
- 进程正在 CPU 上执行。
- 进程占用 CPU 资源,执行其指令。
- 如果进程的时间片用完,将从运行状态进入就绪状态。
- 如果进程等待某个事件(如 I/O 操作完成),将从运行状态进入阻塞状态。
- 如果进程执行完毕或被终止,将从执行状态进入终止状态。
阻塞状态:
- 进程暂时停止执行,等待某个事件的发生,例如 I/O 操作完成、锁的释放等。
- 进程不在 CPU 上执行,而是等待某个外部条件满足。
- 当等待的事件发生时,进程将从阻塞状态进入就绪状态。
终止状态:
- 进程已经完成执行或被异常终止。
- 进程的资源被释放,不再占用系统资源。
- 进程进入终止状态后,通常会被操作系统清理,从进程表中移除。
特殊状态:
僵尸(Zombie)
- 进程已经终止,但其父进程尚未调用 wait 系统调用来回收其状态信息。
- 进程表项仍然存在,但不占用系统资源。
- 当父进程调用 wait 后,僵尸进程将被彻底清除。
僵死(Defunct)
- 类似于僵尸状态,但通常用于描述更长时间未能被回收的进程。
- 进程表项仍然存在,但不占用系统资源。
- 当父进程调用 wait 后,僵死进程将被彻底清除。
进程与线程的区别
进程(Process)
- 定义:进程是操作系统分配资源的最小单位。每个进程都有独立的内存空间。
- 资源:每个进程拥有独立的虚拟地址空间、文件描述符、环境变量等资源。
- 隔离性:进程之间是完全隔离的,一个进程的崩溃不会影响其他进程。
线程(Thread)
- 定义:线程是程序执行的CPU调度的最小单位。一个进程中可以有多个线程,这些线程共享同一内存空间和其他资源。
- 资源:线程共享所属进程的虚拟地址空间,但每个线程有自己的栈和程序计数器(PC)。
- 隔离性:线程之间的隔离性较差,一个线程的错误可能会影响整个进程中的其他线程。
#查看进程中的线程 grep -i threads /proc/PID/status
进程的结构
代码段(Text Segment)
- 存放程序的机器指令。
- 通常是只读的,防止程序意外修改自身代码。
数据段(Data Segment)
- 存放全局变量和静态变量。
- 分为初始化数据区和未初始化数据区(BSS段)。
堆(Heap)
- 动态分配的内存区域,用于存放动态分配的数据(如通过 malloc 和 new 分配的内存)。
- 堆内存的大小是可以变化的,通常是从低地址向高地址增长。
栈(Stack)
- 用于存放函数调用时的局部变量和函数参数。
- 栈内存是自动管理的,函数调用时自动分配,函数返回时自动释放。
- 栈通常是从高地址向低地址增长。
文件描述符表(File Descriptor Table)
- 存放进程打开的所有文件描述符。
- 每个文件描述符对应一个文件或设备。
环境变量(Environment Variables)
- 存放进程的环境变量,如 PATH、HOME 等。
- 环境变量在进程启动时从父进程继承。
进程控制块(Process Control Block, PCB)
- 操作系统用于管理进程的数据结构。
- 包括进程的标识符(PID)、状态(运行、就绪、阻塞等)、优先级、资源使用情况等。
进程状态
#ps aux 或者 htop 或者 top [root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 172252 10304 ? Ss 01:17 0:02 /usr/lib/systemd/systemd - root 2 0.0 0.0 0 0 ? S 01:17 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 01:17 0:00 [rcu_gp] #STAT代表了进程的状态 Ss:进程处于休眠状态,并且是一个会话领导进程 R (Running):进程正在运行或在运行队列中 S (Sleeping):进程处于休眠状态,等待某个事件发生(如 I/O 操作完成) D (Disk Sleep):进程处于不可中断的睡眠状态,通常是因为正在进行 I/O 操作。 T (Stopped):进程被停止。 Z (Zombie):进程已经完成执行,但其父进程尚未调用 wait 系统调用回收其状态信息。 t (Tracing Stop):进程因跟踪而停止,通常是在调试过程中。 W (Paging):进程正在交换(换页),即部分内存页面被换出到磁盘。 L (Has Pages Locked into Memory):进程有页面被锁定在内存中,不允许换出。 X (Dead):进程已经死亡,但在进程表中仍保留条目。 < (High Priority):进程具有高优先级。 N (Low Priority):进程具有低优先级。
IPC通信实现方式
#进程间通信(IPC):主要用于同一台计算机上不同进程之间的通信 匿名管道:仅限于父子进程之间通信,单向。使用 pipe() 系统调用创建匿名管道。 命名管道(FIFO):可以在不相关的进程之间使用,双向。使用 mkfifo() 系统调用创建命名管道。 信号:用于进程间发送简短的通知消息。使用 kill() 发送信号。使用 signal() 或 sigaction() 注册信号处理函数。 共享内存:允许多个进程访问同一块内存区域。 * 使用 shmget() 创建或获取共享内存段。 * 使用 shmat() 将共享内存段附加到进程的地址空间。 * 使用 shmdt() 从进程的地址空间分离共享内存段。 * 使用 shmctl() 控制共享内存段。 消息队列:允许进程间发送和接收消息。 * 使用 msgget() 创建或获取消息队列。 * 使用 msgsnd() 发送消息。 * 使用 msgrcv() 接收消息。 * 使用 msgctl() 控制消息队列。 信号量:用于同步进程间的访问,防止竞争条件。 * 使用 semget() 创建或获取信号量集。 * 使用 semop() 进行信号量操作。 * 使用 semctl() 控制信号量集。
RPC通信实现方式
#远程过程调用(RPC):主要用于跨网络的不同计算机之间的通信 Sun RPC: * 使用 rpcgen 工具生成客户端和服务器端的代码。 * 定义 .x 文件,描述远程过程的接口。 gRPC: * 定义 .proto 文件,描述服务接口和消息格式。 * 使用 protoc 编译器生成客户端和服务器端的代码。 Apache Thrift: * 定义 .thrift 文件,描述服务接口和数据结构。 * 使用 thrift 编译器生成客户端和服务器端的代码。 XML-RPC:基于 XML 和 HTTP 的简单 RPC 协议。 * 使用 HTTP 请求发送 XML 格式的请求和响应。 * 支持多种编程语言,如 Python、Perl 等。
前台作业与后台作业
定义: 前台作业是指当前正在终端上运行的任务,它会独占终端,用户必须等待该作业完成或手动停止后才能继续输入其他命令。 特点: * 用户可以看到作业的输出。 * 用户不能在前台作业运行时输入其他命令。 * 前台作业可以接收来自键盘的输入。
定义: 后台作业是指在后台运行的任务,不会独占终端,用户可以在作业运行的同时继续输入其他命令。 特点: * 用户看不到作业的输出,除非重定向输出。 * 用户可以在后台作业运行时继续输入其他命令。 * 后台作业不能接收来自键盘的输入。
状态转换: * 使用 Ctrl+Z 和 bg 将前台作业转到后台。 * 使用 fg 将后台作业转到前台。 * 使用 jobs 查看当前作业。 * 使用 kill + 作业编号/进程PID 结束作业。
进程管理相关操作
#搜索进程 ps aux:显示所有用户的进程详细信息。 ps -ef:显示所有进程的详细信息。 ps -p <PID>:显示指定 PID 的进程信息。 pgrep 选项 pattern 选项: -u uid: effective user,生效者 -U uid: real user,真正发起运行命令者 -t terminal: 与指定终端相关的进程 -l: 显示进程名 -a: 显示完整格式的进程名 -P pid: 显示指定进程的子进程 #负载查询 uptime 和 w 显示以下内容: 当前时间 系统已启动的时间 当前上线人数 系统平均负载(1、5、15分钟的平均负载) [root@localhost ~]# uptime 04:16:12 up 2:58, 1 user, load average: 0.06, 0.04, 0.00 [root@localhost ~]# w 04:16:30 up 2:58, 1 user, load average: 0.04, 0.03, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.93.1 01:17 0.00s 0.04s 0.00s w #虚拟内存信息 [root@localhost ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 3150508 6304 370536 0 0 7 2 26 42 0 0 100 0 0 #统计CPU和设备IO信息 此工具由sysstat包提供 [root@localhost ~]# iostat Linux 4.18.0-348.el8.0.2.x86_64 (localhost.localdomain) 2024年11月18日 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.01 0.17 0.00 0.00 99.81 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn sdb 0.03 0.87 0.00 9855 4 sda 0.75 25.83 8.79 293953 100019 scd0 0.00 0.09 0.00 1041 0 dm-0 0.66 21.03 8.61 239283 97935 dm-1 0.01 0.20 0.00 2220 0 dm-2 0.00 0.09 0.00 1044 0 #显示网络带宽使用情况 #通过EPEL源的 iftop 包 [root@localhost ~]# iftop -ni ens33 #查看网络实时吞吐量 #通过EPEL源提供 [root@localhost ~]# nload #nload 是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况, #查看进程实时状态 top 和 htop #htop由EPEL源提供 [root@localhost ~]# top top - 04:20:56 up 3:03, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 168 total, 1 running, 167 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.1 hi, 0.1 si, 0.0 st MiB Mem : 3709.8 total, 3076.1 free, 265.7 used, 368.0 buff/cache MiB Swap: 3072.0 total, 3072.0 free, 0.0 used. 3214.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 556 root 20 0 0 0 0 I 0.3 0.0 0:07.87 kworker/0:3-events 1 root 20 0 172252 10304 7924 S 0.0 0.3 0:02.39 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
losf命令
格式:losf [options] <...> 选项: -a:列出打开文件存在的进程 -c<进程名>:列出指定进程所打开的文件 -g:列出GID号进程详情 -d<文件号>:列出占用该文件号的进程 +d<目录>:列出目录下被打开的文件 +D<目录>:递归列出目录下被打开的文件 -n<目录>:列出使用NFS的文件 -i<条件>:列出符合条件的进程(4、6、协议、:端口、 @ip ) -p<进程号>:列出指定进程号所打开的文件 -u:列出UID号进程详情 -h:显示帮助信息 -v:显示版本信息。 -n: 不反向解析网络名字 范例: #列出当前所有打开的文件 [root@localhost yum.repos.d]# lsof|head COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 253,0 269 128 / systemd 1 root rtd DIR 253,0 269 128 / systemd 1 root txt REG 253,0 1597128 443680 /usr/lib/systemd/systemd systemd 1 root mem REG 253,0 2191840 50332852 /usr/lib64/libm-2.28.so systemd #查看当前哪个进程正在使用此文件 [root@localhost yum.repos.d]# lsof /usr/lib/systemd/systemd COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root txt REG 253,0 1597128 443680 /usr/lib/systemd/systemd systemd 1766 root txt REG 253,0 1597128 443680 /usr/lib/systemd/systemd (sd-pam) 1768 root txt REG 253,0 1597128 443680 /usr/lib/systemd/systemd #指定进程号,可以查看该进程打开的文件 [root@localhost yum.repos.d]# lsof -p 22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME watchdog/ 22 root cwd DIR 253,0 269 128 / watchdog/ 22 root rtd DIR 253,0 269 128 / watchdog/ 22 root txt unknown /proc/22/exe #查看指定程序打开的文件 [root@localhost yum.repos.d]# lsof -c httpd #查看指定用户打开的文件 [root@localhost yum.repos.d]# lsof -u root | more
计划任务
一次调度执行(at):
主要的用途是定期备份数据
语法格式 at <时间规格> now +5min teatime tomorrow (teatime is 16:00) 5pm august 3 2019 范例1: [root@linux-server ~ ]# yum -y install at [root@linux-server ~]# systemctl status atd #查看启动状态 [root@linux-server ~ ]# systemctl start atd #首先要启动服务 [root@linux-server ~]# at now +1min #一分钟后开始执行 at> useradd uuuu at> <EOT> #Ctrl+D 退出 job 1 at Sat Mar 21 22:34:00 2015 [root@linux-server ~]# id uuuu 范例2: [root@linux-server ~]# vim at.jobs useradd u99 useradd u00 touch /a.txt [root@linux-server ~]# at 20:33 < at.jobs
循环调度执行cron 用户级
cron任务分为: 系统cron任务:系统维护作业,/etc/crontab 主配置文件, /etc/cron.d/ 子配置文件 用户cron任务:红帽系统保存在 /var/spool/cron/USERNAME,Ubuntu系统存放在/var/spool/cron/crontabs/USERNAME,利用 crontab 命令管理 计划任务日志:/var/log/cron [root@localhost ~]# systemctl status crond [root@localhost ~]# systemctl start crond crontab -l #列出当前用户的计划任务 crontab -r #删除当前用户所有的计划任务 crontab -e #编辑当前用户的计划任务 crontab -u meng -e #使用meng用户创建 crontab -u meng -l #查看meng用户的计划任务 管理员可以使用 -u username, 去管理其他用户的计划任务 语法格式 : Minutes Hours Day-of-Month Month Day-of-Week Command 分钟 小时 日 月 周 执行的命令,最好是命令的绝对路径 0-59 0-23 1-31 1-12 0-7 时间: *:每 */5:每隔5分钟 ,:不同的时间段 - : 表示范围 [root@linux-server ~]# crontab -e #当前用户编写计划任务 每天6:00执行 0 6 * * * /home/soso.sh 每天8:40执行 40 8 * * * /home/soso.sh 每周六凌晨4:00执行 0 4 * * 6 /home/soso.sh 每周六凌晨4:05执行 5 4 * * 6 /home/soso.sh 每周一到周五9:30 30 9 * * 1-5 /home/soso.sh 每周一到周五8:00,每周一到周五9:00 0 8,9 * * 1-5 /home/soso.sh 每天0:30 30 0 * * * /home/soso.sh 每年6月的周五2:00整 00 02 * 6 5 /home/soso.sh 每月1,5,8号的2:00整 00 02 1,5,8 * * /home/soso.sh 每月1到8号的2:00整 00 02 1-8 * * /home/soso.sh [root@linux-server ~]# crontab -l #列出计划任务 范例: #每日凌晨1点,删除指定文件 [root@localhost ~]# crontab -e [root@localhost spool]# crontab -l * 1 * * * rm -f /home/meng/file8.txt #实现定时任务每月月初对指定文件进行压缩 #每个月的一号的凌晨1:00执行 [root@localhost ~]# crontab -e [root@localhost ~]# crontab -l * 1 * * * rm -f /home/meng/file8.txt 00 1 1 * * /root/tar.sh [root@localhost ~]# cat tar.sh #!/bin/bash PATH="/root/file.txt" BACKUP="/root/bakups" DATE=$(date +%Y|%m%d) mkdir -p $BACKUP tar -czf $BACKUP/file_$DATE.tar.gz $PATH [root@localhost ~]# chmod -x /root/tar.sh