linux基础4

第十单元 系统的初始化和服务 


Linux系统引导的顺序
Linux系统引导的顺序
BOIS的初始化和引导加载程序
什么是BIOS
GRUB程序和grub.conf文件
什么是grub
grub配置文件grub.conf
内核的初始化和init的初始化
init的配置文件/etc/inittab
init程序要做的工作
run levels(运行级别)
各运行级别对应的功能
关闭系统及重启系统
关闭系统的命令
重启系统的命令
单用户模式修改用户密码
救援模式
课后作业

【本节内容】
1. Linux系统引导的顺序(详见linux系统管理P312)
1) 掌握Linux系统引导的顺序:(详见附1)

 

其中,BIOS的工作是检查计算机的硬件设备,如CPU、内存和风扇速度等;
MBR会在启动盘的第1个块中,大小为512B。其中前446中的程序代码是用来选择boot partition(分区),也就是由哪个分区来装入开机用的代码;
在内核部分主要是装机计算机设备的驱动程序以便操作系统可以控制计算机上的设备。并且以只读的方式挂载/(根)文件系统,也就是此时的操作系统只能读到根文件系统(目录)所在的分区;
init程序的进程id为1,即Linux操作系统第1个执行的程序。
1. BOIS的初始化和引导加载程序(详见linux系统管理P313)
1) 掌握BIOS的定义:BIOS(Basic Input/Output System)(基本输入/输出系统的缩写),它是硬件与软件之间的接口,而且是非常基本的接口。
2. GRUB程序和grub.conf文件(详见linux系统管理P317)
1) 掌握GRUB的定义:GRUB是Grand Unified Bootloader(多重操作系统启动管理器)的缩写。
2) 掌握grub的配置文件为:grub.conf
设置grub Md5加密命令 grub-MD5-crypt
Password = 明文或 password --md5 密文(编辑grub配置文件的密码)
Title red hat 标题
Password = 明文或 password --md5 密文(加载内核系统引导必须的密码)
3. 内核的初始化和init的初始化(详见linux系统管理P322)
1) 掌握init的配置文件为:/etc/inittab 
2) 了解init程序要做的工作:
a) 决定预设(默认)要使用哪个run levels(运行级别)。 
b) 执行一些系统初始化的脚本(程序)来初始化操作系统。
c) 根据run level的设置来执行所对应目录中的程序,以决定要启动哪些服务。
d) 设定某些组合键。
e) 定义UPS不间断电源系统,即当电源出现问题时或电源恢复时要执行哪些程序。 
f) 产生6个virtual consoles,也就是tty1~tty6。
4. run levels(运行级别)(详见linux系统管理P326)
1) 掌握所有的运行级别及每一个运行级别对应的功能:

5. 关闭系统及重启系统(详见linux系统管理P342)
1) 掌握常用的可以关闭系统的命令:
shutdown -h now 
halt
poweroff
init 0
2) 掌握常用的可以重启系统的命令:
shutdown -r now
reboot
init 6
Ctrl+Alt+Delete键
6. 掌握单用户模式修改用户的密码
7. 掌握救援模式
8. 课后作业(用时70分钟)
1) 以root用户登录系统
2) 修改grub配置文件,默认以第1个操作系统启动,将默认的读秒修改为10秒
3) 设置grub菜单密文密码“123”
4) 修改系统的默认运行级别为3
5) 使用与运行级别有关的命令重启系统
6) 使用单用户模式修改用户的密码为“123”
7) 使用救援模式删除grub菜单密码 

第十一单元 系统监控 


系统监视和进程控制工具—top和free
top命令的功能
top命令显示结果中一些常用状态信息的具体含义
free命令的功能
系统中进程的监控—ps
什么是进程
什么是守护进程
什么是父进程、子进程
ps命令的功能
系统中进程的监控—pstree、kill、pkill、pgrep
pstree命令的功能
pstree命令的用法举例
kill命令的功能
kill命令的用法举例
kill -9
pkill、pgrep命令的功能
课后作业
【本节内容】
1. 系统监视和进程控制工具—top和free
1) 掌握top命令的功能:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
2) 了解使用top命令列出系统状态时,系统默认每5秒刷新一下屏幕上的显示结果。

1. 第一行是任务队列信息

12:38:33

当前时间

up 50days

系统运行时间,格式为时:分

1 user

当前登录用户数

load average: 0.06, 0.60, 0.48

系统负载。 三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

2. 第二、三行为进程和CPU的信息

Tasks: 29 total

进程总数

1 running

正在运行的进程数

28 sleeping

睡眠的进程数

0 stopped

停止的进程数

0 zombie

僵尸进程数

Cpu(s): 0.3% us

用户空间占用CPU百分比

1.0% sy

内核空间占用CPU百分比

0.0% ni

用户进程空间内改变过优先级的进程占用CPU百分比

98.7% id

空闲CPU百分比

0.0% wa

等待输入输出的CPU时间百分比

0.0% hi

硬件中断占用CPU时间的百分比

0.0% si

软件中断占用CPU时间的百分比 

3. 第四五行为内存信息。

4.  进程信息

列名

含义

PID

进程id

PPID

父进程id

RUSER

Real user name

UID

进程所有者的用户id

USER

进程所有者的用户名

GROUP

进程所有者的组名

TTY

启动进程的终端名。不是从终端启动的进程则显示为 ?

PR

优先级

NI

nice值。负值表示高优先级,正值表示低优先级

P

最后使用的CPU,仅在多CPU环境下有意义

%CPU

上次更新到现在的CPU时间占用百分比

TIME

进程使用的CPU时间总计,单位秒

TIME+

进程使用的CPU时间总计,单位1/100秒

%MEM

进程使用的物理内存百分比

VIRT

进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

SWAP

进程使用的虚拟内存中,被换出的大小,单位kb。

RES

进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

CODE

可执行代码占用的物理内存大小,单位kb

