第五周总结(用户权限&定时任务&磁盘管理)

一. 用户权限相关

1. 操作系统权限概念说明:
1)基本权限:r	     w	      x
   权限划分:属主	属组		其他用户

2)文件权限具体说明:
(1)对于一个普通文件:
r:	是否可以查看文件内容(是否可以查看block)
w:	是否可以编辑文件内容(是否可以改写block)
x:	是否可以让文件运算
(2)对于一个目录文件:
r:	是否可以查看目录下面数据信息
w:	是否可以在目录下删除/添加/重命名文件信息
x:	是否可以让目录进行切换

文件权限:
在这里插入图片描述
文件权限总结:

  1. root用户可以随意查看和编辑任意文件信息, 不受到权限限制
  2. 文件的权限中, 读权限是最重要,
    有了rw配合, 才能正常编写文件
    有了rx配合, 才能正常执行文件
    属主权限: 6 (rw) 属组权限4® 其他用户® — 默认文件权限644

目录权限:
在这里插入图片描述
目录权限总结:

  1. root用户可以随意查看和编辑任意目录信息, 不受到权限限制
  2. 目录的权限中, 执行权限是最重要,
    有了rx配合, 才能正常查看目录下面信息
    有了wx配合, 才能正常在目录中创建/删除/重命名数据信息
    属主权限: 7 (rwx) 属组权限5(rx) 其他用户5(rx) — 默认目录权限755
    在这里插入图片描述
 文件权限说明:
   1)没有权限
	管理员用户(root):	读、写权限都可以执行,但是没有执行权限。
    数据属主信息:		只有写权限可以执行,但是没有读和执行权限;
                      	且写权限不完全,会覆盖前一次的内容。
    数据其他用户:		任何权限都不能执行。
   2)只有读权限
    管理员用户(root):	读、写权限都可以执行,但是没有执行权限。
    数据属主信息:		读写权限都可以执行,但是没有执行权限。
    数据其他用户:		只有读权限可以执行,但是没有写和执行权限。
   3)只有写权限
    管理员用户(root):	读、写权限都可以执行,但是没有执行权限。
    数据属主信息:		只有写权限可以执行,但是没有读和执行权限;
                      	且写权限不完全,会覆盖前一次的内容。
    数据其他用户:		只有写权限可以执行,但是没有读和执行权限;
                     	且写权限不完全,会覆盖前一次的内容。
   4)只有执行权限
     管理员用户(root):	读、写和执行权限都可以执行。
     数据属主信息:		只有写权限可以执行,但是没有读和执行权限;
                     	且写权限不完全,会覆盖前一次的内容。
     数据其他用户:		任何权限都不能执行。

. 目录权限说明:
   1)没有权限
     管理员用户(root):	读、写和执行权限都可以执行。
     数据属主信息:		任何权限都不能执行。
     数据其他用户:		任何权限都不能执行。
   2)只有读权限
     管理员用户(root):	读、写和执行权限都可以执行。
     数据属主信息:		只有读权限可以执行,但是没有写和执行权限;
                      	且读权限不完全,不会显示inode信息,只有block信息。
     数据其他用户:		只有读权限可以执行,但是没有写和执行权限;
                      	且读权限不完全,不会显示inode信息,只有block信息。
   3)只有写权限
     管理员用户(root):	读、写和执行权限都可以执行。
     数据属主信息:		任何权限都不能执行。
     数据其他用户:		任何权限都不能执行。
   4)只有执行权限
     管理员用户(root):	读、写和执行权限都可以执行。
     数据属主信息:		只有执行权限可以执行,但是没有读和写权限。
     数据其他用户:		只有执行权限可以执行,但是没有读和写权限。
2. 系统数据默认权限设置:
创建一个文件: 默认权限644
创建一个目录: 默认权限755

umask    --- 查看默认权限运算数值/改变默认权限
默认文件权限: 666 - umask = 666 - 022 = 644
                          666 - 044 = 622  umask偶数正常运算
						  666 - 033 = 644  umask奇数正常运算之后+1
默认目录权限: 777 - umask = 777 - 022 = 755
                          777 - 044 = 733
                          777 - 033 = 744

什么是umask值?

答:控制用户默认创建的权限

umask是怎么控制权限的呢?

比如:在我的系统中, umask的默认值是00220022是个什么意思呢? 

意思是说, 如果创建文件, 那么它的默认权限是664, 如果是创建目录, 那么它的权限是775。那这个是怎么算的呢?

其实这里的0022就是指的被拿掉的权限。

