Linux | 学习笔记

Linux | 学习笔记

用户管理

用户和组管理

#查看用户身份
[admin@CentOS8 ~]$ id admin
uid=1000(admin) gid=1000(admin)=1000(admin),10(wheel)
#切换用户,省略 username 则切换为root
[admin@CentOS8 ~]$ su - username
#从命令行创建用户
[admin@CentOS8 ~]$ sudo useradd user01
#从命令行删除用户
[admin@CentOS8 ~]$ sudo userdel -r user01
#为用户添加补充组
[admin@CentOS8 ~]$ sudo usermod -aG wheel user01
#锁定用户账户
[admin@CentOS8 ~]$ sudo usermod -L user01
#解锁用户账户
[admin@CentOS8 ~]$ sudo usermod -U user01
#从命令行更改现有的组
[admin@CentOS8 ~]$ sudo groupmod -n newname oldname

密码与期限管理

#调整密码期限策略
[admin@CentOS8 ~]$ sudo chage -m 0 -M 90 -W 7 -I 14 user01
#强制下次登陆更改密码
[admin@CentOS8 ~]$ sudo chage -d 0 user01
#显示用户的密码详情
[admin@CentOS8 ~]$ sudo chage -l user01
#使账户于指定日期到期
[admin@CentOS8 ~]$ sudo chage -E 2020-12-31 user01
#锁定账户并使其到期
[admin@CentOS8 ~]$ sudo usermod - L -e 2021-03-01 user01
#使不以交互方式登陆系统
[admin@CentOS8 ~]$ sudo usermod -s /sbin/nologin user01

编辑 etc/login.defs 文件中的密码期限配置项,以设置默认的密码期限策略。

date 命令可用于计算未来的日期。 -u 选项报告 UTC 时间。

[admin@CentOS8 ~]$ date -d "+30 days" -u
2021年 01月 30日 星期六 10:58:51 UTC

确定未来 180 天后的日期。将%F格式用于 date 命令以获取确切的值。

[admin@CentOS8 ~]$ date -d "+180 days" +%F
2021-06-29

权限管理

普通权限

#符号法更改权限
[admin@CentOS8 ~]$ chmod a+x test
#数字法更改权限
[admin@CentOS8 ~]$ chmod 755 test
#更改文件所有权
[admin@CentOS8 ~]$ chown user01 test_file
#更改整个目录树所有权
[admin@CentOS8 ~]$ chown -R user01 test_dir
#更改组所有权
[admin@CentOS8 ~]$ chown :admins test_dir
#同时更改所有者和组
[admin@CentOS8 ~]$ chown visitor:guests test_dir

sudo权限

#配置sudo权限1
[admin@CentOS8 ~]$ sudo visudo
#配置sudo权限2
[admin@CentOS8 ~]$ vim /etc/sudoers.d/group01
%group01 ALL=/etc/rc.d/init.d/httpd reload,[...]
user01 ALL=(ALL) NOPASSWD:ALL

在RHEL7+中, wheel 组的所有成员都可使用 sudo 以任何用户身份运行命令,包括 root 在内。

sudo 的主配置文件为 etc/sudoers,默认情况下, etc/sudoers 还包含 etc/sudoers.d 目录中所有文件的内容,作为配置文件的一部分。这样管理员只需将相应的文件放入该目录,即可为用户添加 sudo 访问权限。

文件特殊权限(SetUID、SetGID、StickyBIT)

特殊权限 对文件的影响 对目录的影响
u+s (suid) (4) 以拥有文件的用户身份执行文件 无影响
g+s (sgid) (2) 以拥有文件的组身份执行文件 在目录中最新创建的文件其组所有者与目录的组所有者相匹配
o+t (sticky) (1) 无影响 对目录具有写权限的用户仅可删除其所拥有的文件而无法删除其他用户所拥有的文件
#更改特殊权限
[admin@CentOS8 ~]$ chmod u+s /usr/bin/vim
[admin@CentOS8 ~]$ chmod 4755 ftest

文件系统属性权限(chattr)

[root@CentOS8 ~]# echo "for test" > testattr
[root@CentOS8 ~]# chattr +a testattr
[root@CentOS8 ~]# rm -rf testattr
rm: 无法删除'testattr': 不允许的操作
[root@CentOS8 ~]# lsattr testattr
-----a-------------- testattr

文件访问控制列表(ACL权限)