DATA

可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

SHR

共享内存大小,单位kb

nFLT

页面错误次数

nDRT

最后一次写入到现在,被修改过的页面数。

S

进程状态。
            D=不可中断的睡眠状态
            R=运行
            S=睡眠
            T=跟踪/停止
            Z=僵尸进程

COMMAND

命令名/命令行

WCHAN

若该进程在睡眠,则显示睡眠中的系统函数名

Flags

任务标志,参考 sched.h

cpu利用率与load average

cpu是用来干活的,按照这个层面去理解,每个码农都是一个cpu

cpu利用率:上一天班的时间是8个小时,而码农敲代码的时间为2个小时,2/8=0.25  ,25%就是码农在一天的时间内的利用率(正常情况,cpu利用率<70%)

cpu负载:公司在一分钟内为某个码农安排了3个任务,而1分钟内该码农能做6个任务,那么该码农一分钟内的负载为0.5

          如果公司在5分钟内为某个码农安排了100个任务,而5分钟内该码农只能做50个任务,那么该码农5分钟内的负载为2.0,即超负荷运转

      cpu负载<=1:能正常应付

             cpu负载>1:超负荷运转

             

     如果有4核,相当于将100个任务交给4个码农去干,如果每个码农的负载都是100%,那么整体的cpu负载达到4.0则是很正常的现象

      

             多核cpu, load average 应该 <= cpu核数 * 0.7

为何要有1分钟,5分钟,15分钟三种cpu负载?

  其实之所以要给出3个值,就是希望我们能结合起来看。或者说希望展示一个动态的图表式的数据,比如最近一分钟显示负载120%。而最近5分钟和15分钟显示负载为50%。可能你不用太过担心。但是如果你发现系统的负载一直维持在120%以上,就必须要提高硬件配置了。

cpu利用率和cpu负载过高,都是不好的现象,但是也有可能出现,低利用率,高负载的情况:

  为一个码农分配了100个项目,毫无疑问,该码农的负载是很高的,但是码农在具体去做一个项目时,可能会碰到需要购买机器,或者查询资料等耗费时间的问题,真正动手写代码的时间可能很短,而这段时间才是码农真正为公司干活的时间,如果每个项目都有类似这种问题,那么100个项目加到一起,码农真正工作的时间也不会太多,这就造成了低利用率。

  在两种情况下会导致一个进程在逻辑上不能运行,

  1. 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作

  2. 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。

  因而一个进程有三种状态


3) 掌握free命令的功能:显示内存的使用状态。(下图centos6中查看效果,用二维数组代表FO即free output)

                   1          2          3          4          5          6
1              total       used       free     shared    buffers     cached
2 Mem:      24677460   23276064    1401396          0     870540   12084008
3 -/+ buffers/cache:   10321516   14355944
4 Swap:     25151484     224188   24927296

从操作系统的角度:

  物理内存FO[2][1]=24677460KB

  物理内存被使用的内存FO[2][2]=23276064KB

  可以用内存F[2][3]=1401396KB

  等式:FO[2][1] = FO[2][2] + FO[2][3]

  共享内存F[2][4]=0,表示几个进程共享的内存(数据共享)

  F[2][5]=870540表示已经分配但是还未使用的buffers大小

  F[2][6]=12084008表示已经分配但是还未使用的buffers大小

  buffer和cache的解释:

    • A buffer is something that has yet to be "written" to disk. 
    • A cache is something that has been "read" from the disk and stored for later use.

  也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

  Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么FO[2][6](cached memory)比较大,而FO[2][3]比较小的原因。我们可以做一个简单的测试

  1. 释放掉被系统cache占用的数据;
    echo 3>/proc/sys/vm/drop_caches 
  2. 读一个大文件,并记录时间;
  3. 关闭该文件;
  4. 重读这个大文件,并记录时间;

  第二次读应该比第一次快很多。

  free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

  • 对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
  • 对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;

  因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。

  这里还用两个等式:

  • FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
  • FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

  free命令的所有输出值都是从/proc/meminfo中读出的。

4)  掌握free命令的功能:显示内存的使用状态。(下面均为centos7中查看效果)

http://www.linuxatemyram.com/提到使用free命令查看Linux系统使用内存时,used一项会把当前cache的大小也会加进去,这样会造成free这一栏显示的内存特别少:

$ free -m
               total        used        free      shared  buff/cache   available
Mem:           1504        1491          13           0         855      869
Swap:          2047           6        2041

可是实际上,cache根据应用程序的需要是可以回收利用的,因此free这一栏并不能真实地表现有多少“可以使用”的内存。实际系统可用内存应该以available数据为准。

linuxatemyram所提到的free命令也许是比较老的版本,我尝试了RHEL 7.2Ubuntu 16.04Arch Linux3Linux发行版,均没有出现used包含cache的情况:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          64325       47437        3150        1860       13737       14373

另外,从man free命令中也可以得到,目前计算used的值是要减掉freebuff/cache的:

used Used memory (calculated as total – free – buffers – cache)

可以使用-w命令行选项得到buffcache各自使用的数量:

$ free -wm
              total        used        free      shared     buffers       cache   available
Mem:          64325       48287        2476        1859        1430       12131       13524

需要注意的是,free表示的是当前完全没有被程序使用的内存;而cache在有需要时,是可以被释放出来以供其它进程使用的(当然,并不是所有cache都可以释放,比如当前被用作ramfs的内存)。而available才真正表明系统目前可以提供给应用程序使用的内存。/proc/meminfo3.14内核版本开始提供MemAvailable的值;在2.6.27~3.14版本之间,是free程序自己计算available的值;早于2.6.27版本,available的值则同free一样。

