目录
一、Linux基础知识
1.1 Linux系统常用目录及命令
1.1.1 常用目录
/bin
:存放基本二进制文件,即系统命令。/sbin
:存放系统二进制文件,通常是系统管理员使用的命令。/etc
:存放系统配置文件。/dev
:包含设备文件。/proc
:虚拟文件系统,包含系统和进程信息。/var
:包含经常变化的文件,如日志文件。/tmp
:临时文件目录。/usr
:用户相关的应用程序和文件。/home
:用户的主目录。/root
:系统管理员的用户主目录。
1.1.2 常用命令
ls
:列出目录内容。cd
:改变当前目录。pwd
:打印当前工作目录。cp
:复制文件或目录。mv
:移动或重命名文件/目录。rm
:删除文件或目录。mkdir
:创建新目录。rmdir
:删除空目录。chmod
:更改文件或目录的权限。chown
:更改文件或目录的所有者。touch
:创建新文件或更改现有文件的时间戳。cat
:查看文件内容。more
或less
:分页查看文件内容。grep
:搜索文件内容。find
:在目录树中查找文件。which
:查找并显示给定命令的路径。whereis
:定位二进制、源和手册页文件的位置。ssh
:安全地登录到远程机器。ifconfig
或ip
:配置或显示网络接口的信息。ping
:测试网络连接。netstat
:显示网络状态。tar
:打包和压缩文件。du
:检查磁盘使用情况。df
:报告文件系统的磁盘空间使用情况
1.1.3 Linux系统文件和命令
/etc/passwd
:存储用户账户信息。/etc/shadow
:存储用户密码哈希。/etc/group
:存储组信息。cat
、more
、less
、head
:用于查看文件内容。tail -f
:实时跟踪文件更新。grep
:搜索文件中的文本。find
:查找文件系统中的文件
1.1.3 文件操作
grep
命令可以用来过滤文件内容或命令结果。find
命令可以用来查找特定名称的文件或目录
1.1.4 文件打包和压缩
gzip
和bzip2
是压缩工具。tar
命令用于打包和压缩文件,例如创建和解压.tar.gz
文件
1.1.5 Linux系统包管理
- 源码包允许用户自定义安装位置和功能,而封装包(如 RPM 或 DEB)简化了安装过程。
- RPM 用于基于 Red Hat 的系统(如 CentOS),DEB 用于基于 Debian 的系统(如 Ubuntu)
1.1.6 RPM命令
rpm -qa
:列出已安装的包。rpm -qpi
:查看软件包信息。rpm -qpl
:查看软件包安装位置。rpm -ivh
:安装 RPM 包。rpm -qf
:查询文件属于哪个 RPM 包。rpm -e
:删除 RPM 包
二、YUM
2.1 YUM
YUM(Yellowdog Updater Modified)是一个在基于Red Hat的Linux发行版中广泛使用的软件包管理器,如CentOS、Fedora、RHEL(Red Hat Enterprise Linux)等。YUM提供了自动化的软件包安装、更新和卸载功能,同时还能自动解决依赖性问题。
2.1.1 YUM工具
- YUM 用于依赖性管理,自动处理软件包的安装和卸载。
yum install
:安装软件包。yum clean all
:清除缓存。yum makecache
:刷新缓存。
2.1.2 YUM配置
- YUM 可以通过编辑
/etc/yum.repos.d/
目录下的.repo
文件来配置网络源。 - 可以使用
wget
命令下载并替换.repo
文件以更改 YUM 源
2.2 YUM源安装前置准备
在此之前,我们先来解决一个问题:为什么YUM源安装涉及到依赖关系?
Linux系统中的软件包往往依赖于其他软件包,这意味着一个软件包可能需要特定的库文件或其他软件包才能正常工作。YUM通过维护一个依赖关系表(通常称为repodata
),来确保在安装、更新或删除软件包时,所有依赖性都能得到满足或正确处理
当用户通过YUM安装一个软件包时,YUM会自动检查该软件包的依赖性,并尝试安装所有必需的依赖包。同样,当卸载或更新软件包时,YUM也会检查并解决由此产生的依赖性问题,例如卸载不再需要的依赖包或更新依赖包
2.2.1 YUM源安装
yum工具可以实现通过依赖关系表进行软件的卸载和安装
yum有两种配置方式:本地配置(通过光盘)、网络配置(通过镜像站)
yum的配置文件一般在etc下,我们进入etc,使用ls列出文件,可以看到 yum.repos.d,这就是yum的配置文件
我们使用cat进入Base文件,查看内容
在yum文件配置中有很多内容,现在我们想要自己配置yum,例如定制一个我们自己的文件,接下来是操作步骤。
2.2.2 手动配置yum源
目前我们已知,原本有很多关于yum的配置文件,既然我们现在要手动安装,就要先把旧的文件放到一边。
使用mkdir创建一个文件夹,用于存放旧的配置文件,使用mv命令将旧文件统统移入文件夹中,这时再使用ls查看,配置目录下就只剩一个用于存放旧文件的文件夹了
清除掉了之前的障碍,现在我们可以开始手动配置了,先来创建一个yum配置文件,便于之后往里写东西。使用vim创建配置文件,注意:名称要规范,命名和之前相同,以.repo结尾!
vim CentOS-Base.repo
yum安装有几个点:
- 编辑该软件的配置文件
- 配置文件有严格的格式,格式错误无法使用
- yum有专门的命令
我们使用cat查看原来的CentOS-Base.repo文件,安装格式严格编写新的配置文件
注意点:
- 后缀为.repo
- [标签]
- name=描述
- baseurl=本地资源定位符
- gpgcheck=1为打开,0为关闭
这几行配置定义了一个 YUM 仓库,允许 YUM 从指定的 URL 下载软件包,并且禁用了 GPG 校验。这种配置通常用于设置本地仓库或者指向特定的镜像站点,以便 YUM 可以下载和安装软件包。至此,yum手动配置完成
2.2.3 网络配置yum
现在我们来看如何使用镜像站配置yum源。在此我使用了华为开源镜像站
选择CentOS7,出现如下页面,在此也告诉了我们配置方法
首先,我们需要下载新的CentOS-Base.repo文件到/etc/yum.repos.d/目录下,执行它给我们的命令
(在此之前,使用rm -rf CentOS-Base.repo 清除之前手动配置的yum文件,以免造成混乱)
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
--2024-09-09 14:04:36-- https://mirrors.huaweicloud.com/repository/conf/CentOS-7-anon.repo
Resolving mirrors.huaweicloud.com (mirrors.huaweicloud.com)... 120.46.63.139, 124.70.61.162, 123.249.118.101, ...
Connecting to mirrors.huaweicloud.com (mirrors.huaweicloud.com)|120.46.63.139|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octet-stream]
Saving to: ‘/etc/yum.repos.d/CentOS-Base.repo’
[ <=> ] 1,811 --.-K/s in 0s
2024-09-09 14:04:37 (154 MB/s) - ‘/etc/yum.repos.d/CentOS-Base.repo’ saved [1811]
[root@localhost yum.repos.d]# ls
bak CentOS-Base.repo
下载完成,使用ls查看,出现新的配置文件,使用cat或vim查看一下我们新下载的配置文件,里面也确实有完整的配置信息
之后再根据它给的步骤,清除缓存、刷新
至此,网络配置yum源我们也学会了,当然,除了华为镜像站,还有淘宝、阿里以及各大大学的镜像站,可自由选择。
2.3 Kali Linux安装
Kali与Linux有些许差别,手动配置较为繁琐,我们直接使用网络配置,同样找到华为镜像源的Kali-Images,根据上面的操作进行
与CentOS配置步骤类似,这里不多赘述
与yum有区别,在Kali中使用的命令是 apt-get ,但作用类似。apt-get
是 Debian 及其衍生发行版(如 Ubuntu、Kali Linux 等)中的命令行工具,用于处理软件包。它是 Advanced Package Tool(APT)的一部分,用于安装、更新、升级、卸载和管理软件包。
三、Linux网络
3.1 网络地址配置
首先我们来了解一下虚拟机中网络的不同设置:
- NAT:NAT允许多个设备共享一个公共IP地址来访问互联网。它在内部私有网络和外部公共网络(如互联网)之间转换IP地址,这样内部设备就可以隐藏自己的真实IP地址。
- 桥接:在桥接模式下,网络设备(如交换机或路由器)会根据MAC地址(物理地址)来转发数据包。它不会改变数据包的源或目的IP地址。桥接模式又分为自动检测模式和Wi-Fi模式
- 自动检测模式:在计算机网络中,自动检测通常指的是设备(比如笔记本电脑或智能手机)自动寻找可用的网络连接,比如Wi-Fi网络,并提示用户是否要连接
- WiFi:Wi-Fi是一种无线网络技术,允许设备在一定范围内无线连接到网络
- 路由:路由是指将数据包从一个网络传输到另一个网络的过程。路由器是专门用于路由的设备,它们根据数据包的目的IP地址来决定将其发送到哪个方向。
- 隧道:隧道模式就像是在地下挖一条通道,让数据包可以从一个网络穿越到另一个网络,即使这两个网络在物理上是分开的。
3.1.1 桥接模式配置
把虚拟机设置为桥接模式,就是设置乌力吉与虚拟机处于同一网段,可以相互访问
这里的重点是把虚拟机网段、网关设置的与物理机一致。我的电脑是Mac所以使用netstat命令,windows可以使用ipconfig查看
这表明,物理机的默认网关是172.20.10.1,并且这个歌网关与网络接口en0相关联,继续使用ifconfig查看IP地址,显示IP地址为172.20.10.4
接下来,我们选择虚拟机的网络连接类型为“桥接模式”
进入虚拟机的设置(Setting),点击右边的齿轮,进入设置模式,选择IPv4
配置我们之前得到的ip地址与网关,之后保存应用设置,断开再连接(拔插网线),这样我们就成功转换到了桥接模式,试着ping本机IP和百度,可以看到已连通。
这样,我们就完成了从NAT模式到桥接模式的转换
除了能在图形化界面配置IP,我们还可以使用:ip address add命令,使用 ip address help 可以查看添加添加ip地址的命令格式,根据这个格式我们去添加我们的ip地址
ip address add 192.168.1.100/24 dev ens33
//这里 192.168.1.100 是你选择的IP地址,/24 是子网掩码,ens33 是你的网卡设备名称
使用ip route add来添加默认网关
ip route add default via 192.168.1.1
//这里 192.168.1.1 应该是你的路由器或网关的IP地址
3.1.2 设置网络配置重启后仍生效
当然,这里的IP地址配置是“一次性的”,如果想让配置变为“永久”,我们可以编写开机自启机脚本。进入路径:
cd /etc/rc.d
//进入rc.d目录,使用vim编辑器来编写rc.local文件
ip address add x.x.x.x/24 dev ens33
ip route add default via x.x.x.x
echo "nameserver 114.114.114.114" >> /etc/rc.d/rc.local
同样,我们还可以配置网卡文件,让我们配置的网络永久生效。进入目录 /etc/sysconfig/network-scripts/ifcfg-ens33,这个ifcfg-ens33就是我们要修改的网卡文件
配置完成后:
systemctl status network
systemctl status NetworkManager
systemctl restart NetworkManager
//使用上述命令重启网卡
通过上述两种方法,配置网卡和配置静态IP,可以保证重启后仍然有效
3.2 路由转发功能
路由转发是网络通信中的一个重要概念,它指的是将数据包从源主机通过一个或多个中间节点(路由器或网关)传送到目的主机的过程。
3.2.1 windows及服务机网卡配置
本实验我们需要开启两天虚拟机,一台客户机和一台服务机,客户机我使用Windows7,服务机我使用CentOS 7,其中,客户机连接vm2网卡,服务机连接vm3
首先来配置客户机的IP地址,和之前一样,从网络处直接修改
现在,我们再来配置CentOS的IP及网关,这时就相当于“照着答案写题目”,设置其ens 33的IP地址为192.168.2.254(即客户机的网关),设置其ens 34的IP为172.16.2.254(之后作为172与192连通用),两个都不设置网关。至此,一座桥梁就快要建成了。
同理,上面的步骤既可以、通过命令来修改网卡文件来完成,也可以直接进入Setting图形化界面完成
3.2.2 kali网卡配置
另一台客户机,我这里使用Kali完成,kali的网络配置与windows和CentOS略有不同,一种方法就是使用前面提到过的 ip address 命令完成,但这种方法是“一次性的”,这里我们介绍另一种方法:直接改网卡的配置
我们可以看到,eth0处于up(开启)状态,这证明我们可以修改他的配置。我们cd到/etc下的network,找到interfaces文件,这就是我们要修改的文件了
仿照着上面的格式,我们添加eth0的IP,子网掩码和网关,编辑完成后保存并退出,之后使用systemctl restart networking.service 重启网卡,正式刷新启用配置。
3.2.3 开启路由
现在,我们来开启路由,让两台客户机能够正式通信。
开启路由转发功能有两种方法:一种是修改/proc/sys/net/ipv4/ip_forward,在未作修改前我们使用cat看一下ip_forward,发现其内容为“0”,这代表路由功能未启用/已关闭。现在我们要做的就是将0改为1。
这里注意:直接使用vim编辑器无法改变其内容,因为这个文件在/proc目录下,而proc的内容并不是存储在硬盘中,而是保存在内存中,这里我们使用echo命令来修改
echo 1 > ip_forward
修改之后,路由开启,现在两个网段的客户机可以相互ping通了!
第二种开启路由的方法,也是永久生效的方法(上一种方法重启后失效),是修改内核配置文件
进入到/etc/sysctl.conf,修改net.ipv4.ip_forward = 1,之后运行命令sysctl -p使配置立即生效。两种方法大同小异
在操作系统层面,路由转发涉及到以下几个关键部分:
- 路由表:每个网络设备(如路由器、网关或支持路由功能的计算机)都有一张路由表,它包含了决定数据包转发路径的规则。路由表中通常包含目标网络、子网掩码、网关(下一跳地址)、接口等信息。
- 静态路由:由网络管理员手动配置的路由规则。静态路由不随网络拓扑的变化而自动调整,适用于小型或稳定的网络环境。
- 动态路由:通过动态路由协议(如RIP、OSPF、BGP等)自动学习和分发的路由信息。动态路由能够适应网络拓扑的变化,适用于大型或经常变化的网络。
- 路由转发决策:当一个数据包到达网络设备时,该设备会根据路由表中的信息决定如何处理这个数据包。如果目的地在直接连接的网络上,数据包将被直接发送到目标;如果目的地在远程网络上,数据包将被发送到指定的网关或下一跳地址。
- NAT(网络地址转换):在某些情况下,路由转发还涉及到NAT,这是一种将私有(内部)IP地址转换为公共(外部)IP地址的技术,常用于Internet连接和防火墙配置中。
四、日志与进程
4.1 进程查看
在Linux系统中,查看进程和设置计划任务是系统管理的常见任务。
4.1.1 查看进程
- ps aux:列出所有当前执行的进程
- ps -u username:仅列出特定用户的进程
- top:实时显示系统进程信息
- pgrep -f httpd:根据进程名查找进程
- pstree:以树状图显示进程,包括父子关系
4.1.2 进程查看top命令详解
在终端输入命令 top ,得到如下图
顶部信息:
top - 09:44:08
:top
命令执行的时间。up 8:50
:系统运行时间,表示系统已经运行了8小时50分钟。2 users
:当前有2个用户登录系统。load average: 0.02, 0.04, 0.05
:系统负载平均值,分别表示过去1分钟、5分钟和15分钟的平均负载。这些值越低,表示系统负载越轻
任务信息:
Tasks: 218 total
:总共有218个任务。1 running
:有1个任务正在运行。217 sleeping
:有217个任务处于睡眠状态。0 stopped
:没有任务处于停止状态。0 zombie
:没有僵尸进程。
CPU和内存信息:
%Cpu(s): 1.0 us
:用户空间占用CPU的百分比为1.0%。0.3 sy
:系统空间占用CPU的百分比为0.3%。0.0 ni
:改变过优先级的进程占用CPU的百分比为0.0%。98.7 id
:CPU空闲百分比为98.7%。0.0 wa
:等待输入输出的CPU时间百分比为0.0%。0.0 hi
:硬件中断的CPU时间百分比为0.0%。0.0 si
:软件中断的CPU时间百分比为0.0%
在top命令的输出中,通常包含关于进程状态的信息:
- stopped:在
top
命令的输出中,stopped
指的是被停止(或暂停)的进程数量。这些进程因为接收到停止信号(如SIGSTOP
)而暂时挂起,直到它们收到继续信号(如SIGCONT
)才会恢复运行。在top
的 "Tasks" 部分,stopped
列显示了当前被停止的进程数量 - Jobs:在
top
命令的上下文中,jobs
通常不直接出现。然而,在 shell 环境中,jobs
命令用于列出当前会话中的作业列表,包括后台作业的状态。作业是指在 shell 中启动的进程,可以是前台或后台运行。在top
命令中,你不会直接管理作业,但你可以通过top
查看所有进程的状态,包括那些由 shell 作业创建的进程 - fg:
fg
是 shell 中的一个命令,用于将后台作业调到前台运行。在top
命令中,没有直接的fg
命令。但是,如果你在使用top
命令时按下Ctrl
+Z
,可以将top
命令本身暂停并放入后台作业。然后,你可以使用fg
命令将top
从后台调回前台继续运行
4.1.3 制作死循环脚本并杀死进程
首先我们在tmp目录下创建一个死循环脚本,用于占满系统内存
在编辑保存死循环脚本后,使用chmod +x test.sh为其添加执行权限,这样就可以运行脚本了
现在我们来了解一下kill命令:
kill 命令很容易让人产生误解,以为它仅仅就是用来杀死进程的。我们来看一下 man page 对它的解释:kill - send a signal to a process.从官方的解释不难看出,kill 是向进程发送信号的命令。当然我们可以向进程发送一个终止运行的信号,此时的 kill 命令才是名至实归。事实上如果我们不给 kill 命令传递信号参数,它默认传递终止进程运行的信号给进程!这是 kill 命令最主要的用法
一般情况下,终止一个前台进程使用 Ctrl + C 就可以了。对于一个后台进程就得用 kill 命令来终止。我们会先使用 ps、top 等命令获得进程的 PID,然后使用 kill 命令来杀掉该进程
我们切换到tmp目录下执行死循环脚本,屏幕上开始疯狂输出“U OVER”,我们在top中查看进程也可以看到,127350进程也就是我们的死循环脚本占用了大量的CPU,我们输入k(kill杀死进程),他提示我们输入要杀死的进程的PID,我们输入127350(这里即使不输入也会默认杀死最大的进程),之后提示选择信号,我们输入9(强制杀死)
之后我们发现,进程被杀死了,CUP也恢复了空闲,实验结束。
4.2 计划任务
在Linux系统中,计划任务通常是指定期执行特定命令或脚本的任务。Linux提供了多种工具来管理计划任务,最常用的是cron
和at
4.2.1 使用at来设置一次性任务
at
命令用于安排一次性任务,即在将来的某个时间点执行一次命令。
要安排一个任务,可以使用如下格式:
echo "command-to-be-executed" | at time
例如,要在下午3点执行/usr/bin/update
命令,可以使用:
echo "/usr/bin/update" | at 3pm
要查看所有待执行的at任务,可以使用atq命令(at -l命令)
要删除一个 at
任务,可以使用 atrm
命令(at -r命令)加上任务号:
atrm task-number
at
命令用于安排在将来的某个时间点执行一次性任务。at
命令与cron
类似,但主要用于不需要频繁执行的任务。
注意:
- 要使用
at
命令,你可能需要确保at
服务正在运行。你可以使用systemctl start atd
来启动服务。 at -l
和at -c
命令通常只有安排任务的用户或超级用户(root)可以使用。- 如果你想要删除某个
at
任务,可以使用atrm
命令加上任务编号来删除
这些命令在管理一次性任务时非常有用,尤其是当你需要在特定时间执行某个操作,但又不想设置一个永久的 cron
任务时
4.2.2 设置一个一次性的计划任务
首先,在 /tmp
目录下创建一个脚本文件。例如,创建一个名为 test_script.sh
的脚本
cd /tmp
echo "#!/bin/bash" > test_script.sh
echo "echo 'This is a test script'" >> test_script.sh
echo "date" >> test_script.sh
赋予脚本执行权限:
chmod +x test_script.sh
使用at命令安排在将来某个时间点执行这个脚本。例如1分钟后
echo "/tmp/test_script.sh" | at now + 1 minute
可以看到,任务已经被添加,使用 -l查看任务编号为2
使用atrm 2(这里写你的任务编号)用于删除任务,最后,清理脚本文件
atrm 任务编号
rm /tmp/test_script.sh
4.2.3 使用cron来设置周期性任务
cron
是一个基于时间的作业调度器,它可以在指定时间自动执行任务。
要编辑当前用户的 crontab
文件,可以使用以下命令:
crontab -e
//这将打开一个编辑器,你可以在其中添加或修改计划任务
我们选择/etc目录下的crontab文件,这个文件即周期性计划配置文件,向我们展示了配置的格式
crontab
文件中的每行都代表一个计划任务,正如其所对应的那样,从前到后的*依次表示“分钟、小时、日、月、周”
例如,以下 crontab
条目每天凌晨2点执行 /usr/bin/update
命令:
0 2 * * * /usr/bin/update
要查看当前用户的 crontab
,可以使用以下命令:crontab -l
要删除当前用户的 crontab
文件,可以使用以下命令:crontab -r
4.2.4 配置周期性计划任务
现在我们来做一个练习,设置每年的9月10日上午11点,每分钟备份一次到/tmp登陆日志
首先使用crontab -e打开当前用户的crontab 文件进行编辑
在编辑器中添加以下条目
*/1 11 10 9 * /path/to/your/backup_script.sh
//在这里,我的路径使用/tmp/backup_script.sh,根据你自己的路径调整
*/1
分钟:每分钟11
小时:上午11点10
日:每月的第10天9
月:9月*
周:不指定星期几,表示每天/path/to/your/backup_script.sh
是你备份脚本的路径
之后保存并关闭编辑器。cron
会自动安装新的 crontab
并开始计划任务。
注意:确保你的备份脚本 /path/to/your/backup_script.sh
存在,并且具有执行权限。例如,你可以创建一个简单的备份脚本,如下所示:
#!/bin/bash
# 备份登陆日志到 /tmp
cp /var/log/lastlog /tmp/login.log.$(date +%Y%m%d%H%M%S)
//之后赋予执行权限
chmod +x /path/to/your/backup_script.sh
确保 cron
服务正在运行。你可以使用以下命令检查 cron
服务的状态:
systemctl status crond
如果服务没有运行,可以使用命令启动:
systemctl start crond
可以手动测试cron任务是否能够正常运行:
echo "* * * * * /path/to/your/backup_script.sh" | crontab -
使用 echo "* * * * * /root/tmp/backup_script.sh" | crontab -
命令添加了一个 cron
任务,该任务会每分钟执行一次指定的脚本。系统响应 You have new mail in /var/spool/mail/root
表示 cron
任务已添加,并且可能已经执行了一次,因为输出和错误通常会发送到用户的邮件箱。
使用 -l命令列出当前执行的任务,确实有我们设置的周期性任务脚本。使用cat /var/spool/mail/root命令查看邮件文件,可以看到脚本输出重定向到文件,文件中出现新的内容,为脚本执行的日期时间,并且确实为每分钟刷新。
如果想要删除特定的cron任务,可以直接使用 -e 编辑crontab文件并删除响应的行。脚本文件则使用rm命令删除