Linux-基础部分

Linux

文章目录

  • Linux
    • 一. 环境部署及基本命令,文件管理
        • 1. 查看网卡配置
        • 2.激活网卡
        • 3. 关闭防火墙
        • 4. 关闭selinux
        • 5. 切换终端
        • 6. 终端快捷键
        • 7. 命令来源
        • 8. 详细信息
        • 9. 文件类型
        • 10. 获取帮助
        • 11. 查看与切换目录
        • 12. /目录下的每个目录的作用
        • 13. 简略版
        • 14. 文件管理
        • 15. 创建文件
        • 16. 拷贝文件
        • 17. 剪切
        • 18. 删除
        • 19. 作业
    • 二. Vim文本编辑器操作
        • 1. vim进行输入保存
        • 2. vim的基本模式
          • 1. 命令模式(一般模式)
          • 2. 输入模式(编辑模式)
          • 3. 末行模式(命令行模式)
        • 3.替换
        • 4. 练习1
        • 5. 练习2
          • 1.替换文件中所有的a为 X
          • 2.删除文件中所有开头的空格
          • 3.删除文件中所有的空格
          • 4.删除空行
          • 5.删除只含有空格或者制表符的行
          • 6,在每一行开头家一个#表示注释这些行
          • 7.将文件中所有/换成-
          • 8.删除文件中所有的数字
          • 9. vim其他模式
        • 6. 传文件使用
    • 三. 用户管理
        • 1.用户管理
        • 2. 添加组
        • 3. 练习1
        • 4. 密码管理
        • 5. 修改组信息
        • 6. 修改用户信息
        • 7. 修改家目录
        • 8. 锁定帐号
        • 9. 锁定密码
        • 10. 练习2
        • 11. 删除组:
        • 12. 删除用户:
        • 13. 附加组:
        • 14. 手动管理帐号:
        • 15. 修改root密码
        • 16. 练习3
    • 四. 基本权限
        • 1. 权限各字段的含义
        • 2. 权限位:
        • 3. 修改权限
        • 4. 练习1
        • 5. 权限反掩码
        • 6. 时间
        • 7. 练习2
        • 8. 练习3
    • 五. 高级权限
        • 1. SUID (set user id )
          • 1. 实验
        • 2. SGID(set group id )
          • 1. 实验
        • 3. sticky(冒险位,粘贴位)
          • 1. 实验
        • 4. 高级权限数字表示
        • 5. 高级权限大小写区分是否具有x权限
        • 6. 练习
    • 六. 软件包管理
        • 1. rpm包安装
          • 1.安装软件
          • 2. 安装的参数含义
          • 3. 手动解决依赖关系
          • 4. yum库的使用
            • 1. yum库配置文件目录
            • 2.配置
            • 3.测试
            • 4. 元数据缓存已建立
            • 5. 同一个配置文件中配置多库
            • 6. 多个配置文件配置多库
            • 7. 手动建立yum库
        • 5. 练习
        • 2. 压缩打包
          • 1. 压缩
          • 2. 打包
        • 3. 练习
        • 3. 源码包安装
          • 1. 解压源码包
          • 2. 安装前配置和检测
          • 3. 编译:
          • 5. 测试
          • 6. 修改环境配置文件
          • 7. 卸载
        • 4. 其他类型软件包
          • 1. 二进制bin包:
          • 2. 解决运行前需要的软件包:
          • 3. 半源码半rpm
    • 七.进程管理
        • 1. 守护进程
        • 2. top 动态查看进程信息
        • 3. 杀进程
        • 4. 前后台切换
        • 5. 进程状态
        • 6. nice调整
        • 7. 练习
    • 八. 高级命令
        • 1. 高级命令
          • 1. wc
          • 2. rev 左右颠倒
          • 3. tac 上下颠倒
          • 4. cut
          • 5. grep
          • 6. stat
          • 7. sort
          • 8. uniq
        • 2. 练习1
        • 3. 练习2
    • 九. 环境变量配置文件
        • 1. 环境变量
        • 2. PATH
          • 1. 实验
          • 2. 测试
        • 3. 练习1
        • 4. 练习2
    • 十. shell基础
        • 1. bash特性
        • 2. shell环境变量
        • 3. 环境变量的配置文件
        • 4. shell脚本
          • 1. 判断语法
          • 2. 循环语法
        • 5. 练习
    • 十一. 磁盘管理
        • 1. 主、扩展、逻辑分区
          • 1.分区
          • 2. 同步分区表,产生新的分区对应的文件
          • 3. 格式化
          • 4. 卸载分区
          • 5. 删除分区
          • 6. 划分扩展和逻辑分区
            • 1. 扩展分区
            • 2. 划分逻辑分区
          • 7. 练习1
          • 8. 练习2
        • 2. 自动挂载
          • 1. mount
          • 2. 练习1
          • 3. 自动挂载
          • 4. 练习2
          • 5. 练习3
          • 6. 练习4
        • 3. 交换分区(虚拟内存)扩大缩小
          • 1. 扩大交换分区
            • 1.分区
            • 2. 格式化
            • 3.激活新的交换分区
          • 2. 新交换分区永久生效
            • 方法1
            • 方法2: UUID
          • 3. 练习1
          • 4. 练习2
        • 4. raid磁盘阵列
          • 1. 磁盘阵列
          • 2. raid的级别
          • 3. 软raid(使用软件模拟)
          • 4. 练习1
          • 5. 练习2
        • 5. lvm管理
          • 1. lvm功能
          • 2. 操作
            • 1. pv物理卷
            • 2. vg卷组
            • 3. lv逻辑卷
            • 4. 格式化
            • 5. 挂载
          • 3. 在线扩容lv
          • 4. 在线扩容vg
          • 5. 数据迁移
          • 6. 创建快照
          • 7. EXT4文件系统(centos)
          • 8. 练习
        • 6. facl使用方法
          • 1. 文件系统属性
          • 2. facl(文件访问控制列表)
          • 3. 练习1
          • 4. 练习
        • 7. quota磁盘配额使用
          • 1. quota磁盘配额(user)
            • 1.开启配额功能
            • 2. 设置用户配额
            • 3. 查询配额的使用情况
            • 4. 启动配额
          • 2. 练习
        • 8. GPT分区
        • 9. ext4和xfs文件系统
            • 1. ext4文件系统
            • 2. xfs文件系统
            • 3. XFS文件系统的配置
            • 4. xfs局限性
            • 5. lvm在线扩容和文件系统扩容
            • 6. 修复文件系统
            • 7. 磁盘碎片整理
            • 8. 全备份
            • 9. 增量
            • 10. 差异
            • 11. 完全恢复+增量恢复
            • 12. 完全恢复+差异恢复
            • 13. 练习
        • 10. 符号链接和硬链接
            • 1. 文件链接方式
            • 2. 区别
            • 3. 练习
    • 十二. 网络管理
        • 1. 永久别名
        • 2. NetworkManager使用
        • 3. 练习1
        • 4. 修改连接设置
        • 5. 添加额外地址
        • 6. 练习2
    • 十三. 系统修复维护
        • 1. root丢失,解决方法
        • 2. 修复模式
        • 3. 系统启动过程
        • 4. 修改root密码
          • 一.物理机
          • 二,虚拟机
        • 5. 练习
    • 十四. 模块管理
        • 1. 内核
        • 2. 内核模块module
        • 3. 内核参数
          • 1.打开路由转发参数
          • 2.禁止其他人对我执行ping
        • 4. 练习
    • 十五. 查找命令
        • 1. which
        • 2. whereis cat
        • 3. grep
        • 4. locate
        • 5. find
        • 6. 练习1
        • 7. 练习2
    • 十六. 服务管理
      • 1. 计划任务
        • 1. at(24小时内计划任务)
        • 2. crond服务
        • 3. 练习1
        • 4. 计划任务的保存位置
        • 5. 系统计划任务
        • 6. 启动关闭服务
        • 7. 练习
      • 2. 日志任务
        • 1. 日志的集中管理
        • 2. 实验
        • 3. 日志的轮转 logrotate
        • 4. 练习
      • 3. DHCP
      • 4. SSHD
      • 5. 文件服务器
        • 1. NFS
          • 1. 简介
          • 2. NFS服务器工作原理
        • 2. SAMBA
        • 3. vsftpd
      • 6. web服务器
        • 1. 客户端访问
        • 2. apache 工作模式
        • 3. 切换方式
        • 4. 个人主页
        • 5. 访问控制
        • 6. 验证方式登录
        • 7. 发布cgi脚本
        • 8. 虚拟主机(基于域名 基于ip)
          • 1. 基于域名虚拟主机
          • 2. 基于ip虚拟主机
      • 7. DNS
        • 1. 正向解析
        • 2. 反向解析
        • 3. 各种写法
        • 4. 转发服务器
        • 5. DNS主从服务器(时间必须同步)
        • 6. TSIG方式传输
        • 7. 子域授权
      • 8. NTP时间服务器
        • 1. 同步时间
        • 2. NTP服务器的概念:
        • 3. 安装部署NTP服务器
      • 9. Chrony
      • 10. XINETD
        • 1. 配置与服务
        • 2. tftp服务
      • 11. MAIL
        • 1. 发送邮件配置
        • 2. 接受邮件
        • 3. 错误处理

一. 环境部署及基本命令,文件管理

不要图形化默认使用命令行界面

文本模式 级别3
[root@7-1 ~]# systemctl set-default multi-user.target 
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@7-1 ~]# systemctl get-default
multi-user.target
[root@7-1 ~]# 

图形模式 级别5
[root@7-2 ~]# systemctl set-default graphical.target 
[root@7-2 ~]# systemctl get-default

1. 查看网卡配置

[root@localhost ~]# ip addr s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:94:f0:29 brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.130/24 brd 192.168.43.255 scope global noprefixroute dynamic ens33
       valid_lft 1334sec preferred_lft 1334sec
    inet6 fe80::4d22:7e8d:bda9:5494/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:6c:be:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:6c:be:0e brd ff:ff:ff:ff:ff:ff

2.激活网卡

nmcli connection up ens33

或者使用 修改底层配置文件

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet #网卡类型:为以太网
PROXY_ METHOD=none #代理方式:关闭状态
BROWSER_ ONLY=no #只是浏览器:否
BOOTPROTO=dhcp #网卡协议DHCP动态主机配置协议
DEFROUTE=yes #默认路由:是
IPV4_ FAILURE_ FATAL=no #否开启IPV4致命错误检测:否
PV6INIT=yes # IPV6是否自动初始化:是
IPV6_ AUTOCONF="yes"IPV6是否自动配置:是
IPV6_ ADDR _GEN _MODE=stable- privacy # IPV6地址生成模型
stable-privacy是一种生成IPV6的策略
NAME=ens33 #网卡名字(与DEVICE- 致)
UUID=6ac17c2b-473e- -4894-811b-4940ee7bf455#唯一标识码
DEVICE=ens33#网卡设备
ONBOOT=yes #是否激活网卡
#IPADDR=192.168.43.128#ip地址(static设置 )
#NETMASK=255.255.255.0#子网掩码
#GATEWAY= 192.168.43.1#网关
#DNS1=114.114.114.114#dns地址解析

3. 关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

4. 关闭selinux

[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.                  
#     permissive - SELinux prints warnings instead of enforcing.        
#     disabled - No SELinux policy is loaded.
SELINUX=Permissive 默认状态enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

5. 切换终端

ctrl+alt+F2-F6   tty2-6
alt+F1

6. 终端快捷键

shift+ctrl + 放大
shift+ctrl - 缩小
alt F4 关闭终端
shift+ctrl + t 开启终端标签
alt+n 切换标签
shift+ctrl w 关闭标签
shift+ctrl c 复制
shift+ctrl v 粘贴

7. 命令来源

ls  list
cp  copy
mv  move

cd  == change directory
mkdir  == make directory

touch

命令组成
命令 [-选项(参数)] [对象(file)]
ls 
ls -l
ls -l file.txt

基本命令:
ls -l 显示文件详细信息

-a 显示所有文件(包括隐藏文件)
.filename  ----->隐藏文件
. 当前目录
.. 上层目录

-A 显示所有文件(包括隐藏文件,不包含.和..)
创建文件在文件之前加上.创建的就是隐藏文件
. 当前目录
.. 上层目录
-d 显示目录信息
ls -ld  /root
-h 按最大单位显示:
-t 按时间排序:
-r 逆序输出:
-S 按大小排序:
-R 递归显示:

8. 详细信息

[root@localhost ~]# ls -l
total 8
-rw-------. 1 root root 1775 Oct 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Desktop
drwxr-xr-x. 2 root root    6 Oct 13  2020 Documents
drwxr-xr-x. 2 root root    6 Oct 13  2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13  2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Music
drwxr-xr-x. 2 root root    6 Oct 13  2020 Pictures
drwxr-xr-x. 2 root root    6 Oct 13  2020 Public
drwxr-xr-x. 2 root root    6 Oct 13  2020 Templates
drwxr-xr-x. 2 root root    6 Oct 13  2020 Videos
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名

9. 文件类型

LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。

 普通文件:如文本文件、C语言源代码、SHELL脚本、二进制的可执行文件等,可用cat、less、more、vi、emacs来察看内容,用mv来改名。

 目录文件:包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。

 连接文件:是指向同一索引节点的那些目录条目。用ls来查看是,连接文件的标志用l开头,而文件面后以"->"指向所连接的文件。

 特殊文件:LINUX的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在/dev目录内。例如,软驱A称为/dev/fd0。LINUX无C:的概念,而是用/dev/had来自第一硬盘。
 
 
 
- 普通文件  file
d 目录文件 directory
c 字符设备文件   character
b 块设备文件  block
s 套接字文件 socket
p 管道文件  pipe
l 符号链接文件(软链接) symbolic

10. 获取帮助

1. ls --help

2. info ls  pinfo

3. man ls
	man 1 用户命令   *
	man 2 系统调用
	man 3 库调用
	man 4 特殊文件
	man 5 配置文件   *
	man 6 游戏
	man 7 杂项
	man 8 系统命令   *

上述后面带有*号的为要点。

man -f passwd  显示passwd 在那些章节有描述
man -k pass    模糊查询

11. 查看与切换目录

pwd  查看当前家目录位置

cd  切换目录
cd /usr/local
cd . 刷新目录
cd .. 回到上层目录
cd ../.. 上层的上层
cd ~  和  cd 回到家目录
cd - 上次工作目录

绝对路径: 从/开始的路径 / 表示根
相对路径: 从当前目录开始路径

12. /目录下的每个目录的作用

linux下的文件结构,每个文件夹作用

/bin 二进制可执行命令 
/dev 设备特殊文件 
/etc 系统管理和配置文件 
/etc/rc.d 启动的配置文件和脚本 
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 
/tmp 公用的临时文件存储点 
/root 系统管理员的主目录(呵呵,特权阶级) 
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。 
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里 
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 
/var 某些大文件的溢出区,比方说各种服务的日志文件 
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含: 
/usr/x11r6 存放x window的目录 
/usr/bin 众多的应用程序 
/usr/sbin 超级用户的一些管理程序 
/usr/doc linux文档 
/usr/include linux下开发和编译应用程序所需要的头文件 
/usr/lib 常用的动态链接库和软件包的配置文件 
/usr/man 帮助文档 
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 
/usr/local/bin 本地增加的命令 
/usr/local/lib 本地增加的库



通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要 
经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。 
除了可能的一个叫/vmlinuz标准的系统引导映像之外,根目录一般不含任何文件。所有 
其他文件在根文件系统的子目录中。 
1. /bin目录 
/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些 
命令都是二进制文件的可执行程序( bin是binary - -二进制的简称),多是系统中重要的系统文件。 
2. /sbin目录 
/ sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使 
用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。 
3. /etc目录 
/ etc目录存放着各种系统配置文件,其中包括了用户信息文件/ etc / passwd,系统初始化文件/etc/rc等。linux正是*这些文件才得以正常地运行。 
4. /root目录 
/root 目录是超级用户的目录。 
5. /lib目录 
/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文 
件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副 
本,故可以使得可执行文件变得更小,节省空间。 
6. /lib/modules 目录 
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引 
导系统所需的模块(例如网络和文件系统驱动)。 
7. /dev目录 
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用 
户可以通过访问/ dev / mouse来访问鼠标的输入,就像访问其他文件一样。 
8. /tmp目录 
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用 
/ var / tmp来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。 
9. /boot目录 
/ boot目录存放引导加载器(bootstrap loader)使用的文件,如lilo,核心映像也经常放在这里, 而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的 文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在ide硬盘的前1024柱面内。 
10. /mnt目录 
/ mnt目录是系统管理员临时安装( mount )文件系统的安装点。程序并不自动支持安装到 
/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱, 而/mnt/exta 可能是使用ext2文件系统的软驱,/mnt/cdrom 光驱等等。 
11. /proc, /usr,/var,/home目录 
其他文件系统的安装点。 


下面详细介绍; 

/etc文件系统 
/etc 目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个 
程序,并阅读该程序的m a n页。许多网络配置文件也在/etc 中。 
1. /etc/rc或/etc/rc.d或/etc/rc?.d 
启动、或改变运行级时运行的脚本或脚本的目录。 
2. /etc/passwd 
用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其 
他信息。 
3. /etc/fdprm 
软盘参数表,用以说明不同的软盘格式。可用setfdprm 进行设置。更多的信息见setfdp rm 的帮助页。 
4. /etc/fstab 
指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的swap区的信息。 
5. /etc/group 
类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。 
6. /etc/inittab 
init 的配置文件。 
7. /etc/issue 
包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。 
8. /etc/magic 
“file”的配置文件。包含不同文件格式的说明,“file”基于它猜测文件类型。 
9. /etc/motd 
m o t d是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。 
常用于通告信息,如计划关机时间的警告等。 
10. /etc/mtab 
当前安装的文件系统列表。由脚本( scritp )初始化,并由mount 命令自动更新。当需要一 个当前安装的文件系统的列表时使用(例如df 命令)。 
11. /etc/shadow 
在安装了影子( s h a d o w )口令软件的系统上的影子口令文件。影子口令文件将/etc / passwd 文件中的加密口令移动到/ etc / shadow中,而后者只对超级用户( root )可读。这使破译口令更困难,以此增加系统的安全性。 
12. /etc/login.defs 
login命令的配置文件。 
13. /etc/printcap 
类似/etc/termcap ,但针对打印机。语法不同。 
14. /etc/profile 、/ etc / csh.login、/etc/csh.cshrc 
登录或启动时bourne或c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。 
15. /etc/securetty 
确认安全终端,即哪个终端允许超级用户( root )登录。一般只列出虚拟控制台,这样就不 
可能(至少很困难)通过调制解调器( modem )或网络闯入系统并得到超级用户特权。 
16. /etc/shells 
列出可以使用的shell。chsh 命令允许用户在本文件指定范围内改变登录的s h e l l。提供一 台机器f t p服务的服务进程ftpd 检查用户shell是否列在/etc/shells 文件中,如果不是,将不允 许该用户登录。 
17. /etc/termcap 
终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义 
序列(这样只能工作于特定品牌的终端),而是从/etc/termcap 中查找要做的工作的正确序列。 
这样,多数的程序可以在多数终端上运行。 


/dev文件系统 
/dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。 
设备文件在安装时由系统产生,以后可以用/dev/makedev 描述。/ dev / make dev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准 makedev 的一部分)。下面简要介绍/dev下一些常用文件。 
1. /dev/console 
系统控制台,也就是直接和系统连接的监视器。 
2. /dev/hd 
ide硬盘驱动程序接口。如: / dev / hda指的是第一个硬盘, had1则是指/ dev / hda的第一个 
分区。如系统中有其他的硬盘,则依次为/ dev / hdb、/ dev / hdc、. . . . . .;如有多个分区则依次为 hda1、hda2 . . . . . . 
3. /dev/sd 
scsi磁盘驱动程序接口。如有系统有scsi硬盘,就不会访问/ dev / had,而会访问/ dev / sda。 
4. /dev/fd 
软驱设备驱动程序。如: / dev / fd0系统的第一个软盘,也就是通常所说的a:盘, 
/ dev/ fd1指第二个软盘,. . . . . .而/ dev / fd1h 1 4 4 0则表示访问驱动器1中的4 . 5高密盘。 
5. /dev/st 
scsi磁带驱动器驱动程序。 
6. /dev/tty 
提供虚拟控制台支持。如: / dev/tty 1指的是系统的第一个虚拟控制台, /dev/tty2是系统 的第二个虚拟控制台。 
7. /dev/pty 
提供远程登陆伪终端支持。在进行telnet登录时就要用到/dev/pty设备。 
8. /dev/ttys 
计算机串行接口,对于dos来说就是“ com1”口。 
9. /dev/cua 
计算机串行接口,与调制解调器一起使用的设备。 
10. /dev/null 
“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕上的输出信息隐藏起来 
时,只要将输出信息输入到/dev/ null中即可。 


/usr文件系统 

/usr 是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr 里的 
所有文件一般来自l i n u x发行版( distribution );本地安装的程序和其他东西在/usr/local 下,因为这样可以在升级新版系统或新发行版时无须重新安装全部程序。/usr 目录下的许多内容是 
可选的,但这些功能会使用户使用系统更加有效。/ u s r可容纳许多大型的软件包和它们的配置 文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。

1. /usr/x11r6 
包含x window系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装, 
x的文件没有集成到系统中。x window系统是一个功能强大的图形环境,提供了大量的图形 
工具程序。用户如果对microsoft wi n d o w s或machintosh比较熟悉的话,就不会对x window系统感到束手无策了。 
2. /usr/x386 
类似/ usr / x 11r6 ,但是是专门给x 11 release 5的。 
3. /usr/bin 
集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin 或/usr/local/bin 中。 
4. /usr/sbin 
包括了根文件系统不必要的系统管理命令,例如多数服务程序。 
5. /usr/man  /usr/info   /usr/doc 
这些目录包含所有手册页、gnu信息文档和各种其他文档文件。每个联机手册的“节” 
都有两个子目录。例如: /usr/man/man1中包含联机手册第一节的源码(没有格式化的原始文件),/usr/man/cat1包含第一节已格式化的内容。l联机手册分为以下九节:内部命令、系统调 
用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序。 
6. /usr/include 
包含了c语言的头文件,这些文件多以. h结尾,用来描述c语言程序中用到的数据结构、 
子过程和常量。为了保持一致性,这实际上应该放在/usr/lib 下,但习惯上一直沿用了这个名 
字。 
7. /usr/lib 
包含了程序或子系统的不变的数据文件,包括一些site - wide配置文件。名字lib来源于库 
(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也 
有许多程序把配置文件存入其中。 
8. /usr/local 
本地安装的软件和其他文件放在这里。这与/usr很相似。用户可能会在这发现一些比较大 
的软件包,如tex、emacs等。 


/var文件系统 
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化 
或扩充的。原来/var目录中有些内容是在/usr中的,但为了保持/usr目录的相对稳定,就把那 
些需要经常改变的目录放到/var中了。每个系统是特定的,即不通过网络与其他计算机共享。 
下面列出一些重要的目录(一些不太重要的目录省略了)。 
1. /var/catman 
包括了格式化过的帮助( man )页。帮助页的源文件一般存在/usr/man/man中;有些man页 
可能有预格式化的版本,存在/usr/man/ cat中。而其他的man页在第一次看时都需要格式化, 
格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。 
(/var/catman 经常被清除,就像清除临时目录一样。) 
2. /var/lib 
存放系统正常运行时要改变的文件。 
3. /var/local 
存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要, 
即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。 
4. /var/lock 
锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在 
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文 
件。 
5. /var/log 
各种程序的日志( log )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注 
销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不 
确定地增长,应该定期清除。 
6. /var/run 
保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登 
录的用户的信息。 
7. /var/spool 
放置“假脱机( spool )”程序的目录,如mail、news、打印队列和其他队列工作的目录。每 
个不同的spool在/var/spool 下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。 
8. /var/tmp 
比/tmp 允许更大的或需要存在较长时间的临时文件。 
注意系统管理员可能不允许/var/tmp 有很旧的文件。 


/proc文件系统 
/proc 文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一 
个非常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提 
供关于系统的信息。下面说明一些最重要的文件和目录(/proc 文件系统在proc man页中有更详 
细的说明)。 
1. /proc/x 
关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自 
己进程号的目录。 
2. /proc/cpuinfo 
存放处理器( c p u )的信息,如cpu的类型、制造商、型号和性能等。 
3. /proc/devices 
当前运行的核心配置的设备驱动的列表。 
4. /proc/dma 
显示当前使用的d m a通道。 
5. /proc/filesystems 
核心配置的文件系统信息。 
6. /proc/interrupts 
显示被占用的中断信息和占用者的信息,以及被占用的数量。 
7. /proc/ioports 
当前使用的i / o端口。 
8. /proc/kcore 
系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅 
仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc 下没有任何 
东西占用任何磁盘空间。) 
9. /proc/kmsg 
核心输出的消息。也会被送到syslog。 
10. /proc/ksyms 
核心符号表。 
11. /proc/loadavg 
系统“平均负载”; 3个没有意义的指示器指出系统当前的工作量。 
12. /proc/meminfo 
各种存储器使用信息,包括物理内存和交换分区( swap )。 
13. /proc/modules 
存放当前加载了哪些核心模块信息。 
14. /proc/net 
网络协议状态信息。 
15. /proc/self 
存放到查看/proc 的程序的进程目录的符号连接。当2个进程查看/proc 时,这将会是不同 
的连接。这主要便于程序得到它自己的进程目录。 
16. /proc/stat 
系统的不同状态,例如,系统启动后页面发生错误的次数。 
17. /proc/uptime 
系统启动的时间长度。 
18. /proc/version 
核心版本。

13. 简略版

bin  用户可执行目录(命令  root 和 普通) 
sbin 系统可执行目录(命令  root)
lib  库文件目录(32) 
lib64  库文件目录(64)
dev  设备文件目录
usr  应用程序目录
var  服务器数据目录(数据 日志)
srv  服务器数据目录
etc  配置文件目录
tmp  临时文件目录
boot 服务器启动目录(内核和启动文件)
media 媒介目录(u盘,cdrom)
mnt  其他挂在点
opt  第三方应用程序目录
proc 伪文件系统(内核参数,进程信息,硬件信息)
sys  伪文件系统(内核参数,进程信息,硬件信息)
run  进程锁目录
root root管理员家目录
home 普通用户家目录

14. 文件管理

查看文件内容:
1. more /root/anaconda-ks.cfg
	显示文件的百分比
	空格  下一页
	b  上一页
	回车  下一行

2. less /root/anaconda-ks.cfg
	上键  上一行
	下键  下一行
	pageup    上一页
	pagedown  下一页

3.  head /root/anaconda-ks.cfg
	默认文件前10行
	
	查看文件前20行
	head -n 20 /root/anaconda-ks.cfg
	查看文件前20行
	head -20 /root/anaconda-ks.cfg 

4.  tail /root/anaconda-ks.cfg
	默认文件后10行
	
	查看文件后20行
	tail -n 20 /root/anaconda-ks.cfg
	查看文件后20行
	tail -20 /root/anaconda-ks.cfg 

	tail -f /var/log/messages  动态监控日志文件

5.	遍历一个文件
	cat /root/anaconda-ks.cfg
	
	添加-n参数则遍历整个文件将数据添加行号显示
	cat -n /root/anaconda-ks.cfg
	
	cat -n /root/anaconda-ks.cfg |less