#查看分区是否开启ACL权限
[admin@CentOS6 ~]$ dumpe2fs -h /dev/sda3
[admin@CentOS8 ~]$ dmesg | grep -i acl
#开启分区ACL权限
[admin@CentOS6 ~]$ mount -o remount,acl /
#也可以通过修改/etc/fstab 文件永久开启 ACL 权限
[admin@CentOS6 ~]$ vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1
[admin@CentOS6 ~]$ mount -o remount /
#查询ACL权限
[admin@CentOS8 ~]$ getfacl filename
#设定拥有者ACL权限
[admin@CentOS8 ~]$ setfacl -m u::rwx filename
[admin@CentOS8 ~]$ setfacl -m g::rwx filename
#设定指定用户ACL权限
[admin@CentOS8 ~]$ setfacl -m u:user01:rwx filename
[admin@CentOS8 ~]$ setfacl -m g:group1:rwx filename
#设定递归ACL权限(只能赋予目录),"-"表示不允许访问
[admin@CentOS8 ~]$ setfacl -Rm u:user01:- dirname/
#设定默认ACL权限(只能赋予目录)
[admin@CentOS8 ~]$ setfacl -Rm d:u:user01:rwX dirname/
#使用getfacl作为输入
[admin@CentOS8 ~]$ getfacl file-A | setfacl --set-file=- file-B
#--set-file选项可接受来自文件或stdin的输入,短划线字符(-)指定使用stdin
#删除文件的ACL权限(全部删除)
[admin@CentOS8 ~]$ setfacl -b dirname/
#删除默认ACL权限
[admin@CentOS8 ~]$ setfacl -k dirname/
#删除指定用户或组的ACL权限
[admin@CentOS8 ~]$ setfacl -x u:user01 filename
#设置最大有效权限mask
[admin@CentOS8 ~]$ setfacl -m u:admin:rwx test_acl
[admin@CentOS8 ~]$ setfacl -m m:rx test_acl
[admin@CentOS8 ~]$ getfacl test_acl
# file: test_acl
# owner: root
# group: root
user::rw-
user:admin:rwx                  #effective:r-x
group::r--
mask::r-x
other::r--

在以递归方式设置ACL时,大写字母X可用于表示:如果文件还没有相关的执行权限,则只应设置目录(而非常规文件)的执行权限,这一行为与chmod相同。

网络管理

验证网络配置

#列出系统上可用的所有网络接口
[admin@CentOS8 ~]$ ip link show
#显示ip地址
[admin@CentOS8 ~]$ ip addr show ens3
#显示性能统计信息
[admin@CentOS8 ~]$ ip -s link show ens3
#显示路由信息
[admin@CentOS8 ~]$ ip route
#追踪流量采用的路由
[admin@CentOS8 ~]$ tracepath access.redhat.com
[admin@CentOS8 ~]$ traceroute access.redhat.com
#端口和服务故障排除
[admin@CentOS8 ~]$ ss -tulnp
[admin@CentOS8 ~]$ netstat -tuanp

通过 nmcli 管理网络

#显示所有网络设备的状态
[admin@CentOS8 ~]$ nmcli dev status
#显示所有连接的列表
[admin@CentOS8 ~]$ nmcli con show
#列出某个连接的当前设置
[admin@CentOS8 ~]$ nmcli con show name
#显示所有活动的连接
[admin@CentOS8 ~]$ nmcli con show --active
#添加新的网络连接(DHCP)
[admin@CentOS8 ~]$ nmcli con add con-name eno2 type ethernet ifname eno2
#添加新的网络连接(静态)
[admin@CentOS8 ~]$ nmcli con add con-name eno2 type ethernet ifname eno2 \
ipv4.addresses 192.168.0.5/24 ipv4.gateway 192.168.0.254 \
ipv6.addresses 2001:db8:0:1::c000:207/64 ipv6.gateway 2001:db8:0:1::1
#激活网络连接
[admin@CentOS8 ~]$ nmcli con up linkname
#停用网络接口
[admin@CentOS8 ~]$ nmcli dev dis devicename
#更改连接的设置
[admin@CentOS8 ~]$ nmcli con mod name ipv4.addresses 192.168.0.5/24 ipv4.gateway 192.168.0.254
#删除网络连接
[admin@CentOS8 ~]$ nmcli con del name
#重新加载配置文件(在手动编辑配置文件后使用)
[admin@CentOS8 ~]$ nmcli con reload

如果某个连接之前通过 DHCPv4 获取 ipv4 信息,现改为静态方式,则 ipv4.method 也应从 auto 改为 manual;同样,如果某个连接之前通过 DHCPv6 或 SLAAC 获取 ipv6 信息,现改为静态方式,则 ipv6.method 也应从 auto 或 dhcp 改为 manual;否则连接在激活后可能挂起或无法成功完成,或除了静态地址外还从 DHCP 或 SLAAC 获取网络地址。

通过编辑网络配置文件管理网络

nm-settingsifcfg-* 指令的比较

NMCLI CON MOD IFCFG-* FILE 作用
ipv4.method manual BOOTPROTO=none IPv4以静态方式配置
ipv4.method auto BOOTPROTO=dhcp DHCP动态配置IPv4地址
ipv4.addresses “192.168.0.5/24 192.168.0.254” IPADDR0=192.0.2.1
PREFIX0=24
GATEWAY0=192.0.2.254
设置静态IP,如果连接设置了多个,则 ifcfg-* 指令将以123等结尾,而非以0结尾
ipv4.dns 8.8.8.8 DNS0=8.8.8.8 修改 /etc/resolv.conf 为此服务器
ipv4.dns-search example.com DOMAIN=example.com 修改 /etc/resolv.conf 以在 search 指令中使用此域
ipv4.ignore-auto-dns true PEERDNS=no 忽略来自DHCP的DNS信息
ipv6.method manual IPV6_AUTOCONF=no IPv6以静态方式配置
ipv6.method auto IPV6_AUTOCONF=yes 使用路由器播发的SLAAC配置网络
ipv6.method dhcp IPV6_AUTOCONF=no
DHCPV6C=yes
使用DHCPv6配置网络
ipv4.addresses “2001:db8::a/64 2001:db8::1” IPV6ADDR=2001:db8::a/64
IPV6_DEFAULTGW=2001:db8::1
设置静态IP,如果连接设置了多个地址,IPV6_SECONDARIES将采用空格分隔的地址/前缀定义的双引号列表
ipv6.dns … DNS0= … 修改 /etc/resolv.conf 为此服务器
ipv6.dns-search example.com DOMAIN=example.com 修改 /etc/resolv.conf 以在 search 指令中使用此域
ipv6.ignore-auto-dns true IPV6_PEERDNS=no 忽略来自DHCP的DNS信息
connection.autoconnect yes ONBOOT=yes 在系统引导时自动激活此连接
connection.id ens3 NAME=ens3 此连接名称
connection.interface-name ens3 DEVICE=ens3 连接与具有此名称的网络接口绑定
802-3-ethernet.mac-address … HWADDR= … 连接与具有此MAC地址的网络接口绑定

