• 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
    
  • 相关阅读:
    正则表达式
    HashTable与HashMap的区别
    求解连续子数组乘积的最大值
    求解N个值中最大的k个数,N远大于k
    C++权限修饰符
    DBSCAN算法
    【leetcode】1318. Minimum Flips to Make a OR b Equal to c
     【leetcode】1317. Convert Integer to the Sum of Two No-Zero Integers
    【leetcode】1316. Distinct Echo Substrings
    【leetcode】1315. Sum of Nodes with Even-Valued Grandparent
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/12853794.html
Copyright © 2020-2023  润新知