查看第25行 /etc/passwd 
[root@localhost ~]# head -25  /etc/passwd | tail -1
chrony:x:993:990::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# 

15. 创建文件

创建文件
touch aa.txt
touch cc.txt tt.txt
touch abc{1..5}.txt
touch {a,b,c}{1..3}.txt

实例:

[root@localhost ~]# touch aaa{1..3}.txt
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root    0 Oct 13 16:09 aaa1.txt
-rw-r--r--. 1 root root    0 Oct 13 16:09 aaa2.txt
-rw-r--r--. 1 root root    0 Oct 13 16:09 aaa3.txt
-rw-------. 1 root root 1775 Oct 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Desktop
drwxr-xr-x. 2 root root    6 Oct 13  2020 Documents
drwxr-xr-x. 2 root root    6 Oct 13  2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13  2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Music
drwxr-xr-x. 2 root root    6 Oct 13  2020 Pictures
drwxr-xr-x. 2 root root    6 Oct 13  2020 Public
drwxr-xr-x. 2 root root    6 Oct 13  2020 Templates
drwxr-xr-x. 2 root root    6 Oct 13  2020 Videos
[root@localhost ~]# ls
aaa1.txt  aaa3.txt         Desktop    Downloads             Music     Public     Videos
aaa2.txt  anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates
[root@localhost ~]# 



创建目录
mkdir aa
mkdir cc tt
mkdir abc{1..5}
mkdir {x,y,z}{..5}

实例:
[root@localhost ~]# mkdir aaa{1..4}
[root@localhost ~]# ls
aaa1      aaa2.txt  aaa4             Documents             Music     Templates
aaa1.txt  aaa3      anaconda-ks.cfg  Downloads             Pictures  Videos
aaa2      aaa3.txt  Desktop          initial-setup-ks.cfg  Public
[root@localhost ~]# 


mkdir -p /root/x/y/z
mkdir -pv /root/a/b/c   -p 递归 -v 显示创建过程

16. 拷贝文件

拷贝命令
cp 源文件地址  目标地址
cp /root/cc.txt /
cp /root/cc.txt /tmp/kk.txt  拷贝的过程中重命名
cp -r /root/x/ /tmp/  拷贝目录

17. 剪切

mv 源文件地址  目标地址
mv /root/aa.txt /tmp/
mv /root/tt.txt /tmp/ll.txt

mv /root/a/ /tmp/   剪切目录
mv c3.txt nnnn.txt  当前目录下重命名

ls test.config.simple

mv test.config{.simple,}

ls test.config


剪切速度远远高于拷贝速度!

剪切速度远远高于拷贝速度!

18. 删除

rmdir /root/c/  只能删除空目录

rm /root/a1.txt
rm -f /root/cc.txt
rm -f *.txt     *表示所有文件名

rm -rf /root/tt/  删除目录
rm -rf /root/abc* 


实例:
[root@localhost ~]# touch {1..5}.txt
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root    0 Oct 13 16:03 1.txt
-rw-r--r--. 1 root root    0 Oct 13 16:03 2.txt
-rw-r--r--. 1 root root    0 Oct 13 16:03 3.txt
-rw-r--r--. 1 root root    0 Oct 13 16:03 4.txt
-rw-r--r--. 1 root root    0 Oct 13 16:03 5.txt
-rw-------. 1 root root 1775 Oct 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Desktop
drwxr-xr-x. 2 root root    6 Oct 13  2020 Documents
drwxr-xr-x. 2 root root    6 Oct 13  2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13  2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Music
drwxr-xr-x. 2 root root    6 Oct 13  2020 Pictures
drwxr-xr-x. 2 root root    6 Oct 13  2020 Public
drwxr-xr-x. 2 root root    6 Oct 13  2020 Templates
drwxr-xr-x. 2 root root    6 Oct 13  2020 Videos
[root@localhost ~]# rm -f *.txt
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1775 Oct 13  2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Desktop
drwxr-xr-x. 2 root root    6 Oct 13  2020 Documents
drwxr-xr-x. 2 root root    6 Oct 13  2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13  2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Oct 13  2020 Music
drwxr-xr-x. 2 root root    6 Oct 13  2020 Pictures
drwxr-xr-x. 2 root root    6 Oct 13  2020 Public
drwxr-xr-x. 2 root root    6 Oct 13  2020 Templates
drwxr-xr-x. 2 root root    6 Oct 13  2020 Videos
[root@localhost ~]# 

19. 作业

1.说出ls指令参数的作用?
-a  -l  -d  -t  -S -h -R

-a   显示全部文件(包括隐藏文件)
-l   显示文件详细信息
-d   列出目录本身,而不是目录的内容
-t   按时间排序
-S   按大小排序
-h   按最大单位展示
-R   递归显示

2.文件的类型有几种?分别是什么?
七种
- 普通文件  file
d 目录文件 directory
c 字符设备文件   character
b 块设备文件  block
s 套接字文件 socket
p 管道文件  pipe
l 符号链接文件(软链接) symbolic


3.ls -l  /etc/passwd说出每个字段的含义?
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2418 Oct 16 17:14 /etc/passwd
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名  


4.说出下列参数的功能?
cd ../..  上级的上级
cd .       刷新目录
cd ~      家目录
cd -       返回上次工作的目录


5.列举查看文件的指令有那些?监控日志应该怎么操作?

more
less
head
tail
cat
tail -f /var/log/messages
[root@bogon ~]# man ls
[root@bogon ~]# tail -f /var/log/messages 
Oct 13 19:42:45 bogon dbus[761]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Oct 13 19:42:45 bogon systemd: Starting Network Manager Script Dispatcher Service...
Oct 13 19:42:45 bogon dhclient[920]: bound to 192.168.43.130 -- renewal in 752 seconds.
Oct 13 19:42:45 bogon dbus[761]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Oct 13 19:42:45 bogon systemd: Started Network Manager Script Dispatcher Service.
Oct 13 19:42:45 bogon nm-dispatcher: req:1 'dhcp4-change' [ens33]: new request (4 scripts)
Oct 13 19:42:45 bogon nm-dispatcher: req:1 'dhcp4-change' [ens33]: start running ordered scripts...
Oct 13 19:45:57 bogon systemd: Starting Cleanup of Temporary Directories...
Oct 13 19:45:57 bogon systemd: Started Cleanup of Temporary Directories.
Oct 13 19:50:01 bogon systemd: Started Session 4 of user root.

如何查看一个文件的前25行内容,如何查看文件的后25行内容

head -25

6.查看/etc/passwd文件的10-25行如何操作?

head -25  /etc/passwd | tail -15
[root@bogon ~]# head -25  /etc/passwd | tail -15
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
gluster:x:994:991:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:993:990::/var/lib/chrony:/sbin/nologin

7.说出一下目录的作用?
/etc   /root  /var  /usr /bin /sbin  /home  /boot

/etc  配置文件目录
/root root管理员家目录
/var 服务器数据目录
/usr 应用程序目录
/bin 用户可执行目录
/sbin 系统可执行目录
/home 普通用户的家目录
/boot 服务器启动目录

8.创建文件使用什么指令?如何在/tmp下创建abc1.txt-abc100.txt这100个文件?

touch 
touch /tmp/abc{1..100}.txt


9.如何递归创建目录 如:/tmp/aa/cc/tt


mkdir -p /tmp/aa/cc/tt


10.拷贝/tmp/abc1-abc100这100个文件到/root/下

cp -r /tmp/abc{1..100}  /root/


11.如何删除/root/abc1-abc100 这100个文件


rm -rf /root/abc*.txt

yum install tree
tree /aa
tree -L 1 /
tree -L 2 /


练习:
1.建立以下目录结构:
            /aa
           /   \
         ba/    bb/
       /     \       \
    ca/      cb/     cc/
可否一条命令创建?

[root@bogon ~]# mkdir -p /aa/b{a..b} /aa/ba/c{a..b} /aa/bb/cc
[root@bogon ~]# tree /aa
/aa
├── ba
│   ├── ca
│   └── cb
└── bb
    └── cc

2.将系统中/etc/hosts 拷贝到/aa/ba/ca目录?使用2种方法(当前目录为/)

第一种:
[root@bogon ~]# cd /
[root@bogon /]# pwd
/
[root@bogon etc/]# cp hosts /aa/ba/ca/

第二种:

[root@bogon /]# cp /etc/hosts /aa/ba/ca/


3.将/aa/ba/ca/hosts文件移动到/aa/bb/cc/目录下并且重命名位test.txt,2种方法(当前目录为ca)
[root@bogon /]# cd /aa/ba/ca/
[root@bogon ca]# mv /aa/ba/ca/hosts /aa/bb/cc/test.txt
[root@bogon ca]# ls /aa/bb/cc/
test.txt
[root@bogon ca]#mv /aa/ba/ca/hosts /aa/bb/cc/
[root@bogon ca]#rename hosts test.txt
[root@bogon ca]#ls /aa/bb/cc/
test.txt

二. Vim文本编辑器操作

1. vim进行输入保存

打开终端,输入
[root@localhost ~]# vim /root/aa.txt

进入其的输入模式,按下a可以进入输入模式,键盘上的insert也可以进入输入模式,输入自己想要输入的信息,输入完成之后按下esc键 按下shift+: 输入wq进行保存退出。

按下esc键后 shift+: u 可以撤销当前操作(按下esc后也可以直接使用u来进行撤销操作)
第二种撤销方式就是Ctrl+r 


2. vim的基本模式

1. 命令模式(一般模式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8n9J7wjT-1631085654895)(https://i.loli.net/2020/12/07/RJgpGrVP6FlZzCT.png)]

yy复制  p(当前行下一行)  P(当前行的上一行)   50yy  
dd剪切  p              P                100dd
dd删除 
^ 行首  $ 行尾
d^  删除当前字符到行首(不包含当前字符)
d$  删除当前字符到行尾(包含当前字符)
y^  复制当前字符到行首(不包含当前字符)
y$  复制当前字符到行尾(包含当前字符)

35G 定位到35行
gg 首行
G 最后一行

dgg 从当前行删除到首行(包含当前行)
dG 删除当前行到尾行(不包含当前行)

u 撤销一部操作
ctrl+r 重做
2. 输入模式(编辑模式)
命令行进入输入模式的方法

a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入
s 删除当前字符后输入
S 删除当前行后输入

进入输入模式后:
	HOME键  行首
	END键   行尾
3. 末行模式(命令行模式)
shfit + :
:w  保存
:q  退出
:wq  保存退出
:w! 强制保存
:q! 强制退出
:wq! 强制保存退出
:w /tmp/cc.txt 另存
:1,3w /tmp/new.txt
:e /root/aa.txt 打开一个文件
:e! 重新打开当前文件
:X  加密文件

显示行号
:set nu
:set nonu   

显示空格或者制表符
:set list
:set nolist

文件中所有的制表符都设置为16个空格长度
:set tabstop=16

只更改设置之后的制表符长度
:set softtabstop=16

自动缩进
:set autoindent
:set noautoindent

搜索忽略大小写
set ignorecase smartcase


w下一个单词的首字符
dw  yw

J 合并行

vim配置文件:

永久开启行号功能
vim /etc/vimrc
set nu
	
查找
/关键字
n 下一个 N 上一个
?关键字
n 上一个 N 下一个

3.替换

shift+: s/// 
三个斜线:
第一个斜线填写的是文件中里面想要替换的内容
第二个斜线填写的是文件中要替换成的内容
第三个斜线选择替换的范围

:s/ab/xx/  替换当前行第一个匹配字符串
:s/ab/xx/g 替换当前行所有匹配字符串
:%s/ab/xx/g 替换所有行中所有匹配字符串
:%s/ab/xx/gc 交互式替换所有行中所有匹配字符串   

s 替换  g 全局  % 所有行 c交互式 
^ 行首  $ 行尾

:3,5s/ab/xx/gc  3到5行

4. 练习1

1.列举vim的三种常用模式

命令模式(一般模式) 
输入模式(编辑模式) 
末行模式(命令行模式)

2.由命令模式进入输入模式时a  i  o  O 分别代表什么意思?

a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入

3.在命令模式下如何复制100行 如何删除50行 如何粘贴?

100yy  50dd p


4.在命令模式下如何定位到第75行

/75

5.在命令模式下如何删除当前行到首行,如何删除当前行到尾行?

dgg 从当前行删除到首行(包含当前行)
dG 删除当前行到尾行(不包含当前行)

6.末行模式如何保存? 如何强制保存退出?

shift + : + w
shift + : + wq

7.末行模式下如何将100-200行另存一个新文件?

:100,200w 文件路径

8.末行模式下如何开启行号?如何开启忽略大小写设置?

shift + : + set nu
shift + : + set ignorecase

9.vim的配置文件是哪个文件?

vim /etc/vimrc

10.vim如何查找在一个文件中查找abc字段?

:/abc

11.在vim中如何同屏内查看多个文件?

[root@localhost ~]# vim -o 多个文件名
[root@localhost ~]# vim -O 多个文件名
[root@localhost ~]# vimdiff 多个文件名

12.通过vimtutor查看vim的手册

[root@localhost ~]# vimtutor

5. 练习2

1.替换文件中所有的a为 X
:%s/a/X/g

  1 fdsafsadfssdfsafsa
  2 sdfasfasfwefsdfxcvxv
  3 weghdfhdaafxvbfgasf fsda asdfas
  4 fsdfg wf wae w fa fg zfzx r q
  5 fqeyag ghrs hawe ef a

替换后:
  1 fdsXfsXdfssdfsXfsX
  2 sdfXsfXsfwefsdfxcvxv
  3 weghdfhdXXfxvbfgXsf fsdX XsdfXs
  4 fsdfg wf wXe w fX fg zfzx r q
  5 fqeyXg ghrs hXwe ef X
2.删除文件中所有开头的空格
:%s/^ *//

f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
 weghdfhdaafxvbfgasf fsda asdfas
  fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a

替换后
f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasf fsda asdfas
fsdfg wf wae w fa fg zfzx r q 
fq eyag ghrs hawe ef a
3.删除文件中所有的空格
:%s/ *//g

f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
 weghdfhdaafxvbfgasf fsda asdfas
  fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a

替换后
fdsafsadfssdfsafsa 
sdfasfasfwefsdfxcvxv 
weghdfhdaafxvbfgasffsdaasdfas 
fsdfgwfwaewfafgzfzxrq 
fqeyagghrshaweefa 
4.删除空行
:5d
:3,5d
:g/^$/d


初始:

f dsafsadfssdfsafsa 
s dfasfasfwefsdfxcvxv 
 
 
 weghdfhdaafxvbfgasf fsda asdfas 
  fsdfg wf wae w fa fg zfzx r q 
 
 
 
fq eyag ghrs hawe ef a 

删除后

fdsafsadfssdfsafsa 
sdfasfasfwefsdfxcvxv 
weghdfhdaafxvbfgasffsdaasdfas 
fsdfgwfwaewfafgzfzxrq 
fqeyagghrshaweefa

5.删除只含有空格或者制表符的行
:g/^\s*$/d      #\s表示的是空白符

初始:

789789 456  4f asd4f5sa613
 
 
fsd afas123vxz4 v64weg13
f  dsazxvgasdfw
 
 
fdsaf  eaaf46fsda
fdsawe f sda

 
f   asf  sf as
   dfsafawe g qqw ghq
   
删除后

789789 456  4f asd4f5sa613
fsd afas123vxz4 v64weg13
f  dsazxvgasdfw
fdsaf  eaaf46fsda
fdsawe f sda
f   asf  sf as
   dfsafawe g qqw ghq

6,在每一行开头家一个#表示注释这些行
:%s/^/#/g


初始:

789789 456  4f asd4f5sa613
 
 
fsd afas123vxz4 v64weg13
f  dsazxvgasdfw
 
 
fdsaf  eaaf46fsda
fdsawe f sda

 
f   asf  sf as
   dfsafawe g qqw ghq

注释后:

#789789 456  4f asd4f5sa613
#fsd afas123vxz4 v64weg13
#f  dsazxvgasdfw
#fdsaf  eaaf46fsda
#fdsawe f sda
#f   asf  sf as
#   dfsafawe g qqw ghq
7.将文件中所有/换成-
:%s/\//-/g
:%s#/#-#g

初始:

789789 456  4f asd4f5sa613
fsd a//fas//12/3vxz4 v64weg13
f  dsaz/xv//gas/dfw
fdsaf  e/aaf/46fsda
fdsawe f s/da
f   asf/  sf/ as
   dfsaf//awe g q/qw g/hq

转换后:

789789 456  4f asd4f5sa613
fsd a--fas--12-3vxz4 v64weg13
f  dsaz-xv--gas-dfw
fdsaf  e-aaf-46fsda
fdsawe f s-da
f   asf-  sf- as
   dfsaf--awe g q-qw g-hq
8.删除文件中所有的数字
:%s/[0-9]//g

初始:

789789 456  4f asd4f5sa613
fsd a--fas--12-3vxz4 v64weg13
f  dsaz-xv--gas-dfw
fdsaf  e-aaf-46fsda
fdsawe f s-da
f   asf-  sf- as
   dfsaf--awe g q-qw g-hq
   
删除后:

   f asdfsa 
fsd a--fas---vxz vweg
f  dsaz-xv--gas-dfw
fdsaf  e-aaf-fsda
fdsawe f s-da
f   asf-  sf- as
   dfsaf--awe g q-qw g-hq

9. vim其他模式

可视化模式:v
选中操作内容 y 复制 d删除

可视化块模式:ctrl+v

ctrl+v选中–>shift+i---->输入#----->连续按下两次ESC

取消多行注释ctrl+v选中—>x

多文件操作

在文件分别创建aa cc tt txt文件,并输入相关内容
打开文件是使用vim  aa.txt cc.txt tt.txt命令
在命令行中输入以下命令可以实现切换
:next  下一个文件
:prev  上一个文件
:last  最后一个
:first 第一个
ctrl+^
:wqa


vimdiff aa.txt cc.txt tt.txt
ctrl+w+w  切换文件
:wqa       退出
三个文件全部打开显示在屏幕上 带有颜色


三个文件全部打开显示在屏幕上 不带有颜色
横向排序
vim -O aa.txt cc.txt tt.txt

竖向排列
vim -o aa.txt cc.txt tt.txt 

格式转换
yum install unix2dos
unix2dos anaconda-ks.cfg 

# file命令 可判断文件的类型
[root@localhost ~]# file test
test: ASCII text

[root@localhost ~]# file a1 
a1: empty

[root@localhost ~]# file data 
data: data

[root@localhost ~]# mkdir test
[root@localhost ~]# file test/
test/: directory
[root@localhost ~]# 

6. 传文件使用

yum install lrzsz

rz 从windos到linux
sz 从linux到windows

注意:
当使用xshell进行连接的时候,如果出现vim下无法使用小键盘输入数字出现字母的时候,需要在xshell下的属性VT修改为普通模式。

三. 用户管理

1.用户管理

  1. 添加帐号

    useradd robin
    
    [root@localhost ~]# id robin
    uid=1000(robin) gid=1000(robin)=1000(robin)
    
    [root@localhost ~]# vim /etc/passwd
    robin:x:1000:1000:robin:/home/robin:/bin/bash
    
    # id 命令可以查看用户的uid gid和所属组
    
  2. 上述字段的含义

[root@localhost ~]# vim /etc/passwd
robin:x:1000:1000:robin:/home/robin:/bin/bash
第一段: 用户名
第二段: 密码占位符 去掉占位符可以实现免密登录
第三段: uid  范围(0-60000)
第四段: gid
第五段: 描述   可以没有
第六段: 家目录
第七段: shell  /bin/bash /sbin/nologin

注: /bin/false 和 /sbin/nologin的区别

/bin/false是最严格的禁止login选项,一切服务都不能用 而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务
如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。

  1. 创建用户
useradd -u 2000 abc1
useradd -u 2001 -g 2000 abc2
useradd -u 2002 -g 2000 -c 'test user' abc3
useradd -u 2003 -g 2000 -c 'test user' -d /mnt/abc4 abc4
useradd -u 2004 -g 2000 -c 'test user' -d /mnt/abc5 -s /bin/bash abc5
  1. 各字段的含义及范围
-u uid  	设置用户的uid
-g gid  	设置用户的gid
-c comment 	概述信息
-d home  	设置用户的家目录
-s shell  	指定shell种类

uid和gid的范围
uid 0             root         svip              
gid   0           root group   svip
uid   1-999       system user  系统用户        
gid   1-999       system group 系统组
uid   1000-60000  user         普通账号            
gid   1000-60000  user		   普通

2. 添加组

[root@localhost ~]# groupadd upup

组信息文件:
[root@localhost ~]# vim /etc/group
upup:x:2006:
  1. 各字段的含义
第一段: 组名
第二段: 组密码占位符号
第三段: gid
第四段: 用户列表
[root@localhost ftp]# groupadd -g 3000 uplooking

3. 练习1

添加组:  gid为5000  组名:haha
添加用户: uid为5000  gid为5000  描述:ceshi  家目录:/tmp下  shell:tcsh  hehe

[root@localhost ~]# groupadd -g 5000 haha
[root@localhost ~]# useradd -u 5000 -g 5000 -c 'ceshi' -d /tmp/ -s /bin/tcsh hehe
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@localhost ~]# useradd -u 5000 -g haha -c 'ceshi' -d /tmp/ -s /bin/tcsh hehe
useradd: user 'hehe' already exists
[root@localhost ~]# ls /tmp/

测试:
[root@localhost ~]# su - hehe
[hehe@localhost ~]$ pwd
/tmp

再创建一个管理员
[root@localhost ~]# useradd -o -u 0 admin

4. 密码管理

passwd
passwd robin

密码保存文件:/etc/shadow
robin:!!:17302:0:99999:7:::

第一列: 用户名
第二列: 密码(有密码状态,无密码状态,!!帐号锁定,* 该帐号永久不能登陆系统)
第三列: 密码的最后一次修改时间
第四列: 密码的最小时间(密码修改相隔时间)
		时间单位天 几天之内不允许改密码
第五列: 密码的最大时间(密码有效期)  99999表示永久不过期
第六列: 密码过期前警告时间
第七列: 密码过期后帐号过期
第八列: 帐号有效期
第九列: 保留列

非交互时修改密码
echo 123 | passwd --stdin robin

5. 修改组信息

groupmod
groupmod -g 3500 uplooking
groupmod -n newuplooking uplooking

6. 修改用户信息

usermod 
usermod -u 2500 jack
usermod -g upup jack
usermod -c 'test user' jack
usermod -s /bin/tcsh jack

7. 修改家目录

方法1:
usermod -d /tmp/jack jack
mv /home/jack/ /tmp/

方法2:
usermod -m 移动目录  -d 追加到后面的路径
usermod -m -d /home/jack jack

当使用自己追加的家目录时,需要提前创建好用户的家目录、然后在/etc/skel/.bash*目录下拷贝至家目录才能生效。

当全部操作完成后如若没有设置密码,则使用新创建的用户进行登录时会显示一个bash的界面。创建完密码后就可以正常的显示了。

8. 锁定帐号

usermod -L robin # 锁定
usermod -U robin # 解锁

9. 锁定密码

passwd -l robin  # 锁定
passwd -S robin  # 解锁
passwd -u robin  # 解锁

10. 练习2

创建两个帐号  tom  jerry  密码都设置为123
[root@localhost ~]# useradd tom 
[root@localhost ~]# useradd jerry
[root@localhost ~]# for i in tom jerry;do echo 123|passwd --stdin $i;done
Changing password for user tom.
passwd: all authentication tokens updated successfully.
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# 

锁定tom的帐号
锁定jerry的密码
[root@localhost ~]# usermod -L tom
usermod: invalid user ID 'tom'
[root@localhost ~]# passwd -l jerry 
Locking password for user jerry.
passwd: Success
[root@localhost ~]# passwd -S jerry 
jerry LK 2020-10-16 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u jerry 
Unlocking password for user jerry.
passwd: Success
[root@localhost ~]# 


登陆tom和jerry  查看返回信息是否相同?

查看shadow找到tom和jerry密码位有什么不同?
!  锁定帐号
!! 锁定密码

11. 删除组:

groupdel uplooking

12. 删除用户:

userdel -r king  
-r 连同家目录一起删除

13. 附加组:

附加组用于权限匹配
主组:
主组用于确定用户创建的文件所属组
usermod -a -G upup robin

组密码:
groupadd yw
groupadd kf
useradd wg
usermod -a -G yw,kf  wg
groupadd boss
gpasswd boss
su - wg
sg boss

配置文件:
用于修改UID和gid的默认范围
/etc/login.defs (uid,gid范围)

可用于修改用户默认的shell路径
/etc/default/useradd
HOME=/home
SHELL=/bin/bash
SKEL=/etc/skel   (环境变量范本目录)





============================================================================================================
GROUP=100  如果useradd没有指定组,并且/etc/login.defs中的USERGROUPS_ENAB为no或者useradd使用了-N选项时,此时该参数生效。创建用户时使用此组ID。
HOME=/home  主目录放在什么目录下
INACTIVE=-1  帐号是否过期
EXPIRE=  帐号终止日期
SHELL=/bin/bash  默认使用哪个shell
SKEL=/etc/skel  模板目录,骨架目录
CREATE_MAIL_SPOOL=yes  是否创建邮箱文件

14. 手动管理帐号:

1.groupadd  redhat

vim /etc/group
redhat:x:9999:

2.useradd  -g redhat  rose

vim /etc/passwd

rose:x:9999:9999:test user:/home/rose:/bin/bash
mkdir /home/rose
cp /etc/skel/.bash* /home/rose/  
# 使用修改配置文件创建的用户需要在 /etc/passwd /etc/group添加完信息后,创建用户的家目录,并从默认路径下/etc/skel/.bash* 所有的相关配置copy一份到其家目录下。

3.passwd rose

vim /etc/shadow
rose::17303:0:99999:7:::

echo 123 | passwd --stdin rose



example:


[root@localhost ~]# vim /etc/group
[root@localhost ~]# tail -3 /etc/group
tom:x:2005:
jerry:x:2006:
redhat:x:3000:
[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# tail -3 /etc/passwd
tom:x:2005:2005::/home/tom:/bin/bash
jerry:x:2006:2006::/home/jerry:/bin/bash
centos1:x:3000:3000::/home/centos1:/bin/bash
[root@localhost ~]# su - centos1
su: warning: cannot change directory to /home/centos1: No such file or directory
-bash-4.2$ logout
[root@localhost ~]# mkdir /home/centos1
[root@localhost ~]# cp /etc/skel/.bash* /home/centos1
[root@localhost ~]# su - centos1
Last login: Fri Oct 16 13:52:49 CST 2020 on pts/0
[centos1@localhost ~]$ logout
[root@localhost ~]# echo 123|passwd --stdin centos1
Changing password for user centos1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - centos1
Last login: Fri Oct 16 13:53:32 CST 2020 on pts/0
[centos1@localhost ~]$ 

15. 修改root密码

1.重起,进入选择界面时按下e
2.linux16最后一行 删除至ro后 输入rd.break
3.mount -o remount,rw /sysroot
4.chroot /sysroot
5.echo 密码|passwd --stdin root
6.touch /.autorelabel
7.sync
8.连续按下两次ctrl+D进入系统

16. 练习3

1.普通用户uid范围是多少?gid范围是多少?
	
	系统 1-999
	普通 1000-60000
	
2.如何添加一个账号tom?

[root@localhost ~]# useradd tom
[root@localhost ~]# ls -l /home/
total 0
drwx------. 3 tom tom 78 Oct 16 15:07 tom
[root@localhost ~]# 

3.说出一下添加账号时参数的含义?-u -g -c -d -s

-u 指定用户的uid
-g 指定用户的gid
-c 追加说明 概述信息
-d 指定用户的家目录
-s 指定shell的种类

4.如何添加一个组redhat?指定gid为3000?

[root@localhost ~]# groupadd redhat -g 3000
redhat:x:3000:

5.当passwd文件的第二列为空时登录系统是否需要密码?

[root@localhost ~]# su tom
[tom@localhost root]$ 
tom::1001:1001::/home/tom:/bin/bash
不需要

6.写出保存用户信息,组信息,密码信息的文件分别是什么?

[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# vim /etc/shadow
[root@localhost ~]# vim /etc/group
[root@localhost ~]# 

7.修改用户信息的指令是什么?修改组信息的指令是什么?

usermod 
groupmod

8.删除组upup时失败,可能是什么原因造成的?写出你的想法

有其他用户
组不存在

9.锁定账号robin应该怎么操作?锁定密码应该怎么操作?

usermod -L robin
锁定密码终端不能进行登录
passwd -l robin 

10.手动添加组upup
    手动添加账号ben,属于upup组
    使账号ben可以登上系统

[root@localhost ~]# vim /etc/group
upup:x:4000:
[root@localhost ~]# vim /etc/passwd
ben:x:4000:4000::/home/ben:/bin/bash
[root@localhost ~]# su ben
bash-4.2$ exit
[root@localhost ~]# cp /etc/skel/.bash* /home/ben
cp: target ‘/home/ben’ is not a directory
[root@localhost ~]# mkdir /home/ben
[root@localhost ~]# cp /etc/skel/.bash* /home/ben
[root@localhost ~]# echo 111|passwd --stdin ben 
Changing password for user ben.
passwd: all authentication tokens updated successfully.

[root@localhost ~]# vim /etc/shadow
ben:$6$zZby/AIc$LugevMF8ysRn4HKqmS.tkEqthEFfEZm7OQbOJlzn85.LuhXCgnXK664O6mgkmcYoxBGEo2skl/Q41Mj.zuorz/:18551::::::

[root@localhost ~]# su - ben
Last login: Fri Oct 16 15:17:02 CST 2020 on pts/0
[ben@localhost ~]$ 


11.修改uid默认范围应该修改哪个文件?

[ben@localhost ~]$ vim /etc/login.defs

12.修改默认家目录,默认shell应该修改哪个文件?

[root@localhost ~]# vim /etc/default/useradd 

13.修改用户的附加组应该怎么操作?如: 用户king 主组king 附加组king 添加新的附加组blue

[root@localhost ~]# useradd king 
[root@localhost ~]# id king 
uid=4001(king) gid=4001(king) groups=4001(king)
[root@localhost ~]# tail -2 /etc/group
king:x:4001:
blue:x:4002:
[root@localhost ~]# usermod -a -G  blue  king 
[root@localhost ~]# id king 
uid=4001(king) gid=4001(king) groups=4001(king),4002(blue)


14.简述在root密码丢失时,修改root密码的过程

	1.重起,进入选择界面时按下e
	2.linux16最后一行 删除至ro后 输入rd.break
	3.mount -o remount,rw /sysroot
	4.chroot /sysroot
	5.echo 密码|passwd --stdin root
	6.touch /.autorelabel
	7.sync
	8.连续按下两次ctrl+D进入系统

四. 基本权限

1. 权限各字段的含义

[root@localhost ~]# touch aa.txt
[root@localhost ~]# ls -l aa.txt 
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt

2. 权限位:

rwx rwx rwx
拥有者 所属组 其他人
user group other
u g o
[root@localhost ~]# id zhangsan
uid=5001(zhangsan) gid=5001(zhangsan) groups=5001(zhangsan)


[root@localhost ~]# ll aa.txt 
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt


uid=0------>拥有者---------->所属组(附加组)---------->其他
            第一个三位        第二个三位              第三个三位


file:      
           r  -------->read     cat head tail  more.....
           w -------->write     vim  > >>  gedit
           x --------->exec    ./ 后者绝对路径执行


directory:
           r ------->read         ls   r-x 详细信息
           w  ----->touch rm      -wx 创建删除    rm -rf *  rwx
           x ------->cd  

3. 修改权限

以新创建的aa.txt为例:
创建完成的初始权限为;
[root@localhost ~]# ll aa.txt 
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt

赋予拥有者可执行权限
[root@localhost ~]# chmod u+x aa.txt 
[root@localhost ~]# ll aa.txt 
-rwxr--r--. 1 root root 0 Oct 14 19:07 aa.txt
赋予拥有者读写权限
[root@localhost ~]# chmod u+rw aa.txt 
[root@localhost ~]# ll aa.txt 
-rwxr--r--. 1 root root 0 Oct 14 19:07 aa.txt
赋予三组读写执行权限
[root@localhost ~]# chmod ugo+rwx aa.txt 
[root@localhost ~]# ll aa.txt 
-rwxrwxrwx. 1 root root 0 Oct 14 19:07 aa.txt
[root@localhost ~]# 

4. 练习1

1.创建文件/tmp/aa.txt
  要求:
       拥有者没权限
       所属组读写权限
       其他人执行权限
       
[root@localhost ~]# touch /tmp/aa.txt
[root@localhost ~]# ll /tmp/aa.txt 
-rw-r--r--. 1 root root 0 Oct 14 19:26 /tmp/aa.txt
[root@localhost ~]# chmod u-rw,g+w,o+x /tmp/aa.txt 
[root@localhost ~]# ll /tmp/aa.txt 
----rw-r-x. 1 root root 0 Oct 14 19:26 /tmp/aa.txt
[root@localhost ~]# 

2.创建目录/tmp/test
  要求:
       拥有者可以查看文件名
       所属组可以创建删除文件
       其他人无权限
chmod u-wx,g-r,g+w,o-rx /tmp/test/
chmod u=r,g=wx,o= /tmp/test

[root@localhost ~]# mkdir /tmp/test
[root@localhost ~]# chmod u-wx,g+w,o=-/tmp/test/
[root@localhost ~]# ls -ld  /tmp/test/
drwxr-x---. 2 root root 6 Oct 14 19:28 /tmp/test/
[root@localhost ~]# 

3.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx  问robin用户能不能删除?为什么?
  
不能被删除 目录权限显示的使 “目录内文件内容的”的操作权限,而不是文件目录的操作权限。
区别于文件权限和目录权限

4./tmp/test/        rwxr-xr-x
   /tmp/test/dir    rwxr-xr--
   /tmp/test/dir/aa/     rwxrwxrwx
   /tmp/test/dir/aa/tt.txt  rwxrwxrwx
    
 robin能不能删除 /tmp/test/dir/aa/tt.txt
  
查看以下目录或者文件权限:
/etc/passwd                 rw-r--r--       644
/etc/shadow                 ---------       000
/tmp                        rwxrwxrwt  		1777
/root                       r-xr-x---       550
/home/robin                 rwx------    	700
/                           r-xr-xr-x    	555
/etc                         rwxr-xr-x 	    755
root用户创建文件默认权限 		  rw-r--r--   	 644
root用户创建目录默认权限 	 	  rwxr-xr-x  	 755
普通用户创建文件默认权限 		 rw-rw-r--      664
普通用户创建目录默认权限  		 rwxrwxr-x   	775
 
数字表示权限:
    	r  --------  4
    	w --------   2
    	x  --------  1
rw  4+2  6
wx  2+1 3 
rwx 4+2+1 =7 

321 -wx-w---x
456 r--r-xrw-

5. 权限反掩码

0022

666-022=644
777-022=755

666-002=664
777-002=775

umask 0023
666-023=643
ll kk.txt 
-rw-r--r--. 1 root root 0 517 15:30 kk.txt

023
000 010  011
111 101  100   --取反

666 
110 110  110
111 101  100  
110 100  100
6     4     4

创建文件 642   umask=?
666
110 110 110

642
110 100 010

110 110 110
111 101 011  ----> 000 010 100 ---> 024
110 100 010
         
umask=0024


6. 时间

[root@localhost tmp]# hwclock -s     从硬件时间写到系统
[root@localhost tmp]# date
2017年 05月 17日 星期三 23:55:07 CST
[root@localhost tmp]# date -s '20170517 16:02:40'
2017年 05月 17日 星期三 16:02:40 CST
[root@localhost tmp]# date
2017年 05月 17日 星期三 16:02:41 CST
[root@localhost tmp]# hwclock -w   从系统写到硬件时间
[root@localhost tmp]# hwclock 
2017年05月17日 星期三 16时02分52秒  -0.211094 秒
[root@localhost tmp]# 



[root@localhost ~]# date +%Y/%m/%d
2020/10/23

[root@localhost ~]# date +"%Y/%m/%d %H:%M:%S"
2020/10/23 14:48:57

拥有者和所属组的修改:
/tmp/test.txt   rw-r--r--  robin root
robin robin --->  other

chown robin /tmp/test.txt
chgrp  upup /tmp/test.txt  chgrp修改组

chown .upup /tmp/test.txt
chown :upup /tmp/test.txt

chown robin.upup /tmp/test.txt
chown robin.upup /tmp/dir/

chown -R robin.upup /tmp/dir
chmod -R 777 /tmp/dir


7. 练习2


tmp目录下有目录test
test目录下有文件aa.txt
要求:
robin可以删除aa.txt文件,但是不能修改
zorro不可以删除aa.txt文件,但是可以修改

/tmp/test   robin  root  rwxr-xr-x
/tmp/test/aa.txt  zorro root rw-r--r--


8. 练习3

1.基本权限的操作对象有几个?分别是什么?

三个 
拥有者 所属组 其他

2.给文件拥有者添加rwx权限时,应该如何操作?

chmod u+rwx 文件路径

3.目录的拥有者读写权限, 所属组读权限,其他人无权限应该怎么操作?

chmod u=rw,g=r,o=- 文件路径

4.创建文件/tmp/aa.txt
  要求:
       拥有者没权限
       所属组读写权限
       其他人执行权限
       
[root@localhost test]# chmod u=-,g=rw,o=x aa.txt 
[root@localhost test]# ll
total 0
----rw---x. 1 root root 0 Oct 19 14:10 aa.txt

5.创建目录/tmp/test
  要求:
       拥有者可以查看文件名
       所属组可以创建删除文件
       其他人无权限

[root@localhost test]# chmod u=r,g=rw,o=- /tmp/test/
[root@localhost test]# ll -d /tmp/test/
dr--rw----. 2 king root 20 Oct 19 14:10 /tmp/test/.

6.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx  问robin用户能不能删除?为什么?
  
  不一定权限
  文件权限和目录权限的区别
  
7. /tmp/test/        rwxr-xr-x
   /tmp/test/dir    rwxr-xr--
   /tmp/test/dir/aa/     rwxrwxrwx
   /tmp/test/dir/aa/tt.txt  rwxrwxrwx
    
   robin能不能删除 /tmp/test/dir/aa/tt.txt? 为什么?
   
   不能删除 没有权限
   
8.写出如下数字对应的权限
   123  --x-w--wx
   456  r--r-xrw-
   735  rwx-wxr-x
   
9.写出如下权限对应的数字
  r---wx--x 431
  rwxr---w- 742
  r-xrw-r-- 564
  
10.按要求完成权限配置
  有文件test.txt 要求:
  boss不可读写,所有员工都可以读写
  
  
11.在/root目录下创建文件abc.txt(root目录拥有者不可以改动)
     同时完成以下要求:
     robin用户可以读写abc.txt 但是不可以删除
     zorro用户只可以读abc.txt,但是不可以删除
     king用户不可以读写abc.txt,但是可以删除
     
    /root   root  root  r-xrwxr-x     
    /root/abc.txt  robin zorro  rw-r-----
    
    robin
    zorro
    king     
[root@localhost ~]# chown robin /root/abc.txt 
[root@localhost ~]# chown :zorro /root/abc.txt 
[root@localhost ~]# chmod o=- /root/abc.txt 
[root@localhost ~]# ll
-rw-r-----. 1 robin zorro    0 Oct 19 14:24 abc.txt


[root@localhost ~]# chmod u=rx,g=rwx,o=rx /root
[root@localhost ~]# usermod -a -G root king 
     
        
12.附加题 
     要求robin用户创建的默认文件权限都是624,求umask值是多少?
     
     042
     

五. 高级权限

1. SUID (set user id )

作用:任何用户在运行拥有suid权限的命令(二进制可执行文件)时,都以该命令拥有者(root)的身份执行
作用位置:user
作用对象:文件(二进制可执行文件)
chmod u+s 命令

1. 实验
1.添加用户robin

su - robin
cat /etc/shadow  能不能看到内容?

不能看见,没有权限

2.使用suid权限,怎么看到?

chmod u+s /bin/cat

2. SGID(set group id )

作用:任何用户在拥有sgid权限的目录下,创建的文件都要继承目录的组
作用位置:group
作用对象:目录
chmod g+s directory

1. 实验
1.添加帐号robin  robin组
创建目录/tmp/test  权限设置为777   目录拥有者root  所属组root
robin帐号在/tmp/test下创建  aa.txt  问:所属组是谁?

drwxrwxrwx. 2 root root 6 Oct 19 11:46 /tmp/test/
[root@localhost home]# cd /tmp/test/
[root@localhost test]# ls -l
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt

robin

2.给/tmp/test目录添加sgid权限
robin帐号在/tmp/test下创建  cc.txt  问:所属组是谁?

[root@localhost test]# chmod g+s /tmp/test/
[root@localhost test]# ls -ld /tmp/test/
drwxrwsrwx. 2 root root 20 Oct 19 11:48 /tmp/test/
[robin@localhost ~]$ touch /tmp/test/cc.txt
[robin@localhost ~]$ ls -l  /tmp/test/cc.txt 
-rw-rw-r--. 1 robin root 0 Oct 19 11:49 /tmp/test/cc.txt

root

3.添加组upup
修改/tmp/test目录的所属组为upup 
chown .upup /tmp/test
robin帐号在/tmp/test下创建  tt.txt  问:所属组是谁?  
cc.txt所属组会不会变化?

[root@localhost test]# chown  :upup /tmp/test/
[root@localhost test]# ls -ld /tmp/test/
drwxrwsrwx. 2 root upup 34 Oct 19 11:49 /tmp/test/
[robin@localhost ~]$ touch /tmp/test/tt.txt
[robin@localhost ~]$ ls -l  /tmp/test/tt.txt 
-rw-rw-r--. 1 robin upup 0 Oct 19 11:52 /tmp/test/tt.txt
[robin@localhost ~]$ ls -l  /tmp/test 
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt
-rw-rw-r--. 1 robin root  0 Oct 19 11:49 cc.txt
-rw-rw-r--. 1 robin upup  0 Oct 19 11:52 tt.txt

upup    没变

root帐号在/tmp/test下创建 abc.txt 所属组是谁? 
root受不受sgid限制?

[root@localhost test]# touch abc.txt
[root@localhost test]# ls 
aa.txt  abc.txt  cc.txt  tt.txt
[root@localhost test]# ls -l
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt
-rw-r--r--. 1 root  upup  0 Oct 19 11:54 abc.txt
-rw-rw-r--. 1 robin root  0 Oct 19 11:49 cc.txt
-rw-rw-r--. 1 robin upup  0 Oct 19 11:52 tt.txt

upup  受限

3. sticky(冒险位,粘贴位)

作用:任何用户在拥有t权限目录下创建的文件,只能自己删除,其他人无权删除
作用位置:other
作用对象:目录
chmod o+t directory

1. 实验
1.添加帐号robin 和  zorro
创建目录/tmp/test 权限设置为 777
robin在/tmp/test/目录下创建文件 aa.txt   zorro帐号能不能删除aa.txt?

[root@localhost test]# ll -d /tmp/test
drwxr-xr-x. 2 root root 6 Oct 19 13:45 /tmp/test
[root@localhost test]# chmod 777 /tmp/test/
[root@localhost test]# ll -d /tmp/test
drwxrwxrwx. 2 root root 6 Oct 19 13:45 /tmp/test

[robin@localhost ~]$ cd /tmp/test/
[robin@localhost test]$ touch aa.txt
[robin@localhost test]$ ll
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 13:47 aa.txt

[zorro@localhost ~]$ cd /tmp/test/
[zorro@localhost test]$ ll
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 13:47 aa.txt
[zorro@localhost test]$ rm -rf aa.txt  
[zorro@localhost test]$ ll
total 0

可以

2.在/tmp/test目录上添加t权限
robin在/tmp/test/目录下创建文件 aa.txt   zorro帐号能不能删除aa.txt?

[root@localhost test]# chmod o+t /tmp/test/
[root@localhost test]# ll -d /tmp/test
drwxrwxrwt. 2 root root 6 Oct 19 13:48 /tmp/test
[root@localhost test]# 

[robin@localhost test]$ mkdir aa.txt
[robin@localhost test]$ ll
total 0
drwxrwxr-x. 2 robin robin 6 Oct 19 13:49 aa.txt

[zorro@localhost test]$ rm -rf aa.txt 
rm: cannot remove ‘aa.txt’: Operation not permitted

不能 t权限

3.root帐号能不能删除/tmp/test/目录下的文件?

可以  root不受约束

4.添加帐号king  设置/tmp/test目录的拥有者为king 
chown king /tmp/test  king帐号能不能删除/tmp/test/目录下的文件?

[root@localhost test]# chown king /tmp/test/
[root@localhost test]# ll -d /tmp/test/
drwxrwxrwt. 2 king root 6 Oct 19 13:51 /tmp/test/

[king@localhost test]$ rm -rf aa.txt/
[king@localhost test]$ ll
total 0

可以 

4. 高级权限数字表示

高级权限数字表示
suid ----------->  4
sgid ----------->  2
stickey---------> 1

/tmp    1777

4777
2777
1777
3777

5. 高级权限大小写区分是否具有x权限


[root@localhost tmp]# chmod u+s aa.txt 
[root@localhost tmp]# ll aa.txt 
-rwSr--r-- 1 root root 0 518 11:51 aa.txt
[root@localhost tmp]# chmod +x aa.txt 
[root@localhost tmp]# ll aa.txt 
-rwsr-xr-x 1 root root 0 518 11:51 aa.txt

[root@localhost tmp]# ll -d test/
drwxrwsrwt 2 root root 6 518 11:52 test/
[root@localhost tmp]# chmod g-x,o-x test/
[root@localhost tmp]# ll -d test/
drwxrwSrwT 2 root root 6 518 11:52 test/


6. 练习

1.列举高级权限都有哪些?并解释每个权限的功能

SUID 任何用户在运行拥有SUID的权限命令(二进制可执行文件),都以该命令的拥有者身份执行
SGID 任何用户在拥有SGID权限的目录下,创建的文件都要继承目录的组
Sticky 任何用户在拥有t权限目录下创建的文件,都只能自己删除,其他无权删除。

2.哪个高级权限可以限制root账号?
3.分别写出每个高级权限的数字表示方法

suid ----------->  4
sgid ----------->  2
stickey--------->  1

4.写出以下数字表示的权限

1777 
2777 
4777 
3777 

5.当高级权限位显示为大写时表示什么含义?

高级权限大小写区分是否具有x权限

六. 软件包管理

1. rpm包安装

mount -t iso9660 /var/ftp/CentOS7-2.iso /mnt
mount /var/ftp/CentOS7-2.iso /mnt
umount /mnt
mount /var/ftp/CentOS7-2.iso /mnt
umount /var/ftp/CentOS7-2.iso 
umount -l  /mnt  强制卸载
mount 查看挂在信息

nmap-6.40-7.el7.x86_64.rpm
包名-版本.系统版本.平台.rpm

1.安装软件
rpm -ivh /mnt/Packages/nmap-6.40-7.el7.x86_64.rpm
2. 安装的参数含义
-i 安装
-v 显示过程
-h 显示%

查询是否安装
rpm -q nmap

查询包的信息
rpm -qi nmap

查询安装位置
rpm -ql nmap

查看配置文件
rpm -qc nmap

查看帮助文档的位置
rpm -qd nmap

查询文件对应的软件包
rpm -qf /etc/man_db.conf
rpm -qf `which cat`

查询和vim相关软件
rpm -qa  | grep vim

卸载
rpm -e nmap

查看未安装的软件
rpm -qpi httpd-2.4.6-40.el7.centos.x86_64.rpm 
rpm -qpl httpd-2.4.6-40.el7.centos.x86_64.rpm
3. 手动解决依赖关系
[root@localhost Packages]# rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm 
警告:httpd-2.4.6-40.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
	/etc/mime.types 被 httpd-2.4.6-40.el7.centos.x86_64 需要
	httpd-tools = 2.4.6-40.el7.centos 被 httpd-2.4.6-40.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-40.el7.centos.x86_64.rpm 
警告:httpd-tools-2.4.6-40.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:httpd-tools-2.4.6-40.el7.centos                                    ( 30%################################# [100%]

[root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm

[root@localhost Packages]# rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm 

强制安装
rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm --force

不检查依赖关系卸载
rpm -e httpd-tools --nodeps

查看提供文件的包
[root@localhost test]# yum provides /etc/mime.types
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
mailcap-2.1.41-2.el7.noarch : Helper application and MIME type associations
                            : for file types
源    :CentOS7-2
匹配来源:
文件名    :/etc/mime.types
4. yum库的使用
1. yum库配置文件目录
/etc/yum.repos.d/
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir old_repo
[root@localhost yum.repos.d]# mv * old-repo/
[root@localhost yum.repos.d]# touch local.repo
2.配置
[root@localhost conf]# mount -t iso9660 /dev/cdrom /mnt
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/local.repo
[local_iso]
name=local_iso
baseurl=file:///mnt
enabled=1
gpgcheck=0
3.测试
[root@localhost yum.repos.d]# yum clean all 清空yum缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: local_iso
Cleaning up everything
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
local_iso                                             | 3.6 kB     00:00     
(1/4): CentOS7.2/filelists_db                           | 2.9 MB   00:00     
(2/4): CentOS7.2/group_gz                               | 155 kB   00:00     
(3/4): CentOS7.2/primary_db                             | 2.8 MB   00:00     
(4/4): CentOS7.2/other_db                               | 1.2 MB   00:00     
Determining fastest mirrors
4. 元数据缓存已建立
[root@localhost yum.repos.d]# 

yum install httpd-devel   安装
yum install -y httpd-devel
yum reinstall httpd-devel
yum provides /etc/mime.types
yum remove httpd

yum group list
yum group install "开发工具"

yum可支持多库安装
5. 同一个配置文件中配置多库
[root@localhost yum.repos.d]# cat iso.repo 
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0

[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0
6. 多个配置文件配置多库
[root@localhost yum.repos.d]# ls
iso.repo  test  test.repo
[root@localhost yum.repos.d]# cat iso.repo 
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0

[root@localhost yum.repos.d]# cat test.repo
[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0

配置yum库时如果出现报错信息,可能是没有手动创建repo

需要使用createrepo命令创建依赖关系

[root@localhost yum.repos.d]# createrepo /cluster/
Spawning worker 0 with 170 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
7. 手动建立yum库
[root@localhost ~]# 
[root@localhost ~]# mkdir /cluster
[root@localhost ~]# cp /mnt/Packages/* /cluster/
^C
[root@localhost ~]# cd /cluster/
[root@localhost cluster]# ls
[root@localhost cluster]# 
[root@localhost cluster]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
local.repo  old_repo
[root@localhost yum.repos.d]# vim local.repo 
[root@localhost yum.repos.d]# createrepo /cluster/
Spawning worker 0 with 170 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: cluster local_iso
Cleaning up list of fastest mirrors
Other repos take up 630 M of disk space (use --verbose for details)
[root@localhost yum.repos.d]# yum makecache 
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
cluster                                                                                   | 2.9 kB  00:00:00     
local_iso                                                                                 | 3.6 kB  00:00:00     
(1/7): cluster/filelists_db                                                               | 102 kB  00:00:00     
(2/7): cluster/other_db                                                                   |  62 kB  00:00:00     
(3/7): cluster/primary_db                                                                 | 106 kB  00:00:00     
(4/7): local_iso/group_gz                                                                 | 165 kB  00:00:00     
(5/7): local_iso/primary_db                                                               | 3.2 MB  00:00:00     
(6/7): local_iso/filelists_db                                                             | 3.3 MB  00:00:00     
(7/7): local_iso/other_db                                                                 | 1.3 MB  00:00:00     
Metadata Cache Created
[root@localhost yum.repos.d]# yum repolist 
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                                              repo name                                             status
cluster                                              cluster                                                 170
local_iso                                            local iso                                             4,067
repolist: 4,237
[root@localhost yum.repos.d]# 

5. 练习

1.写出挂载光盘或者镜像时的完整命令

mount -t iso9660 /dev/cdrom /mnt

2.解释以下安装软件时参数的功能
-ivh  i install 安装 v 显示过程 h 百分比
-q    查询是否安装
-qi   查询包的信息
-ql   查询安装位置
-qf   查询文件对应的软件包
-qa   查询相关软件
-qc   查询配置文件
-qd   查询帮助文档的位置
-e    卸载
3.写出配置光盘或者镜像作为安装源的yum库配置过程

百度搜索华为镜像或者是阿里镜像 选择相对应的系统和版本,复制wget的命令 在自己的系统中运行,然后清空缓存 重新计算缓存

4.解释以下yum的参数分别代表什么含义

install   安装
reinstall 覆盖安装
provides  
remove    移除删除
grouplist 
groupinstall

5.手动建库时需要哪个命令支持?


createrepo 创建数据目录信息

2. 压缩打包

1. 压缩
[root@localhost tmp]# dd if=/dev/zero of=/tmp/data bs=1M count=200
# if表示in file 
# of表示out file

du命令 可以查看文件的信息大小
du /tmp/data.gz 
du -sh /etc/

gzip  			# 压缩后源文件不存在
gzip data 		# 压缩
gunzip data.gz  # 解压

bzip2  				# 压缩后源文件不存在 
bzip2 data			# 压缩
bunzip2 data.bz2 	# 解压缩

[root@localhost ~]# touch /tmp/data/data
[root@localhost ~]# dd if=/dev/zero of=/tmp/data/data  bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 4.46865 s, 46.9 MB/s
[root@localhost ~]# ls -lh /tmp/data/data 
-rw-r--r--. 1 root root 200M Oct 20 13:51 /tmp/data/data
[root@localhost ~]# cd /tmp/data/
[root@localhost data]# ll
total 204800
-rw-r--r--. 1 root root 209715200 Oct 20 13:51 data

[root@localhost data]# gzip data 
	.
[root@localhost data]# ls -lh
total 200K
-rw-r--r--. 1 root root 199K Oct 20 13:51 data.gz
[root@localhost data]# gunzip data.gz 
[root@localhost data]# ls -lh
total 200M
-rw-r--r--. 1 root root 200M Oct 20 13:51 data

[root@localhost data]# bzip2 data 
[root@localhost data]# ls -lh
total 4.0K
-rw-r--r--. 1 root root 177 Oct 20 13:51 data.bz2
[root@localhost data]# bunzip2 data.bz2 
[root@localhost data]# ls -lh
total 200M
-rw-r--r--. 1 root root 200M Oct 20 13:51 data

事实证明bzip的压缩效率更好一些
2. 打包

1.可以见琐碎文件,打包成一个文件.方便管理
2.可以提升传输速度

tar

c 创建 v 显示过程 f 文件

打包
tar -cvf boot.tar /boot/

查看
tar -tvf boot.tar 

追加打包
tar -rvf boot.tar /tmp/data

解包
tar -xvf boot.tar

指定包的存储路径
tar -cvf /home/boot.tar /boot/


解包指定路径
tar -xvf boot.tar -C /home/


压缩打包:
tar -zcvf /tmp/boot.tar.gz /boot/
查看
tar -ztvf /tmp/boot.tar.gz 
解压缩包
tar -zxvf /tmp/boot.tar.gz -C /home/


压缩打包:
tar -jcvf /tmp/boot.tar.bzip2 /boot/
查看
tar -jtvf /tmp/boot.tar.bzip2 
解压缩包
tar -jxvf /tmp/boot.tar.bzip2 -C /home/

test.tgz  test.tbz

3. 练习

1.压缩命令有哪些?分别对应的扩展名是什么?

gzip --------------> .gz
bzip2 ------------>  .bz

2.使用tar命令打包时的这些参数分别什么含义

   -c  -v  -f  -t  -r  -x
-c 创建新的归档
-v 显示过程
-f 文件
-t 列出归档文件的内容
-r 将文件追加至存档的末尾
-x 从文档中提取文件

3.指定解包目录用什么参数?
zcvf  -C
jcvf  -C
4.写出将/boot 打包使用gzip 压缩,并将压缩包放在/tmp下的完整命令(包的名字为test.tar.gz)

tar -czvf /tmp//test.tar,gz -C /boot

5.将/tmp/test.tar.gz解压缩到/opt下

tar -xzvf /tmp/test.tar.gz -C /opt

3. 源码包安装

1. 解压源码包
tar -xvf lftp-4.7.7.tar.gz -C /usr/local/src/
2. 安装前配置和检测
[root@localhost lftp-4.7.7]# ./configure --prefix=/usr/local/lftp
3. 编译:
[root@localhost lftp-4.7.7]# make
编译安装:
[root@localhost lftp-4.7.7]# make install
清除编译痕迹
[root@localhost lftp-4.7.7]# make clean


报错:
.......c
解决:
yum -y install gcc gcc-c++

报错:
configure: error: No terminfo, termcap or curses library found. Install ncurses-devel

解决
yum install termcap ncurses-devel

报错:
configure: error: cannot find readline library, install readline-devel package

解决
yum install readline-devel

报错:
configure: error: Package requirements (gnutls >= 1.0.0) were not met:
解决:
yum install gnutls-devel


5. 测试
rpm -e lftp

[root@localhost ~]# /usr/local/lftp/bin/lftp 10.10.11.250
lftp 172.16.110.1:/> get biji.txt      下载文件
lftp 172.16.110.1:/> mirror video      下载目录

[root@localhost /]# /usr/local/lftp/bin/lftp 172.16.110.1
lftp 172.16.110.1:~> lcd /root/         lcd切换目录
lcd 成功, 本地目录=/root
lftp 172.16.110.1:~> lcd /tmp
lcd 成功, 本地目录=/tmp
lftp 172.16.110.1:~> 

lftp 172.16.110.1:/> mirror video/ -O /tmp/   指定路径下载
6. 修改环境配置文件
[root@localhost /]# vim /etc/bashrc 
PATH=$PATH:/usr/local/lftp/bin
export PATH
7. 卸载
rm -rf /usr/local/lftp

4. 其他类型软件包

1. 二进制bin包:
[root@localhost software]# ./RealPlayer\®\;\ 11\ for\ Linux\ RealPlayer11GOLD.bin

[root@localhost software]# yum install glibc-2.17-157.el7_3.1.i686

[root@localhost software]# yum remove libstdc++-4.8.5-4.el7.x86_64

[root@localhost software]# yum install libstdc++-4.8.5-11.el7.i686

[root@localhost software]# realplay
2. 解决运行前需要的软件包:
[root@localhost software]# yum install libgdk-x11-2.0.so.0
[root@localhost software]# yum install gtk2-2.24.28-8.el7.i686

[root@localhost ~]# rpm -ivh pangox-compat-0.0.2-2.el7.i686.rpm

[root@localhost software]# yum install libcanberra-gtk2-0.30-5.el7.i686


3. 半源码半rpm
[root@localhost ~]# rm -rf /usr/local/lftp/
lftp-3.5.1-2.fc6.src.rpm

安装:
[root@localhost software]# rpm -ivh lftp-3.5.1-2.fc6.src.rpm
生成:
[root@localhost ~]# ls -d /root/rpmbuild/

SOURCES  源代码和补丁
SPECS/lftp.spec  制作rpm包的配置文件

编译成rpm包
[root@localhost rpmbuild]# rpmbuild -bb /root/rpmbuild/SPECS/lftp.spec 

[root@localhost rpmbuild]# ls /root/rpmbuild/RPMS/x86_64/lftp-*
/root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/lftp-debuginfo-3.5.1-2.el7.centos.x86_64.rpm

[root@localhost rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm

[root@localhost rpmbuild]# yum install perl-String-CRC32
[root@localhost ftp]# rpm -ivh /var/ftp/perl-String-CRC32-1.4-19.el7.x86_64.rpm

[root@localhost rpmbuild]# yum install perl-Digest-MD5

七.进程管理

1. 守护进程

[root@localhost ~]# ps
   PID TTY          TIME CMD
  2857 pts/0    00:00:00 bash
  3753 pts/0    00:00:00 ps

PID 进程编号
TTY 占用的终端
TIME 占用CPU的时间
CMD 执行命令

ps
-e 系统中所有的进程

-f 详细信息

[root@localhost ~]# ps -ef | head
UID         PID   PPID  C STIME TTY          TIME CMD

UID 进程拥有者
PID 进程编号
PPID 父进程
C 占用cpu的百分比
STIME  进程启动时间
TTY  在那个终端上运行的
TIME  占用CPU的时间
CMD 执行命令

BSD风格
ps
a   所有在终端运行进程
u   详细信息 长格式显示
x   所有进程
[root@localhost ~]# ps aux | head
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

USER 	进程拥有者
PID  	进程编号
%CPU  	占用CPU的百分比
%MEM  	占用物理内存的百分比
VSZ 	预设内存(虚拟内存)
RSS 	真实内存
TTY 	运行终端
STAT 	进程状态
START 	进程启动时间
TIME  	占用CPU时间
COMMAND 进程名称

2. top 动态查看进程信息

此命令占用资源进程比较多

top - 14:20:12 up 42 min,  4 users,  load average: 0.30, 0.27, 0.25
      当前系统时间 运行了多久 登录用户    CPU平均负载
Tasks: 419 total,   2 running, 417 sleeping,   0 stopped,   0 zombie
进程总数             运行进程     417个休眠           停止         僵尸 
%Cpu(s):  9.8 us,  3.0 sy,  0.0 ni, 83.5 id,  3.5 wa,  0.0 hi,  0.1 si,  0.0 st
           用户态    内核泰   调整nice   空闲    等待io     硬中断  软中断   虚拟化偷取
KiB Mem :  4031780 total,  2625064 free,   580228 used,   826488 buff/cache
KiB Swap:  1023996 total,  1023996 free,        0 used.  3210724 avail Mem 

3. 杀进程

kill -15 4302
kill -9 4349	强制杀死进程
pkill httpd     一直输入不显示信息
killall httpd   杀死进程后再次输入命令会显示no process found
xkill           图形化杀进程

4. 前后台切换

[root@localhost ~]# yum install xclock

前台
[root@localhost ~]# xclock  -update 1
后台
[root@localhost ~]# xclock  -update 1 &
脱离终端运行
[root@localhost ~]# nohup xclock  -update 1 &

[root@localhost ~]# xclock  -update 1
ctrl+z
[root@localhost ~]# jobs
[1]+  已停止               xclock -update 1
[root@localhost ~]# bg 1 
[root@localhost ~]# fg 1

5. 进程状态

PROCESS STATE CODES
D    uninterruptible sleep (usually IO)
      不可终端休眠状态(通常IO)
R    running or runnable (on run queue)
      运行状态 
S    interruptible sleep (waiting for an event to complete)
      可中断的休眠状态
T    stopped by job control signal
      切换后台
t    stopped by debugger during the tracing   
W    paging (not valid since the 2.6.xx kernel)
X    dead (should never be seen)
Z    defunct ("zombie") process, terminated but not reaped by its parent

 <    high-priority (not nice to other users)
       高优先级
 N    low-priority (nice to other users)
       低优先级
 L    has pages locked into memory (for real-time and custom IO)
 s    is a session leader
 l    is multi-threaded (using CLONE_THREAD, like NPTL  pthreads do)

is in the foreground process group

6. nice调整

nice范围 -20~19
[root@localhost ~]# nice -n -20 xclock -update 1
[root@localhost ~]# renice 15 -p 5858


proc目录

cat /proc/cpuinfo
lm   ---> 64位系统
vmx|svm  ----> 虚拟化




7. 练习

1.什么是守护进程?

是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

2.ps -ef  解释每个字段的含义

-e 系统中的所有进程
-f 详细信息

3.ps aux解释每个字段的含义

-a 所有在终端运行的进程
-u 详细信息
-x 所有进程

4.top每个字段的含义

top - 14:20:12 up 42 min,  4 users,  load average: 0.30, 0.27, 0.25
当前系统时间        运行了多久   登录用户   CPU平均负载
Tasks: 419 total,   2 running, 417 sleeping,   0 stopped,   0 zombie
      进程总数          运行进程  417个休眠        停止          僵尸 
%Cpu(s):  9.8 us,  3.0 sy,  0.0 ni, 83.5 id,  3.5 wa,  0.0 hi,  0.1 si,  0.0 st
          用户态    内核泰   调整nice   空闲      等待io   硬中断     软中断   虚拟化偷取
KiB Mem :  4031780 total,  2625064 free,   580228 used,   826488 buff/cache
KiB Swap:  1023996 total,  1023996 free,        0 used.  3210724 avail Mem 

PID USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEN
TIME+
COMMAND

5.解释前后台切换时这些指令的功能
ctrl+z  停止
jobs    查看运行
bg      切换后台
fg      切换前台
kill %1   杀死进程
6.解释以下字符代表什么状态?
D  不可终端休眠状态
R  运行状态
S  可中断的休眠状态
T  切换后台
t  在跟踪期间被调试停止
W 
X  死亡(不被看见)
Z  不存在(“僵尸”)进程,终止但未被其父进程获取
<   高优先级
N   低优先级
L   将页面锁定到内存中(用于实时和自定义IO) 
s    
l    
+   
7.nice值得范围是多少?启动进程时如何定义nice值?如何重置nice值?

nice的范围-20 ~ 19
nice -n 
renice 

八. 高级命令

1. 高级命令

1. wc
-l  统计行数
-c 统计字符
-w 统计单词数(连续的字符串)
2. rev 左右颠倒
[root@localhost ~]# cat -n /etc/passwd | head -20  |tail -2 |rev
3. tac 上下颠倒
[root@localhost ~]# cat -n /etc/passwd | head -20  |tail -2 | tac
4. cut
[root@localhost ~]# cut -d: -f 1 /etc/passwd
[root@localhost ~]# head /etc/passwd | cut -d: -f 1-5
[root@localhost ~]# head /etc/passwd | cut -d: -f 1,5
-d 分割符
-f  取字段
-c 取字符
[root@localhost ~]# head /etc/passwd | cut -c 10   第10个
[root@localhost ~]# head /etc/passwd | cut -c 1-10  第1个到第10个
[root@localhost ~]# head /etc/passwd | cut -c 1,10  第1个和第10个
5. grep
[root@localhost ~]# grep 'root' /etc/passwd 含有root的行
[root@localhost ~]# cat -n /etc/passwd | grep 'root'
[root@localhost ~]# grep -n 'root' /etc/passwd  显示行号
[root@localhost ~]# grep -v 'root' /etc/passwd  取反
[root@localhost ~]# grep ^'root' /etc/passwd   ^以root开头的行
[root@localhost ~]# grep 'halt'$ /etc/passwd   $以halt结尾的行
[root@localhost ~]# grep -i a /etc/passwd    忽略大小写
[root@localhost ~]# grep -A 3 halt /etc/passwd 向后显示3行
[root@localhost ~]# grep -B 3 halt /etc/passwd  向前显示3行
[root@localhost ~]# grep -C 3 halt /etc/passwd  显示前后三行
[root@localhost ~]# grep -x root /etc/passwd  完全匹配root

6. stat
[root@localhost ~]# stat aa.txt 
  文件:"aa.txt"
  大小:4         	块:8          IO 块:4096   普通文件
设备:802h/2050d	Inode:77530278    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-
7. sort
[root@localhost ~]# sort aa.txt   默认按首字符排序
[root@localhost ~]# sort -n aa.txt  按整个数字排序
[root@localhost ~]# sort -n -u aa.txt   -u 去掉重复行
[root@localhost ~]# sort -n -u -r aa.txt  -r  逆序输出

[root@localhost ~]# sort -t: -k3 -n /etc/passwd   -t 分隔符 -k 排序列
8. uniq
[root@localhost ~]# uniq aa.txt 默认去掉连续重复行
[root@localhost ~]# uniq -d aa.txt  显示重复行
[root@localhost ~]# uniq -d -c aa.txt  -c 显示重复次数

2. 练习1

1.统计你当前系统中可登录用户的数量

[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# grep bash$ /etc/passwd | wc -l
7
[root@localhost ~]# grep -c bash$ /etc/passwd
7
[root@localhost ~]# cat /etc/passwd | cut -d: -f7 | sort |uniq -c
      7 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     39 /sbin/nologin
      1 /sbin/shutdown


2.[root@localhost ~]# ifconfig eno16777736 | awk -F' +' '/broadcast/{print $3}'
172.16.110.247
制作别名myip  显示ip地址
[root@localhost ~]#  ifconfig eno16777736 | head -2| tail -1 | cut -d' ' -f 10
[root@localhost ~]#  ifconfig eno16777736 |grep broadcast| cut -d' ' -f 10
172.16.110.247

[root@localhost ~]# alias myip="ifconfig eno16777736 |grep broadcast| cut -d' ' -f 10"
[root@localhost ~]# myip
172.16.110.247

3.[root@localhost ~]# stat aa.txt 
  文件:"aa.txt"
  大小:4         	块:8          IO 块:4096   普通文件
设备:802h/2050d	Inode:77530278    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-

取出
11:43:11
11:43:09
11:43:09

[root@localhost ~]# stat aa.txt |grep '+0800'|cut -d' ' -f2|cut -d'.' -f1
13:48:17
13:48:16
13:48:16
[root@localhost ~]# stat aa.txt |awk -F' |[.]' '/+0800/{print $2}'
13:48:17
13:48:16
13:48:16

3. 练习2

1.求passwd文件中uid最大用户的名字

[root@localhost ~]#  sort -t: -k3  -n /etc/passwd | tail -1 | cut -d':'  -f1
nfsnobody

2.求group文件中gid最小的组名和gid

[root@localhost ~]#  sort -t: -k3  -n /etc/group | head -1 | cut -d':'  -f1
root

3.求出系统中所有网卡的ip地址 (ifconfig获取所有网卡信息)
[root@localhost ~]# ifconfig | grep netmask | cut -d' ' -f 10
192.168.43.130
127.0.0.1
192.168.122.1

九. 环境变量配置文件

.bash_history  保存历史命令文件(当用户退出时记录)
.bash_logout 保存用户退出时执行的命令

vim .bash_logout
echo "byebye"

当用户退出时清除执行过的历史命令
rm -rf ~/.bash_history

1. 环境变量

env
HISTSIZE=1000  历史命名保存的数量
USER=root
PWD=/home/robin
HOME=/root
OLDPWD=/root

set 环境变量和非环境变量(自定义变量)

环境变量:父进程定义的环境变量,子进程可以继承

自定义变量:父进程定义的自定义变量,子进程不可以继承

.bashrc 保存用户定义的别名和函数

.bash_profile 保存用户搜索命令的路径

2. PATH

1. 实验
mkdir /home/robin/test/
vim /home/robin/test/test.sh
#!/bin/bash
echo "hello world"
chmod +x /home/robin/test/test.sh

vim /home/robin/.bash_profile
PATH=$PATH:/home/robin/test
export PATH
2. 测试
su - robin
test.sh


.bashrc           shell级别环境变量配置文件
.bash_profile     登录级别环境变量配置文件

/etc/bashrc       全局shell级别环境配置文件
/etc/profile      全局登录级别环境配置文件

登录用户时环境配置文件加载顺序
/etc/profile
.bash_profile
.bashrc
/etc/bashrc

su  robin  和  su - robin
su robin  shell级别的切换
.bashrc
/etc/bashrc

su - robin  登录级别的切换
/etc/profile
.bash_profile
.bashrc
/etc/bashrc

3. 练习1

1.当用户退出时,清除自己的操作痕迹

修改.bash_logout
添加
history -c
rm -rf ~/.bash_history

2.将lftp软件加入到搜索路径,对所有用户生效

因为是所有的用户
所以在全局配置目录下/etc/profile 在最后一行上添加
PATH=$PATH:/usr/local/lftp/bin/
export PATH

【注】
PATH=$PATH:跟上路径
Path后面一定要加上$path,不然会将之前的path路径覆盖掉,出现一些错误


3.定义别名la相当于ls -alh 只针对tom用户

因为是只针对一个用户
所以需要去家目录下 /home/robin/.bashrc中添加
alias myip="ifconfig ens33 | grep broadcast | cut -d' ' -f10"

【注】
如果过程中出现无法使用别名的命令,需要使用source /home/robin/.bashrc重新加载
如果一开始已经使用普通用户登录出现无法使用命令的时候,可以将普通用户退出重新登录做测试。

4. 练习2

1.环境变量和非环境变量如何查询?

env 
set

2.如何定义环境变量和非环境变量?


3.环境变量和非环境变量的区别是什么?

子进程能够继承

4.解释一下文件的功能?
.bash_history
.bash_logout
.bashrc
.bash_profile
/etc/bashrc
/etc/profile


5.将源码包安装的lftp软件命令的搜索路径添加到所有用户可以执行的环境配置文件



6.将高级命令作业中,查看所有网卡的命令,做成别名放到root的环境配置中


十. shell基础

1. bash特性

tab制表符的补齐功能:补齐命令 | 补齐文件名
[root@localhost ~]# systemctl restart vsftpd

history 查看执行过的历史命令

[root@localhost ~]# !1039   在执行一次第1039条命令
[root@localhost ~]# !!  在执行一次上一条命令
[root@localhost ~]# !sys  在执行一次以sys开头的命令

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eno16777736 
/etc/sysconfig/network-scripts/ifcfg-eno16777736
[root@localhost ~]# vim !$  上一条最后一个参数
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736


系统终端可以使用alt+.来调用上一条最后的指令
xshell使用esc+. 

2. shell环境变量

env 查看环境
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $SHELL

[root@localhost ~]# set 环境与非环境变量

环境变量:子进程可以继承父进程定义的环境变量,非环境变量不可以进程
环境便来:export  x=100
自定义:x=100

3. 环境变量的配置文件

用户自己的环境变量配置文件:

~/.bashrc shell级别环境变量配置文件

~/.bash_profile 登录级别环境变量配置文件

全局环境变量配置文件:

/etc/bashrc 全局shell级别环境变量配置文件

/etc/profile 全局登录级别环境变量配置文件


定向符

: 表示覆盖写入 1>

: 表示追加写入 1>>
1,2文件描述符号:
1 : 标准正确输出
2 : 标准错误输出
1>: 标准正确输出,如果文件存在则覆盖,如果文件不存在则创建
1>>: 标准正确输出,如果文件存在则追加,如果文件不存在则创建
2>: 标准错误输出,如果文件存在则覆盖,如果文件不存在则创建
2>>: 标准错误输出,如果文件存在则追加,如果文件不存在则创建
&> 标准正确和标准错误
2>&1 标准错误定向到表正确输出 afdas 1>/tmp/aa.txt 2>&1

4. shell脚本

1. 判断语法
[root@localhost ~]# cat if.sh 
#!/bin/bash
if [ -f /tmp/kk.txt ]
then 
    echo  "文件存在,显示详细信息.稍等......"
    sleep 1
    ls -l '/tmp/kk.txt'
else
    echo "文件不存在,创建文件,稍等......"
    sleep 1
    touch /tmp/kk.txt
    echo "创建成功"
fi
2. 循环语法
#!/bin/bash
#查找未使用的ip地址
for i in {1..254}
do
        ( if ping -c 1 172.16.110.$i &> /dev/null
        then
                echo "172.16.110.$i is used"
        else
                echo "172.16.110.$i is free"
        fi ) &
done

5. 练习

1.解释以下名词
1>
1>>
2>
2>>
&>

2.1 2什么名字? >什么名字?

十一. 磁盘管理

1. 主、扩展、逻辑分区

[root@localhost ~]# fdisk -l
[root@localhost ~]# df -Th 
1.分区
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):m
d   delete a partition
l   list known partition types
m   print this menu
n   add a new partition
p   print the partition table
q   quit without saving changes
w   write table to disk and exit
t   change a partition's system id


分区:
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): p
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):+1G
分区 4 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
2. 同步分区表,产生新的分区对应的文件
[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3
[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4
3. 格式化
[root@localhost ~]# mkfs.xfs  /dev/sda4
挂载使用:
[root@localhost ~]# mount /dev/sda4 /mnt/
4. 卸载分区
[root@localhost ~]# umount /mnt
5. 删除分区
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除

命令(输入 m 获取帮助):p

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    35842047    17408000   83  Linux
/dev/sda3        35842048    37890047     1024000   82  Linux swap / Solaris

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。


[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4

[root@localhost ~]# partx -d /dev/sda
partx: /dev/sda: error deleting partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3
6. 划分扩展和逻辑分区
1. 扩展分区
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 2 GiB


命令(输入 m 获取帮助):p

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    35842047    17408000   83  Linux
/dev/sda3        35842048    37890047     1024000   82  Linux swap / Solaris
/dev/sda4        37890048    41943039     2026496    5  Extended
2. 划分逻辑分区
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (37892096-41943039,默认为 37892096): 
将使用默认值 37892096
Last 扇区, +扇区 or +size{K,M,G} (37892096-41943039,默认为 41943039):+1G 
分区 5 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    35842047    17408000   83  Linux
/dev/sda3        35842048    37890047     1024000   82  Linux swap / Solaris
/dev/sda4        37890048    41943039     2026496    5  Extended
/dev/sda5        37892096    39989247     1048576   83  Linux

命令(输入 m 获取帮助):
命令(输入 m 获取帮助):w

[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4  /dev/sda5
7. 练习1
1.划分分区
3主分区 每个大小200M
1扩展分区,所有剩余空间
划分4个逻辑分区100M

2.将sdb5 和 sdb6格式化为xfs文件系统
挂载sdb5到/mnt目录 在/mnt目录下创建文件test.txt
挂载sdb6到/mnt目录 问能不能挂载?  如果可以,还能不能看到test.txt文件?

挂载在sdb5到/mnt目录  再将sdb5挂载到/opt目录 是否可以? 在/mnt和/opt下是不是都可以看到test.txt文件?

3.删除逻辑分区sdb7 查看哪个分区消失了?想想为什么?
8. 练习2
1.理解磁盘的各种关键字扇区,磁道,柱面
2.理解什么是主分区,扩展分区,逻辑分区  msdos
3.简述划分主分区的过程  
4.简述划分扩展分区的过程
5.简述划分逻辑分区的过程
6.将sdb划分为
3个主分区
一个扩展分区
3个逻辑分区

2. 自动挂载

1. mount
mount  -t  文件系统类型   被挂载的设备   挂载点
[root@localhost ~]# mount /dev/sda5 /mnt/
[root@localhost ~]# umount /dev/sda5
[root@localhost ~]# umount /mnt
[root@localhost ~]# umount -l /opt/
[root@localhost ~]# mount -o rw,remount /opt/  重新挂载
[root@localhost ~]# mount -o bind /root/ /tmp/  挂载目录
2. 练习1
划分两个逻辑分区sda5,sda6  分别格式化位xf文件系统
1.将sda5 挂载到/mnt 上 ,并在/mnt 创建文件test.txt
  再将sda5挂载到/opt上,问能不能挂载?能不能看到test.txt文件?

2.将sda5挂载到/mnt上,并在/mnt 创建文件test.txt
  将sda6挂载到/mnt上
  问:能不能挂载?  能不能看到test.txt文件?
3. 自动挂载
1./etc/rc.local(进入系统前,最后一个启动脚本)
mount -t xfs /dev/sda5 /mnt
mount  -t iso9660 /var/ftp/CentOS7-2.iso /yum

chmod a+x /etc/rc.d/rc.local

2./etc/fstab 
/dev/sda5 /mnt xfs defaults  0 0
/var/ftp/CentOS7-2.iso  /yum/ iso9660 defaults 0 0
被挂载的设备  挂载点   文件系统   参数   dump备份  fsck检查

3.autofs(按需挂载服务)
安装软件:
[root@localhost etc]# yum install autofs
创建目录
[root@localhost ~]# mkdir /auto

主配置文件(定义按需挂载目录,定义对该目录挂载设备的文件)
[root@localhost etc]# vim /etc/auto.master
/test   /etc/auto.test

[root@localhost etc]# vim /etc/auto.test
disk-5  -fstype=xfs,rw  :/dev/sda5

重启autofs服务
[root@localhost etc]# systemctl restart autofs


自动卸载:
[root@localhost etc]# vim /etc/autofs.conf
timeout = 300    

自定义卸载时间
vim /etc/auto.master
/test   /etc/auto.test --timeout=10

每隔1妙执行一次mount命令
[root@localhost /]# watch -n 1 mount 
4. 练习2
使用autofs+yum结合使用

auto 实现镜像  按需挂载    /test/iso  

yum   
baseurl=file:///test/iso


[root@localhost /]# cat /etc/auto.master     【主配置文件】
/test   /etc/auto.test --timeout=10

[root@localhost /]# cat /etc/auto.test 
iso	-fstype=iso9660,ro	:/var/ftp/CentOS7-2.iso

[root@localhost /]# cat /etc/yum.repos.d/yum.repo 
[local-yum]
name=autofs yum
baseurl=file:///test/iso
enabled=1
gpgcheck=0

[root@localhost /]# systemctl restart autofs

[root@localhost ~]# yum makecache
5. 练习3
(sdb5和sdb6 一定有文件系统)
将分区sdb5通过rc.local文件实现自动挂载,挂载到/opt目录
将分区sdb6通过fstab文件实现自动挂载,挂载到/mnt目录

重启系统测试是否成功?


6. 练习4
1.将上一章5,6,7这个三个逻辑分区,使用不同的方法实现自动挂载
如:
sdb5    rc.local方式
sdb6    fstab方式
sdb7    autofs方式

3. 交换分区(虚拟内存)扩大缩小

swap交换空间,是虚拟内存的表现形式。系统为了一些需要大量内存的使用,而将磁盘上的空间做内存使用,当物理内存不够用时,将

其中一些暂时不需要的数据交换到交换空间,也叫交换文件或页面文件中。

理解:我们知道Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存),常用的就

是buffer cache和page cache。即使你的程序运行结束后,Cache Memory也不会自动释放。

这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中

的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被

临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进

行Swap交换。

1. 扩大交换分区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKEkAatl-1631085654926)(https://i.loli.net/2020/12/07/Al4ZqEo1mKXfO68.jpg)]

1.分区
2. 格式化
[root@localhost ~]# mkswap /dev/sda6
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=266ce265-7659-4e77-971e-44de60c5ab2d
3.激活新的交换分区
[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        4031780      888876      108384       12016     3034520     2897392
Swap:       1023996           0     1023996
[root@localhost ~]# swapon /dev/sda6
[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        4031780      889560      107496       12068     3034724     2896656
Swap:       1535992           0     1535992

[root@localhost ~]# swapon -s
文件名				类型		大小	已用	权限
/dev/sda3         partition	1023996	0	-1
/dev/sda6         partition	511996	0	-2
2. 新交换分区永久生效
方法1
vim /etc/rc.local
swapon /dev/sda6
方法2: UUID
blkid  /dev/sda6  查UUID
vim /etc/fstab
/dev/sda6 swap swap  defaults 0 0


修改分区编号:
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):t  
分区号 (1-6,默认 6):6
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
命令(输入 m 获取帮助):p


缩小交换分区:
1.
[root@localhost ~]# swapoff /dev/sda6 取消激活交换分区
2.
删除永久激活设置
3.删除分区
3. 练习1
1.查看你当前的交换分区大小  free -m
2.将交换分区扩大1G,并保证重启后依然有效
3.将交换分区还原
4. 练习2
1.什么是交换分区?它的作用是什么?
2.将你当前的交换分区扩大到2GB,在缩小到1GB

4. raid磁盘阵列

磁盘阵列(Redundant Arrays of independent Disks,RAID),廉价冗余(独立)磁盘阵列。

RAID是一种把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),提供比单个硬盘更高的存储性能和数据备份技

术。RAID技术,可以实现把多个磁盘组合在一起作为一个逻辑卷提供磁盘跨越功能;可以把数据分成多个数据块(Block)并行写入/读出

多个磁盘以提高访问磁盘的速度;可以通过镜像或校验操作提供容错能力。具体的功能以不同的RAID组合实现。

在用户看来,RAID组成的磁盘组就像是一个硬盘,可以对它进行分区、格式化等操作。RAID的存储速度比单个硬盘高很多,并且可以提

供自动数据备份,提供良好的容错能力。

RAID级别,不同的RAID组合方式分为不同的RAID级别:

RAID 0:称为Stripping条带存储技术,所有磁盘完全地并行读,并行写,是组建磁盘阵列最简单的一种形式,只需要2块以上的硬盘即

可,成本低,可以提供整个磁盘的性能和吞吐量,但RAID 0没有提供数据冗余和错误修复功能,因此单块硬盘的损坏会导致所有的数据丢

失。(RAID 0只是单纯地提高磁盘容量和性能,没有为数据提供可靠性保证,适用于对数据安全性要求不高的环境)

RAID 1:镜像存储,通过把两块磁盘中的一块磁盘的数据镜像到另一块磁盘上, 实现数据冗余,在两块磁盘上产生互为备份的数据,其

容量仅等于一块磁盘的容量。当数据在写入一块磁盘时,会在另一块闲置的磁盘上生产镜像,在不影响性能情况下最大限度的保证系统的

可靠性和可修复性;当原始数据繁忙时,可直接从镜像拷贝中读取数据(从两块硬盘中较快的一块中读出),提高读取性能。相反的,

RAID 1的写入速度较缓慢。RAID 1一般支持“热交换”,即阵列中硬盘的移除或替换可以在系统运行状态下进行,无须中断退出系统。RAID

1是磁盘阵列中硬盘单位成本最高的,但它提供了很高的数据安全性、可靠性和可用性,当一块硬盘失效时,系统可以自动切换到镜像磁

盘上读写,而不需要重组失效的数据。

RAID 0+1:也被称为RAID 10,实际是将RAID 0和RAID 1结合的形式,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同

时,为每一块磁盘做镜像进行冗余。通过RAID 0+1的组合形式,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供冗余能力,允

许一个以下磁盘故障,而不影响数据可用性,并且有快速读/写能力。RAID 0+1至少需要4个硬盘在磁盘镜像中建立带区集。RAID 0+1技

术在保证数据高可靠性的同时,也保证了数据读/写的高效性。

RAID 5:是一种存储性能、数据安全和存储成本兼顾的存储解决方案。RAID 5可以理解为是RAID 0和RAID 1的折衷方案,RAID 5至少需

要三块硬盘。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似

的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信

息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。

1. 磁盘阵列
1.数据冗余 
2.读写加速
2. raid的级别
level 0
作用:  条带化
数量: 2(最少)
size:500G     1T     2n

level 1
作用:  镜像
数量: 2(最少)
size: 500G    500G    n/2

level 5
作用: 带奇偶数校验的条带化
数量: 3(最少)
size:500G   n-1  1T

level 10
作用:  raid1+raid0
数量: 4(最少)
size:500G    n/2
3. 软raid(使用软件模拟)

-C 创建 -l 级别 -n 数量

-D -s 查询

madm -D -s > /etc/mdadm.comf(配置文件,永久化软raid)

mdadm -D

mdadm -S

mdadm -A

格式化

mkfs.xfs /dev/md5

mount /dev/md5/mnt

模拟损坏

mdadm -f /dev/md5 /dev/sdb1

mdadm -r /dev/md5 /dev/sdb2

mdadm -a /dev/md5 /dev/sdb3

删除

mdadm -S /dev/md5

rm -rf /dev/md5

rm -rf /etc/mdadm.conf

mdadm --zero-superblock /dev/sdb1

mdadm --zero-superblock /dev/sdb2

mdadm --zero-superblock /dev/sdb3

损坏
mdadm -f
查询
mdadm -D
移除
mdadm -r
添加
mdadm -a

创建raid 0
mdadm -C -n 2 -l 0 /dev/md0 /dev/sda5 /dev/sda6 
查询
mdadm -D /dev/md0 
显示扫描信息
mdadm -Ds
停止
mdadm -S /dev/md0
激活阵列
mdadm -A /dev/md0 /dev/sda5 /dev/sda6
删除
rm -rf /dev/md0
清除超级块信息
mdadm --zero-superblock /dev/sda5 /dev/sda6

raid1:
mdadm -C -n 2 -l 1 /dev/md1 /dev/sda5 /dev/sda6 

raid5:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7

rai10:
mdadm -C -n 4 -l 10 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8


模拟损坏:
创建
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7}
mkfs.xfs /dev/md5
mount /dev/md5 /mnt


损坏
mdadm -f /dev/md5 /dev/sda5
查询
mdadm -D /dev/md5
移除
mdadm -r /dev/md5 /dev/sda5
添加
mdadm -a /dev/md5 /dev/sda8


备用盘:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8
mdadm -D /dev/md5


永久生效:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8

[root@localhost ~]# vim /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
[root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf

[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
ARRAY /dev/md5 metadata=1.2 spares=1 name=localhost:5 UUID=5249b8cf:c2a5b49f:405a4a2c:2247d8c9
[root@localhost ~]# 
4. 练习1
1.卸载
2.停止
3.删除
4.清除超级块
5. 练习2
1.简述raid0 raid1 raid5 raid10 各有什么功能?
2.分别做raid0 raid1 raid5 raid10 实验, 并模拟损坏

5. lvm管理

空间整合

​ 比如拥有多块硬盘,每块500G 需要存用800G数据(一个文件)使用lvm可以将多个硬盘整合一个硬盘(映射)

在线扩容

当所有的硬盘都被占用但是还有剩余空间,但是不够存储下一个文件。在线扩容是指将在哪来的一块硬盘继续映射,实现在线操作。

真正使用的是存储使用在lv逻辑卷上。pv物理卷(硬盘)

1. lvm功能
1.整合磁盘空间
2.在线扩容
2. 操作
1. pv物理卷
1.创建pv
pvcreate /dev/sda6
pvcreate /dev/sda7

2.查询pv
pvs
pvdisplay 
2. vg卷组
1.创建vg
vgcreate vg0 /dev/sda6 /dev/sda7

2.查询vg
vgs
vgdisplay
3. lv逻辑卷
1.创建
lvcreate -L 700M -n lv0 vg0
-L size
-n  name

2.查询 
lvs
lvdisplay 

4. 格式化
mkfs.xfs /dev/vg0/lv0
5. 挂载
mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   1   2   0 wz--n- 17.00g 4.00m
[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <17.01 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              4353
  Free PE               1
  Allocated PE          4352
  PV UUID               YyE9qc-2eXX-uKEx-ke46-1SmJ-JAvC-Kz4ELV
   
  "/dev/sdb1" is a new physical volume of "200.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               200.00 MiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pifj7L-U0wI-56Ye-z4UK-jurn-UUYW-JXB2DQ
   
  "/dev/sdb2" is a new physical volume of "200.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               200.00 MiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               YqBbzE-kH9M-TKw4-aaOY-0qll-VI7H-n5Mh9z
   
[root@localhost ~]# vgcreate vg0 /dev/sdb1  /dev/sdb2
  Volume group "vg0" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n-  17.00g   4.00m
  vg0      2   0   0 wz--n- 392.00m 392.00m
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               392.00 MiB
  PE Size               4.00 MiB
  Total PE              98
  Alloc PE / Size       0 / 0   
  Free  PE / Size       98 / 392.00 MiB
  VG UUID               PIlqUS-XBUn-vuNG-lTX7-llEJ-4XQy-A2zxdz
   
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               17.00 GiB
  PE Size               4.00 MiB
  Total PE              4353
  Alloc PE / Size       4352 / 17.00 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               tSRioI-5Wog-T6VE-Xn6I-ixfe-Ab7T-27fztD
   
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0 
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/vg0/lv0.
  Logical volume "lv0" created.
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--   17.00g  4.00m
  /dev/sdb1  vg0    lvm2 a--  196.00m     0 
  /dev/sdb2  vg0    lvm2 a--  196.00m 92.00m
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao----  15.00g                                                    
  swap centos -wi-ao----   2.00g                                                    
  lv0  vg0    -wi-a----- 300.00m                                                    
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                iC34hY-vsB0-27wW-96WR-z654-7eCJ-BwABhT
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-10-27 14:18:17 +0800
  LV Status              available
  # open                 0
  LV Size                300.00 MiB
  Current LE             75
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                B1D1bt-ZpqV-BOmL-Pzdu-IHkQ-KSzb-TWL21r
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-10-13 19:28:49 +0800
  LV Status              available
  # open                 1
  LV Size                15.00 GiB
  Current LE             3840
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                BezNT5-9oex-9bMN-F01G-pV59-jQVe-2HYZiR
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-10-13 19:28:49 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
   
[root@localhost ~]# mount /dev/vg
vg0/         vga_arbiter  
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
mount: /dev/mapper/vg0-lv0 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 974M     0  974M   0% /dev
tmpfs                    991M     0  991M   0% /dev/shm
tmpfs                    991M   11M  980M   2% /run
tmpfs                    991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root   15G  4.6G   11G  31% /
/dev/sda1                497M  164M  334M  33% /boot
tmpfs                    199M   12K  199M   1% /run/user/42
tmpfs                    199M     0  199M   0% /run/user/0
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0 
meta-data=/dev/vg0/lv0           isize=512    agcount=4, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=76800, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  974M     0  974M   0% /dev
tmpfs                   tmpfs     991M     0  991M   0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M   2% /run
tmpfs                   tmpfs     991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        15G  4.6G   11G  31% /
/dev/sda1               xfs       497M  164M  334M  33% /boot
tmpfs                   tmpfs     199M   12K  199M   1% /run/user/42
tmpfs                   tmpfs     199M     0  199M   0% /run/user/0
/dev/mapper/vg0-lv0     xfs       297M   16M  282M   6% /mnt
[root@localhost ~]# 
3. 在线扩容lv
1.lvm块设备在线扩容
2.文件系统的在线扩容

lvm块设备在线扩容
前提vg是有可用空间
lvextend -L +200M /dev/vg0/lv0 

文件系统的在线扩容
xfs_growfs /dev/vg0/lv0
4. 在线扩容vg
1.有额外分区或者磁盘
2.创建成pv
3.扩容
 vgextend vg0 /dev/sda8
[root@localhost ~]# pvcreate /dev/sdb5
WARNING: xfs signature detected on /dev/sdb5 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/sdb5.
  Physical volume "/dev/sdb5" successfully created.
[root@localhost ~]# vgextend vg0 /dev/sdb5
  Volume group "vg0" successfully extended
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n-  17.00g   4.00m
  vg0      3   1   0 wz--n- 588.00m 268.00m
5. 数据迁移
1.指定设备移动数据 
pvmove /dev/sda6 /dev/sdb

2.不指定设备移动
pvmove /dev/sda7

vg移除pv
vgreduce vg0 /dev/sda{6,7,8}


删除lv
1.umount /dev/vg0/lv0
2.lvremove /dev/vg0/lv0
3.vgremove vg0
4.pvremove /dev/sda{6,7,8}

lvm快照snapshot
vgcreate vg0 /dev/sdb
lvcreate -L 500M -n /dev/vg0/lv0 vg0 
mkfs.xfs /dev/vg0/lv0 
mount /dev/vg0/lv0 /mnt/
6. 创建快照
lvcreate -L 50M -s -n /dev/vg0/lv0-s0 /dev/vg0/lv0

1.只使用快照,源lv不动
快照内文件修改,不影响源lv数据,快照空间使用100%,快照自动损坏

创建lv0,挂载,添加数据
创建快照
挂载快照
在快照内添加数据,达到%100,快照损毁



2.只使用源lv,快照作为备份
快照作为备份,空间最好大于数据大小,还要注意选择服务器最空闲时间
多用备份

创建lv0,挂载,添加数据
创建快照,作为备份
删除原lv0内的内容
使用快照恢复数据

注意
再备份过程中,如原lv有大量数据写入,可能造成快照使用率达到100%,损毁
快照大小,要大于备份数据大小
快照大小要足够大...

7. EXT4文件系统(centos)

pvcreate /dev/sda6 /dev/sda7
vgcreate vg0 /dev/sda{6,7}
lvcreate -L 500M -n lv0 vg0
mkfs.ext4 /dev/vg0/lv0 
mount /dev/vg0/lv0 /mnt/

lvextend -L +200M /dev/vg0/lv0 

在线扩容
lvextend -L +200M /dev/vg0/lv0 
 resize2fs /dev/vg0/lv0 600M   指定大小
 resize2fs /dev/vg0/lv0 扩大lv的空间

离线缩小
umount /mnt/
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0  200M
lvresize -L 200M /dev/vg0/lv0

快照同时挂载
 lvcreate -L 50M -s -n /dev/vg0/lv0-s0 /dev/vg0/lv0
 mount /dev/vg0/lv0 /mnt/
mount /dev/vg0/lv0-s0 /opt/


8. 练习
1.简述lvm的功能和作用
2.使用硬盘sdb sdc sdd创建lvm,并实现在线扩容lv 和 在线扩容vg

6. facl使用方法

1. 文件系统属性
i  不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
如果是目录: 不能创建新文件
chattr +i  file/dir   
lsattr file/dir        查看文件命令lsattr
a  不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
可以追加新内容
如果是目录: 可以创建新文件
chattr +a file/dir
2. facl(文件访问控制列表)

xfs的facl(xfs默认支持facl)

  • 表示设置facl权限了
    getfacl 获取facl信息
    setfacl 设置facl信息
setfacl -m u:robin:rw aa.txt   设置用户
setfacl -m u:zorro:rw aa.txt
setfacl -m g:upup:rw aa.txt   设置组
setfacl -m m:r aa.txt              设置mask

setfacl -x robin aa.txt   删除某个用户额外的权限
setfacl -x g:upup aa.txt  删除组的额外权限
setfacl -b aa.txt   删除所有额外权限及取消+标记
3. 练习1
建立三个普通用户 seker,zorro,shrek.用 root 用户在/root 目录中建立一个文件 abc.txt使 seker 用户既能读又能写 abc.txt 文件,但不能删除
使 zorro 用户只能读取,不能写也不能删这个文件
使 shrek 用户只能删除,不能读写这个文件.
以上三个条件同时成立

/root   r-xrwxr-x  root root
/root/abc.txt  rw-r-----   seker zorro

seker  seker
zorro  zorro
shrek  shrek

chown seker /root/abc.txt
chown .zorro /root/abc.txt
chmod 640 /root/abc.txt

chmod g+w /root
usermod -a -G root  shrek
chmod o+rx /root


用facl完成上题:
setfacl -m u:seker:rw /root/abc.txt
setfacl -m u:seker:rx /root

setfacl -m u:zorro:r /root/abc.txt
setfacl -m u:zorro:rx /root

setfacl -m u:shrek:--- /root/abc.txt
setfacl -m u:shrek:rwx /root

继承权限:
setfacl -m u:robin:rwx dir
setfacl -m d:u:robin:rwx dir
4. 练习
1.简述setfacl能解决什么问题?
  其他的权限所不具备的功能
2.在/tmp目录下创建文件aa.txt,拥有者root 所属组root  权限600
   要求:
   robin用户可以读写/tmp/aa.txt
   zorro用户可以读写/tmp/aa.txt
   upup组的tom和jerry只可以读aa.txt文件

3.在/tmp目录下创建目录test,
  要求:
  robin用户可以读写删除/tmp/test下的所有新建文件

7. quota磁盘配额使用

1. quota磁盘配额(user)
磁盘配额从字面上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思。所以总的来说就是限制用户对磁盘空间的使用量。

​ 因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录是存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该是分得大概333M空间,但是其中有个用户在家目录下存放了很多音频文件占了8G的空间,这样的话对其他用户就显得不公平,而如果想要磁盘容量公平的分配,这个时候就要靠quota来实现了。

1.开启配额功能
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
2. 设置用户配额
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
  Filesystem             blocks       soft       hard     inodes     soft     hard
  /dev/sda5              0          50M         100M         0        10        20
3. 查询配额的使用情况
[root@localhost /]# repquota -u /mnt
4. 启动配额
[root@localhost mnt]# quotaon /mnt/
测试
测试空间配额
su - robin
dd if=/dev/zero of=/mnt/data  bs=120M count=1

dd: 写入"/mnt/data" 出错: 超出磁盘限额

测试文件个数配额
touch /mnt/abc{1..25}.txt

group配额:

group upup
useradd -g upup king
useradd -g upup zorro
  1. 开启组配额

    [root@localhost /]# mount -o grpquota /dev/sda5 /mnt/
    
  2. 配置组配额

    [root@localhost /]# edquota -g upup
    Disk quotas for group upup (gid 1002):
      Filesystem                   blocks       soft       hard     inodes     soft     hard
      /dev/sda5                         0      51200     102400          0       10       20
    
  3. 查询配额的使用情况

    [root@localhost /]# repquota -g /mnt
    
  4. 激活组配额

    [root@localhost /]# quotaon -g /mnt/
    
测试:

[root@localhost ~]# su - king
[king@localhost mnt]$ dd  if=/dev/zero of=/mnt/data1 bs=80M count=1

[root@localhost ~]# su - zorro
[zorro@localhost ~]$ dd  if=/dev/zero of=/mnt/data2 bs=80M count=1

测试配额空间为共用


设置宽限时间

[root@localhost ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda5                     30seconds                  7days





测试:
1.开启配额功能:
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
2.设置用户配额:
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda5                         0          50M         100M         0        10        20
3.查询配额的使用情况
[root@localhost /]# repquota -u /mnt
4.启动配额:
[root@localhost mnt]# quotaon /mnt/





测试:
测试空间配额
su - robin
激活软限
dd if=/dev/zero of=/mnt/data1  bs=60M count=1

repquota 去查看quota的信息 grace时间变成none

repquota /mnt  查看配额情况
改宽限时间
edquota -t


剩余40M 不可用

删除文件到软限以下

恢复可用空间
练习
2. 练习
1.解释磁盘配额的功能?可以对什么进行限制?
2.对分区sdb1进行配额
   robin用户最多可以使用100M空间,软限制自定义
   zorro用户最多可以创建100个文件,软限制自定义

8. GPT分区

[root@localhost /]# parted /dev/sdb    ---------------------------------分区命令
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel             ------------------------------------------------选择分区表类型
新的磁盘标签类型? gpt                                                                                                      
(parted) print                        ------------------------------------------打印分区表信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志

(parted) mkpart 
分区名称?  []? sdb1
文件系统类型?  [ext2]? xfs
起始点? 1                                                                
结束点? 500M                                                             
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name  标志
 1      1049kB  500MB  499MB  xfs          sdb1

(parted) mkpart 
分区名称?  []? sdb2
文件系统类型?  [ext2]? xfs                                               
起始点? 500M                                                             
结束点? 1000M                                                            
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name  标志
 1      1049kB  500MB   499MB  xfs          sdb1
 2      500MB   1000MB  500MB               sdb2

mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /mnt/
umount /dev/sdb1


删除
[root@localhost /]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space,
        all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU
        Parted
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size   File system  Name  标志
 1      1049kB  500MB   499MB  xfs          sdb1
 2      500MB   1000MB  500MB               sdb2

(parted) rm 2
(parted) rm 1                                                             
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志

(parted)    

 [root@localhost /]# ls /dev/sdb*
/dev/sdb

9. ext4和xfs文件系统

1. ext4文件系统
查看超级块信息
tune2fs -l /dev/vg0/lv0
e2label /dev/vg0/lv0 test
mount LABEL=test /opt

最大挂载次数
tune2fs -c 20 /dev/vg0/lv0
当前挂载次数
tune2fs -C 1 /dev/vg0/lv0
更改卷标 
tune2fs -L xxxx /dev/vg0/lv0
添加支持acl功能
tune2fs -o acl /dev/vg0/lv0
取消acl
tune2fs -o ^acl /dev/vg0/lv0


dumpe2fs  /dev/sda8


2. xfs文件系统

EXT家族对文件格式化时预先规划出所有的inode/block及中介数据等,未来系统就可以直接取用,不需再分配。早期的磁盘容量不太大的时候这就可以,但随着时代的发展,数据量越来越大,磁盘容量越来越大。现在都已经说到PB,EB的数据了,那么TB以上等级的传统ext家族文件系统在格式化的时候就得废掉好多时间。。

另外一个原因,虚拟化的应用现在越来越广泛,作为虚拟化磁盘来源的巨型文件(单一文件好几个G及以上)也就越来越常见。这种巨型文件在处理上需要考虑到效能的问题,否则虚拟磁盘的效率就会不太好看。

所以,从centos7开始,预设的文件系统由EXT4变成了xfs这个较适合高容量磁盘与巨型文件效能较佳的文件系统了。

3. XFS文件系统的配置

基本上XFS就是一个日志式文件系统,之所以现在把它当预设的文件系统,是因为它原本就是被开发用于高容量磁盘以及高性能文件系统之用的,相当适合于现在的环境。此外,几乎所有EXT4文件系统具有的功能,xfs都具备。

xfs文件系统在资料的分布上,主要规划为三个部分:资料区(data section),文件系统活动登录区(log section),实时运作(realtime section)。具体如下:

1. 资料区(data section)

这个区域基本上与之前说的EXT家族一样,包括inode、block、superblock等数据都放在这个区块。这个数据区与ext家族的block group类似,分多个储存区群组(allocation groups)。每个储存区群组中都包含了整个文件系统的superblock,剩余空间的管理机制,inode的分配与追踪。此外,inode,block都是系统需要用到时才会动态配置产生,所以格式化动作较EXT家族快了很多。

其实,只需要把这个数据区的储存区群组当成ext的block群组就可以了,只是inode与block是动态产生的,并非一开始于格式化就完成配置的。

2. 文件系统活动登录区(log section)

这个区域主要被用来记录文件系统的变化,具体原理和之前说的相同。
因为系统所有的动作都会在这个区域做个记录所以这个区域的磁盘活动是相当频繁的,xfs的设计在这里有一个巧妙之处,你可以指定外部的磁盘来作为xfs文件系统的日志管理区块。例如,你可以将SSD磁盘作为xfs的文件系统活动登录区,这样,当系统需要进行任何活动时,就可以更迅速的工作。

3. 实时运作区(realtime section)

当有文件要被建立时,xfs会在这个区段里找一个到数个extent区块,将文件放置在这个区块中,等到分配完毕后,再写入到data section的inode和block中。这个extent区块的大小得要在格式化的时候就先指定,最小值为4K最大可到1G。一般非磁盘阵列的磁盘默认为64K容量,而具有类似磁盘阵列的stripe情况下,则建议extent设定为与stripe一样大较佳。这个extent最好不要乱动,因为可能会影响到实体磁盘的效能。

4. 下面解释一下以上输出的信息:

isize : inode的容量,这里为256bytes。
agcount:储存区群组的个数,这里有4个。
agsize : 每个储存区群组里的block个数,这里为32000个。
sectsz:逻辑扇区(sector)的容量,这里为512bytes。
bsize:每个block的容量为4 k。
blocks:共有128000个block在这个文件系统内。
sunit,swidth:与磁盘阵列的stripe相关性较高,这里暂时不说明。
internal,指这个登录区的位置在文件系统内,而不是外部系统的意思,占用了4K * 853空间。
第9行:realtime区域,extent容量为4k,none=>不过目前没有使用。

xfs有个写入屏障,在有缓存的情况下开启barrier功能,保证数据安全,如果没有缓存可以关闭这个参数
mount -o nobarrier /dev/device /mount/point

xfs_quota
usrquota
groupquota
project


[root@localhost ~]# mount -o usrquota,grpquota /dev/sda3 /mnt/
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     

---------- --------------------------------------------------

root                4          0          0     00 [--------]

Group quota on /mnt (/dev/sda3)
                               Blocks                     
Group ID         Used       Soft       Hard    Warn/Grace     

---------- --------------------------------------------------

root                4          0          0     00 [--------]

[root@localhost ~]# xfs_quota -x -c 'limit bsoft=50K bhard=100K robin' /mnt
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
                               Blocks                     
User ID          Used       Soft       Hard    Warn/Grace     

---------- --------------------------------------------------

root                4          0          0     00 [--------]
robin               0         52        100     00 [--------]

Group quota on /mnt (/dev/sda3)
                               Blocks                     
Group ID         Used       Soft       Hard    Warn/Grace     

---------- --------------------------------------------------

root                4          0          0     00 [--------]


xfs_quota -x -c 'limit -g bsoft=1000m bhard=1200m accounting' /target/path

prject配额(对目录配额)

mkdir /quota
mount -o prjquota /dev/sda8 /quota
mkdir /quota/test
mount
/dev/sda8 on /quota type xfs (rw,relatime,attr2,inode64,prjquota)
[root@localhost ~]# echo 50:/quota/test >> /etc/projects
[root@localhost ~]# echo test:50 >> /etc/projid
[root@localhost ~]# cat /etc/projects
50:/quota/test
[root@localhost ~]# cat /etc/projid
test:50
xfs_quota -x -c 'project -s -p /quota/test 50'
xfs_quota -x -c 'limit -p bhard=100M 50' /quota
查询
xfs_quota -x -c 'report' /quota
4. xfs局限性

1.XFS是一个单节点文件系统,如果需要多节点同时访问需要考虑使用GFS2文件系统
2.XFS支持16EB文件系统,而redhat仅支持100TB文件系统
3.XFS较少的适用在单线程元数据密集的工作负荷,在单线程创建删除巨大数量的小文件的工作负荷下,其他文件系统(ext4)表现的会更好一些
4.xfs文件在操作元数据时可能会使用2倍的CPU资源,在CPU资源有限制的情况下可以研究使用不同文件系统
5.xfs更多适用的特大文件的系统快速存储,ext4在小文件的系统或系统存储带宽有限的情况下表现的更好

[root@node6 ~]# yum install xfsprogs -y

[root@node6 ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1       	isize=256    	agcount=4, agsize=6016 blks
         	 =                       	sectsz=512   	attr=2, projid32bit=0
data     	 =                       	bsize=4096   	blocks=24064, imaxpct=25
         	 =                       	sunit=0      	swidth=0 blks
naming    =version 2              bsize=4096   	ascii-ci=0
log      	=internal log           bsize=4096   	blocks=1200, version=2
         	=                       	sectsz=512   	sunit=0 blks, lazy-count=1
realtime  =none            		extsz=4096   	blocks=0, rtextents=0


日志分离
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1 -f
meta-data=/dev/vdb1   	isize=256    	agcount=4, agsize=6016 blks
         	 =                       	sectsz=512   	attr=2, projid32bit=0
data    	 =                       	bsize=4096   	blocks=24064, imaxpct=25
        	 =                       	sunit=0      	swidth=0 blks
naming     =version 2       	bsize=4096   	ascii-ci=0
log      	 =/dev/vdb2      	bsize=4096   	blocks=24576, version=2
         	 =                       	sectsz=512   	sunit=0 blks, lazy-count=1
realtime 	=none                  	extsz=4096   	blocks=0, rtextents=0
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs/

5. lvm在线扩容和文件系统扩容
[root@node6 ~]# pvcreate /dev/vdb1 /dev/vdb2 
[root@node6 ~]# vgcreate vgxfs /dev/vdb2 /dev/vdb1
[root@node6 ~]# lvcreate -l 25 -n lvxfs vgxfs
  Logical volume "lvxfs" created
[root@node6 ~]# mkfs.xfs /dev/vgxfs/lvxfs 
meta-data=/dev/vgxfs/lvxfs       	isize=256    	agcount=4, agsize=6400 blks
         	 =                       		sectsz=512   	attr=2, projid32bit=0
data     	 =                       		bsize=4096   	blocks=25600, imaxpct=25
         	 =                       		sunit=0      	swidth=0 blks
naming     =version 2              	bsize=4096   	ascii-ci=0
log      	 =internal log           	bsize=4096   	blocks=1200, version=2
         	 =                       		sectsz=512   	sunit=0 blks, lazy-count=1
realtime =none                   		extsz=4096   	blocks=0, rtextents=0

[root@node6 ~]# mount /dev/vgxfs/lvxfs /xfs/

[root@node6 ~]# lvextend -l +100%FREE /dev/vgxfs/lvxfs 

[root@node6 ~]# xfs_growfs /xfs/
meta-data=/dev/mapper/vgxfs-lvxfs 	isize=256    	agcount=4, agsize=6400 blks
         	 =                       			sectsz=512   	attr=2, projid32bit=0
data     	 =                       			bsize=4096   	blocks=25600, imaxpct=25
       	 	 =                       			sunit=0      	swidth=0 blks
naming 	 =version 2              		bsize=4096   	ascii-ci=0
log     	 =internal               		bsize=4096  	blocks=1200, version=2
       		 =                       			sectsz=512   	sunit=0 blks, lazy-count=1
realtime	 =none                   			extsz=4096  	 blocks=0, rtextents=0
data blocks changed from 25600 to 47104

6. 修复文件系统
[root@node6 ~]# umount /xfs
[root@node6 ~]# xfs_repair /dev/vgxfs/lvxfs 
7. 磁盘碎片整理
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@node6 ~]# for FILE in file{0..3} ; do dd if=/dev/zero of=/xfs/${FILE} bs=4M count=100 & done
[root@node6 ~]# filefrag /xfs/file*
                            xfs_db -c frag -r /dev/sda2   磁盘碎片当前状态
[root@node6 ~]# xfs_fsr -v


[root@node6 ~]# umount /xfs

[root@node6 ~]# xfs_repair -n -l /dev/vdb2 /dev/vdb1 
Phase 1 - find and verify superblock...
Phase 2 - using external log on /dev/vdb2

   - scan filesystem freespace and inode maps...
     und root inode chunk
     Phase 3 - for each AG...
        - scan (but don't clear) agi unlinked lists...
          ocess known inodes and perform inode discovery...
             - agno = 0
               no = 1
                  - agno = 2
                    no = 3
                       - process newly discovered inodes...
                         Phase 4 - check for duplicate blocks...
                            - setting up duplicate extent list...
                              eck for inodes claiming duplicate blocks...
                                 - agno = 0
                                   no = 1
                                      - agno = 2
                                        no = 3
                                        No modify flag set, skipping phase 5
                                        Phase 6 - check inode connectivity...
                                           - traversing filesystem ...
                                             aversal finished ...
                                                - moving disconnected inodes to lost+found ...
                                                  Phase 7 - verify link counts...
                                                  No modify flag set, skipping filesystem flush and exiting.
                                                  [root@node6 ~]# 
                                                  [root@node6 ~]# xfs_repair -l /dev/vdb2 /dev/vdb1 
                                                  Phase 1 - find and verify superblock...
                                                  Phase 2 - using external log on /dev/vdb2
                                                     - zero log...
                                                       an filesystem freespace and inode maps...
                                                          - found root inode chunk
                                                            Phase 3 - for each AG...
                                                               - scan and clear agi unlinked lists...
                                                                 ocess known inodes and perform inode discovery...
                                                                    - agno = 0
                                                                      no = 1
                                                                         - agno = 2
                                                                           no = 3
                                                                              - process newly discovered inodes...
                                                                                Phase 4 - check for duplicate blocks...
                                                                                   - setting up duplicate extent list...
                                                                                     eck for inodes claiming duplicate blocks...
                                                                                        - agno = 0
                                                                                          no = 1
                                                                                             - agno = 2
                                                                                               no = 3
                                                                                               Phase 5 - rebuild AG headers and trees...
                                                                                                  - reset superblock...
                                                                                                    Phase 6 - check inode connectivity...
                                                                                                       - resetting contents of realtime bitmap and summary inodes
                                                                                                         aversing filesystem ...
                                                                                                            - traversal finished ...
                                                                                                              ving disconnected inodes to lost+found ...
                                                                                                              Phase 7 - verify and correct link counts...
                                                                                                              done



需要做出一个日志盘才可以进行之后的操作,不然会出现报错信息。
另外备份分为全备份 增量备份 差异备份
全备份:比如从星期一到星期三的数据进行全部的备份
增量备份:比如从星期二开始备份星期三的数据,只备份一天的
差异备份:从星期二到星期四的数据备份

备份
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@node6 ~]# yum install xfsdump

[root@node6 ~]# xfsdump -L full -M dumpfile -l 0 - /xfs | xz > /tmp/xfs.$(date +%Y%m%d).0.xz
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.0.4 (dump format 3.0) - Running single-threaded
xfsdump: level 0 dump of node6.uplooking.com:/xfs
xfsdump: dump date: Sat Sep 14 17:39:47 2013
xfsdump: session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
xfsdump: session label: "full"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 1677743680 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 1678152296 bytes
xfsdump: dump size (non-dir files) : 1678101072 bytes
xfsdump: dump complete: 152 seconds elapsed
xfsdump: Dump Status: SUCCESS
[root@node6 ~]# 
[root@node6 ~]# xfsdump -I
file system 0:
	fs id:		467c218c-22b5-45bc-9b0e-cd5782be6e2e
	session 0:
		mount point:	node6.uplooking.com:/xfs
		device:		node6.uplooking.com:/dev/vdb1
		time:		Sat Sep 14 17:39:47 2013
		session label:	"full"
		session id:	75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
		level:		0
		resumed:	NO
		subtree:	NO
		streams:	1
		stream 0:
			pathname:	stdio
			start:		ino 131 offset 0
			end:		ino 135 offset 0
			interrupted:	NO
			media files:	1
			media file 0:
				mfile index:	0
				mfile type:	data
				mfile size:	1678152296
				mfile start:	ino 131 offset 0
				mfile end:	ino 135 offset 0
				media label:	"dumpfile"
				media id:	de67b2b5-db72-4555-9804-a050829b2179
xfsdump: Dump Status: SUCCESS

[root@node6 ~]# rm -rf /xfs/*
[root@node6 ~]# xzcat /tmp/xfs.20130914.0.xz | xfsrestore - /xfs
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.0.4 (dump format 3.0) - Running single-threaded
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: node6.uplooking.com
xfsrestore: mount point: /xfs
xfsrestore: volume: /dev/vdb1
xfsrestore: session time: Sat Sep 14 17:39:47 2013
xfsrestore: level: 0
xfsrestore: session label: "full"
xfsrestore: media label: "dumpfile"
xfsrestore: file system id: 467c218c-22b5-45bc-9b0e-cd5782be6e2e
xfsrestore: session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
xfsrestore: media id: de67b2b5-db72-4555-9804-a050829b2179
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 4 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 33 seconds elapsed
xfsrestore: Restore Status: SUCCESS
[root@node6 ~]# ls /xfs
file0  file1  file2  file3

8. 全备份
echo aaaaa >> a.txt
xfsdump -L all -M dumpfile -l 0 - /mnt | xz > /home/xfs.$(date +%Y%m%d).all0.xz
xzcat /home/xfs.20170609.all0.xz 
9. 增量
echo bbbbbbb > b.txt
xfsdump -L add -M dumpfile -l 1 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add1.xz
xzcat /home/xfs.20170609.add0.xz 
xzcat /home/xfs.20170609.add1.xz 
echo ccccc > c.txt
xfsdump -L add -M dumpfile -l 2 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add2.xz
xzcat /home/xfs.20170609.add2.xz 
echo dddddd > d.txt
xfsdump -L add -M dumpfile -l 3 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add3.xz
xzcat /home/xfs.20170609.add3.xz
10. 差异
xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /home/xfs.$(date +%Y%m%d).cha1.xz
xzcat /home/xfs.20170609.cha1.xz 
11. 完全恢复+增量恢复
xzcat /home/xfs.20170609.all0.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add1.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add2.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add3.xz | xfsrestore - /mnt/
ls
12. 完全恢复+差异恢复
xzcat /home/xfs.20170609.all0.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.cha1.xz | xfsrestore - /mnt/
ls

清除
rm -rf /var/lib
13. 练习
将/dev/sdb硬盘数据做完全备份
添加新文件1.txt
做增量备份
添加新文件2.txt
做增量备份
添加新文件3.txt
做增量备份
做差异备份


删除所有数据
方法1 恢复数据
全备+增量

方法2 恢复数据
全备+差异

10. 符号链接和硬链接

1. 文件链接方式
符号连接(软链接)
ln -s /tmp/passwd /home/

硬链接 
ln /tmp/passwd /tmp/passwd.link
2. 区别
1.命令相同 参数不同 
   软链接在创建必须绝对路径 
   硬链接都可以
   
2.硬链接的权限和源文件完全一致
   软链接的链接文件权限永远是777 和源文件权限不同
   
3.硬链接可以删除,移动源文件 
   软链接不可以删除,移动源文件
   
4.软链接inode和源文件不同
  硬链接的inode的源文件相同
  
5.软链接可以对目录生效 
  硬链接只可以对文件操作
  
6.软链接可以跨文件系统
  硬链接不可以跨文件系统

unlink 链接文件名 取消链接

3. 练习
1.简述 软连接和硬链接区别. 如何操作

十二. 网络管理

ifconfig
ip addr show
route -n  查看路由
ping
traceroute www.sina.com
arping -I eno16777736 192.168.200.54  查看ip地址是否冲突
arp -n


ens33每个字段的的含义
en表示的以太网有线接口
s代表的是可插拔
o为板载

vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT=yes     ---------------------------------------------------->是否在开机或重起时启动网卡 
NETBOOT=yes
UUID="4dcebd9d-42ec-4f10-87c1-ac5708adee2d"
IPV6INIT=yes
BOOTPROTO=none   ----------------------------------------------> dhcp  static none
TYPE=Ethernet
IPADDR=192.168.200.222         -------------------------------->  ip地址
NETMASK=255.255.255.0         -------------------------------->  子网掩码 
GATEWAY=192.168.200.1         -------------------------------->  网关 

重起网卡,重新加载配置文件

systemctl restart network

配置临时别名

ifconfig eno16777736:0  10.10.10.10/24

1. 永久别名

systemctl stop NetworkManager 
cd /etc/sysconfig/network-scripts/
cp ifcfg-eno16777736 ifcfg-eno16777736:0
[root@localhost network-scripts]# vim ifcfg-eno16777736:0
NAME="eno16777736:0"
DEVICE="eno16777736:0"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=10.10.10.10
NETMASK=255.255.255.0
GATEWAY=10.10.10.1
TYPE=Ethernet #网卡类型:为以太网
PROXY_ METHOD=none #代理方式:关闭状态
BROWSER_ ONLY=no #只是浏览器:否
BOOTPROTO=dhcp #网卡协议DHCP动态主机配置协议
DEFROUTE=yes #默认路由:是
IPV4_ FAILURE_ FATAL=no #否开启IPV4致命错误检测:否
PV6INIT=yes # IPV6是否自动初始化:是
IPV6_ AUTOCONF="yes"IPV6是否自动配置:是
IPV6_ ADDR _GEN _MODE=stable- privacy # IPV6地址生成模型
stable-privacy是一种生成IPV6的策略
NAME=ens33 #网卡名字(与DEVICE- 致)
UUID=6ac17c2b-473e- -4894-811b-4940ee7bf455#唯一标识码
DEVICE=ens33#网卡设备
ONBOOT=yes #是否激活网卡
#IPADDR=192.168.43.128#ip地址(static设置 )
#NETMASK=255.255.255.0#子网掩码
#GATEWAY= 192.168.43.1#网关
#DNS1=114.114.114.114#dns地址解析

2. NetworkManager使用

Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件

可以用命令行工具 nmcli 来控制 NetworkManager。

nmcli [ OPTIONS ] OBJECT { COMMAND | help }

OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device。

device叫网络接口,是物理设备
nmcli device help

connection是连接,偏重于逻辑设置
nmcli connection help

多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应connection

nmcli dev status   列出所有设备
nmcli con show     列出所有链接
nmcli con up       "id" 激活一个链接
nmcli con down     "id" 取消激活链接
nmcli dev dis      "dev"  down一个网卡和临时关闭一个链接
nmcli net off       关闭所有管理接口
nmcli con add       添加一个新的链接
nmcli con mod       修改一个链接
nmcli con del       "id"  删除一个链接

修改配置文件执行生效: systemctl restart network 或 nmcli con reload
nmcli命令生效:nmcli con down eth0 ; nmcli con up eth0

显示所有包括不活动连接
nmcli con show

显示所有活动连接
nmcli con show –active

显示设备状态
nmcli dev status

显示网络接口属性
nmcli dev show eno16777736


示例
创建新连接default,IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0

删除连接
nmcli con del default

创建新连接static ,指定静态IP,不自动连接
nmcli con add con-name static ifname eno16777736 autoconnect no type Ethernet ip4 192.168.100.1/24 gw4 192.168.100.254

con add – 添加新的连接
con-name – 连接名
type – 设备类型
ifname – 接口名
autoconnect no – 禁止开机自动启动


创建以个名字为home的,类型为以太网卡,绑定网卡为eth1,开机自动启动,定义ipv4地址和网关
nmcli con add con-name home ifname eno16777736 autoconnect yes type Ethernet ip4 192.168.100.1/24 gw4 192.168.100.254

查看网卡绑定信息
nmcli con show 

启动home链接
nmcli con up home

这样,home接口已经生效,可以正常使用。但同一时间只能绑定在一个接口上。平时如果工作需要,可以多设置几套配置文件,环境需要时可以进行临时的切换。

当不需要再用时可以使用:nmcli connection delete home删除

3. 练习1

添加一块新网卡
通过networkmanager  给信网卡设置ip地址
一个自动获取 
一个静态ip  IP地址为192.168.0.100

4. 修改连接设置

nmcli con mod“static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16

5. 添加额外地址

nmcli con mod eno16777736 +ipv4.addresses 10.1.1.1/24
ip addr s
nmcli con up eno16777736
ip addr s

主机名:
hostnamectl set-hostname robin.com
当前主机名和永久主机名

hostname robin.com
vim /etc/hostname
robin.com

vim /etc/hosts
192.168.200.222 robin.com

添加默认网关
route add default gw 192.168.200.222
route del default gw 192.168.200.222

6. 练习2

1.添加新网卡
通过手动修改配置文件将IP地址设置为 172.16.10.100/16
  NAME
  TYPE
  DEVICE
  BOOTPROTO
  ONBOOT
  IPADDR
  NETMASK
  GATEWAY
  DNS1
  DNS2  

2.添加新网卡
  通过NetworkManager 设置两个配置文件一个 static  一个dhcp获取

3.写出A,B,C3类地址的范围,并写出每类地址的私有地址范围?
4.192.168.1.24/28 和 192.168.1.36/28 这两个地址可不可以通信?

十三. 系统修复维护

1. root丢失,解决方法

重起系统
选择系统标题 ------->e 编辑
选择以下行 
linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=1874f157-368e-4ead-    8ab2-2ef4a81e2019 ro rhgb quiet LANG=zh_CN.UTF-8   init=/bin/bash

ctrl+x 进入系统单用户模式

2. 修复模式

方法1:

修改bios,选择光盘启动 
选择troubleshooting  ------>  rescue file system
进入修复模式 
mount /dev/sda2 /mnt    /mnt就是硬盘系统/目录
也可以选择使用 chroot /mnt 命令 切换到原来的系统

如果没有光盘,可以制作u盘启动盘 
UltraISO(以管理员身份运行) ----> 打开iso ---> 启动------->写入硬盘映像

方法2

通过网络上的live盘,进行修复 

远程拷贝:
ssh 192.168.200.216
scp /etc/passwd 192.168.200.222:/tmp    

不登录拷贝
scp 192.168.200.216:/etc/hosts /tmp/


模式修改(启动级别) 
获取当前系统模式 
systemctl get-default

设置当前系统为文本模式=level3
systemctl set-default multi-user.target
systemctl set-default graphical.target        === 5级别

/usr/lib/systemd/system/runlevel0.target    关机 
/usr/lib/systemd/system/runlevel1.target    单用户 
/usr/lib/systemd/system/runlevel2.target    无网络文本  
/usr/lib/systemd/system/runlevel3.target    有网络文本 
/usr/lib/systemd/system/runlevel4.target    保留
/usr/lib/systemd/system/runlevel5.target    图像
/usr/lib/systemd/systemrunlevel6.target    重启


3. 系统启动过程

1.加电
2.bios系统(基本输入输出系统)   boot(硬盘 u盘 网络 光盘)
3.引导程序(0磁道0扇区 512字节)  446引导程序 64分区表 2字节 magic number
4.通过boot分区 vmlinuz内核 initramfs硬件驱动  0号进程
5.1号进程(init ---- inittab----运行级别(0-6))  fstab
   0关机  1单用户  2无网络的文本模式  3有网络文件模式 4保留 5图形 6重启
6.进程启动.....
7.rc.local
8.加载文本资源(终端)
9.加载图形资源

4. 修改root密码

一.物理机
1.重起,网络启动,选择live盘
2.mount /dev/sda2 /mnt
3.chroot /mnt
4.passwd  
5.重起正常进入系统
二,虚拟机
1.设置bios光盘启动系统
2.troubleshooting----》rescue
3.选择1之后 mount /mnt/sysim..
4.chroot /mnt/sysim..
5.passwd root
6.输入你的密码
7.重起正常进入系统


5. 练习

1.简述单用户模式进入方式
2.简述光盘修复模式的进入方式
3.在光盘修复模式下,修改自己的密码为空


十四. 模块管理

1. 内核

[root@jc ~]# uname -r
3.10.0-1062.el7.x86_64
主版本号.次版本号-修订版本号.系统版本.平台
次版本号(奇数)  测试版
次版本号 (偶数) 发行版

2. 内核模块module

lsmod  查看当前系统中已加载模块
modinfo ext4  查看模块信息
insmod /lib/modules/3.10.0-327.el7.x86_64/kernel/fs/ext4/ext4.ko  加载模块
rmmod  ext4  卸载 
modprobe ext4  动态加载
ls /lib/modules/3.10.0-327.el7.x86_64/
modules.dep
modules.dep.bin


depmod -a 可以创建modules.dep.bin 文件


[root@localhost ~]# cd /lib/modules
[root@localhost modules]# ls
3.10.0-1062.el7.x86_64
[root@localhost modules]# cd 3.10.0-1062.el7.x86_64/
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build              modules.block        modules.devname      modules.softdep      vdso
extra              modules.builtin      modules.drm          modules.symbols      weak-updates
kernel             modules.builtin.bin  modules.modesetting  modules.symbols.bin
modules.alias      modules.dep          modules.networking   source
modules.alias.bin  modules.dep.bin      modules.order        updates
[root@localhost 3.10.0-1062.el7.x86_64]# rm -rf modules.dep.bin 
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build              modules.block        modules.drm          modules.symbols      weak-updates
extra              modules.builtin      modules.modesetting  modules.symbols.bin
kernel             modules.builtin.bin  modules.networking   source
modules.alias      modules.dep          modules.order        updates
modules.alias.bin  modules.devname      modules.softdep      vdso
[root@localhost 3.10.0-1062.el7.x86_64]# depmod -a 
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build              modules.block        modules.devname      modules.softdep      vdso
extra              modules.builtin      modules.drm          modules.symbols      weak-updates
kernel             modules.builtin.bin  modules.modesetting  modules.symbols.bin
modules.alias      modules.dep          modules.networking   source
modules.alias.bin  modules.dep.bin      modules.order        updates
[root@localhost 3.10.0-1062.el7.x86_64]# 

3. 内核参数

1.打开路由转发参数
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

永久保存内核参数
vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward = 1

直接生效
sysctl -p /usr/lib/sysctl.d/00-system.conf

练习:两台不同网段主机通信

A: 192.168.1.200/24
B: 10.10.3.61/24
1.通过静态路由
A:
    ip route  add 10.10.3.0/24 dev  eno16777736
B:
    ip route  add 192.168.1.0/24 dev  eno16777736

2. 通过网关通信
   C:
    网卡1:  192.168.1.1/24
    网卡2:  10.10.3.76/24
    开启路由转发:    echo 1 > /proc/sys/net/ipv4/ip_forward
   A:192.168.1.200/24
    删除现有的默认网关
    添加网关:  ip route  add default via 192.168.1.1/24 dev eno16777736
   B:10.10.3.61/24
    删除现有的默认网关
    添加网关:  ip route  add default via 10.10.3.76/24 dev eno16777736


2.禁止其他人对我执行ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
cat /proc/sys/net/ipv4/icmp_echo_ignore_all

创建块设备文件和字符设备文件
查询块设备或者字符设备主从设备号:
vim /usr/share/doc/kernel-doc-3.10.0/Documentation/devices.txt

mknod -m 660 /dev/sda8 b 8 8
命令  权限  设备名   类型   主  次

chown .disk /dev/sda8

字符设备
mknod -m 666 /dev/null c 1 3    创建null设备

4. 练习

准备3个虚拟机 按下图设置ip地址

虚拟机1                                         虚拟机2                               虚拟机3
网卡1                             网卡1                     网卡2                      网卡1
192.168.100.100/24               192.168.100.1/24     172.16.10.1/24           172.16.10.100/24

通过静态路由让虚拟机1和虚拟机3通信
通过网关虚拟机2让虚拟机1 和 虚拟机3通信

十五. 查找命令

1. which


[root@robin ~]# which useradd
/usr/sbin/useradd

2. whereis cat

[root@robin ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.g

3. grep

[root@robin ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@robin ~]# 

4. locate

[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt
[root@robin ~]# rm -rf /root/aa.txt 
[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt

updatedb  维护locate的索引
[root@robin ~]# locate aa.txt
/home/aa.txt

5. find

命令  路径  [参数]   []

根据文件名
find / -name aa.txt

根据拥有者
find / -user robin
find / -user robin -ls

所属组
find / -group upup -ls

条件  -a   -o
find / \( -user king -a -group upup \)  -ls
find / \( -user king -o -group upup \)  -ls

按类型
find / -type p -ls


按硬链接数
find / -links 20 -ls

按大小
[root@robin tmp]# find /tmp -size 30M
/tmp/30M
[root@robin tmp]# find /tmp -size +30M
/tmp/40M
/tmp/50M

[root@robin tmp]# find /tmp -size -30M
/tmp/10M
/tmp/20M

[root@robin tmp]# find /tmp -size +15M -a -size -45M
/tmp/20M
/tmp/30M
/tmp/40M

[root@robin tmp]# find /tmp -size -15M -o -size +45M

按时间:
find /tmp/ -mtime 3   正好3天 

find /tmp/ -mtime +3  3天以前

find /tmp/ -mtime -3   3天以内

find /tmp -mtime +2 -a -mtime -5


按权限
find /tmp/ -perm 420   完全匹配
find /tmp/ -perm /+240 -ls  任意匹配
find /tmp/ -perm -240 -ls   子集匹配


exec 和 ok
find /tmp -name  aa.txt  -exec rm -rf {} \;

[root@robin tmp]# find /tmp -name  cc.txt  -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? no 
[root@robin tmp]# find /tmp -name  cc.txt  -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? yes 

避免返回字符长度过长
 find / -type f | xargs file


cut -d: -f 1 /etc/passwd | xargs
cut -d: -f 1 /etc/passwd | xargs mkdir


whoami    当前用户身份 
who i am   原始登录用户身份

who
w

6. 练习1

查找系统中 最近1天修改过的文件 并拷贝到/tmp目录下
find / -mtime -1 -exec cp -r {} /tmp \;
查找系统中大于100k 小于200k的文件并拷贝到/tmp目录下
find / -\(size +100k -a -size -200k \) -exec  cp {} /tmp \;

7. 练习2

1.列举查找命令有哪些?各有什么功能?


2.查找系统中size大于10M的文件
find / -size +10M 

3.查找系统中10天以前并且是普通文件的文件
find / -mtime +10 -a -type -f 

4.找到系统中名字中含有root的文件
find / -name *root*

十六. 服务管理

1. 计划任务

1. at(24小时内计划任务)

限制一天内的操作,不能继续第二天的操作。

创建计划任务

[root@robin tmp]# at 12:41
at> touch /tmp/at.txt
at> echo 123 >> /tmp/at.txt
at> <EOT>  ------------------------------------>ctrl + d
job 1 at Tue Jun 13 12:41:00 2017

查询

[root@robin tmp]# at -l
1	Tue Jun 13 12:41:00 2017 a root

删除

[root@robin tmp]# atrm 2 

存储位置

[root@robin tmp]# cat /var/spool/at/a00003017cca62

2. crond服务

用户计划任务
创建计划任务

周期性任务,一天执行一次,一月执行一次…



* * * * * 
五个*的作用:
#分0-59
#时0-23
#日1-31
#月1-12
#周0-7 0,7都代表周日
date >> /tmp/date.txt    每分钟 
5 * * * *  date >> /tmp/date.txt    每小时第5分钟
*/5 * * * *  date >> /tmp/date.txt  每5分钟
10 10 * * *  date >> /tmp/date.txt 每天的10点10分
10 10 10 * *  date >> /tmp/date.txt 每月10号10点10分
10 10 10 10 *  date >> /tmp/date.txt  每年的10月10号10点10分
10 10 10 10 6  date >> /tmp/date.txt  或者每周6的10点10分

10 10,15,20 10 * *  date >> /tmp/date.txt  每月10号10点10分  15点10分  20点10分
10 10-20 10 * *  date >> /tmp/date.txt     每月10号10点-20点 10

3. 练习1

使用tar命令 对你的boot目录备份
要求:你当前系统时间晚2分钟
备份文件放在/tmp目录下, 备份文件名字是当前系统时间  月-日-时-分-boot.tar.gz

[root@robin ~]# vim /tmp/backup.sh
#!/bin/bash
tar -zcvf /home/$(date +%m-%d-%H)-boot.tar.gz /boot
[root@robin ~]# chmod +x /tmp/backup.sh
[root@robin ~]# crontab -e
13 10 * * 3 /tmp/backup.sh

crontab -l 查询计划任务
crontab -r 删除所有计划任务

4. 计划任务的保存位置

[root@robin home]# cat /var/spool/cron/root 

date >> /tmp/date.txt

5. 系统计划任务

cron.monthly/   每月要执行的
cron.weekly/     每周要执行的
cron.daily/         每天要执行的
cron.hourly/      每小时要执行的

访问控制文件:/etc/cron.deny 
写入该文件的用户不可以使用计划任务

日志: /var/log/cron

6. 启动关闭服务

systemctl start crond
systemctl stop crond
systemctl restart crond

systemctl restart crond.service
systemctl enable crond.service

7. 练习

要求:
备份sdb文件系统  xfsdump
周1  全备
周2  增量
周3  增量
周四 差异
周5  增量
周6  增量
周7  增量
周1  全备

[root@server backup_scripts]# cat backup_full.sh 
#!/bin/bash
xfsdump -L full -M dumpfile -l 0 - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).all_full.xz
touch /mnt/full.txt
[root@server backup_scripts]# cat backup_diff.sh 
#!/bin/bash

xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).diff.xz
touch /mnt/cha.txt
[root@server backup_scripts]# cat backup_add.sh 
#!/bin/bash

num=`cat /tmp/backup_scripts/num.txt`
new_num=$(($num+1))
xfsdump -L add -M dumpfile -l $new_num - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).add${new_num}.xz
echo $new_num > /tmp/backup_scripts/num.txt
touch /mnt/${new_num}.txt
[root@server backup_scripts]# 

2. 日志任务

rpm包日志目录:

var/log

日志服务的启动

systemctl restart rsyslog

配置文件

/etc/rsyslog.conf 

日志默认存放位置

/var/log

日志文件配置格式

AAAA.BBBB        CCCC

AAAA  产生日志的设备
BBBB  日志的级别
CCCC   保存日志的位置

产生日志的设备:authpriv mail cron uucp news local0-7用户自定义
日志级别:
debug 调试
info 正常
notice 稍微注意
warning 警告
error 错误信息
crit 危机信息
alert 必须注意
emerg 紧急信息

mail.info 表示记录日志时 记录info级别以上
mail.=info 只要info级别
mail.!=info 除了info级别

存放日志的位置:
1.发送终端上
*.info;mail.none;authpriv.none;cron.none /dev/tty3
2.发送给用户
*.info;mail.none;authpriv.none;cron.none robin
3.发送到文件
*.info;mail.none;authpriv.none;cron.none /tmp/log.log

1. 日志的集中管理

客户端添加地址,服务端打开端口

服务端 
vim /etc/rsyslog.conf
UDP
$ModLoad imudp
$UDPServerRun 514

systemctl restart rsyslog

客户端
UDP
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none               @192.168.200.222 # udp使用一个@符号

systemctl restart rsyslog

服务端
TCP
 vim /etc/rsyslog.conf 
$ModLoad imtcp
$InputTCPServerRun 514

systemctl restart rsyslog

客户端
TCP
vim /etc/rsyslog.conf 
*.info;mail.none;authpriv.none;cron.none               @@192.168.200.222 # TCP使用两个@符号

systemctl restart rsyslog

客户端添加地址,服务端打开端口

2. 实验

UDP 接收 mail日志
TCP 接收  secure日志


OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

tcp/ip4层 5层
应用层
传输层
网络层
数据链路层
物理层

3. 日志的轮转 logrotate

[root@robin logrotate.d]# cp yum test
[root@robin logrotate.d]# vim test
/tmp/test.log {
    missingok        丢失不提示
    notifempty      空文件不切
    dateext            日期格式
    daily
    rotate 7
    create 0777 root root
}

logrotate  -f /etc/logrotate.d/test

4. 练习

1.解释日志服务配置文件的内容?
2.开启日志服务的远程日志(日志集中管理)
   将mail的日志使用udp传输
   将secure的日志使用tcp传输
3.对/tmp/robin.log文件设置轮转配置
要求:
1.丢失不提示
2.空文件不轮转
3.保存7分
4.新建日志文件权限 777  拥有者为robin 所属组为robin
5.按天轮转

3. DHCP

DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,他提供了一种动态指定IP地址的配置参数的机制;是一种简化主机IP配置管理的IP标准。

  1. 工作原理

    DHCP使用客户端/服务器模型(B/S),网络管理员建立一个DHCP服务器来为客户端分配IP,同时DHCP服务器以地址租约的形式将该配置提供给发出请求的客户端。

    工作原理:
    C <---------DHCP DISCOVER -------->   S
    C <-------- DHCP OFFER ------------>  S
    C <---------DHCP REQUEST ---------->  S
    C <---------DHCP ACK  --------------> S
    
  2. 工作顺序

    1. 发现阶段:客户机以广播的方式发送DHCP discover报文来寻找DHCP服务器。
    2. 提供阶段:DHCP服务器在网络中接收到了DHCP discover报文后会做出相应,他从尚未出租的IP地址中挑选一个分配给DHCP客户机,想DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP Offer报文。
    3. 选择阶段:如果有多台DHCP服务器向DHCP客户机发送DHCP offer报文,则DHCP客户机只接受第一个收到的DHCP offer报文,然后就一广播的方式回答一个DHCP request请求报文,该报文中包含他所选定的DHCP服务器请求IP地址的内容
    4. 确认阶段:DHCP服务器收到DHCP客户机回答的request报文后,他便向DHCP客户机发送一个包含他所提供的IP地址和其他设置的DHCP ACK确认报文,告诉DHCP客户机可以使用它提供的IP地址。
    5. 重新登录:以后的DHCP客户机每次重新登录网络时,就不需要在发送DHCP discover报文了,而是直接发送包含前一次分配的DHCP request请求报文。
    6. 重新租约:DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。
  3. 动态分配IP地址

    实验环境
    服务器和客户端仅主机方式连接

    DHCP:
    安装包:
    yum -y install dhcp
    端口(udp):67
    配置文件:/etc/dhcp/dhcpd.conf
    cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

    启动服务: systemctl restart dhcpd
    日志:/var/log/messages

  4. 修改配置文件dhcpd.conf:
    拷贝过来的文件可以全部删除,只是起到模板作用。
    可以按照模板进行修改,然后将无用的信息全部删除处理
    vim /etc/dhcp/dhcpd.conf

原文件数据信息(此处可以忽略)# dhcpd.conf

#

# Sample configuration file for ISC dhcpd

#

# option definitions common to all supported networks...

option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.

#ddns-update-style none;

# If this DHCP server is the official DHCP server for the local

# network, the authoritative directive should be uncommented.

#authoritative;

# Use this to send dhcp log messages to a different log file (you also

# have to hack syslog.conf to complete the redirection).

log-facility local7;

# No service will be given on this subnet, but declaring it helps the 

# DHCP server to understand the network topology.

subnet 10.152.187.0 netmask 255.255.255.0 {
}

# This is a very basic subnet declaration.

subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20;
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}

# This declaration allows BOOTP clients to get dynamic addresses,

# which we don't really recommend.

subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;
  option broadcast-address 10.254.239.31;
  option routers rtr-239-32-1.example.org;
}

# A slightly different configuration for an internal subnet.

subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "internal.example.org";
  option routers 10.5.5.1;
  option broadcast-address 10.5.5.31;
  default-lease-time 600;
  max-lease-time 7200;
}

# Hosts which require special configuration options can be listed in

# host statements.   If no address is specified, the address will be

# allocated dynamically (if possible), but the host-specific information

# will still come from the host declaration.

host passacaglia {
  hardware ethernet 0:0:c0:5d:bd:95;
  filename "vmunix.passacaglia";
  server-name "toccata.fugue.com";
}

# Fixed IP addresses can also be specified for hosts.   These addresses

# should not also be listed as being available for dynamic assignment.

# Hosts for which fixed IP addresses have been specified can boot using

# BOOTP or DHCP.   Hosts for which no fixed address is specified can only

# be booted with DHCP, unless there is an address range on the subnet

# to which a BOOTP client is connected which has the dynamic-bootp flag

# set.

host fantasia {
  hardware ethernet 08:00:07:26:c0:a5;
  fixed-address fantasia.fugue.com;
}

# You can declare a class of clients and then do address allocation

# based on that.   The example below shows a case where all clients

# in a certain class get addresses on the 10.17.224/24 subnet, and all

# other clients get addresses on the 10.0.29/24 subnet.

class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}

shared-network 224-29 {
  subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
  }
  subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
  }
  pool {
    allow members of "foo";
    range 10.17.224.10 10.17.224.250;
  }
  pool {
    deny members of "foo";
    range 10.0.29.10 10.0.29.230;
  }
}
[root@localhost ~]# 
[root@localhost ~]# vim /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example 

  fixed-address fantasia.fugue.com;
}

# You can declare a class of clients and then do address allocation

# based on that.   The example below shows a case where all clients

# in a certain class get addresses on the 10.17.224/24 subnet, and all

# other clients get addresses on the 10.0.29/24 subnet.

class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}

shared-network 224-29 {
  subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
  }
  subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
  }
  pool {
    allow members of "foo";
    range 10.17.224.10 10.17.224.250;
  }
  pool {
    deny members of "foo";
    range 10.0.29.10 10.0.29.230;
  }
}

将其全部删除,然后再开始处理信息。
修改后的信息:

# 动态分配客户端主机的地址及掩码

subnet 192.168.40.0 netmask 255.255.255.0 {

  # 分配给客户端的ip地址的范围

  range 192.168.40.100 192.168.40.200;

  # 设置客户端dns

  option domain-name-servers 114.114.114.114;
  option domain-name "internal.example.org";

  # 配置默认客户端网关网关

  option routers 192.168.40.1;

  # 配置默认客户端广播地址

  #option broadcast-address 192.168.40.254;

  # 默认最短租约 单位:秒

  default-lease-time 600;

  # 最大租约 单位:秒

  max-lease-time 7200;
}

# 重新启动dhcp服务

systemctl restart dhcpd

客户端添加dhcp服务
nmcli con add con-name dhcp ifname eno16777736 autoconnect no type Ethernet
nmcli con up dhcp
ip addr s


查看租约文件:
服务端:/var/lib/dhcpd/dhcpd.leases

客户端:/var/lib/dhclient/


指定ip地址分配
host client1{

        # 设置一台客户端的Mac地址

​        hardware ethernet 00:0c:29:b8:ff:69;

        # 指定这台客户端的ip地址 

​        fixed-address 192.168.40.200;

}
【注】
配置过程中需要两台虚拟机,一台为服务器,一台为客户端。
服务器中安装dhcp包并修改dhcpd.conf文件,修改完重新启动
打开客户端,重新启动网络服务。同时可以再服务器端使用tail -f /var/log/messages动态查看进程信息。客户端每重启一次,在服务器端查看一次进程信息。


4. SSHD

SSH的英文全称是(Secure SHell)。通过使用SSH,可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。telnet不安全,现在此命令多用于路由和交换机上。

SSH在Linux中的服务是sshd,安装openssh后才可开启

  1. SSHD 远程登陆服务
    安装包:
    openssh-server-6.6.1p1-22.el7.x86_64 服务端
    openssh-6.6.1p1-22.el7.x86_64 客户端

  2. 配置文件:
    /etc/ssh/sshd_config

  3. 端口:22

  4. 启动服务:
    systemctl restart sshd
    日志:/var/log/secure

  5. 客户端

  6. 客户端登陆

    ssh 192.168.200.227   使用的当前帐号作为登陆用户
    ssh [email protected]  指定用户身份登陆
    

    远程拷贝

scp /root/anaconda-ks.cfg 192.168.433.132:/tmp/  # 将本机的anaconda-ks.cfg拷贝到192.168.433.132:/tmp/目录下
7-1
[root@7-1 ~]# scp /root/anaconda-ks.cfg 192.168.43.132:/tmp
[email protected]'s password: 
anaconda-ks.cfg      
7-2
[root@7-2 ~]# ls /tmp/
anaconda-ks.cfg
ssh-UprH80wpCNGp
systemd-private-125feeb64b414d9baccf12a9180f2723-bolt.service-1Ym6s0
systemd-private-125feeb64b414d9baccf12a9180f2723-chronyd.service-PzwZ5t
systemd-private-125feeb64b414d9baccf12a9180f2723-colord.service-J4veRt
systemd-private-125feeb64b414d9baccf12a9180f2723-cups.service-lblstn
systemd-private-125feeb64b414d9baccf12a9180f2723-fwupd.service-rLvsNm
systemd-private-125feeb64b414d9baccf12a9180f2723-rtkit-daemon.service-Dl72t1
tracker-extract-files.0
tracker-extract-files.1000
vmware-root_752-2957190263

不登陆拷贝

   scp 192.168.43.132:/etc/hosts /tmp/        # 将192.168.43.132的/etc/hosts 文件拷贝到本机的/tmp/目录下  
   [root@7-1 ~]# scp 192.168.43.132:/etc/hosts /tmp
   [email protected]'s password: 
   hosts                                                                              100%  158    87.6KB/s   00:00    
   [root@7-1 ~]# ls /tmp/
   hosts
   ssh-ptEpDeACHqqm
   systemd-private-0f24b70b183444348b75b77b372cfcea-bolt.service-6dQbCq
   systemd-private-0f24b70b183444348b75b77b372cfcea-chronyd.service-Ot0PzF
   systemd-private-0f24b70b183444348b75b77b372cfcea-colord.service-sxILiL
   systemd-private-0f24b70b183444348b75b77b372cfcea-cups.service-qIgtnQ
   systemd-private-0f24b70b183444348b75b77b372cfcea-fwupd.service-Gv22rx
   systemd-private-0f24b70b183444348b75b77b372cfcea-rtkit-daemon.service-UK0uc0
   tracker-extract-files.0
   tracker-extract-files.1000
   vmware-root_753-4290035625

远程执行命令
ssh 192.168.200.227 'useradd robin;echo 123 | passwd --stdin robin'
服务端:
vim /etc/ssh/sshd_config 
Port 22222

客户端
ssh 192.168.200.222 -p 22222
远程拷贝
scp -P 22222 /etc/man_db.conf 192.168.200.222:/tmp/

自定义sshd日志(sshd rsyslog)

vim /etc/ssh/sshd_config 
#SyslogFacility AUTHPRIV
SyslogFacility local5

vim /etc/rsyslog.conf 
local5.*                                                /var/log/ssh.log
systemctl restart rsyslog

允许登陆帐号
Allowusers robin zorro


密钥登陆
1.生成密钥
[root@localhost ~]# ssh-keygen 
2.将公钥拷贝到服务器 
ssh-copy-id -i 192.168.200.227

服务器公钥名称
authorized_keys

服务器建立互信
1.ssh-keygen
2.拷贝公钥给自己
ssh-copy-id -i 192.168.200.222

加载私钥
[root@localhost ~]# ssh-add

scp -r /root/.ssh/ 192.168.200.227:/root/



只有在root目录权限为550时使用sshd的公钥才不会出现错误,若在别的权限时候出现错误,则需要修改权限。
[root@7-1 ~]# ll -ld /root/
dr-xr-x---. 15 root root 4096 Nov  5 00:40 /root/

5. 文件服务器

1. NFS

1. 简介

NFS是Network File System的缩写,中文简称为网络文件系统。主要功能就是通过网络(一个局域网)让不用主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中,从客户端本地看,NFS服务器端共享目录就好像是在客户端自己的磁盘分区或者目录一样,而实际上确实远端的NFS服务器的目录。

NFS企业在企业中的应用场景,在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如BBS产品的图片、附件、头像(网站BBS的程序不要放在NFS共享中),然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。

NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。

2. NFS服务器工作原理

因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此就能够通过RPC实现服务端和客户端沟通端口信息。RPC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。

在启动NFS SERVER之前,首先要启动RPC服务(即portmap或rpcbind服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。

一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。

NFS
网络文件系统:
安装包:
setup-2.8.71-6.el7.noarch
配置文件:
/etc/exports
端口:
2049
启动服务:
systemctl  restart nfs

服务端:

配置:
vim /etc/exports
/nfs *(rw,sync)
/nfs 192.168.200.0/24(rw,sync)
/nfs 192.168.200.0/24(rw,sync) 10.10.10.0/24(ro)
/nfs 192.168.200.225(rw,sync)

/nfs 权限 

/nfs *(rw,sync,no_root_squash)

客户端

mount -t nfs 192.168.200.222:/nfs /mnt/

测试:

3种方式实现nfs自动自动挂载
[root@7-2 nfs]# cd /mnt/
[root@7-2 mnt]# ls
auto  fstab  rc
[root@7-2 mnt]# 


1.[root@7-2 ~]# vim /etc/fstab 
   192.168.43.131:/nfs /mnt/fstab nfs default 0 0
  [root@7-2 ~]#mount -a 
  
2.[root@7-2 ~]# vim /etc/auto.master
  /mnt/auto /etc/auto.auto
  [root@7-2 ~]# vim /etc/auto.auto
  nfs	-fstype=nfs,rw,sync	192.168.43.131:/nfs
  [root@7-2 ~]# systemctl restart autofs
  [root@7-2 ~]# cd /mnt/auto/
  [root@7-2 auto]# cd nfs
  [root@7-2 nfs]# ls
  a.txt  b.txt
3.[root@7-2 ~]# vim /etc/rc.local 
   mount -t nfs 192.168.43.131:/nfs /mnt/auto
   
   
   
NAS服务器(网络附加存储)
raid+lvm+nfs   

raid5+lvm---->mount point----->nfs---------------->mount使用



【注】
3快硬盘或者分区做成raid5 
做逻辑卷lvm 
配置/nfs vim /etc/exports
NFS SMB 
三台虚拟机,一台做dns(centos7-1) 一台做apache(centos7-2) ,一台做nas服务器(centos7-3)

[root@7-1 named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query     { any; };

[root@7-1 named]# vim /etc/named.rfc1912.zones 
zone "hello.com" IN {
        type master;
        file "hello.com.zone";
};

zone "world.com" IN {
        type master;
        file "world.com.zone";
};

[root@7-1 named]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.43.134

[root@7-1 named]# pwd
/var/named
[root@7-1 named]# ls
192.168.43.arpa  data        hello.com.zone  named.localhost  world.com.zone
chroot           dynamic     named.ca        named.loopback   youku.com.zone.bak
chroot_sdb       dyndb-ldap  named.empty     slaves

[root@7-1 named]# vim hello.com.zone 
$TTL 1D
@       IN SOA  dns.hello.com. root. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns
dns     IN      A       192.168.43.134
www     IN      A       192.168.43.133

[root@7-1 named]# vim world.com.zone
$TTL 1D
@       IN SOA  dns.world.com. root. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      dns
dns     IN      A       192.168.43.134
www     IN      A       10.10.11.30

[root@7-1 named]# systemctl restart named


[root@7-2 srv]# vim /etc/httpd/conf.d/vhost.conf 
<VirtualHost *:80>
        ServerName www.hello.com
        DocumentRoot /srv/hello/
</VirtualHost>
<Directory "/srv/hello">
        options indexes
        Require  all granted
</Directory>

<VirtualHost *:80>
        ServerName www.world.com
        DocumentRoot /srv/world/
</VirtualHost>

[root@7-2 srv]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.43.134



[root@7-2 srv]# mkdir /srv/hello
[root@7-2 srv]# mkdir /srv/world




[root@7-3 ~]# mdadm -C -n 3 -l 5 /dev/md5 /dev/sdb1 /dev/sdb2 /dev/sdb3
[root@7-3 ~]# mdadm -D /dev/md5

[root@7-3 ~]# pvcreate /dev/md5
  Physical volume "/dev/md5" successfully created.
[root@7-3 ~]# vgcreate vg0 /dev/md5
  Volume group "vg0" successfully created
[root@7-3 ~]# lvcreate -L 200M -n lv0 vg0 
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/vg0/lv0.
  Logical volume "lv0" created.
  
  
[root@7-3 ~]# mkfs.xfs -f /dev/vg0/lv0 
meta-data=/dev/vg0/lv0           isize=512    agcount=8, agsize=6272 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=50176, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=624, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0



root@7-3 ~]# mkdir /test
[root@7-3 ~]# mount /dev/vg0/lv0 /test/

[root@7-3 ~]# vim /etc/exports
/test *(rw,sync,no_root_squash)


[root@7-2 srv]# mount 192.168.43.137:/test /srv/hello/
[root@7-2 hello]# echo hello >> index.html


使用7-3进行测试即可

2. SAMBA

samba可以实现挂载
samba可以实现与windos共享

安装软件:
yum install samba
配置文件:
/etc/samba/smb.conf
启动服务:
systemctl restart smb

配置:

匿名模式: (share)
服务端:
vim /etc/samba/smb.conf
security = user       Cenost6之前 security = share

CentOS7 匿名模式

mkdir /smb  

security = user
map to guest = bad user       # 匿名账户登陆

[test]
        comment =  test smb server                      #描述
        path = /smb                                     #访问路径
        writable = yes                                  #可写
        browseable = yes								#可查看
        public = yes                                    #公共
        guest  ok  = yes                                #来宾用户

客户端:

yum -y install cifs-utils
smbclient -L 192.168.200.222  查看
smbclient //192.168.200.222/test  登录

验证模式:(user)
服务端

mkdir /share

security = user

[share]
        comment = test smb server
        path = /share
        writable = yes
        valid users = robin    # 有效账户

useradd robin
smbpasswd -a robin

客户端

smbclient -L //192.168.200.222
smbclient -U robin%123 //192.168.200.222/share
mount -t cifs -o username=robin,password=123 //192.168.200.222/share /mnt 

写用户少
 [share]
         comment = test smb server
         path = /share
         write list = robin  @upup
         valid users = robin zorro  @upup

读用户少
[share]
        comment = test smb server
        path = /share
        writable = yes
        valid users = robin zorro
        read list = zorro
查询所有的smb帐号
pdbedit -L

删除samba帐号 
smbpasswd -x zorro
【注】
当虚拟机与虚拟机之间正常可以使用smb命令方位服务器而Windows不能进行此操作是,可能是因为Windows系统已经记录了过了此地址的缓存,需要重新进行清空缓存,然后再进行测试。
清空缓存的命令是 net use * /del

实践:

作业:
1.3种方式挂载smb     匿名 和  user模式
2.NAS

3.

练习:
公司有以下需求:
boss  king  zorro  jean
hr   king   jack  rose
yw  zorro  tom  jerry
kf   jean   robin  ben

1.有一个boss的目录 boss可写  其他部门经理只读
2.各部门都一个目录(hr  yw kf) 各部门经理可写, 其他人只读, boss也可以查看
3.还有一个目录,全公司员工都可以写,boss没有任何权限



[boss]
        comment = boss use 
        path = /company/boss
        write list = boss
        valid users = boss king zorro jean

[hr]
        comment = hr use 
        path = /company/hr
        write list = king
        valid users = king jack rose boss

[yw]
        comment = yw use 
        path = /company/yw
        valid users = zorro tom jerry boss
        write list = zorro

[kf]
         comment = kf use 
         path = /company/kf
         valid users = jean robin ben boss
         write list = jean

[pub]
        comment = test smb server
        path = /company/pub
        writable = yes 
        valid users = @hr @yw @kf 
                                              






使用samba完成NAS  并且实现3种自动挂载




samba匿名自动挂载
[root@test ~]# cat /etc/samba/smbpass
username=root
password=

cat /etc/fstab
//192.168.1.1/smb	/mnt	cifs	defaults,multiuser,credentials=/etc/samba/smbpass 0 0

3. vsftpd

vsftpd:文件共享服务

vsftpd: 服务名称

ftp:协议名称

lftp:客户端

安装软件:

服务端
yum install vsftpd

客户端:
yum  install  lftp

端口:
port(主动)模式    21  20
pasv(被动)模式   21   随即端口

21 控制端口 
20 或  随即   数据端口

配置文件: /etc/vsftpd/vsftpd.conf
数据保存位置:/var/ftp
启动服务: systemctl restart vsftpd

工作模式 :
port模式(主动)
C                           S
1024+m---------->21
       1024+n----->
1024+n<----------20

pasv模式(被动)
C                           S
1024+m---------->21
1024+m<----- 1024+n
1024+x--------->1024+n

模式选择客户端决定

man 5 vsftpd.conf
配置:
匿名模式访问
anonymous_enable=YES
允许上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
允许删除
anon_other_write_enable=YES
上传文件允许下载
anon_umask=022
限速
anon_max_rate=20000
vsftpd更改数据目录位置:
anon_root=/home


客户端:
lftp 192.168.200.226
lftp 192.168.200.226:/> ls
lftp 192.168.200.226:/> get anaconda-ks.cfg   下载文件
lftp 192.168.200.226:/> mirror pub/    下载目录
lftp 192.168.200.226:/> put /etc/passwd
lftp 192.168.200.226:/pub> mirror -R /tmp/



用户模式访问(基于系统帐号)
useradd robin
passwd  robin

本地登陆
local_enable=YES
上传文件允许下载
local_umask=022
限速
local_max_rate=20000
限制用户切换目录(登陆目录不能有写权限)
allow_writeable_chroot=YES  允许家目录权限700的情况下登录
chroot_local_user=YES     限制所有帐号


chroot_local_user=YES 
chroot_list_enable=YES      开启名单功能(写入以下文件的用户可以切换)
chroot_list_file=/etc/vsftpd/chroot_list   


chroot_local_user=NO(默认)
chroot_list_enable=YES      开启名单功能(写入以下文件的用户不可以切换)
chroot_list_file=/etc/vsftpd/chroot_list   




 /etc/vsftpd/ftpusers  写入用户名 禁止用户登陆ftp





黑白名单禁止用户登陆
userlist_enable=YES
userlist_deny=YES
/etc/vsftpd/user_list   黑名单

userlist_enable=YES 
userlist_deny=NO
/etc/vsftpd/user_list   白名单

改变本地用户登陆位置
local_root=/nfs

客户端
lftp -u robin,123 192.168.200.226











======================================



虚拟帐号:
1.建立用户数据库文件
vim /etc/vsftpd/vftpuser.txt 
test111
pass111
test222
pass222
 
2.安装数据库转换工具
yum install libdb-utils-5.3.21-19.el7.x86_64
db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vsftpd_login.db

3.建立验证模式文件
# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

4.建立一个所有虚拟用户使用的系统用户
# useradd -d /home/vsftp virtual
# chmod 755 /home/vsftp

5.修改配置文件启用虚拟用户
guest_enable=YES # 开启虚拟用户功能
guest_username=virtual # 指定虚拟用户使用的系统用户
pam_service_name=vsftpd # 以/etc/pam.d/验证模式文件名相同

客户端测试登陆
lftp -u test111,pass111 192.168.200.226
lftp -u test222,pass222 192.168.200.226

-----------
为虚拟用户设置不同权限
方法一.
虚拟用户使用与本地用户相同权限
virtual_use_local_privs=YES
虚拟用户使用与匿名用户相同权限
virtual_use_local_privs=NO

方法二.
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftp_user_conf

mkdir /etc/vsftpd/vsftp_user_conf


[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test111 
write_enable=NO
local_max_rate=20000
local_root=/nfs

[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test222
local_max_rate=100000
local_root=/nfs















6. web服务器

HTTPD(apache web服务器)
安装包:httpd-2.4.6-45.el7.centos.4.x86_64.rpm
httpd-manual-2.4.6-45.el7.centos.4.noarch.rpm 文档
端口: 80 443
配置文件: /etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/
/etc/httpd/conf.modules.d
数据目录:/var/www/html
启动服务:systemctl restart httpd
日至存放目录:/var/log/httpd/

1. 客户端访问


elinks 172.16.10.30
elinks --dump 172.16.10.30  显示在终端上
curl 10.10.3.76

netstat -anplt
netstat -anlpu

http: 超文本传输协议: hyper text tranfer protocol
html:超文本标记语言:hyper text markup langue


vim /var/www/html/index.html
<html>
        <head>
                <title>welcome !!!!</title>
        </head>
        <body>
                <h1></h1>
                <img src='dog.jpg'>
                <h2>风景</h2>
                <img src='timg.jpg'>
        </body>
</html>

2. apache 工作模式

​ prefork 进程模式
​ worker 线程模式
​ event 事件驱动

查看工作模式
httpd -V

apache 工作模式 
prefork
worker
event

查看工作模式
httpd -V

1. prefork MPM
Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

2.worker MPM
worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些

优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用

3. event MPM
这个是Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。

注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用

3. 切换方式


vim /etc/httpd/conf.modules.d/00-mpm.conf 
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
    StartServers            10
    MinSpareServers         10
    MaxSpareServers         10
    MaxRequestWorkers      250
    MaxConnectionsPerChild   0
</IfModule>


#LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule mpm_worker_module>
    StartServers             10
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>


#LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
    StartServers             15
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>



保持连接(长连接)
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100


修改http访问默认位置
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
#DocumentRoot "/var/www/html"
DocumentRoot "/etc"
<Directory "/etc">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

其他方法
方法1:
cp -r /boot  /var/www/html
方法2:
ln -s /boot/  /var/www/html

别名
alias /down /home
<directory /home>
        options indexes
        Require all granted
</directory>

alias /upup /var
<Directory "/var">
        options indexes
        require all granted
</Directory>

4. 个人主页

vim /etc/httpd/conf.d/userdir.conf 
<IfModule mod_userdir.c>
#UserDir disabled       注释这行
UserDir public_html     打开这行,名字一般不修改
</IfModule>

【注】 
这里的public_html一般不修改,若要修改则需要将配置文件里面的有关public_html全部修改为自己设置的名字

useradd robin
useradd zorro

mkdir /home/robin/public_html
mkdir /home/zorro/public_html
echo "robin home" > /home/robin/public_html/index.html
echo "zorro home" > /home/zorro/public_html/index.html

chmod 705 /home/robin/
chmod 705 /home/zorro/

【注】
如果/home /home/robin  /home/zorro权限不是755或者705则看不到内容。
只有修改完权限才能访问


客户端测试

http://172.16.10.1/~zorro/
http://172.16.10.1/~robin/

此时显示相应的名字home

5. 访问控制

例1:允许所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
        Require all granted
</Directory>  



例2:拒绝所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
        Require all denied
</Directory> 



例3:只允许来自特定域名主机的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
        Require host google.com
</Directory> 



例4:只允许来自特定IP或IP段的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
        Require ip 192.120 192.168.100 192.168.1.1
</Directory> 



例5:允许所有访问请求,但拒绝来自特定IP或IP段的访问请求(阻止恶意IP或恶意爬虫网段的访问)
Apache2.4下的配置:
<Directory xxx/www/yoursite>
 
    <RequireAll>
        Require all granted
        Require not ip 192.168.1.1
        Require not ip 192.120 192.168.100
    </RequireAll>
 



【注】
只有在使用not ip的情况下才会使用<RequireALL></RequireALL>模块




6. 验证方式登录

alias /down     /var/ftp
<directory /var/ftp>
        options indexes            
        AuthType Basic                 类型       basic
        AuthName "welcome"             提示名字    welcome
        AuthBasicProvider file         提供基本类型 文件
        AuthUserFile /etc/httpd/conf/passwd     文件位置 /etc/httpd/conf/passwd 
        Require user robin             允许的用户
</directory>

htpasswd -c -b /etc/httpd/conf/passwd robin 123  创建新帐号 
htpasswd -b /etc/httpd/conf/passwd zorro 123   添加新帐号

【注】
第一次创建的时候使用-c参数,之后在创建用户的时候就不需要使用-c参数。
在创建过程中,格式为: 命令+参数+路径+用户名+密码
如果使用-c参数的话,是将原来的基础上的用户进行了覆盖处理。


全部有效帐号

当有很多用户都可以进行登录时,文件写入太多的用户名会麻烦,所以使用valid-user来表示有效用户
在文件/etc/httpd/conf/passwd文档中的所有有效账户都可以进行登录测试

alias /upup /var
<Directory "/var">
        Options indexes FollowSymLinks
        AuthType Basic
        AuthName "welcome!!!!!"
        AuthBasicProvider file
        AuthUserFile /etc/httpd/conf/http_passwd
        Require valid-user
</Directory>


在浏览器中进行测试,显示输入账号密码,输入登录即可。

7. 发布cgi脚本

脚本发布目录:/var/www/cgi-bin

发布cgi脚本
脚本发布目录:/var/www/cgi-bin

#!/bin/bash
echo -e "content-type: text/html\n"
date
echo "
"
uname -r http://172.16.10.1/cgi-bin/cgi.sh #!/bin/bash echo -e "Content-type: text/html\n" for i in {1..100} do sleep 1 echo $i done

8. 虚拟主机(基于域名 基于ip)

1. 基于域名虚拟主机
虚拟主机(基于域名 基于ip)
基于域名虚拟主机


NameVirtualHost *:80
<VirtualHost *:80>
     ServerName www.youku.com
     DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
     Require all granted
</Directory>
<VirtualHost *:80>
     ServerName www.tudou.com
     DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
     Require all granted
</Directory>


[root@7-1 conf.d]# mkdir /srv/tudou/
[root@7-1 conf.d]# mkdir /srv/youku
[root@7-1 srv]# ls 
tudou  youku
分别进入每个文件中创建index.html
[root@7-1 tudou]# vim index.html  输入 tudou

[root@7-1 youku]# vim index.html  输入 youku


客户端

添加解析地址
vim /etc/hosts
192.168.43.134     www.youku.com
192.168.43.134     www.tudou.com

[root@7-2 ~]# curl www.youku.com
youku
[root@7-2 ~]# curl www.tudou.com
tudou

2. 基于ip虚拟主机
基于ip虚拟主机

服务端
[root@7-1 ~]# nmcli connection add con-name ens37 type ethernet ifname ens37 ipv4.method manual ipv4.addresses 10.10.11.20/24 ipv4.gateway 10.10.11.1 connection.autoconnect true 
Connection 'ens37' (2eca39c6-aa83-4d52-a1f2-ceb426a9d26e) successfully added.
[root@7-1 ~]# nmcli connection up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)


<VirtualHost 192.168.43.134:80>
     ServerName www.youku.com
     DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
     Require all granted
</Directory>
<VirtualHost 10.10.11.20:80>
     ServerName www.tudou.com
     DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
     Require all granted
</Directory>


客户端

客户端也需要添加一块网卡或者临时ip进行测试
[root@7-1 ~]# nmcli connection add con-name ens37 type ethernet ifname ens37 ipv4.method manual ipv4.addresses 10.10.11.30/24 ipv4.gateway 10.10.11.1 connection.autoconnect true 
[root@7-1 ~]# nmcli connection up ens37

vim /etc/hosts
192.168.43.134     www.youku.com
10.10.11.20     www.tudou.com

curl 测试

[root@7-2 ~]# curl www.google.com
google
[root@7-2 ~]# curl www.baidu.com
baidu
[root@7-2 ~]# 

7. DNS

DNS:domain name server 域名解析服务器

安装与配置
安装软件:bind-9.9.4-29.el7.x86_64.rpm
端口:53
配置文件:
/etc/named.conf # 访问控制
/etc/named.rfc1912.zones # 定义域名
/var/named/ # 域名解析
启动服务:systemctl restart named

1. 正向解析

正向解析
1.vim /etc/named.conf

listen-on port 53 { any; };
allow-query     { any; };

2.vim /etc/named.rfc1912.zones

zone "youku.com" IN {
        type master;
        file "youku.com.zone";
};

3.touch /var/named/douniwan.com.zone
chmod 640 /var/named/douniwan.com.zone
chown .named /var/named/douniwan.com.zone
vim /var/named/douniwan.com.zone
$TTL 1D
@       IN SOA   dns.youku.com. root. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN  NS  dns.youku.com.
dns     IN  A   192.168.43.134
www     IN  A   192.168.43.134
~                                 


客户端测试:
[root@client ~]# host www.youku.com
www.douniwan.com has address 192.168.43.134

[root@7-2 ~]# nslookup www.youku.com
Server:		192.168.43.134
Address:	192.168.43.134#53

Name:	www.youku.com
Address: 192.168.43.134

[root@7-2 ~]# dig www.youku.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.youku.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12124
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.youku.com.			IN	A

;; ANSWER SECTION:
www.youku.com.		86400	IN	A	192.168.43.134

;; AUTHORITY SECTION:
youku.com.		86400	IN	NS	dns.youku.com.

;; ADDITIONAL SECTION:
dns.youku.com.		86400	IN	A	192.168.43.134

;; Query time: 0 msec
;; SERVER: 192.168.43.134#53(192.168.43.134)
;; WHEN: Tue Nov 10 14:03:30 CST 2020
;; MSG SIZE  rcvd: 92

Linux-基础部分_第1张图片

2. 反向解析

反向解析:

1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query     { any; };

2.vim /etc/named.rfc1912.zones
zone "43.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.43.arpa";
};

3.
touch /var/named/192.168.43.arpa
chmod 640 /var/named/192.168.43.arpa
chown .named /var/named/192.168.43.arpa

vim /var/named/192.168.43.arpa
$TTL 1D
@       IN SOA dns.hello.com. root. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.hello.com.
dns     IN      A       192.168.43.134
134     IN      PTR     www.hello.com.


客户机测试
[root@7-2 ~]# host 192.168.43.134
134.43.168.192.in-addr.arpa domain name pointer www.hello.com.
[root@7-2 ~]# nslookup 192.168.43.134
134.43.168.192.in-addr.arpa	name = www.hello.com.
[root@7-2 ~]# dig 192.168.43.134

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> 192.168.43.134
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43334
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;192.168.43.134.			IN	A

;; AUTHORITY SECTION:
.			10800	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2020111000 1800 900 604800 86400

;; Query time: 664 msec
;; SERVER: 192.168.43.134#53(192.168.43.134)
;; WHEN: Tue Nov 10 15:48:33 CST 2020
;; MSG SIZE  rcvd: 118

3. 各种写法

各种写法
$TTL 1D
@       IN SOA  dns.douniwan.com.       root. ( 0 1D 1H 1W 3H )
        IN NS dns.douniwan.com.
dns IN A 192.168.200.222
ww IN CNAME www
wwww IN CNAME www
www IN A 192.168.200.226
@   IN A 192.168.200.226
ftp.douniwan.com. IN CNAME www.douniwan.com.
*  IN A 192.168.200.226                   # 泛解析
   IN MX 5 mail.douniwan.com.
mail IN A 192.168.200.226
$GENERATE 1-254 stu$ IN A 192.168.1.$     # 连续解析



4. 转发服务器


转发服务器
vim /etc/named.conf

forward first;
forwarders { 192.168.200.222; };

forward only;
forwarders { 192.168.200.222; };

5. DNS主从服务器(时间必须同步)


DNS主从服务器(时间必须同步)
主服务器配置
1.vim /etc/named.conf 
listen-on port 53 { any; };
allow-query     { any; };

2.vim /etc/named.rfc1912.zones 
zone "upup.com" IN {
        type master;
        file "upup.com.zone";
};

3.
vim /var/named/upup.com.zone 
$TTL 1D
@       IN SOA  dns.upup.com.   root. ( 0 1D 1H 1W 3H )
        IN NS dns.upup.com.
dns IN A 192.168.200.222
www IN A 192.168.200.226
@   IN A 192.168.200.226

 chown .named /var/named/upup.com.zone
 chmod 640 /var/named/upup.com.zone

从服务器
1.vim /etc/named.conf 
listen-on port 53 { any; };
allow-query     { any; };

2.
zone "upup.com" IN {
        type slave;
        file "slaves/upup.com.zone";
        masters { 192.168.200.222; };
};


同步数据
$TTL 1D
@       IN SOA  dns1.upup.com.  root. ( 20170622 1D 1H 1W 3H )
        IN NS dns1.upup.com.
        IN NS dns2.upup.com.
dns1 IN A 192.168.200.222
dns2 IN A 192.168.200.226


dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave

6. TSIG方式传输


TSIG方式传输
主
key robinkey {
        algorithm hmac-md5;
        secret "YBMMsomw64S8BmK6/JbVaA==";
};

zone "upup.com" IN {
        type master;
        file "upup.com.zone";
        allow-transfer  { key robinkey; };
};


从
key robinkey {
        algorithm hmac-md5;
        secret "YBMMsomw64S8BmK6/JbVaA==";
};

zone "upup.com" IN {
        type slave;
        file "slaves/upup.com.zone";
        masters { 192.168.200.222 key robinkey; };
};
               


7. 子域授权


子域授权
父域
1.vim /etc/named.conf 
listen-on port 53 { any; };
allow-query     { any; };

2.vim /etc/named.rfc1912.zones 
zone "robin.com" IN {
        type master;
        file "robin.com.zone";
};

3.
vim /var/named/robin.com.zone 
$TTL 1D
@       IN SOA  dns.robin.com.  root. ( 0 1D 1H 1W 3H )
        IN NS dns.robin.com.
dns IN A 192.168.200.222
music.robin.com. IN NS dns.music.robin.com.
dns.music.robin.com. IN A 192.168.200.226
www IN A 192.168.200.226
@   IN A 192.168.200.226

chmod 640 /var/named/robin.com.zone
chown .named /var/named/robin.com.zone


子域
1.vim /etc/named.conf 
listen-on port 53 { any; };
allow-query     { any; };

2.vim /etc/named.rfc1912.zones
zone "music.robin.com" IN {
        type master;
        file "music.robin.com.zone";
};

3.
chmod 640 /var/named/music.robin.com.zone 
chown .named /var/named/music.robin.com.zone
vim /var/named/music.robin.com.zone
$TTL 1D
@       IN SOA  dns.music.robin.com.  root. ( 0 1D 1H 1W 3H )
        IN NS dns.music.robin.com.
dns IN A 192.168.200.222
www IN A 192.168.200.226
@   IN A 192.168.200.226

8. NTP时间服务器

1. 同步时间


从bios设置系统时间
hwclock -s
从系统时间设置bios
hwclock -w

2. NTP服务器的概念:

​ 网络时间协议(英语:Network Time Protocol,NTP)是以分组交换把两台电脑的时钟同步化的网络传输协议。NTP使用UDP端口123作为传输层。它是用作抵销可变延迟的影响。
NTP是仍在使用中的最古老的网络传输协议之一(在1985年前开始)。NTP最初由特拉华大学的Dave Mills 设计,他与一群志愿者仍在维护NTP。

​ NTP 网络时间协议用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。
在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。

3. 安装部署NTP服务器

1.安装时间服务器
yum install ntp ntpdate -y

2.查找时间同步服务器,把相关的配置拷贝下来
http://www.pool.ntp.org/zone/asia

server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org

3.配置时间服务器

vim /etc/ntp.conf

server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 127.127.1.0 iburst
restrict 192.168.43.0 mask 255.255.255.0 nomodify notrap

4.启动服务器并测试
[root@7-1 named]# systemctl restart ntpd
[root@7-1 named]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*162.159.200.1   10.12.2.186      3 u    3   64   17  284.621  -44.588   3.523
 5-144-132-2.sta 129.250.35.250   3 u    3   64   15  353.184  -79.531   0.802
 ntp.hkg10.hk.le 130.133.1.10     2 u    2   64   17  317.282   41.003   6.130
 LOCAL(0)        .LOCL.           5 l   73   64   16    0.000    0.000   0.000
[root@7-1 named]# 

客户端测试
ntpdate  192.168.0.5

[root@7-2 named]# ntpdate 192.168.43.134
11 Nov 14:01:20 ntpdate[7196]: adjust time server 192.168.43.134 offset 0.024837 sec
[root@7-2 named]# date -R 

[root@7-3 test]# ntpdate 192.168.43.134
11 Nov 14:01:49 ntpdate[4595]: adjust time server 192.168.43.134 offset 0.000141 sec
[root@7-3 test]# date -R
Wed, 11 Nov 2020 14:01:56 +0800
[root@7-3 test]# 

计划任务保证时间同步

注:在配置时间同步服务器时,如果同一网段中几台虚拟机之间有着某种联系时,时间一定要同步。不同步会出现错误。

9. Chrony

chrony
RHEL8使用chrony同步时间,
不再使用ntp服务
chronyd服务通过与配置的NTP服务器同步配置方式
修改配置文件:/etc/chrony.conf
图形界面: system-config-date

配置文件/etc/chrony.conf server 指定网络时钟服务器,类似ntp

查看当前网络时钟服务器信息chronyc sources -v

1.查看系统时钟与时区   timedatectl

root@7-1 named]# timedatectl 
      Local time: Wed 2020-11-11 15:44:30 CST
  Universal time: Wed 2020-11-11 07:44:30 UTC
        RTC time: Wed 2020-11-11 07:44:30
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@7-1 named]# date
Wed Nov 11 15:44:32 CST 2020

2.列出可用的时区   timedatectl list-timezones

3.设定系统时钟与时区   timedatectl set-timezone 
					timezonetimedatectl set-time hour:min:sec
4.设定是否启用网络时间同步
					timedatectl set-ntp true|false

chrony
RHEL8使用chrony同步时间,
不再使用ntp服务
chronyd服务通过与配置的NTP服务器同步配置方式
修改配置文件:/etc/chrony.conf
图形界面: system-config-date

配置文件/etc/chrony.conf     server 指定网络时钟服务器,类似ntp

查看当前网络时钟服务器信息chronyc sources -v


[root@7-1 named]# vim /etc/chrony.conf 
server(链接互联网时间服务器)
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst 
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst


[root@7-2 named]# vim /etc/chrony.conf 
client(设置10.10.11.251为时间服务器)
server 10.10.11.251 iburst
allow 192.168.43.134



10. XINETD

xinetd 超级代理服务

服务端

安装xinetd服务
yum install xinetd
安装telnet服务
yum install telnet-server 

客户端

yum install telnet 客户端
端口:3

1. 配置与服务

启动服务 
systemctl start telnet.socket
systemctl enable telnet.socket
systemctl start xinetd
systemctl enable xinetd

客户端:
telnet 192.168.43.134
[root@7-2 named]# telnet 192.168.43.134
Trying 192.168.43.134...
Connected to 192.168.43.134.
Escape character is '^]'.

Kernel 3.10.0-1062.el7.x86_64 on an x86_64

7-1 login: robin
Password: 
Last login: Wed Nov  4 20:05:01 on :0
[robin@7-1 ~]$ ls
Desktop  Documents  Downloads  Music  Pictures  Public  public_html  Templates  Videos
[robin@7-1 ~]$ 

注意,不能使用root帐号直接登陆。需要使用普通账号进行登录。
【注】
Telnet服务一般不使用,因为传输过程中需要使用明文传输,中间容易被抓包发现。

2. tftp服务

tftp服务

安装软件:

客户端
yum install tftp-server 

服务端
yum install tftp

配置文件:
/etc/xinetd.d/tftp

端口:69
数据目录: /var/lib/tftpboot/

[root@7-1 named]# systemctl restart xinetd
[root@7-1 named]# ss -anplu
UNCONN      0      0                       *:69                                  *:*                   users:(("xinetd",pid=12551,fd=5)

配置
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

服务器端:
需要拷贝数据到tftp的数据目录下,然后客户端才可以使用tftp下载文件
[root@7-1 tftpboot]# cp /etc/passwd /var/lib/tftpboot/
[root@7-1 tftpboot]# ls
passwd
[root@7-1 tftpboot]# cd
[root@7-1 ~]# 


客户端:
[root@localhost ~]# tftp 192.168.43.134
tftp> get passwd

[root@7-2 ~]# tftp 192.168.43.134
tftp> get passwd
tftp> [root@7-2 ~]# 
[root@7-2 ~]# ls
aa               a.txt    Documents  initial-setup-ks.cfg  passwd    Public     Videos
anaconda-ks.cfg  Desktop  Downloads  Music                 Pictures  Templates




11. MAIL

邮件服务器:
MUA:邮件用户代理 foxmail outlook
MTA:邮件传输代理 sendmail postfix
MDA:邮件投递代理
SMTP:简单邮件传输协议

postfix
安装:
yum install postfix
配置文件:
/etc/postfix/main.cf
端口:25
启动服务:systemctl restart postfix
日志:/var/log/maillog
邮件保存位置:/var/spool/mail/

1. 发送邮件配置

配置:
hostnamectl set-hostname mail.server7-1.com
[root@7-1 ~]# hostname
mail.server7-1.com


[root@7-1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.134 mail.server7-1.com
[root@7-1 ~]# 

配置发送

[root@7-1 ~]# vim /etc/postfix/main.cf 
myhostname = mail.server7-1.com
mydomain = mail.server7-1.com
inet_interfaces = all
#inet_interfaces = localhost

systemctl restart postfix

测试:
[root@7-1 ~]# telnet mail.server7-1.com 25     连接25端口
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
220 mail.robin.com ESMTP Postfix
ehlo mail.robin.com   ------------------------------------------- 和服务器测试连接
250-mail.robin.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected]   ----------------------------------- 发件人
250 2.1.0 Ok
rcpt to:[email protected]  ----------------------------------------  收件人
250 2.1.5 Ok
data  --------------------------------------------------------------------------内容
354 End data with <CR><LF>.<CR><LF>
hello i am robin!!!!!!
.    ---------------------------------------------------------------------------------------结束
250 2.0.0 Ok: queued as EFB753165BF3
quit -------------------------------------------------------------------------- 退出
221 2.0.0 Bye

【注】
链接时使用25号端口进行连接,未使用25端口进行连接会出现以下错误
[root@7-1 ~]# telnet server7-1.com
Trying 192.168.43.134...
telnet: connect to address 192.168.43.134: Connection refused


测试:
=======================================================================================
[root@7-1 ~]# telnet mail.server7-1.com 25     连接25端口
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
220 mail.server7-1.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
hello i am robin
.
250 2.0.0 Ok: queued as 69E411178B86
quit   
221 2.0.0 Bye
Connection closed by foreign host.


[root@7-1 ~]# cat /var/spool/mail/zorro 
From [email protected]  Thu Nov 12 10:42:15 2020
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
	by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
	for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]

hello i am robin



非交互式
echo 123456 | mail -s test [email protected]



2. 接受邮件

安装软件:
yum install dovecot
配置文件:
/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/
端口:pop3:110 imap:143
启动服务:systemctl restart dovecot

接受邮件:
安装软件:
yum install dovecot
配置文件:
 /etc/dovecot/dovecot.conf 
 /etc/dovecot/conf.d/
端口:pop3:110     imap:143
启动服务:systemctl restart dovecot

配置:
vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp

vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u

=========================================================================================
[root@7-1 conf.d]# vim /etc/dovecot/dovecot.conf 
# Protocols we want to be serving.
protocols = imap pop3 lmtp

[root@7-1 ~]# cd /etc/dovecot/conf.d/
[root@7-1 conf.d]# ls
10-auth.conf      15-lda.conf        90-plugin.conf               auth-master.conf.ext
10-director.conf  15-mailboxes.conf  90-quota.conf                auth-passwdfile.conf.ext
10-logging.conf   20-imap.conf       auth-checkpassword.conf.ext  auth-sql.conf.ext
10-mail.conf      20-lmtp.conf       auth-deny.conf.ext           auth-static.conf.ext
10-master.conf    20-pop3.conf       auth-dict.conf.ext           auth-system.conf.ext
10-ssl.conf       90-acl.conf        auth-ldap.conf.ext           auth-vpopmail.conf.ext
[root@7-1 conf.d]# vim 10-mail.conf 
#   mail_location = maildir:~/Maildir
mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n

=========================================================================================


mkdir  -p /home/zorro/mail/.imap/INBOX
chown -R zorro.zorro /home/zorro/
 

测试接受邮件:
[root@localhost ~]# telnet mail.robin.com 110     连接 110
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro -------------------------------------------------- 用户
+OK
pass 123  --------------------------------------------------  密码
+OK Logged in.
list  -------------------------------------------------------- 列出
+OK 2 messages:
1 456  
2 538
.
retr 1  ----------------------------------------------------- 查看
+OK 456 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.robin.com (mail.robin.com [172.16.90.245])
	by mail.robin.com (Postfix) with ESMTP id EFB753165BF3
	for <[email protected]>; Thu, 22 Jun 2017 10:58:31 +0800 (CST)
Message-Id: <20170622025842[email protected]>
Date: Thu, 22 Jun 2017 10:58:31 +0800 (CST)
From: [email protected]

hello i am robin!!!!!!


=========================================================================================
[root@7-1 conf.d]# mkdir -p /home/zorro/mail/.imap/INBOX
[root@7-1 conf.d]# chown -R zorro:zorro /home/zorro/
[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro  
+OK
pass 111
+OK Logged in.
list
+OK 1 messages:
1 486
.
.
-ERR Unknown command: .
retr 1
+OK 486 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
	by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
	for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]

hello i am robin
.
>quit
-ERR Unknown command: >QUIT
.
-ERR Unknown command: .
quti
-ERR Unknown command: QUTI
quit
+OK Logging out.
Connection closed by foreign host.

3. 错误处理


[root@7-1 conf.d]# cat /var/log/maillog
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Error: fchown(/home/zorro/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=1001(zorro), group based on /var/mail/zorro - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Error: Couldn't open INBOX: Permission denied
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Couldn't open INBOX: Permission denied top=0/0, retr=0/0, del=0/0, size=0


[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro  
+OK
pass 111
+OK Logged in.
-ERR [SYS/PERM] Permission denied
Connection closed by foreign host.


解决方法:
[root@7-1 conf.d]# mkdir -p /home/zorro/mail/.imap/INBOX
[root@7-1 conf.d]# chown -R zorro:zorro /home/zorro/

再进行测试
[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro  
+OK
pass 111
+OK Logged in.
list
+OK 1 messages:
1 486
.
retr 1
+OK 486 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
	by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
	for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]

hello i am robin

quit
+OK Logging out.
Connection closed by foreign host.

你可能感兴趣的:(Linux-基础阶段,linux,运维,vim)