文件默认创建权限(-rw-rw-rw-------w--w-==> -rw-r--r--

目录默认创建权限(drwxrwxrwx)-(d----w--w-==> drwxr-xr-x

在这里插入图片描述

3. 操作系统默认权限调整:
vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]
then
        umask 002   修改普通用户默认数据权限
    else
        umask 022   修改管理员用户默认数据权限   
    fi

$UID -gt 199   ---> 判断当前登录用户UID是否大于199
"`/usr/bin/id -gn`" = "`/usr/bin/id -un`"  --- 判断登录用户名称和组名称是否一致 
4. 系统数据权限调整方法:
直接修改数据权限:
	chmod u/g/o +/-/=   --- 针对不同用户设置权限
	chmod a +/-/-       --- 针对所有用户统一设置权限
	chmod 755           --- 针对所有用户设置权限
	chmod -R xxx        --- 递归设置权限  (慎用)
	chmod -R 777 / oldboy 

	-R: 递归修改权
修改一类用户的所有权限:
	u=  :属组的权限等于
	g=  :属组的权限等于
	o=  :其他人的权限等于
	ug= :属主与属组的权限等于
	a=  :所有人的权限等于

修改一类用户某位或某些位权限:
	u+ :属主添加指定权限
	u- :属主减去指定权限
	g+ :属组添加指定权限
	g- :属组减去指定权限
	o+ :其他人添加指定权限
	o- :其他人减去指定权限
	a+ :所有人添加指定权限
	a- :所有人减去指定权限

修改数据属主用户: 
	chown  属主信息   数据信息
	chown  .属组信息  数据信息 
	chown  属主信息.属组信息  数据信息
	chown  -R 属主信息.属组信息  目录信息  --- 递归修改目录属主和属组信息

==========================================================================
root用户无法编写文件信息
确认数据信息是否上锁了
chattr +i  文件信息  	--- 上锁
chattr -i  文件信息 	--- 解锁 
lsattr 文件信息		--- 确认数据是否上锁
==========================================================================

chattr命令详解

常见命令参数
	A	告诉系统不要修改对这个文件的最后访问时间。
	S	一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘。
	a	系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。
		如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
	b	不更新文件或目录的最后存取时间。
	c	将文件或目录压缩后存放。
	d	当dump程序执行时,该文件或目录不会被dump备份。
	D	检查压缩文件中的错误。
	i	系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件。
	s	彻底删除文件,不可恢复,因为是从磁盘上删除,然后用0填充文件所在区域。
	u	当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件,用来防止意外删除文件或目录。
	t	文件系统支持尾部合并(tail-merging)。
	X	可以直接访问压缩文件的内容。

常用的命令展示
	chatter: 锁定文件,不能删除,不能更改
   	 		 +a:  只能给文件添加内容,但是删除不了,
        	 chattr +a  /etc/passwd
        -d:      不可删除
        加锁:	chattr +i  /etc/passwd      --- 文件不能删除,不能更改,不能移动
        查看加锁:lsattr /etc/passwd      	--- 文件加了一个参数 i 表示锁定
        解锁:	chattr -i /home/omd/h.txt   --- 表示解除
        
隐藏chattr命令:
	which chattr
	mv /usr/bin/chattr  /opt/ftl/
	cd /opt/ftl/ 
	mv chattr h    -->更改命令,使用别名h隐藏身份
	/opt/ftl/h +i /home/omd/h.txt   -->利用h 行驶chattr命令
	lsattr /home/omd/h.txt    -->查看加密信息

恢复隐藏命令
	mv h /usr/bin/chattr
	chattr -i /home/omd/h.txt
	lsattr /home/omd/h.txt

lsattr命令详解

功能说明:显示文件属性。

语  法:lsattr [-adlRvV][文件或目录…]

补充说明:用chattr执行改变文件或目录的属性,可执行lsattr指令查询其属性。

参  数:
	-a  显示所有文件和目录,包括以”.”为名称开头字符的额外内建,现行目录”.”与上层目录”..”。
	-d  显示,目录名称,而非其内容。
	-l  此参数目前没有任何作用。
	-R  递归处理,将指定目录下的所有文件及子目录一并处理。
	-v  显示文件或目录版本。
5. 操作系统读取数据原理:
对于文件:
inode: 存储文件属性信息/指针信息
block:: 存储文件数据内容
文件读权限: 可以查看文件内容信息(获取指针信息)
文件写权限: 可以编辑文件内容信息  --> r权限

对于目录:
inode: 存储目录属性信息/指针信息 
block: 目录下面数据名称信息
目录执行权限:可以进入到目录中(获取目录指针信息)
目录读权限:	 可以查看目录中数据信息(查看目录中文件名称信息)
6. 操作系统特殊权限说明:
setuid(4: 让普通用户可以拥有属主用户能力 (对操作文件命令进行权限调整)
	eg: /bin/cat  
	# ll /bin/cat
	-rwsr-xrwx. 1 root root 54160 Dec  4 10:33 /bin/cat
	没有setuid权限时, 只能root用户查看 shadow文件
	拥有setuid权限时, 所有普通用户查看 shadow文件 

	设置方法:
	chmod u+s / chmod 4644   --- 设置setuid权限

setgid(2: 让普通用户可以拥有属组用户能力 (对操作文件命令进行权限调整)
	chmod g+s / chmod 2644   --- 设置setgid权限

粘滞位(1: 创建一个共享目录, 只能文件属主用户对自己数据进行调整, 其他用户只能查看
	chmod o+t / chmod 1755   --- 设置粘滞位权限

PS: /tmp/ 权限必须是1777权限, 不能改动

3、如何设置上述特殊权限 
	chmod u+s  xxx # 设置setuid权限 
	chmod g+s  xxx # 设置setgid权限 
	chmod o+t  xxx # 设置stick bit权限,针对目录 
	chmod 4775 xxx # 设置setuid权限 
	chmod 2775 xxx # 设置setgid权限 
	chmod 1775 xxx # 设置stick bit权限,针对目录 

4、注意:有时你设置了s或t 权限,你会发现它变成了ST,这是因为在那个位置上你没有给它x(可执行)的权限,
   这样的话这样的设置是不会有效的,你可以先给它赋上x的权限,然后再给s或t 的权限
7. 操作系统用户提权配置:
说明: 指定相应普通用户可以拥有root用户能力
第一个历程: 编写提权配置文件
vi /etc/sudoers
root    			ALL=(ALL)       		ALL
oldboy  			ALL=(ALL)     		 	/bin/cat /etc/shadow 
                        						/bin/cat /etc/shadow, /bin/rm /oldboy/ *
只能提权用户信息	  权限集中管理配置 		指定特权信息

sudo提权文件书写规范要求:
1) 必须有三列信息, 列与列之前要有空格分隔
2) 提权命令必须写成绝对路径
3) 提权多个命令, 用逗号空格进行分隔
4) 提权多个命令时,在指定命令前面加上!, 表示取消指定特权(回收指定权利)
5) 提权操作时,在命令信息前面加上 NOPASSWD: 表示取消提权输入密码的过程	

