阅读说明
- 本文不适合零基础入门,不适合作为专业学习
- 假设你已经安装了vmware17
- 本文使用centos7.5进行实验,假设你有已经安装了centos7.5的操作系统
- 本文使用xshell7作为连接工具,大部分实验在命令行中进行配置
相关介绍
服务器需要长时间稳定的运行,通常使用linux操作系统。linux操作系统具有开源,占用资源少,稳定,高效率,适合深入学习等优点,需要强调的是开源意味着源代码开放可以进行二次开发,开源并不意味着免费,也有开源的商业软件,只是我们一般更倾向于选择免费的开源产品。
个人水平有限,根据软件包格式将linux划分为redhat和debian两大体系,实际上应该有着架构之类更深次的差异,但都是基于linux内核,shell命令上基本是通用的。
类型 | 安装包格式 | 常见管理工具 | 操作系统举例 |
---|---|---|---|
redhat | rpm | rpm/yum | redhat/centos/fedora |
debian | deb | dpkg/apt | debian/ubuntu |
初学者在网上找linux教程的时候,很有可能找到不适合自己操作系统的教程,要注意区分,似乎存在格式转换的工具,但是在有选择的情况下尽量不要给自己增加额外的难度。
学习条件下建议直接使用root账户
基本配置
基本介绍
开机引导和运行级别
理解开机引导有利于当系统出现一些故障时进行故障解决,后面会介绍一些故障解决的方式,个人水平有限,如果无法理解请自行搜索相关内容。
运行级别 | Systemd的target | 说明 |
---|---|---|
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录系统,多用于系统维护 |
2 | multi-user.target | 用户定义/域特定运行级别.默认等同于3 |
3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别.默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
不同的运行级别有着不同的应用场景,在centos7以前是使用init0~init6表示。
文件系统与磁盘分区
centos7.5使用xfs日志文件系统作为磁盘的文件系统,此外还有使用swap文件系统作为虚拟内存.通常认为虚拟内存为实际分配物理内存的1.5-2倍,但是现在的硬件设备都很好,如果物理内存分配较大也不必分配过多的swap分区.
在linux操作系统中,所有的硬件设备都表示为文件存储在/dev下,例如/dev/hda1中,hd表示ide设备,也可能是sd表示scsi设备,a表示硬盘的顺序,1表示第一个分区。
系统服务控制
systemd进程是由 Linux 内核加载运行/usr/lib/systemd/systemd,程序是系统中第一个进程,PID(进程标记)号永远为1.
systemctl 控制类型 服务名称
start:启动
stop:停止
restart:重新启动
reload:重新加载
status:查看服务状态
is-enabled:是否开机启动
enable:允许开机启动(disable不允许)
#查看已激活的系统服务
systemctl list-units --type=service
#查看默认启动级别
systemctl get-default
#设置默认启动级别为5图形模式:
systemctl set-default graphical.target
#ntsysv工具提供一个交互式可视化窗口,可以在字符终端运行,便于集中管理多个服务
ntsysv
ntsysv --level 级别列表
#临时切换
init 运行级别
#ctrl+alt+f1回到桌面
#ctrl+alt+f2命令行
目录结构
/ :linux文件系统的入口,最高级目录
/bin:存放二进制可执行文件,普通用户可执行的命令
/boot:内核和加载内核所需的文件
/dev:设备文件存储目录,如硬盘,U盘等
/etc:所有的系统配置文件,包括新安装的程序文件
/home:普通用户目录,在此创建相应用户文件目录
/home/zhangsan :普通用户张三的家目录/var:经常变动的数据,如日志,邮件等
/usr:软件安装目录,程序执行目录
/sbin:存放二进制可执行文件,基本的系统维护命令,只能由超级用户使用
/root:超级管理员”root”的家目录,类似于home下的目录
linux常用命令
linux系统中运行的一种特殊程序,在用户和内核之间充当“翻译官”,用户登录linux系统时,自动加载一个shell程序,bash是CentOS系统中默认使用的shell,程序文件位于/bin/bash.
通用命令格式:
命令字 [选项] [参数]
获取帮助:
使用help 命令 查看内部命令
使用“–help”选项 查看外部命令
使用man 手册页
快捷键:
Tab 键 命令,目录补全
反斜杠“\” 分行
Ctrl+u 删除光标以前
Ctrl+k 删除光标以后
Ctrl+l 清屏
Ctrl+c 退出命令
Ctrl+ a 光标定位到行首
Ctrl+e 光标定位到行尾
Ctrl+z 后台挂起命令
目录和文件管理
#打印当前目录
pwd
#创建目录
mkdir 目录
mkdir -p 目录1/{目录21,目录22}/目录3
#切换目录,可以使用相对路径和绝对路径
#当前目录
cd
cd .
#当前目录下的abc
cd abc
cd ./abc
#上级目录
cd ..
#根目录
cd /
#家目录
cd ~
cd
#上一次的目录
cd -
#显示目录中的内容
ls [命令] [目标目录,默认为当前]
-a|A 显示所有,包括隐藏文件,前者包括本级.父级..
-l 显示详细信息列表
-h 显示单位,以更人性化的方式输出文件大小,但是无法统计文件夹大小,需要结合-l使用
-R 递归显示
-d 只显示当前文件夹
-color 分颜色高亮显示,一般默认有了
结合通配符
“?”:匹配文件名中的一个未知字符
“”:匹配文件名中的任意多个字符
#取别名,通过别名机制简化常用的,比较长的命令
alias 命令别名=命令
#取消别名定义:
unalias 命令别名
#持久配置,将别名命令在/etc/bashrc中单独成行
#统计目录及文件空间占用情况
du [选项] [文件或目录… ]
-a 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
-h 显示出目录或文件的大小(K,M),默认的大小单位为千字节(KB)
-s 只统计每个参数所占用空间总的大小,而不是统计每个子目录,文件的大小
#复制/剪切文件,rm删除文件参数相似
cp/mv
-i:覆盖目标同名文件或目录时提醒用户确认
-f:若文件存在 强制覆盖不提醒
-p:复制时保持源文件的权限、属主及时间标记等属性不变
-r:表示递归复制所有文件及子目录
-t:指定复制到或者移动到哪个文件夹
#which在$PATH中查找可执行命令,$PATH的作用相当于配置环境变量,执行命令时除了bash内置命令外,会在这个变量对应的目录下查找可执行文件,在任何目录下都可以直接执行这个命令,否则如果不在这个目录下,那么就需要致命命令文件所在的路径,不然就报错“找不到文件或命令”
#find查找范围比which查找范围更大,也可以自己设置查找位置,用于筛选满足条件的文件
-name 根据名称
-size 文件大小 +5M超过5M -5M小余5M 5M范围左右
-a和 -o或
-perm 权限 例如777
-type文件类型 f文件d目录b块设备c字符设备
-mtime 修改时间信息 +7是7天以前 7正好7天以前 -7最近7天以内
-atime 访问时间信息
-ctime 改变时间信息
#将查到的数据删除的四种方法
find / -type f -a -name "abc" -delete
find / -type f -a -name "abc" -exec rm -rf {} \;
find / -maxdepth 2 -type f -name "abc" | xargs rm -rf
rm -rf $(find / -maxdepth 2 -type f -name "abc")
#一次性查看,用户查看小文件
cat 文件
#分页显示,可以enter向下翻滚一行或者空格向下一屏幕,q退出
more 文件
#分页显示,在more的基础上扩充
#page up向上翻页,page down向下翻页
#/查找内容,n下一个,N上一个
less 文件
#查看头部,默认10行
head [-n] 文件
#查看尾部,默认10行
#常用的方法是tail -f [文件]自动刷新日志文件的显示
tail [-n] 文件
#默认查询目标文件的行数,单词数,字节数
wc [选项] 目标文件
-l行数
-w单词数
-c字节数
#压缩,解压缩命令
#只能处理单个文件,不能处理文件夹
gzip [-9] 文件名
gzip -d .gz格式压缩文件
gunzip .gz格式压缩文件
bzip2 [-9] 文件名
bzip2 [-d] .bz2格式压缩文件
bunzip2 .bz2格式压缩文件
#可以处理文件夹
#通常是用-czvf压缩或者-xzvf解压
tar [选项] [归档文件名] [源文件/目录]
-c:创建.tar 格式的包文件
-x:解开.tar格式的包文件
-v:输出详细信息
-f:表示使用归档文件
-p:打包时保留原始文件及目录的权限
-t:在不解压包的情况下看包内内容
-C:解包时指定释放的目标文件夹
-z:调用gzip程序进行压缩或解压
-j:调用bzip2程序进行压缩或解压
--exclude:排除一个文件
--exclude-from=从一个文件批量排除
程序安装及管理
文件类型 | 保存目录 |
---|---|
rpm软件包 | 扩展名为“.rpm”,redhat系的安装包 |
deb软件包 | 扩展名为“.deb”,debian系的安装包 |
源代码软件包 | 一般为“.tar.gz”,“.tar.bz2”等格式的压缩包包含程序的原始代码,通过源代码安装软件比较麻烦,速度慢,但是可以进行更多自定义配置,而且更新的速度比较快 |
绿色免安装的软件包 | 在压缩包内提供已编译好的执行程序文件解开压缩包后的文件即可直接使用 |
RPM包管理工具
RPM Package Manager由 Red Hat 公司提出,被众多 Linux 发行版所采用建立统一的数据库文件,详细记录软件包安装,卸载等变化信息自动分析软件包依赖关系,但是不会去解决,通常我们更倾向于使用yum安装软件,能够自动安装需要的依赖;yum以后还有dnf工具。
#查询已安装
rpm -q[子选项] [软件名]
-qa:查看系统中已安装的所有RPM软件包列表
-qi:查看指定软件的详细信息
-ql:查询指定软件包所安装的目录、文件列表
-qf:查询文件或目录属于哪个RPM软件
-qc:仅显示指定软件包安装的配置文件
-qd:仅显示指定软件包安装的文档文件
#查询未安装
rpm -qp[子选项] rpm包文件
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表
#安装或升级rpm软件
rpm [选项] rpm包文件
-i:安装一个新的 rpm 软件包
-h:以“#”号显示安装的进度
-v:显示安装过程中的详细信息
-U:升级某个 rpm 软件,若原本未装,则进行安装
-F:升级某个 rpm 软件,若原本未装,则放弃安装
#卸载制定的rpm软件
rpm -e 软件名
#辅助选项
--force:强制安装所指定的rpm软件包
--nodeps:安装、升级或卸载软件时,忽略依赖关系
#重建rpm数据库(选其一)
#RPM数据库:用于记录在Linux系统中安装、卸载、升级应用程序的相关信息,由RPM包管理系统自动完成维护,一般不需要用户干预
#当RPM数据库发生损坏(误删文件、非法关机、病毒破坏等导致),且Linux系统无法自动完成修复时,将导致无法使用rpm命令正常地安装、卸载及查询软件包,这时可以使用—rebuildbd或—initdb重建RPM数据库
rpm --rebuilddb
rpm --initdb
#导入验证公钥
#在Linux/Unix应用领域,相当一部分软件厂商会对发布的软件包进行数字签名,以确保软件的完整性、合法性。对于用户来说,可以利用软件官方提供的公钥文件,自动对下载的软件包进行验证,如果在安装软件时出现验证失败的提示,则表示该软件包可能已经被非法篡改
rpm --import /media/cdrom/RPM-GPG-KEY-redhat-release
yum软件管理
yum list #查询软件包列表
yum list installed #当前已安装的软件包
yum list available #当前未安装的软件包
yum list updates #当前能够升级的软件包
yum info httpd #查询软件包详细信息
yum install -y ntsysv #安装软件包
yum remove -y ntsysv #卸载软件包
yum update #更新软件包
yum groupupdate #更新多个软件包
yum search #查询某个命令属于哪个包
yum provides */命令
源码编译
步骤:
- 下载源代码安装包
- 上传tar包到centos虚拟机中,并解压到对应的目录
- ./config配置,设置安装目录,模块等
- make编译生成二进制可执行文件
- make install安装
- 初始化,测试,维护
账号和权限管理
用户管理
#用户账号文件 /etc/passwd保存用户名称,宿主目录,登录Shell等基本信息
#用户账户:密码占位符:用户账号ID:组账号ID:用户说明:宿主目录:登录shell
root:x:0:0:root:/root:/bin/bash
#用户账号文件 /etc/shadow保存用户的密码,账号有效期等信息
#字段1:用户帐号的名称
#字段2:加密的密码字串信息
#字段3:上次修改密码的时间
#字段4:密码的最短有效天数,默认值为0
#字段5:密码的最长有效天数,默认值为99999
#字段6:提前多少天警告用户口令将过期,默认值为7
#字段7:在密码过期之后多少天禁用此用户
#字段8:帐号失效时间,默认值为空
#字段9:保留字段(未使用)
test:$1$BT7teaYX$s2sr6uFUwKhtU.8/8VpzB1:14374:0:99999:7:::
#添加用户
useradd [选项] 用户名
-u指定uid标记号
-d指定宿主目录,缺省为/home/用户名
-e指定账号失效时间
-g指定用户的基本组名(或gid号)
-G指定用户的附加组名(或gid号)
-M不为用户建立并初始化宿主目录
-s指定用户的登录shell
#修改密码
passwd [选项] 用户
-d:清空用户的密码,使之无需密码即可登录
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号/centos 7不需要修改密码,当解锁后需要重新修改密码或者清除密码
#不指定用户名时,默认为当前用户
#修改用户属性
usermod [选项] 用户
-l:更改用户帐号的登录名称
-L:锁定用户账户
-U:解锁用户账户
以下选项与useradd命令中的含义相同
-u、-d、-e、-g、-G、-s
#删除用户
userdel [-r] 用户名
-r表示连用户的宿主目录一起删除
#查询用户身份标识
id [用户名]
#查询用户所属组
groups [用户名]
#查询用户账号的详细信息
finger [用户名]
#查询已经登录到主机的用户信息
users
who
用户组管理
#/etc/group:保存组帐号基本信息
组名:x:编号:组成员列表
#/etc/gshadow:保存组帐号的密码信息
#添加用户组
groupadd [-g GID] 组账号名
#设置组账号密码,添加/删除组成员
gpasswd [选项] 组帐号名
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
#删除用户组
#注意:任何用户的基本组都不可以直接删除
groupdel 组帐号名
权限管理
访问权限
读取 r:允许查看文件内容、显示目录列表
写入 w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
可执行 x:允许运行程序、切换目录
归属(所有权)
属主:拥有该文件或目录的用户帐号
属组:拥有该文件或目录的组帐号
-rw-r—r--
#第一个字符表示文件类型,可以是d(目录)、b(块设备文件)、c(字符设备文件),减号“-”(普通文件)、字母“l”(链接文件)等
#表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了四种不同的权限字符: r 可读 ;w 可写 ;x 可执行 ;- 无权限
#r、w、x、- 权限字符还可分别表示为8进制数字4、2、1、0
#权限修改
chmod [ugoa] [+-=] 文件/文件夹
u属主g属组o其他用户a所有用户
+增加-去除=设置
chmod nnn 文件/文件夹
nnn例如777表示所有人都有所有权限
#设置归属
chown 属主 文件或目录
chown :属组 文件或目录
chown 属主:属组 文件或目录
-R递归修改指定目录下所有子项的权限
#设置文件和目录默认权限 umask
#定义新创建文件及目录的默认权限,通过该命令实现定义权限补码
#注意:文件权限最大666,目录权限最大777
#特殊权限
#suid权限:程序运行时的权限从执行者变SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件
chmod u+s 目标文件
chmod u-s 目标文件
#stick权限:只作用于目录,目录下创建的文件只有root、文件创建者、目录所有者才能删除
chmod o+t 目标目录
chmod o-t 目标目录
#acl权限:可作用于文件及目录,针对文件和目录授予单个用户的rwx权限
setfacl -R -m d:u:abc:rwx test //文件夹
setfacl -m u:wangwu:rwx abc //文件
-R 表示递归授权
-m 表示修改acl权限
d 表示只对后续新对象继承该权限
u 表示用户
abc 表示要授权用户名称
#文件锁定管理
chattr命令用于改变文件属性。
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。
属性:
a:只能给文件添加内容,但是不能删除。
i:不得任意更改文件或目录。
chattr +i /etc/passwd #锁定用户文件
chattr +i /etc/shadow #锁定密码文件
chattr +a /var/log/messages #设置不能清除日志文件
lsattr
磁盘和文件管理
分区
#检测并确认新硬盘
#查看磁盘分区
fdisk -l [磁盘设备]
#查看和管理磁盘分区
fdisk [磁盘设备]
#交互式中常用命令
d delete a partition
删除分区
g create a new empty GPT partition table
创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区)
l list known partition types
列出可以分区的类型???
m print this menu
输出帮助菜单
n add a new partition
新建增加一个分区
p print the partition table
输出分区的结果信息
q quit without saving changes
不保存退出
t change a partition s system id
改变分区的系统id==改变分区类型(LVM 增加swap分区大小)
u change display/entry units
改变分区的方式 是否按照扇区进行划分
w write table to disk and exit
将分区的信息写入分区表并退出==保存分区信息并退出
#GPT分区方式:
yum install -y gdisk
gdisk /dev/sdb
#让系统可以加载识别分区文件
partprobe /dev/sdb
格式化与挂载
将新硬盘分好区以后,还需要对分区进行格式化(即创建文件系统),并挂载到Linux系统中的指定目录下,然后才能用于存储文件、目录等数据
mkfs -t 文件系统 -f 分区设备 #-f表示强制,例如mkfs -t xfs -f /dev/sdb1
mount [-t vfstype] [-o options] 磁盘设备 挂载目录
-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS fat16文件系统:msdos
Windows 9x fat32文件系统:vfat
Windows NT ntfs文件系统:ntfs
Mount Windows文件网络共享:smbfs
UNIX(LINUX) 文件网络共享:nfs
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
#卸载
umount 存储设备位置
umount 挂载点目录
mount -a #刷新自动挂载配置文件
mount #查看挂载情况
#交换分区
mkswap 分区设备
swapon 分区设备
swapoff 分区设备
cat /proc/meminfo #查询虚拟内存变化
#/etc/fstab文件添加记录实现自动挂载
#分区 挂载点 文件系统 -o的参数 dump备份 启动时检查
/dev/sdb1 /data xfs defaults 0 0
/dev/sdb5 swap swap defaults 0 0
#了解系统中已挂载各文件系统的磁盘使用情况(如剩余磁盘空间比例等)
df [选项] [文件]
-h显示更易读的容量单位
-T显示对应文件系统的类型
lvm
Logical Volume Manager逻辑卷管理,动态调整磁盘容量从而提高磁盘管理的灵活性.
注意:/boot分区用于存放引导文件,不能基于lvm创建
图形界面管理工具system-config-lvm,centos7系列光盘源文件中不带该程序
主要命令
功能 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
Scan 扫描 | pvscan | vgscan | lvscan |
Create 建立 | pvcreate | vgcreate | lvcreate |
Display 显示 | pvdisplay | vgdisplay | lvdisplay |
Remove 删除 | pvremove | vgremove | lvremove |
Extend 扩展 | vgextend | lvextend | |
Reduce 减少 | vgreduce | lvreduce |
#划分顺序
#PV(物理卷)->VG(卷组)->LV(逻辑卷)->格式化为xfs/swap文件系统->挂载使用,如果要进行删除则要用相反的顺序进行
pvscan [磁盘/分区路径] #查看物理卷,不跟路径查看全部
pvcreate 磁盘/分区路径 #创建物理卷,可以连续跟多个路径
pvdisplay [磁盘/分区路径] #查看物理卷详情
pvremove 磁盘/分区路径 #删除物理卷
vgscan #查看已建立的卷组
vgcreate 卷组名 磁盘/分区路径 #将多个物理卷合成卷组
vgdisplay 卷组名 #查看卷组详细信息
vgremove 卷组名 #删除卷组
vgextend 卷组名 磁盘/分区路径 #扩展卷组
lvscan #查看已有的逻辑卷
lvcreate -L 磁盘空间 -n 逻辑卷名 卷组名
lvcreate -l 100%VG -n 逻辑卷名 卷组路径
lvextend -L +扩展容量 /dev/卷组名/逻辑卷名
lvextend -r -l 100%VG /dev/卷组名/逻辑卷名
lvreduce -L -缩减容量 /dev/卷组名/逻辑卷名
lvdisplay /dev/卷组名/逻辑卷名
lvremove /dev/卷组名/逻辑卷名
xfs_growfs /dev/卷组名/逻辑卷名
#注意:缩减只能在创建文件系统之前进行
磁盘配额
rpm -q xfsprogs #确认配额工具已安装
#卸载原先的挂载,重新以支持配额的方式挂载
mount -o usrquota,grpquota 设备文件路径 挂载路径
vim /etc/fstab
设备文件路径 挂载路径 xfs defaults,usrquota,grpquota 0 0
xfs_quota -x -c 'limit -u bsoft=10M bhard=20M isoft=5 ihard=10 zhangsan' /abc
-x //专家模式,表示可以使用所有管理命令
-c //直接调用相关命令进行配置,而不进入交互式界面
limit //单引号内的命令为设置具体的磁盘配额参数
-u //表示为用户设置配额,-g为组
bsoft //磁盘容量软限制
bhard //磁盘容量硬限制
isoft //文件数量软限制
ihard //文件数量硬限制
0表示无限制
#查看磁盘容量配额
xfs_quota -c 'quota -uv zhangsan' /abc
#查看文件数量配额
xfs_quota -c 'quota -i -uv zhangsan' /abc
#测试配额
#dd命令用于块拷贝,/dev/zero是特殊的0文件
dd if=/dev/zero of=输出文件路径 bs=块大小 count=块数量
xfs_quota -x -c 'report -abi'
进程和计划任务管理
进程查看
ps #查看当前进程
-a所有进程
-u以用户为主的格式显示进程信息
-x所有与终端无关的进程
VSZ:虚拟内存
RSS:物理内存
STAT:S-休眠 R-运行 Z-僵死 <-高优先级 N-低优先级 s-父进程 +-前台进程 l-多线程 T停止
START :开启时间
TIME:进程占用cpu的时间
top #动态查看信息,可以考虑htop作为上级替代,top -d 1每秒刷新一次
第一行:系统时间 系统运行时间 当前登录用户数 负载:1分钟以内,5分钟以内,15分钟以内
第二行:总任务数 运行任务数 休眠任务数 停止任务数 僵尸任务数
第三行:用户空间占用cpu 系统空间占用cpu 用户空间改变过优先级的进程占用cpu 空闲cpu 等待输入输出占用 硬中断 软中断 实时
第四行:内存总量 空闲量 使用量 缓存量
第五行:交换分区总量 空闲量 使用量\
M:根据内存使用进行排序
P:根据CPU使用排序
T:根据累计运行时间进行排序
l:是否显示启动时间、平均负载等信息
t:是否显示进程和CPU状态相关信息
m:是否显示内存相关信息
c:是否显示完整命令行信息
k:终止某个进程
q:退出top
pgrep -lu 用户名 #根据用户查询
pgrep -l -U 用户名 -t 终端 #根据用户和终端查询
pidof 服务名 #根据服务名称查询进程pid
pstree #查看进程树,pstree -aup root查看root的进程
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
进程控制
通常有些命令会前台执行,影响控制台输入;部分是后台执行,看不到显示内容,可以通过在命令后加上&后台运行,注意:ping命令无法后台运行
jobs -l #查看后台进程
fg 后台进程编号 #将后台任务调入前台
bg 进程编号 #将后台暂停的任务恢复启动,可以按Ctrl+z将进程入后台并暂停
#注意,ping命令在这方面存在bug
kill [-9] 进程pid #通过进程号杀死进程,-9强制删除
killall [-9] 进程名 #通过进程名杀死所有进程
pkill [-9] -U 用户名 #强制杀死用户的所有进程
计划任务
#设置开启和允许开机自启
systemctl start atd
systemctl enable atd
systemctl start crond
systemctl enable crond
#at一次性任务
at 00:00 2023-04-12
>输入要执行的命令 #输入完成后Ctrl+d提交
><EOT>
atq #查看还未执行的任务
at -c 编号 #查看第n个任务详细信息
atrm 编号 #删除第n个任务
#编辑一个命令文件,不是必须的
vim /root/a.sh
!/bin/bash
tar zcf /home/http_back_`date +%F_%T`.tar.gz /root/abc &> /dev/null
#设置任务
crontab -e
#分钟 小时 月中第几天 几月 星期几 要执行的命令
10 15 * * 1-7 /bin/bash /root/a.sh
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 0 */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
0 23 1 * 1-5 /sbin/service httpd restart
分析和排查系统故障
日志
日志的功能
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
内核及系统日志,由系统服务rsyslog(主程序/sbin/rsyslogd,配置文件/etc/rsyslog.conf)统一进行管理,日志格式基本相似
用户日志,记录系统用户登录及退出系统的相关信息
程序日志,由各种应用程序独立管理的日志文件,记录格式不统一
日志的保存位置,默认在/var/log
内核及公共信息日志/var/log/messages(一般格式:时间标签 主机名 子系统名 消息字段)
计划任务日志/var/log/cron
系统引导日志/var/log/dmesg
邮件系统日志/var/log/maillog
用户登录日志
/var/log/lastlog:最近的用户登录事件
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件
users 、who、w #查看当前登录的用户
last #用户最近登录情况
lastb #登录失败的用户记录
日志消息的级别
0 EMERG(紧急):会导致主机系统不可用的情况
1 ALERT(警告):必须马上采取措施解决的问题
2 CRIT(严重):比较严重的情况
3 ERR(错误):运行出现错误
4 WAGRNIN(提醒):可能会影响系统功能的事件
5 NOTICE(注意):不会影响系统但值得注意
6 INFO(信息):一般信息
7 DEBUG(调试):程序或系统调试信息等
日志管理策略/搭建日志服务器
及时作好备份和归档
延长日志保存期限
控制日志访问权限
日志中可能会包含各类敏感信息,如账户、口令等
集中管理日志
将服务器的日志文件发到统一的日志文件服务器
便于日志信息的统一收集、整理和分析
杜绝日志信息的意外丢失、恶意篡改或删除
MBR故障
故障原因
病毒、木马等造成的破坏
不正确的分区操作、磁盘读写误操作
故障现象
找不到硬盘,启动中断
无法加载操作系统,开机后黑屏
解决思路
应提前作好“异地”备份文件
以 CentOS 7安装光盘引导进入急救模式
从备份文件中恢复
#模拟故障,先要关机添加磁盘,将mbr数据备份存放到新的磁盘
fdisk /dev/sdb
mkfs -t xfs /dev/sdb1
mount /dev/sdb1 /backup/
dd if=/dev/sda of=/backup/sda.mbr bs=512 count=1
dd if=/dev/zero of=/dev/sda bs=512 count=1
reboot
operating system not found...
#选项3-2-1
#单用户模式:基于现有系统的系统文件,windows安全模式
#急救模式:基于光盘镜像文件,windows 安全模式
#使用光盘进入急救模式
mkdir /123
mount /dev/sdb1 /123
dd if=/123/sda.mbr of=/dev/sda
reboot
GRUB引导故障
故障原因
MBR 中的 GRUB 引导程序遭到破坏
grub.conf 文件丢失、引导配置有误
故障现象
系统引导停滞,显示“grub>” 提示符
解决思路
尝试手动输入引导命令进入急救模式,重写或者从备份中恢复 grub.conf
向 MBR 扇区中重建 grub 程序
#模拟故障
cd /boot/grub2/
mv grub.cfg grub.cfg.back
reboot
grub>
#重启进入bios 调整光驱为第一启动项,进入第三行进行急救模式
chroot /mnt/sysimage
cd /boot/grub2
cp grub.cfg.back grub.cfg
grub2-install /dev/sda
exit
#关机。调整bios为硬盘启动,成功启动系统
重置root密码
方法1:单用户模式:
开机读秒时选择第一行按"e"
在linux16这一行,将之前的"ro",改为"rw init=sysroot/bin/sh",然后按ctrl+x、
输入:chroot /sysroot
输入:passwd root //输入新密码
exit
reboot //重启系统即可输入新密码登录
方法2:
通过光盘进入急救模式
输入:chroot /mnt/sysimage
passwd root //修改密码后重启即可
exit
reboot
修复文件系统
故障原因
非正常关机、突然断电、设备读写失误等
文件系统的超级块(super-block)信息被破坏
故障现象
无法向分区中读取或写入数据
启动后提示“Give root password for maintenance”
解决思路
根据提示输入 root 口令,进入修复状态
使用xfs_repair命令进行修复
#模拟故障,在已经挂载的时候无法进行破坏
fdisk /dev/sdb
mkfs -t xfs /dev/sdb1
vim /etc/fstab
/dev/sdb1 /opt xfs defaults 0 1
dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
reboot
#重启后由于sdb1磁盘超级块损坏,导致系统报错,无法启动,这时在当前命令行输入root用户密码进入shell
xfs_repair /dev/sdb1
reboot
磁盘资源耗尽
故障原因
磁盘空间已被大量的数据占满,空间耗尽
虽然还有可用空间,但文件数i节点耗尽
故障现象
无法写入新的文件,提示“… : 设备上没有空间”
部分程序无法运行,甚至系统无法启动
解决思路
清理磁盘空间,删除无用、冗余的文件转移或删除占用大量 i 节点的琐碎文件
进入急救模式进行修复为用户设置磁盘配额
检测磁盘坏道
检测硬盘坏道
磁盘坏道分为逻辑坏道和物理坏道两种
逻辑坏道主要由于软件操作不当造成 可以用软件修复
物理坏道只能通过更改磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏道的磁盘空间
当磁盘有以下现象是可能回事磁盘出现坏道:
读取磁盘中的数据时 磁盘设备发出异常声响
访问磁盘中的某个文件时 反复读取错误 提示文件损坏
对于新建的分区无法完成格式化
系统使用该磁盘时频繁死机
badblocks -sv /dev/sdb
文本处理
vim
命令模式
命令 | 功能 |
---|---|
Home键或“^”,数字“0” | 跳转至行首 |
End键或“$”键 | 跳转到行尾 |
1G或者gg | 跳转到文件的首行 |
G | 跳转到文件的末尾行 |
5G | 跳转到文件中的第5行 |
x或Del | 删除光标处的单个字符 |
dd | 删除当前光标所在行 |
5dd | 删除从光标处开始的行内容 |
d^ | 删除当前光标之前到行首的所有 |
d$ | 删除当前光标处到行尾的所有字符 |
yy | 复制当前行整行的内容到剪贴板 |
5yy | 复制从光标处开始的5行内容 |
p | 缓冲区中的内容粘贴到光标位置处之后 |
P | 粘贴到光标位置处之前 |
u | 按一次取消最近的一次操作,多次重复按u键,恢复已进行的多步操作 |
ZZ | 保存当前的文件内容并退出vi编辑器 |
末行模式
命令 | 功能 |
---|---|
:set nu | 在编辑器中显示行号 |
:set nonu | 取消编辑器中的行号显示 |
:q! | 放弃对文件内容的修改,并退出vi |
:wq | 保存修改的内容并退出 |
:#,# s/old/new/g | 在行号“#,#”范围内替换所有的字符串“old”为“new” |
:% s/old/new/g | 在整个文件范围内替换所有的字符串“old”为“new” |
/word | 从上而下在文件中查找字符串“word” n下一个,N上一个 |
?word | 从下而上在文件中查找字符串“word” n下一个,N上一个 |
系统符号&&正则符号
系统符号
# 基础符号
# #在命令提示符中表示有root权限,在配置文件中表示注释
# $在命令提示符中表示没有root权限,在命令行中读取变量值,在文本匹配中表示末尾
# !在罗辑判断中表示"非",在vim末行中表示强制
# ^在文本匹配中表示开头
# |在命令行中表示管道将前面命令的输出作为后面命令的输入,在grep的文本匹配中中表示或
#引用符号
# ''单纯表示字符串容
# ""会将其中读取变量的部分显示为原本的值
# ``会显示命令执行的结果而不是其中的文本内容
# $()会显示命令的结果并且可以多级嵌套
#重定向
# 0标准输入(基本不用) 1标准输出 2错误输出
# >覆盖写 >>追加写 <读入 <<分界符,输入重定向直到遇到分界符才结束
# &>正确错误都覆盖写 &>>正确错误都追加
# 1>> 11.txt 2>> 2.txt不同情况追加到不同文件
#路径
# ../ 上一级目录
# ./ 当前路径
# ~ 返回到家目录
# - 两个目录之间进行快速切换
#逻辑符号
# &&正确时执行
# ||错误时执行
#系统通配符
# * 模糊匹配所有内容
# {} 生成序列信息 (生成一行序列,可以是连续的,固定间隔的,或者组合的)
正则符号
#基础
# ^以什么开头
# $以什么结尾
# 不显示空行grep -v "^$"
grep -v "^$"
#通配符
# .匹配任何单个字符
# *匹配前一个字符的任意次出现
# .*匹配任意所有信息,贪婪匹配
#转义字符
# \n换行
# \t制表符
#[]组,有其中任何一个
#[^],不包含其中任何一个
#扩展正则(使用egrep/grep -E或者sed -r)
# +匹配前一个字符出现1次或多次
grep -v "^[#;]" 目标文件 #通过[]筛选出不包含#号和;号开头的行
# |或
# ()指定信息进行整体匹配,或者sed中后项引用前项
# {}制定匹配的次数 {n}正好n次 {n,}至少n次 {,m}至多m次 {n,m}n-m次之间
# ?匹配前一个字符0次或1次
grep
grep选项
-n 显示出匹配的行在原位置所在的行号
-a 二进制以文本方式搜索数据
-c 计算找到的搜索字符串总行数
-o 仅显示出匹配到的内容 统计文件中出现的次数
-i 不区分大小写
-v 反向选择
-E 扩展的grep,即egrep
-B 除显示匹配一行之外,并显示该行之前的num行
grep -B 3 "root" /etc/passwd
-A 除显示匹配一行之外,并显示该行之后的num行
-C 除了显示匹配的行外,并显示该行前后的各num行
-w 按单词搜索,相当于\b
-r 递归查找目录下所包含的内容
sed
字符流编辑工具(行编辑工具)
选项:
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e:直接在命令列模式上进行 sed 的动作编辑;
-r:扩展的正则表达式
-f:直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的sed 动作
-i:直接编辑源文件而不是输出到屏幕
动作:
d:删除
p:查询,通常与-n同时使用
i \:在被指定到的行上面插入文本
a \:在被指定到的行下面插入文本
c \:取代被指定的某些行
s:取代,内容取代,通常这个 s 的动作可以搭配正规表示式,例如 1,20s/old/new/g
r 文件路径:在指定的位置插入另外一个文件的内容
w 文件路径:将符合条件的所有行保存至指定的文件中
= 显示符合条件的所在行的行号
s@@@:查找条件也可以使用模式,但是被替换的内容不能使用模式
#查询
sed -n '3p' passwd.txt #查询文档第3行
sed -n '1,3p' passwd.txt #查询文档第1-3行
sed -n '1p;$p' passwd.txt #查询第一行与最后一行
sed -n '1,$p' passwd.txt #查询文件中所有内容
cat -n passwd.txt | sed -n '1,3p;5,10p'
#以指定内容查询
sed -n '/sshd/p' passwd.txt #只查询sshd相关的行
sed -n '/nologin$/p' passwd.txt #查询以nologin结尾的行
sed -n '/111/,/abc/p' passwd.txt #查询从111行开始到abc行中间的行,非贪婪匹配
sed -n '/root/p;/zhangsan/p' passwd.txt #只查询包含root或张三的行
sed 'G' passwd.txt #查询时在文本中的所有行后都加入一行空行
sed '/^$/d;G' passwd.txt #删除文本中的空行并将其他内容隔一行空行显示
sed '/abc/G' passwd.txt #在查询到的abc后面插入一行空行
sed '/abc/{x;p;x;}' passwd.txt #在匹配abc的前面插入一空行
sed '/abc/{x;p;x;G;}' passwd.txt #同时在前面后面插入一空行
sed = passwd.txt | sed 'N;s/\n/ /' #为每行内容加入行号
sed = passwd.txt | sed 'N;s/\n/\./' #为每行内容加入行号及.
#增加
sed '1i00,root,level9' passwd.txt #添加信息到第一行:
sed '3a00,root,level9' passwd.txt #在文件第三行之后添加信息
sed '$aabc' passwd.txt #在文件末尾添加一行新内容
#以关键字插入行内容
sed '/sshd/a123456' passwd.txt #在匹配行的下一行添加一行数字内容,/a表示在下一行添加内容:
sed '/sshd/i123456' passwd.txt #在匹配行的上一行添加一行数字内容,/i表示在上一行添加内容
sed -e '/zhangsan/i######' -e '/zhangsan/a######' passwd.txt #在有zhangsan行的前面添加###### 后面添加######信息 -e 同一行执行多条命令
#在匹配内容中增加内容*
sed 's/nologin$/&\aa/g' passwd.txt #在关键字为末尾的匹配行的末尾增加新内容/aaa
sed '/root/s/^/&aaa/' passwd.txt #在有包含root的行首加入字符aaa
sed -e '/root/s/$/&./' passwd.txt #在有包含root的行尾加入字符
#在有包含root的行首加入字符aaa并在以bash结尾的行加入内容.
sed -e '/root/s/^/&aaa/' -e 's/bash$/&./' passwd.txt
sed -e '/root/s/^/&aaa/;s/root$/&./' passwd.txt
#替换
nl passwd.txt | sed '73c 73行数据有误!'
nl passwd.txt | sed '70,73c no 70-73!!!'
nl passwd.txt | sed '70,$c over!'
#指定内容进行替换
sed s/root/aaaa/ passwd.txt #将每行的第一个出现的root都替换成aaaa
sed s/root/aaaa/g passwd.txt #将每行的所有root都替换成aaaa
sed s/0+/0/g passwd.txt #将文档中1个0及以上都改成1个0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #关闭selinux,使用-i表示直接修改配置文件
sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config #排除SELINUX行将其他行中enforcing内容替换成disabled
#删除
sed 8d passwd.txt #删除第8行再显示文本内容
sed '1,3d' passwd.txt #删除1-3行
sed 1,/^$/d passwd.txt #从文本开始处一直删除到第一个空行为止,第一个空行也会被删除
sed '/^$/d' passwd.txt #删除文本中的空行
sed '/sshd/d' passwd.txt#删除文本中包含sshd的行
sed 'n;d' passwd.txt #第一行开始,删除偶数行
sed 's/^[ \t]*//; s/[ \t]*$//' passwd.txt #删除每行行前行后的所有空格
ed '/sshd/,$d' passwd.txt #删除匹配行至最后一行
sed '$d' passwd.txt #删除最后一行
sed s/sshd//g passwd.txt #删除文档中所有包含sshd的关键字,行中其他数据保留
awk
常见内置变量
FS 指定字段分隔符,默认空格
NF 当前处理行的最后一列
OFS 输出分隔符
NR 当前处理行的行号
$0 当前处理行的整行内容
$n 当前处理行的第n个字段
基本语法参数
'' 为了和shell命令区分
{} 表示一个命令分组
pattern 过滤器,匹配pattern条件的行才进行action处理。
action是处理动作,常见的动作为print。
内置函数
gsub(r,s):在$0中用s代替r
index(s,t):返回s中的t的第一个位置
length(s):s的长度
match(s,r):s是否匹配r
split(s,a,fs):在fs上将s分成序列a
substr(s,p):返回s从p开始的子串
常用操作符、运算符及判断符
++ -- 增加与减少
^ 指数
+ - * / % 加减乘除取余
< <= == != > >= 数值比较
&& || 逻辑与逻辑或
= += -= *= /= %= ^= = 赋值
awk '{print $0}' netstat.txt # 列出文件所有内容
awk '/^tcp/ {print}' netstat.txt # 列出以tcp开头的行
awk '/udp$/ {print}' netstat.txt #列出以udp结尾的行
awk '{print $1,$4}' netstat.txt #默认以空格为分隔符,列出第一、第四列数据
df -TH | awk '{print $1}' #列出第一列内容,默认以空格为分隔符
awk -F: '{print $1}' passwd.txt #列出第一列内容,以:为分隔符
awk 'NR==3,NR==5 {print}' passwd.txt #查询第3-5行内容
awk -F: 'NR==3,NR==5 {print $1,$NF}' passwd.txt #以:为分隔符查询第3-5行的第一列与最后一列
awk 'length($0)>20 {print NR}' passwd.txt #将行中字符串数量大于20的行的行号显示出来
head -5 passwd.txt | awk -F: '{print $1}' #前五行的第一列
ifconfig ens32 | grep "inet" | head -1 | awk '{print "ip地址是:" $2}' #查询网卡信息后截取网卡IP地址并加上备注显示
以:为分隔符格式化输出第一列、第二列及最后一列:
printf为格式化查询,-12 -6 -10 分别为每列占用多少个空格
# awk -F: '{printf "% -12s % -6s % -10s\n",$1,$2,$NF}' /etc/passwd
shell脚本
基础脚本
#!/bin/bash
cat /etc/shells #查询centos系统存在的shell
echo $SHELL #查询系统默认的shell
#执行.sh脚本的方法,实际上通常只使用bash方式
bash test.sh #常用
sh test.sh #bash是sh的升级版,现在很多linux系统中sh命令实际上使用的就是bash
./test.sh #需要文件拥有X权限
. test.sh #不产生子进程
source test.sh #不产生子进程
#自定义环境变量
export 变量名=变量值
变量名=变量值;export 变量名
declare -x 变量名=变量值
#撤销变量定义
unset 变量名
变量名=''
read -p "提示内容" 变量名 #读取变量的值
+ - \* / % #变量数值的整数运算,条件表达式必须放在括号中间,且运算符两边要有空格
echo "5 * 1.7" | bc #bc计算器
#环境变量
env 查看当前工作环境的环境变量
PATH变量用于设置可执行程序默认搜索路径
#位置变量
$n:n为自然数。0代表命令本身,1到9代表第1到第9个参数(参数的值是执行该命令时,从1开始依次输入的),10以上的参数要用大括号包含,如${10}。
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
#条件测试
#文件测试
-d:测试是否为目录
-e:测试目录或文件是否存在
-f:测试是否为文件
-r:测试当前用户是否有权限读取
-w:测试当前用户是否有权限写入
-x:测试是否设置有可执行权限
#整数比较
-eq:第一个数等于第二个数
-ne:第一个数不等于第二个数
-gt:第一个数大于第二个数
-lt:第一个数小于第二个数
-le:第一个数小于或等于第二个数
-ge:第一个数大于或等于第二个数
#字符串比较
字符串比较
=:第一个字符串是否与第二个字符串相同
!=:第一个字符串与第二个字符串不相同, ! 表示取反
-z:检查字符串是否为空,对于未定义或赋予空值的变量将视为空串
##逻辑测试
&& || !
高级脚本
#完整的分支命令,可嵌套
if 条件; then
命令序列1
elif 条件; then
命令序列2
else
命令序列0
fi
#for循环
for 元素名 in 元素序列
do
命令序列
done
#while循环
while 条件
do
命令序列
done
#until 循环
until 条件
do
命令序列
done
#多分支,;;相当于break
case 元素名 int
状态值)
;;
*)
命令序列
esac
#break退出所有的循环
#continue退出当前循环
a='字符串1'
b="字符串2 $USER"
c="$a$b"
${#c} #字符串长度
${a:开始:结束(不包含):步长}
#数组
a=(A B "C" D)
#某一个元素
${a[0]}
#全部元素
${a[*]}
${a[@]}
#数组长度
${#a[*]}
${#a[@]}
#map
map=(["aa"]="11" ["bb"]="22")
map["name"]="val"
map["apple"]="pen"
${!map[@]} #所有的key
${map[@]} #所有的vlue
${#map[@]} #map长度
#遍历所有的key
for key in ${!map[@]};do
echo $key
done
#遍历value
for val in ${map[@]};do
echo $val
done
#遍历,根据key找到对应的value
for key in ${!map[*]};do
echo ${map[$key]}
done
#shell函数
function name() {
statements #使用位置变量$1等来获取参数
[return value] #返回值范围0-255
}
$RANDOM #随机数0 - 32767
${RANDOM:0:2} #表示取随机数,但是该数从0开始且只有2位数,":2"为值的位数,
$(expr $RANDOM % 26)#获取0-25之间的随机数
实验
实验0 初始化
#在手动的基础上优化,通过shell脚本一次性完成初始化过程
#注意:这里需要已经知道linux的ip地址,通过shell工具进行操作,直接在vmware里面不一定能够复制粘贴
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
#使用本地yum源
cd /etc/yum.repos.d/
mkdir back
mv ./* back #中间会报错,无法将目录移动到自己下面,不管
echo > local.repo <<EOF
[local]
name=CentOS 7.5
baseurl=file:///mnt
enabled=1
gpgcheck=0
" > local.repo
EOF
echo >> /etc/fstab <<EOF
/dev/cdrom /mnt iso9660 defaults 0 0
EOF
mount -a
yum install -y vim net-tools wget
#修改主机名
echo "centos-shell" > /etc/hostname
echo "127.0.0.1 localhost centos-shell" > /etc/host
#优化ssh,否则后期会进行检查,速度很慢
sed -ie "/UseDNS/s/yes/no/g;/UseDNS/s/#//g;/^GSSAPI/s/yes/no/g" /etc/ssh/sshd_config
systemctl restart sshd
#同步时间,具体日期时间根据实际情况
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -s 20230412
date -s 00:00:00
hwclock -w
hwclock -r
注意:此处创建快照"初始化",以便于故障时恢复或者还原系统状态避免各种设置相互干扰,以后若说以"初始化"快照为基础,均不再重复该部分内容
实验0-1 增加网卡
这一步的操作不是必须的,也可以在安装的时候直接配置,如果在安装操作系统的时候没有进行配置,也没有图形化界面,并且实验中需要使用到多张网卡的情况下可以使用这种方式为虚拟机增加一张网卡
需要先关闭虚拟机,在vmware中为虚拟机添加网卡,然后进入操作系统进行相应的操作
nmcli con show #查询网卡的uuid
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-ens33 #根据现在配置
vim ifcfg-ens33
BOOTPROTO=dhcp
NAME=ens33
UUID=输入查询到的网卡uuid
DEVICE=ens33
实验0-2 添加阿里云源
这一步通常是为了安装和更新软件,但不是必须
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update && yum upgrade -y