2. 系统中进程的监控—ps(详见linux系统管理P363)
1) 掌握进程的定义:进程是程序的一次动态执行。
2) 掌握守护进程的定义:守护进程是在后台运行并提供系统服务的一些进程。
3) 掌握父进程、子进程的定义:当一个进程创建另一个进程时,第1个进程被称为新进程的父进程,而新进程被称为子进程。
4) 掌握ps命令的功能:用来显示当前进程的状态。
Ps –aux 显示所有的与用户相关的完整信息
系统中进程的监控pstree、kill

centos7默认没有pstree,需要yum -y install psmisc
1) 掌握pstree命令的功能:以树状图显示程序。
2) 掌握pstree命令的用法举例:
例如:列出PID为4729的进程的进程状态树的命令:pstree 4729
3) 掌握kill命令的功能:把一个信号发送给一个或多个进程。默认发送终止信号。
4) 灵活应用kill命令终止进程
例如:终止PID为3852的进程的命令:kill 3852
5) 灵活应用kill -9命令杀死进程
例如:杀死PID为3906的进程的命令:kill -9 3906
3. 掌握pgrep命令的功能:通过名称或其他属性查找进程
例如:查找名为firefox的进程的命令为:pgrep firefox
4. 掌握pkill命令的功能:通过名称或其他属性发信号给进程
例如:杀死名为firefox的进程的命令为:pkill firefox
5. 课后作业(用时30分钟)
1) 实时动态监控系统状态
2) 退出上一步的操作
3) 开启top进程
4) 使用ps命令查看top命令的pid并杀死
5) 查看pid为2的进程的进程树
6) 打开火狐浏览器
7) 查找名为firefox的进程
8) 杀死名为firefox的进程

第十二单元 硬盘分区、格式化及文件系统的管理一


硬件设备与文件名的对应关系
硬盘的结构及硬盘分区
为什么进行硬盘分区
硬盘的逻辑结构
Linux系统中硬盘的分区
硬盘分区的分类
分区数量的约束
使用fdisk和partprobe命令来管理硬盘分区
fdisk 命令的功能
fdisk命令列表中常用的命令
partprobe命令
创建文件系统(数据的管理)
什么是格式化
什么是文件系统
文件系统类型
mkfs命令的功能
mkfs命令的用法举例
为一个分区设定label(分区名)
e2label命令的功能
e2label命令的用法举例
课后作业

【本节内容】
1. 硬件设备与文件名的对应关系(详见linux系统管理P297)
1) 掌握在Linux系统中,每个设备都被当初一个文件来对待。
2) 掌握各种设备在Linux中的文件名

2. 硬盘的结构及硬盘分区(详见linux系统管理P301)
1) 了解为什么要进行硬盘分区:
a) 更容易管理和控制系统,因为相关的文件和目录都放在一个分区中。
b) 系统效率更高。
c) 可以限制用户使用硬盘的份额(磁盘空间的大小)。
d) 更容易备份和恢复。
2) 掌握硬盘的逻辑结构:
一个硬盘逻辑上可以被划分成块、磁道、磁柱和分区。
3) 掌握块的定义:块是盘片上寻址(访问)的最小单位,一个块可以存储一定字节的数据。
4) 掌握磁道的定义:磁道是由一系列头尾相连的块组成的圆圈。
5) 掌握磁柱的定义:磁柱是由一叠磁道,由在相同半径上每个盘面的磁道所组成。
6) 掌握分区的定义:分区是由一组相邻的磁柱所组成。
3. Linux系统中硬盘的分区(详见linux系统管理P303)
1) 掌握硬盘分区的分类:硬盘的分区可以分为主分区、扩展分区和逻辑分区。
2) 掌握主分区的数量:在一个硬盘上最多可以划分出4个主分区。
3) 了解Linux操作系统的内核支持每个硬盘上的分区数量还是有一定限制的,Linux内核在每个硬盘上可以最多支持:
a) 在SCSI硬盘上划分15个分区(Partitions)。
b) 在IDE硬盘上划分63个分区(Partitions)。
4. 使用fdisk和partprobe命令来管理硬盘分区(详见linux系统管理P394)
1) 掌握fdisk命令的功能:创建磁盘分区。
2) 掌握fdisk命令列表中常用的命令:
a) d:删除一个(已经存在的)分区,其中d是delete的第1个字母。
b) l:列出(已经存在的)分区的类型,其中l是list的第1个字母。
c) m:列出fdisk中使用的所有命令,其中m是menu的第1个字母。
d) n:添加一个新的分区,其中n是new的第1个字母。
e) p:列出分区表的内容,其中p是print的第1个字母。
f) q:退出fdisk,但是不存储所做的变化,其中q是quit的第1个字母。
g) t:改变分区系统的id,其中t是title的第1个字母。
h) w:退出fdisk并存储所做的变化,其中w是write的第1个字母。
3) 掌握partprobe命令的功能:重新初始化内存中内核的分区表。
5. 创建文件系统(数据的管理)(详见linux系统管理P399)
1) 掌握格式化的定义:所谓的格式化就是将分区中的硬盘空间划分成大小相等的一些数据块(Blocks),以及设定这个分区中有多少个i节点可以使用等。
2) 掌握文件系统的定义:文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。
3) 了解常用的文件系统类型
ext2:Linux系统中标准的文件系统
ext3:一种日志式文件系统
ext4:一种针对ext3系统的扩展日志式文件系统
lvm:逻辑盘卷管理 
iso9660:目前唯一通用的光盘文件系统 
4) 掌握mkfs命令的功能:格式化磁盘。
5) 灵活应用常用的格式化命令:
mkfs.文件系统类型
例如,将分区/dev/sdb1格式化为ext4文件系统的命令为:
mkfs.ext4 /dev/sdb1
6. 为一个分区设定label(分区名)(详见linux系统管理P405)
1) 掌握e2label命令的功能:设定或查看一个设备的label名称。
2) 灵活应用e2label命令设定label:
a) 例如:查看/dev/sdb1分区的label的命令为:
e2label /dev/sdb1
b) 例如:将/dev/sdb1分区的label设定为wg的命令:
e2label /dev/sdb1 wg
7. 课后作业(用时40分钟)
1) 开启Linux系统前添加一块大小为20G的SCSI硬盘
2) 开启系统,右击桌面,打开终端
3) 为新加的硬盘分区,一个主分区大小为10G,剩余空间给扩展分区,在扩展分区上划分两个逻辑分区,大小各5G
4) 格式化主分区为ext3系统
5) 格式化两个逻辑分区为ext4系统
6) 为主分区添加卷标wg
7) 查看主分区的卷标

