25.网络初始配置及测试
首先,linux虚拟机和vmnet8是在同一个网段上,vmnet8相当是windows系统,因此可以相互访问。
(vmnet8访问linux虚拟机没有限制,但反过来vmnet8有防火墙,需要关闭才能访问)
其次,vmnet8充当一个代理的角色。linux虚拟机想要访问外界互联网,就得先和无线网卡连接,因为无线网卡才是一个可以真正上网的IP,而vmnet8又能和无线网卡连接。所以vmnet8就充当中间人,linux虚拟机就间接的连接了无线网卡。
然后,无线网卡能访问教室里的局域网,局域网肯定有个公用的网关,网关再和真正的互联网进行访问。
这就是为什么虚拟机和无线网卡不是同一个网段,但是还是能连接上网,就是因为走了一个代理模式。
且虚拟机的网络号是固定的,只有主机号每次登陆时会自动分配,避免ip冲突。
查看windows网络ipconfig
例如vmnet8。
ipconfig
查看linux网络ifconfig
ifconfig
Windows网络检测工具ping
主要用于检测远程主机是否正常,或者两部主机之间的网卡或者网线故障。
ping 目的主机IP或者DNS或者主机名(主机名需要hosts映射)
Windows测试端口telnet
在cmd中,输入指令。
telnet IP地址:端口号
telnet案例
启用防火墙,测试111 端口是否能telnet连接
telnet 192.168.2.40 111
linux网络配置
自动配置
DHCP(自动配置),日常使用在家就够了。
指定配置
直接修改配置文件来指定IP,并且可以连接到外网,工作使用。
vi/etc/sysconfig/network-scripts/ifcfg-ens33
这是Linux操作系统下的网卡配置文件,通常保存在/etc/sysconfig/network-scripts目录中。
文件名为ifcfg-网卡名称。
[root@localhost network-scripts]# cat ifcfg-ens33 TYPE="Ethernet" #网络类型(通常是Ethemet以太网) PROXY_METHOD="none" #代理方式:为关闭状态 BROWSER_ONLY="no" #只是浏览器:否 BOOTPROTO="static" #网卡的引导协议【static:静态IP dhcp:动态IP none:不指定,不指定容易出现各种各样的网络受限】 DEFROUTE="yes" #默认路由 IPV4_FAILURE_FATAL="no" #是否开启IPV4致命错误检测 IPV6INIT="yes" #IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响) IPV6_AUTOCONF="yes" #IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响) IPV6_DEFROUTE="yes" #IPV6是否可以为默认路由:是(现在还未用到IPV6,不会有任何影响) IPV6_FAILURE_FATAL="no" #是否开启IPV6致命错误检测 IPV6_ADDR_GEN_MODE="stable-privacy" #IPV6地址生成模型 NAME="ens33" #网卡物理设备名称 UUID="ab60d501-535b-49f5-a76b-3336a4120f64"#通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网 DEVICE="ens33" #网卡设备名称(接口名),必须和‘NAME’值一样 ONBOOT="yes" #是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes` IPADDR=192.168.137.129 # 本机IP NETMASK=255.255.255.0 #子网掩码 GATEWAY=192.168.137.2 #默认网关 DNS1=8.8.8.8# #域名解析器 DNS2=8.8.8.5#
如果虚拟机的IP网段发生变化,那么Window下的vmnet8IP也要跟着改变,不然两者无法网络连接。
最后,service network restart重启网卡或者reboot重启系统 ,配置文件修改生效。
设置主机名和hosts映射
hosts:一个文本文件,用来记录IP和Hostname(主机名)的映射关系。
DNS:互联网上作为域名和IP地址相互映射的一个分布式数据库。
查看Linux虚拟机主机名
hostname
设置Linux虚拟机主机名
给linux系统设置主机名
在/etc/hostname中指定,重启生效。
Windows通过hosts文件映射找到Linux
在Windows系统通过ping IP可以连接到linux虚拟机,但是如果是通过ping Linux虚拟机的主机名呢?
此时此刻我们windows系统有个hosts文件,里面写着主机名和IP的映射关系,你通过主机名找Linux虚拟机,hosts映射相当于把主机名替换成了对应的IP。
但是此时此刻我们修改了Linux虚拟机的新主机名,在Windows的hosts文件还是之前的旧主机名,即使IP是对的,但是映射关系已经对不上了。
那怎么办?
那就修改C:\Windows\System32\drivers\etc目录下的hosts文件。
在最后添加IP 加主机名即可。
也就是说此时我们ping 主机名 ,就会到这个文件去找IP,所以最后还是一个走IP的过程。
Linux通过hosts文件映射找到Windows
在 /etc/hosts指定即可。
只要Windows 端的IP能对应上,主机名随便你起,但是ping主机名的时候你也只能用你起的这个名字去ping测试连接。
举例:浏览器输入www.baidu.com
1)浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析。浏览器缓存和DNS缓存,可以理解为本地解析器缓存。
2)一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录) .如在Windows 的cmd窗口中输入下方指令:
ipconfig /displaydns //DNS域名解析缓存
ipconfig /flushdns //手动清理dns缓存
3)如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
4) 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,到公网的域名服务DNS进行查找解析,如果还是找不到则返回域名不存在。
26.进程管理(重点)
在 Linux 系统中,进程是一个正在执行的程序的实例,它拥有自己的进程号(PID)、内存空间、文件描述符等资源。系统服务也是一种在后台运行的程序,它们通常以守护进程(daemon)的形式存在。
因此,可以说系统服务就是一个特殊类型的进程,它不像前台应用那样需要与用户互动,在后台运行并提供某些功能或服务。相比较而言,系统服务会一直在后台运行直到被手动停止或系统关机。
在 Linux 中,通常使用init 或 systemd 这样的进程管理器来启动和管理系统服务。当一个系统服务启动时,init 或 systemd 会为其分配一个单独的进程ID,并且它将以该 ID 的身份在操作系统上运行。
因此可见,在 Linux 中一个系统服务可以算作一个进程。
静态显示系统进程信息
ps和top相似,但一个是静态一个是动态。
😉 ps -aux详解
基本语法
ps-aux l grep xxx ,比如我看看有没有sshd服务
选项说明
1.ps-a:显示当前终端的所有进程信息
2.ps -u:以用户的格式显示进程信息
3.ps-x:显示后台进程运行的参数
System V展示风格
USER: 用户名称
PID: 进程号
%CPU:进程占用CPU的百分比
%MEM: 进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位: KB)
RSS:进程占用的物理内存大小(单位: KB)
TTY:终端名称,缩写
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间.
COMMAND: 启动进程所用的命令和参数,如果过长会被截断显示
😉 ps-ef详解
ps -ef 是以全格式显示当前所有的进程。-e所有进程,-f全格式
是BSD风格。关于BSD是什么,详情点击这里。
UID:用户ID .
PID:进程ID
PPID:父进程ID
C: CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME: CPU 时间
CMD:启动进程所用的命令和参数
ps -ef 和 ps -aux 在 Linux 中都是用来查看进程的命令。
它们的区别在于:
ps -aux 显示的信息更详细,包括进程启动时间、CPU 使用率、内存使用率等。
而 ps -ef 只显示进程的基本信息。
终止进程
kill
杀死单个进程。
选项说明
-9 强制停止
基本语法
kill 进程号
killall
杀死进程以及进程相关联的进程。
基本语法
killall 进程名称
进程树pstree
pstree -p:显示进程PID
pstree -u:显示进程所属用户
实例:创建子shell进程
在 Linux 中,可以通过在当前 shell 环境下启动一个新的子 shell 来完成。
一般情况下,在 Bash Shell 中,可以使用以下两个命令来启动一个新的子 shell:
1.bash 命令:这个命令会开启一个新的 Bash Shell 终端窗口,并进入子 shell 环境。例如:
bash
2.sh或/bin/sh命令:这个命令会开启一个新的 Bourne Shell 或兼容版本的 Shell 终端窗口,并进入子 shell 环境。例如:
sh
或者
/bin/sh
注意,启动一个子 shell 后,你可以在子 shell 环境中执行任何命令,但是它们都不会对父 shell 环境造成任何影响。当退出子 shell 后,你将回到原来的 shell 环境。
3.退出子shell:exit或者kill -9 子shell进程号(强制退出)
局部变量:
27.Linux开机流程
Linux开机的流程大致可分为以下几个步骤:
1. BIOS和BootLoader启动
当计算机开机时,首先由BIOS(Basic Input/Output System,基本输入输出系统)进行自检,并确定哪些硬件可以使用,然后将控制权交给引导加载程序(BootLoader)。
常见的引导加载程序有GRUB、LILO等,它们负责查找并加载操作系统内核。
2. 内核启动
引导加载程序通过从硬盘、U盘等存储设备中读取内核镜像,并将内核镜像载入到内存中。随后,内核开始执行,首先进行硬件初始化并建立系统数据结构。
3. 运行init进程
当内核启动后,第一个用户级进程--init进程会被创建。init是所有用户级别进程的祖先进程,在整个系统运行期间都不会退出。其主要职责是启动和管理其他所有进程的生命周期。
4. 启动若干个系统服务和守护进程
在启动过程中,init会读取配置文件,并依次启动一些必要的系统服务和守护进程。这些服务和守护进程包括网络服务、防火墙、日志管理等。通过setup,选择系统服务,就可以选择哪些服务是否开机启动,或者手动启动
5. 进入图形界面或命令行界面
最后一个步骤是根据配置文件决定是否需要进入图形界面或命令行界面。如果用户登录时没有指定运行级别,默认情况下会直接进入图形化运行级别(Runlevel 5),否则会按照用户指定的运行级别执行。
以上就是Linux开机流程的大致说明,每个步骤涉及到的细节还很多,请根据实际情况了解更多信息。
28.Service服务(重点)
目前service指令和chkconfig指令都只管理这三个服务了,其他的服务都是systemctl指令在管理。
本来大部分是用service指令,Centos7.0更新后大部分都变成systemctl指令了,留下三个旧的。
Service指令(旧)
Centos7.0后,很多服务使用systemctl指令来管理。
基本语法
service 服务名 选项
选项说明
start | stop | restart | reload | status
如果stop了sshd,相当于远程登录的服务被关闭,那么XShell也就登录不上去了,等于访问22端口被关闭了。
指令位置:
ls -l /etc/init.d
service指令管理的服务在 /etc/init.d 中查看。
chkconfig 指令(旧)
Centos7.0后,使用systemctl指令来管理。
通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭,不过我们用的最多的是3和5。
基本语法
查看服务chkconfig--list [| grep xx]
chkconfig 服务名--list
chkconfig --level5 服务名 on/off
指令位置:
ls -l /etc/init.d
chkconfig指令管理的服务在/etc/init.d 中查看。
案例演示:
对network服务进行各种操作,把network在3运行级别关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on
1)首先看看这个服务目前是什么状态。
代表在0运行级别是关的,在1运行级别也是关的,在2运行级别是开的,等等以此类推。
2)修改并查看
我们可以看到3运行级别已经变成关的了。
注意:最后使用完需要重启reboot。
systemctl指令(新)
设置服务的启动停止指令
基本语法
systemctl 选项 服务名
选项: start | stop | restart | status
指令位置
ls -l /usr/lib/systemd/system
systemctl指令管理的服务在 /usr/lib/systemd/system 中查看。
设置服务的自启动状态
systemctl list-unit-files [| grep 服务名(查看服务开机是否启动, grep可进行过滤)
systemctl enable服务名(设置服务开机启动)
systemctl disable服务名(关闭服务开机启动)
systemctl is-enabled服务名(查询某个服务是否是自启动的)
Service服务的firewall服务
可以把防火墙理解成管理端口的,有两个组open和close,有部分端口在close组中,其余部分在open组中。
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,而指定端口没有在防火墙中,那么外部请求就不能跟服务器监听端口通讯。这时,需要把指定的端口添加到防火墙的open端口列表中。比如80、22、 8080等等。
打开端口: firewall-cmd --permanent --add-port=端口号/协议
关闭端口: firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效: firewall-cmd --reload
查询端口是否开放: firewall-cmd -query-port=端口/协议
举例:
1.启用防火墙,测试111 端口是否能telnet连接
telnet 192.168.2.40 111
2.开放111端口
firewall-cmd --permanent --add-port=111/tcp (开放端口)
firewall-cmd --reload(重新载入)
firewall-cmd -query-port=111/tcp(如果需要,可以查询确认是否开放)
打开成功会显示success或yes。
3.再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp (开放端口)
firewall-cmd --reload(重新载入)
firewall-cmd -query-port=111/tcp(如果需要,可以查询确认是否开放)
关闭成功会显示success或no。
29.动态监控进程top
ps和top相似,但一个是静态一个是动态。
动态显示正在执行的进程信息。
基本语法
top 选项
选项说明
当你用top指令进入下下图后,你可以用下方操作来控制显示,就像more指令查看文档的操作一样。
再接着解释一下下方名词的含义:
1.top:当前时间
2.up:系统运行了多久
3.users:有几个用户登录此服务器
4.load average:负载均衡,3个相加除以三大于0.7则危险。
5.Tasks:任务数
6.running:正在运行的进程
7.sleeping:睡眠中的进程
8.stopping:停止中的进程
9.zombie:僵尸进程,没运行但占内存。
10.%CPU(s):显示CPU的总使用率以及各个CPU核心的使用情况
11.KiB Mem:显示物理内存总量和可用内存。
12.KiB Swap:显示交换分区总量及可用空间。
13.PID: 进程ID,表示系统为每个进程分配的唯一标识符。
14.USER: 进程所属用户,表示运行该进程的用户帐号名。
15.PR: 进程优先级别,表示内核按照人工设置的优先级来调度进程执行的顺序。PR值越低,表示该进程在系统中的优先级别越高。
16.NI: NI值也是进程优先级别中的一种方式,与PR值类似,但是NI值是在PR值基础上计算而来。较高的NI值表示较低的进程优先级别。
17.VIRT: 进程占用虚拟内存大小(单位K),包括程序、数据、动态链接库等所有映射到进程地址空间中的内存空间大小。VIRT大小可能会比物理内存和交换空间总和还要大。
18.RES: 进程占用实际物理内存大小(单位K),表示此刻真正被分配给该进程使用的物理内存空间大小。
19.SHR: 共享内存大小(单位K),分为共享库和私有数据两部分。共享库是所有进程可以共享使用的代码段和静态数据段;私有数据则只属于一个进程自己使用。
20.S: 进程状态,包括R(running)、S(sleeping)、T(stopped或traced)、Z(zombie)等。
21.%CPU: 进程占用CPU的使用率,表示该进程在一段时间内占用的CPU资源百分比。
22.%MEM: 进程占用物理内存的使用率,表示该进程占用系统物理内存总量的百分比。
23.TIME+: 进程已经启动的累计时间,包括运行在用户态和内核态的总时间。
top案例1
监视特定用户。
比如我们监控tom用户。
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可。
top案例2
终止指定的进程。
比如我们要结束tom登录。
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号。
30.监控网络端口状态netstat
可以用来查看目前系统的端口和外部端口的情况,以及被什么进程占用着端口。
基本语法
netstat [选项]
选项说明
1. netstat -a:显示所有打开的端口
2. netstat -t:显示所有TCP连接
3. netstat -u:显示所有UDP连接
4. netstat -n:以数字形式显示所有地址和端口号,而不是将它们转换为域名和服务名称
5. netstat -p:显示哪个 进程(服务)正在 监听或连接Linux系统的端口
6. netstat -r:显示当前的路由表信息
7. netstat -s:显示各种统计信息,如传输数据量、错误数量等
netstat案例1
查看当前的所有端口状态(监听/连接)
输入netstat -an
解释一下含义:
Proto(protocol):协议(tcp就是IPv4,tcp6就是IPv6)
Recv-Q:接收的信息数量
Send-Q:发送的信息数量
Local Address:本地地址及端口
Foreign Address:外部地址及端口
State:状态(ESABLISHEN:连接成功)
netstat案例2
查看sshd 服务(进程)的网络信息。
我们前面在进程管理说过,系统服务也算一个进程,那么系统服务也会监听我们Linux系统的端口。
但他们是本地的,所以没有外部地址。
输入netstat -anp | grep sshd
看完这个对我们的远程登录应该有些了解了吧,就是XShell6连接我们系统服务sshd的22号端口。连接成功后就多了一个进程,而这个进程的中间人就是我们的sshd。
31.rpm包和yum管理器
rpm
rpm(Red Hat Package Manager ),它是一种在Red Hat和CentOS Linux操作系统上使用的软件包管理器 。
如果你是Ubuntu系统则是用.deb(Debian)软件包,则用dpkg包管理器来安装和管理deb包 。
1. 下载.deb软件包:在终端中运行 `wget *软件包下载链接*` 命令或直接从软件官方网站下载。
2. 安装.deb软件包:在终端中运行 `sudo dpkg -i *软件包.deb*` 命令,这将安装该软件包。
3. 如果出现依赖关系问题,则需要手动安装缺少的依赖项。您可以使用命令 `sudo apt-get install -f` 来自动解决依赖关系问题并完成安装。
就是类似Windows的setup.exe的软件安装包,用指令安装,卸载,以及下载。
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
32.shell编程
33.Ubuntu系统
34.Ubuntu之APT远程登录
35.日志管理及日志轮替
36.Linux内核源码
37.Linux备份和恢复
32、ANSI转义序列
ANSI转义序列是一种特殊的字符序列,用于控制文本终端的显示方式、颜色和样式。通常由转义字符(\033)和一系列特定的控制字符组成。
ANSI转义序列以\033[开头,后面跟着一个或多个参数,每个参数用分号;隔开,最后以字母结尾。参数可以是数字或字母,不同的参数组合表示不同的控制命令。例如,\033[31m这个转义序列用于设置前景色为红色。
常见的ANSI转义序列包括:
● 颜色控制序列:用于设置文本的前景色和背景色,例如 \033[31m 表示设置前景色为红色,\033[41m 表示设置背景色为红色。
● 光标控制序列:用于移动光标或隐藏/显示光标,例如 \033[2J 表示清除屏幕内容并将光标移动到左上角,\033[?25l 表示隐藏光标。
● 显示属性序列:用于设置文本的样式,例如 \033[1m 表示设置粗体样式,\033[4m 表示设置下划线样式。
● 其他控制序列:还有其他许多控制序列可以用于控制终端的行为,比如 \033[0m 表示重置所有属性为默认值。
ANSI转义序列通常用于编写控制终端输出的脚本或程序,例如终端颜色化的工具。
# 字体颜色 for i in {31..37}; do echo -e "\033[$i;40mHello world!\033[0m" done
作用是在终端中输出带有颜色的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[表示开始一个转义序列,$i表示循环变量i的值,它代表不同的颜色代码(31表示红色,32表示绿色,33表示黄色,34表示蓝色,35表示紫色,36表示青色,37表示白色),;40m表示设置字体颜色为$i对应的颜色,背景颜色为黑色(40),Hello world!表示要输出的文本,\033[0m表示重置颜色为默认值。
这句话的意思是循环打印7次"Hello world!",每次使用不同颜色(从红色到白色)和黑色背景输出。
# 背景颜色 for i in {41..47}; do echo -e "\033[47;${i}mHello world!\033[0m" done
作用是在终端中输出带有背景色的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[表示开始一个转义序列,47表示背景颜色为灰色,${i}表示循环变量i的值,它代表不同的颜色代码(41表示红色,42表示绿色,43表示黄色,44表示蓝色,45表示紫色,46表示青色,47表示白色),m表示转义序列的结束符号,Hello world!表示要输出的文本,\033[0m表示重置颜色为默认值。
这句话的意思是循环打印7次"Hello world!",每次使用不同颜色(从红色到白色)和灰色背景输出。
# 显示方式 for i in {1..8}; do echo -e "\033[$i;31;40mHello world!\033[0m" done
这句话的作用是在终端中输出带有不同显示方式的文本。它使用了ANSI转义序列来设置文本的样式和颜色。
具体来说,\033[表示开始一个转义序列,$i表示循环变量i的值,它代表不同的显示方式(1为粗体、2为淡色、3为斜体、4为下划线、5为闪烁、6为闪烁并且粗体、7为反显、8为隐藏),;31表示字体颜色为红色,;40表示背景颜色为黑色,m表示转义序列的结束符号,Hello world!表示要输出的文本,\033[0m表示重置颜色为默认值。
这句话的意思是循环打印8次"Hello world!",每次使用不同的文本显示方式(从粗体到隐藏)和红色字体、黑色背景输出。