第二个历程: 测试提权效果
sudo -l   --- 查看是否拥有特权信息
sudo cat /etc/shadow 
=====================================
扩展: setfacl/getfacl  --- 指定文件信息, 将文件操作权限赋予给哪个用户
https://www.cnblogs.com/ftl1012/p/setfacl.html
=====================================
总结: 系统用户权限问题, 调整方法?
1) 直接修改文件数据权限信息(rwx)   	chmod
2) 直接修改文件数据属主信息        	chown
3) 修改文件数据特殊权限信息        	setuid/粘滞位
4) 修改系统普通提权信息          	sudo 
5) 确认文件数据是否上锁了         	chattr +i/-i lsattr 
6) 将用户切换为root用户        	su - root 
8. 操作系统用户相关命令:
useradd
	-u :  指定创建用户uid数值信息 
	-g :  指定用户所属主要组信息
	-G :  指定用户所属附属组信息
	-M :  指定用户不需要有家目录
	-s :  指定用户登录系统方式   (可以登录/bin/bash  不可以登录/sbin/nologin)
		  创建服务, 需要创建虚拟用户信息(管理数据信息mysql 进程信息nginx)
	-c :  指定用户注释信息,如果有空格,需要使用" "包含
	-d :  指定用户家目录位置,创建用户时,会自动从/etc/skel目录中复制文件到家目录下
	      如果指定的文件存在将不会复制文件,如果父目录不存在,创建也将会失败。
	-r :  指定创建一个系统用户
	-M :  不创建用户家目录 
	-D :  修改创建用户的配置信息,文件位于/etc/default/useradd 
    注:创建用户时的诸多默认设定配置文件为/etc/login.defs
	
	# id alex01
    uid=667(alex01) gid=1036(oldboy) groups=1036(oldboy)
    # id alex03
    uid=669(alex03) gid=1038(alex03) groups=1038(alex03),1036(oldboy)
    
	创建虚拟用户方法
	useradd -u 670 alex04 -M -s /sbin/nologin
	
	给用户添加注释:
	useradd -c 运维人员 alex05

groupadd
	-g  : 指定创建组id号码
	
usermod   --- 修改用户相关信息
	-u :  修改创建用户uid数值信息 
	-g :  修改用户所属主要组信息
	-G :  修改用户所属附属组信息
	-s :  修改用户登录系统方式   (可以登录/bin/bash  不可以登录/sbin/nologin)
	      创建服务, 需要创建虚拟用户信息(管理数据信息mysql 进程信息nginx)
	-c :  修改用户注释信息
	-d :  修改用户家目录,需要配合使用-m选项才会自动复制用户家目录下的文件到新的家目录
	-m :  move-home to new directory
	-l :  修改用户的登陆名,即login名称
	-a :  连接多个附加组的参数
	-L :  锁定用户,即lock,/etcpasswd文件中,密码前面加!(一个)
	-U :  解锁用户,即unlock,在/etc/passwd文件中,取消密码前面的!号
	usermod alex -u 777 -g alex10 -G oldboy
	 
groupmod
userdel   --- 删除用户信息
	-r  --- 删除用户相关的数据信息  
	
groupdel  --- 删除用户组信息
passwd
格式:
	passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
参数:	
	-l :  锁定用户,在/etc/passwd的密码前面加!!,
	-u :  解锁用户,在/etcpasswd的密码前!!取消
	-d :  删除用户密码
	-e DATE :  设定过期时间
	-i DAYS :  非活动时间
	-n days :  最短使用期限
	-x days :  最长使用期限
	-w days :  警告期限

练习:

useradd
	[root@localhost ~]# useradd -u 1003 -c "TestUser" -d /home/geek -s /bin/sh geek
	[root@localhost ~]# getent passwd geek
	geek:x:1003:1003:TestUser:/home/geek:/bin/sh

	[root@localhost ~]# useradd sys -r -M -g 1001 -G root
	[root@localhost ~]# getent passwd sys
	sys:x:498:1001::/home/sys:/bin/bash
	[root@localhost ~]# id sys
	uid=498(sys) gid=1001(young) groups=1001(young),0(root)

	[root@localhost ~]# useradd -D     #查看系统useradd命令的默认值
	GROUP=100 
	HOME=/home
	INACTIVE=-1
	EXPIRE=
	SHELL=/bin/bash
	SKEL=/etc/skel
	CREATE_MAIL_SPOOL=yes

	说明:
	新用户添加到GID100的公共组 
	新用户的HOME目录将会位于/home/username 
	新用户账户密码在过期后不会被禁用 
	新用户账户未被设置为某个日期后就过期 
	新用户账户将bash shell作为默认shell 
	系统会将/etc/skel目录下的内容复制到用户的HOME目录下 
	系统为该用户账户在mail目录下创建一个用于接收邮件的文件 

	修改内容:     
	useradd –D -s shell 
	useradd –D –b BASE_DIR 
	useradd –D –g GROUP

usermod
	[root@localhost ~]# getent passwd user1
	user1:x:600:600::/home/user1:/bin/bash

	[root@localhost ~]# id user1
	uid=600(user1) gid=600(user1) groups=600(user1)

	[root@localhost ~]# usermod -u 700 -g user2 -aG bin,root -c 'linux' -d 	/none/user1 -s /bin/tsh -l linux user1

	[root@localhost ~]# getent passwd linux
	linux:x:700:601:linux:/none/user1:/bin/tsh

	[root@localhost ~]# id linux
	uid=700(linux) gid=601(user2) groups=601(user2),0(root),1(bin)

passwd
	[root@localhost ~]# echo young | passwd --stdin geek
	Changing password for user geek.
	passwd: all authentication tokens updated successfully.
9. 操作系统用户相关文件:
和用户相关的文件:
      /etc/passwd   	---记录系统用户信息
oldboy01:x: 1001: 1001: : /home/oldboy01: /bin/bash
oldboy02:x: 1002: 1002: : /home/oldboy02: /bin/bash
①         ②    ③     ④  ⑤   ⑥                     ⑦
①用户名称信息
②用户密码信息
③用户uid数值信息
④用户gid数据信息
⑤用户注释信息
⑥用户家目录路径信息
⑦用户登录系统方式

      /etc/shadow   	--- 记录用户密码信息
root:   $6$B9wp3OvD$WRDtiyw5aSglmKfJ8Pu...Z4yfj4oT2NG.:  17498:  0:  99999:   7:  :      
①         ②                   								③    ④    ⑤  	 ⑥   ⑦	⑧
上述文件内容总共分为八段,亦以分号隔开,说明如下:
第一段:用户名,需与/etc/passwd文件里面的用户名一致
第二段:加密的登录口令,如果为空,则表示无密码;
     星号代表账号被锁定
     双感叹号代表用户口令已过期
        $6$开头内容表示密码用SHA-512加密
        $1$表示用的SHA-1代加密的
        $2$表示用Blowfish加密的
        $5$表示用SHA-256加密的
