Linux 笔记
操作系统定义
- 软硬件管控,提供公共服务,组织人机交互关联的系统软件。
- 管理计算机硬件资源、文件系统、进程,内存,设备…
- 提供用户与计算机的交互接口
操作系统结构
外层应用程序建立在Linux操作系统上,并通过Shell与用户进行通信。
分类
- 常见:Apple, Android, Windows…
- 操作系统分类:
- 应用领域
- 桌面操作系统(多用户,闭源)
- 服务器操作系统(单用户,开源)
- 嵌入式操作系统
- 所支持用户数
- 多用户操作系统
- 单用户操作系统
- 源码开放程度
- 闭源操作系统
- 开源操作系统
- 级别
- 企业级应用操作系统(部项目,存数据;大规模,高数据,高并发)
- 个人操作系统
- 应用领域
企业级应用操作系统
- 常见:Windows Server, Unix, Linux(封装Unix)
- 版本:redhat, debian, ubuntu
授课Linux版本
- CentOS7(内核是redhat)
虚拟机
- VMWare16.0
虚拟机配置要求
- 内存2GB+
- 固态硬盘20G+
- 非系统盘安装
- 网络配置采用网络地址转换NAT方式
Linux远程连接
- MOBA(SSH+XFTP)
- SSH协议:Secure Shell, 可以使用SSH来远程连接到安装了Linux虚拟机。
- XFTP:XFTP是MOBA中的文件传输功能,可以使用XFTP将文件从本地计算机传输到远程服务器,或者从远程服务器下载文件到本地计算机。
云
定义
- 将所有硬件、应用、服务进行统一管理(云容器)的软件,并将资源量化,隔离出来开放给用户使用。
- Cloud = Network + Basic Devices
分类
- 公有云:供企业自身和用户用
- 分类:腾讯云、阿里云、华为云、京东云等。
- 特点:快,但不够安全。
- 私有云:面向政府和企业内部使用,不对公网开放。
- 特点:安全。
- 混合云:
- 分类:核心敏感数据私有云、官网、论坛公有云
- 特点:安全、低成本。
云计算 Cloud Computing
- 定义:云大脑计算处理的过程
云服务 Cloud Service
- 定义:定制化云计算服务产品(流量+存储+算力)
- 分类:SaaS | PaaS | IaaS | FaaS | DaaS | BaaS
- Software as a Service 将软件(工具)视作服务
- Platform as a Service 将平台(技术)视作服务
- Infrastucture as a Service 将资源视作服务
- Function as a Service 将劳动力视作服务
- Data as a Service 将数据视作服务(数据分析)
- Backhend as a Service 将宣传视作服务
VPC
定义
- 公有云上自定义的逻辑隔离网络空间,都有一个隧道号,相互之间逻辑上彻底隔离,没有数量限制。
- 将我们在私有云上的服务器资源托管在VPC内
VPN
定义
- 基于公网的加密通信网络
VM网络详解
- VMWare软件为我们安装的虚拟机创建了一个虚拟网卡,叫ens32,用于虚拟机与Windows的网络进行连接。
- 这个网卡有三个模式,分别是vmnet0,vmnet1,vmnet8
VMnet 0 桥接模式
- 虚拟机被视为物理网络上的独立设备,与主机计算机共享同一物理网络。与外部网络处于同一网络子网中
- 通常分配一个与主机网络相同的IP地址,它可以与物理网络中的其他设备直接通信。
VMnet 1 主机模式
- 它创建了一个虚拟的、隔离的网络,只有主机计算机和虚拟机可以通信。
VMnet 8 NAT模式
- 虚拟机共享主机计算机的网络连接,并通过主机计算机来访问外部网络。通常分配一个虚拟化的IP地址,
- 与外部网络隔离,它们通常不能直接与物理网络中的其他设备通信,而是通过主机计算机进行网络地址转换。
- 192.168.83.0,子网IP,实现物理机和虚拟机之间的网络互联,但是还不能访问外网。(不会占用公网的IP地址,打破了公网IP地址数量有限的限制。)
- 192.168.83.1,虚拟网卡的IP地址
- 192.168.83.2,网关的IP地址
重做虚拟网卡:
- 编辑——虚拟网络编辑器
ip addr 查看主机IP地址
- lo 环回网卡,用于本机的不同进程之间进行通信。
- ens33 网卡名称
Linux文件系统
- 软件、硬件、文档、目录都属于文件
- 常用目录(✔的为常用目录)
- / Linux系统根目录
- /bin 系统启动时需要的执行文件(二进制)
- /dev 设备文件目录
- /dev/sr0 表示系统中的第一个光驱设备(虚拟机安装时挂载yum镜像源到/dev/sr0下,并且映射一份到/mnt)
- ✔/etc 操作系统的配置文件目录(防火墙、启动盘)
- /etc/profile 存放系统级环境变量
- /etc/profile.d/myenv.sh 存放自定义环境变量
为什么source /etc/profile能够激活自定义环境变量的修改?
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
因为执行/etc/profile文件也会对profile.d中.sh的文件进行执行,这也说明了为什么在/etc/profile.d中要新建myenv.sh文件并在其中配置环境变量。
Shell命令概述
Shell命令是解释型命令,用于执行各种操作。它们可以存储在Shell脚本文件中,用于对虚拟机进行通配,包括设置环境变量、优化等操作。以下是关于Shell命令的一些概述:
- Shell命令是解释型的,可以直接在命令行中执行。
- Shell命令的作用包括执行各种操作,但大多数命令的结果是只输出不修改文件,除了一些特殊操作如使用
sed -i
进行文件内容替换、重定向操作以及修改文件权限和目录的操作。 - Shell命令可以用于将每个大数据组件制作成一个Shell脚本,然后通过一个大脚本自由组合多个Shell脚本来完成复杂的任务。
Linux目录操作命令
以下是一些常用的Linux目录操作命令:
-
pwd
: 查看当前工作目录。 -
ls [选项][路径]
: 列出目录中的文件和子目录。ls -l
: 以长格式显示当前工作目录中的文件和目录。ls -h
: 文件大小以M的大小格式显示。ls -a
: 仅列出当前工作目录中的所有文件和目录,包括以.
(当前目录)和..
(上级目录)开头的隐藏文件和目录。ls -la
: 以长格式列出当前工作目录中的所有文件和目录,包括隐藏文件和目录。ls -1S
: 以单列模式并按照文件大小倒序排序。ll -h -1S
: 按文件大小对目录下的文件进行倒序排序,并显示文件的大小(MB)。
-
cd [路径]
: 切换到其他目录。cd /opt/software/
: 绝对路径。cd henry/
: 相对路径(以当前目录作为根目录)。cd ~
: 切换到当前用户的主目录。cd -
: 切换到上一次使用的工作目录。cd ../
: 返回上一级目录。cd ../../dir1/text1
: 返回上两级目录后进入dir1/text1
目录。
-
mkdir [选项][目录名]
: 创建一个文件夹mkdir -p
: 表示如果上级目录不存在,也会一同创建上级目录。mkdir -p b/e
: 创建目录b/emkdir a b c d
: 创建(多个)同级目录
-
rm [选项][文件|目录名]
: 删除文件或目录rm -rf
: 删除包括该级目录下的所有目录(递归删除)- 假设目录为b/e,则会被全部删除。
-
cp [文件|-r 目录名][目录名]
: copy文件或者目录下的所有文件- 示例:
cp data.log test/
: 复制data.log到test目录下,默认复制文件的文件名名为data.log cp -r /root/opt/software/ /root/opt/
- 示例:
-
mv [文件名][目录名]
: move文件,跨目录移动文件或同目录修改文件名- 示例:
mv data.log test/
: 移动data.log到test目录下 mv data_cp.log data_copy.log
: 如果此时两文件在同一目录下,则为重命名
- 示例:
Linux文件操作命令
-
xargs [选项] [命令]
: 将接收到的字符串利用分隔符分隔为多个参数,并传递给后面的命令当作命令行参数-d '分隔符'
: 指定处理输入数据的分隔符-n [数字]
: 每次只传递指定数量的参数
-
示例:
find / -name "*.txt" | xargs rm
grep "" | xargs ...
ls -1S | head -n 10 | xargs rm
cat files.txt | xargs -n 1
cat nowcoder.txt | xargs -d ' ' -n 1
: 将文件内容以’ '分隔,并且每行输出一个(注意-d并需要指定,即使是默认的空格分隔符,因为文本内容中可能出现无法解析的内容)
-
cut
:cut -d ' ' -f1,2
: -d用于指定分隔符,-f[1,2…]取各个部分cut -c 1-5 logs.txt
: 截取每行数据范围内的所有字符ll|sed -n '2,$p'|cut -d ' ' -f1
-
tr
:ll|tr 'a-z' 'A-Z'
: 字符替换ll|tr -d 'a-f'
: 字符删除ll|tr -s 'o'
: 连续字符只显示一次
-
uniq [选项][文件]
: 去除文件的重复行uniq -c
: 统计重复行出现的次数(格式:次数+重复行内容) 🔺uniq -c 执行前要先 sort ,保证相同数据相邻uniq -d
: 只显示重复行内容
-
uname [选项]
: 查看当前系统信息uname -r
: 列出当前系统的具体内核版本号。uname -s
: 列出系统内核名称。uname -o
: 列出系统信息。
-
cat [选项][文件]
: 显示文件内容cat -n
: 由1开始对所有输出的行进行编号(可能是为了删除或者修改某行)- 数据随机抽样示例:
cat -n data1.log|awk '{if($1%2==0) print $0}'
: 先对数据进行编号,再获取偶数编号的数据
-
more✔/less(-e)
: 文件内容分屏查看器(–More–(46%)表示此页内容在全文的46%位置处)ENTER
: 按行查看SPACE
: 按页查看
-
grep [选项][正则][文件]
: 匹配过滤grep -i
: 不区分大小写grep -v
: 显示不能被模式匹配到的行grep -E
: 支持正则grep -w
: 只识别完整的条件grep hello text.log
: 直接检索
-
head
: 从文件开始显示文件内容head -n N
: 显示指定文件开始的n行数据
-
sort [选项][文件名]
: 对文件内容排序(默认以行为单位,首字母进行排序)sort -u
: 唯一排序(去重)sort -kN
: 按照第N个字段进行排序(eg:sort -k2
)sort -t[字符]
: 以所给字符作为分隔符划分字段(eg:sort -t,
)sort -r
: 进行倒序排序sort -n
: 保证数据中的数字被正确识别
-
tail
: 从文件结尾显示文件内容tail –f
: 用于实时监视文件的新增内容tail –n N
: 查看某个文件结尾N行的内容
-
touch [文件]
: 创建一个文件 -
help [命令名]
: 获得Shell内置命令的帮助信息- 如何读懂帮助信息?
- 示例:
pwd: pwd [-LP] []
表示可选的选项 ✔ - Print the name of the current working directory. 简要介绍 ✔
- 对每个选项具体的应用…
- 示例:
- 如何读懂帮助信息?
-
man [命令名]
: 查询命令详细参数q
: 退出
-
tar [选项][文件名][目录名]
: 解压缩x
: 表示解压缩c
: 打压缩包(反向)v
: 过程详情-C
: 指定目标目录- 示例:
tar -zxvf example.tar.gz -C /path/to/destination
解压缩一个tar.gz文件到指定目录下。 tar -zcvf example.tar.gz -C /path/to/destination
压缩一个tar.gz文件到指定目录下。
-
wc [选项][文件名]
: 查看文件大小(行数 单词数 字节数)l
: 查看文件的文件行数(输出包含了文件行数和文件名)- 如何实现只输出文件行数?
cat data1.log | wc -l
- 如何实现只输出文件行数?
- 不加: 文件字节数
循环
- 依次输出list中的内容
for item in list(list内容可以是数字也可以是字符串,内容用""扩起,空格分隔) do echo $item done
- 依次输出一个范围内的值
for item in {1..5}
do
echo $item
done
- 依次输出一个范围内等间隔的值
for item in {1..10..2}
do
echo $item
done
Linux文件编辑命令
可以使用vi
或vim
命令来创建、编辑和查看文本文件,以下是一些常用的vi
命令:
vi[m] [文件名]
: 创建、编辑、查看文本文件。在命令模式下执行文本编辑操作。[命令模式]
i
: 进入编辑模式。:
: 进入命令模式,命令写在冒号之后。/[文本]
: 查找文本第一个匹配位置。q!
: 退出并不保存。w
: 保存并不退出。
[光标移动]
gg
: 跳到文件首行。shift + g
: 跳至文件尾行。0
: 跳到当前行的开头。$
: 跳到当前行的末尾。n+gg
: 跳到第n行。
[删除文本]
x
: 删除光标所在位置的字符。dd
: 删除当前行。ndd
: 删除当前行及其后的n行。
[复制和粘贴]
yy
: 复制当前行。nyy
: 复制当前行及其后的n行。p
: 粘贴已复制的文本。
[撤销和重做]
u
: 撤销上一个操作。ctrl+r
: 重做上一个被撤销的操作。
[编辑模式]
shift + zz
: 默认保存并退出。:x
: 默认保存并退出。i
: 在光标处插入。a
: 在原光标处的后一个位置插入内容。o
: 光标行下的新行插入。esc
: 退出编辑模式并回到命令模式。
文本编辑命令
sed 命令
sed [选项][命令][文件]
选项:
-r
开启扩展正则ERE支持-i
直接修改原文件(默认为模式修改,不修改文件)-n
关闭模式输出,不按默认形式输出所有行-f
将命令写在文件中sed -f cmd-file file
cmd-file
表示包含sed
命令的脚本文件,表示对file文件应用脚本文件定义的sed
操作,并且输出结果。
命令:
s
替换[4[,6]]s/regex/replace/[g]
substitute- 示例:
sed -r '4,6s/\bha([0-9]+)?doop\b/they/g' test1.log
- 示例:
d
删除行 (/regex/|4[,6][1,$]...
)d 中美元符号表示最后一行(即代表删除全部行) delete- 示例:
sed '/^[[:space:]]*$/d' filename
删除空白行
- 示例:
i
向上插入新文本行 (/regex/|4
)i\inserted line(此时的新增行在第四行的位置) inserta
向下插入新文本行 (/regex/|4
)a\inserted line(此时的新增行在第五行的位置) appendp
输出行 (/regex/|4[,6]
)p 搭配-n
一起使用才生效- 示例:
sed -n '4,6p' test1.log
获取4到6行的数据
- 示例:
awk 命令
awk [选项] 'BEGIN{}{}END{}' [文件]
结构:
BEGIN{}
在开始处理输入之前执行一次{}
对输入文件的每一行执行一次END{}
处理完所有的输入之后执行一次
文本输出:
print var
,""
,$1
($1取第一块内容 $0取整行) |{}
1 (不需要写print,输出整行内容,{}默认为不输出) |{print $0,$3,$NF}
=> 默认打印出来的内容以空格分隔。
选项:
-F
指定分隔符,默认空格-v
定义变量,向内传值
正则:
/regex/{...}
- 示例:
awk '/root/{print $1}' test.log
打印root所在的第一列
分支:
if... ; else
分支结构{if($2>10) print $2; else print $NF }
循环:
for() do; { for(i=1; i<=NF; i++) print $i; }
for() do; { for(k in array) print array[k]; }
awk中的数组:
- 无需预先定义数组名和数组大小,支持字符串拼接。
- 示例:
awk '{for(i=1;i<=NF;i++){if(NR==1) row[i]=$i;else row[i]=row[i]" "$i}}END{for(i=1;i<=NF;i++){print row[i]}}' nowcoder.txt
特殊的内置变量:
NF
当前行的列数NR
当前行的行号- 示例:
awk '{print "Line " NR ": " $0}' data1.log
打印行号和行内容
常见用法
- 如果awk{}中输出为
{print $1,$2}
用空格分隔,{print $1","$2}
才用逗号分隔。 - 示例:
awk '{if($NF>=75) print $1","$NF; else print "UNPASS"}' data1.log
awk常见字符串函数
length(STRING)
获取字符串长度substr(STRING,START,LENGTH)
获取子字符串index(STRING,SUBSTRING)
返回指定子字符串在原字符串中第一次出现的位置(从1开始)。printf(FORMAT,VALUE)
格式化输出字符串match(STRING,REGEX)
返回正则表达式在字符串中第一次匹配的位置(从1开始)。split(STRING,ARRAY,SEPARATOR)
将字符串按照指定的分隔符拆分为多个字符,存放在数组中toupper(STRING)
&tolower(STRING)
将字符串中的字符转换为大小或小写形式gsub(REGEX,REPLACEMENT,STRING)
替换所有匹配项sub(REGEX,REPLACEMENT,STRING)
替换第一个匹配项
特殊符号:
A|B
管道符,A|B表示将命令A的输出作为命令B的输入,常配合grep使用。>|>>
查询结果重定向(>覆盖,>>追加)cat >> event.log '<<EOF'
动态文本编辑
重定向:
COMMAND 1>>info.log 2>>err.log
需要将结果记录到日志中,屏幕无输出COMMAND 2>/dev/null
对需要遍历文件系统或需要特定权限的操作时,经常会遇到权限拒绝、访问拒绝或其他错误信息。COMMAND 1>/dev/null 2>&1
无需查看结果,也无需将结果记录到日志中
分隔符
- 虚拟机中默认的分隔符就是空格
$
- 命令行提示符(在终端或命令行界面),并不属于实际命令
$i
,i
为数组索引,$i
表示数组中索引为i
的元素的值
""
- 其中放字符/字符串常量,进行字符串拼接时
~
- 独属于awk中regex表示正则表达式的匹配
- 示例:
if($6 ~ /^[0-9]+$/)
Linux用户/用户组
- 用户是指操作系统的实际操作者,与操作系统的资源进行交互
- 用户组是具有相同权限的用户的集合体,直接对整个用户组进行授权。
- 关于权限:将操作系统视为文件和文件夹的集合,文件有r w x的权限。
- UID:用户唯一标识
root
的ID为0, Linux系统权限最高的用户
- GID:用户组唯一标识
Linux用户操作命令
useradd [用户名]
:添加用户userdel [用户名]
:删除用户last
:查看历史登录系统用户访问详情列表w/who/whoami
:查看当前用户信息passwd [用户名]
:设置用户密码id
:查看当前用户UID和GIDcat /etc/passwd
:查看创建了哪些用户cat /etc/group
:查看创建了哪些用户组cat /etc/shadow
:查看密码su[用户名]
:改变用户身份或切换到rootsu -l[用户名]
:切换到其他用户账户并且加载该用户的完整环境sudo[选项]命令[命令参数]
:暂时以root身份执行某个任务usermod-l[新用户名][旧用户名]
:修改用户登录名groups
:查看当前用户所属分组或指定用户所属分组groupadd[组名]
:添加分组gpasswd[组名]
:管理用户组成员usermod-g[新组名][用户名]
:修改用户所属分组groupdel[组名]
:删除分组
Linux权限管理
chmod
:修改权限chown
:变更文件的所有者- 权限位示例:
-rwxr-xr-x. 1 root root 964536 Nov 25 2021 bash
Linux系统资源查看
top
:查看系统实时健康状态mpstat
:查看CPU使用率free
:查看内存df
:查看磁盘空间
Linux进程和程序
- 进程基本概念:只要把程序(运行起来)加载到内存中,就称之为进程。
- 查看进程:
ps -ef | grep [进程标识]
- 停止进程:
kill -9 [PID]
- 查看端口占用情况:
netstat -anutp
Centos中软件的安装方式
- 源码编译安装
- YUM安装
- RPM安装
- 官方脚本自动下载、安装、配置环境
- 压缩包手动安装,需手动配置环境
- 复制软件到制定目录,通常无序额外的配置或依赖
RPM包管理
标准化地打包、安装、升级和删除Linux软件。
wget package_url
下载RPM包rpm -ivh 包名
安装RPM包,再用yum install
安装服务rpm -qa | grep 包名
查看RPM安装包rpm -e 包名
删除RPM安装包(不会删除已经安装到系统里的资源)yum -y remove 包名
删除RPM安装包并且删除对应的资源
(删除之后记得查看)
YUM包管理
自动获取、安装和更新RPM包。
- yum源管理 本地、远程(阿里、华为、清华…)
yum search 服务名|命令
查找服务、命令相关的资源yum -y install 服务名
安装服务yum -y remove 服务名
卸载服务
tar解压安装
- 安装包格式: tar、tar.gz、tar.bz、xz
- 打包并以gzip压缩:
tar -zcvf 目标压缩包路径 源目录路径
- 解压:
tar -zxvf 源包路径 [-C 目标解压路径(缺省默认当前路径)]
为什么Linux压缩格式都为tar.gz|tgz
的形式?
tar
和gzip
的组合方便打包并压缩。现代的Windows工具可以打开和创建这种格式,便于不同操作系统之间的文件交互。
RPM和TAR安装的选择:
- RPM:需要系统集成的基础组件(Mysql)
- TAR:需要更多灵活性或定制化的软件(JDK、Redis、Zimg、Hadoop…)
Linux服务管理
查看服务状态
systemctl list-units -all
列出所有服务systemctl list-units --all | grep "active (running)"
列出在线的服务systemctl status SERVICE_NAME mysqld, firewalld, sshd, NetworkManager
查看指定服务名的服务状态
开关服务
systemctl start SERVICE_NAME
systemctl stop SERVICE_NAME
systemctl restart SERVICE_NAME
重启(大更改)systemctl reload SERVICE_NAME
不重启(小更改,重载配置信息)
启禁服务
systemctl enable/disable SERVICE_NAME
启禁服务管理
systemctl mask/unmask SERVICE_NAME
进制
m=date +%m
提取月份(假设为09)let q=(m-1)/3+1
=> -bash: let: 09: value too great for base (error token is “09”)let q=(10#$m-1)/3+1
因为Linux默认为8进制,需要先进行转换才可以继续进行计算。
打印命令
echo
打印输出echo -n CONTENT
不换行输出echo -e CONTENT
(支持转义符:\t \n)- 例如:
echo -e "\033[31m$1\033[0m"
(将$1替换为内容,格式为红色,通常用于异常输出)
- 例如:
printf
格式化输出printf "FORMAT_STR" VARS
- 例如:
printf "%s,%.2f" "$a" "$n"
printenv
输出环境变量printenv ENV_NAME
<=>echo $ENV_NAME
日期时间类命令
date [选项][+格式]
选项
-u
指定时区,缺省默认本地-d DATE
, 指定运算规则
基础命令
date +%F
输出"年-月-日"(Full Date)date +%T
输出"时-分-秒"(Time)date +"%F %T"
标准时间格式date +%Y
输出年date +%m
输出月date +%d
输出日date +%H
输出时(24)date +%M
输出分date +%S
输出秒
进阶命令
date +%j
输出今天是今年的第几天date +%W
输出今天属今年的第几周date +%w
输出今天是星期几(0-6代表日、一-六)date +%s
输出时间戳date +%m
输出今天属今年的第几月
日期类计算
date -d "2021-05-11 10:25:39" +%s
日期转秒date -d "±N year|month|week|day" +%F
日期前后计算①不指定日期date -d "-5 day 2021-05-11 10:25:39" +"%F %T"
②指定日期date -d "@1621563938" +"%F %T"
秒转日期
时钟校准
yum -y install ntpdate.x86_64
ntpdate -u cn.pool.ntp.org
(ntp网络时间协议 -u update更新 cn.pool.ntp.org中国的ntp服务器地址
记忆:中国 池 时间 组织(同步))
为了保证每台机器的时差不超过阈值防止报错,需要写一个"ntpdate -u cn.pool.ntp.org"的定时任务。
搜索查找命令
find [起始目录][选项]
选项
-name wildcard
:以名查找(查找的条件不是正则表达式,而是通配符)-type d|f
:以类型查找(d 目录 f 文件)-(a|c|m)(min|time) ±n(minutes|hours)
-maxdepth [数字]
控制搜索的最大深度
时间段内的搜索
find /root -type f -mmin -30 -mmin +5 | grep -iw proto
locate [文件名[文件后缀]]
which|whereis [待查找内容]
查找文件所在的位置
标准流
- 标准输出流编号为1 标准错误流编号为2
[1]>
重定向stdout覆盖[1]>>
重定向stdout追加2>
重定向stderr覆盖2>>
重定向stderr追加- 特殊形式:&1 >>/dev/null
如何理解’&1’?
&用于将一个文件描述符与另一个文件描述符相关联。&1表示将标准输出流(文件描述符1)与某个目标相关联。
command > output.txt 2>&1
则表示stdout和stderr合并都发送到output.txt
其他处理命令
file
查看文件类型ln -s [指向目录] 链接名
创建软链接。crontab
克隆表达式-e
编辑(个体删除)-l
查看-r
整体删除* * * * * /path/to/command arg1 arg2
crontab时间设置示例
- 每5分钟:
*/5 * * * *
- 每小时:
0 * * * *
- 每天:
0 0 * * *
- 每月:
0 0 1 * *
- 每星期:
0 0 * * 0
或0 0 * * 7
- 每周工作日(周一至周五):
0 0 * * 1-5
- 每周末(周六和周日):
0 0 * * 6,7
*表示任何,*/n表示每n个时间单位
(时间单位即为*对应的时间单位),,表示多个时间点,-表示间隔时间段。
编写定时任务后如何进行检验?
tail -f resource.log | var/log/cron
例:定时任务每半个小时将系统资源(CPU占用率,MEM剩余容量和占用率,DISK剩余容量与占用率,容量单位GB,
容量和占用率都保留2位小数)情况存入当前用户主目录下log目录下的resource.log下。
1.创建脚本
vim collect_resource.sh
=================================================================================================================================================
CPU_USAGE=$(mpstat|awk '/all/{printf("%.2f\n",(100-$NF)/100)}')
MEM_FREE=$(free|awk '/Mem/{f=$4;M=1024*1024;printf("%.2f\n",f/M)}')
MEM_PERCENT=$(free|awk '/Mem/{f=$4;t=$2;printf("%.2f\n",f/t)}')
DISK_FREE=$(df|awk 'BEGIN{t=0;u=0}/\/dev\/s.*/{next}/[0-9]{2,}/{t+=$2;u+=$3}END{M=1024*1024;t/=M;u/=M;l=t-u;printf("%.2f",l)}')
DISK_PERCENT=$(df|awk 'BEGIN{t=0;u=0}/\/dev\/s.*/{next}/[0-9]{2,}/{t+=$2;u+=$3}END{M=1024*1024;t/=M;u/=M;l=t-u;o=l/t;printf("%.2f",o)}')
echo "$(date +'%Y-%m-%d %H:%M:%S') - CPU: $CPU_USAGE, MEM: ${MEM_FREE}G ($MEM_PERCENT), DISK: ${DISK_FREE}G ($DISK_PERCENT)" >> ~/log/resource.log
=================================================================================================================================================
chmod u+x collect_resource.sh
2.设置定时任务
crontab -e
打开定时任务编辑器
*/30 * * * * /path/to/collect_resources.sh
history
查看当前用户进行实验语句的历史记录
两种退出
ctrl+c
结束进程
1.一个无限循环的脚本
2.一个长时间运行的命令
ctrl+d
结束终端会话或输入
1.在Shell提示符下结束终端会话
2.在免密登录的情况下,安全地退出远程会话。