[TOC]

网络管理

对于网络状态罕用工具包

  • net-tools 工具包

    • ifconfig 命令
    • route 命令
    • netstat 命令
  • iproute2 工具包

    • ip 命令
    • ss 命令
  • iputils-ping

    • ping 命令

      很多精简的容器中没有装置该工具

centos 7之前罕用 net-tools 工具包, 在centos 7及之后则主推 iproute2 工具包.

网络接口

命名规定

概念上, 网络接口名和网卡名在我看来指的是同一个货色.

网络接口(网卡)可能的命名

  • eno1(板载网卡)
  • ens33(PCI-E网卡)
  • enp0s3(无奈获取物理信息的PCI-E网卡)
  • eth0

    CentOS 7 应用了一致性网络设备命名, 在以上都不匹配时应用 eth0

eth0 网卡

eth0 通常指第一张网卡, 但有时候配置起因, 并不叫 eth0, 因而为了治理不便, 通常会将网卡名转换成统一的 eth0.

操作步骤如下:

  1. 编辑 /etc/default/grub 文件

    ......# 默认的配置项GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rghb quiet"# ↓# 在开端追加配置, 批改后的值如下# ↓GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rghb quiet biosdevname=0 net.ifnames=0"......
  2. 更新 grub 理论的配置

    grub2-mkconfig -o /boot/grub2/grub.cfg选项    -o, --output        指定生成的文件的地位
  3. 重启

    reboot
  4. 此时网卡名就变成了 eth0

网卡命名规定受 biosdevnamenet.ifnames 两个参数影响

biosdevnamenet.ifnames网卡名
默认01ens33
组合110em1
组合200eth0

如果一开始的网卡名并非 eth0 , 但通过批改 /etc/default/grub 等相干配置来批改网卡名为 eth0 后, 对应的 ifcfg-* 文件名须要手动批改成 ifcfg-eth0, 包含外面的配置项.

网络配置

mii-tool 命令

查看网卡物理连贯状态mii-tool [<网卡名>]留神    CentOS 6 无需写网卡名(接口), 间接执行即可    CentOS 7 须要指定网卡名(接口)能力查看状态    虚拟机上可能无奈执行(云主机也是), 会报错.

ifup 命令

启用网卡ifup <接口>

ifdown 命令

禁用网卡ifdown <接口>

ifconfig 命令 ⭐

属于 net-tools 工具包.

留神: 应用 ifconfig 批改配置因为没有写入配置文件, 因而仅限品位无效, 重启后生效.

配置网络接口ifconfig                                      # 显示以后无效网络接口状态ifconfig <接口>                                # 显示指定网络接口状态ifconfig <接口> <IP地址> [netmask <子网掩码>]        # 设置指定网络接口                                                 # 子网掩码省略时会默认设置为 255.0.0.0                                                 # !!! 留神, 操作云主机时会导致掉线且无奈重连. 须要到网页控制台关上ssh连贯改回来ifconfig <接口> up                            # 启用该网卡, 等价于 ifup <接口>ifconfig <接口> down                            # 禁用该网卡. 等价于 ifdown <接口>网卡    eth0    # 第一块网卡(网络接口)    lo        # 本地环回显示字段解释    ether XX:XX:XX:XX:XX:XX        # 网卡的MAC地址

route 命令

属于 net-tools 工具包.

网关配置命令route [选项]罕用    route -n                                               # 查看以后路由规定    route add default gw <网关ip>                             # 增加默认网关    route del default gw <网关ip>                             # 删除默认网关        route add -host <指定ip> gw <网关ip>                    # 增加一条路由规定    route add -net <指定网段> netmask <子网掩码> gw <网关ip>    # 增加一条路由规定    选项    -n    不解析主机名(默认解析主机名会比较慢)

ip 命令

属于 iproute2 工具包

ip命令是 ifconfig, route, ifup, ifdown 的命令集合体

留神: 应用 ip批改配置因为没有写入配置文件, 因而仅限品位无效, 重启后生效.

网络配置命令ip addr [ls]                        # 等价 ifconfigip addr add 10.0.0.1/24 dev eth1    # 等价 ifconfig eth1 10.0.0.1 netmask 255.255.255.0ip link set dev eth0 up                # 等价 ifup eth0 以及 ifconfig eth0 upip route add 10.0.0.0/24 via 192.168.0.1    # 等价于 route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.0.1

网络故障排除

首先检测与指标主机网络是否畅通

  1. 首先应用 ping 确认与指标主机连贯
  2. 如果 ping 不同, 则能够用 traceroutemtr 查看两头的路由状况
  3. 如果 ping 不同, 能够用 nslookup 确认域名是否解析失常

确认端口状态

  1. 应用 telnet 查看端口连贯状态
  2. 应用 tcpdump 详细分析数据包

确认服务状态

  1. 应用 netstatss

ping 命令 ⭐

通过发送ICMP报文, 检测与指标主机是否畅通ping <地址>
所属包: inetutils-ping

traceroute 命令

用于辅助 ping 命令, ping不通的时候追踪每一跳路由.

若是两头局部节点不反对 traceroute 的, 则会显示为 *

检测以后主机到指标主机的路由情况traceroute [选项] <指标主机>示例    traceroute -w 1 <指标主机>选项    -w <waittime>, --wait=<waittime>    超时等待时间, 默认5秒

mtr 命令 ⭐

用于辅助 ping 命令, ping不通的时候检测到指标主机的数据包是否有失落.

相较 traceroute 显示的内容更丰盛, 倡议应用 mtr 来确定是否丢包, 它是 ping, nslookup, traceroute 的结合体

网络诊断工具 My traceroutemtr [选项] <指标主机>选项    -n, --no-dns                            不解析主机名, 强制显示为ip    -c <count>, --report-cycles <COUNT>        设置发送ping包的数量    -r, --report                            通常配合 -c (若未指定则默认10次), 在发送完指定包后以报告模式展现后果.显示后果阐明                Packets                                Pings(提早 ms)    Host    Loss%    Snt                Last        Avg        Best    Wrst    StDev    ip地址   丢包率    ?                最初一次      均匀     最佳     最差    标准偏差(掂量数值偏离平均值的水平, 越小则偏差越小)
局部显示失落可能是因为icmp爱护机制造成的, 并不代表真的丢包.

同时只有最初的指标丢包才算真正的丢包???

nslookup 命令

查问域名对应的ipnslookup <域名>

dig 命令

发送域名查问信息包到域名服务器dig <域名>

telnet 命令 ⭐

查看端口连贯状态telnet <主机> <端口>留神:    如果是在非交互式调用 telnet 时, 须要预留工夫用于连贯和数据传输, 示例:    (usleep 100000; echo "info"; usleep 100000;) | telnet 127.0.0.1 6379

tcpdump 命令 ⭐

网络抓包工具tcpdump [选项] <表达式>选项    -i <interface>    监听网络接口(网卡), 不指定时默认eth0.                    "any" 示意监听所有    -n                不进行域名解析, 而是显示ip    -w <文件名>      将抓包后果保留到指定文件, 能够用 wireshark 图形化工具来查看该文件内容.    -s <字节>          从每个截取指定长度字节的数据, 而不是默认的68字节.    表达式    port <端口>        指定监听端口    host <主机>        指定监听主机        逻辑表达式    and                 逻辑与, 比方 port 80 and host 10.0.0.1    示例    telnet -i any port 23 -s 1500 -w /tmp/a.dump        # 抓取 telnet 的包        Flags 阐明    S        SYN    F        FIN    R        RST    P        PUSH    U        URG    W        ECN CWR    E        ECN-Echo    .        ACK    none    未设置Flags
# 装置图形化工具的 wiresharkyum install wireshark-gnome

netstat 命令 ⭐

属于 net-tools 工具包.