第十三单元 硬盘分区、格式化及文件系统的管理二


文件系统的挂载与卸载
什么是挂载
mount命令的功能
mount命令的用法举例
umount命令的功能
umount命令的用法举例
利用/etc/fstab文件在开机时自动挂载文件系统
虚拟内存的概念以及设置与管理
什么是虚拟内存
创建swap分区的步骤
使用硬盘分区创建和使用系统交换分区的实例
mkswap 命令的功能
mkswap 命令的用法举例
swapon命令的功能
swapon -a 
swapon -s
swapon命令的用法举例
i节点
什么是i节点
符号(软)链接
什么是符号链接
使用ln命令创建软连接
硬链接
什么是硬链接
使用ln命令创建硬链接
Linux系统中的文件类型
Linux系统中的常见文件类型
怎样检查磁盘空间
df命令
du命令
课后作业
【本节内容】
1. 文件系统的挂载与卸载(详见linux系统管理P406)
1) 掌握挂载的定义:挂载指将一个设备(通常是存储设备)挂接到一个已存在的目录上。
2) 掌握mount命令的功能:实现文件系统的挂载。
3) 灵活应用mount命令实现文件系统的挂载:
例如:将/dev/sdb1分区挂载到/wg目录上的命令:
mount /dev/sdb1 /wg
4) 掌握umount命令的功能:实现文件系统的卸载。
5) 灵活应用umount命令实现文件系统的卸载:
例如:卸载/wg上的文件系统的命令:
umount /wg
2. 虚拟内存的概念以及设置与管理(详见linux系统管理P414)
1) 掌握虚拟内存的定义:所谓虚拟内存就是一块硬盘空间被当做内存使用,也被称为交换分区(swap)。
2) 了解Linux交换分区的类型为:0x82
3) 掌握mkswap命令的功能:设置交换分区。
4) 掌握使用mkswap命令设置交换分区的用法举例:
例如:将分区/dev/sdb2设置为交换分区的命令:mkswap /dev/sdb2
5) 掌握swapon命令的功能:启动交换分区。
6) 掌握swapon –a命令的功能:启动全部的交换分区。
7) 掌握swapon –s命令的功能:列出当前正在使用的所有系统交换分区的状态。
8) 掌握使用swapon命令的用法举例:
例如:启用交换分区/dev/sdb2的命令:swapon /dev/sdb2
3. i节点(详见linux系统管理P170)
1) 掌握i节点的定义:i节点实际上是一个数据结构,它存放了有关一个普通文件、目录或其他文件系统对象的基本信息。
4. 符号(软)链接(详见linux系统管理P174)
1) 掌握符号链接的定义:符号链接是指向另一个文件的一个文件。
2) 掌握ln命令创建软连接的用法举例:
a) 为wolf/dog.wolf.baby文件建立一个dog_ wolf.boy符号链接并放在bodydog目录中的命令:
ln –s wolf/dog.wolf.baby bodydog/dog_ wolf.boy
5. 硬链接(详见linux系统管理P179)
1) 掌握硬链接的定义:一个硬链接(hard link)是一个文件名与一个i节点之间的对应关系,也可以认为一个硬链接是在所对应的文件上添加了一个额外的路径名。
2) 掌握ln命令创建硬连接的用法举例:
a) 为wolf/wolf.dog文件在backup目录中建立一个名为wolf.dog2的硬链接命令:
ln wolf/wolf.dog backup/wolf.dog2
6. Linux系统中的文件类型(详见linux系统管理P183)
1) 掌握Linux系统中常见的文件类型:
-:普通文件(regular file),也有人称为正规文件。
d:目录(directory)。
l:符号(软)链接。
b:块特殊文件(b是block的第1个字符),一般指块设备,如硬盘。
c:字符特殊文件(c是character的第1个字符),一般指字符设备,如键盘。
7. 怎样检查磁盘空间(详见linux系统管理P185)
1) 掌握df命令的功能:显示文件系统中磁盘使用和空闲区的数量。
-a 显示所有磁盘
-h 单位转换
2) 掌握du命令的功能: 显示目录和文件的大小a h同上

8. 课后作业(用时65分钟)
1) 开启Linux系统前添加一块大小为15G的SCSI硬盘
2) 开启系统,右击桌面,打开终端
3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G
4) 格式化主分区为ext3系统
5) 将逻辑分区设置为交换分区
6) 启用上一步的交换分区
7) 查看交换分区的状态
8) 新建目录/dir1
9) 将主分区挂载到/dir1目录
10) 查看整个磁盘的使用情况
11) 查看/分区的使用总量
12) 在root用户的家目录新建文件file1
13) 为file1创建硬链接file2
14) 为file1创建符号链接file3
15) 以长列表格式显示root用户家目录下的内容,要求显示i阶段,并比较硬链接、符号链接的i节点和原文件的关系

第十四单元 Linux网络原理及基础设置 


