2024-08-15-Thu-T-Linux
一、基础篇
1.1 Linux入门
linux 官网: www.kernel.org
网站扫描: https://sitereport.netcraft.com
- Linux和Unix关系
- Uninx
- BSD
- FreeBSD
- Sun Solaris
- IBM AIX
- AT&T System V
- Minix
- GUN/Linux内核
- Ubuntu
- RedHat
- centOS
- RedhatOS
- SUSE
- Fedora
- GUN/Linux内核
- BSD
- Uninx
1.2 vm和Linux安装
使用相应工具安装linux虚拟机, 本文使用multipass安装虚拟机
安装multipass brew install multipass
虚拟机网络连接模式介绍
- 桥接模式: 虚拟机会获得一个与主机网络相同网段的IP地址,与主机、同网段的其他设备以及外网设备进行通信. 桥接模式将虚拟机直接连接到物理网络,虚拟机像是主机网络中的一台真实设备, 适合需要与外网和局域网中的其他设备自由通信的虚拟机,常用于企业网络、开发测试等。可能会引起ip冲突.
- NAT模式: 虚拟机被分配一个虚拟的私有IP地址,外部网络无法直接访问该虚拟机。虚拟机通过主机的NAT转发来访问外网,主机充当网关角色。虚拟机只能通过主机访问外网,不能直接访问局域网中的其他设备。不会引起ip冲突
- 仅主机模式:仅主机模式为虚拟机和主机之间创建一个完全隔离的网络环境,虚拟机不能直接访问外网。虚拟机和主机通过一个专用的虚拟网络接口互相通信,但不会与外部网络相连。不能访问外网,也不能与局域网中的其他设备通信。
虽然虚拟机与局域网中的其他设备隔离,但虚拟机与主机之间仍然可以直接通信。通常,Multipass 会为主机和虚拟机建立一个虚拟网络接口,用于相互访问。
通过这个接口,主机可以使用虚拟机的内部 IP 地址直接访问虚拟机的服务。这个功能设计为方便主机与虚拟机之间的数据交换,尤其是在不需要外部网络访问的开发和测试场景中。
1.3 Linux目录结构
1 |
|
/bin (/usr/bin, /usr/local/bin)
: Binary的缩写, 用于存放经常使用的命令/sbin (/usr/sbin, /usr/local/sbin)
: Super User Binary, 系统管理员使用的系统管理命令/home
: 存放普通用户的目录/root
: 管理员用户主目录/lib
: 系统开机所需要的最基本的动态连接共享库/lost+found
: 这个目录一般情况是空的, 当系统非法关机后, 这里会存放一些文件/etc
: 所有的系统管理所需要的配置文件和子目录/usr
: 用户的很多应用程序文件都放在这个目录下, 类似于windows program files/boot
: 存放用于启动Linux的一些核心文件, 包括连接文件和镜像文件/proc
: 虚拟的目录, 系统内存的映射, 访问这个目录可以获取系统信息/srv
: service缩写, 存放一些服务启动后需要提取的数据/sys
: 这是linux2.6内核的一个变化, 该目录下安装了2.6内核新出现的一个文件系统sysfs/tmp
: 用于存放临时文件/dev
: device, 所有的硬件用文件的形式存储到此处/media
: Linux会自动识别一些设备, 如U盘, 光驱, 当识别到这些设备后, 会将其挂载在此目录下/mnt
: 挂载其他文件系统使用/opt
: 给主机额外安装软件所摆放的目录,/usr/local
: 给主机额外安装软件的安装目录, 一般是通过通过编译源码的方式安装的程序/var
: 用于存放日志等不断扩充的内容, 或者经常被修改的内容都存放在此目录下/selinux
: security enhanced linux, selinux是一种安全子系统, 它能控制程序, 有三种模式, 可以自行设置.
二、实际操作篇
2.1 远程登录
编辑虚拟机ssh配置文件/etc/ssh/sshd_config
修改或添加: PermitRootLogin yes
这样虚拟机可以通过ssh服务进行账号密码的登录
ssh -p22 root@192.168.64.19
同时可以进行文件传输
scp root@node2:/home/ubuntu/cni-plugins-linux-amd64-v1.3.0.tgz ./
: 此命令将远程主机node2上的文件下载到当前目录下
2.2 vim和vi
Linux系统会内置vi编辑器
vim是vi的增强版本, 可以主动根据字体颜色辨别语法正确性. 代码补全, 编译以及错误跳转等方便编程等功能特别丰富
命令行输入vimtutor
进入vim tutor, 可以学习一些基本操作
vim手册(同:help user-manual
)
vi和vim的三种模式
其实官方文档里没有按照此分类
- 默认模式
以vim打开一个文档就进入了默认模式. 在这个模式中, 可以使用上下左右键和删除键来移动光标. 同时可以通过一些字母键来编辑文本内容 - 插入模式
按下:i
,I
,o
,O
,a
,A
,r
,R
等任何一个字符进入编辑模式, 通常使用i
. (airo)
i
:从当前光标之前插入
I
: 从行首插入
A
: 从行尾追加
a
: 从当前光标之后追加
r
: 替换当前光标所在的单个字符, 替换后自动结束
R
: 替换当前光标所在字符, 替换后移动到下一个字符继续替换 - 命令行模式
在此模式下, 可以根据相关指令, 完成读取, 存盘, 替换, 退出vim, 显示行号等操作.
三种模式的关系:
2.2.1 快捷键使用
编辑模式
1 |
|
2.3 开机、重启和用户登录、注销
2.3.1 关机、重启和注销
shutdown -h now
: 立即关机, haltshutdown
== shutdown -h 1
: 一分钟后关机shutdown -r now
: 立即重启halt
: 关机, 不会等待设备关闭, 与shutdown -h now效果相同reboot
: 重启sync
: 将内存的数据同步到磁盘
Note: 不管是重启还是关机, 首先要运行sync命令, 将内存数据写到磁盘,否则数据可能丢失
目前shutdown/reboot/halt 等命令均已经在关机前运行了sync, 但是还是有可能丢失数据, 因此还是建议在关机前运行sync
2.3.2 用户登录、注销
su -l root
: 切换到root用户, -l参数表示登录su - root
: 切换到root用户, 不登录logout
: 退出当前用户, 在运行级别5下, 但是在运行级别3下, 退出不会关机
2.3.3 用户管理
1. 添加用户useradd 用户名
: 创建用户, 默认密码为空, 默认家目录为/home/用户名useradd -g 组名 用户名
: 为用户指定组useradd -d /home/用户名 用户名
: 为用户指定家目录
passwd 用户名
: 修改用户密码
2. 修改用户
usermod -g 组名 用户名
: 修改用户组usermod -aG sudo 用户名
: 将用户添加到sudo用户组
3. 删除用户userdel 用户名
: 删除用户, 会保留家目录userdel -r 用户名
: 删除用户, -r参数表示删除用户家目录
一般情况, 建议保留家目录, 以免数据丢失
4. 查询用户信息id 用户名
: 查看用户信息who
: 查看当前登录用户w
: 查看当前登录用户, 显示时间last
: 查看系统登录日志whoami
: 查看当前用户名who am i
: 查看当前用户名, 显示ip地址, 登录时间
2.3.4 组管理
5. 组管理groupadd 组名
: 创建组groupmod -n 新组名 老组名
: 修改组名groupdel 组名
: 删除组
添加用户时, 如果没有指定组, 则默认生成一个组, 该组名称与用户名相同
6. 用户和组相关的文件/etc/passwd
: 用户信息 (用户名:密码:UID:GID:注释:主目录:shell)
/etc/group
: 组信息 (组名:密码:GID:用户列表)
/etc/shadow
: 用户密码信息 (登录名:加密口令:最后一次密码修改日期:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效日期:标志)
2.4 实用指令
shel
的理解:
2.4.1 运行级别
基本介绍
- 0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
- 1: 单用户工作状态,root权限,用于系统维护,禁止远程登陆。
- 2: 多用户状态(没有NFS)。NFS Network File System,即网络文件系统,用于挂载远程文件系统。
- 3: 完全的多用户状态(有NFS),登陆后进入控制台命令行模式。
- 4: 系统未使用,保留。
- 5: X11控制台,登陆后进入图形GUI模式。
- 6: 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
systemctl get-default
: 获取当前默认运行级别。
通过init切换运行级别。
应用实例: init [0123456]
开启设定
对于centOS7以前: /etc/inittab
ubuntu: /usr/lib/systemd/system
1 |
|
设置默认的运行级别: systemctl set-default graphical.target
2.4.2 帮助指令
man [命令或配置文件]
: 查看帮助help [命令]
: 查看shell内置命令的帮助信息top
: 查看系统进程使用情况history
: 查看命令历史, history 10
: 查看最近10条命令, !100
: 执行历史记录中第100条命令df -h
: 查看磁盘使用情况free -m
: 查看内存使用情况
2.4.3 文件/文件夹操作
mkdir [选项] 目录名
: 创建目录, -p
创建多级目录rmdir [选项] 目录名
: 删除空目录touch [选项] 文件名
: 创建文件rm [选项] 文件名
: 删除文件, -r
递归删除cp [选项] 源文件 目标文件
: 复制文件mv [选项] 源文件 目标文件
: 移动文件, -u
移动文件并更新软连接ln [选项] 源文件 软连接名
: 创建软连接, -s
创建软连接cat [选项] 文件名
: 显示文件内容, -n
显示行数head [选项] 文件名
: 显示文件前几行, -n
指定显示前n行, 不加参数则显示前10行tail [选项] 文件名
: 显示文件后几行, -n
指定显示后n行, 不加参数则显示后10行, -f
实时显示文件内容more [选项] 文件名
: 分页显示文件内容,less [选项] 文件名
: 分页显示文件内容, /
搜索, n
下一行, N
上一行, q
退出
2.4.4 时间日期类
date +%Y-%m-%d_%H:%M:%S
: 2024-11-07_03:08:38
2.4.5 搜索查找类
find [选项] 路径名
: 在指定路径下查找文件, -name
按文件名查找, -user
按用户查找, -type
按文件类型查找, -mtime
按修改时间查找, -size
按文件大小查找(+代表大于, -代表小于, 不写代表等于. k, M, G), -exec
执行命令, -delete
删除文件
locate 文件名
: 定位文件路径, 第一次执行之前需要执行updatedb
命令
grep [选项] 关键字 文件名
: 在文件中查找关键字, -i
不区分大小写, -n
显示行号和匹配行, -v
反向查找, -r
递归查找, -l
只显示文件名
2.4.6 压缩和解压
gzip [选项] 文件名
: 压缩文件, 只能压缩为*.gz文件 -d
解压文件, -k
保留文件名, -f
强制解压, -c
压缩文件到标准输出gunzip [选项] 文件名
: 解压文件
zip [选项] 文件名 压缩的内容
: 压缩文件, 可以压缩为*.zip文件, -r
递归压缩, -d
解压文件, -k
保留文件名, -f
强制解压, -c
压缩文件到标准输出unzip [选项] 文件名
: 解压文件, -d
指定解压路径
tar [选项] xxx.tar.gz 打包的内容
: 压缩文件, 可以压缩为*.tar.gz文件, -z
打包同时压缩, -v
显示详细信息, -f
指定压缩后的文件名, -c
产生.tar打包文件, -x
解压.tar文件
2.5 组管理和权限管理
在linux中, 每个用户必须属于一个组, 不能独立于组之外.
对于每一个文件, 有:
- 所有者
- 所在组
- 其他组
chown [选项] 新所有者:新组 新文件
: 修改文件所有者和所在组, -R
递归修改groupadd [选项] 新组名
: 创建新组groupmod [选项] 老组名 新组名
: 修改组名chgrp [选项] 新组 新文件
: 修改文件所在组, -R
递归修改
usermod -g 新组 用户名
: 修改用户所在组usermod -d 新目录 用户名
: 修改用户主目录, -m
将用户主目录移动到新目录(usermod -d /home/tom -m newtomgroup)
权限介绍
1 |
|
0-9位说明:
第0位: 文件类型
d
: 目录-
: 普通文件l
: 符号链接c
: 字符设备文件b
: 块设备文件, 比如硬盘
第1-3位: 文件所有者权限
第4-6位: 文件所在组权限
第7-9位: 其他用户权限
r
==4
: 读权限w
==2
: 写权限x
==1
: 执行权限
第10位说明:
- 如果是目录: 子目录数
- 如果是文件: 硬链接数
chmod详解
- 第一种类型操作
1
2
3
4
5# 通过+ - =变更权限
chmod g+w file # 没有指定u,g,o,a则默认添加给所有者权限, 添加给其他组除写权限之外的指定权限
chmod g+wrx file # 添加给所在组rwx权限
chmod o-wrx file # 删除其他组rwx权限
chmod o=x file #给其他组执行权限
u
: 所有者g
: 所在组o
: 其他用户a
: 所有者、所在组、其他用户
- 第二种类型操作
1 |
|
4
: 读权限2
: 写权限1
: 执行权限
2.6 定时任务调度
2.6.1 crontab定时任务
crontab [选项]
:
-e
: 编辑crontab文件-l
: 查询crontab任务-r
: 删除当前用户crontab文件
1 |
|
*
: 任意值-
: 值范围, 如: 1-5 表示1到5/
: 步长,
: 列举多个值, 如: 1,3,5
其他操作
1 |
|
2.6.2 at定时任务
at
命令是一次性定时任务,需要指定时间,在指定的时间执行命令,命令执行完毕,该定时任务自动结束。
默认情况是1分钟后执行
at [选项] 时间
: 在指定时间执行命令, 输入CRL+D结束输入
at
选项:
-f <文件名>
: 从指定文件读取任务-m
: 任务完成后发送邮件通知-q <队列名>
: 指定队列名,默认为cron
-t <时间戳>
: 指定时间戳,格式为%s
,如1577836800
,表示2020年1月1日0点0分0秒-I
: 列出at
队列, 等同于atq
-d <任务ID>
: 删除指定任务, 等同于atrm
-v
: 显示任务将被执行的时间-l
: 列出所有任务-c <任务ID>
: 打印任务的内容到标准输出(命令行)
1 |
|
2.7 磁盘分区、挂载
Linux无论有几个分区, 分给哪一个目录使用, 它归根结底就只有一个根目录, 一个独立的且唯一的文件结构. Linux中每个分区都是用来组成整个文件系统的一部分.
Linux采用了一种叫“载入”的处理方法, 它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录关联起来, 这样, 就可以认为, 这个分区是属于这个目录的.
示意图:
2.7.1 磁盘分区及挂载
lsblk
或 lsblk -f
: 查看磁盘分区情况fdisk /dev/sda
: 分区磁盘
m
: 查看命令列表l
: 查看磁盘分区情况, 同p
n
: 新增分区d
: 删除分区w
: 写入分区
分区完成后, 需要格式化磁盘分区, 格式化磁盘分区, 可以使用mkfs
命令:mkfs -t ext4 /dev/sda1
: 格式化磁盘分区, ext4
是文件系统类型
挂载磁盘分区(临时, 重启后会丢失):mount /dev/sda1 /mnt/data
: 将磁盘分区挂载到/mnt/data
目录下
卸载磁盘分区:umount /dev/sda1
: 卸载磁盘分区
挂载磁盘分区(永久):vim /etc/fstab
: 编辑挂载文件, 将磁盘分区挂载到/mnt/data
目录下
1 |
|
修改/etc/fstab
文件后, 需要重启系统,或使用mount -a
能生效:
2.7.2 磁盘情况查询
df -h
: 查看磁盘使用情况du [选项] [文件或目录]
: 显示该目录及该目下目录或文件磁盘占用情况
--h
: 显示时带计量单位, 如: 1K, 1M, 1G
--s
: 仅显示该目录大小
---max-depth
: 限制显示目录深度, 默认不限制
--c
: 列出明细同时, 显示汇总(total)值
--a
: 显示所有文件, 包括隐藏文件
2.7.3 磁盘实用指令
1 |
|
2.8 网络配置
- IP获取方式
- DHCP 动态获取IP地址
- 静态配置IP地址
2.8.1 静态配置IP地址
直接修改配置文件来指定IP, 并可以连接到外网(推荐)
1 |
|
2.8.2 设置主机名和hosts映射
为了方便记忆, 可以给Linux系统设置主机名, 也可以根据需要修改主机名hostname
: 查看当前主机名
修改文件/etc/hostname
文件, 修改主机名. 修改后重启生效
设置主机名和hosts映射: vim /etc/hosts
2.8.3 主机名解析分析
实例: 用户在浏览器输入了www.baidu.com
2.9 进程管理
在linux中, 每个执行的程序都称为一个进程, 每一个进程都分配一个ID号(PID, 进程号)
每一个进程都可能以两种方式存在:
- 前台: 用户目前屏幕上可以进行操作的进程
- 后台: 实际在运行中, 但是屏幕无法看到
一般系统的服务都是以后台进程的方式存在, 而且都会常驻载系统中, 直到关机才结束
2.9.1 查看与终止进程
- 显示系统执行的程序
ps
: 显示当前正在运行的进程ps -a
: 显示所有进程, 包括前台和后台进程ps -u
: 以用户身份显示ps -x
: 显示后台进程运行的参数ps -ef
: 以全格式显示当前所有进程, -e显示所有进程, -f全格式
- 终止进程
kill [选项] 进程号
: 终止进程kill -9 进程号
: 强制终止进程, 强制终止进程, 即使该进程正在运行中, 也可以强制终止
killall 进程名称
: 终止进程名称为进程名称的进程
最佳实践:
1 |
|
查看进程树pstree [选项]
: 可以更直观的来看进程信息
-p
: 显示进程的PID-u
: 显示进程的用户名
2.9.2 服务(service)管理
service本质就是进程, 但是是运行在后台的, 通常都会监听某个端口, 等待其他进程的请求, 比如(mysql, sshd, 防火墙等). 因此我们又称为守护进程,
service管理指令:
service|systemctl [选项] 服务名 [start|stop|restart|reload|status]
: 管理服务
2.9.3 服务管理
Linux系统有7种运行级别, 常用的是3和5
- 0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
- 1: 单用户工作状态,root权限,用于系统维护,禁止远程登陆。
- 2: 多用户状态(没有NFS)。NFS Network File System,即网络文件系统,用于挂载远程文件系统。
- 3: 完全的多用户状态(有NFS),登陆后进入控制台命令行模式。
- 4: 系统未使用,保留。
- 5: X11控制台,登陆后进入图形GUI模式。
- 6: 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
开机流程说明:
1 |
|
chkconfig
通过chkconfig可以给服务各个级别设置自启动/关闭
chkconfig指令管理的服务在/etc/etc/init.d查看
基本语法:
chkconfig --list
#显示服务在各个运行级别的自启动状态chkconfig --level 5 service_name [on|off]
- 演示:(对network服务进行操作)
chkkonfig --level 3 network on
systemctl
基本语法: systemctl [start|stop|restart|reload|status] service_name
systemctl管理的指令在/usr/lib/systemd/system
查看
- systemctl设置服务自启动状态
systemctl list-unit-files | grep service_name
: 查看服务开机自启动状态systemctl enable service_name
: 设置开机自启动systemctl disable service_name
: 设置开机不启动systemctl is-enabled service_name
: 查看服务是否开机启动
案例: 查看当前防火墙的状态, 关闭防火墙和重启防火墙
1 |
|
防火墙firwall指令
firewall-cmd --permanenet --add-port=端口号/协议
: 打开端口firewall-cmd --permanent --remove-port=端口号/协议
: 关闭端口firewall-cmd --reload
: 重新加载, 才能生效firewall-cmd --query-port=端口号/协议
: 查看端口是否开放firewall-cmd --list-ports
: 查看已开放的端口firewall-cmd --list-all
: 查看防火墙状态netstat -antp
: 查看端口是否开放
动态监控进程top
top与ps类似, 它们都用来显示正在执行的进程, Top与ps最大的不同之处, 在于top在执行一段时间可以更新正在运行的进程.
基本语法: top [选项]
-i
: 不显示任何限制或者僵死的进程-d 秒速
: 刷新间隔, 可以设置成0.1秒, 但是刷新间隔过短, 会导致top的cpu占用率非常高, 默认为3秒-p 进程号
: 查看某个进程的详细信息
交互操作:
q
: 退出topd
: 修改刷新间隔k
: 杀死进程u
: 按用户筛选P
: 按CPU使用率排序, 默认M
: 按内存使用率排序N
: 按进程号排序
监控网络状态netstat
基本语法: netstat [选项]
-an
: 按一定顺序排列输出-p
: 显示进程号和进程名
2.10 RPM和APT
RPM 用于互联网下载包的打包及安装工具, 它包含在某些Linux发行版中, 比如CentOS, Fedora等。
1 |
|
APT
1 |
|
2.11 Shell编程
Shell是一个命令行解释器, 它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell来启动、挂起、停止甚至是编写一些程序
2.11.1 执行方式
- 脚本的格式要求:
- 脚本以
#/bin/bash
开头 - 脚本需要有可执行权限
- 脚本以
- 脚本常用执行方式:
- 直接执行脚本:
sh 脚本文件名
- 脚本文件执行:
./脚本文件名
(需要添加执行权限 +x)
- 直接执行脚本:
案例:
1 |
|
2.11.2 Shell中的变量
- 普通变量:
set
显示当前shell中所有的变量- 系统变量
- $HOSTNAME
- $USER
- $PATH
- $HOME
- 定义环境变量:
export VAR_NAME=VALUE
- 自定义变量
- 变量定义规则: 可以由字母数字下划线组成, 但是不能以数字开头; 等号两边不能有空格; 变量名一般大写
- 定义变量:
变量名=值
- 引用变量:
$变量名
- 删除变量:
unset 变量名
- 声明静态变量:
readonly 变量名
(静态变量不能被unset, 也不能被修改)
- 将命令返回值赋值给变量: 使用用反引号或者是括号
1 |
|
Shell脚本多行注释:
1
2
3
4:<<! 内容
内容
!位置参数变量
当执行一个shell脚本时, 如果希望获取命令行的参数信息, 可以使用位置参数变量.
比如:./myshell.sh 100 200
- 基本语法:
$n
: n为数字, 0代表命令本身(不含参数), 1-9代表第一到第九个参数, 参数超过十个(包含10), 使用大括号, 例如${12}
$*
: 代表命令行中所有的参数, 把所有参数看成一个整体$@
: 代表命令行中所有的参数, 把每个参数看成单独个体$#
: 代表命令行中参数的个数
- 预定义变量
shell设计者事先已经定义好的变量, 可以直接在shell中使用.
$$
: 当前进程的进程号$!
: 后台运行的最后一个进程的进程号$?
: 最后一次执行命令的返回状态, 如果变量为0, 则说明上一个命令执行成功
2.11.3 Shell中的运算符
基本语法:
$((运算式))
,$[运算式]
,expr 运算式
expr
运算符之间需要有空格, 加、减、乘、除、取余用+, -, \*, /, %
表示
2.11.4 条件判断
基本语法:
[ condition ]
: 非空返回true, 可以使用$?
验证, 0为true, 1为false(注意: condition前后需要有空格)
if判读:
1 |
|
1 |
|
2.11.5 case语句
1 |
|
2.11.6 循环控制
1 |
|
2.11.7 读取控制台输入
基本语法: read [选项] [参数]
- 选项:
-p
: 指定读取值时的提示符-t
: 指定读取值时的等待时间(秒)
- 参数: 指定读取值的变量名
1 |
|
2.11.8 函数
shell中的函数包括系统函数和自定义函数
- 系统函数
basename
基本语法:basename [pathname] [suffix]
功能: 返回完整路径最后/的部分(不包括/), 常用于获取文件名
suffix为后缀, 如果指定suffix, basename会将pathname中的suffix去掉
例子:basename /home/ubuntu/t.txt .txt
, 结果是t
dirname
基本语法:dirname pathname
功能: 返回完整路径的目录(即除去pathname中最后的/及之后的部分)
例子:dirname /home/ubuntu/t.txt
结果是:/home/ubuntu
- 自定义函数
1 |
|
2.11.9 综合案例
每天凌晨2:30备份数据库testDatabse到/data/backup/db
开始备份和备份结束都能给出相应的提示信息
备份后的文件要求以备份时间为文件名, 并打包为.tar.gz的形式
在备份的同时, 检查是否有10天前的备份数据库文件, 有就将其删除
1 |
|
1 |
|
三、高级篇
3.1 日志管理
日志文件是重要的系统信息文件, 其中记录了许多重要的系统事件, 包括用户的登录信息, 系统的启动信息, 系统的安全信息, 邮件相关信息, 各种服务相关信息
日志对于安全来说很重要, 它记录了系统每天发生的各种事件, 通过日志来检查错误发生的原因, 或者受到攻击时攻击者留下的痕迹.
日志是用来记录重大事件的工具./var/log
目录就是系统日志文件的保存位置 (variable)rsyslogd
是用于记录日志的后台程序, 对应的配置文件是/etc/rsyslog.conf
1 |
|
3.1.1 rsyslogd配置文件
ps -aux | grep rsyslog | grep -v grep
查看rsyslogd进程是否启动, 只有启动了日志才能正常记录
systemctl list-unit-files | grep rsyslog
查看rsyslogd是否是自启动状态
1 |
|
日志的格式包含以下4列
- 事件产生的时间
- 产生事件的服务器的主机名
- 产生事件的服务名或程序名
- 事件的具体信息
例如:1
2
3
42024-11-13T07:20:59.433134+00:00 LinuxLearn rsyslogd: [origin software="rsyslogd" swVersion="8.2312.0" x-pid="823762" x-info="https://www.rsyslog.com"] start
2024-11-13T07:21:01.985136+00:00 LinuxLearn CRON[823844]: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0)
2024-11-13T07:21:01.985662+00:00 LinuxLearn CRON[823845]: (root) CMD (date > mydate.txt)
2024-11-13T07:21:01.987758+00:00 LinuxLearn CRON[823844]: pam_unix(cron:session): session closed for user root
3.1.2 日志轮替
日志轮替就是把旧的日志文件移动并改名, 同时建立新的空日志文件, 当旧的日志文件超出保存范围之后, 就会被自动删除
- Linux使用
logrotate
进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf
配文件中“dateext”等参数 - 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20201010” 。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可
- 如果配置文件中没有“dateext参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure“日志会自动改名为“secure.1”. 然后新创建“secure”日志, 用来保存新的日志.
- 当第二次进行日志轮替时, “secure.1”会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”, 然后也会新建“secure”日志, 用来保存新的日志. 依次类推.如果超过日志的默认保存个数, 系统会自动删除目前存在的最旧的日志.
1 |
|
配置参数说明
1 |
|
3.1.3 查看内存日志
journalctl
可以查看内存日志
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 journalctl # 查看所有日志
journalctl -b # 查看当前启动的日志
journalctl -b -1 # 查看上次启动的日志
journalctl -xe # 查看错误日志,显示详细的错误信息
journalctl -f # 实时查看日志(类似于 `tail -f`)
journalctl -u <service_name> # 查看特定服务的日志(例如:journalctl -u nginx)
journalctl --since "2024-11-01" # 查看从某个日期之后的日志
journalctl --until "2024-11-02" # 查看到某个日期的日志
journalctl --since "2 hours ago" # 查看最近 2 小时的日志
journalctl -p err # 查看日志级别为 error 及以上的日志
journalctl -n 50 # 查看最近 50 行日志
journalctl -o short # 以简洁的格式输出日志
journalctl -o json # 以 JSON 格式输出日志
journalctl -r # 反向查看日志(最新的日志显示在最前面)
journalctl --no-pager # 禁止分页输出,所有日志一次性输出
journalctl -k # 只显示内核日志
journalctl -t <unit_name> # 按系统单元名称过滤日志(例如:journalctl -t nginx)
journalctl -u <service_name> -f # 实时查看指定服务的日志
journalctl _PID=1 _COMM=sshd # 按进程 ID 和进程名过滤日志(例如:journalctl _PID=1 _COMM=sshd)
1 |
|
3.2 定制自己的linux
通过裁剪现有的Linux系统, 创建属于自己的Linux系统
首先了解Linux系统的启动流程
3.3 Linux内核源码和内核升级
Linux官网并没有直接托管 Linux 0.01 的源代码,因为 Linux 内核的官方网站主要托管的是最新的稳定版本。
建议从官网的Linux Git 存储库阅读Linux源码
1 |
|
1 |
|
1 |
|
3.4 Linux备份与恢复
实体机无法做快照, 如果系统发生崩溃或者数据损坏, 后果严重, 需要重新做系统, 还会造成数据丢失, 所以我们可以使用备份和恢复技术
Linux备份和恢复的两种方式:
- 把需要的备份的文件达成tar包, 下次需要恢复的时候, 再解压覆盖即可
- 使用dump和restore命令
备份操作
1 |
|
恢复操作
1 |
|
dump和restore详解
1 |
|
3.5 Linux可视化管理webmin和bt运维工具
bt下载: wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh
3.6 Linux入侵检测、权限划分、系统优化
3.7 Linux面试题
- 分析t.log日志, 将各个ip地址截获, 并统计出现次数, 并按照从大大小排序
1 |
|
1 |
|
- 统计连接到服务器的各个ip情况, 并按照连接数从大到小排序
1 |
|
如忘记了mysql5.7数据库的ROOT用户的密码,如何找回?
写出指令:统计ip访问情况,要求分析nginx访问日志(access.log),找出访问页面数量在前十位的ip
使用tcpdump监听本机,将来自ip 192.168.200.1,tcp端口为22的数据,保存输出到tcpdump.log,用做将来数据分析
常用的Nginx模块,用来做什么
1. 常用命令
1.1 系统操作
- 查看系统信息:
uname -a
- 查看系统版本:
cat /etc/issue
- 查看系统发行版:
cat /etc/os-release
,lsb_release -a
- 查看系统内核版本:
uname -r
1.2 文件操作
1.2.1 sed
命令
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法:
sed [options] [script] [input]
sed [-hnV][-e<script>][-f<script文件>][文本文件]
1 |
|
1.2.2 find
find [路径] [匹配条件] [动作]
vim 操作
新建/编辑 .vimrc 文件
1 |
|