ifcfg 文件的 ipv4 配置选项

静态 动态 通用
BOOTPROTO=none BOOTPROTO=dhcp DEVICE=ens3
IPADDR0=192.0.2.1 NAME=“static-ens3”
PREFIX0=24 ONBOOT=yes
GATEWAY0=192.0.2.254 UUID=f3e8(…)ad3e
DEFROUTE=yes USERCTL=yes
DNS1=8.8.8.8
[admin@CentOS8 ~]$ vim /etc/sysconfig/network-scripts/ifcfg-name
[admin@CentOS8 ~]$ nmcli con reload
[admin@CentOS8 ~]$ nmcli down "static-ens3"
[admin@CentOS8 ~]$ nmcli up "static-ens3"

配置主机名和名称解析

在 RHEL7+ 中,静态主机名存储在 /etc/hostname 中,更早之前的版本将其存储为 /etc/sysconfig/network 文件中的变量。

#利用/etc/hosts文件测试主机名解析
[admin@CentOS8 ~]$ getent hosts hostname
#DNS配置文件
[admin@CentOS8 ~]$ cat /etc/resolv.conf
#更新DNS
[admin@CentOS8 ~]$ nmcli con mod ID ipv4.dns IP
[admin@CentOS8 ~]$ nmcli con down ID
[admin@CentOS8 ~]$ nmcli con up ID
#追加DNS
[admin@CentOS8 ~]$ nmcli con mod ID +ipv4.dns IP
#测试DNS名称解析
[admin@CentOS8 ~]$ host hostname
#显示当前主机名
[admin@CentOS8 ~]$ hostname
#临时更改主机名
[admin@CentOS8 ~]$ hostname testname
#查看主机名状态
[admin@CentOS8 ~]$ hostnamectl status
#永久更改主机名
[admin@CentOS8 ~]$ hostnamectl set-hostname servera.lab.com

系统管理

进程管理

#列出当前进程
[admin@CentOS8 ~]$ ps aux
[admin@CentOS8 ~]$ ps -ef
#列出所有可用信号的名称和编号
[admin@CentOS8 ~]$ kill -l
#根据PID向进程发送信号,默认为TERM
[admin@CentOS8 ~]$ kill -9 5194
#根据命令名称向多个进程发送信号
[admin@CentOS8 ~]$ killall httpd
#向—个或多个符合选择条件的进程发送信号
[admin@CentOS8 ~]$ pkill -U user0
#列出登陆用户及当前运行的进程
[admin@CentOS8 ~]$ w -h -u bob
#查找并列出符合条件的进程ID
[admin@CentOS8 ~]$ pgrep -l -u bob
#实时进程监控
[admin@CentOS8 ~]$ top
#显示进程树
[admin@CentOS8 ~]$ pstree

控制作业

#在后台运行作业
[admin@CentOS8 ~]$ sleep 10000 &
[1] 5947
#使用jobs命令显示Bash为特定会话跟踪的作业列表
[admin@CentOS8 ~]$ jobs
[1]+ Running    sleep 10000 &
#将后台作业转至前台
[admin@CentOS8 ~]$ fg %1
sleep 10000
#启动后台已暂停的进程
[admin@CentOS8 ~]$ bg %1
[1]+ sleep  sleep 10000 &
#挂起任务
[keyboard] Ctrl+z
#后台命令脱离登录终端运行
[admin@CentOS8 ~]$ nohup [命令] &
#显示与作业相关的信息
[admin@CentOS8 ~]$ ps j
   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
   2206    2207    2207    1931 pts/0       2249 S     1000   0:00 -bash
   2207    2245    2245    1931 pts/0       2249 S     1000   0:00 sleep 10000
   2207    2249    2249    1931 pts/0       2249 R+    1000   0:00 ps j

系统资源查看

#显示系统的启动时间和平均负载
[admin@CentOS8 ~]$ uptime
#确定系统有多少cpu
[admin@CentOS8 ~]$ lscpu
#监控系统资源
[admin@CentOS8 ~]$ vmstat
#显示开机时内核检测信息
[admin@CentOS8 ~]$ dmesg
#查看内存使用状态
[admin@CentOS8 ~]$ free
#查看CPU信息
[admin@CentOS8 ~]$ cat /proc/cpuinfo
#查看本机登陆用户信息
[admin@CentOS8 ~]$ w or who
#查看系统与内核相关信息
[admin@CentOS8 ~]$ uname
#查询当前 Linux 系统的发行版本
[admin@CentOS8 ~]$ lsb_release -a
#判断当前系统位数
[admin@CentOS8 ~]$ uname -m
#带发行版Logo图像的系统信息显示工具
[admin@CentOS8 ~]$ neofetch