使用ifconfig命令来维护网络
ifconfig命令的功能
ifconfig命令的用法举例
使用ifup和ifdown命令启动和停止网卡
ifup命令的功能
ifdown命令的功能
ifup命令的用法举例
ifdown命令的用法举例
网络配置文件
网卡对应的网络配置文件
什么是网络配置
ip命令
ping命令
setup命令
课后作业
【本节内容】
1. 使用ifconfig命令来维护网络(详见linux系统管理P422)
1) 掌握ifconfig命令的功能:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址。
2) 灵活应用ifconfig命令设定网卡的IP地址:
例如:修改eth0网卡的IP地址为172.18.48.56和子网掩码255.255.255.128的命令:
ifconfig eth0 172.18.48.56 netmask 255.255.255.128
2. 使用ifup和ifdown命令启动和停止网卡(详见linux系统管理P424)
1) 掌握ifup命令的功能:启动系统上指定的网卡。
2) 掌握ifdown命令的功能:停止系统上指定的网卡。
3) 掌握使用ifup命令启用指定网卡的举例:
例如:启动eth0网卡的命令:ifup eth0
4) 掌握使用ifdown命令停用指定网卡的举例:
只能作用于配置文件
例如:停用eth0网卡的命令:ifdown eth0
3. 网络配置文件 (详见linux系统管理P425)
1) 了解网卡的配置文件存放在/etc/sysconfig/network-scripts目录中,且每个网卡对应的配置文件的文件名以ifcfg-开始,如eth0这个网卡对应的网络配置文件就是ifcfg-eth0。
补:虚拟机新添加网卡没有配置文件需手动添加配置或图形添加网卡
λ 掌握网络配置的定义:所谓的网络配置(设定)就是要修改网卡所对应的网络配置文件,可以通过使用文字编辑器(vi)直接编辑网络配置文件来重新配置网络。
4. 课后作业(用时35分钟)
1) 查看当前所有正在启动的网卡的详细信息
2) 激活系统的第一块网卡
3) 为系统临时设置ip为192.168.1.10/24
4) 查看第一块网卡的详细信息
5) 修改网卡配置文件将系统的第一块网卡的ip地址设定为192.168.3.2,子网掩码设置为255.255.255.0,是否启动设置为yes
6) 使用setup命令为系统第一块网卡设置ip为10.0.0.1/8

route:http://blog.csdn.net/chenlycly/article/details/52141854

第十五单元 软件包的管理


使用RPM安装及移除软件
什么是RPM
rpm的文件名
rpm软件安装与移除工作中经常使用的选项
查看RPM软件包中的信息
查询已安装的软件包信息
RPM包的属性依赖性问题
什么是RPM包的属性依赖性问题
RPM包的属性依赖性问题解决方法
将nginx编译为rpm包
课后作业
【本节内容】
1. 使用RPM安装及移除软件(详见linux系统管理P374)
1) 掌握RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写。
2) 了解rpm的文件名分为5部分,其中:
第1部分是name,表示这个rpm软件包的名称;
第2部分是version,表示这个rpm软件包的版本编号;
第3部分是release,表示这个rpm软件包的版本发布次数(修正号码);
第4部分是architectures,表示这个rpm软件包适用于哪些平台;
最后一部分是rpm,表示这个rpm软件包的文件扩展名。
3) 掌握rpm软件安装与移除工作中经常使用的选项:
a) –i:安装(Install)软件。
b) –U:升级(Upgrade)旧版本的软件。
c) –e:移除/删除(Erase)软件。
d) –v:显示详细的处理信息。
e) –h:显示安装进度。卸载不能用
2. 查看RPM软件包中的信息(详见linux系统管理P379)
1) 掌握常用的查询已安装的软件包信息的命令:
a) rpm –qa:显示目前操作系统上安装的全部软件包,其中q是query(查询)的第1个字母,a是all(全部)的第1个字母。
Rpm –qa | grep dhcp
b) rpm –qf 文件名:显示这个文件是由哪个软件包安装的,f是file(文件)的第1个字母。
例如:列出安装/bin/tar文件的软件包的命令为:rpm –qf /bin/tar
c) rpm –qi 软件包名:显示这个软件包的信息,i是information(信息)的第1个字母。
例如:列出tar-1.14-10.RHEL4这个软件包的详细信息的命令:rpm –qi tar-1.14-10.RHEL4
d) rpm –ql 软件包名:列出这个软件包中所包含的全部文件,其中l是list的第1个字母。
例如:列出tar-1.14-10.RHEL4这个软件包中所包含的全部文件的命令:rpm –ql tar
p数据包
3. RPM包的属性依赖性问题(详见linux系统管理P388)
1) 掌握RPM软件包的属性依赖性问题的定义:所谓的RPM软件包的属性依赖性问题,即这个软件包的安装依赖于其他软件包的安装。
4. 课后作业(用时40分钟)
1) 挂载光盘文件到/media目录
2) 进去/media目录下的Packages目录
3) 查看系统已安装的所有rpm包
4) 查看系统是否安装dhcp软件包
5) 安装dhcp软件包
6) 查看dhcp软件包的信息
7) 查看dhcp软件包中所包含的所有文件
8) 查看/bin/ls文件是由哪个软件包产生
9) 卸载dhcp软件包

第十六单元 yum管理RPM包 

