40.运维3-用户-定时任务与磁盘管理

28.系统启动流程:

0.回顾
	1) awk命令概念说明
	   擅长取列 擅长统计分析日志
	   awk命令语法: awk [参数] '模式{动作}' 文件
	   awk执行原理: BEGIN{} END{}
	2) awk实际解决了一些问题
	   awk匹配查询信息 ==grep
	   ~ !~  指定列进行匹配
       awk匹配替换信息 
	   gsub(/要替换的信息/,"替换的内容",将第几列进行替换)
	   awk匹配删除信息 
	   awk '!/oldboy/'
    3) awk统计分析能力
	   累加运算: i=i+1 i++
	   求和运算: i=i+$n  
    01 求出测试文件中 所有人第一次捐款的总额和第三次捐款总额
       显示表头 
       第一总额  第三次总额 	
       xxx        xxxx	 
	   awk -F ":" 'BEGIN{print "第一次总额","第三次总额"};/.*/{print $2,$4}'  awk_test.txt
	   [root@oldboyedu ~]#  awk -F "[:]+" 'BEGIN{print "第一总额", "第二总额"}{sum+=$2;sum1+=$4}END{print sum, sum1}' awk_test.txt |column -t
       第一次总额  第三次总额
       2130        1661
        
1.常见面试题?
	系统启动流程
    centos6:
        01. 加电自检
            检查服务器硬件是否正常
        02. MBR引导
            读取磁盘的MBR存储记录信息,引导系统启动
        03. grup菜单
            选择启动的内核/进行单用户模式重置密码
        04. 加载系统内核信息
            可以更好的使用内核控制硬件
        05. 系统的第一个进程运行起来 init (串行)
            init进程控制后续各种服务的启动: 启动顺序 网络服务 sshd  # 控制进程
        06. 加载系统运行级别文件/etc/inittab
        07. 初始化脚本运行/etc/rc.d/rc.sysinit
            初始化系统主机名称 和 网卡信息
        08. 运行系统特殊的脚本
            服务运行的脚本 
        09. 运行mingetty进程
            显示开机登录信息界面,自启动的进程
   centos7:
    	01. 加电自检
	    检查服务器硬件是否正常
        02. MBR引导
            读取磁盘的MBR存储记录信息,引导系统启动
        03. grup菜单
            选择启动的内核/进行单用户模式重置密码
        04. 加载系统内核信息
            可以更好的使用内核控制硬件	
        05. 系统的第一个进程运行起来 systemd (并行)
            服务启动的时候,同时一起启动
        06. 读取系统启动文件
            /etc/systemd/system/default.target
        07. 读取系统初始化文件
            /usr/lib/systemd/system/sysinit.target
        08. 使服务可以开机自启动
            /etc/systemd/system 加载此目录中的信息,实现服务开机自动启动
        09. 运行mingetty进程
            显示开机登录信息界面

29.用户管理:

1.用户管理章节
	用户概念介绍:
    管理员用户  root    0      	权利至高无上
    虚拟用户    nobody  1-999 	管理进程  没家目录 不能登录系统
    普通用户    oldboy	1000+   权利有限
    
	r read
	w write
	x execute
	
	文件信息:
	r  可以读文件的内容
	w  可以编辑文件的内容
	x  执行这个文件(脚本文件)
	
	touch oldboy_root.txt -- 属主是root
	touch oldboy.txt --      属主是oldboy
	                         其他用户oldgirl
	环境准备:
	[root@oldboyedu ~]# touch oldboy_root.txt
    [root@oldboyedu ~]# ll oldboy_root.txt 
    -rw-r--r--. 1 root root 0 Apr 23 10:02 oldboy_root.txt
    [root@oldboyedu ~]# touch oldboy.txt
    [root@oldboyedu ~]# ll oldboy.txt 
    -rw-r--r--. 1 root root 51 Apr 23 10:02 oldboy.txt
    [root@oldboyedu ~]# chown oldboy oldboy.txt
    [root@oldboyedu ~]# ll oldboy.txt 
    -rw-r--r--. 1 oldboy root 51 Apr 23 10:02 oldboy.txt
    [root@oldboyedu ~]# chmod 000 oldboy_root.txt 
    [root@oldboyedu ~]# chmod 000 oldboy.txt 
    [root@oldboyedu ~]# ll oldboy_root.txt 
    ----------. 1 root root 0 Apr 23 10:02 oldboy_root.txt
    [root@oldboyedu ~]# ll oldboy.txt 
    ----------. 1 oldboy root 51 Apr 23 10:02 oldboy.txt

    文件权限配置的结论:
	01. root用户对所有文件有绝对的权限(默认有读写权限),只要有了执行权限,root用户可以无敌存在
	02. 对于文件来说,写的权限和执行的权限,都需要有读权限配合
	03. 如何想对文件进行操作,必须对文件赋予读的权限
	
	
	目录信息:
	r  读目录中的文件属性信息
	w  可以在目录中添加或删除文件数据信息
	x  是否可以进入到目录中
	
    ----------------------------# 读文件的原理------------------------
	当目录赋予读的权限  
	[oldboy@oldboyedu ~]$ ll /home/oldboy/oldboy_dir/文件 
    ls: cannot access oldboy_dir/oldboy.txt: Permission denied
    total 0
    -????????? ? ? ? ?            ? oldboy.txt
	
	/           inode (5 r_x) -- block (home)
    home        inode (5 r_x) -- block (oldboy)
    oldboy   	inode (7 rwx) -- block (oldboy_dir)
	oldboy_dir  inode (4 r--) -- block (目录中文件名称)
	无法进入目录
	oldboy.txt  inode 目录中的文件inode信息无法获取,会显示文件属性信息为??? # 由于没有执行权限
    第一步:先对/目录的inode属性信息进行判断,是否有home/,以及是否有权限操作
    第二步:对home/的inode进行判断是否有oldboy/以及权限操作
    第三步:对oldboy/的inode进行判断是否有oldboy_dir以及权限操作
    第四布:对oldboy_dir/的inode进行判断是否有要查找的文件,以及权限
    第五步:对文件的inode进行判断你是否有权限操作
	-----------------------------------------------------------------
	两个权限问题:
	/oldboy/oldboy.txt 
	01. oldboy.txt   权限 rwx--xr--  属主如何操作文件  其他用户可以如何操作这个文件
	属主可以读写执行,属组可移植性,
    
    目录权限配置的结论:
	01. root用户对目录信息有绝对权限(读写执行)
	02. 对于目录来说,写的权限和读的权限,都需要有执行权限配合
	03. 如何想对目录进行操作,必须对目录赋予执行的权限

    一个普通文件默认权限: 644  保证属主用户对文件可以编辑  保证其他用户可以读取文件内容
	一个目录文件默认权限: 755  保证属主用户对目录进行编辑  保证其他用户可以读取目录中的信息,可以进入到目录中

    文件目录数据设置权限的方法:
	1) 根据用户信息进行设定 (属主 属组 其他用户)
	   属主-user       u  
	   属组-group      g 
	   其他用户-other  o 
	   chmod u+r/w/x u-r/w/x u=rw
	   chmod g+r/w/x u-r/w/x u=rw
       chmod o+r/w/x u-r/w/x u=rw
	2) 根据用户进行批量设定
	   数值设定:
	   [root@oldboyedu ~]# chmod 761 oldboy.txt
       [root@oldboyedu ~]# ll oldboy.txt
       -rwxrw---x. 1 root root 0 Apr 23 11:42 oldboy.txt

	   字符设定:
	   [root@oldboyedu ~]# chmod a=x oldboy.txt
       [root@oldboyedu ~]# ll oldboy.txt
       ---x--x--x. 1 root root 0 Apr 23 11:42 oldboy.txt

    问题一: 为什么创建的文件和目录权限一致
	目录权限都是 755
	文件权限都是 644 
	
	[root@oldboyedu ~]# umask   # 由于这个值的影响创建文件和目录的权限总是一样的
    0022

	默认文件权限: 666 - 022 = 644
	umask数值是奇数  666 - 033 = 633 + 11 = 644
	umask数值是偶数  666 - 022 = 644
	
    默认目录权限: 777 - 022 = 755	
	umask数值是奇数  777 - 033 = 744
	umask数值是偶数  777 - 022 = 755	
	
	问题二: 如何永久修改umask信息
	vim /etc/profile
	if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
      umask 002
    else
      umask 022  --- 可以永久修改umask数值
    fi
	
	系统中的一个特殊的目录: /etc/skel  样板房  # 创建目录时会参考这个目录
	[root@oldboyedu ~]# ll /etc/skel/ -a
    total 24
    drwxr-xr-x.  2 root root   62 Apr 11  2018 .
    drwxr-xr-x. 81 root root 8192 Apr 23 12:11 ..
    -rw-r--r--.  1 root root   18 Apr 11  2018 .bash_logout   当系统退出登录状态会执行的命令
    -rw-r--r--.  1 root root  193 Apr 11  2018 .bash_profile  别名和环境变量(只针对某个用户)  家规
    -rw-r--r--.  1 root root  231 Apr 11  2018 .bashrc        别名和环境变量(只针对某个用户)  家规
 
	useradd oldgirl --> /home/oldgirl/ --> 目录中的数据内容会参考/etc/skel目录中的信息
	
	/etc/skel目录作用:?
	01. 目录中可以存储运维操作规范说明文件
	02. 调整命令提示符信息
	    出现问题: 命令提示符: -bash-4.2$ 
    -bash-4.2$ ll /etc/hosts
    -rw-r--r--. 2 root root 192 Apr 15 12:19 /etc/hosts
    -bash-4.2$ cp /etc/skel/.b* /home/new01/
    -bash-4.2$ exit
    logout
    [root@oldboyedu ~]# 
    [root@oldboyedu ~]# su - new01
    Last login: Tue Apr 23 12:23:36 CST 2019 on pts/2
 