系统定时任务

计划延迟的用户作业(at TIMESPEC)

#查看定时任务
[admin@CentOS8 ~]$ at -l 或 atq
#实时监控延迟作业的队列
[admin@CentOS8 ~]$ watch atq
#添加定时任务,手动输入,键入Ctrl+D以完成输入
[admin@CentOS8 ~]$ at 5pm august 3 2021
at> echo "hello world"
#使用echo添加定时任务
[admin@CentOS8 ~]$ echo "date >> /home/student/myjob.txt" | at now +3min
#借助脚本文件使用输出重定向添加定时任务
[admin@CentOS8 ~]$ at noon +4 days < myscript
#删除定时任务
[admin@CentOS8 ~]$ atrm JOBNUMBER

计划周期性用户作业(crontab)

命令 预期用途
crontab -l 列出当前用户的计划作业
crontab -r 删除当前用户的所有作业
crontab -e 编辑当前用户的作业
crontab filename 删除所有作业,并替换为从 filename 读取的作业
如果没有指定文件,则使用 stdin
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

*表示始终;x-y表示范围;x,y;表示列表;*/x;表示时间间隔。

周期性系统作业在两 位萱定义 etc/crontab 文件和 etc/cron.d/ 目录中的文件。要计划周期性系统作业,应始终在 etc/cron.d 目录下创建自定义 crontab 文件。

crontab 系统中还包含需要每小时、每天、每周和每月运行的脚本的存储库。这些存储库分别对应于名为 /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/ 的目录。再次申明,这些目录中包含可执行的 shell 脚本,而不是 crontab 文件。

SYSTEMD 定时器

systemd 定时器单元的配置文件中有一个 [Timer] 部分,它指示了启动同名服务的频率。

[admin@CentOS8 ~]$ cat /usr/lib/systemd/system/sysstat-collect.timer
# /usr/lib/systemd/system/sysstat-collect.timer
# (C) 2014 Tomasz Torcz 
#
# sysstat-11.7.3 systemd unit file:
#        Activates activity collector every 10 minutes

[Unit]
Description=Run system activity accounting tool every 10 minutes

[Timer]
OnCalendar=*:00/10

[Install]
WantedBy=sysstat.service

参数OnCalendar=*:80/18表示该定时器单元将每10分钟激活一次相应的单元(sysstat-collect.service)。

不过,您可以指定更复杂的时间间隔。例如,针对OnCalendar参数,值 2019-03-*12:35,37,39:16 将使定时器单元在2019年整个3月的每—天分别于 12:35:16 12:37:16 12:39:16 激活相应的服务单元。

您也可以使用参数(如OnUnitActiveSec)来指定相对定时器。例如,OnUnitActive5ec=15min选项将使定时器单元在该定时器单元最后一次激活其相应单元15分钟后触发相应的单元。

#更改定时器单元配置文件后,使用 systemctl daemon-reload 命令以确保 systemd 知道这些更改。
#该命令将重新加载 systemd 管理器配置。
[admin@CentOS8 ~]$ systemctl daemon-reload
#重新加载 systemd 管理器配置后,使用以下 systemctl 命令激活定时器单元。
[admin@CentOS8 ~]$ systemctl enable --now <unitname>.timer

管理临时文件