yum的功能
本地yum配置
光盘挂载和镜像挂载
本地yum配置
网络yum配置
网络yum配置
Yum命令的使用
使用yum安装软件
使用yum删除软件
安装组件
删除组件
清除缓存
查询
课后作业
【本节内容】
1. yum的功能:yum是Yellow dog Updater, Modified的缩写,目的就是为了解决RPM的依赖关系的问题,方便使用者进行软件的安装、升级等等工作。
2. 掌握光盘挂载和镜像挂载
a) 光盘挂载
mount /dev/sr0 挂载点
或者
mount /dev/cdrom 挂载点
b) 镜像文件的挂载
mount -o loop -t iso9660 镜像文件 挂载点
其中,-o loop:用来把一个文件当成硬盘分区挂接上系统
3. 掌握yum的配置
yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件。
4. 掌握本地yum配置
[root@localhost ~]# mount /dev/cdrom /mnt #挂载光盘到/mnt目录
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
rhel-source.repo
[root@localhost yum.repos.d]# cp rhel-source.repo rhel.repo #拷贝一份配置文件
[root@localhost yum.repos.d]# vi rhel.repo #编辑配置文件如下[rhel-local] #模块名称,须修改不能与其他.repo文件中的重名name=Red Hat Enterprise Linux 6 local repo #名称随便起baseurl=file:///mnt #指定rpm仓库的位置
enabled=1 #1开启该配置,0为关闭
gpgcheck=1 #1为校对软件
[root@localhost ~]# yum install vsftpd httpd #安装vsftpd及httpd服务
5. 掌握远程yum配置方法
6. 利用vsftpd搭建yum源服务器:
Vsftpd默认的配置文件是允许匿名访问,这里直接启动就可以了:
[root@localhost ~]# umount /dev/cdrom #卸载光盘
[root@localhost ~]# mount /dev/cdrom /var/ftp/pub/ #挂载光盘到vsftpd的公众目录
[root@localhost ~]# service vsftpd restart #重启vsftpd服务
必须关闭防火墙和selinux
Service iptables stop
Getenforce :查看selinux状态
临时关闭:不用重启:setenforce 0
0 permissive允许 1 enforcing 执行

配置客户机:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls #rhel.repo是按照本地yum配置生成的
rhel.repo rhel-source.repo
[root@localhost yum.repos.d]# cat rhel.repo #修改为以下内容
[rhel-ftp]
name=Red Hat Enterprise Linux 6
baseurl=ftp://192.168.8.42/pub #指定yum源地址
enabled=1
gpgcheck=1
测试:
[root@localhost ~]# yum install bind #安装DNS服务
7. 掌握使用yum安装软件
yum –y install 软件名
8. 掌握使用yum删除软件
yum –y remove 软件名
9. 掌握使用yum安装组件
yum –y groupinstall 组件名
10. 掌握使用yum删除组件
yum –y groupremove 组件名
11. 掌握清除yum缓存
yum clean all
12. 使用yum查找软件包
yum search
13. 课后作业(用时45分钟)
1) 以最小化开启Linux系统
2) 配置本地yum
3) 安装vim
4) 清除yum缓存
5) 安装组件“KDE 桌面”

第十七单元 Samba服务


Samba的功能
Samba的安装
Samba服务的启动、停止、重启
Samba服务的配置
Samba服务的主配置文件
samba服务器配置实例
Samba客户端设置
windows客户端
Linux客户端
课后作业
【本节内容】
1. 掌握samba的功能: samba是一个网络服务器,用于Linux和Windows之间共享文件。
2. 掌握samba服务的启动、停止、重启
service smb start|stop|restart
3. 掌握samba的主配置文件为:/etc/samba/smb.conf
4. 掌握配置samba服务

注意:

1 客户端要对目录是否有权限,必须samba软件放权+系统放权

2 每个用户的访问方式是:\\服务端ip\用户名,默认访问自己的家目录(该用户对该目录有w权限,且samba对用户的家目录开启了writeable=yes的权限)

3 对于共享的目录,是所有人打开目录进行操作的,而不是一个打印机,所以printable一定要设置no

4 writeable=yes代表对所有用户放行了写权限,write list=user1,user2无效,因为放行的所有用户中已然包含user1和user2

5 writeable=no,write list=user1,user2代表所有人都没有写权限,唯独user1和user2有

comment = ......   设置共享注译
path =    设置共享目录的物理路径
valid users = @组名,用户名   设置允许哪些合法组或用户访问
public = yes|no  设置共享资源是否能给游客帐号访问
browseable = yes|no  设置该共享为隐藏共享
writable = yes|no 设置是否允许客户端写入数据
hosts allow =  设置允许访问该共享的合法网段或IP
samba安全认证掌握两种:share (匿名访问)user:用户名密码
添加smb用户和设置密码:smbpasswd –a 用户
Useradd u
5. 掌握windows客户端的访问方式

6.掌握Linux客户端的访问方式

7.课后作业(用时50分钟)

1) Linux服务器上安装Samba服务软件
2) 对Samba的主配置文件进行资源共享设置
3) 在Samba服务器上设置用户登录账号
4) 分别在Linux和Windows客户端进行连接测试

第十八单元 nginx服务

源码安装:

yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
ls
tar xvf nginx-1.10.3.tar.gz 
cd nginx-1.10.3
ls
./configure
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --without-http_rewrite_module #--without-http_rewrite_module代表不使用重写功能,即不会引用pcre库,如果安装过程中出现pcre相关问题,可以指定该参数
make
make install

说明:

pcre: 用来作地址重写的功能。

zlib:nginx 的gzip模块,传输数据打包,省流量(但消耗资源)。

openssl:提供ssl加密协议。

安装:http://www.cnblogs.com/crazyacking/p/5138146.html

相关参数:http://blog.csdn.net/xifeijian/article/details/20956605

location:http://www.tuicool.com/articles/Jr63qy

正向代理,反向代理,透明代理:http://blog.csdn.net/u012572955/article/details/49357219

代理:A访问B,A把自己的请求让C代理,C去访问B

正向代理:A明确地知道自己的代理C的存在,A明确地指定自己的代理地址是C,让C去访问B,拿到结果再给A,通常用来FQ

反向代理:用户请求发给nginx后,由nginx负载给代理的机器,拿到结果,再由nginx返回给客户端(如此,nginx便把一堆自己代理的机器隐藏到后端,外界访问的就是nginx)

透明代理:用户不知道代理的存在,用户->交换机->路由器->代理服务器,代理服务器可以控制用户的上网行为,比如限制用户可以访问和不可以访问的网站,多用于用户行为管理

LB:http://nginx.org/en/docs/http/load_balancing.html

第十九单元 nfs服务

===============服务端

介绍:

  NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

  NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享。

  NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。

安装:

yum install rpcbind nfs-utils -y

配置:

NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。

/etc/exports文件内容格式:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

a. 输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