2.总结:
    1) 系统的开机流程 (centos6 centos7)
	2) 系统用户概念
	   a 用户的分类
	   b 用户的权限(文件-权限 目录-权限)
	     读写数据原理
	     / -- inode/block -- oldboy 
       c umask是什么? 控制文件或目录的默认权限
	     如何永久修改 ,在/etc/profile里面
    3) 系统的特殊目录 /etc/skel (样板房)

30.用户创建删除相关:

0.回顾
	 1) 系统启动流程
       1开机自检-2MBR引导???--3grub菜单(内核 进入单用户模式)---4加载内核
	   --->5启动系统的第一个进程init/systemd--->6自动加载系统运行级别
	   --->7加载初始化脚本--->8运行相应的自启动服务--->9加载显示登陆界面进程
	2) 系统用户管理
       a 用户的分类
       b 数据文件权限说明(rwx)
         文件权限:(更多关注一定要有read权限)
         read  读文件内容的能力	(有了读文件block能力)
         write 写文件内容的能力(有了读文件block能力)	重命名文件???	 
		 execute 执行文件的能力(脚本文件)
		 补充: 文件是否可以编辑查看,和上一级或上n级目录有关
		 读取文件数据原理 / oldboy/ oldboy01/ oldboy.txt
		 
		 目录权限:(更多关注一定要有执行权限)
		 read  读取目录下文件属性信息
		 write 可以在目录中创建或删除数据
		 execute 可以切换进入到目录中
	3) 文件数据权限修改方法
       chmod u/g/o + - = rwx   --- 针对不同用户进行设置
       chmod a + - = rwx       --- 全部用户统一设置权限
       chmod 644 xxx           --- 全部用户统一设置权限(更加灵活)	 
    4) 文件的默认权限是如何设置
       文件是: 644  666-umask(奇数+1)
       目录是: 755  777-umask
       umask(内置命令): 可以影响系统数据默认权限
	   umask如何永久设置
	   if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]
	          条件一             
	   then
           umask 002
       else
           umask 022
       fi
	     
	   $UID: 显示当前登录系统用户id数值
	   判断比较符号
	   -gt greater than  >
	   -lt less than     <
	   -eq equal         ==
	   -ge greater && equal >=
	   -le less && equal    <=
	   -ne not equal     <>
	   /usr/bin/id -gn  -- 显示当前用户的组名
	   /usr/bin/id -un  -- 显示当前用户名称
	   
	   if 判断的条件(有>100万) && 长得帅
	   then
	      娶到好看的女生
	   else
	      是个女的就行
	   fi
	   
	5) 特殊的目录: /etc/skel 样板房
	   用户家目录都参照样板房设计
	   用户家目录中特殊文件:
	   -rw-------.  1 oldboy oldgirl 1454 Apr 24 09:12 .bash_history   --- 历史命令记录文件
	   曾经输入的历史命令保存位置:
	   01. 保存在内存中      histroy
	       history -c
	   02. 保存在磁盘文件中: .bash_history 
	   
       -rw-------.  1 oldboy oldgirl  651 Apr 23 10:16 .viminfo        --- vim样式设置
	   自动加载文件样式信息
	   #!/bin/bash
       # 编写人: oldboy
       # 编写时间: 2019
       # 脚本作用: 

1.系统中和用户相关的文件
    /etc/passwd*****  --- 记录系统用户信息文件 
    [root@oldboyedu oldboy]# head /etc/passwd
    root	:x	:0	:0	:root		:/root				:/bin/bash
    bin		:x	:1	:1	:bin		:/bin				:/sbin/nologin
    daemon	:x	:2	:2	:daemon		:/sbin				:/sbin/nologin
    adm		:x	:3	:4	:adm		:/var/adm			:/sbin/nologin
    lp		:x	:4	:7	:lp			:/var/spool/lpd		:/sbin/nologin
	01      02  03  04  05          06                  07
	
	第一列: 用户名
	第二列: 用户密码信息
	第三列: 用户的uid信息
	第四列: 用户的gid信息
	第五列: 用户的注释信息 
	        mysql(manager database user)
			www  (manager web server)
	第六列: 用户家目录信息
	第七列: 用户登录系统方式
            /bin/bash       --- 通用的解释器
			/usr/bin/sh     --- 等价于/bin/bash
			/usr/bin/bash
            /sbin/nologin       --- 无法登录系统
            /usr/sbin/nologin
	/etc/shadow*      --- 系统用户密码文件
	/etc/group*       --- 组用户记录文件
	/etc/gshadow*     --- 组用户密码信息
	
