场景应用
分析日志文件,将各个 IP 地址截取,并统计出现次数,按从大到小排序
1、日志信息结构(例):http://192.168.200.10/index.html
2、cat log.txt | cut -d "/" -f 3 | sort | uniq -c | sort -nr
(1)cat log.txt:输出结果
(2)cut -d "/" -f 3:以 / 分隔,查看第三区域
(3)sort:从小到大排序
(4)uniq -c:去重,在每列旁边显示该行重复出现的次数
(5)sort -nr:依照数值的大小排序,以相反的顺序(从大到小)来排序
统计连接到服务器的各 IP 情况,按照连接数从大到小排序
1、网络连接信息(例)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:22 127.0.0.1:53318 ESTABLISHED
tcp 0 0 127.0.0.1:22 127.0.0.1:53320 ESTABLISHED
tcp 0 52 192.168.121.39:22 192.168.121.1:52866 ESTABLISHED
tcp 0 0 127.0.0.1:53320 127.0.0.1:22 ESTABLISHED
tcp 0 0 127.0.0.1:53318 127.0.0.1:22 ESTABLISHED
2、netstat -an | grep "ESTABLISHED" | awk -F " " '{print $5}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr
(1)netstat -an | more:查询所有网络链接
(2)grep "ESTABLISHED":过滤只显示 ESTABLISHED 状态的网址
(3)awk -F " " '{print $5}':以空白键分割,只显示 Foreign Address 第五列
(4)cut -d ":" -f 1:以 : 分割,过滤 Foreign Address 端口号 ,只保留 IP 地址
(5)sort:从小到大排序
(6)uniq -c:去重,在每列旁边显示该行重复出现的次数
(7)sort -nr:依照数值的大小排序,以相反的顺序(从大到小)来排序
MySQL 忘记 root 密码
1、进入 /etc/my.cnf 文件 加入一条指令 skip-grant-tables
(1)vim /etc/my.cnf
(2)skip-grant-tables
2、重启 MySQL 服务 ,验证可以用空密码登录
(1)systemctl restart mysqld
(2)mysql -u root -p
3、用空密码登录后,进入 mysql 库 user 表,更改 root 用户的 authentication_string 密码值
(1)显示库列表:show databases;
(2)进入 mysql 库:use mysql;
(3)显示 mysql 库下面的表的个数:show tables;
(4)显示 user 字段:desc user;
(5)更改 root 用户的 authentication_string 密码值:update user set authentication_string=password("新密码") where user='root'
(6)刷新权限:flush privileges;
(7)退出:exit
4、重新进入 /etc/my.cnf 文件,删除 skip-grant-tables
统计 IP 访问情况,找出访问页面数前两位 IP
1、日志信息结构(例):192.168.200.50 index.html
2、cat log.txt | awk -F " " '{print $1}'| sort|uniq -c|sort -nr | head -n 2
(1)cat log.txt 输出结果
(2)awk -F " " '{print $1}':按空白键分隔数据,显示 IP 地址
(3)sort:从小到大排序
(4)uniq -c:去重,在每列旁边显示该行重复出现的次数
(5)sort -nr:依照数值的大小排序,以相反的顺序(从大到小)来排序
(6)head -n 2:取前两位数据
用 tcpdump 监听某个 IP 连接,将结果输出到 tcpdump.log
1、指定 IP:192.168.121.1,监听端口:22
2、tcpdump -i ens33 host 192.168.121.1 and port 22 >> /opt/interview/tcpdump.log
Nginx 模块
1、rewrite 模块:实现重写功能
2、access 模块:来源控制
3、ssl 模块:安全加密
4、ngx_http_gzip_module:网络传输压缩模块
5、ngx_http_proxy_module:实现代理
6、ngx_http_upstream_module:实现定义后端服务器列表
7、ngx_cache_purge:实现缓存清除功能
权限划分
1、权限分离,如:Linux 系统权限和数据库权限不要在同一个部门
2、权限最小原则:在满足使用的情况下最少优先
3、减少使用 root 用户,使用普通用户 + sudo 提权进行操作
4、重要的系统文件,如:/etc/passwd,/etc/shadow,/etc/fstab,/etc/sudoers 等,建议使用 chattr 锁定,需要操作时再打开
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
(1)chattr 改变存放在 ext2 文件系统上的文件或目录属性
(2)a:让文件或目录仅供附加用途
(3)b:不更新文件或目录的最后存取时间
(4)c:将文件或目录压缩后存放
(5)d:将文件或目录排除在倾倒操作之外
(6)i:不得任意更动文件或目录
(7)s:保密性删除文件或目录
(8)S:即时更新文件或目录
(9)u:预防意外删除
(10)-R 递归处理,将指定目录下的所有文件及子目录一并处理
(11)-v<版本编号> 设置文件或目录版本
(12)-V 显示指令执行过程
(13)+<属性> 开启文件或目录的该项属性
(14)-<属性> 关闭文件或目录的该项属性
(15)=<属性> 指定文件或目录的该项属性
5、使用 SUID,SGID,Sticky 设置特殊权限
6、chkrootkit/rootkit hunter,检测 rootkit 脚本
7、Tripwire 检测文件系统完整性
CentOS 7 启动流程
1、第一阶段:硬件启动阶段
2、第二阶段:GRUB2 引导阶段
(1)CentOS 7 主引导程序使用的是 grub2
(2)流程:显示加载两个镜像,再加载 MOD 模块文件,把 grub2 程序加载执行,接着解析配置文件 /boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核
(3)grub.cfg 配置文件比较复杂,CentOS 7 中一般是使用命令进行配置,而不直接去修改配置文件,grub.cfg 配置文件开头注释部分,说明由 /etc/grub.d/ 目录下文件和 /etc/default/grub 文件组成
一般修改好配置后都需要使用命令 grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成
3、第三阶段:内核引导阶段
(1)加载驱动,切换到真正的根文件系统
(2)与 CentOS 6 不同的是,执行的初始化程序变成 /usr/lib/systemd/systemd
4、第四阶段:systemed 初始化阶段(系统初始化阶段)
(1)CentOS 7 中初始化进程变为 systemd,执行默认 target 配置文件 /etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)
(2)然后执行 sysinit.target 来初始化系统和 basic.target 来准备操作系统,接着启动 multi-user.target 下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动
(3)最后执行 multi-user 下的 getty.target 及登录服务,检查 default.target 是否有其他的服务需要启动
(4)注意:/etc/systemd/system/default.target 指向 /lib/systemd/system/ 目录下的 graphical.target或multiuser.target,而 graphical.target 依赖 multiuser.target,multiuser.target 依赖 basic.target,basic.target 依赖 sysinit.target,所以倒过来执
行
(5)System 概述(了解):systemd 即为 system daemon,是 Linux 下的一种 init 软件,开发目标是提供更优秀的框架以表示系统服务间的以来关系,并依此实现系统初始化时服务的并行启动,同时达到降低 Shell 系统开销的效果,最终代替现在常用的
System V与 BSD 风格的 init 程序,与多数发行版使用的 System V 风格的 init 相比,systemd 采用了以下的新技术:采用 Socket 激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;用 Cgroup 代替 PID 来追踪进程,即使是两次 fork 之后生
成的守护进程也不会脱离 systemd 的控制
(6)unit 对象:unit 表示不同类型的 systemd 对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听 socket、保存的系统快照以及其他与init相关的信息(即 CentOS 6 中的服务器启动脚本)
Linux 高级命令
1、netstat:网络状态监控
2、top:系统运行状态
3、lsblk:查看硬盘分区
4、ps-aux:查看运行进程
5、chkconfig:查看服务启动状态
6、systemctl:管理系统服务器
7、iotop:IO 读写
8、df -lh:磁盘存储
9、netstat -tunlp:端口占用
10、ps -aux | grep 进程名:查看指定进程
Web 服务器负载架构
1、Nginx
2、Haproxy
3、Keepalived
4、LVS
优化 Linux 系统
1、不使用 root,使用 sudo 提示权限
2、定时自动更新服务时间,使用 nptdate npt1.aliyun.com,让 croud 定时更新
3、配置 yum 源,指向国内镜像
4、配置合理的防火墙策略,打开必要的端口,关闭不必要的端口
5、打开最大文件数(调整文件的描述数量):vim/etc/profile ulimit -SHn 65535
6、配置合理的监控策略
7、配置合理的系统重要文件的备份策略
8、对安装的软件进行优化,如:nginx,apache
9、内核参数进行优化:/etc/sysctl.conf
10、锁定一些重要的系统文件,如:chattr,/etc/passwd,/ect/shadow,/etc/inittab
11、禁用不必要的服务,如:setup,ntsysv
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战