显示网络连接, 接口状态等信息netstat [选项]选项    显示格局    -n, --numeric        显示ip, 而不是对应的域名        -p, --program        显示对应的过程        筛选    -t, --tcp            筛选TCP    -u, --udp            筛选UDP    -l, --listening        只显示处于监听状态的

ss 命令

属于 iproute2 工具包

vs netstat

一个socket查看工具ss [选项]选项    显示格局    -n, --numeric        显示ip, 而不是对应的域名        -p, --program        显示对应的过程        筛选    -a, --all            显示处于listening和non-listening的socket(对于TCP则蕴含ESTABLISHE连贯)    -t, --tcp            显示TCP socket    -u, --udp            显示UDP socket    -l, --listening        筛选查看处于监听状态的

网络服务治理

网络服务管理程序分为两种:

  • SysV (也叫 Sys 5)

    CentOS 6 应用
  • systemd

    CentOS 7 应用

network服务和NetworkManager服务:

  • network服务是centos6的网络默认管理工具, network只能反对 service 来治理.
  • centos7重写了一遍就是NetworkManager服务,centos7默认的服务管理工具换成了systemctl.

    若是为了向下兼容, 能够禁用NetworkManager.

    systemctl disable NetworkManager.service

网络配置文件

ifcfg-*

/etc/sysconfig/network-scripts/ifcfg-* 网络配置文件(随实在网卡名称变动, 比方 ifcfg-eth0)

留神:

  1. 应用 ipipconfig 命令批改网络配置因为并未写入配置文件, 因而仅限当此无效, 重启后还是以配置文件的为准.
  2. 如果一开始的网卡名并非 eth0 , 但通过批改 /etc/default/grub 等相干配置来批改网卡名为 eth0 后, 对应的 ifcfg-* 文件名须要手动批改.

有可能呈现一个网络配置文件外面配置多个网卡的状况

ifcfg-eth0 动静(DHCP)配置文件示例

TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=no# dhcp: 动态分配# none 或 static: 动态调配BOOTPROTO=dhcpDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INT=yesIPV6_AUTOCONF=YESIPV6_DEFROUTE=YESIPV6_FAILURE_FATAL=NOIPV6_ADDR_GEN_MODE=stable-privacyNAME=eth0UUID=xxxxxxxxxxxxxxxxxDEVICE=eth0ONBOOT=YES

ifcfg-eth0 的动态配置示例(需重点把握)

TYPE=EthernetNAME=eth0DEVICE=eth0UUID=xxxxxxxxxxxxxxxxxxxxxxONBOOT=YES# dhcp:动态分配# none:动态调配BOOTPROTO=noneIPADDR=10.211.55.3NETMASK=255.255.255.0GATEWAY=10.211.5.1DNS1=114.114.114.114DNS2=8.8.8.8DNS3=8.8.4.4
UUID 能够通过 nmcli con 查看

hostname 命令

主机名的形成: <主机名称>.<域名>

显示或设置以后主机名hostname [选项]          # 查看主机名hostname [<主机名>]      # 设置主机名, 立刻失效选项    -s, --short            显示短格局主机名, 即 . 之前的局部    -i, --ip-address    显示主机的IP地址

hostnamectl

控制系统主机名(写入配置, 永恒失效)hostnamectl set-hostname <主机名>

/etc/hosts

主机名相干配置, hosts文件蕴含了IP地址和主机名之间的映射,还包含主机名的别名。

在没有域名服务器的状况下,零碎上的所有网络程序都通过查问该文件来解析对应于某个主机名的IP地址,否则就须要应用DNS服务程序来解决。通常能够将罕用的域名和IP地址映射退出到hosts文件中,实现疾速不便的拜访。

在批改主机名后, 因为有一些程序是依赖主机名工作的, 因而须要在 hosts 文件里增加 新主机名对应ip, 否则局部依赖主机名的服务会在解析主机名时超时.

eg. 主机名批改为 yjx-pc 后, 在 /etc/hosts 文件增加一条

127.0.0.1  yjx-pc

这样

SysV 管理程序

CentOS 6 应用

service 命令

service network (start|stop|restart|status)

chkconfig 命令

chkconfig --list            # 列出所有 SysV 服务chkconfig --list network    # 列出 network 服务chkconfig [--level <数字级别>...] network (off|on)    # 个别 network 会放弃开机启动

systemd 管理程序

CentOS 6 无奈应用, 仅能在 CentOS 7 应用.

systemctl 命令

在 CentOS 7 下应用的 service 命令实际上是调用 systemctl 命令.

重要

在CentOS 7下有两套网络管理工具, 一个是 network , 另一个是 NetworkManager, 在理论工作中不要同时用两套工具治理.

CentOS 6 只有 network

倡议依照集体应用习惯禁用掉其中任意一个, 在个人电脑上可能会更倡议应用 Network Manager, 在接入新网络时会主动配置较为不便, 但这个性能在服务器上比拟鸡肋, 因而服务器上个别是沿用 network, 因而举荐禁用掉 NetworkManager

管制 systemd 零碎和服务管理器systemctl <命令>命令    管理器生命周期命令    daemon-reload                # 从新加载 systemd 治理配置    单位(unit)命令    start <service>    stop <service>    restart <service>    reload <service>    status <service>        单位(unit)文件命令    list-unit-files    [<unit>]        # 列出所有 systemd 服务, 或指定服务    enable <service>    disable <service>
Systemd 入门教程:命令篇

软件包

  • 软件包管理器
  • rpm 包 和 rpm 命令
  • yum 仓库
  • 源代码编译装置
  • 内核降级
  • grub配置文件

概念 - 包管理器

包管理器是不便软件装置、卸载、解决软件依赖关系的工具.

  • RedHat(RHEL) 系列(RedHat, Fedora, CentOS) 应用 yum 包管理器, 软件安装包格局为 rpm
  • Debian、Ubuntu 应用 apt 包管理器, 软件安装包格局为 deb.

在 RedHat 中的包管理器是 rpm 包, 它应用的是 rpm 命令.

集中寄存包的中央叫做软件仓库, RedHat 中用的是 yum 仓库.

rpm 包

rpm 包格局

格局    软件名称-软件版本.零碎版本.平台.rpm示例    vim-common-7.4.10-5.el7.x86_64.rpm            软件名称: vim-common    软件版本: 7.4.10-5    零碎版本: el7                # 指 Enterprise Linux 7    平台: x86_64