2.系统用户相关命令
    a 创建用户命令
	  useradd oldboy   普通用户被创建出来
       -s    修改用户的登录方式:/sbin/nologin
	  -g    修改用户的主要的组信息
	  -G    修改用户的附属组信息
	  -c    修改用户的注释信息
      -M    不创建家目录
      -u	指定用户uid
    
      useradd oldboy01 -M -s /sbin/nologin # 虚拟用户被创建出来
      -M 不创建家目录
	  -s 指定使用的shell方式
	  [root@oldboyedu oldboy]# useradd Alex01 -M -s /sbin/nologin
      [root@oldboyedu oldboy]# id Alex01
      uid=1067(Alex01) gid=1067(Alex01) groups=1067(Alex01)
      [root@oldboyedu oldboy]# grep Alex01 /etc/passwd
      Alex01:x:1067:1067::/home/Alex01:/sbin/nologin
      [root@oldboyedu oldboy]# ll /home/Alex01 -d
      ls: cannot access /home/Alex01: No such file or directory
      
	  useradd Alex03 -u 2000  # -u指定uid大小
	  -u 指定用户uid数值信息
      [root@oldboyedu oldboy]# id Alex03
      uid=2000(Alex03) gid=2000(Alex03) groups=2000(Alex03)
	  
	  useradd Alex04 -u 2001 -g Alex02   # -g指定用户组,数字名称都可以
	  -g 指定用户所属的主要组信息
      [root@oldboyedu oldboy]# id Alex04
      uid=2001(Alex04) gid=1068(Alex02) groups=1068(Alex02)
      [root@oldboyedu oldboy]# useradd Alex05 -u 2002 -g 1068
      [root@oldboyedu oldboy]# id Alex05
      uid=2002(Alex05) gid=1068(Alex02) groups=1068(Alex02)

      [root@oldboyedu oldboy]# useradd Alex07 -u 2004 -g Alex02 -G Alex03
	  -G 指定用户所属的附属组信息
      [root@oldboyedu oldboy]# id Alex07
      uid=2004(Alex07) gid=1068(Alex02) groups=1068(Alex02),2000(Alex03)

      useradd mysql -s /sbin/nologin -M -c "manager database"
	  -c 添加指定用户注释说明信息
      [root@oldboyedu oldboy]# grep mysql /etc/passwd
      mysql:x:2005:2005:manager database:/home/mysql:/sbin/nologin

    b 修改用户信息
	  usermod
	  -s    修改用户的登录方式:/sbin/nologin
	  -g    修改用户的主要的组信息
	  -G    修改用户的附属组信息
	  -c    修改用户的注释信息
      -u	指定用户uid
        
	  [root@lala ~/dockerfile]# usermod -G "" xiaoming  # 将除了自己的附加组删除
      [root@lala ~/dockerfile]# id xiaoming
      uid=1001(xiaoming) gid=1001(xiaoming) groups=1001(xiaoming)
    
	  修改用户shell信息
	  [root@oldboyedu oldboy]# usermod Alex02 -s /sbin/nologin
      [root@oldboyedu oldboy]# grep Alex02 /etc/passwd
      Alex02:x:1068:1068::/home/Alex02:/sbin/nologin

      修改用户uid信息
	  [root@oldboyedu oldboy]# usermod Alex02 -u 3000
      [root@oldboyedu oldboy]# id Alex02
      uid=3000(Alex02) gid=1068(Alex02) groups=1068(Alex02)

    c 删除用户信息
	  userdel
        -r	彻底删除用户和家目录信息
        
	  userdel -r Alex04
	  -r 彻底删除用户以及用户的家目录
      [root@oldboyedu oldboy]# ll /home/Alex04 -d
      ls: cannot access /home/Alex04: No such file or directory
      [root@oldboyedu oldboy]# useradd Alex04
    
	  总结:如果删除用户被其他用户加入了组,可能该用户的组未删除,当再次创建同名用户时可能会发出警告
            
	d 用户密码设置方法
	  交互式设置密码
	  passwd oldboy 
	  非交互设置密码
	  echo 123456|passwd --stdin oldboy
	  
	  企业中设置密码和管理密码的方式
	  01. 密码要复杂12位以上字母数字及特殊符号
      02. 保存好密码信息
	      keepass
		  密码保险柜,本地存储密码
	      lastpass
		  密码保险柜,在线存储密码
	  03. 大企业用户和密码统一管理(相当于活动目录AD)
	      openldap域
		  用户信息统一保存在一个用户管理服务器中 用户的家目录中的文件 用户密码 用户名称
      04. 动态密码:动态口令,第三方提供自己开发也很简单。
    
    e 创建用户所属组
    	groupadd	添加
        groupmod	修改
        groupdel 	删除

31.文件权限相关:

1.用户属主属组设置命令
    chown  修改属主和属组信息
    [root@oldboyedu oldboy]# ll /etc/hosts
    -rw-r--r--. 2 root root 192 Apr 15 12:19 /etc/hosts
    [root@oldboyedu oldboy]# chown oldboy.root /etc/hosts
    [root@oldboyedu oldboy]# ll /etc/hosts
    -rw-r--r--. 2 oldboy root 192 Apr 15 12:19 /etc/hosts

    chown -R  递归修改目录属主和属组信息 目录中的内容属主属组同样修改
    [root@oldboyedu oldboy]# ll oldboy_dir -d
    dr-xr-xr-x. 2 oldboy oldgirl 24 Apr 23 10:36 oldboy_dir
    [root@oldboyedu oldboy]# touch oldboy_dir/root.txt
    [root@oldboyedu oldboy]# ll oldboy_dir/root.txt
    -rw-r--r--. 1 root root 0 Apr 24 11:29 oldboy_dir/root.txt
    [root@oldboyedu oldboy]# id Alex01
    uid=1067(Alex01) gid=1067(Alex01) groups=1067(Alex01)
    [root@oldboyedu oldboy]# chown Alex01.Alex01 oldboy_dir
    [root@oldboyedu oldboy]# ll oldboy_dir -d
    dr-xr-xr-x. 2 Alex01 Alex01 40 Apr 24 11:29 oldboy_dir
    [root@oldboyedu oldboy]# ll oldboy_dir/
    total 0
    -rw-r--r--. 1 root root 0 Apr 23 10:36 oldboy.txt
    -rw-r--r--. 1 root root 0 Apr 24 11:29 root.txt
    [root@oldboyedu oldboy]# chown -R Alex01.Alex01 oldboy_dir
    [root@oldboyedu oldboy]# ll oldboy_dir -d
    dr-xr-xr-x. 2 Alex01 Alex01 40 Apr 24 11:29 oldboy_dir
    [root@oldboyedu oldboy]# ll oldboy_dir/
    total 0
    -rw-r--r--. 1 Alex01 Alex01 0 Apr 23 10:36 oldboy.txt
    -rw-r--r--. 1 Alex01 Alex01 0 Apr 24 11:29 root.txt

32.用户查看相关:

1.用户信息查看命令
    a id  显示用户信息命令 (uid gid)
	b w   显示正在登陆系统的用户信息
	  [root@oldboyedu oldboy]# w
      11:33:31 up  6:33,  1 user,  load average: 0.00, 0.01, 0.05
      USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
      root     pts/0    10.0.0.1         08:55    3.00s  0.20s  0.00s w
	  01       02       03               04       05         06       07
	  
	  01. 什么用户登录到了系统中
	  02. 登录的方式  
	      pts/x 远程登录系统
		  tty1  本地登录 通过服务器登录系统
           # 给其他登录用户发消息
		  [root@oldboyedu oldboy]# echo "请不要修改恢复hosts文件配置" >/dev/pts/1 
      03. 从哪连接的服务器 
	  04. 登录时间
	  05. IDLE 空闲时间
      06. 用户操作系统 消耗的CPU资源时间 当这个很大的时候,可能有死循环,或者耗时脚本
	  07. 用户在干什么
    补充:
        last和lastlog命令用于查看有哪些用户登录过主机