第三段:最后一次修改时间,表示是从某个时刻起到用户最后一次修改口令的的天数。每个系统的时间起点对点可能不一样,例如在linux中这个起点时间是197011日。
第四段:最小时间间隔,表示两次修改口令之间的所需的最小天数。0表示可以随时修改
第五段:最大时间间隔,表示口令保持有效的最大天数。99999表示一直有效。
第六段:警告时间,表示的是从系统开始警告用户到用户密码正式失效之间的天数。
第七段:不活动时间,表示的是用户没有登录活动但账号仍能保持有效的最大天数。
第八段:失效时间,字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

      /etc/group   		--- 记录系统用户组信息
root:x:0:
 ①   ② ③ ④
第一段:组名称
第二段:组口令占位符,如果相应的组加了密码,内容在gshadow中,一般是x
第三段:组ID,简称GID
第四段:组内用户列表,如果一个组中有N个成员,这里都会相应的显示
 
      /etc/gshadow   	--- 记录用户组密码信息
root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.:	:
 ①       ②    											   ③   ④
第一段:组的名称,同/etc/group文件中的名字一致
第二段:加密的组口令,如果为空或者!,则表示无密码;
        $6$开头内容表示密码用SHA-512加密
        $1$表示用的SHA-1代加密的
        $2$表示用Blowfish加密的
        $5$表示用SHA-256加密的
第三段:组管理者,可以为空,如果有N个用户组管理者,用逗号隔开
第四段:组内用户成员列表,如果有N个用户,则用逗号隔开

和用户相关的目录:
	 /etc/readme  		--- 所有用户家目录

二. 定时任务

1. 操作系统定时任务介绍:
定时任务实现将重复完成工作, 由系统自动完成
1) 定时备份数据	   输入输出IO  
2) 日志文件切割    
3) 磁盘清理工作    
4) 内存清理工作    重启服务tomcat(java)

	linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。
	另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

	cat /etc/crontab  # 查看配置信息

系统调度的任务一般存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序
通过命令我们可以看一下里面的内容:cat /etc/crontab	文件包括下面几行:

	cat /etc/crontab
	SHELL=/bin/bash  # 第一行SHELL变量指定了系统要使用哪个shell,这里是bash,
	PATH=/sbin:/bin:/usr/sbin:/usr/bin  # 第二行PATH变量指定了系统执行 命令的路径
	MAILTO=root # 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,
				  如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户
	MAILTO=HOME=/  # 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录
	# run-parts  # 以下的都是设定的自动执行任务的条件和执行哪项任务
	51 * * * * root run-parts /etc/cron.hourly
	24 7 * * * root run-parts /etc/cron.daily
	22 4 * * 0 root run-parts /etc/cron.weekly
	42 4 1 * * root run-parts /etc/cron.monthly
    使用者权限文件
    在目录etc下有两个文件
	   cron.deny   # 该文件中所列用户不允许使用crontab命令
	   cron.allow   # 该文件中所列用户允许使用crontab命令
	crontab文件的存放目录
	   /var/spool/cron/  # 所有用户crontab文件存放的目录,以用户名命名
2. 操作系统定时任务实现方式:
方法一: 利用cronie软件  实现定时任务 crontab *
方法二: 利用atd软件     实现定时任务 和闹钟类似 一次设置之后,才能执行
方法三: 利用anacron软件 实现定时任务 时间设置不够灵活
        /etc/cron.daily   --- 每天定时执行(24小时)
		logrotate  --- 每天定时管理控制logrotate服务(切割日志服务)
		/etc/cron.hourly  --- 每小时定时执行
		/etc/cron.monthly --- 每月定时执行
		/etc/cron.weekly  --- 每周定时执行
3. 操作系统定时任务配置方法:
第一个历程: 确认系统软件是否安装/确认定时服务是否运行
# rpm -qa cronie
cronie-1.4.11-19.el7.x86_64
# systemctl status crond

第二个历程: 配置定时任务:
查看定时任务配置方法
# 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
  分 时 日 月 周

分钟: 表示从059之间的任何整数
小时: 表示从023之间的任何整数(注意是24小时制  例如:下午 14:00  夜里 02:00) 
天:   表示从131之间的任何整数(也可以说是日期)
月:   表示从112之间的任何整数
周:   表示从06,或者17之间的任何整数(16表示星期一到六 0/7表示星期天)
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件

在用户建立的定时任务文件中,每一行都代表一项任务,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段:
minute hour day month week command  # * * * * * date.py > a.txt,不同的参数对应相同位置的*,定时执行脚本放到文件内
特殊时间表示方式:
=======================================================================
*    ---*/n  --- 每隔多久
n-m  --- 连续时间范围
n,m  --- 不连续时间范围
=======================================================================