b. 客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

  • 指定ip地址的主机:192.168.0.200
  • 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
  • 指定域名的主机:david.bsmart.cn
  • 指定域中的所有主机:*.bsmart.cn
  • 所有主机:*

c. 选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

  • 设置输出目录只读:ro
  • 设置输出目录读写:rw

用户映射选项

  • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
  • no_all_squash:与all_squash取反(默认设置);
  • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
  • no_root_squash:与rootsquash取反;
  • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
  • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项

  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  • no_wdelay:若有写操作则立即执行,应与sync配合使用;
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

修改配置

[root@MiWiFi-R3-srv nginx]# cat /etc/exports
/share 192.168.31.0/24(rw,sync,fsid=0)

开权限(nfs开启了w权限还不行,others还需要对/share目录有w权限)

chmod -R o+w /share

先为rpcbind和nfs做开机启动:

[root@MiWiFi-R3-srv nginx]# systemctl enable nfs-server.service
[root@MiWiFi-R3-srv nginx]# systemctl enable rpcbind.service

启动(必须先启动rpcbind服务)

[root@MiWiFi-R3-srv nginx]# systemctl start rpcbind.service
[root@MiWiFi-R3-srv nginx]# systemctl start nfs-server.service

确认nfs服务器启动成功

[root@MiWiFi-R3-srv nginx]# rpcinfo
[root@MiWiFi-R3-srv nginx]# exportfs 
/share 192.168.31.0/24

[root@MiWiFi-R3-srv nginx]# showmount -e #默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错
Export list for MiWiFi-R3-srv:
/share 192.168.31.0/24

[root@MiWiFi-R3-srv nginx]# showmount -a #显示已经与客户端连接上的目录信息
All mount points on MiWiFi-R3-srv:

=====================客户端

yum install rpcbind nfs-utils -y

systemctl enable rpcbind.service && systemctl start rpcbind.service

showmount -e NFS服务器IP #检查 NFS 服务器端是否有目录共享
mount -t nfs 192.168.31.106:/share /var/www/html/

=====================测试
基于nginx的负载均衡配置,打开后端被代理服务的access.log日志,tail -f access.log来观察访问,访问LB刷新页面发现内容保持一致,但是每台被代理的机器的access.log日志都有新的内容进来

第二十单元 计划任务crond服务

什么是计划任务:
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务

crond服务相关的软件包
[root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
cronie-anacron-1.4.11-14.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-14.el7.x86_64

这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。

计划任务分为两类:系统级和用户级

首先需要知道的是,无论是系统级还是用户级的cron计划都是文本文件,系 统的计划文件存放在/etc/crontab路径下。用户的计划文件放在/var/spool/cron/用户名,不管是哪一种,都可以满足我们定制计划任务的需求。

root用户可以直接对文件进行修改来编写计划任务也可以使用 crontab -e命令,而普通用户只能使用后者。除此之外,系统crontab文件中任务的定义也有所不同,在前五个部分之后插入了一个“用户”部分。

[root@MiWiFi-R3-srv ~]# cat /etc/crontab #查看全局计划任务
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * root run-parts /test #run-parts命令,可以执行一个目录下所有的可执行文件,目录下文件必须有执行权限

You have new mail in /var/spool/mail/root


[root@MiWiFi-R3-srv ~]# crontab -u tom -l #通过命令查看用户tom的计划任务
*/1 * * * * echo 123213123213


[root@MiWiFi-R3-srv ~]# cat /var/spool/cron/tom #从文件中查看用户tom的计划任务
*/1 * * * * echo 123213123213

crontab命令编写计划任务

语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]

crontab任务配置基本格式:
*  *  *  *  *  command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

参  数: 
-e  编辑该用户的计时器设置。 
-l  列出该用户的计时器设置。 
-r  删除该用户的计时器设置。 
-u<用户名称>  指定要设定计时器的用户名称。

注意:

1 查看计划任务的执行:tail -f /var/log/cron

2 写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如* * * * * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot

crontab例子:

30 21 * * * /usr/local/etc/rc.d/apache restart #每晚的21:30 重启apache

45 4 1,10,22 * * /usr/local/etc/rc.d/apache restart #每月1、10、22日的4 : 45重启apache

10 1 * * 6,0 /usr/local/etc/rc.d/apache restart #每周六、周日的1 : 10重启apache

0,30 18-23 * * * /usr/local/etc/rc.d/apache restart #每天18 : 00至23 : 00之间每隔30分钟重启apache

0 23 * * 6 /usr/local/etc/rc.d/apache restart #每星期六的11 : 00 pm重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/apache restart #晚上11点到早上7点之间,每隔一个小时的每分钟重启 apache

0 */1 * * * /usr/local/etc/rc.d/apache restart #每一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/apache restart #每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/apache restart #一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44 #每半小时同步一下时间

0 */2 * * * www /usr/bin/somecommand >> /dev/null 2>&1 #以用户www的身份每两小时就运行某个程序:


0 1 * * * /home/testuser/test.sh #每天1点调用/home/testuser/test.sh

*/10 * * * * /home/testuser/test.sh #每10钟调用一次/home/testuser/test.sh

30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每天的21:30重启lighttpd

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月1、10、22日的4 : 45重启lighttpd

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart #每周六、周日的1 : 10重启lighttpd

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart #上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart #上面的例子表示每星期六的11 : 00 pm重启lighttpd

* */2 * * * /usr/local/etc/rc.d/lighttpd restart #每两小时的每分钟重启lighttpd

0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart #晚上11点到早上7点之间,每隔一小时重启lighttpd

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每月的4号与每周一到周三的11点重启lighttpd

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart #一月一号的4点重启lighttpd

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44 #每半小时同步一下时间

对于一些常见的时间格式可以用如@yearly的方式代替