33.用户权限提升:

1.用户权限说明:
    普通用户如何像root用户一些操作管理系统:
    01. 直接切换到root账户下管理系统   篡权夺位
    02. 直接修改要做的数据文件权限	
	03. root用户赋予了普通用户权利     大宝剑--sudo
	    sudo root用户授权一个能力给普通用户
		a 怎么进行授权:
		  visudo
		  93 oldboy  ALL=(ALL)       /usr/sbin/useradd, /usr/bin/rm
		  
        b 如何验证oldboy已经获取了root用户能力
		  [oldboy@oldboyedu ~]$ sudo -l 
          We trust you have received the usual lecture from the local System
          Administrator. It usually boils down to these three things:
          
              #1) Respect the privacy of others.
              #2) Think before you type.
              #3) With great power comes great responsibility.
          [sudo] password for oldboy: 
          User oldboy may run the following commands on oldboyedu:
              (ALL) /usr/sbin/useradd, /usr/bin/rm
			  
	    c 执行root用户可以执行的命令
		  [oldboy@oldboyedu ~]$ sudo useradd Alex06
          useradd: user 'Alex06' already exists
          [oldboy@oldboyedu ~]$ sudo useradd Alex07
          useradd: user 'Alex07' already exists
          [oldboy@oldboyedu ~]$ sudo useradd Alex08
          [oldboy@oldboyedu ~]$ sudo rm -f /etc/hosts

34.sudo详细说明:

0.回顾
	1) 用户相关的文件
	   /etc/passwd  --- 系统用户记录文件
	   /etc/shadow  --- 记录用户密码信息
	   /etc/group   --- 用户组文件
	   /etc/gshadow --- 用户组密码文件
	2) 用户相关的命令
	   useradd  -u -g -G -M -s -c 
	   usermod  -u -g -G -s -c 
	   userdel  -r
	   groupadd 
	   groupmod
	   groupdel
	   chown    -R
	   id
	   w
    3) 如何让普通用户获得root用户的能力
	   1) 直接切换用户为root    su - 
          su - /su 有什么区别
		  su    部分环境变量切换用户有变化
		  su -  全部环境变量切换用户有变化

          演示说明:
		  [oldboy@oldboyedu ~]$ env|grep oldboy
          HOSTNAME=oldboyedu.com
          USER=oldboy
          MAIL=/var/spool/mail/oldboy
          PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oldboy/.local/bin:/home/oldboy/bin
          PWD=/home/oldboy
          HOME=/home/oldboy
          LOGNAME=oldboy
		  说明: 默认当前登录系统用户为oldboy时,环境变量中会体现出oldboy用户信息
		  
          [oldboy@oldboyedu ~]$ su root
          Password: 
          [root@oldboyedu oldboy]# env|grep root
          HOME=/root
          [root@oldboyedu oldboy]# env|grep oldboy
          HOSTNAME=oldboyedu.com
          USER=oldboy
          PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oldboy/.local/bin:/home/oldboy/bin
          MAIL=/var/spool/mail/oldboy
          PWD=/home/oldboy
          LOGNAME=oldboy
          说明: 当用户su命令切换用户,系统中环境变量信息部分会变为root,但更多信息为原有oldboy用户信息
		  
          [oldboy@oldboyedu ~]$ su - root
          Password: 
          Last login: Thu Apr 25 08:51:40 CST 2019 on pts/0
          [root@oldboyedu ~]# env|grep root
          USER=root
          MAIL=/var/spool/mail/root
          PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
          PWD=/root
          HOME=/root
          LOGNAME=root
		  说明: 当用户su -命令切换用户,系统中环境变量信息会全部切换为root
		  
	   2) 直接修改文件的权限
	      rwx  属主信息
	   
	   3) 让root用户将自己的部分能力赋予给普通 sudo