rpm 包的取得形式:

  • 零碎光盘 Packages/*.rpm
  • 网上下载

rpm 命令

rpm 包的问题

  • 须要本人解决依赖关系
  • 软件包起源不牢靠
rpm - RedHat Package Managerrpm [选项] <残缺软件包名><残缺软件包名> 参数不反对通配符示例    rpm -qa                            # 查问已装置的所有软件包选项    -a, --all                         # 查问/验证所有软件包    -q, --query    [<残缺软件包名>]         # 查问软件包, 若应用 -qa 则示意查问所有已装置的, 否则仅查问指定软件包. 若要含糊查问则要 -qa | grep 配合    -l, --list                         # 列出该包的文件    -i, --install <rpm文件>            # 装置软件包, 此时若提醒依赖关系问题, 则须要先装置好被依赖的安装包. <rpm文件> 也能够指定具体的 url    -e, --erase    <残缺软件包名>...         # 卸载软件包    -U, --upgrade <残缺软件包名>         # 降级软件包, 若不存在则装置, 若已存在则会替换旧版本.        -v, --verbose    -h, --hash                         # 显示装置进度, 常常配置 -v 来显示精确的进度.    示例    rpm -ql <软件报名>                  # 查看该软件包的文件列表, 比方用于查看有哪些配置文件.⭐

yum 包管理器

/etc/yum.repos.d/*

yum 命令

yum 包管理器yum <命令><软件包> 参数反对通配符示例    yum list all|installed|available|updates            # 查看列表(默认是 all)    yum list vim*                # 查看已装置的 vim* 安装包, 倡议用这种形式来速览, 因为同时可提供以后已装置和可装置的列表.                                # ?? 有些通过 rpm 命令间接装置的如同在这无奈通过含糊查问找到命令        makecache                             # 生成元数据缓存    repolist [all|enabled|disabled]      # 查看以后已失效的源, 默认是 enabled.        install <软件包>                # 装置软件包, <软件包> 反对指定本地的 rpm 文件    remove <软件包>                # 卸载软件包    list [<软件包>]                # 查看(所有)软件包(已装置和可装置的)        list <软件包> --showduplicates    #  查看软件包的各个版本, 默认只展现最新的版本    update [<软件包>]                # 降级软件包, 若不指定"软件包"参数, 则会降级以后已装置的所有软件包.        grouplist                       # 查看系列软件包列表(蕴含了一系列的软件)    groupinfo <软件组>                # 查看某个具体系列软件包蕴含的软件列表.    groupinstall <软件组>            # 装置系列软件包    

罕用的软件组

Development Tools            # 根本开发环境

yum-config-manager 命令

治理 yum 配置选项和仓库yum-config-manager [选项]选项    --enable <repo>...        # 启用指定仓库(同时写入配置文件), 反对通配符?    --disable <repo>...        # 禁用指定仓库(同时写入配置文件), 反对通配符?    --add-repo <仓库地址>     # 增加并启用指定仓库, 地址能够是 url. 也能够通过 `yum install <仓库地址>`    示例    yum-config-manager --add-repo https://xxxx/xx.repo        # 增加某个yum仓库
可通过 yum repolist all 确认以后有哪些仓库.

yum-config-manager 命令是由 yum-utils 包提供的

yum install -y yum-utils

yum 根底源

CentOS yum 源: http://mirror.centos.org/cent...

国内镜像: https://developer.aliyun.com/...

倡议更换为国内yum镜像源

# 1. 备份旧配置mv /etc/yum.repos.d/CentOS-Base.repo{,.backup}# 2. 下载新的yum镜像源配置文件(抉择任意一个即可)wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo            # 阿里云镜像wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo    # 163镜像# 3. 从新生成缓存yum makecache
留神, yum源配置文件中有的会比拟激进, 因而默认通常是禁用的, 其配置文件中 enabled=0

EPEL 源

EPEL 源(Extra Packages for Enterprise Linux) 比拟风行,它相当于官网 CentOS/RHEL 源仓库的一个补充.

艰深的说,EPEL 能够认为是 Linux(RHEL)及其衍生发行版的一个事实上的官网仓库。

比方 redis 在epel源才有
# 1. 装置yum install epel-release# 2. 生成缓存yum makecache

或者间接用阿里的源(下面的命令不用执行)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum makecache
若出错, 则来个清缓存套餐 yum clean all

webtatic 源

提供最新的稳固版本的Web开发/托管软件,这些版本未在CentOS / RHEL散发版本中提供. php 也在这外面.

依赖 epel-release

比方 默认源只提供 php54 版本, 但webtatic提供了 php55, php71, php72 等高版本
# 1. 装置rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm# 2. 生成缓存yum makecache

city-fan 源

city-fan源 源提供的包版本很新, 但需注意兼容性, 因而该仓库装置后默认是非启用的.(enabled=0)

比方curl版本 7.64.1, 其余源的版本没这么高
# 1. 装置rpm -Uvh https://mirror.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rhel7.noarch.rpm# 2. 生成缓存yum makecache

源代码编译装置

编译装置的个别步骤

以 openresty 为例
# 1. 下载源码包wget https://openresty.org/download/openresty-1.15.8.1.tar.gz# 2. 解压tar -zxvf openresty-<VERSION># 3. 进入源代码目录cd openresty-<VERSION>/# 4. 主动配置装置所需的相干配置, 比方匹配零碎以后零碎, 内核版本, 编译器等等, 还能够指定装置目录等.## --prefix=<指定装置目录>        默认是装置到 /usr/, 会扩散开导致卸载不不便, 因而通常指定各自的目录../configure --prefix=/usr/local/openresty# 5. 编译: 将源码编译为可执行的二进制## -j<num>        指定用<num>个逻辑CPU来减速编译## ## 如果在上一阶段配置完结后提醒能够用 gmake 和 gmake install(跨平台编译), 那么此处就能够用这两个命令## 编译好的内容会先寄存在 ./build 目录make -j2# 6. 将 ./build 目录中的文件全副装置到指定目录中make install

编译常常须要依赖各种装置环境, 以下是局部罕用的

yum install gcc gcc-c++ pcre-devel openssl-devel

*-devel 个别是指开发包

降级内核

TODO

为什么要降级内核?

uname 命令

查看零碎信息uname [选项]默认是 -s选项    -a, --all            # 展现所有信息    -r, --release        # 查看操作系统(内核)的发行版本    -m, --machine        # 显示机器(硬件)类型, 比方32位, 64位等

rpm 形式降级内核

# 独自降级内核yum install kernel-<内核版本># 降级所有已安装包(包含内核)yum update

源代码编译装置内核

https://www.kernel.org

根分区至多要保留10G的空间.

以下以更新到内核 5.5.5 为例.

# 1. 装置依赖包yum install gcc gcc-c++ make ncurses-devel openssl-devel elfutils-libelf-devel flex bison # 2. 下载并解压缩内核wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.5.tar.xztar xvf linux-5.5.5.tar.xz -C /usr/src/kernels/# 3. 配置内核编译参数## 也能够通过复制以后内核配置来间接应用或是在以后零碎内核配置根底上进行批改cp /boot/config-<内核版本>.<平台> ./.configmake (menuconfig|allyesconfig|allnoconfig)# 4. 编译## -j 可应用多个CPU来减速编译make -j<cpu数> all# 5. 装置内核模块 及 内核make modules_installmake install# 6. 重启, 启动时的疏导界面(grub界面)抉择新内核版本reboot

grub

系统启动时的疏导软件叫做 grub

CentOS 6 应用的是 grub 版本, 须要本人记住设置项, 手动批改配置文件.

CentOS 7 应用的是 grub2 版本, 提供了工具来不便批改, 个别不手动批改配置文件免得出错影响工具应用.

grub 相干命令

grub2-mk-config 命令

生成 grub 配置文件grub2-mk-config [选项]选项    -o, --output <file>        # 指定生成的文件地位, grub默认应用的是在 /boot/grub2/grub.cfg

grub2-editenv 命令

示例    grub2-editenv list        # 查看以后默认疏导项

grub2-set-default 命令

示例    grub2-set-default <疏导序号, 从 0 开始>        # 设置默认疏导项

查看所有可抉择的疏导项

# 依照在文件中的程序从上到下的序号顺次是 0~Ngrep "^menu" /boot/grub2/grub.cfg

grub 配置文件

/etc/default/grub 根本的 配置grub 的配置文件, 个别间接批改该文件.

/etc/grub.d/ 具体的 配置grub 的配置文件, 对内核每一项进行更具体的配置, 个别不须要批改这部分的文件.

/boot/grub2/grub.cfg grub2 的理论配置文件, 个别不手动批改该配置文件免得出错.

grub2-mkconfig -o /boot/grub2/grub.cfg 应用 /etc/default/grub/etc/grub.d/ 来生成 /boot/grub2/grub.cfg 配置文件

/etc/default/grub

GRUB_TIMEOUT=5GRUB_DEISTIBUTOR="....."# 默认疏导项, 可通过 grub2-set-default 命令来批改.GRUB_DEFAULT=savedGRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"# 疏导时传给内核的参数## quiet     只打印必要的输入, 在出问题须要排查时可将该参数移除掉## rghb        以图形界面显示疏导进度, 在出问题须要排查时可将该参数移除掉来显示更多的信息GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rghb quiet biosdevname=0 net.ifnames=0"GRUB_DISABLE_RECOVERY="true"

文件批改后若想要失效, 则须要执行以下命令来生成grub理论应用的配置文件

grub2-mkconfig -o /boot/grub2/grub.cfg

应用单用户进入零碎以重置root明码

  1. 在系统启动到抉择疏导项时, 依据提醒输出 e 来编辑所抉择疏导项.
  2. 找到第一个 linx16 .... 行, 此时若是 CentOS6 则在开端追加 single (留神有个空格), 若是CentOS7则在开端追加 rd.break
  3. 输出 Ctrl+x 启动, 此时会进入到一个命令提示符状态 switch_root:/#

    留神, 此时 零碎根目录没有挂载在硬盘根上面

    此时的 / 目录是一个位于内存中虚构的目录, 理论的硬盘根目录位于 /sysroot 下, 同时 /sysroot默认是以只读形式挂载的.
    # 1. 以 rw 模式从新挂载文件系统## -o, --options <挂载选项, 以逗号分隔>mount -o remount,rw /sysroot# 2. 此时还是处于虚构的文件系统, 因而须要切换到到理论的系统目录下## 执行实现后命令提示符变成 sh-4.2# , 而非之前的 switch_root:/#chroot /sysroot# 3. 批改root明码echo 123456 | passwd --stdin root# 4. 敞开 SELinux## 因为 SELinux 会校验 /etc/passwd 和 /etc/shadow 文件, 因而此处敞开 SELinux## 生产环境个别也都会敞开 SELinuxsed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config# 5. 回到虚构的根目录环境exit# 6. 重启reboot

批改相干目录权限后开启selinux无奈启动

  1. 进入单用户疏导模式(即下面的通过grub疏导批改 rd.break 进入)
  2. 执行 genhomedircon 给用户的home目录从新生成selinux相干的文件标签
  3. 之后就能够失常启动

或者是在根目录下创立一个文件 touch /.autorelabel, 之后 linux 会检测到该文件, 并主动进行从新检测标签, 从新打标签(约10~20分钟).

过程治理

CentOS 7 的一号过程是 systemd, CentOS 6 的一号过程是 init

过程查看

ps 命令

查看过程状态, 具体请查看 零碎综合状态查看 种的 ps 大节.

pstree 命令

过程是树形构造的.

查看过程树形构造pstree 选项 [过程=1] 选项    -p        打印过程号

top 命令

请参照最下方的零碎综合状态查看

过程的管制命令

调整过程的优先级

nice命令

NICE 范畴从 -20~19, 值越小优先级越高, 抢占资源就越多.

以指定的优先级来执行程序nice [选项] <Command>选项    -n <优先级>        # 若不指定则默认是10

renice 命令

从新设置正在运行的过程的优先级renice [选项] <过程号>选项    -n, --priority <priority=10>        指定优先级(NICE)

过程的作业控制

过程的前后台切换个别称作过程的作业控制.

& 符号

通过在执行的命令开端追加一个 &(留神有空格), 使得过程间接进入后盾运行状态.

此时咱们的键盘输入仍旧能够被终端捕捉.

执行命令 &

ctrl + z 操作

对于在以后终端在前台执行的作业, 能够通过 ctrl+z 按键使该作业转入后盾并挂起, 作业状态变为 S(stopped)/

能够通过 jobs 查看到作业序号, 再通过 fgbg 将该作业调到前台或后盾执行.

jobs 命令

jobs 是 shell 内嵌的.

显示作业状态jobs [选项]选项    -l        额定打印出过程号

fg 命令

fg 是 shell 内嵌的.

复原作业, 令作业在前台执行fg <作业序号>

bg 命令

bg 是 shell 内嵌的.

复原作业, 令作业在后盾执行bg <作业序号>

过程的通信形式 - 信号

信号是过程间通信的根本形式之一.

管道也是一种过程间根本通信形式.
终止过程语法    kill [-s <signal>] <pid|过程名|%jobid>    发送信号给指定过程|后台作业, 未指定信号则默认发送 SIGTERM(15)    kill -l [<signal>]                        打印信号列表(或某个信号对应的数字或名称)示例    以下命令等效    kill -1 <pid>    # 发送 SIGHUP 信号给指定过程    kill -hup <pid>    # 发送 SIGHUP 信号给指定过程(信号名大小写无所谓)    kill -sighup <pid>    # 发送 SIGHUP 信号给指定过程(信号名大小写无所谓)    kill -s 1 <pid>    # 发送 SIGHUP 信号给指定过程(信号名大小写无所谓)    kill -s hup <pid>    # 发送 SIGHUP 信号给指定过程(信号名大小写无所谓)    kill -s sighup <pid>    # 发送 SIGHUP 信号给指定过程(信号名大小写无所谓)    发信号给后台作业    kill -9 %1        # 发送 KILL 信号给作业id为1的后台作业选项    -l                打印信号列表    -s <signal>        发送信号    罕用信号    除了信号 9 之外, 其余信号都被被过程捕捉并疏忽. 1号过程不可杀    SIGHUP(1)        退出终端, hangup(挂起)信号(应用 nohup 能够疏忽该信号)    SIGINT(2)        告诉前台过程终止过程(等同 `ctrl+c`)    SIGQUIT(3)        停止并生成 core 文件(等同 `ctrl+\`)    SIGKILL(9)        立刻完结过程, 不能被阻塞和捕捉解决 kill -9 <pid>    SIGTERM(15)        会杀死不能捕捉该信号的过程    SIGCONT(18)        持续(与STOP相同, 等同 `bg` 命令)    SIGSTOP(19)        暂停(等同 `ctrl+z`), 将过程放到后盾挂起(不执行状态).
ctrl+d 不是发信号, 而是用于示意一个非凡的二进制值, 示意 EOF

在一些中央很有用, 比方 cat 时会期待输出, 此时则输出结束后按 ctrl+d 示意输出完结.

守护过程(daemon)和系统日志

留神, nohup 启动的过程并不是守护过程, 概念上不要搞错.

nohup 命令

应用 nohup 命令启动的程序会疏忽 SIGHUP 信号, 就算关掉终端, 该程序仍然会持续运行.

在运行该程序的终端被敞开后, 该过程会变成孤儿过程.

该孤儿过程主动会被 1 号过程收容, 也就是其父过程会变成 1.

但仍然会占用其启动时的目录, 导致该目录无奈卸载, 这是其与守护过程的区别之一(守护过程的工作目录是 /)

该命令常常与 & 符号一起应用.

目标是运行某个程序, 并让该程序脱离该终端仍可继续执行.

使程序运行时不挂起, 不向tty输入信息, 疏忽输出.默认是把输入追加到 nohup.out 文件nohup <command>

/proc 目录

该目录是零碎内存中的信息以文件模式的映射, 并非实在存在的物理文件.

每个过程都有一个对应的 /proc/<过程号> 目录, 示意其对应的内存数据.

/proc/<过程号> 局部文件阐明

cwd            # (连贯)该过程的工作目录(此时该目录是无奈卸载的), 守护过程个别是指向 /fd            # 关上的文件描述符    |- 0    # (连贯)规范输出, 可能是 /dev/pts/0, 或 /dev/null    |- 1    # (连贯)规范输入, 可能是 /dev/pts/0, 或 /dev/null, /path/to/nohup.out, socket:[xxxx], /var/log/message    |- 2    # (连贯)规范谬误, 可能是 ...

screen 命令/工具

个别在近程连贯到服务器后, 为了避免执行到一半时连贯中断导致数据失落等, 能够通过进入 screen 环境来执行命令, 此时若连贯失落则可在下一次连贯后再次进入screen来复原之前的环境.

CentOS 7 默认没有装置该工具, 须要自行装置.

yum install screen
# 进入 screen 环境screen# 退出(detached) screen 环境## 按Ctrl+a时不会有任何提示信息, 此时再按d就退出screen环境Ctrl+a d# 查看 screen 的会话screen -ls# 复原会话screen -r <sessionid># 若掉线后查看到会话状态是 attached, 且无奈复原, 则可踢掉踢掉前一用户并复原会话screen -D -r <sessionid>

screen命令

screen [选项]示例    screen        间接进入screen环境    选项    -ls, -list            查看screen的会话    -r <sessionid>        复原到指定会话

留神: screen 默认应用的是 non-login shell, 如果要应用 login shell, 则须要执行如下语句

echo 'defshell -$SHELL' >> ~/.screenrc# 如果上述语句有效, 则应用如下语句:echo 'defshell -bash' >> ~/.screenrc
可通过 shopt login_shell 查看以后是否为 login-shell

系统日志

/var/log/

重点关注文件

  • /var/log/messages 零碎惯例日志
  • /var/log/dmesg 内核运行相干音讯(通常时启动时的内核日志)
  • /var/log/secure 平安日志
  • /var/log/cron crond打算工作日志

服务管理工具 systemctl

服务(提供常见性能的守护过程) 集中管理工具个别是:

  • service
  • systemctl

在 CentOS 7 及以上应用 systemctl 代替 service 工具.

CentOS 6中应用service治理服务, 须要本人编写简单的启停脚本, 而在 systemctl 中则简化了这一部分.

service

配置文件寄存: /etc/init.d/

治理SysV服务service <服务名> <操作>操作    status        查看服务运行状态    start        启动服务    stop        进行服务    restart        重启服务

配置开机自启动须要应用 chkconfig 命令.

service 服务运行级别的查看和设置chkconfig [选项] <服务名>示例    chkconfig --list            # 列出所有 SysV 服务的运行级别    chkconfig --list <服务名>      # 查看指定服务的运行级别    chkconfig [--level <level>...] <服务名> (on|off)    # 设置服务在指定级别下是否主动启动    罕用级别    0    关机    3    字符终端    5    图形终端    6    重启

systemctl

配置文件(服务单元)存放处: /usr/lib/systemd/system/

管制systemd零碎 以及 服务治理systemctl <命令> [<服务名>]示例    systemctl set-default multi-user.target        # 设置以字符界面启动(即多用户级别)命令    status <服务>    start <服务>    stop <服务>    restart <服务>    reload <服务>    enable <服务>                    启用开机主动启动    disable <服务>                禁用开机主动启动    list-unit-files [<服务>]    get-default                         获取以后的target    set-default <字母示意的服务级别>          设置指定的target为默认的运行级别    isolate <字母示意的服务级别>              立刻切换到指定的运行级别    示例    systemctl list-unit-files                            # 列出所有 systemd 服务    systemctl list-unit-files NetworkManager.service    # 列出 NetworkManager 服务

查看所有服务级别 /lib/systemd/system/

ls -l /lib/systemd/system/runlevel*target# runlevel0.target -> poweroff.target# runlevel1.target -> rescue.target# runlevel2.target -> multi-user.target# runlevel3.target -> multi-user.target# runlevel4.target -> multi-user.target# runlevel5.target -> graphical.target# runlevel6.target -> reboot.target

systemd 服务配置文件示例(以sshd 服务的配置文件 /usr/lib/systemd/system/sshd.service 为例)

[Unit]Description=OpenSSH server daemon            # 服务形容文本Documentation=man:sshd(8) man:sshd_config(5)After=network.target sshd-keygen.service    # 在哪些服务之后启动Wants=sshd-keygen.service[Service]Type=notifyEnvironmentFile=/etc/sysconfig/sshdExecStart=/usr/sbin/sshd -D $OPTIONS        # 对应 start 命令ExecReload=/bin/kill -HUP $MAINPID            # 对应 reload 命令KillMode=processRestart=on-failureRestartSec=42s# Specifies the maximum file descriptor number that can be opened by this process#LimitNOFILE=65535# Specifies the maximum number of processes#LimitNPROC=4096# Specifies the maximum size of virtual memory#LimitAS=infinity# Specifies the maximum file size#LimitFSIZE=infinity[Install]WantedBy=multi-user.target                    # 设置在哪个级别下主动启动

SELinux 简介

SELinux - 平安加强的 Linux 版本

DAC(自主访问控制): 利用用户权限和文件权限来管制.

MAC(强制访问控制): 过程、用户、文件 的标签三者需统一才容许拜访.

SELinux 会升高零碎性能, 因而个别生产环境都会敞开.

查看 SELinux 的命令

# 查看以后 enforce 的状态getenforce# 查看过程的标签ps -Z# 查看文件的标签ls -Z# 查看以后用户的标签id -Z

敞开 SELinux

# 办法1: 长期敞开, 重启生效setenforce 0# 办法2: 写入配置永恒失效(需重启零碎才会失效)## enforcing 强制访问控制## permissive 只正告而不管制## disabled 敞开(生产环境举荐)sed -i 's/^SELINUX=\w+/SELINUX=disabled/' /etc/selinux/config

获取 selinux 的布尔值

获取 selinux 的布尔值    on 示意容许拜访    off 示意禁止拜访    getsebool [<item>]选项    -a        # 查看所有布尔值

设置 selinux 的布尔值

设置 selinux 的布尔值setsebool 选项 <item> <value>选项    -P        # 同时写入配置文件(默认只在内存批改)value    0        # 示意off, 敞开    1        # 示意on, 关上

内存和磁盘治理

内存和磁盘使用率查看

内存使用率查看

能够应用 freetop 查看

free 命令

内存应用状况查看free [选项]选项    -b        以byte为单位    -k        以KB为单位(默认)    -m        以MB为单位    -g        以GB为单位(1024, 向下取整)    -h        依据数值大小主动应用适合的单位    输入示例                  total        used        free      shared  buff/cache   available    Mem:           1837         619         324          30         893        1006    Swap:          2047           0        2047输入字段意义解释    Mem                零碎内存    Swap            替换分区    buff/cache        过程运行时拿来作为缓存的内存, 能够通过肯定伎俩开释掉.    available         示意若 buff/cache 全开释掉后能够应用的内存数量. 个别是看这个值.
个别会设置一部分Swap以防止零碎内存耗光后登程零碎OOM(?)操作导致随机kill局部过程.

磁盘使用率查看

fdisk 命令

分区表操作工具软件只能看到分区信息, 但无奈看到其挂载的信息.fdisk [选项]选项    -l        查看分区表    交互式命令    n        增加一个分区    d        删除一个分区    p        打印分区表    w        将配置写入数据(在此之前只存在内存中)    q        退出

打印的设施信息中:

  • Boot列显示 * 示意该分区是启动分区
  • 磁盘设施的 Start、End是以扇区为单位.
  • System 示意该分区所应用的分区格局
  • Blocks 的单位是 KB

相似的命令还有 parted -l, 显示的格局会稍微不一样, 会更具体.

df 命令

报告文件系统磁盘空间使用率能够看作是 fdisk 的补充, 能够看到文件系统的挂载信息.df [选项] [<file>...]选项    -h, --human-readable        用适合的单位来展现    -T, --print-type            显示每个文件系统的类型        示例    df -hT /dev/**        # 查看硬盘/分区的空间及文件系统格局

du 命令

报告磁盘空间应用状况(理论占用空间)du [选项]选项        -s, --summarize              对每个参数只显示总和。    -h, --human-readable        用适合的单位来展现

ls 与 du 查看文件大小是不同的:

  • ls 统计的是记录到文件结尾和结尾一共占用的长度.
  • du 真正统计了文件的理论长度.

Eg. 比方用 dd 创立有空洞的文件 1GB 时, du 查看的就是实在大小, 可能就几MB, 而 ls 查看到的大小就是 1GB.

lsblk 命令

显示块设施lsblk [选项]选项    -f, --fs        显示文件系统信息

ext4 文件系统

Linux 反对多种文件系统, 常见:

  • ext4
  • xfs
  • NTFS(需装置额定软件 ntfs-3g)
CentOS 6 默认应用 ext4 文件系统.

CentOS 7 默认应用 xfs 文件系统.

NTFS 格局因为版权问题, 在 Linux 挂载后默认是只读的, 须要装置额定软件 ntfs-3g 能力写入.

ext4 文件系统根本构造

  • 超级块
  • 超级块正本
  • i节点(inode)

    文件名称, 大小, 编号, 权限信息都会在 i节点体现.

    也叫索引节点?

    留神, 文件名是记录在文件父目录的i节点中.

    引申: 文件的读权限是读取文件的数据块内容, 而目录的读权限是读取目录底下的文件名称.

  • 数据块(datablock)

    记录数据.

    数据块是挂载在i节点前面, 造成链式构造.

    ext4 和 xfs 默认创立的数据块是 4KB.

ls 命令查看的是i节点中文件大小信息, 而 du 是查看数据块的信息, 所以显示的后果会有差别.

mv 对文件改名理论影响的是其父目录i节点中的信息, 因而文件大小并不会影响批改速度.

rm 命令是将文件名和i节点的链接断开, 这就是为什么文件的大小不会影响删除的速度, 以及有些文件被删除后空间并没有真正开释.

找回被删掉的文件的原理就是搜寻磁盘上的i节点及其链接的数据块, 从而找回失落的数据.

ln 命令原理是让更多的文件名指向i节点, 应用命令 ln afile bfile, 此时会有一个新的文件名 bfile 指向同一个i节点, 应用 ls -l 命令能够看到该文件对应i节点的链接数多了1个.

应用 ln 是不能逾越文件系统的, 因为i节点信息是存在以后文件系统中.

文件、目录与 inode(i节点)

Linux文件系统里文件和文件名的关系如下图。

目录也是文件,文件里存着文件名和对应的inode编号。通过这个inode编号能够查到文件的元数据和文件内容。文件的元数据有援用计数、操作权限、拥有者ID、创立工夫、最初批改工夫等等。文件件名并不在元数据里而是在目录文件中。因而文件改名、挪动,都不会批改文件,而是批改目录文件。

借《UNIX环境高级编程》里的图说一下过程关上文件的机制。

过程每新关上一个文件,零碎会调配一个新的文件描述符给这个文件。文件描述符对应着一个文件表。表外面存着文件的状态信息(O_APPEND/O_CREAT/O_DIRECT...)、以后文件地位和文件的inode信息。零碎会为每个过程创立独立的文件描述符和文件表,不同过程是不会共用同一个文件表。正因为如此,不同过程能够同时用不同的状态操作同一个文件的不同地位。文件表中存的是inode信息而不是文件门路,所以文件门路产生扭转不会影响文件操作。

下面这部分的形容来自: https://www.lightxue.com/how-...

ln 命令

在文件之间建设连贯默认是创立硬链接, 即新建一个文件名并让其指向 <src> 的i节点.硬链接不能逾越文件系统.ln [选项] src dest选项    -s        创立软链接(符号链接), 其文件内容记录的是对应的拜访门路. 软链接的权限设置是有效的.             软链接能够逾越分区零碎

facl 性能

xfs 和 ext4 反对文件访问控制列表(facl)

ACL 示意访问控制列表Access Control List(ACL)

设置了facl权限的文件会有一个额定的 + 权限示意.

-rw-------+ 2 root root 10 2020-02-24 22:51 afile

getfacl

查看文件或目录的ACLgetfacl [选项] <file>选项    -R, --recursive         # 递归示例    getfacl -R <目录> > acldir.acl        # 备份目录的acl权限信息, 并通过 `cd <目录> && setfacl --restore acldir.acl` 来复原

setfacl

设置文件或目录的ACLsetfacl [选项] <权限> <file>示例    setfacl -m u:user1:r afile        # 给用户 user1 赋予读 afile 文件的权限    setfacl -m g:group1:rw afile    # 给组 group1 赋予读写 afile 文件的权限    setfacl -x u:user1 afile        # 移除给 user1 赋予的 afile文件权限    setfacl -x g:group1 afile        # 移除给 group1 赋予的 afile文件权限选项    -m, --modify <acl>        # 批改文件的访问控制权限, 此时 <acl> 格局为: (u|g):(<user>|<group>):(r|w|x)    -x, --remove <acl>        # 移除文件的访问控制权限, 此时 <acl> 格局为: (u|g):(<user>|<group>)        --set <acl>               # 替换以后所有的acl(能够了解为清空以后的再增加), 留神保留根本的 UGO 权限    -b, --remove-all        # 删除所有的acl权限            -R, --recursive         # 递归利用到子目录/文件        默认权限    -d, --default            # (只)设置默认的acl权限, 只对目录无效, 会被目录中创立的文件和目录继承。                            # 子文件会继承acl权限, 子目录同时会继承default权限(即递归继承)                            # 另外一种格局是: d:u:user1:rw, 也就是在权限的后面多一个 `d:`    -k, --remove-default    # 移除默认的acl权限            备份和复原ACL权限(cp -p能够保留ACP权限, 但tar等并不会保留acl权限信息, 因而能够先备份这些信息以供复原)    --restore <权限备份文件>    # 复原acl权限    

若是报错 Setfacl : Operation not supported 则示意挂载硬盘时默认没有加载acl规定, 因而须要从新挂载硬盘:

  1. 批改 /etc/fstab

    /dev/sda1             /data                ext4    defaults,acl    0 0
  2. 从新挂载

    mount -o remount /data
上述操作自己未实际操作过, 需谨慎, 避免从新挂载出错.

示例

我想将某个目录 /data/game 的权限全副分给指定用户 publisher, 同时该目录原先曾经有文件了, 属主和属组都是 root.

# 设置该目录的 default 权限setfacl -d -m u:user1:rwx /data/game# 递归更改该目录及底下文件的 facl 权限setfacl -R -m u:user1:rwx /data/game

磁盘的分区与挂载

新的磁盘的解决步骤:

  1. 分区 fdisk
  2. 格式化 mkfs
  3. 挂载 mount
  4. 写入配置 /etc/fstab

fdisk 命令

只能对小于 2TB 的进行分区

对硬盘分区留神: 会造成数据失落, 审慎fdisk示例    fdisk -l          # 查看分区表状况    fdisk <块设施>        # 对指定块设施分区    分区过程中的常用命令    n        # 创立新分区    d        # 删除某个分区    w        # 将分区信息写入磁盘    p        # 查看以后分区信息    q        # 退出

Tip.

  • 服务器上个别一块硬盘划分一个分区.
  • 如果要创立超过4个分区, 则须要调配3个主分区, 1个扩大分区, 而后在扩大分区中再创立多个逻辑分区.
  • ext4 和 xfs 默认创立的数据块是 4KB.

mkfs 命令

格式化分区示例    mkfs.ext4 [选项] <分区>        # 将分区格式化为 ext4 格局    mkfs.xfs [选项] <分区>        # 将分区格式化为 xfs 格局    选项    -f        # 强制操作

parted 命令

分区大于 2T 应应用 parted 命令, 而不是 fdisk

另一个分区工具parted <块设施>

mount 命令

挂载文件系统mount [选项] <块设施> <指标挂载目录>选项        信息查看    -l                # 查看以后挂载状况        -a, --all        # 挂载 /etc/fstab 配置文件中的所有配置        挂载选项    -t, --types <vfstype>        # 指定分区格局类型, 若不指定或指定为 "auto" 则会自行断定分区格局类型.    -o, --options <options>        # 指定挂载参数, <options> 可用逗号分隔多个参数                                # 可用参数                                #     defaults    默认                                #    noatime        读文件时不批改 inode 的拜访记录(atime), 能够进步IO性能.                                #    remount        从新挂载    --bind <src> <dest>            # 将某个目录或文件挂载到指定的目录, 而不要求<src>是块设施. 这个操作实际上是批改/替换 inode        

留神

  • mount命令并不会写入配置, 仅仅保留在内存, 因而重启后生效

    需写入 /etc/fstab/ 能力长久化
  • 指标挂载目录必须是已存在的.

对文件的操作是文件级别的操作, 是在文件系统的更上一层.

因而咱们无奈间接对相似 /dev/sdc1 这样的设施进行操作, 须要先挂载到目录, 再对目录操作.

umount 命令

卸载文件系统umount <挂载目录>|<块设施>

/etc/fstab 配置文件

格局

磁盘挂载配置文件Eg./dev/sdb1     /mnt/sdb1            ext4         defaults         0                         0<分区>        <挂载目标目录>    <文件系统>        挂载权限    批示是否硬盘备份(dump)        是否开机磁盘自检            替换分区是swap     替换分区是swap                  个别设置为0              次要是针对ext2, ext3                                                                                个别设置为0挂载权限    defaults    # 默认挂载参数

若配置写错导致重启失败, 则可通过 grub 进入单用户模式来修复该文件.

chroot 命令

以特定目录作为过程的根目录运行指定命令    - 若未指定 command, 则默认是执行 $SHELL -i (即个别是 /bin/bash -i)chroot [选项] <新root门路> [<command=$SHELL -i>]

磁盘配额的应用

把握原理和办法即可, 生产环境个别用虚拟化来限度应用资源, 包含cpu, 内存, 磁盘..

留神: root 用户是不受限的, 不应应用 root 用户来测试.

xfs

xfs 文件系统的用户磁盘配额 quota

操作步骤(以 /dev/sdb1 为例)

# 1. 确保是 xfs 文件系统mkfs.xfs /dev/sdb1# 2. 挂载文件系统mkdir /mnt/disk1mount -o uquota,gquota /dev/sdb1 /mnt/disk1# 3. (可选)批改挂载目录权限## 此处为不便测试, 设置其为 1777, 即 rwxrwxrwtchmod 1777 /mnt/disk1# 4. 查看磁盘配额状态## report 指令参数阐明### -u 显示user限额状态### -g 显示group限额状态### -i 显示inode配额状态### -b 显示block(块)配额状态### -h 以human-readable形式展现xfs_quota -x -c 'report -ugibh' /mnt/disk1# 5. 设置磁盘配额## 命令意义阐明: 以下命令是限度用户 "user1" 创立的 inode 数量软硬限度别离是5和10, 超过软限度后会有一段宽限工夫.## limit 指令参数阐明### -u 限度用户### isoft 设置inode节点数量的软限度### ihard 设置inode节点数量的硬限度### bsoft 设置block数量的软限度### bhard 设置block数量的硬限度xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /mnt/disk

替换分区(虚拟内存)的查看与创立

命令

mkswap 命令

创立替换分区mkswap

swapon 命令

须要先用 mkswap 将指标文件或设施创立为替换分区才能够挂载.

启用swapon [选项] [<文件或设施>]示例    swapon /swapfile    # /swapfile 是替换分区文件, 此处启用该文件作为替换分区.选项    -s, --summary        # 显示已应用的替换分区

swapoff 命令

敞开用于替换分区的设施swapoff [选项] [<文件或设施>]选项    -a        # 敞开所有用于替换分区的文件和设施

应用新的分区作为替换分区

此处以 /dev/sdb1 作为示例

# 格式化指定分区mkswap /dev/sdb1# 启用该分区作为替换分区swapon /dev/sdb1# 4. 写入配置以长久化cat <<"EOF" >> /etc/fstag/dev/sdb1 swap swap defaults 0 0EOF

应用文件制作替换分区

应用带空洞的文件(此处以 /swapfile 文件为例)来作为替换分区

# 1. 创立带空洞的文件dd if=/dev/zero of=/swapfile bs=4M count=1024# 2. 批改文件权限(不然会报正告)chmod 600 /swapfile# 3. 启用该文件作为替换分区swapon /swapfile# 4. 写入配置以长久化cat >> /etc/fstag <<"EOF"/swapfile swap swap defaults 0 0EOF

软件RAID的应用

RAID(磁盘阵列) 的常见级别及含意

  • RAID 0

    stripping 条带形式, 将数据拆成N份别离写到N个磁盘中(任意磁盘损坏数据就全毁了), 能够进步单盘吞吐率.

  • RAID 1

    mirroring 镜像形式, 将数据复制到另一个磁盘中(节约一块硬盘空间), 进步可靠性.

  • RAID 5

    RAID 0RAID 1 的组合和简化, 有奇偶校验, 至多须要3块硬盘: 第1,2块硬盘写数据, 第3块硬盘写奇偶校验.(轮流写数据和校验)

    坏掉任意一块磁盘数据都能够挽回, 但损坏超过1块则数据失落.

  • RAID 10

    RIAID 1RAID 0 的组合. 至多须要4块硬盘, 2块硬盘组合RAID 1, 另2块硬盘也组合 RAID 1, 再组合作 RAID 0.

    只有不是同一侧的两个硬盘都损坏数据就不会失落.

软件实现的RAID会额定占用不少CPU, 因而在工作中个别是应用RAID卡来解决.

madmn 命令

组建RAID, 尽量放弃每个磁盘大小统一, 如果不统一, 则个别会依照容量最小的来算.

软件RAID不支持系统疏导, 即 /boot 不能存储在该阵列中.

治理MD设施 - 即软件RAID# 个别约定创立的第一个硬盘是 md0mdadmin [选项] <设施>...选项    创立    -C, --create                # 创立新的阵列(array)    -a, --auto yes                # 主动批准, 对于所有提醒都是 "yes" (若已存在数据则会被清掉, 审慎)    -l, --level <RAID level>    # RAID 级别    -n, --raid-devices <num>    # 指定在阵列中有 <num> 个块设施是流动(active)的        查看    -D, --detail                # 查看 md 设施详情        卸载    -S, --stop                    # 进行 md 设施(deactive), 并开释所有资源            --scan    --verbose    示例        mdadm -D /dev/md0    # 查看创立的阵列 /dev/md0 的详情    mdadm -S /dev/md0    # 进行 md 设施

在配置好RAID后将以后的配置长久化

mdadm --detail --scan --verbose > /etc/mdadm.conf

示例: 用两个硬盘组成 RAID 1

/dev/md0    |- /dev/sdb1    |- /dev/sdc1# 1. 创立硬盘 /dev/md0 , 有2块硬盘是流动的, 由 /dev/sdb1, /dev/sdc1 组成RAID 1 级别.mdadmin -C /dev/md0 -a yes -l 1 -n 2 /dev/sd[b,c]1# 2. 长久化到配置文件, 下次开机后能力放弃软RAID失效echo DEVICE /dev/sd[b,c]1 >> /etc/mdadm.conf# 3. 追加配置长久化到文件, 下次开机后能力放弃软RAID失效mdadm -Evs >> /etc/mdadm.conf# 4. 格式化该分区, 以供失常存储数据mkfs.xfs /dev/md0

示例: 删除软RAID

# 1. umount 已挂载的 md 设施, 此处以 /dev/md0 设施为例umount /dev/md0# 2. 进行RAID设施mdadm -S /dev/md0# 3. 删除组成RAID的硬盘中的超级块数据(此处的 /dev/md0 由 /dev/sd[b,c]1 组成)# 也能够手动用其余命令毁坏掉, 比方 dd if=/dev/zero of=/dev/sdb1 bs=1M count=1mdadm --misc --zero-superblock /dev/sdb1mdadm --misc --zero-superblock /dev/sdc1# 4. 删除配置文件(此处假如该文件内只有 /dev/md0 的配置)rm -f /etc/mdadm.conf

逻辑卷治理

相干概念

在服务器上的磁盘空间只增不减

一个物理设施就是一个物理卷.

文件系统无奈跨硬盘应用.

下面的软RAID创立的 md0 也是个逻辑卷, Linux 默认应用的根目录也是用逻辑卷去治理的.

能够把N个大小不一样的硬盘拼成一个卷组, 再切割成逻辑卷.

应用逻辑卷的益处在于能够动静扩容.

首先要了解文件系统是一个分层的构造.

挂载↑文件系统↑逻辑卷↑卷组↑物理卷↑分区↑硬盘

如果要给某个逻辑卷扩容, 则须要顺次解决以下:

  1. 新增硬盘并分区 fdisk
  2. 将新分区创立为物理卷 pvcreate
  3. 将物理卷退出到需扩容的卷组 vgextend
  4. 给该卷组的指标逻辑卷扩容 lvextend
  5. 给指标卷的文件系统更新新的容量信息 xfs_growfsresize2fs

整个过程是自底向上逐层解决的.

创立逻辑卷的相干命令

物理卷

pvcreate 命令
为LVM初始化物理卷(physical volumes)pvcreate <块设施>示例    pvs /dev/sd[b,c,d]1        # 初始化物理卷 /dev/sdb1, /dev/sdc1, /dev/sdd1
pvs 命令
显示物理卷(physical volumes)信息pvs示例输入信息详解    PV                VG        Fmt        Attr    PSize            PFree    /dev/sda2        centos    lvm2    a--        <39.00g            4.00m    /dev/sdb1                lvm2    ---        <2.00g            <2.00g    /dev/sdc1                lvm2    ---        <2.00g            <2.00g    /dev/sdd1                lvm2    ---        <2.00g            <2.00g    物理卷            卷组                     物理的大小  物理卷在物理空间理论残余大小                Volume Group输入解释    lvm2        # linux 逻辑卷管理器    /dev/sda2 属于卷组 centos, 它的空间被卷组 centos 给简直全占用了.
pvremove 命令
移除物理卷的 LVM 标签pvremove [选项] 物理卷名

卷组

vgcreate 命令
创立卷组(volume groups)留神: 单个物理卷只能归属于一个卷组.vgcreate <卷组名称> <物理卷>示例    vgcreate vg1 /dev/sdb1 /dev/sdc1    # 创立卷组 vg1, 并将物理卷退出到卷组里.
vgs 命令
显示卷组(volume groups)信息vgs输入示例    VG        #PV                #LV                #SN    Attr    VSize        VFree    centos    1                2                0    wz--n-    <39.00g        4.00m    ????    卷组名      组成的物理卷数量    划分出的逻辑卷数量                卷组总大小    卷组残余大小
vgremove 命令
移除卷组    - 移除有逻辑卷的卷组时会提醒是否移除对应逻辑卷vgremove [选项] 卷组名

逻辑卷

lvcreate 命令
创立逻辑卷lvcreate [选项] <卷组名>选项    -L, --size <大小>            # 指定创立的逻辑卷的大小, eg. 100M    -n, --name <逻辑卷名>      # 指定要创立的逻辑卷的名字
lvs 命令
查看逻辑卷(logical volumes)信息lvs
lvremove 命令
从零碎上移除逻辑卷    - 只指定卷组时, 会移除该卷组上的所有逻辑卷lvremove <卷组>[/<逻辑卷>]

创立逻辑卷的过程

假如提供了2块硬盘 /dev/sdb/dev/sdc, 咱们须要创立一个叫做 vg1 的卷组, 并在该卷组上创立一个叫做 lv1 的逻辑卷, 并将其格式化后挂载在 /mnt/test 目录.

# 1. 别离创立 /dev/sdb1 和 /dev/sdc1 分区fdisk /dev/sdbfdisk /dev/sdc# 2. 初始化物理卷, 并查看物理卷详情pvcreate /dev/sd[b,c]1pvs# 3. 创立卷组, 并查看卷组详情vgcreate vg1 /dev/sdb1 /dev/sdc1vgs# 4. 创立逻辑卷, 并查看逻辑卷详情lvcreate -L 100M -n lv1 vg1lvs# 5. 格式化逻辑卷mkfs.xfs /dev/vg1/lv1# 6. 挂载并失常应用mount /dev/vg1/lv1 /mnt/test

动静扩容逻辑卷

vgextend 命令

卷组扩容, 扩容后卷组的可用空间会变大vgextend <卷组> <物理卷>...示例    vgextend centos /dev/sdd1        # 应用物理卷 /dev/sdd1 给卷组 centos 扩容.  centos 是某个卷组的名

lvextend 命令

逻辑卷扩容lvextend [选项]选项    -L, --size <大小>        # 指定扩容大小示例    lvextend -L +10G root        # 给逻辑卷 root 减少 10G空间. root 是某个逻辑卷的名.

给逻辑卷扩容后, 然而文件系统并没有变大, 因而还须要应用相应命令给具体文件系统扩容.

# xfs 文件系统xfs_growfs /dev/centos/root        # 给 /dev/centos/root 逻辑卷的文件系统扩容.# ext4 文件系统resize2fs /dev/centos/root        # 未确认

其余

dd 命令

转换和拷贝文件dd if=<input>        # /dev/zeroof=<output>        # bs=<size>            # 块大小, 每次按指定的块大小来读写. eg. 4Mcount=<num>            # 写次数seek=<block-size>    # 指标文件跳过的块数

对于 if

  • /dev/zero "输出设施", 读取时提供有限的空字符, 罕用于产生一个特定大小的空白文件.
  • /dev/null 空设施, 抛弃写入的任意数据, 读取时会立刻失去一个 EOF
  • /dev/random 随机伪设施, 提供永不为空的随机字节数据流.
  • /dev/urandom 随机伪设施, 速度比 /dev/random 快得多, 但"绝对"的不够随机. 对随机性要求不高时间接应用该伪设施即可.

资源管制

ulimit

/etc/security/limit.conf 配置文件

目前集体应用

* hard nofile 1000000 #限度单个过程最大文件句柄数(达到此限度时零碎报警)* soft nofile 1000000 #限度单个过程最大文件句柄数(达到此限度时零碎报错)* soft core unlimited   # 创立的核文件的最大尺寸* soft stack 10240      # 最大栈尺寸

ulimit 命令

shell 资源限度    若不填写限度值, 则打印对应资源限度报告.    若填写限度值, 则是设定.ulimit [选项] [<限度>]选项    -a        显示目前资源限度报告    -S        设定软限度    -H        设定硬性限度        -c        core 文件创建数量最大值    -d        程序数据段(data segment)最大值    -n        关上的文件数量最大值    -s        栈大小(stack)最大值    -b        the socket buffer size    -e        the maximum scheduling priority (`nice')    -f        the maximum size of files written by the shell and its children    -i        the maximum number of pending signals    -l        the maximum size a process may lock into memory    -m        the maximum resident set size    -p        the pipe buffer size    -q        the maximum number of bytes in POSIX message queues    -r        the maximum real-time scheduling priority    -t        the maximum amount of cpu time in seconds    -u        the maximum number of user processes    -v        the size of virtual memory    -x        the maximum number of file locks    限度值    <具体数值>         # 限度为指定的具体指, 各自单位请参阅 help ulimit    soft            # 限度为以后的 soft 值    hard            # 限度为以后的 hard 值    ulimited        # 不限度

!!! 留神

  • /etc/security/limit.conf 中的设置对于 systemd 的 service 是不失效的
  • systemd 的 service 有专门的对立配置文件 /etc/systemd/system.conf

    DefaultLimitNOFILE=100000DefaultLimitNPROC=100000

    须要从新加载配置文件

    systemctl daemon-reload
  • 针对 systemd 的特定 service, 能够批改其配置文件 /lib/systemd/system/xxx.service

    [Service]# ...LimitNOFILE=65535LimitNPROC=65535

    须要从新加载配置文件

    systemctl daemon-reloadsystemctl restart nginx.service

其余待整顿