@reboot 代表的意思Run once, at startup.
@yearly 代表的意思Run once a year, "0 0 1 1 *".
@annually 与@yearly相同意思
@monthly 代表的意思Run once a month, "0 0 1 * *".
@weekly 代表的意思Run once a week, "0 0 * * 0".
@daily 代表的意思Run once a day, "0 0 * * *".
@midnight 与@daily的意思相同
@hourly 代表的意思Run once an hour, "0 * * * *".
除此之外,系统还有一些自带的计划任务

cron默认配置了调度任务,分别为:hourly、daily、weekly、mouthly,默认配置文件为/etc/anacrontab

将需要执行的脚本放到相应的目录下即可,目录分别为:

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/ect/cron.mouthly

查看cron服务是否起作用:

如果我们要查看定时任务是否准时调用了可以/var/log/cron中的运行信息

cat /var/log/cron

也可以用tail -f /var/spool/mail/用户名,来查看普通用户的计划任务执行情况

此处需要记住两点:

第一:cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

第二:crontab的用户手册中推荐每一个命令使用绝对路径,例如调用rm命令时写作:/bin/rm,这是为了防止由于每一个用户的PATH环境变量不同而导致命令无法找到的错误。

网上查询到的资料crontab不执行的问题:

转自:http://blog.csdn.net/jbgtwang/article/details/7995801

第一,脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到 70%以上。因为程序执行到某一步导致crontab终止执行,我就碰到一次在迁移代码的时候将数据库连错了。导致无法访问而死在那里了。

第二,执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们 手动执行成功而crontab不能执行的时候,笔者碰到一次就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile

第三,系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********

第四,就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。

第五,crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。

第六,crontab不执行的问题困扰了好长时间,脚本写的都正确,但是就是不执行,最终解决方法如下:
crontab -u root /var/spool/cron/root
这样root用户的crontab就生效了
service crond restart
重启下服务就好了

第七,crond没有启动

第八,脚本编码问题,脚本在window下编写,传到linux下后报“锘?!/bin/bash”,用vi编辑器新建新shell脚本,输入内容后保存。

第九

 

* * * * * tar czf /tmp/`date '+%Y'` /etc 该计划任务中命令的执行流程是crond->tar命令,而crond在执行tar命令时,无法识别通配符%的意思(shell能识别),所以该命令无法正常执行

改正结果:* * * * * tar czf /tmp/`date '+\%Y'` /etc

 

通常都会把要执行的操作放到文件中,然后/bin/bash a.sh去执行,* * * * * /bin/bash a.sh  ,这样的执行流程就变成了crond->bash shell->a.sh,这样a.sh内即便是写%号,也能被识别出来

 附件1 linux系统启动流程

最初始阶段
当我们打开计算机电源,计算机会自动从主板的BIOS(Basic Input/Output System)读取其中所存储的程序。这一程序通常知道一些直接连接在主板上的硬件(硬盘,网络接口,键盘,串口,并口)。现在大部分的BIOS允许你从软盘、光盘或者硬盘中选择一个来启动计算机。
下一步,计算机将从你所选择的存储设备中读取起始的512 bytes(比如光盘一开是的512 bytes,如果我们从光盘启动的话)。这512 bytes叫做主引导记录MBR (master boot record)。MBR会告诉电脑从该设备的某一个分区(partition)来装载引导加载程序(boot loader)。Boot loader储存有操作系统(OS)的相关信息,比如操作系统名称,操作系统内核 (kernel)所在位置等。常用的boot loader有GRUB和LILO。
随后,boot loader会帮助我们加载kernel。kernel实际上是一个用来操作计算机的程序,它是计算机操作系统的内核,主要的任务是管理计算机的硬件资源,充当软件和硬件的接口。操作系统上的任何操作都要通过kernel传达给硬件。Windows和Linux各自有自己kernel。狭义的操作系统就是指kernel,广义的操作系统包括kernel以及kernel之上的各种应用。
(Linus Torvalds与其说是Linux之父,不如说是Linux kernel之父。他依然负责Linux kernel的开发和维护。至于Ubuntu, Red Hat, 它们都是基于相同的kernel之上,囊括了不同的应用和界面构成的一个更加完整的操作系统版本。)
实际上,我们可以在多个分区安装boot loader,每个boot loader对应不同的操作系统,在读取MBR的时候选择我们想要启动的boot loader。这就是多操作系统的原理。
小结:BIOS -> MBR -> boot loader -> kernel
kernel
如果我们加载的是Linux kernel,Linux kernel开始工作。kernel会首先预留自己运行所需的内存空间,然后通过驱动程序(driver)检测计算机硬件。这样,操作系统就可以知道自己有哪些硬件可用。随后,kernel会启动一个init进程。它是Linux系统中的1号进程(Linux系统没有0号进程)。到此,kernel就完成了在计算机启动阶段的工作,交接给init来管理。
小结: kernel -> init process
init process
(根据boot loader的选项,Linux此时可以进入单用户模式(single user mode)。在此模式下,初始脚本还没有开始执行,我们可以检测并修复计算机可能存在的错误)
随后,init会运行一系列的初始脚本(startup scripts),这些脚本是Linux中常见的shell scripts。这些脚本执行如下功能:
设置计算机名称,时区,检测文件系统,挂载硬盘,清空临时文件,设置网络……
当这些初始脚本,操作系统已经完全准备好了,只是,还没有人可以登录!!!init会给出登录(login)对话框,或者是图形化的登录界面。

输入用户名(比如说vamei)和密码,DONE!
在此后的过程中,你将以用户(user)vamei的身份操作电脑。此外,根据你创建用户时的设定,Linux还会将你归到某个组(group)中,比如可以是stupid组,或者是vamei组。
所以你将是用户vamei, 同时是vamei组的组员。(注意,组vamei和用户vamei只是重名而已,就好想你可以叫Dell, 同时还是Dell公司的老板一样。你完全也可以是用户vamei,同时为stupid组的组员)

原文地址:https://www.cnblogs.com/zatzsr98/p/7049261.html