1.sudo功能配置说明
    a 如何配置sudo权限信息:
	  visudo(推荐使用:语法检查功能) == vi /etc/sudoers
	  [root@oldboyedu ~]# visudo -c   --- 配置好的文件语法检查
      /etc/sudoers: parsed OK
	  
	  扩展配置方法:
	  1) 授权单个命令或多个命令
	     /usr/sbin/useradd, /usr/bin/rm, ,
      2) 授权单个命令目录或多个命令目录 (需要排除部分特权命令)
	     /usr/sbin/*, !/usr/sbin/visudo , /usr/bin/*
      3) 不需要输入用户密码,可以直接sudo方式执行命令
	     NOPASSWD: /usr/sbin/*, !/usr/sbin/visudo , /usr/bin/*

    b 如何查看确认配置
	  切换到授权的用户下(oldboy)
	  sudo -l 
	  需要输入授权的用户密码(oldboy)
	  
	c 如何使用sudo功能
	  sudo 授权的命令
2.设置特殊权限位:
    rwx -w- --x  系统文件数据的9个权限位  系统中实际应该有12个权限位
	# setuid: 4
	权限设置方法:
	chmod u+s  文件信息
	chmod 4755 文件信息 
	[root@oldboyedu ~]# ll /bin/cat
    -rwsr-xr-x. 1 root root 54080 Apr 11  2018 /bin/cat  # 权限位x被s替代,特殊权限位
	在属主权限位多出s信息
	总结: setuid权限位设置,将文件属主拥有的能力,分配给所有人(相当于在这个命令上,所有人的权限和属主相同,仅仅是这个命令)
	
	# setgid: 2
	[root@oldboyedu ~]# chmod g+s /bin/cat
    [root@oldboyedu ~]# ll /bin/cat
    -rwsr-sr-x. 1 root root 54080 Apr 11  2018 /bin/cat
    [root@oldboyedu ~]# chmod 2755 /bin/cat
    [root@oldboyedu ~]# ll /bin/cat
    -rwxr-sr-x. 1 root root 54080 Apr 11  2018 /bin/cat
    [root@oldboyedu ~]# chmod 6755 /bin/cat
    [root@oldboyedu ~]# ll /bin/cat
    -rwsr-sr-x. 1 root root 54080 Apr 11  2018 /bin/cat
	总结: setgid权限位设置,将文件属组拥有的能力,分配给所有用户组
	
	# sticky bit:粘滞位: (创建一个共享目录) 1
	作用: 
	可以将不同用户信息放置到共享目录中,实现不同用户数据可以互相查看,但是不可以互相随意修改
	设置方法: 
	chmod o+t  目录信息
	chmod 1777 目录信息
	系统中已经准备好了一个共享目录,权限位1777
	[root@oldboyedu ~]# ll -d /tmp/
    drwxrwxrwt. 10 root root 4096 Apr 25 09:35 /tmp/
	
	总结: 普通用户拥有root用户能力
	01. 直接切换用户 su - (*)
	    优势: 简单快捷
	    劣势: 风险太高(root权限泛滥)
		
	02. 修改数据文件权限  9位权限位 属主信息
	    优势: 只针对某个数据文件进行修改 只针对某个用户进行授权
	    劣势: 需要了解权限位功能 

    03. 采用sudo提权方式
	    优势: 可以利用文件编辑指定用户有哪些指定权限  sa运维部门 dev开发人员
		劣势: 配置规划复杂
	
	04. 修改数据文件权限  3位权限位
	    优势: 设置权限简单方便
		劣势: 设置好的权限所有用户都拥有
            
3.如何防范系统中的重要文件不被修改(root用户也不能修改)
    给文件加上锁头: 
    目的: 使root用户也不能直接修改相应文件
	设置方法: 
    chattr +i /etc/passwd
    ll /etc/passwd
    -rw-r--r--. 1 root root 4820 Apr 25 11:01 /etc/passwd
	解锁方法:
	chattr -i /etc/passwd
    [root@oldboyedu ~]# ll /etc/passwd
    -rw-r--r--. 1 root root 4820 Apr 25 11:01 /etc/passwd
    [root@oldboyedu ~]# lsattr /etc/passwd
    ---------------- /etc/passwd
    检查方法
    [root@oldboyedu ~]# lsattr /etc/passwd
    ---------------- /etc/passwd
    
    # 防止使用chattr
     [root@oldboyedu ~]# mv /usr/bin/chattr /root
     [root@oldboyedu root]# mv chattr change_i

35.定时任务:

1.定时任务概念(第一个服务)
    作用: 
	1) 类似生活中闹钟
	   Alarmy  叫醒方式
	   01 关闭方式: 做算数题 2位数 乘法运算  
	   02 关闭方式: 运动关闭 摇手机 5次
	   03 关闭方式: 拍照关闭 找个地方拍照 
    2) 可以自动完成操作命令
	   夜里备份数据(访问量不大)  白天(访问量也少-游戏)
	   cp /data  /backup
	   自动清理磁盘
	   自动的进行时间同步更新 ntpdate xxx

    软件种类:
	cronie   实现定时任务功能*****
	atd      实现定时任务功能 只能一次设置定时功能 
	anacron  实现定时任务功能 应用在家用电脑  7*24服务器
    
	检查软件是否安装 cronie
	[root@oldboyedu ~]# rpm -qa cronie
    cronie-1.4.11-19.el7.x86_64
    
    [root@oldboyedu ~]# rpm -ql cronie
    /etc/cron.deny
	/bin/crontab
	
    rpm -ql ""   查看软件包下的所有文件
    rpm -qa ""   查看是否有这个软件包
    rpm -qf ""   查看命令属于那个软件包
    rpm -e ""    卸载软件包 不要使用yum remove卸载会将依赖的包也卸载
	rpm -ivh 软件包.rpm   --- 手动安装软件
	-i 		   install 安装
	-v         显示过程信息
	-h 		   human   以人类可读方式显示信息
	说明: 无法解决软件依赖关系
	
	补充说明: 如何让linux和windows主机之间传输数据
	yum install -y lrzsz
	在linux上进行操作
	rz -y           	从windows上下载重要数据信息
	sz -y 数据信息  	从linux上上传重要数据到windows
	
	定时任务实现方法:
	日志文件需要定期进行切割处理?
	周一         secure   100M
	周二(00:00)  mv secure secure-`date +%F`  100M 切割后的文件
	             touch secure
	系统特殊目录:
	系统定时任务周期:每小时   控制定时任务目录:/etc/cron.hourly
    系统定时任务周期:每一天   控制定时任务目录:/etc/cron.daily   00:00-23:59
    系统定时任务周期:每一周   控制定时任务目录:/etc/cron.weekly  7天
    系统定时任务周期:每个月   控制定时任务目录:/etc/cron.monthly 30 28 31
	
	用户定时任务
	每天的02:30进行数据备份???
	a 用户定时任务查看   crontab -l(list)
	说明: 列表查看定时任务信息(cron table)

    b 用户定时任务编辑   crontab -e(edit)
    说明: 编辑配置定时任务信息
	# 每个用户设置的定时任务会在/var/spool/cron/下生成对应的目录
    crontab -e  编写定时任务     vi /var/spool/cron/      定时任务配置文件保存目录
	                           /var/spool/cron/root     root用户设置的定时任务配置文件
						      /var/spool/cron/oldboy  oldboy用户设置的定时任务配置文件
	visudo      对普通用户提权   vi /etc/sudoers

36. 定时任务编写方法:

1. 定时任务实际编写方法
    a 定时任务服务环境准备  
      定时任务服务是否启动/是否开机自动启动	
	  [root@oldboyedu ~]# systemctl status crond
      ● crond.service - Command Scheduler
         Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
         Active: active (running) since Tue 2019-04-23 09:15:43 CST; 2 days ago
       Main PID: 905 (crond)
         CGroup: /system.slice/crond.service
                 └─905 /usr/sbin/crond -n
      
      Apr 23 09:15:43 oldboyedu.com systemd[1]: Started Command Scheduler.
      Apr 23 09:15:43 oldboyedu.com systemd[1]: Starting Command Scheduler...
      Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 30% if used.)
      Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (running with inotify support)

    b 实际编写定时任务
	  配置方法: crontab -e
	  编写语法规范: /etc/crontab
	  # 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
	  
	  *   *   *    *   * 具体做什么事情
	  分  时  日  月  周
	  
	  写法:
	  01. 用数值表示时间信息
	      00 02 *  *  *   备份文件
	  02. 利用特殊符号表示时间信息
	      *      *      *     *     *   备份文件 
		每分钟  每小时 每天  每月  每周
		  PS: 定时任务最短执行的周期为每分钟
		  */5     */5    */5     # 每隔5分钟  每隔5小时	
        
          01-05   02    *    *    *	 # 指定连续的时间信息
          01到05  02    *    *    *
       
	      00   14,20  *   *    *  # 指定不连续的时间信息

	    测验01: 每天下午02:30分钟 起来学习
	           30 14 * * *
       测验02: 每隔3天 夜里2点   执行数据备份
	           00 02 */3  *  * 
       测验03: 00/10  01,03  *  *   *   ??? 
               01点 每隔10分钟 
			   03点 每隔10分钟  
	           每天   凌晨1点和凌晨3点  每隔10分钟0点整 -->  01:00 03:00	   
       测验04: */10   01-03  *  *   *
       测验05: *      01,03  *  *   *   ???   
       测验06: *      01-03	 *  *   *   
       测验07: 00     02     28 */2 6 	???   
	           02:00  28 每隔两个月  星期6
	   结论: 
	   01. 在写时间信息的时候, 如果想表示每隔多久执行什么任务
	       /上面尽量用*号表示, 不要写具体数值
	   02. 时间信息由左到右依次书写, 尽量不要跳步
	   03. 当编写定时任务时,日期信息不要和星期信息同时出现
	
	   补充说明:
	   20/10  01,03 * * *  
	   01:20 01:30 01:40       01:59
	   03:00        03:59
	
    c 实际编写定时任务
      1) 每天凌晨两点备份 /data目录到 /backup
      第一个历程: 写上时间信息
      00 02 * * *
      第二个历程: 写上完成任务的具体命令
      cp -a /data /backup
      第三个历程: 编写定时任务
      crontab -e 
      00 02 * * *  cp -a /data /backup	  
	
	  定时任务排查方法:
	  01. 检查是否有定时任务配置文件
	  cat /var/spool/cron/root 
      00 02 * * *  cp -a /data /backup
	  02. 检查定时任务日志文件
	  ll /var/log/cron
      -rw-------. 1 root root 14050 Apr 25 15:49 /var/log/cron
      日志信息说明
	  Apr 25 15:53:22 oldboyedu crontab[3893]: (root) BEGIN EDIT (root)
      Apr 25 15:54:06 oldboyedu crontab[3934]: (oldboy) BEGIN EDIT (oldboy)
      Apr 25 15:54:48 oldboyedu crontab[3893]: (root) REPLACE (root)
      Apr 25 15:54:48 oldboyedu crontab[3893]: (root) END EDIT (root)
      Apr 25 15:55:01 oldboyedu crond[905]: (root) RELOAD (/var/spool/cron/root)
      Apr 25 15:55:01 oldboyedu CROND[3939]: (root) CMD (cp -a /data /backup)
      Apr 25 15:55:01 oldboyedu CROND[3937]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)
      执行时间  主机名  编辑定时任务   以什么用户编辑或执行定时任务/干了什么事情  执行定时任务

