Linux软件安装
Linux排查问题套路
Linux命令详解
一 Linux通用知识
说到操作系统,如果读大学的时候是计算机专业,那肯定就会上这门课,我猜测当时的你们想法是这样的
-
上大学使用的都是Windows系统,界面友好,上手快,习惯性的点点点操作
-
大部分的课程在windows中操作,比如C++用的Vistual Studio,学数据库的SQL Server
-
大学中的操作系统更加偏向理论研究,至于到底是怎么运作的可能懵懵懂懂
知道上了研究生到了实验室,我发现实验室的怎么都是对着一个窗口操作,瞬间觉得以前的计算机知识白学了,于是开启了Linux之路。
其实大部分的系统,团购,打车,快递都部署在服务端,其中都包含Linux,什么云计算,虚拟化,大数据等也是基于Linux,那为啥在大学里都是windows?
咦
为什么说了解Linux的生态,会让你学到更多的新技术?
我们要知道很多的大牛通过Linux来开发各种如那件,数据库Mysql,kafka,Spark等技术都会默认提供Linux的安装运维手册,所以尽快的进入Linux的世界对于个人的进步和职业发展都是非常有好处的
每当我们买了手机,买了电脑,上手就可以用,这是因为预装了操作系统。所以呀,那有什么岁月静好,知识有人帮我们负重前行了,操作系统就是这样一个角色。
那么操作系统帮助我们做了哪些事儿呢?
-
跑几个问题,桌面上的图标是什么,为啥子敲一下键盘就出来了画面
-
电脑咋个知道我们鼠标点击的那个位置
-
为什么我一回车,这些字符就飞出去了
这几个任何一个操作,基本上都覆盖了操作系统的所有功能,那我来认识熟悉而默认的操作系统
1 vmvare
虚拟机是什么?
虚拟机通过软件来模拟具有完整硬件系统功能的,运行在完全隔离的完整计算机系统。每个虚拟计算机可以独立运行并安装各种软件和应用
-
首先从官方下载并解压虚拟机安装包,然后双击运行
双击VMVARE
-
下一步
接受许可进行下一步
-
选择安装位置,最好不要出现中文
自定义路径
-
设置用户体验选项,都可以选择
设置用户体验
-
在桌面和开始菜单程序文件夹创建快捷方式。
创建快捷方式
-
百度一个许可证ZG1WH-ATY96-H80QP-X7PEX-Y30V4
输入许可证密钥
-
打开vmvare
打开vmvare
-
点击新建虚拟机向导 选择文件-新建虚拟机打开
新建虚拟机
-
选择自定义 下一步
选择自定义
-
下一步
选择下一步
-
安装客户机操作系统,选择稍后安装操作系统
选择稍后安装操作系统
-
命名虚拟机 更改虚拟机名称并选择安装得位置
命名虚拟机
-
更改主机配置进行处理的分配
处理器核心数分配
-
虚拟内存分配:注意内存分配不能大于主机内存
虚拟内存分配 -
设置虚拟机网络得类型,这里选择NAT
网络类型暂设为NAT
-
IO控制器选择,选择LSILogic
-
磁盘类型选择SCSI即可
-
创建磁盘选择创建新虚拟磁盘
创建新虚拟磁盘
-
指定磁盘文件
指定磁盘文件
-
修改路径
-
选择自定义硬件
选择自定义硬件
-
选择centos得ISO镜像文件,先选择CDDVN---ISO镜像文件---浏览找到镜像、
导入镜像
-
点击完成
完成
-
开启虚拟机 选择配置好的虚拟机
开启虚拟机
-
鼠标移动到虚拟机内部,上下键选择install centos7然后回车
install centos7
-
选择软件选择最小安装,选择语言
选择最小化安装 -
软件安装
软件安装
-
选择计算节点
选择计算节点
-
开始安装
开始安装
-
设置root密码,点击完成配置
- 设置root密码
2 进行网络配置
现在我们的centos还是个空壳子,如果我们需要访问外网,则需要进一步配置一波
-
打开配置文件
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
-
更改相应的配置
DEVICE=eth0 #设备名称,可根据ifcofnig命令查看到。
BOOTPROTO=dhcp #连接方式,dhcp会自动分配地址,此时不需要在下面设置ip和网关
HWADDR=00:0C:29:AD:66:9F #硬件地址,可根据ifcofnig命令查看到。
ONBOOT=yes #yes表示启动就执行该配置,需要改为yes
-
service restart network完事 ping www.baidu.com
网络检测
3 安装xshell
我们已经完成了安装vmvare并导入了centos,那么我们如何去玩儿这个看似很牛皮的玩意?直接上手?不习惯吧,那我们用个远程工具连连
Xshell 是一个强大的QQ号码卖号地图安全终端模拟软件,Xshell 可以在 Windows 界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。
-
下载xshell(别去下了,贼慢麻烦)
-
链接测试(因为使用的ssh,那么确保centos中22端口已经打开了)
-
文件-----属性进行XHSELL相关的配置,比如配色,字体大小等
4 基本命令的使用
命令太多,必须要全部记忆,但是要学会如何查每个命令的参数。我画了个思维导图可以当作小字典查看,下面列出可能我们使用频率会更高的命令
执行命令 | 含义 |
---|---|
cd ~ | 切换到登录用户的主目录即/home/用户名 |
cd / | 进入根目录 |
cd /home/lj | 将/home/LJ作为当前的目录 |
cd .. | 返回到上一层目录 |
cd - | 回到上次所在的目录 |
cd ../../ | 去上上层目录 |
ls | 查看当前目录 |
ls -la | 查看当前目录的文件信息 包含了隐藏文件 |
pwd | 查看当前目录的绝对路径 |
cp /目录/1.txt /目录/ | 复制 |
rm | 删除 |
q! | 不保存文件退出 |
wq! | 保存退出 |
hostname | 查看当前主机名 |
ifconfig | 查看网卡相关信息 |
firewall-cmd --state | centos7查看卡其关闭防火墙状态 |
5 用户管理
刚才说了可以创建自己的用户,那么怎么创建自己的用户呢?
添加用户
useradd -d /home/lanj -m lanj
更改密码
passwd lanj
系统有很多的用户,怎么进行用户的切换?
su -lanj
su -root
如果需要
用户之间的切换使用su命令实现。root用户可以无需输入密码切换到lj用户,如果普通用户lj切换到root用户则需要输入密码,我们看看
su -lj
su -root
如何切换路径,绝对路径和相对路径
6 软件的安装方法
在Linux安装相关的工具分为三种方式,分别为源码安装,RPM包安装以及YUM安装方式
源码安装方式
开源软件都会提供源码下载的方式,对于源代码安装方式的好处即可以定制软件功能,安装需要的模块,不需要的模块可以屏蔽,方便管理,卸载等。
对于源码安装的步骤如下
-
下载解压源码
一般下载下来源码以后都会存在一个Readme文件,首先应该仔细阅读这个文件,可能有很多需要修复的以前人家遇见的问题都会在上面做记录,以免入坑不回头
-
分析平台环境
-
编译安装软件
这里会使用make工具,make工具就会通过makefile文件来实现。makefile文件是一种按照某种语法来编写且定义了各个文件的依赖关系。
在Linux中,习惯使用Makefile替代makefile,当用户执行configure后,就会在当前目录生成这个makefile文件,然后用户输入make就开始运行。我们看看Makefile是怎么个有样子
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o /*注释:如果后面这些.o文件比edit可执行文件新,那么才会去执行下面这句命令*/
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
make和make install的关系
当我们输入make命令过后即进入了编译阶段,编译时间根据软件的程序规模大小以及硬件配置有关,当输入make install就会开始安装软件,我们可以指定安装目录也可以不指定,系统将给你默认指定目录为/user/local,这样安装完毕。
RPM安装方式
RPM是Red Hat公司开发出来的Linux下的软件包管理工具。这些以.rpm结尾的包包含了已经编译好的二进制可执行文件,一句话即将源代码进行编译,安装,然后封装为RPM包
优点即安装简单,方便,因为已经编译完成,安装只是用来验证和解压过程,缺点也比较明显,过于依赖于操作系统,要求RPM包的安装环境必须和RPM封装时的环境保持一致,
RPM包是怎么个样子?
server-2.1.0-22.I386.rpm
其中:server为如那件的名称
2.1.0:软件的版本号
22:软件更新发行的次数
i386:适合硬件发行的次数
.rpm:rpm软件包的标识
YUM安装方式
-
查看是否存在yum
rpm -qa | grep yum
-
没有则安装
rpm -ivh yum-*.noarch.rpm
-
自定义yum的配置。我们可以通过打开/etc/yum.repos.d/Centos-Base.repo进行源的配置
YUM有哪些特点呢
-
安装方便
-
可以同时配置多个源
-
配置文件简单明了
推荐个不错的yum源
-
EPEL
是一个针对红帽企业版Linux及衍生发行版的一个高质量附加软件包项目。网址:http://fedoraproject.org/wiki/EPEL/zh-cn
-
RPMForge
这是一个第三方软件仓库,被centos社区认为是一个最安全最稳定的一个软件仓库
6 shell
大部分情况都是Linux操作系统,那么熟悉命令的用法以外,熟悉使用shell脚本能介绍不少时间
shell是什么
“ 平时经常在Linux操作系统中使用各种命令,比如查看当前的目录文件,我们会使用"ls"或者"ls -l",这些字符串参数实际上会被"某段程序"执行并启动它。这个负责将用户输入的字符串转换为需要执行程序的东西叫做"shell"。即帮用户更方便使用操作系统接口的“壳”。同样的壳还有当我输入Maven+相关参数的时候是不是就会去执行相应的功能,我们驶入sql语句的时候,数据库引擎是不是也会各种调用,一样的道理
尝试编写第一个shell
vim创建打开一个文件,扩展名为.sh。如下所示
#!/bin/bash #告诉系统使用什么解析器
echo "Hello xiaolan !" # echo进行输出
-
执行方法1
chmod +x ./hello.sh ./hello.sh
-
执行方法2
/bin/sh hello.sh
变量
变量名和等号之间不能有空格
定义变量注意事项
-
命名首个字符不能是数字,只能使用英文字母、数字和下划线
-
不能使用标点符号
-
不能使用bash中关键字
变量使用
使用变量(使用变量的过程中,最好加上花括号),只需要在变量前面加上美元符号即可
#!/bin/bash
James="小皇帝"
echo $James
只读变量
使用readonly将变量定义为只读,只读意味着不能改变
#!/bin/bash
James="小皇帝"
readonly James
James="登哥"
删除变量
使用unset删除变量 变量删除以后不能再次使用,且不能删除只读变量
#!/bin/bash
James="小皇帝"
unset James
echo $James #不会有任何输出
变量类型
-
局部变量
仅当前shell可用
-
环境变量
所有程序都能访问环境变量
-
shell变量
通过一部分环境变量和shell变量保证shell的正常运行
字符串
使用字符串的过程中,既可以用双引号也可以用单引号,也可以不用
-
单引号
单引号内容原样输出,不能包含变量,且不能出现单独单引号
-
双引号
可以出现转义字符
#!/bin/bash
James="小皇帝"
str="\"$ James\"! oh my gad \n "
echo -e $str
获取字符串长度
使用#
string="qwert"
echo $(#string)
# 提取子字符串
echo $(string:1:3)
#查找字符串
echo
数组
支持以为数组
定义数组
数组元素使用“空格”隔开
array=(value1,value2,value3)
读取数组
value1=${array[0]}
使用@输出数组所有元素
echo ${array[@]}
获取数组中所有元素以及数组长度
#! /bin/bash
# author:xiaolan
array[]=a
array[1]=b
array[3]=c
echo “数组的元素为:${array[*]}”
echo “数组的元素为:${array[@]}”
echo “数组的个数为:${#array[*]}”
echo “数组的个数为:${#array[@]}”
执行
./array.sh
结果
result
注释
单行注释
使用#开头的行为注释,会被解释器忽略
多行注释
shell传递参数
在执行shell的时候,命令行指定参数,如下所示
#!/bin/bash
James="小皇帝"
echo "执行的文件名为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
执行
./param.sh 1 2
结果
result
几个特殊字符
result
案例(partionnal.sh)
#!/bin/bash
# author:xiaolan
echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done
执行
./demo2.sh 1 2 3
结果
img
相同点:都是会引用所有参数
不同点:在使用双引号的时候。如果脚本运行时两个参数为a,b,则"*"等价于"ab",而"@"等价于"a","b"
#!/bin/bash
# author:xiaolan
echo "-- \$* 演示 ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do
echo $i
done
8 printf
使用printf格式化字符串,同时可以指定字符串宽度和对齐方式,格式如下
printf format-string [arguments...]
#!/bin/bash
# author:xiaolan
printf "%-8s %-8s %-4s\n" 姓名 科目 分数
printf "%-8s %-8s %-4f\n" 小明 数学 97
printf "%-8s %-8s %-4f\n" 小话 语文 89
printf "%-8s %-8s %-4f\n" 王三 英语 93
结果
img
9 test
shell中的test用于检查某个条件是否成立
result
案例
#!/bin/bash
# author:xiaolan
num1=55
num2=55
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
结果
result
字符串比较
字符串比较
#!/bin/bash
# author:xiaolan
num1="xiaolan"
num2="xiaolna"
if test $num1 = $num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
结果
result
流程
if语句语法格式
if condition
then
exec1
exec2
...
execN
fi
如果简化为一行
if [$(ps -ef | grep -c "httpd") -gt 1];then echo "true";fi
if else-if else
if condition1
then
exec1
elif condition2
then
exec2
else
execn
fi
案例 判断两数值是否相等
#!/bin/bash
# author:xiaolan
a=2
b=3
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
for循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
while语句
“ 通常用于从输入文件不断读取数据
while condition
do
exec
done
#!/bin/bash
# author:xiaolan
int=1
while(( $int<=6 ))
do
echo $int
let "int++"# 用于执行一个或者多个
done
无限循环
while true
do
exec
done
case语句
多选择语句。取值后面为单词in,每一个模式以")"结束。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ";;"。
#!/bin/bash
# author:xiaolan
echo '输入 1 到 3 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
*) echo '你没有输入 1 到 3 之间的数字'
;;
esac
输入不同的内容,会有不同的结果,例如:
输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3
跳出循环
break
break命令允许跳出所有循环
#!/bin/bash
# author:xiaolan
while :
do
echo -n "输入 1 到 3 之间的数字:"
read aNum
case $aNum in
1|2|3) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 3 之间的! 游戏结束"
break
;;
esac
done
continue
跳出当次循环
#!/bin/bash
while :
do
echo -n "输入 1 到 3 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 3 之间的!"
continue
echo "游戏结束"
;;
esac
done
10 shell函数
用户定义函数,然后在shell脚本中随便调用,格式如下
[ function ] funname [()]
{
action;
[return int;]
}
例子
#!/bin/bash
# author:xiaolan
Fun1(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
Fun1
echo "-----函数执行完毕-----"
带return语句
#!/bin/bash
# author:xiaolan
FunReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
FunReturn
echo "输入的两个数字之和为 $? !"
函数参数
#!/bin/bash
# author:xiaolan
funParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funParam 1 2 3 4
shell重定向
输出重定向
command1 > file # 如果file中存在内容将被清空覆盖。如果追加使用command1 >>file
ls -l > dir.txt
cat dir.txt
img
/dev/null文件
写入到它的内容都会被丢弃,会起到"禁止输出"的效果,如果希望屏蔽stdout和stderr “ command > /dev/null 2>&1
注意:Linux命令行都会打开三个文件
-
标准输入文件:stdin文件描述符为0
-
标准输出文件:stdout文件描述符为1
-
标准错误文件:stderr文件描述符2
12 运算符
下表列出了常用的算术运算符,假定变量 a 为 2,变量 b 为 3:
算术运算符
算术运算符
关系运算符
关系运算符
布尔运算符
布尔运算符
逻辑运算符
逻辑运算符
字符串运算符
12 shell实战
-
请将当前目录中demo.txt第二行第三列数据输出到demo2.txt中
cat demo.txt|awk ’NR==2{print $3}’ >demo2.txt
-
日志如下统计访问ip最多的前10个
awk ’{print $1}’ *.log | sort | uniq -c | sort -nr | head -n
uniq - 删除排序文件中的重复行 sort对于文本进行排序 -l 按照当前环境排序. -m 合并已经排序好的文件,不排序. -n 按照字符串的数值顺序比较,暗含-b -r 颠倒比较的结果.
-
查看占用内存最大的进程的PID和VSZ
ps -aux|sort -k5nr|awk ’BEGIN{print ”PID VSZ”}{print ![2,(https://www.zhihu.com/equation?tex=2%2C)2,5}’|awk ’NR<3′
-
如何检查文件系统中是否存在某个文件
if [-f /var/log/messages]
then
echo "File exts"
fi
-
每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python
-
&和&&区别
“ “&” 脚本在后台运行时使用它。“&&”当前一个脚本成功完成才执行后面的命令
-
脚本文件中,如何将其重定向标准输出和标准错误流到 log.txt 文件 ?
./a.sh >log.txt 2>&1
-
如何计算本地用户的数目
wc -l /etc/passwd | cut -d
-
shell中进行字符串比较和数字比较
[ $A == $B ] – 用于字符串比较
[ $A -eq $B ] – 用于数字比较
-
去掉字符串空格
echo $string | tr -d " "
-
统计内存使用
#! /bin/bash
# author:xiaolan
sum=
for mem in `ps aux |awk '{print $6}' |grep -v 'RSS' `
do
sum=$[$sum+$mem]
done
echo "The total memory is $sum""k"
结果
result
-
批量更改文件名
批量修改123目录下txt为txt.temp。将temp打包为test.tar.gz
#!/bin/bash
##查找txt文件
find /123 -type f -name "*.txt" > /tmp/txt.list
##批量修改文件名
for f in `cat /tmp/txt.list`
do
mv $f $f.temp
done
##创建一个目录,为了避免目录已经存在,所以要加一个复杂的后缀名
d=`date +%y%m%d%H%M%S`
mkdir /tmp/123_$d
##把.temp文件拷贝到/tmp/123_$d
for f in `cat /tmp/txt.list`
do
cp $f.temp /tmp/123_$d
done
##打包压缩
cd /tmp/
tar czf 123.tar.gz 123_$d/
7 awk文本处理工具
awk是一个处理文本文件的应用程序,几乎所有的Linux系统都自带了这个程序
依次处理每一行,并读取里面的每一个字段。对于处理生产环境的日志有着非常高校的作用
基本用法
# 格式
awk 做什么 文件吗
awk 'print $0' lan.txt
上面lan.txt是awk需要处理的文本文件。前面单引号里面有一个大括号,单引号里面就是每一行的处理动作。其中print为打印命令,
上菜
echo 'my name is lanlan' | awk '{print $0}'
上面代码中,print 位当前行,所以执行结果就是把每一行原样打印出来∗∗上菜∗∗¨G56G上面代码中,print0即将标准输入my name is lanlan ,c重新打印一遍
awk根据空格和制表符,将每一行分成若干段,依次为2
echo 'my name is lanlan'| awk '{print $3}'
为了方便,我们直接使用/etc/passwd文件进行操作,
awk -F ':' '{ print $1 }' demo.txt
3 变量
上面我们说了,可以使用符号 “3代表第一个字段,第二个字段,第三个字段¨G57G为了方便,我们直接使用/etc/passwd文件进行操作,¨G58G∗∗3变量∗∗上面我们说了,可以使用符号“+” 数字的方式表示第几个字段,其实还有一些变量可以直接表示相应的字段。比如 “$NFb” 表示最后一个字段
echo 'my name is lanlan'| awk '{print $NF}'
awk -F ':' '{print NR ") " $1}' demo.txtshe
这里出现了双引号,表示原样输出
其他常用的内置变量
-
FILENAME:当前文件名
-
FS:字段分隔符,默认是空格和制表符。
-
RS:行分隔符,用于分割每一行,默认是换行符。
-
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
-
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
-
OFMT:数字输出的格式,默认为%.6g。
4 函数
既然算是一门语言,函数当然少不了,下面看一波常用的函数
函数toupper()用于将字符转为大写
awk -F ':' '{ print toupper($1) }' demo.txt
可以发现第一个字段输出的时候变成了大写
-
tolower():字符转为小写。
-
length():返回字符串长度。
-
substr():返回子字符串。
-
sin():正弦。
-
cos():余弦。
-
sqrt():平方根。
-
rand():随机数。
5 条件**
通过使用相应的条件,过滤出自己想要的内容
awk '条件 动作' 文件名
上菜
$ awk -F ':' '/usr/ {print $1}' demo.txt
root
daemon
bin
sys
这里/usr/表示只输出包含usr的行
这个例子输出奇数行
# 输出奇数行
$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
root
bin
sync
# 输出第三行以后的行
$ awk -F ':' 'NR >3 {print $1}' demo.txt
sys
sync
下面的例子输出第一个字段等于指定值的行。
$ awk -F ':' '$1 == "root" {print $1}' demo.txt
root
$ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
root
bin
5 if语句
通过if语句编写比较复杂的内容
$ awk -F ':' '{if ($1 > "m") print $1}' demo.txt
root
sys
sync
上面代码输出第一个字段的第一个字符大于m
的行。
if结构还可以指定else部分。
8 进程管理与定时任务和后台执行
crond是什么?
crond是一个可以在指定时间执行一个shell脚本或者一系列的Linux命令。和Windows下的计划任务类似。当安装完操作系统后,默认会安装这个服务工具,并且会自动启动crond进程。
在Linux中任务的调度分为两类
-
系统任务的调度
系统会周期性的执行一些工作,比如说写缓存的数据到硬盘,清理日志等
-
用户任务的调度
用户定期也会执行一些任务,比如用户数据的备份,定时的邮件提醒等,这些都是通过crondtab来设置
那么crontab到底怎么用么
首先看看crontab的使用格式:
crontab -u user file
常见的选项
-
-u user:很明显是需要表明是那个用户的crontab服务,别瞎搞
-
file:file是命名文件的名字,表示将file作为crontab的任务列表文件并载入到crontab中
-
-e:e为edit,表示标记某个用户的crontab文件内容
-
-l:显示用户的crontab文件、
crontab的含义
创建的crontab文件,每一行代表一项任务,每个字段都有对应的设置规则,一共分为6个字段,分别为:
minute hour day month week command
-
minute:区间 0-59
-
hour:区间0-23
-
day:区间0-31
-
month:区间1-12
-
week:区间0-7 周日可以是0/7
-
command
这里的command代表的是需要执行的而命令,通常为脚本文件,
除了上面几个字段,还需要注意几个特殊字段
-
*:代表所欲呕可能的值
-
,:通过,来表示区间范围的值
-
_:整数之间的中杠表示一个证书范围
-
正斜线:表示时间的间隔频率,比如0-23/2表示每两个小时执行一次
开始放几个例子**
crontab -e
0 5 * * * /root/bin/backup.sh
这代表的是每天早上5点运行backup.sh
每个工作日11:59pm进行备份作业
59 11 * * 1-5 /root/bin/backup.sh
每五分钟运行一个命令
*/5 * * * * /root/bin/check-status.sh
crontab有哪些选项
crontab -e:修 改crontab文件,如果文件不存在会自动创建
crontab -l:显示crontab文件
crontab -r:删除crontab 文件
crontab -ir:删除crontab文件前提醒用户
9 后台运行
用途:不挂断的运行命令
语法:nohup Command [ Arg … ] [&]
-
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
-
如果当前目录的 "nohup.out" 文件不可写,输出重定向到"home/nohup.out"
-
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
-
126 可以查找但不能调用 Command 参数指定的命令。
-
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
-
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
使用&
用途:在后台运行,一般两个一起用
nohup command &