本篇博客是上一篇 详解Linux(基础篇) 的进阶篇,还没有看过上篇博客的同学建议先花上20多分钟浏览一下上篇的基础,有了上篇博客的基础,再看本文,就会事半功倍,不然就会觉得本文的内容有点突兀。
本文主要介绍了Linux中的定时任务调度、磁盘分区、网络配置、进程管理以及RPM软件包的安装,其中每一个难点都有详细的文字说明和案例以及截图证明,适合新手村的同学快速掌握Linux的知识,也适合高手用来复习和查看指令,毕竟那么多的指令,不可能一下子都记住。
这是2021年的第一篇博客,是在过年这几天忙里偷闲写的♂️,整理不易,如果您觉得本文不错,望一键三连加分享。
关注✨✨博主
学习资料:
链接:https://pan.baidu.com/s/1Mp3nZJOxINhD6s_SqKJ14Q
提取码:0pcu
(1)概述
Linux中有一个后台程序,crond,它可以定时的去调度我们设置的任务。
crond的定时任务是反复执行的。
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
crontab 进行定时任务的设置
# 基本语法
crontab [选项]
# 编辑Linux后台程序crond去执行某一脚本或程序,编辑调度文件
crontab -e
# 接着输入任务到调度文件
# 执行的脚本,每隔一分钟执行一次 ls -l /etc > /tmp/test.txt
*/1 * * * * ls -l /etc > /tmp/test.txt
选项 | 功能 |
---|---|
-e | 编辑crontab定时任务 |
-l | 查询crontab定时任务 |
-r | 删除当前用户的所有crontab定时任务 |
参数说明:
(1)5个占位符的说明
参数 | 含义 | 范围 |
---|---|---|
第一个 * |
一小时中的第几分钟 | 0-59 |
第二个 * |
一天中的第几个小时 | 0-23 |
第三个 * |
一月中的第几天 | 1-31 |
第四个 * |
一年中的第几个月 | 1-12 |
第五个 * |
一周中的周几 | 0-7(0和7都表示周末) |
(2)特殊符号的说明:
符号 | 含义 |
---|---|
* |
表示任何时间,例:第一个* 就表示每小时中的每分钟都执行一次 |
, |
表示不连续的时间,例:0 8,12,16 * * * 表示在每天的8点0分、12点0分,16点0分都执行一次 |
- |
表示连续的时间,例:0 5 * * 1-6 表示在周一到周六的每一天的5点0分都执行一次。 |
*/n |
表示每隔多久执行一次,例:*/10 * * * * 表示每天每隔10分钟就执行一次 |
(3)特定时间案例
时间 | 含义 |
---|---|
30 8 * * * |
每天的8点30分执行一次 |
20 9 * * 3 |
每周三的9点20执行一次 |
0 10 1,15 * * |
每月的1号和15号的10点0分执行一次 |
*/10 5 * * * |
每天的5点,每隔10分钟执行一次 |
10 9 * * 4-6 |
每周的周四到周六的9点10分执行一次 |
(2)应用案例
# 案例一:每隔一分钟,就将当前的日期信息追加到到文件 /tmp/mydate.txt
crontab -e
*/1 * * * * date >> /tmp/mydate.txt
# 案例二:使用脚本完成每隔一分钟,将当前日期和日历都追加到 /home/mycal.txt 文件中
cd /home
# 编写脚本
vim my.sh
date >> /home/mycal.txt
cal >> /home/mycal.txt
现在这个 my.sh 文件是没有执行权限的,要给他赋予执行权限。
# 给我们写的脚本赋予执行权限
chmod u+x my.sh
写好脚本之后,可以直接使用命令执行,命令如下:
# 执行当前目录下的 my.sh 脚本
./my.sh
但是我们不可能每分钟都手动执行一下这个命令,因此我们可以将其写入调度文件中,让crond去定时调度执行它。
crontab -e
*/1 * * * * /home/my.sh
# 案例三:每天凌晨一点,备份mysql数据库mytest到文件 /home/db.bak文件中
crontab -e
0 1 * * * mysqldump -u root -p 密码 mytest > /home/db.bak
crond 相关指令
# 终止任务调度
crontab -r
# 查看当前用户的所有任务调度
crontab -l
# 重启任务调度
service crond restart
1、原理概述
# ps -ef 检测当前正在运行的所有进程
ps -ef
# 使用过滤查询,只查看 atd 进程。
ps -ef | grep atd
出现如下内容,则表明 atd 进程正在运行中。
2、at 命令格式
# at 命令,Ctrl+D 结束at命令的输入(输入两次才有效)
at [选项] [时间]
选项如下:
选项 | 含义 |
---|---|
-m | 当指定的任务完成后,给用户发送邮件,即使没有标准输出 |
-I | at q 查询的别名 |
-d | at rm 删除的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定的队列 |
-f <文件> | 从指定文件中读取任务而不是从标准输入中读取 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
3、at 时间定义
at 指定时间的方法:
hh:mm
(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
,表示在当天的 4点整执行一次。now + count time-units
,now就是当前时间,time-units 是时间单位,这里能够是minutes (分钟)、hours(小时)、days(天)、weeks(星期)。count 是时间的数量,几天,几小时。 例如:now + 5 minutes,表示5分钟后执行一次。4、应用实例
# 查询系统中没有执行的任务(以下两条命令等价)
atq
at -l
# 案例一:设置三天后的下午5点执行命令, ls /home
# 注意,如果在这里输入错误,想要删除的话,按住Ctrl+删除键。
at 5pm + 2 days
at> /bin/ls /home
# 案例二:设置明天 凌晨3点钟,输出时间到指定文件内
at 3am tomorrow
at> date > /home/mydate.txt
# 案例三:设置2分钟后,输出时间到指定文件内
at now + 2 minutes
at> date > /home/mytime.txt
# 案例四:使用脚本执行定时任务,输出日历到指定文件中
# 编辑脚本
vim test.sh
cal > mytest.txt
# 给脚本赋予执行的权限
chmod u+x test.sh
# 设置定时任务
at now + 1 minutes
at> /home/test.sh
# 删除定时任务(一下两条指令等价)
atrm 任务编号
at -d 任务编号
(1)Linux中分区的概念
# 查看当前系统的分区情况(怎么记这个命令?老sb唠嗑)
lsblk
(2)Linux硬盘类型
Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘。
hd
:表明分区所在设备的类型,这里是指 IDE 硬盘。x
:为盘号
~
:代表分区。
hda3
表示为第一个 IDE 硬盘上的第三个主分区或扩展分区。hdb2
表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。sd
:表示分区所在设备的类型的,这里是指 SCSI 硬盘。# 查看设备的挂载详细情况
lsblk -f
(1)步骤:
(2)具体添加硬盘的步骤如下:
1、点击设置
2、选中硬盘,点击添加。
3、选中硬盘,点击下一步。
4、选择磁盘类型为 SCSI
,下一步。
5、创建新的虚拟磁盘
6、设置磁盘容量。
7、指定磁盘文件(默认即可)
8、可以看到这里多了个新硬盘,点击确定。
9、然后重启系统即可识别到新硬盘。
sdb
,因为我们的第一块磁盘编号是 sda
。(3)给新增的磁盘分区
# 分区命令
fdisk /dev/磁盘编号
例:fdisk /dev/sdb
输入分区命令,显示如下,
常用操作:
操作 | 含义 |
---|---|
m | 显示帮助信息 |
d | 删除分区 |
q | 直接退出,不保存修改 |
n | 添加一块新的分区 |
w | 保存退出 |
p | 显示磁盘分区,等同于 fdisk –l |
说明:
现在有了分区之后,还不能直接挂载,需要进行格式化。格式化的原因是要给这个分区指定它的文件类型。
(4)格式化分区
# 分区命令,文件类型一般为 ext4,分区编号就是上面执行分区时生成的编号。
mkfs -t 文件类型 /dev/分区编号
# 例
mkfs -t ext4 /dev/sdb1
格式化完成之后,系统就会生成一个UUID,来唯一标识这块分区。
(5)挂载
我们在根目录下创建一个目录,/mydisk
,来挂载这块分区。因为Linux中将一个分区和一个目录联系起来,打开一个目录,就相当于进入一块分区。
挂载:就是将一个目录和分区联系起来。
# 先切换到根分区(这里不一定分要挂载到根分区下,也可以挂载到/home或/root下)
cd /
# 创建一个目录
mkdir mydisk
# 挂载分区
mount /dev/sdb1 /mydisk
挂载完毕之后,我们在查看系统分区情况。可以发现新的分区已经有了挂载点。
卸载分区,分区中的内容不会被删除。
# 卸载命令
umount 设备名称或挂载目录
# 例
umount /dev/sdb1
umount /mydisk
注意:用命令行挂载的方式,Linux系统重启之后就会失效。
(6)设置为永久挂载
编辑 /etc/fstab 文件实现永久挂载。
# 编辑 /etc/fatab 文件,实现永久挂载
vim /etc/fstab
这里可以写分区的UUID,也可以写分区编号(例:/dev/sdb1 )。
# 添加完成后 执行以下命令,使挂载即刻生效
mount –a
在Linux的使用过程中,随着我们不断的给Linux系统中添加上传文件,它的磁盘空间肯定是越来越少的,因此,我们应该实时掌握磁盘的使用情况,以做出相应操作,如:增加磁盘、增加分区等。
查询系统整体磁盘使用情况:
# 查看的命令如下
df -h
查看指定目录的磁盘使用情况
# 如果不指定目录,则默认查看当前目录的磁盘使用情况
du [选项]
# 指定目录
du -h /home
常用选项:
选项 | 含义 |
---|---|
-h | 显示时加上单位,k |
-s | 指定目录占用大小汇总 |
-a | 含文件 |
-c | 列出明细的同时,显示汇总值 |
–max-depth=num | 指定子目录深度为num |
# 查询 /home 目录的磁盘占用情况,深度为 1
du -hac --max-depth=1 /home
# 统计数据
wc
1、统计目录下文件的个数
# Linux的命令是支持正则表达式的。因此可以使用其模糊匹配。
# 显示 /root 目录下文件的个数,使用 wc 指令统计数量。
# 因为文件是以 - 开头的
ls -l /root | grep "^-" | wc -l
2、统计目录下目录的个数
# 统计 /root 目录下目录的个数
ls -l /root | grep "^d" | wc -l
3、统计目录包括子目录中文件的个数
# R 表示递归的意思
ls -lR /root | grep "^-" | wc -l
4、以树状显示目录下的文件及目录结构
tree 目录
例:tree /root
注意,Linux中默认是没有 tree
指令的,我们需要手动安装一下。安装指令如下:
# 安装的前提是Linux系统需连通外网。可以是 ping 命令检测一下。
yum install tree
# ping 百度
ping www.baidu.com
出现以下内容则表示网络畅通。
1、Linux下查看IP地址
ifconfig
2、Windows下查看IP地址。
NAT网络连接模式下,Linux和Windows母机的通信是通过VMNet 8 完成的。
ipconfig
(1)NAT网络配置原理图
注意:如果你的Windows母机和Linux虚拟机是在同一网段下,但是出现互相 ping 不通的情况,可以尝试将Windows的防火墙关闭。
Linux的IP地址的网段是可以指定的。
(2)查看虚拟网络编辑器
(3)测试网络连通性
# 测试当前主机是否可用连通目的主机
ping 目的主机的IP
# 测试当前主机是否可以连通互联网
ping www.baidu.com
(1)第一种配置方法—自动获取
1、打开Linux的网络设置
2、修改网络设置
3、修改网络连接方式为自动获取
(2)第二种配置方法—指定IP
ifcfg-ens33 文件参数说明
# 网络类型,通常是 Ethernet,一般还有bond,bridge
TYPE="Ethernet"
# 是否允许非root用户控制该设备
USERCTL=no
PROXY_METHOD="none"
BROWSER_ONLY="no"
# IP的配置方法(none/static/bootp/dhcp)
# none 引导时不使用协议
# static 静态IP
# bootp BOOTP协议
# dhcp 动态分配
BOOTPROTO="dhcp"
# 是否设置默认路由
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
# IPV6 是否有效,(yes/no)
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
# 这个参数对应的值是网卡名,是给用户看的
NAME="ens33"
# 随机id
UUID="7415a862-a57f-44c7-8946-6a5ee37621ee"
# 接口名(设备、网卡)
DEVICE="ens33"
# 系统启动的时候网络接口是否有效(yes/no)
ONBOOT="yes"
# IP地址(static时使用)
IPADDR=192.168.100.140
#网关 (static时使用)
GATEWAY=192.168.100.2
#域名解析器 (static时使用)
DNS1=192.168.100.2
ens33 就类似于网卡
第一步:修改Linux的IP地址。
/etc/sysconfig/network-scripts/ifcfg-ens33
该文件实现# 修改 ifcfg-ens33 文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
在 ifcfg-ens33
文件中做如下修改
将 BOOTPROTO="dhcp"
由 dhcp 改为 static 。
再在文件中添加一下内容:
# IP地址,这里指定为 192.168.200.130
IPADDR=192.168.200.130
#网关,这里指定为 192.168.200.2
GATEWAY=192.168.200.2
#域名解析器,这里指定为 192.168.200.2
DNS1=192.168.200.2
第二步:修改 VMNet 8 的网络IP
ifcfg-ens33
文件中的网关。# 重启网络服务
service network restart
重启之后,查看Linux的IP地址。
再查看 VMNet 8 的IP地址。配置同样生效。
使用 ping 命令检测 Linux和 Windows以及互联网的连通性。
(1)设置主机名
疑问一:IP地址就可以标识一台主机,为什么要设置主机名呢?
# 查看主机名
hostname
疑问二:如何设置或修改主机名呢?
/etc/hostname
,在该文件中指定。# 先查看一下 /etc/hostname 文件,也是显示当前主机名
cat /etc/hostname
# 编辑修改 /etc/hostname 文件
vim /etc/hostname
上图中,可以看到主机名已修改完成,但是还没有生效,需要重启系统才能生效。
reboot
(2)设置 host 映射
疑问三:设置完主机名之后,就能使用主机名来标识一台主机吗?我们可以使用 ping 命令测试一下
可以看到,现在是不能 ping 通的,原因很简单,现在还没有做 host 映射,Windows母机还不知道 Yang_CentOS76 代表的是哪个主机,因为它只是一个名字,这个名字是可以重复的。
因此我们需要明确的告诉系统,这个名字是指向哪个主机的。
ping Yang_CentOS76
,系统就会先在 host
文件中找 Yang_CentOS76 对应的是哪个主机。设置完成之后,在 Windows中就可以ping 通 Linux主机了
/etc/hosts
文件中指定。ping Yang
就相当于 ping 192.168.100.1
(3)主机名解析
例:用户在浏览器访问百度(www.baidu.com),就会经历以下过程:
图解如下:
浏览器缓存和DNS解析器缓存,,可以理解为本地解析器缓存。
一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的 IP 地址(DNS 解析记 录)
可以在 cmd 窗口中使用命令查询:
# 查看DNS域名解析缓存
ipconfig /displaydns
# 清除电脑的域名缓存
ipconfig /flushdns
(4)域名劫持
如果非法修改了Hosts文件,就形成了域名劫持。
如下:
# 在 hosts 文件中加一行
192.168.100.140 www.baidu.com
我们 ping 的明明是 www.baidu.com,但实际上是ping 向我们刚才配置的IP。
试想一下,如果黑客入侵我们电脑,修改了hosts文件,将我们访问的网站换成了他的钓鱼网站……
不过不用担心,黑客入侵也没那么容易
(1)进程与程序:
(2)Linux进程
在Linux中,每个执行的程序都称为一个进程。每一个进程都分配一个 ID号(pid,进程号)。
每个进程都可能以两种方式存在的。
前台:所谓前台进程就是用户目前的屏幕上可以进行操作的。
后台:后台进程则是实际在运行,但屏幕上无法看到的进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才才结束。
Windows中的进程:
(1)ps相关指令
ps
指令是用来查看目前系统中,有哪些进程,以及他们的执行情况。
# 显示当前终端的所有进程信息
ps -a
# 以用户的格式显示进程信息
ps -u
# 显示后台进程
ps -x
# 一般情况下,都进行组合使用,如下:
ps -axu
说明:
USER
:进程执行用户PID
:进程号%CPU
:当前进程占用CPU的百分比%MEM
:当前进程占用内存的百分比VSZ
:进程占用的虚拟内存大小(单位:KB)RSS
:进程占用的物理内存大小(单位:KB)TTY
:终端信息STAT
:当前进程运行情况
START
:当前进程开始执行的时间TIME
:当前进程占用CPU的时间COMMAND
:启动进程所用的命令和参数,如果过长会被截断显示# 以全格式显示当前所有的进程 -e 显示所有进程。-f 全格式
ps -ef
Linux中,一个进程可以生成或创建别的进程,因此就有父进程的概念。
# 查询 sshd 进程的详细信息
ps -ef | grep sshd
说明:
(2)查看进程树
# 以树状图显示进程关系
pstree [选项]
常用选项:
-p
:显示进行的PID。-u
:显示进程所属用户。pstree -p
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。
# 通过进程号终止进程
kill [选项] 进程号
# 通过进程名终止进程,同时终止该进程的子进程,也支持通配符的使用。
killall 进程名称
常用选项:
-9
:强制终止一个进程。sshd服务就是支持远程登录的一个服务。
# 案例一:踢掉某个非法用户
# 先使用 ps 指令查询到该用户登录使用的 sshd 的进程号
ps -ef | grep sshd
# 再使用 kill 指令终止该进程
kill 进程号
# 案例二:终止远程登录服务 sshd, 在适当时候再次重启 sshd 服务
# 先使用 ps 指令查询 sshd 的进程号
ps -ef | grep sshd
# 再使用 kill 指令终止该进程
kill 进程号
# 重启 sshd 服务
/bin/systemctl restart sshd.service
# 案例三:终止多个 gedit 进程,该进程是Linux下的文本编辑器的进程
killall gedit
# 强制终止一个进程,我们在虚拟机中打开两个终端,然后使用一个终端去关闭另外一个终端的进程,终端的进程名是 bash
kill -9 进程号
(1)服务的概念
服务(service) 本质就是进程,它一般是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如:mysql监听3306端口,sshd监听22端口,因此我们又将这些进程称为守护进程。
监听端口,就可以理解为打开一个耳朵,时刻探测有没有人发起请求。
(2)service管理指令
# 服务的 启动、停止、重启、重新加载、查看状态
service 服务名 [start | stop | restart | reload | status]
注意:在 CentOS7.0 后 很多服务不再使用 service ,而是systemctl 。
查看哪些服务还可以被 service 指令管理,使用如下命令进行查看:
# 在 /etc/init.d/ 目录下
ls -l /etc/init.d/
可以看到有如下几条服务可以使用 service 指令管理:
比如,查看 network 的状态:
service network status
# 重启 network 服务
service network restart
# 停止 network 服务
service network stop
# 启动 network 服务
service network start
(3)查看服务名
方式一:使用 setup 指令,查看所有服务
setup
前面显示 *
星号的,表示在Linux系统启动的时候,会自动启动。
停止服务:
方式二:查看 service 管理的指令
ls -l /etc/init.d/
开机流程:
(1)复习 Linux中的运行级别:
由前面的学习可知,Linux中有7个运行级别:
# 查看当前系统运行级别
systemctl get-default
# 这是默认运行级别
# multi-user.target 表示运行级别 3
# graphical.target 表示运行级别 5
systemctl set-dafault xxx.target
(2)chkconfig 指令
作用:通过 chkconfig 命令可以给服务的各个运行级别设置 自启动/关闭。即:指定某个服务在哪个运行级别是自启动的,在哪个级别是关闭的。
chkconfig 指令和 service 指令一样,可以在 /etc/init.d/ 目录下查看它所能管理的指令。因为在 CentOS 7 之后,更多的指令是通过 systemctl 指令管理的。
# 查看 chkconfig 指令管理的服务在7个级别中的状态
chkconifg --list
# 指定某个服务在某个运行级别是否自启动
chkconfig --level 运行级别对应的数字 服务名 on/off
# 案例: 把 network在 3 运行级别,关闭自启动。重启系统生效。
chkconfig --level 3 network off
# network在 3 运行级别,自启动
chkconfig --level 3 network on
(1)systemctl 指令
# 基本语法,设置服务的 启动、停止、重启、重新加载、查看状态
systemctl [start | stop | restart | status] 服务名
systemctl 指令管理的服务在 /usr/lib/systemd/system 查看
ll /usr/lib/systemd/system
# 查看当前各个服务的启动状态
systemctl list-unit-files [ | grep 服务名]
说明:
# 设置服务开机启动,表示同时设置 3 和 5 两个级别。
systemctl enable 服务名
# 关闭服务开机启动
systemctl disable 服务名
# 查询某个服务是否是自启动的
systemctl is-enabled 服务名
# 案例:查看当前防火墙的状况,
# 先得查询到Linux中防火墙服务的名称。
# 使用如下指令,查询知,防火墙的服务为:firewalld.service
ll /usr/lib/systemd/system | grep fire
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 重启防火墙
systemctl restart firewalld
注意:
systemctl [enable|disable] 服务名
(2)防火墙原理:
请求先到防火墙,如果它将要访问的端口是服务器允许通过的,则该请求可以访问到指定服务。如果它请求的服务的端口是不允许通过的,则该请求不能访问到指定服务。
因此防火墙可以防止我们的系统被恶意的访问。
验证防火墙的作用:
# 查看网络状态
netstat -anp
我们可以在 Windows的cmd窗口,尝试访问上图中的一个处于监听状态的端口:
(如果 telnet 指令无法使用,请往下看,后面有解决方案)
# telnet 指令语法
telnet IP地址 端口号
# 例 访问 192.168.100.140 的 111 端口
telnet 192.168.100.140 111
显示连接失败,表示Linux的防火墙是打开的,并且该端口不允许通过。
我们现在关闭Linux的防火墙,再次连接该端口,发现可以连接成功。
# 关闭防火墙
systemctl stop firewalld
至此,我们就理解了防火墙的基本作用,就是可以防止程序恶意访问我们的系统。
因此在真正的生产环境,往往需要将防火墙打开。
(3)firewall 指令
因此在生产环境下,需要防火墙打开。在这种情况下,如果我们想要访问Linux的某个端口,肯定是不能直接访问的,而我们又不能直接关闭防火墙。
因此可以使用 firewall 指令。
# 打开端口(该命令需要 root 用户才能执行)
firewall-cmd --permanent --add-port=端口号和协议
# 关闭端口
firewall-cmd --permanent --remove-port=端口号和协议
# 不论是打开端口还是关闭端口,都需要重新载入一下才能生效,
firewall-cmd --reload
# 查询端口是否开放
firewall-cmd --query-port=端口/协议
# 查看端口对应的协议
netstat -anp | more
# 案例:打开111端口
firewall-cmd --permanent --add-port=111/tcp
# 重新载入,使命令生效。
firewall-cmd --reload
# 查询端口状态,显示为 yes
firewall-cmd --query-port=111/tcp
端口打开之后,再次使用Windows的cmd窗口连接该端口,是可以成功的。
# 关闭111端口
firewall-cmd --permanent --remove-port=111/tcp
# 重新载入,使命令生效。
firewall-cmd --reload
# 查询端口状态,显示为 no
firewall-cmd --query-port=111/tcp
telnet 指令无法使用的解决方案:
如果在使用 telnet 指令的时候,出现以下错误,是因为Windows中的Telnet客户端服务没有打开。
使用以下方法打开即可:
1、打开 “应用和功能”
2、打开 ”程序和功能“。
在最下面。
3、启用或关闭Windows功能。
4、打开服务
5、重启电脑,即可使用 telnet 指令。
top 与 ps 命令很相似。它们都用来显示正在执行的进程。
Top 与 ps 指令又有不同之处,就是 top 指令在可以动态更新正在运行的的进程。
# 语法
top [选项]
选项 | 含义 |
---|---|
-d | 指定top指令的刷新间隔,默认是 3 秒 |
-i | 不显示闲置或僵死进程 |
-p | 通过指定监控进程id来仅监控某个进程的状态 |
说明:
load average:负载值,三个值加起来除以3,如果大于0.7,则表示系统负载教大。
Tasks:任务数
%CPU:CPU的利用率。
Men:物理内存
Swap:交换分区
动态监控时的交互操作:
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认。降序 |
M | 以内存使用率排序。降序 |
N | 以PID排序。降序 |
q | 退出程序。 |
# 不显示闲置进程或僵死进程
top -i
# 监控指定进程
top -p 进程的PID
# 监控指定用户
top u 用户名
# 案例:监控 lu 用户,并踢他下线
top u lu
在此界面,按下 k。然后输入 lu 用户的 bash 的进程PID。
输入 9,强制杀死进程。
用户 lu 下线。
服务连接的基本原理:
# 查看系统网络情况
netstat [选项]
选项 | 含义 |
---|---|
-an | 按一定顺序排序输出 |
-p | 显示哪个进程在调用 |
显示信息如图:
说明:
CentOS中主要有两种软件包管理方式,分别是YUM和RPM。
软件的安装和卸载应该是一件稀松平常的事,例如我们平常使用的Windows一样,想要安装一个软件,直接去官网下载安装包,然后双击开始安装即可,但是在Linux中,安装一个软件却不是这么简单。
因为Linux有一个理念就是一个程序只做好一件小事,一个大的程序就需要几个小的程序组合起来完成,这就导致了各个小的程序之间有复杂的依赖关系,比如:要完成某件任务,就需要安装程序A,而程序A的安装需要程序B的支持,程序B的安装又需要程序C的支持……,这便是依赖。
为了很好的组织管理这种复杂的依赖,就有了RPM软件包管理,Redhat Package Manager,类似windows 的 setup.exe,RPM是以一种数据库记录的方式来将需要的软件及其依赖关系安装到Linux主机的一套软件管理程序。也就是说,Linux中有一个关于RPM的数据库,它记录了安装软件的包与包之间的依赖关系。
RPM包时预先在Linux主机上编译并打包好的文件,安装起来非常便捷。
Linux中软件包的分类:
(1)RPM包命名规则
例:httpd-2.2.15.el6.centos.1.i686.rpm
说明:
注意:区分包名和包全名:
/run/media/root/CentOS 7 x86_64/Packages
在该目录下。(2)RPM包依赖性
说明:
yum主要就是为了解决RPM的依赖性。
(3)RPM包的安装、升级、卸载
1、安装
如果没有在RPM包所在目录,就需要使用绝对路径。
# RPM安装
rpm [选项] 包全名
# 一般组合使用
rpm -ivh 包全名
选项 | 含义 |
---|---|
-i | install,安装 |
-v | verbose,显示详细信息。 |
-h | hash,显示进度 |
–nodeps | 不检测依赖性(不使用) |
2、升级
# RPM升级
rpm [选项] 包全名
# 一般组合使用
rpm -Uvh 包全名
选项 | 含义 |
---|---|
-U | update,升级更新 |
-v | verbose,显示详细信息。 |
-h | hash,显示进度 |
–nodeps | 不检测依赖性(不使用) |
3、卸载
卸载不需要路径。
# rpm 卸载
rpm -e 包名
# 卸载firefox
rpm -e firefox
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
removing these packages would break dependencies:foo is needed by bar-1.0-1
意思是说:要删除的 foo 会被 bar-1.0-1 使用到。
(4)RPM查询
#查询指定包是否安装
rpm -q 包名
# 查询所有已安装的包
rpm -qa
# 查询指定包的详细信息,i information。包信息是在组件这个包时就写好的。
rpm -qi 包名
# 查询未安装的软件包的信息。p package
rpm -qip 包全名
# 查询软件包中文件安装位置
rpm -ql 包名
# 查询系统文件属于哪个RPM包
rpm -qf 系统文件名
# 查询软件包的依赖性
rpm -qR 包名
# 查询是否安装firefox
rpm -q firefox
rpm -qa | grep firefox
# 查询安装的 Python 的详细信息
rpm -qi python
# 查询 Python 软件包的文件具体的安装路径
rpm -ql python
(5)校验
校验我们安装的软件有没有被修改过。
# RPM包校验
rpm -V 已安装的包名
如果没有任何修改,则不显示任何内容。
如果做了修改,则会显示如下内容:
S.5……T. c /etc/httpd/conf/httpd.conf
说明:
显示内容中的8个信息的具体内容: 如果某项没有变化,就用点表示。
文件类型:
(6)文件提取
当我们误删了某个系统文件或软件的配置文件时,就可以使用该指令,提取对应RPM软件包中的对应文件,而不需将整个系统或软件重装。
即:文件提取最大的作用就是修复。
# rpm2cpio 意思是将rpm格式文件转为cpio格式文件。
# 从cpio中提取指定的文件
rpm2cpio 包全名 | cpio -idv .文件绝对路径
rpm2cpio:将 rpm 包转换为 cpio 格式的命令。2 等于 to。
cpio:是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件。
# < 输入重定向,从文件或指定设备中输入,而非标准输入
cpio [选项] < [文件|设备]
选项 | 含义 |
---|---|
-i | copy-in 模式,从文件中提取数据 |
-d | 还原时自动新建目录 |
-v | 显示还原过程 |
# 案例:我们误删除了 ls 指令
# 查询 ls 指令属于哪个软件包
rpm -qf /bin/ls
# 制造删除了 ls 指令的假象,这里只是将它移动到别的目录下。
mv /bin/ls /tmp/
# 提取 RPM 软件包中的ls命令到当前目录下,执行完指令后,当前目录下就会多一个 bin 目录,bin目录下有ls目录
rpm2cpio /run/media/root/CentOS\ 7\ x86_64/Packages/coreutils-8.22-23.el7.x86_64 | cpio -idv ./bin/ls
# 将 当前目录下的ls到根目录的 /bin/ls
cp /home/bin/ls /bin/
(1)YUM概述
Yum 是一个 Shell 前端软件包管理器。基于RPM包管理,能够从指定的服务器自动 下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
RPM命令和YUM在线管理都是管理RPM包,区别在于RPM命令是手动安装,YUM是自动安装。
YUM并不是非得上网才能使用,可以配置本地光盘作为YUM的源
(2)网络yum源
YUM 源保存在 /etc/yum.repos.d/ 目录下。后缀为 .repo 的都是合法的YUM源。默认是 Base 这个源生效。CentOS-Media.repo 是本地光盘YUM源。
打开看一下配置好的yum源。
vim /etc/yum.repos.d/CentOS-Base.repo
如上图,一共默认是由四个软件池,默认是第一个软件池生效。
说明:
(3)YUM命令
# 查询服务器上所有的软件
yum list
# 查询是否有需要安装的软件
yum list | grep 软件
# 搜索服务器上所有和关键字相关的包
yum search 包名
# 安装软件
yum install 软件包
# -y 自动回答yes
yum -y install 软件包
# 升级软件包(注意:如果不加包名,则全部升级,包括Linux内核)
yum -y update 包名
# 卸载软件(如果不加包名,则全部卸载)
yum -y remove 包名
注意:一般不要轻易卸载软件,因为它会同时卸载该软件依赖的软件包,而这些软件包有可能被其他软件依赖,如果一旦卸载,会导致其他软件也不能使用。
(4)光盘YUM源搭建
当无法连接网络或网速较慢时,可以考虑搭建光盘YUM源来代替网络YUM源。缺点是软件不一定是最新的。
Linux一般是有两张光盘的,如果一个软件没有在当前光盘中,有较大可能是在另外一张光盘中。
搭建步骤:
enabled=0
,使其失效。# 挂载光盘
mount /dev/cdrom /mnt/cdrom
# 这里采用第三种方法
mv CentOS-Vault.repo CentOS-Vault.repo.A
mv CentOS-Base.repo CentOS-Base.repo.A
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.A
# 修改光盘YUM源文件
vim /etc/yum.repos.d/CentOS-Media.repo
挂载光盘:
1、第一步:在 /mnt/ 目录下创建挂载点。
cd /mnt
mkdir cdrom
2、第二步:查看光盘完整路径名。
ls -l /dev | grep cdrom
3、第三步:挂载
# 将 /dev/cdrom 挂载到 /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
4、查看光盘中的数据
cd /mnt/cdrom
ls -l
5、卸载光盘
不能在挂载点目录下解除挂载,必须先切换到其他目录。
# 卸载 /mnt/cdrom 挂载的目录
umount /mnt/cdrom
(1)源码包和RPM包的区别
上面我们已经了解了源码包和RPM包的区别,这里说的主要是它们安装位置的区别。
路径 | 内容 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
/var | 保存日志文件等可变文件 |
安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service、systemctl)来管理,network 的启动方法是:
源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
(2)源码包安装过程
第一步:安装前的准备
第二步:安装注意事项
/usr/local/src
/usr/local/
第三步:源码包的具体安装过程
tar -zxvf httpd-2.4.46.tar.gz
./configure
命令,软件配置与检查。
make
make clean
进行清空。make install
# 指定安装路径
./configure --prefix=/usr/local/软件名
注意:如果执行完上一条命令之后,报错如下:
configure: error: APR not found . Please read the documentation
解决:
http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz
http://archive.apache.org/dist/apr/apr-util-1.3.12.tar.gz
http://jaist.dl.sourceforge.net/project/pcre/pcre/8.10/pcre-8.10.zip
# 解压
tar -zxf apr-1.4.5.tar.gz
# 进入目录
cd apr-1.4.5
# 软件配置与检查
./configure --prefix=/usr/local/apr
# 安装
make
make install
tar -zxf apr-util-1.3.12.tar.gz
cd apr-util-1.3.12
./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
make
make install
unzip -o pcre-8.10.zip
cd pcre-8.10
./configure --prefix=/usr/local/pcre
make
make install
至此,Apache可以正常安装
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
make
make install
安装完之后,可以使用命令启动 Apache 服务,然后在浏览器访问虚拟机地址即可访问Apache。
如果访问不了,就请查看Linux防火墙状态。关闭防火墙或开放80端口之后,就可以访问。
# 使用绝对路径的方法启动 Apache
/usr/local/apache2/bin/apachectl start
访问成功之后显示:
# 查看防火墙状态
systemctl status firewalld
# 查看80端口状态
firewall-cmd --query-port=80/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 重新载入防火墙
firewall-cmd --reload
(3)源码包的卸载
不需要卸载命令,直接删除安装目录即可。
不会遗留任何垃圾文件。
rm -rf /usr/local/apache2
【系列文章】
1. Git&GitHub(基础)
2. Git&GitHub(进阶)
3. 详解Linux(基础篇)
4. java多线程
5. JavaScript 总结
6. SpringMVC(一)
7. SpringMVC(二)
……
关注博主