2.定时任务编写注意事项:(规范)
    1) 编写定时任务要有注释说明
	2) 编写定时任务路径信息尽量使用绝对路径
	3) 编写定时任务命令需要采用绝对路径执行 /usr/sbin/useradd
	   命令执行成功条件:
	   useradd  ---> $PATH ---> /sbin/useradd ---> 命令执行成功
	   定时任务执行时,识别的PATH信息只有: /usr/bin:/bin
	   useradd命令--->usr/sbin/useradd
    4) 编写定时任务时,可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间
	   * * * * *  sh test.sh &>/dev/null
	   
	   说明: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户
       /var/spool/mail/root          不断变大占用磁盘空间        占用的block空间
       解决方法: 将邮件服务关闭
	   systemctl stop postfix
	   
	   /var/spool/postfix/maildrop/  不断产生小文件占用磁盘空间  占用的inode空间
	   解决方法: 删除小文件
	   rm -f /var/spool/postfix/maildrop/*
	   systemctl start postfix
	5) 编写定时任务, 尽量不要产生屏幕输出信息
       cp -a /data /backup	
	   tar zcvf /backup/data.tar.gz  /data    有信息输出
	   cd / 
       tar zcf /backup/data.tar.gz  ./data    没有信息输出
       # tar zcvf /backup/data.tar.gz  /data  &>/dev/null
	6) 当需要多个命令完成一个定时任务需求时,可以利用脚本编写定时
	   vim backup.sh 
	   cp -a /data /backup	
	   tar zcvf /backup/data.tar.gz  /data
	   
	   crontab -e 
	   # xxxxx
	   * * * * *  /bin/sh /server/scripts/backup.sh &>/dev/null
	7) 时间需要转义
       * * * * * /bin/date "+\%F \%T" >> /oldboy/time.txt 2>&1
    项目经验: 在校的项目
	01 企业项目: 全网备份项目(定时任务)

37.磁盘管理:

0.回顾
	1) 系统用户权限
	   a 利用sudo方式进行普通用户提权
	   b 利用linux系统特殊权限位配置普通用户权限
	     setuid: (4XXX)将文件数据的属主权限,赋予其他所有的用户
		 setuid权限一般赋予二进制的命令文件或者一些可执行的脚本文件
		 
		 补充: 脚本如何执行:
		 01. 借助解释器命令执行脚本
		     sh /server/scripts/xxx.sh
			 python /server/scripts/xxx.py
		 02. 直接还行脚本(当成命令执行)
             将脚本文件赋予执行权限
             /server/scripts/xxx.sh			 
		     /server/scripts/ --> PATH
			 xxx
		 setgid: (2XXX)将文件数据的属组权限,赋予其他所有的用户
		 粘滞位: 常见一个共享目录 共享数据只能互相查看  不能互相随意修改
    
	 2) 系统中重要数据信息如何加锁
	    chattr  +i  文件信息
		chattr  -i  文件信息
		lsattr  文件信息

	 3) 定时任务实现方式
	    01. 系统自带定时任务 (4个特殊的目录)ls /etc/cron*
        [root@lala ~/dockerfile/n1]# cat /etc/cron
        cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/  
		02. 用户自己设定定时任务 (一个命令 crontab 三个文件 日志文件 配置文件 黑名单文件)
		/var/log/cron   日志文件
        /etc/cron.deny   黑名单
        /etc/cron.allow  白名单(白名单设定后,黑名单就失效)
        
	 4) 定时任务配置方法:
	    crontab -e 
		* * * * *     命令信息
		定时时间信息
    
	    时间的表示方法:
		直接用数值表示: 00 02 * * *
		可以用符号表示: * */n n,m n-m
		***注意: 星期信息不要和日期信息同时设置
	   
	 5) 定时任务编写的注意事项:
	    1) 定时任务编写时需要加注释信息
		2) 文件的路径尽量采用绝对路径
		3) 命令信息最好也要用绝对路径 
		4) 编写定时任务尽量在后面加上重定向黑洞 &>/dev/null
	       定时任务中有输出到屏幕上的信息:
		   如果开启邮件服务 postfix: 输出的信息 >> /var/spool/mail/root                  block空间不足
		   如果关闭邮件服务 postfix: 输出的信息 >> /var/spool/postfix/maildrop/小文件    inode空间不足
	    5) 尽可能让命令不要产生正确或错误的输出信息
		   tar zcvf  --> tar zcf 
        6) 多个定时任务命令,最好使用脚本实现
	    7) 定时任务中无法识别任务中的一些特殊符号  
           解决方式一: 利用转义符号		
		   * * * * *  /bin/date "+\%F \%T" >/tmp/time.txt
		   解决方式二: 利用脚本编写任务
		   vim /oldboy/date.sh
		   /bin/date "+%F %T"
		   
		   * * * * *  /bin/sh /oldboy/date.sh &>/dev/null
		   
1.磁盘管理层次说明
	磁盘的结构体系
	01. 磁盘的物理结构 (外部结构 内部结构:如何存储数据) 工作原理(先切换磁头 让磁头镜像运动)  OK
	02. 磁盘阵列说明   (raid0 raid1 raid5 raid10 raid01)
	    磁盘阵列如何配置 
        配置LVM  L 逻辑  v 卷组  M 管理  逻辑卷管理 --> 实现可以随意调整磁盘分区大小 
	03. 磁盘分区概念
        给容量较小的磁盘进行分区: 小于2T  fdisk
        给容量较大的磁盘进行分区: 大于2T  parted	
    04. 磁盘格式化操作(创建文件系统)
    05. 磁盘维护管理知识(如何使用磁盘 挂载使用)	
    
2.按照磁盘管理层次详细了解磁盘知识
	磁盘的外部结构: 看的见摸得到的结构
    组成部分
        a 磁盘主轴  决定磁盘转速(rpm-round per minute)
          家用磁盘转速  7200 rpm 5400 rpm
          企业磁盘转速  15k  rpm  10k rpm
        b 磁盘盘片  用于存储数据
        c 磁盘磁头  用于读取数据
        d 磁盘接口  用于连接主板 用于连接阵列卡

    磁盘的内部结构: 看不见的结构信息
	组成部分: 
        a 磁盘(Disk)
        b 磁头(Head)
          作用说明:用来写入和读取数据的
          特点说明:盘面数量等于磁头数量
          工作原理:采用径向运动读写数据
        c 磁道(Track)
          作用说明:用来存储用户数据
          特点说明:由多个同心圆组成

          存储计数:最外面同心圆为0磁道
          工作原理:磁盘默认按照磁道寻找数据
                    重点原理:磁头径向运动为机械运动(寻道)  性能小于固态硬盘(芯片)
                    原理特点:磁头机械运动较慢
        d 扇区(Sector)
          作用说明:用来存储用户数据
          特点说明:磁盘存储最小单位
          存储计数:默认磁盘扇区从1扇区开始,扇区大小为512字节
          系统存储最小单位是block
        e 柱面(Cylinder) 
          作用说明:用来存储用户数据
          特点说明:不同盘面上相同的磁道组成(圆柱体)
          工作原理:磁盘默认按照柱面进行读写
                    重点原理:磁头之间的切换为电子切换
                    原理特点:磁头电子切换较快
        f 单元块(Units) 
          作用说明:用来存储用户数据
          特点说明:表示单个柱面大小