服务操作指令说明:
=======================================================================
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
/sbin/service crond status //启动服务
=======================================================================
4. 定时任务设置检查确认:
    Dec 25 09:01:02 oldboy69 anacron[7025]: Will run job `cron.daily' in 29 min.
    Dec 25 09:01:02 oldboy69 anacron[7025]: Jobs will be executed sequentially
	    ①            ②        ③                ④
    ①: 定时任务触发时间信息
	②: 定时任务执行主机名称
	③: 定时任务触发方式
	    CROND: 配置定时任务
		anacron: 系统默认定时任务(每天 每周 每小时目录): 执行任务信息(用户信息)


crontab在/etc目录下面存在
cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件。
	cron.daily是每天执行一次的job
	cron.weekly是每个星期执行一次的job
	cron.monthly是每月执行一次的job
	cron.hourly是每个小时执行一次的job
	cron.d是系统自动定期需要做的任务
	crontab是设定定时任务执行文件
	cron.deny文件就是用于控制不让哪些用户使用Crontab的功能

	-e	编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
	-l	显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
	-r	从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
	-i	在删除用户的crontab文件时给确认提示。
	-v	列出用户cron作业的状态

	crontab -e  # 创建自己的一个任务调度,此时会进入到vi编辑界面,来编写我们要调度的任务
	crontab -l 	# 列出定时的任务
	crontab -r con_name # 删除crontab文件
	which ifconfig  # 获取命令路径
5. 系统定时任务配置规范:
1)编写定时任务规范
	编写命令信息定时任务
      第一个历程: 先将任务命令进行执行测试
      tar zchf /backup/sys.tar.gz  /etc/
      第二个历程: 编写定时任务 
      时间信息 tar zchf /backup/sys.tar.gz  /etc/
      第三个历程: 测试定时任务是否执行
      tail -f /var/log/
      结果检查  
	编写脚本信息定时任务
	  第一个历程: 编写脚本文件
	  vim test.sh 
	  xxxx
	  第二个历程: 测试检查脚本功能
	  sh test.sh 
	  第三个历程: 编写定时任务 
	  时间信息 sh /绝对路径/test.sh 
	  第四个历程: 测试定时任务是否执行 
	  tail -f /var/log/
	  结果检查
      	
2)编写定时任务问题
	尽量在定时任务中使用命令时,采用绝对路径
	   eg: 每隔5分钟执行时间同步操作
	       ntpdate ntp1.aliyu.com
	   第一个历程: 测试任务命令信息
	   ntpdate ntp1.aliyun.com
       第二个历程: 编写定时任务 
	   * * * * *  ntpdate ntp1.aliyun.com
	   第三个历程: 检查确认
	   PS: 重新定义定时任务bash空间PATH变量信息
	
	定时任务执行命令无法识别特殊符号
       eg: 执行命令进行数据备份, 每分钟
           cp /etc/hosts  /backup/hosts_$(date "+%F")	   
	   第一个历程: 测试任务命令信息
	   cp /etc/hosts  /backup/hosts_$(date "+%F")
	   第二个历程: 编写定时任务信息
	   * * * * * cp /etc/hosts  /backup/hosts_$(date "+%F")
	   第三个历程: 检查确认信息
	   
	   解决方式:
	   1) 将有特殊符号信息命令, 放入到脚本中, 在编写定时任务
	   2) 将有些定时任务不能识别符号, 进行转义
	   
	定时任务产生输出信息会占用磁盘空间
	   eg: 编写定时任务, 实现数据备份 
	   解决方法:
	   将定时任务产生 正确信息或是错误信息, 都重定向到系统黑洞中
	   * * * * * cp /etc/hosts  /backup/hosts.bak  &>/dev/null
       * * * * * cp /etc/hosts  /backup/hosts.bak  >/dev/null 2>&1
	   PS: &>/dev/null 或者 >/dev/null 2>&1 将定时任务执行时产生信息放入到黑洞中
	       避免信息占用磁盘空间
	   
	建议编写定时任务, 最好加上注释信息
6. 操作系统定时任务练习:
练习题01: 每天夜里两点, 需要备份数据 /etc/hosts
	0 2 * * *  cp /etc/hosts /backup/hosts.bak

练习题02: 每天下午三点10, 需要备份数据 
	10 15 * * * cp /etc/hosts /backup/hosts.bak

练习题03: 每隔2个小时, 备份一次数据
	* */2 * * * cp /etc/hosts /backup/hosts.bak  
	
练习题04: 每天上午9点到12点执行定时任务
	0 9-12 * * *  cp /etc/hosts /backup/hosts.bak

练习题05: 每天上午810130 8,10,13 * * *   cp /etc/hosts /backup/hosts.bak

练习题06: 每个月10 周五 和女朋友约会   问题
	0 19 10 *  5  和女朋友约会
	每周5会在19:00 
	每月1019:00

练习07:希望奇数时间执行定时任务 (1 3 5 7 9)
	方法一: 编写定时任务 
	0 1-23/2 * * *  echo oldboy69 > /tmp/test_crond.txt
	方法二: 编写定时任务 
	*/120 * * * *
	设置时间必须从 奇数小时开始  1:00  ---> 3:00 ---> 5:00
	方法三: 编写定时任务 
	59  */2  * * *
	
练习080 03 * * *   cp /etc/rc.local  /backup/rc.local.bak  
    PS: 检查确认最后定时任务执行结果
	
练习09*/30 * * * *  tar zcvhf /backup/etc.tar.gz /etc
	
练习10:
    编写脚本, 实现日志切割
    vim  cut_log.sh 
    #!/bin/bash 

    mv  /var/log/messages  /var/log/messages_$(date "+%F_%T")	
	systemctl restart rsyslog
	0 15,20 * * *  /bin/sh /server/scripts/cut_log.sh
	
练习110  5/3 * * *   ???      不能这样配置    
    0  5-10/2 * * * ???     5点到10点时间内, 每隔2个小时执行定时任务
    0  5,7,10/2 * * * ???	不能这样配置
	
练习12:
	每月每天凌晨330分和中午1220分执行test.sh脚本
	30 3,12 * * *  /home/test.sh           

练习13:
	每月每天每隔6小时的每30分钟执行test.sh脚本
	30 */6 * * *  /home/test.sh

练习14:
	每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
	30 8-18/2 * * * /etc/init.d/network restart

练习15: 
	每月每天晚上2130分执行test.sh脚本
	30 21 * * *  /etc/init.d/network restart

练习16:
	每月1号、10号、22号凌晨445分执行test.sh脚本
	45 4 1,10,22 * * /etc/init.d/network restart

练习178月份周一、周日凌晨110分执行test.sh脚本
	10 1 * 8 6,0 /etc/init.d/network restart

练习18:
	每月每天每小时整点执行test.sh脚本
	00 */1 * * *  /etc/init.d/network restart
7. 操作系统定时任务常见错误:
1. 执行 crontab -e ,报错
	crontab: no crontab for root - using an empty one
	crontab: "/usr/bin/vi" exited with status 1

	原因:未指定编辑器  

	解决方案:
	 在 ~/.bashrc 中添加  
	 EDITOR=vi
	 export EDITOR

	之后记得再执行 
	 source ~/.bashrc 

注:如果你使用zsh, 记得更改的是 ~/.zshrc

2. 定时脚本使用 python 报错 /bin/sh: python3: command not found
	原因:找不到 python3 ,我这里是因为Mac上自带的是 python2,python3 是后来装的,直接写python3 不识别

	解决方式:最直接的方式是写成 python3 的绝对路径,这个可以用 which python3 查看
例如执行crontab -e 后写入:

	* * * * * /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /users/root/test.py
	定时脚本中的 print 是不会输出到终端中的,这个可以在 mail 中查看,Mac 直接执行 mail 命令即可,该文件存储在 /var/mail/root 中,最方便的是指定输出内容的文件,命令如下:
	将 test.py 中的print输出的内容写入 test.log 文件中
	* * * * * /Library/Frameworks/Python.framework/Versions/3.5/bin/python3 /users/root/test.py > /users/root/test.log

3. crontab 编码错误
	错误提示:
	 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

	原因:crontab 和 shell 的执行环境不一样
	 我本机中shell使用的是zsh
	 shell中执行
	 which zsh
	 --->/bin/zsh
	 echo $LANG
	 --->zh_CN.UTF-8
	解决方法:
	 crontab -e 中添加
	 SHELL=/bin/zsh
	 LANG=zh_CN.UTF-8
8. 定时任务书写要领
要领1:定时任务要加注释
要领2:定时任务命令或脚本结尾加 &>/dev/null>/dev/null 2>&11>/dev/null 2>/dev/null
要领3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限
要领4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可
	注意操作步骤:
	(1)、命令行执行
	(2)、编写脚本
	(3)、测试脚本
	(4)、设置定时任务
要领5:生产任务程序不要随意打印输出信息
要领6:定时任务执行的脚本要规范路径 (例如 /server/script)
要领7:配置定时任务要规范操作过程
要领8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号% 转义 \%
要领9:定时任务脚本中如果涉及使用到环境变量,必须在脚本中重新定义,不然,定时任务识别不了

三. 磁盘管理

1. 磁盘管理知识体系结构
1) 磁盘管理物理结构  
	外部结构: 能看见结构信息
	内部结构: 看不到结构信息
2) 磁盘管理逻辑结构  
	如何将多个磁盘进行整合
	利用RAID进行整合: 提高单块磁盘容量  提高磁盘存储效率  提高磁盘安全性
    利用LVM进行整合:  弹性扩容或缩容磁盘  (数据库服务器)
3) 磁盘分区操作方法
	分区概念知识: 主分区 扩展分区 逻辑卷  分区表(dos mbr)
	分区命令使用: fdisk parted
4) 磁盘格式化操作
	创建文件系统: xfs ext3/ext4
	格式化命令:   mkfs(make file system)
5) 磁盘应用管理
	磁盘挂载操作: mount umount
	磁盘管理检测: iotop fsck
2. 磁盘管理物理结构
外部结构: 
	接口信息: SATA SCSI SAS PCI-e 
	转速信息: 10k  15k
	容量信息: byte k M G T
    硬盘组成: 主轴 磁盘 磁头	
	
内部结构: 
	磁头(head)     : 读取磁道数据信息
	磁道(track)    : 多个同心圆
    扇区(sector)   : 存储数据最小物理单位(512byte) 
	                 最小逻辑存储单位: block - 4k  4k = 8个扇区
	柱面(cylinder) : 表示相同同心圆做成一个存储的单元
	
公式: 一个柱面大小(容量)*磁道数量=磁盘大小
	      (一个磁道大小*磁头数)*磁道数
3. 磁盘管理分区操作
环境准备: 准备三块硬盘 50G 10M 3T
检查确认: fdisk -l 
问题: 新添加硬盘无法识别
	方法一: 重启服务器
	方法二: 不重启服务器时,识别新硬盘
	echo "- - -" > /sys/class/scsi_host/host0/scan   --- 让系统重新扫描磁盘硬件信息
	
	0磁头0磁道1扇区: MBR(master boot record)+DPT(磁盘分区表)
    DPT 占用64字节, 每个分区占用16字节: 总共有4个主分区
	可以划分一个扩展分区: 类似指针 --> 不同逻辑分区
	总结:
	主分区 4个 扩展分区 1(不能直接使用) 逻辑分区 多个 (编号从5)
	4个主分区(/dev/sda): /dev/sda1 .. /dev/sda4
	3个主分区, 2个逻辑分区: /dev/sda1 .. /dev/sda3  /dev/sda5 /dev/sda6 

分区操作: fdisk
	第一个历程: 利用命令进入分区界面
    fdisk /dev/sdb
    d   delete a partition
	    删除指定分区
    g   create a new empty GPT partition table (centos7独有)
	    创建一个新的空的GPT分区表 (没有主分区限制)
	    可以划分超过2T大小磁盘
    l   list known partition types
	    列出已知分区类型
    n   add a new partition
	    添加新的分区
    o   create a new empty DOS partition table
	    创建一个新的空的DOS分区表 (具有主分区限制)
		只能划分2T以下磁盘
    p   print the partition table
	    输出分区表信息
    q   quit without saving changes
	    退出不保存配置
    t   change a partition's system id
	    改变分区类型
    w   write table to disk and exit
	    保存分区配置

    第二个历程: 进行分区操作
	n -> p --> 分区大小信息    --- 划分主分区
	n -> e --> 分区大小信息    --- 划分扩展分区
	n -> l --> 分区大小信息    --- 划分逻辑分区

	第三个立场: 检查确认并保存退出
	p --> w 
	
	=======================================
	扩展: fdisk命令划分2T以上分区
	输入g 修改分区表为gpt
	输入o 修改分区表为dos
	=======================================
	
	分区操作: parted
	分区参数:
	mklabel(创建分区表 MRB-msdos/gpt)              create a new disklabel (partition table)
	                                                 创建新的分区表
		                                             # mklabel gpt
	mkpart(创建新的分区)                           make a partition
		                                             # mkpart  primary 0 2100G
	print(显示分区表信息)                          display the partition table
	                                                 # print
	rm(删除指定分区信息)                           delete partition NUMBER
	quit(退出分区界面)                             exit program
Linux磁盘管理好坏直接关系到整个系统的性能问题。
Linux磁盘管理常用三个命令为df、du和fdisk。

df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区

df

df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法		df [-ahikHTm] [目录或文件名]

选项与参数:
	-a	列出所有的文件系统,包括系统特有的 /proc 等文件系统;
	-k	以 KBytes 的容量显示各文件系统;
	-m	以 MBytes 的容量显示各文件系统;
	-h	以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
	-HM=1000K 取代 M=1024K 的进位方式;
	-T	显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
	-i	不用硬盘容量,而以 inode 的数量来显示

实例 1
	将系统内所有的文件系统列出来!
	[root@www ~]# df
	Filesystem      1K-blocks      Used Available Use% Mounted on
	/dev/hdc2         9920624   3823112   5585444  41% /
	/dev/hdc3         4956316    141376   4559108   4% /home
	/dev/hdc1          101086     11126     84741  12% /boot
	tmpfs              371332         0    371332   0% /dev/shm
	在 Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!

实例 2
	将容量结果以易读的容量格式显示出来
	[root@www ~]# df -h
	Filesystem            Size  Used Avail Use% Mounted on
	/dev/hdc2             9.5G  3.7G  5.4G  41% /
	/dev/hdc3             4.8G  139M  4.4G   4% /home
	/dev/hdc1              99M   11M   83M  12% /boot
	tmpfs                 363M     0  363M   0% /dev/shm

实例 3
	将系统内的所有特殊文件格式及名称都列出来
	[root@www ~]# df -aT
	Filesystem    Type 1K-blocks    Used Available Use% Mounted on
	/dev/hdc2     ext3   9920624 3823112   5585444  41% /
	proc          proc         0       0         0   -  /proc
	sysfs        sysfs         0       0         0   -  /sys
	devpts      devpts         0       0         0   -  /dev/pts
	/dev/hdc3     ext3   4956316  141376   4559108   4% /home
	/dev/hdc1     ext3    101086   11126     84741  12% /boot
	tmpfs        tmpfs    371332       0    371332   0% /dev/shm
	none   binfmt_misc         0       0         0   -/proc/sys/fs/binfmt_misc
	sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs

实例 4/etc 底下的可用的磁盘容量以易读的容量格式显示
	[root@www ~]# df -h /etc
	Filesystem            Size  Used Avail Use% Mounted on
	/dev/hdc2             9.5G  3.7G  5.4G  41% /

du

Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。

语法		du [-ahskm] 文件或目录名称

选项与参数:
	-a	列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
	-h	以人们较易读的容量格式 (G/M) 显示;
	-s	列出总量而已,而不列出每个各别的目录占用容量;
	-S	不包括子目录下的总计,与 -s 有点差别。
	-k	以 KBytes 列出容量显示;
	-m	以 MBytes 列出容量显示;

实例 1
	只列出当前目录下的所有文件夹容量(包括隐藏文件夹):
	[root@www ~]# du
	8       ./test4     <==每个目录都会列出来
	8       ./test2
	....中间省略....
	12      ./.gconfd   <==包括隐藏文件的目录
	220     .           <==这个目录(.)所占用的总量
	直接输入 du 没有加任何选项时,则 du 会分析当前所在目录的文件与目录所占用的硬盘空间。

实例 2
	将文件的容量也列出来
	[root@www ~]# du -a
	12      ./install.log.syslog   <==有文件的列表了
	8       ./.bash_logout
	8       ./test4
	8       ./test2
	....中间省略....
	12      ./.gconfd
	220     .

实例 3
	检查根目录底下每个目录所占用的容量
	[root@www ~]# du -sm /*
	7       /bin
	6       /boot
	.....中间省略....
	0       /proc
	.....中间省略....
	1       /tmp
	3859    /usr     <==系统初期最大就是他了啦!
	77      /var
	通配符 * 来代表每个目录。

与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。

fdisk

fdisk 是 Linux 的磁盘分区表操作工具。

语法		fdisk [-l] 装置名称

选项与参数:
	-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 
	     则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

实例 1
	列出所有分区信息
	[root@AY120919111755c246621 tmp]# fdisk -l
	Disk /dev/xvda: 21.5 GB, 21474836480 bytes
	255 heads, 63 sectors/track, 2610 cylinders
	Units = cylinders of 16065 * 512 = 8225280 bytes
	Sector size (logical/physical): 512 bytes / 512 bytes
	I/O size (minimum/optimal): 512 bytes / 512 bytes
	Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
	/dev/xvda1   *           1        2550    20480000   83  Linux
	/dev/xvda2            2550        2611      490496   82  Linux swap / 	Solaris

Disk /dev/xvdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x56f40944

    Device Boot      Start         End      Blocks   Id  System
	/dev/xvdb2               1        2610    20964793+  83  Linux

实例 2
	找出你系统中的根目录所在磁盘,并查阅该硬盘内的相关信息
	[root@www ~]# df /            <==注意:重点在找出磁盘文件名而已
	Filesystem           1K-blocks      Used Available Use% Mounted on
	/dev/hdc2              9920624   3823168   5585388  41% /

	[root@www ~]# fdisk /dev/hdc  <==仔细看,不要加上数字喔!
	The number of cylinders for this disk is set to 5005.
	There is nothing wrong with that, but this is larger than 1024,
	and could in certain setups cause problems with:
	1) software that runs at boot time (e.g., old versions of LILO)
	2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help):     <==等待你的输入!
输入 m 后,就会看到底下这些命令介绍

Command (m for help): m   <== 输入 m 后,就会看到底下这些命令介绍
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition            <==删除一个partition
   l   list known partition types
   m   print this menu
   n   add a new partition           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table     <==在屏幕上显示分割表
   q   quit without saving changes   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)
离开 fdisk 时按下 q,那么所有的动作都不会生效!相反的, 按下w就是动作生效的意思。

Command (m for help): p  <== 这里可以输出目前磁盘的状态

Disk /dev/hdc: 41.1 GB, 41174138880 bytes        <==这个磁盘的文件名与容量
255 heads, 63 sectors/track, 5005 cylinders      <==磁头、扇区与磁柱大小
Units = cylinders of 16065 * 512 = 8225280 bytes <==每个磁柱的大小

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1   *           1          13      104391   83  Linux
/dev/hdc2              14        1288    10241437+  83  Linux
/dev/hdc3            1289        1925     5116702+  83  Linux
/dev/hdc4            1926        5005    24740100    5  Extended
/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris
# 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统

Command (m for help): q
想要不储存离开吗?按下 q 就对了!不要随便按 w 啊!

使用 p 可以列出目前这颗磁盘的分割表信息,这个信息的上半部在显示整体磁盘的状态。
4. 磁盘格式化
磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 
mkfs(make filesystem) 命令。

语法	mkfs [-t 文件系统格式] 装置文件名

选项与参数:
	-t :可以接文件系统格式,例如 ext3, ext2, vfat (系统有支持才会生效)

实例 1
	查看 mkfs 支持的文件格式
	[root@www ~]# mkfs[tab][tab]
	mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat
	按下两个[tab],会发现 mkfs 支持的文件格式如上所示。

实例 2
	将分区 /dev/hdc6(可指定你自己的分区) 格式化为 ext3 文件系统:
	[root@www ~]# mkfs -t ext3 /dev/hdc6
	mke2fs 1.39 (29-May-2006)
	Filesystem label=                <==这里指的是分割槽的名称(label)
	OS type: Linux
	Block size=4096 (log=2)          <==block 的大小配置为 4K 
	Fragment size=4096 (log=2)
	251392 inodes, 502023 blocks     <==由此配置决定的inode/block数量
	25101 blocks (5.00%) reserved for the super user
	First data block=0
	Maximum filesystem blocks=515899392
	16 block groups
	32768 blocks per group, 32768 fragments per group
	15712 inodes per group
	Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912

	Writing inode tables: done
	Creating journal (8192 blocks): done <==有日志记录
	Writing superblocks and filesystem accounting information: done
	
	This filesystem will be automatically checked every 34 mounts or
	180 days, whichever comes first.  Use tune2fs -c or -i to override.
	这样就创建起来我们所需要的 Ext3 文件系统了!简单明了!
5. 磁盘检验
fsck(file system check)用来检查和维护不一致的文件系统。
若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。

语法		fsck [-t 文件系统] [-ACay] 装置名称

选项与参数:
	-d : 打印出 e2fsck 的 debug 结果
	-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
	-R : 同时有 -A 条件时,省略 / 不检查
	-V : 详细显示模式
	-a : 如果检查有错则自动修复
	-r : 如果检查有错则由使用者回答是否修复
	-y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

实例 1
	查看系统有多少文件系统支持的 fsck 命令:
	[root@www ~]# fsck[tab][tab]
	fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat

实例 2
	强制检测 /dev/hdc6 分区:
	[root@www ~]# fsck -C -f -t ext3 /dev/hdc6 
	fsck 1.39 (29-May-2006)
	e2fsck 1.39 (29-May-2006)
	Pass 1: Checking inodes, blocks, and sizes
	Pass 2: Checking directory structure
	Pass 3: Checking directory connectivity
	Pass 4: Checking reference counts
	Pass 5: Checking group summary information
	vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks
如果没有加上 -f 的选项,则由于这个文件系统不曾出现问题,检查的经过非常快速!若加上 -f 强制检查,才会一项一项的显示过程。
6. 磁盘挂载与卸除
Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。
磁盘挂载语法	mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点

实例 1
	用默认的方式,将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面!
	[root@www ~]# mkdir /mnt/hdc6
	[root@www ~]# mount /dev/hdc6 /mnt/hdc6
	[root@www ~]# df
	Filesystem           1K-blocks      Used Available Use% Mounted on
	.....中间省略.....
	/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6

磁盘卸载命令 umount 

语法		umount [-fn] 装置文件名或挂载点
选项与参数:
	-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
	-n :不升级 /etc/mtab 情况下卸除。
卸载/dev/hdc6
	[root@www ~]# umount /dev/hdc6   
7. 磁盘管理逻辑结构
磁盘阵列概念: 将多块磁盘整合为一块, 提高磁盘存储效率和安全性, 以及单块磁盘容量
磁盘整列配置: RAID 0 / 1 / 5 / 10 /11
https://jingyan.baidu.com/article/da1091fb60acb0027849d6ce.html    
磁盘弹性扩容: 实现磁盘分区大小灵活调整(数据库/存储)	 LVM 
/dev/sda3(15G+20G)  --> /data/xxx.db (30G) 
8. 磁盘创建文件系统
文件系统概念: 存储数据不同机制
常见文件系统: ext3/ext4(存储效率)   xfs(存储效率/识别大硬盘能力)
创建文件系统: mkfs - make file system 
	        mkfs.文件系统类型(ext4/xfs)    /dev/sdb2
		    mkfs -t 文件系统类型(ext4/xfs) /dev/sdb2 
9. 磁盘管理挂载操作
挂载概念: 给一个存储设备(文件)开了个门
挂载操作: mount		(mount [参数]  设备文件信息  挂载点)  
	   	 umount		(umount -lf /挂载点)
                     -l  lazy(懒惰)   不用从挂载点目录切换出去
					 -f  force       强制进行卸载
    如何实现开机自动挂载磁盘分区设备:
	方法一: 编辑/etc/fstab
	/dev/sdb1    /mnt     xfs    defaults    0  0 
	方法二: 编辑/etc/rc.local 
	mount  /dev/sdb1  /mnt 
10. 磁盘应用管理
    问题1: 磁盘文件系统出现问题
	步骤一: 利用命令检查或修复文件系统
	fsck -a     挂载点/分区设备文件
	xfs_repair  
	
	步骤二: 利用挂载命令修复
	mount  -o  remount rw  /
	
	问题2: 磁盘空间不足情况
	inode空间不足了:
	解决: 找出大量小文件
	find ./ -type f -size -10c|xargs rm
	
	block空间不足:
	解决: 找出大文件数据
	find /  -type f -size ??
	du -sh /opt/*|sort -h
文件数据是否彻底删除:
	1) 是否有硬链接存在     i_link=0 
	PS: 硬链接不能在不同的分区进行创建
	find /  -type f  -inum xxxx
	2) 是否有程序进程调用   i_conut=0 
	日志文件 --->  服务进程调用
	> access.log 
	
	dd  --- 模拟创建一个大文件/创建交换分区
	dd if=/dev/zero of=/tmp/1G bs=100M count=10 
	
	问题3: 如何调整swap空间大小
	第一个历程: 占用磁盘空间作为扩展交换分区
	dd if=/dev/zero of=/swap/1G_swap bs=100M count=10
	
	第二个历程: 将创建数据变为swap文件数据
	mkswap  /swap/1G_swap
	file /swap/1G_swap
	
	第三个历程: 加载文件给交换分区扩容
	swapon /swap/1G_swap
	swapoff /swap/1G_swap

四. 面试相关

面试题: 命令提示符出现以下情况, 是什么原因, 以及如何解决?
	   -bash-4.2$ 
		原因: 家目录每损坏了
		解决: 方法一:  修改PS1 --> /etc/profile 
			 方法二:  利用skel目录修复家目录信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值