systemd 启动系统后,其中—个最先启动的服务单元是 systemd-tmpfiles-setup 。该服务运行命令 systemd-tmpfiles --create --remove。此命令从 /usr/lib/tmpfiles.d/*.conf /run/tmpfiles.d/*.conf /etc/tmpfiles.d/*.conf 读取配置文件。系统会删除这些配置文件中标记要删除的任何文件和目录,并且会创建标记要创建(或修复权限)的任何文件和目录,并使其拥有正确的权限(如有必要)。

为确保长期运行的系统不会用陈旧数据填满磁盘,一个名为 systemd-tmpfiles-clean.timer 的systemd 定时器单元会定期触发 systemd-tmpfiles-clean.service 来执行 systemd-tmpfiles --clean 命令。

[admin@CentOS8 ~]$ systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min         #系统启动后15分钟生效
OnUnitActiveSec=1d      #单元激活后24小时生效

手动清理临时文件、配置文件优先级、指导练习详见《RH134》

服务管理

Linux | 学习笔记_第1张图片

systemctl命令摘要

systemctl status start stop reload reload-or-restart restart mask unmask enable disable list-dependencies UNIT

不要编辑 /usr/lib/systemd/system 目录下的文件。对于systemd而言,您可以将单元文件复制到 /etc/systemd/system/ 目录并编辑该副本,systemd进程会解析您的自定义副本,而非 /usr/lib/systemd/system/ 目录下的文件。

磁盘管理

查看磁盘状态

#查看所有已经挂载的分区和光盘
[admin@CentOS8 ~]$ mount
#列出文件系统的整体磁盘使用量
[admin@CentOS8 ~]$ df -hT
#评估文件系统的磁盘使用量(常用在推估目录所占容量)
[admin@CentOS8 ~]$ du \tmp
#列出系统上的所有磁盘列表
[admin@CentOS8 ~]$ lsblk
#列出装置的UUID等参数
[admin@CentOS8 ~]$ blkid
#列出磁盘的分区表类型与分区信息
[admin@CentOS8 ~]$ parted /dev/vda print
#查看Linux系统启动中硬盘相关信息
[admin@CentOS8 ~]$ dmesg | grep sda
#查看文件系统的详细信息
[admin@CentOS8 ~]$ dumpe2fs sda
[admin@CentOS8 ~]$ xfs_info 挂载点|装置文件名
#扫描连接到计算机的块设备并检索文件系统UUID
[admin@CentOS8 ~]$ lsblk -fs
#查看系统所有硬盘及分区
[admin@CentOS8 ~]$ fdisk -l

对磁盘进行分区

[root@CentOS8 ~]# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will
be lost. Do you want to continue?
Yes/No? yes
(parted) mkpart
Partition name?  []? userdata
#指示要在分区上创建的文件系统类型,如xfs、ext4。
#这并不会在分区上创建文件系统,它仅仅指示分区类型。
File system type?  [ext2]? xfs
Start? 2048s
End? 1000MB
(parted) quit
Information: You may need to update /etc/fstab.
#运行 udevadm settle 命令。此命令会等待系统检测新分区并在 dev 目录下创建关联的设备文件。
[root@CentOS8 ~]# udevadm settle
#作为交互模式的替代方法,您也可以按如下方式创建分区:
[root@CentOS8 ~]# parted /dev/sdb mkpart usersdata xfs 2048s 1000MB

创建文件系统

[root@CentOS8 ~]# mkfs.xfs /dev/sdb1
[root@CentOS8 ~]# parted /dev/sdb print

挂载文件系统

[root@CentOS8 ~]# mount /dev/sdb1 /mnt
挂载光盘:mount -t iso9660 /dev/cdrom /mnt/cdrom/
挂载优盘:mount -t vfat /dev/sdb1 /mnt/usb/
[root@CentOS8 ~]# vim /etc/fstab

/dev/mapper/centos8-root /                          xfs     defaults        0 0
/dev/mapper/centos8-home /home                      xfs     defaults        0 0
/dev/mapper/centos8-swap none                       swap    defaults        0 0
UUID=05625c8d-28be-4769-8374-f2f18ccb765b /boot     xfs     defaults        0 0

在 /etc/fstab 文件中添加或删除条目时,请运行 systemctl daemon-reload 命令或重启服务器以便让 systemd 注册新配置。

[root@CentOS8 ~]# systemctl daemon-reload
#验证 fstab 是否有效
[root@CentOS8 ~]# mount -a

管理交换空间

[root@CentOS8 ~]# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart
Partition name?  []? swap1
File system type?  [ext2]? linux-swap
Start? 1001MB
End? 1257MB
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size   File system     Name      Flags
 1      1049kB  1000MB  999MB  xfs             userdata
 2      1001MB  1257MB  256MB  linux-swap(v1)  swap1

(parted) quit
Information: You may need to update /etc/fstab.

[root@CentOS8 ~]# udevadm settle
[root@CentOS8 ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 244 MiB (255848448 bytes)
no label, UUID=f2dc5611-1d8c-46e2-b8c0-c25977bea7c6
[root@CentOS8 ~]# swapon /dev/sdb2
[root@CentOS8 ~]# vim /etc/fstab
...
UUID=39e2667a-9458-42fe-9665-c5c854605881 swap swap defaults 0 0
...
[root@CentOS8 ~]# systemctl daemon-reload

管理磁盘配额

管理逻辑卷组 LVM

创建逻辑卷

#准备物理设备
[admin@CentOS8 ~]$ parted -s /dev/vdb mkpart primary 1MiB 769MiB
[admin@CentOS8 ~]$ parted -s /dev/vdb mkpart primary 770MiB 1026MiB
[admin@CentOS8 ~]$ parted -s /dev/vdb set 1 lvm on
[admin@CentOS8 ~]$ parted -s /dev/vdb set 2 lvm on
#创建物理卷
[admin@CentOS8 ~]$ pvcreate /dev/vdb1 /dev/vdb2
#创建卷组
[admin@CentOS8 ~]$ vgcreate vg01 /dev/vdb1 /dev/vdb2
#创建逻辑卷
[admin@CentOS8 ~]$ lvcreate -n lv01 -L 700M vg01
#添加文件系统
[admin@CentOS8 ~]$ mkfs -t xfs /dev/vg01/lv01
#创建挂载点
[admin@CentOS8 ~]$ mkdir /mnt/data
#向/etc/fstab文件中添加以下条目(按名称挂载逻辑卷等同于按UUID进行挂载)
/dev/vg01/lv01  /mnt/data   xfs defaults    1   2
#挂载文件系统
[admin@CentOS8 ~]$ mount /mnt/data
#调整逻辑卷大小
[admin@CentOS8 ~]$ lvresize -L 600M /dev/vg01/lv01

删除逻辑卷

#卸载文件系统
[admin@CentOS8 ~]$ umount /mnt/data
#删除逻辑卷
[admin@CentOS8 ~]$ lvremove /dev/vg01/lv01
#删除卷组
[admin@CentOS8 ~]$ vgremove vg01
#删除物理卷
[admin@CentOS8 ~]$ pvremove /dev/vdb1 /dev/vdb2

查看LVM状态信息

#物理卷
[admin@CentOS8 ~]$ pvdisplay /dev/vdb1
#卷组
[admin@CentOS8 ~]$ vgdisplay vg01
#逻辑卷
[admin@CentOS8 ~]$ lvdisplay /dev/vg01/lv01

扩展卷组

#准备物理设备并创建物理卷
[admin@CentOS8 ~]$ parted -s /dev/vdb mkpart primary 1027MiB 1539MiB
[admin@CentOS8 ~]$ parted -s /dev/vdb set 3 lvm on
[admin@CentOS8 ~]$ pvcreate /dev/vdb3
#扩展卷组
[admin@CentOS8 ~]$ vgextend vg01 /dev/vdb3
#验证新空间是否可用
[admin@CentOS8 ~]$ vgdisplay vg01

扩展卷组

#移动物理区块
[admin@CentOS8 ~]$ pvremove /dev/vdb3
#缩减卷组
[admin@CentOS8 ~]$ vgreduce vg01 /dev/vdb3

扩展逻辑卷

#验证卷组是否有可用空间
[admin@CentOS8 ~]$ vgdisplay vg01
#扩展逻辑卷
[admin@CentOS8 ~]$ lvextend -L +300M /dev/vg01/lv01
#扩展文件系统(XFS,需要使用挂载点为参数)
[admin@CentOS8 ~]$ xfs_growfs /mnt/data
#扩展文件系统(EXT4,需要使用逻辑卷名为参数)
[admin@CentOS8 ~]$ resize2fs /dev/vg01/lv01
#验证已挂载文件系统的新大小
[admin@CentOS8 ~]$ df -h /mountpoint

扩展逻辑卷和交换空间

#验证卷组是否有可用空间
[admin@CentOS8 ~]$ vgdisplay vgname
#停用交换空间
[admin@CentOS8 ~]$ swapoff -v /dev/vgname/lvname
#扩展逻辑卷
[admin@CentOS8 ~]$ lvextend -l +extents /dev/vgname/lvname
#将逻辑卷格式化为交换空间
[admin@CentOS8 ~]$ mkswap /dev/vgname/lvname
#激活交换空间
[admin@CentOS8 ~]$ swapon -va /dev/vgname/lvname

实施高级存储功能

Stratis 存储管理解决方案

VDO 虚拟数据优化器

#安装VDO
[admin@CentOS8 ~]$ yum -y install vdo kmod-kvdo
#创建VDO卷
[admin@CentOS8 ~]$ vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G
#验证VDO卷可用性
[admin@CentOS8 ~]$ vdo list
#验证vdo1卷上是否启用了压缩和重复数据删除功能
[admin@CentOS8 ~]$ vdo status --name=vdo1 | grep Deduplication
[admin@CentOS8 ~]$ vdo status --name=vdo1 | grep Compression
#格式化vdo1卷
[admin@CentOS8 ~]$ mkfs.xfs -K /dev/mapper/vdo1
#注册新设备节点
[admin@CentOS8 ~]$ udevadm settle
#挂载vdo1卷
[admin@CentOS8 ~]$ mkdir /mnt/vdo1 && mount /dev/mapper/vdo1 /mnt/vdo1
#验证挂载是否成功
[admin@CentOS8 ~]$ mount

访问网络附加存储(NFS)

#使用nfsconf工具配置一个仅限使用NFSv4的客户端
[admin@CentOS8 ~]$ nfsconf --set nfsd udp n
[admin@CentOS8 ~]$ nfsconf --set nfsd vers2 n
[admin@CentOS8 ~]$ nfsconf --set nfsd vers3 n
[admin@CentOS8 ~]$ nfsconf --set nfsd tcp y
[admin@CentOS8 ~]$ nfsconf --set nfsd vers4 y
[admin@CentOS8 ~]$ nfsconf --set nfsd vers4.0 y
[admin@CentOS8 ~]$ nfsconf --set nfsd vers4.1 y
[admin@CentOS8 ~]$ nfsconf --set nfsd vers4.2 y
#挂载NFS
[admin@CentOS8 ~]$ mount -t nfs serverb.lab.com:/shares/public /public
#持久挂载NFS
[admin@CentOS8 ~]$ vim /etc/fstab
serverb.lab.com:/shares/public  /public  nfs    rw,sync     0   0

自动挂载网络附加存储(autofs)

  • 自动挂载
    • 主映射文件:/etc/auto.master.d/name.autofs
    • 映射文件:/etc/auto.name
  • 直接映射
    • 主映射文件内容:/- /etc/auto.direct
    • 映射文件内容:/mnt/docs -rw,sync serverb:shares/docs
  • 间接映射
    • 主映射文件内容:/internal /etc/auto.indirect
    • 映射文件内容:* -rw,sync serverb:shares/indirect/&
#安装autofs软件包
[admin@CentOS8 ~]$ yum -y install autofs
#创建直接映射主映射文件
[admin@CentOS8 ~]$ vim /etc/auto.master.d/direct.autofs
/-   /etc/auto.direct
#创建直接映射の映射文件
[admin@CentOS8 ~]$ vim /etc/auto.direct
/external  -rw,sync,fstype=nfs4  serverb.lab.com/shares/direct/external
#创建间接映射主映射文件
[admin@CentOS8 ~]$ vim /etc/auto.master.d/indirect.autofs
/internal   /etc/auto.indirect
#创建间接映射の映射文件
[admin@CentOS8 ~]$ vim /etc/auto.direct
*  -rw,sync,fstype=nfs4  serverb.lab.com/shares/indirect/&
#启动并启用autofs服务并重启计算机
[admin@CentOS8 ~]$ systemctl enable --now autofs && systemctl reboot
#访问直接映射挂载点目录
[admin@CentOS8 ~]$ ls -l /external
#访问间接映射挂载点目录
[admin@CentOS8 ~]$ ls -l /internal/west/
[admin@CentOS8 ~]$ ls -l /internal/east/

日志管理

rsyslogd 日志服务配置文件

rsyslogd 日志服务配置位于 /etc/rsyslog.conf 文件和 /etc/rsyslog.d 目录中扩展名为 .conf 的文件中。通过在 etc/rsyslog.d 目录中写入适当文件可以轻松地添加规则。

查看系统日志条目

#查看日志中所有消息
[admin@CentOS8 ~]$ journalctl
#显示最后10个日志条目
[admin@CentOS8 ~]$ journalctl -n
#显示最后15个日志条目
[admin@CentOS8 ~]$ journalctl -n 15
#显示最后10个日志条目并持续刷新
[admin@CentOS8 ~]$ journalctl -f
#列出优先级为err或以上的日志条目
#该命令理解debug info notice warning err crit alert emerg 优先级
[admin@CentOS8 ~]$ journalctl -p err
#查找具体的事件时,可以将输出限制为特定的时间段
#journalctl命令有两个选项,分别是--since和--until 选项,它们可以将输出限制为特定的时间范围
#这两个选项都采用格式为"YYYY-MM-DDhh:mm:ss”的时间参数(必须使用双引号,以保留选项中的空格)
#如果省略日期则命令会假定日期为当天;如果省略时间,则命令假定为自00:00:00起的一整天
#除了日期和时间字段外,这两个选项还接受 yesterday today tomorrow 作为有效的参数
[admin@CentOS8 ~]$ journalctl --since today
#您也可以指定相对于当前的某个时间以后的所有条目。例如,要指定上一小时的所有条目:
[admin@CentOS8 ~]$ journalctl --since "-1 hour"
#journalctl命令还可与UID、PID等参数搭配
[admin@CentOS8 ~]$ journalctl _PID=1 _UID=81 _SYSTEMD_UNIT="sshd.service"

配置持久系统日志

[admin@CentOS8 ~]$ vim /etc/systemd/journald.conf
...
[Journal]
Storage=persistent
...
[admin@CentOS8 ~]$ systemctl restart systemd-journald
[admin@CentOS8 ~]$ ls/var/log/journal
#仅检索当前系统启动的条目
[admin@CentOS8 ~]$ journalctl -b

配置日志轮转

日志轮替 logrotate 配置文件/etc/logrotate.conf

维护准确的时间

#显示当前时间相关系统设置
[admin@CentOS8 ~]$ timedatectl
#更新当前时区
[admin@CentOS8 ~]$ timedatectl set-timezone Asia/Shanghai
#启用NTP同步
[admin@CentOS8 ~]$ timedatectl set-ntp true
#添加NTP时钟源
[admin@CentOS8 ~]$ vim /etc/chrony.conf
...
server www.example.com iburst
...
[admin@CentOS8 ~]$ systemctl restart chronyd
#验证时钟同步
[admin@CentOS8 ~]$ chronyc sources -v

软件管理

RPM命令摘要

命令 任务
rpm -ivh FULLNAME 安装RPM软件包
rpm -Uvh FULLNAME 升级RPM软件包
rpm -e NAME 卸载RPM软件包
rpm -qa 列出当前安装的所有RPM软件包
rpm -q NAME 显示系统上安装的NAME版本
rpm -qi NAME 显示有关软件包的详细信息
rpm -ql NAME 查询软件包的安装位置
rpm -qf SYSFILE 查询系统文件属于哪个软件包
rpm -qR NAME 查询软件包の依赖性
rpm -V NAME 验证数字签名
rpm --import 数字证书 导入数字证书
rpm2cpio 包全名 | cpio -idv ./文件路径 提取RPM文件

可以直接通过rpm -q* NMAE命令查询已安装的软件包;加上-p选项即rpm -q*p FULLNAME可在安装之前查询软件包文件。

YUM命令摘要

命令 任务
yum list [NAME] 按名称列出已安装和可用的软件包
yum search KEYWORD 按关键字搜索软件包
yum provides COMMANDS 按命令名搜索软件包
yum install NAME 安装软件包
yum localinstall FULLNAME 安装本地RPM包
yum remove NAME 卸载软件包
yum update [NAME] 升级[所有]软件包
yum info NAME 显示软件包的详细信息
yum history 显示事务历史记录
yum group list 列出已安装和可用的组
yum group install 安装软件包组
yum group remove 卸载软件包组
yum repolist all 查看所有可用存储库
yum-config-manager --[enable|disable] … 启用或禁用存储库
yum-config-manager --add-repo="…" 创建yum存储库
yum module list [NAME] 显示可用的模块列表
yum module info NAME 显示模块详细信息
yum module install NAME 安装模块
yum module remove NAME 卸载模块
yum module disable NAME 禁用模块
yum module reset 重置模块流

源码包

gcc

1.  下载软件包
2.  解压缩
3.  进入解压目录
4.  `./configure` 编译前准备:`./configure --prefix=/usr/local/xxx`
5.  make
6.  make clean (非必须步骤,出错时执行)
7.  make install

cmake

1.  下载软件包
2.  解压缩
3.  进入解压目录
4.  `mkdir build`; `cd build`
5.  `cmake -DCMAKE_INSTALL_PREFIX="~/usr/bin" ..`
6.  make
7.  make clean (非必须步骤,出错时执行)
8.  make install

源码包安装时直接删除安装目录即可

调优系统性能

#确定当前活动的调优配置文件
[admin@CentOS8 ~]$ tuned-adm active
#列出所有可用的调优配置文件
[admin@CentOS8 ~]$ tuned-adm list
#推荐调优配置文件
[admin@CentOS8 ~]$ tuned-adm recommend
#切换调优配置文件
[admin@CentOS8 ~]$ tuned-adm profile throughput-performance
#关闭tuned调优活动
[admin@CentOS8 ~]$ tuned-adm off
#以某nice级别启动进程
[admin@CentOS8 ~]$ nice -n 15 sha1sun &
#更改现有进程的nice级别
[admin@CentOS8 ~]$ renice -n 19 3521

管理网络安全

iptables

firewalld

下表列出一些常用 firewall-cmd 命令及其说明。请注意,除非另有指定,否则几乎所有命令都作用于运行时配置,当指定 --permanent 项时除外。如果指定了 --permanent 选项,还必须通过运行 firewall-cmd --reload 命令来激活设置,它将读取当前的永久配置并将其作为新的运行时配置来应用。列出的许多命令都采用 --zone=ZONE 选项来确定所影响的区域。如果需要子网掩码,请使用 CIDR 表示法,如 192.168.1/24。

FIREWALL-CMD命令 说明
–get-default-zone 查询当前默认区域
–set-default-zone=ZONE 设置默认区域(同时更改临时和永久配置)
–get-zones 列出所有可用区域
–get-active-zones 列出当前正在使用的所有区域(具有关联的接口或源)及其接口和源信息
–add-source=CIDR [–zone=ZONE] 将来自IP地址或网络/子网掩码的所有流量路由到指定区域
–remove-source=CIDR [–zone=ZONE] 从区域中删除用于路由来自IP地址或网络/子网掩码的所有流量的规则
–add-interface=INTERFACE [–zone=ZONE] 将来自INTERFACE的所有流星路由到指定区域
–change-interface=INTERFACE [–zone=ZONE] 将接口与ZONE而非其当前区域关联
–list-all [–zone=ZONE] 列出ZONE的所有已配置接口、源、服务和端口
–list-all-zones [–zone=ZONE] 检索所有区域的所有信息(接口、源、端口、服务)
–add-service=SERVICE [–zone=ZONE] 允许到SERVICE的流量
–add-port=PORT/PROTOCOL [–zone=ZONE] 允许到PORT/PROTOCOL端口的流量
–remove-service=SERVICE [–zone=ZONE] 从区域的允许列表中删除SERVICE
–remove-port=PORT/PROTOCOL [–zone=ZONE] 从区域的允许列表中删除PORT/PROTOCOL端口
–reload 丢弃运行时配置并应用持久配置

以上命令若未提供 --zone= 选项,则使用默认区域。

控制 SELinux 端口标记

#获取所有当标签分配概述
[admin@CentOS8 ~]$ semanage port -l | grep ftp
#查看对默认策略的本地更改(管理员运行)
[admin@CentOS8 ~]$ semanage port -l -C
#向现有标签(类型)中添加端口:-a将添加新端口标签;-t表示类型;-p表示协议
[admin@CentOS8 ~]$ semanage port -a -t port_label -p tcp|udp PORTNUMBER
#删除端口标签
[admin@CentOS8 ~]$ semanage port -d -t gopher_port_t -p tcp 71
#修改端口绑定
[admin@CentOS8 ~]$ semanage port -m -t http_port_t -p tcp 71

管理 SELinux 安全性

许多处理文件的命令都使用-Z选项来显示或设置Linux上下文。例如ps、ls、cp、mkdir都使用-Z选项显示或设置Linux上下文。

#显示当前SELinux模式
[admin@CentOS8 ~]$ getenforce
#更改当前SELinux模式
[admin@CentOS8 ~]$ setenforce [1|0]
#更改默认SELinux模式
[admin@CentOS8 ~]$ vim /etc/selinux/config
#设置SELinux上下文
[admin@CentOS8 ~]$ semanage fcontext -a -t httpd_sys_content_t '/virtual(/.*)?'
#查看SELinux上下文
[admin@CentOS8 ~]$ semanage fcontext -l
#存储SELinux上下文
[admin@CentOS8 ~]$ restorecon -RFv /virtual
#列出布尔值及状态
[admin@CentOS8 ~]$ getsebool -a
#修改布尔值
[admin@CentOS8 ~]$ setsebool
#持久保留布尔值
[admin@CentOS8 ~]$ setsebool -P
#报告布尔值是否为持久值并提供简述
[admin@CentOS8 ~]$ semanage boolean -l

SELinux故障排除详见《RH134》

你可能感兴趣的:(Linux知识库)