3. 磁盘层次结构详细说明--磁盘阵列raid
    阵列有什么用?
    1) 提高磁盘存储效率
    2) 提高磁盘存储安全
    3) 提高磁盘存储容量	
	阵列的配置方法:
    raid 0   存储数据效率高  存储安全性低(将数据分成两部分,分别存储在两块磁盘)
    raid 1	 存储数据效率低  存储安全性高(两块磁盘都存储相同的数据)
	raid 5   存储数据效率较高  存储安全性较高(最少三块磁盘,数据(只能三份不管磁盘多少)分成三份,通过其中的两份可以对出剩下的数据,分别储存在三块磁盘) 
	说明: 至少有3块磁盘  raid5阵列中只能最多坏一块磁盘  损耗一块磁盘的容量
	300G 300G 300G --> raid5 --> 600G   存储大小等于两块磁盘的总和
	LVM 实现分区可以弹性缩融 和 扩容
    raid01
    ibm阵列卡配置图解:https://baijiahao.baidu.com/s?id=1660694650150042596

4.磁盘层次结构详细说明--磁盘分区方法
    预备知识: 
	a 系统启动引导记录--
	  MBR引导记录  用于引导磁盘空间小于2T
	  GPT引导记录  用于引导磁盘空间大于2T
	  
    b 分区方式
	  情况一:
	  可以划分4个主分区  /dev/sda  /dev/sda1 .. sda4   mount /dev/sda1  /mnt
	  情况二: 
	  可以划分3个主分区    /dev/sda  /dev/sda1 .. sda3 
	  可以划分1个扩展分区  扩展分区无法直接使用
      需要在扩展分区基础上划分逻辑分区:  /dev/sda5 /dev/sda6 ...	

38.磁盘分区:

0.回顾
	1) 磁盘的层次结构
	   1. 物理层次结构: 	磁盘外部和内部结构
	   2. 磁盘的阵列/LVM: 	将多块硬盘整合为一块  LVM是实现分区弹性缩容和扩容
	   3. 磁盘分区方法
	   4. 磁盘格式化操作: 	创建文件系统
	   5. 磁盘挂载使用: 
        
1.分区介绍
	1) 磁盘分区方法 (备份服务器 存储服务器 数据库服务器)         OK  fdisk  parted
	2) 实现挂载使用 (实现开机自动挂载 /etc/fstab /etc/rc.local)   ok  
	3) swap分区如何调整大小 (案例: java程序比较耗费内存 临时增加swap空间)
	4) 企业常见问题: 磁盘空间满了如何处理   
        
2.磁盘层次结构--磁盘分区方法 
    情况一: 磁盘分区实践--磁盘小于2T
    第一个里程: 准备磁盘环境
    准备了一块新的10G硬盘

    第二个里程: 在系统中检查是否识别到了新的硬盘
    检查是否有新的磁盘存储文件
    [root@oldboyedu ~]# ll /dev/sdb
    brw-rw----. 1 root disk 8, 16 Apr 28 08:54 /dev/sdb	
	
	第三个里程: 对磁盘进行分区处理(fdisk-- 进行分区处理 查看分区信息)
	fdisk -l   --- 查看分区信息 
	[root@oldboyedu ~]# fdisk /dev/sdb
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table
    Building a new DOS disklabel with disk identifier 0x6c918c6d.
    
    Command (m for help):   可以对磁盘进行分区了
	Command action
    d   delete a partition  *****
        删除分区	
    g   create a new empty GPT partition table
	    创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区)
    l   list known partition types
	    列出可以分区的类型???
    m   print this menu
	    输出帮助菜单
    n   add a new partition  *****
	    新建增加一个分区
    p   print the partition table  *****
	    输出分区的结果信息
    q   quit without saving changes 
	    不保存退出
    t   change a partition's system id
	    改变分区的系统id==改变分区类型(LVM 增加swap分区大小)
    u   change display/entry units
	    改变分区的方式  是否按照扇区进行划分
    w   write table to disk and exit  *****
	    将分区的信息写入分区表并退出==保存分区信息并退出
  
	开始分区: 
    a 规划分4个主分区 每个分区1G
	分区操作过程
	Command (m for help): n     # 表示新建分区              
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Select (default p): p    # 表示选择主分区
    Partition number (1-4, default 1): 1
    First sector (2048-20971519, default 2048):   # 开始的这一步可以直接回车
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +1G # 结束的需要填写到哪里
    Partition 1 of type Linux and of size 1 GiB is set
    
	分区操作检查:
    Command (m for help): p   # 查看分区情况
    Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x3069f1dd
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     2099199     1048576   83  Linux
    /dev/sdb2         2099200     4196351     1048576   83  Linux
    /dev/sdb3         4196352     6293503     1048576   83  Linux
    /dev/sdb4         6293504     8390655     1048576   83  Linux
    
    Command (m for help): n  # 已经有四个分区了,所以在按n就会不让你分区
    If you want to create more than four partitions, you must replace a
    primary partition with an extended partition first.
	
	b 规划分3个主分区 1个扩展分区 每个主分区1G  剩余都给扩展分区
    删除分区 
    Command (m for help): d     # 删除分区
    Partition number (1-4, default 4): 1  # 选择分区id
    Partition 1 is deleted	
	创建逻辑分区
    Command (m for help): p
    
    Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x3069f1dd
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     2099199     1048576   83  Linux
    /dev/sdb2         2099200     4196351     1048576   83  Linux
    /dev/sdb3         4196352     6293503     1048576   83  Linux
    /dev/sdb4         6293504    20971519     7339008    5  Extended   # 有了扩展分区才能逻辑分区,这个时候你的扩展分区才能使用,否则无法利用扩展分区存储
    
    Command (m for help): n  # 这个时候三个主分区+一个扩展分区已经分好了,n就会产生逻辑分区
    All primary partitions are in use
    Adding logical partition 5
    First sector (6295552-20971519, default 6295552): 
    Using default value 6295552
    Last sector, +sectors or +size{K,M,G} (6295552-20971519, default 20971519): +1G  # 设置大小
    Partition 5 of type Linux and of size 1 GiB is set
	
	Command (m for help): p  
    Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x3069f1dd
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048     2099199     1048576   83  Linux
    /dev/sdb2         2099200     4196351     1048576   83  Linux
    /dev/sdb3         4196352     6293503     1048576   83  Linux
    /dev/sdb4         6293504    20971519     7339008    5  Extended
    /dev/sdb5         6295552     8392703     1048576   83  Linux
  
	需求: 划分2个主分区 划分2个逻辑分区
    sdb1  2G
    sdb2  2G
    sdb5  3G
    sdb6  1G	
	  
	第四个里程: 保存退出,让系统可以加载识别分区信息 # 按w保存分区的操作
    让系统可以加载识别分区文件
    partprobe /dev/sdb 
    
	
	
	情况二: 磁盘分区实践--磁盘大于2T
	第一个里程: 准备磁盘环境 
	虚拟主机中添加一块3T硬盘
	
	第二个里程: 使用parted命令进行分区
        parted /dev/sdc
	[root@lala ~]# parted /dev/sda
    GNU Parted 3.1
    Using /dev/sda
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) help         # 显示帮助信息
	mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
	                                         创建一个分区表 (默认为mbr)
	print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found
                                             partitions, or a particular partition
											 显示分区信息
	mkpart PART-TYPE [FS-TYPE] START END     make a partition
	                                         创建一个分区 
    quit                                     exit program
	                                         退出分区状态
	rm NUMBER                                delete partition NUMBER
	                                         删除分区 

    (parted) mklabel gpt    # 修改磁盘分区类型
    (parted) print          # 显示分区信息,同时可以查看分区类型 Partition Table: gpt
	(parted) mkpart primary 0  2100G 	# 创建分区方法,同时设置大小
	
	第三个里程: 加载磁盘分区
	partprobe /dev/sdc

3.磁盘层次结构--格式化操作(创建文件系统)
    [root@lala ~/dockerfile/n1]# mkfs  # 多按几下table键,查看系统文件类型
    mkfs         mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs     
    mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat
    
    mkfs.xfs  /dev/sdb1   # 通过xfs文件系统格式化sdb1 == mkfs -t xfs /dev/sdb2
	partprobe /dev/sdb  # 在这里必须使用这个命令使系统加载新的分区,否则还是不能使用
     
    mount     /dev/sdb1 /tmp  # 将格式化后的分区挂载,使用
        
	创建文件系统: 磁盘分区存储数据的方式
	
	ext3/4  centos6 
	xfs     centos7  格式效率较高  数据存储效率提升(数据库服务器)
	
	[root@oldboyedu /]# mkfs.xfs /dev/sdb2
    meta-data=/dev/sdb2              isize=512    agcount=4, agsize=65536 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=262144, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    
4. 磁盘层次结构--磁盘挂载应用
    mount /dev/sdb1 /mount01  # 创建两个空目录mount01和mount02进行挂载
    mount /dev/sdb2 /mount02	
    检查确认:
    [root@oldboyedu /]# df -h
    /dev/sdb1      1014M   33M  982M   4% /mount01
    /dev/sdb2      1014M   33M  982M   4% /mount02
	
    如何实现开机自动挂载:
	方法一: 将挂载命令放入/etc/rc.local
	[root@oldboyedu /]# tail -2 /etc/rc.local 
    mount /dev/sdb1 /mount01   # 其中有一个-o参数可以设置挂载磁盘的参数
    mount /dev/sdb2 /mount02

    系统开机加载rc.local流程:
	加载/etc/rc.local --> /etc/rc.d/rc.local --> 以绝对路径方式执行
	/etc/rc.d/rc.local 
    [root@lala ~/dockerfile/n1]# ll /etc/rc.d/rc.local 
	-rw-r--r--. 1 root root 473 May  3 00:01 /etc/rc.d/rc.local  # 因为源文件没有执行权限
	chmod +x /etc/rc.d/rc.local  ?
	
	方法二: 在/etc/fstab文件中进行设置
	UUID=e2fc8646-2b36-47cc-a35a-8c13208f4d0b /          xfs                 defaults            0             0
    UUID=34fc45ba-c38c-42bc-a120-90f9d5dd2382 /boot      xfs                 defaults            0             0
    UUID=62100743-6f8a-4f83-a37d-e2088c4830e2 swap       swap                defaults            0             0
	挂载磁盘文件(存储设备)                   挂载点     指定文件系统类型   挂载的参数    是否备份磁盘  是否检查磁盘 
	mount 挂载的磁盘文件 挂载点
    [root@oldboyedu ~]# tail -2 /etc/fstab
    /dev/sdb1                                 /mount01                xfs     defaults        0 0
    UUID=144738ff-0da3-4162-b574-40af379cbe9e /mount02                xfs     defaults        0 0
    
    [root@lala ~]# blkid  # 查看分区uuid
    /dev/sda1: UUID="028b79a1-ec86-4d29-a3e1-109b2baed401" TYPE="xfs" 
    /dev/sda2: UUID="630seT-E5Fz-ym4y-9iFD-0UYG-06lJ-NeJN3N" TYPE="LVM2_member" 
    /dev/mapper/centos-root: UUID="487d5718-f47b-4557-a785-4be298721f87" TYPE="xfs" 
    /dev/mapper/centos-swap: UUID="8eeb7545-c427-4fbd-a2aa-6c64fb696acb" TYPE="swap" 

4.企业磁盘常见问题:
    1) 磁盘满的情况 No space left on device
	   a 存储的数据过多了
	     模拟磁盘空间不足
		dd if=/dev/zero of=/mount01/full.txt  bs=10M count=100  # 看下图
         block存储空间不足了
         解决方式:
		  01:删除没用的数据? 
           02:找出大的没用的数据?
		   find / -type f -size +xxx
		   du -sh /etc/sysconfig/network-scripts/*|sort -h # 查看目录内容大小

	   补充: 按照数值排序命令
	   [root@oldboyedu mount01]# cat num.txt |sort -n
       # 1
       # 10
       # 11
       # 12
       # 2
       # 3
       # 6
       # 9
       [root@oldboyedu mount01]# cat num.txt |sort -n -k2  # -k按照第二列排序
       # 1
       # 2
       # 3
       # 6
       # 9
       # 10
       # 11
       # 12

       b 存储的数据过多了
    	df -i 查看磁盘inode
       	inode存储空间不足了: 出现了大量小文件

5.如何调整swap分区大小
	free -h  # 如何查看swap分区使用情况
    第一个历程: 将磁盘分出一部分空间给swap分区使用
	dd if=/dev/zero  of=/tmp/1G  bs=100M count=10
	
    第二个历程: 将指定磁盘空间作为swap空间使用
	[root@oldboyedu tmp]# mkswap /tmp/1G 
    Setting up swapspace version 1, size = 1023996 KiB
    no label, UUID=6dd70684-dec2-48cf-8fd9-f311548bbb4f

    第三个历程: 加载使用swap空间
	[root@oldboyedu tmp]# swapon /tmp/1G 
    swapon: /tmp/1G: insecure permissions 0644, 0600 suggested.
    [root@oldboyedu tmp]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G        225M        575M        9.6M        1.2G        1.5G
    Swap:          2.0G          0B        2.0G
    [root@oldboyedu tmp]# swapoff /tmp/1G 
    [root@oldboyedu tmp]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           1.9G        224M        576M        9.6M        1.2G        1.5G
    Swap:          1.0G          0B        1.0G
    [root@oldboyedu tmp]# rm /tmp/1G -f

6.总结
	磁盘知识总结
    1) 掌握磁盘体系结果
	2) 磁盘的内部和外部结构(磁头 磁道 扇区 柱面) 运维---存储服务
	3) 磁盘分区的方法
	   fdisk  划分小于2T的磁盘
	   parted 划分大于2T的磁盘
	4) 如何实现格式化和自动挂载   存储服务nfs 
	   /etc/rc.local 
	   /etc/fstab 
    5) 磁盘分区满的原因  No space left on device
	   a block占用过多了
	     df -h 
		 解决方式: 删除大的没用的数据
		 如何找到大的文件
		 find / -type f -size +500M|xargs rm
		 du -sh /etc/sysconfig

       b inode占用过多了
	     df -i
		 解决方式: 删除大量的没用的小文件
	6) 如何调整swap空间大小  --- tomcat(java)	512M 
       dd 
	   mkswap 
	   swapon/off
原文地址:https://www.cnblogs.com/liuzhanghao/p/12853794.html