浅识Linux高阶用法

(前记:内容有点多,先看目录再挑着看。)   

    问题:在Java面试中,当被提问到Linux的高阶用法以及如何使用Linux将程序、数据库、中间件等部署在云上时,可以从以下几个方面进行回答:

Linux的高阶用法

  1. Shell脚本编写

    • 编写复杂的Shell脚本,实现自动化管理任务,如批量启动/停止服务、日志收集与分析等。
    • 利用正则表达式、循环、条件判断等Shell脚本特性,提高脚本的灵活性和可维护性。
    • 假设需要每天凌晨2点自动备份某个重要目录。可以编写一个Shell脚本,使用cron定时任务来每天执行这个脚本。脚本中可以使用tar命令将目录打包成压缩文件,并使用scp命令将压缩文件传输到远程备份服务器上。
  2. 文件系统管理

    • 熟练掌握Linux文件系统的结构,能够合理规划磁盘空间,优化文件I/O性能。
    • 了解并使用LVM(逻辑卷管理)进行磁盘的动态扩展和管理。
    • 假设服务器的磁盘空间不足,需要扩展磁盘空间。可以使用LVM来动态扩展逻辑卷。首先,添加新的物理卷到卷组中,然后使用lvextend命令扩展逻辑卷的大小,最后使用resize2fs命令调整文件系统的大小以匹配新的逻辑卷大小。
  3. 网络配置与管理

    • 配置和管理Linux网络,包括静态IP设置、路由配置、防火墙规则等。
    • 使用netstat、iptables等工具监控和分析网络流量,排查网络故障。
    • 假设需要限制某个IP地址的访问权限。可以使用iptables命令来添加一条规则,拒绝来自该IP地址的所有连接请求。例如,使用命令iptables -I INPUT -s 192.168.1.100 -j DROP来拒绝来自192.168.1.100的访问。
  4. 系统性能调优

    • 分析系统性能瓶颈,使用top、htop、vmstat等工具监控CPU、内存、磁盘I/O等资源使用情况。
    • 调整系统参数,如内核参数、文件描述符限制等,以提高系统性能。
    • 假设服务器的CPU使用率非常高,需要找出占用CPU最高的进程。可以使用top命令来实时查看系统资源使用情况,并通过按P键来按CPU使用率排序进程列表。找到占用CPU最高的进程后,可以使用kill命令终止该进程。
    • 工具链使用
      # CPU分析
      top -H -p [PID]    # 查看线程级CPU占用
      perf stat -d java -jar app.jar  # 性能计数器分析# 内存分析
      vmstat 2 10        # 每2秒采样,共10次(检查si/so判断Swap使用)
      jmap -histo:live [PID] > heap.txt  # Java堆内存直方图# 磁盘IO
      iostat -x 1        # 监控磁盘吞吐和延迟(%util >70%表示瓶颈)
      pidstat -d -p [PID] # 进程级IO统计# 网络分析
      ss -tnlp           # 比netstat更高效的连接查看
      tcpdump -i eth0 'port 8080' -w capture.pcap  # 抓包分析
    • 实战案例
      •  某次线上服务延迟突增,通过top发现CPU软中断(si)过高,结合mpstat -P ALL 1确认单核瓶颈,最终用ethtool -K eth0 gro off关闭GRO功能解决网卡多队列不均问题。
  5. 安全配置与管理

    • 配置SELinux或AppArmor等安全模块,增强系统安全性。
    • 定期更新系统补丁,防范已知漏洞。
    • 使用SSH密钥认证、防火墙规则等限制非法访问。
    • 假设需要增强服务器的安全性,可以配置SELinux来限制进程的访问权限。例如,可以设置SELinux为enforcing模式,并使用semanage命令来管理SELinux策略。此外,还可以定期更新系统补丁,使用yum update命令来安装最新的安全更新。
  6. 系统级问题排查

    •   核心技巧

      # 日志分析三板斧
      grep "ERROR" app.log | awk '{print $1}' | sort | uniq -c | sort -nr  # 错误统计
      journalctl -u nginx --since "2023-08-01" --until "2023-08-02"  # 系统服务日志
      dmesg -T | grep "Out of memory"  # 内核日志时间格式化# 进程调试
      strace -ff -o trace.log java -jar app.jar  # 系统调用跟踪
      gcore [PID]          # 生成Core Dump而不终止进程
      • 案例
        曾遇到JVM频繁Full GC,通过jstat -gcutil [PID] 1000观察内存回收情况,结合jmap -dump:format=b,file=heap.hprof [PID]导出堆分析,发现内存泄漏点为未关闭的数据库连接池。

  7.  自动化运维

    Shell脚本进阶
    • # 安全备份脚本(保留7天)
      find /backups -type f -mtime +7 -exec rm -f {} \;  
      mysqldump -u root db | gzip > /backups/db_$(date +%F).sql.gz# 服务监控脚本
      while true; doif ! nc -z localhost 8080; thenecho "服务宕机!" | mail -s "告警" admin@example.comsystemctl restart appfisleep 60
      done
    • Ansible实战

      # deploy.yml
      - hosts: webserverstasks:- name: 部署JAR包copy:src: target/app.jardest: /opt/app/- name: 重启服务systemd:name: appstate: restartedenabled: yes

      使用Ansible实现跨200+服务器的批量部署,部署时间从2小时缩短至5分钟。

--------分界线---------------------------------------------------------------------------------------------------

使用Linux将程序、数据库、中间件等部署在云上

  1. 选择云服务提供商
    • 选择可靠的云服务提供商,如阿里云、腾讯云、AWS等。
    • 根据业务需求选择合适的云服务器规格,如CPU、内存、存储等。
  2. 创建云服务器实例
    • 在云服务提供商的控制台中创建新的云服务器实例。
    • 选择适合的Linux发行版作为操作系统镜像。
  3. 配置实例设置
    • 配置实例的网络设置,包括公网IP、私网IP、安全组规则等。
    • 根据需求选择地理位置和可用区。
  4. 连接到实例
    • 使用SSH协议等工具连接到云服务器实例。
    • 进行必要的系统初始化设置,如更新软件包、安装常用工具等。
  5. 部署程序
    • 将Java程序打包成可执行的jar包或war包。
    • 使用scp、rsync等工具将程序上传到云服务器。
    • 配置和运行Java程序,如使用Tomcat、Jetty等Servlet容器或Spring Boot等框架。
    • 假设有一个Java Web应用程序需要部署在Tomcat服务器上。首先,将Tomcat服务器安装在云服务器上,并将Java Web应用程序打包成WAR文件。然后,使用scp命令将WAR文件上传到Tomcat的webapps目录下。最后,启动Tomcat服务器,Tomcat会自动解压WAR文件并部署应用程序。
  6. 部署数据库
    • 选择适合的数据库类型,如MySQL、PostgreSQL等。
    • 在云服务器上安装并配置数据库。
    • 进行数据库初始化,导入必要的数据。
    • 假设需要部署一个MySQL数据库。首先,在云服务器上安装MySQL服务器,并进行初始化设置,如设置root密码、创建数据库和用户等。然后,将数据库备份文件上传到云服务器上,并使用mysql命令导入备份文件到MySQL数据库中。
  7. 部署中间件
    • 根据业务需求选择合适的中间件,如Redis、Memcached等缓存中间件,或RabbitMQ、Kafka等消息中间件。
    • 在云服务器上安装并配置中间件。
    • 进行必要的中间件初始化设置。
    • 假设需要部署一个RabbitMQ消息中间件。首先,在云服务器上安装Erlang和RabbitMQ。然后,启动RabbitMQ服务,并进行必要的配置,如创建交换机、队列和绑定等。最后,编写生产者和消费者程序,使用RabbitMQ提供的API来发送和接收消息。
  8. 配置和优化
    • 根据实际需求配置系统设置,如网络设置、安全设置、性能优化等。
    • 使用监控工具(如Nagios、Zabbix等)监控服务器状态,及时发现并解决问题。
    • 在部署完成后,需要进行必要的配置和优化。例如,可以调整Tomcat服务器的内存设置,以提高应用程序的性能。可以使用vi命令编辑Tomcat的配置文件server.xml,并修改<Connector>元素的maxThreadsminSpareThreads等属性来调整线程池的大小。此外,还可以使用sysctl命令来调整Linux内核参数,如文件描述符限制、TCP连接超时等,以提高系统的网络性能。
  9. 备份和恢复
    • 定期进行服务器备份,以防数据丢失或服务器故障时能够快速恢复。
    • 配置自动化备份策略,提高备份效率和可靠性。
    • 为了确保数据的安全性,需要定期进行备份。可以使用rsync命令将重要数据同步到远程备份服务器上。此外,还可以使用cron定时任务来定期执行备份脚本。在需要恢复数据时,可以从备份服务器上下载备份文件,并使用相应的命令将数据恢复到原始位置。
  10. 自动化部署与监控
    • 使用CI/CD工具(如Jenkins、GitLab CI)实现自动化部署。

    • 使用监控工具(如Prometheus、Grafana)监控应用、数据库和中间件的运行状态。

--------分界线---------------------------------------------------------------------------------------------------

二、云上部署架构(项目实战)

1. 基础设施即代码(IaC)
  • Terraform示例(AWS)

    resource "aws_instance" "app" {ami           = "ami-0c55b159cbfafe1f0"instance_type = "t3.medium"vpc_security_group_ids = [aws_security_group.app.id]user_data = filebase64("init.sh")
    }resource "aws_rds_cluster" "mysql" {engine         = "aurora-mysql"instance_class = "db.t3.medium"availability_zones = ["us-east-1a", "us-east-1b"]
    }

    项目经验
            在金融项目中,通过Terraform管理200+资源,实现环境快速复制(开发→测试→生产),并集成Vault动态生成数据库凭证。

2. 容器化部署
  • Docker优化技巧

  • 使用Docker容器化:将Java程序打包为Docker镜像,然后部署到容器服务(如Kubernetes、Docker Swarm)。

  • 直接部署到虚拟机:通过SSH连接到云服务器,使用scprsync将程序文件传输到服务器上。

  • # 多阶段构建减小镜像体积
    FROM maven:3.8-jdk-11 AS build
    COPY . /app
    RUN mvn package -DskipTestsFROM openjdk:11-jre-slim
    COPY --from=build /app/target/app.jar /app.jar
    USER nobody  # 非root运行
    HEALTHCHECK --interval=30s CMD curl -f http://localhost:8080/health || exit 1

    案例
    将单体应用改造为微服务,镜像大小从780MB降至95MB,启动时间由45秒缩短至8秒。

    • Kubernetes部署

      # deployment.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:name: app
      spec:replicas: 3strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0template:spec:containers:- name: appimage: registry.example.com/app:v1.2resources:limits:memory: "1Gi"cpu: "500m"livenessProbe:httpGet:path: /healthport: 8080

      实战经验
             在电商大促期间,通过HPA(Horizontal Pod Autoscaler)实现自动扩缩容,应对流量峰值从50到300 Pod的弹性伸缩。

3. 中间件云上部署
  • Redis集群部署

    # 使用Redis官方Helm Chart
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install redis-cluster bitnami/redis \--set cluster.slaveCount=2 \--set persistence.storageClass=gp2

    调优经验
           配置maxmemory-policy allkeys-lru并启用rdb-save,在内存不足时保障核心数据持久化。

  • Kafka云原生方案

    # Strimzi Operator部署
    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:name: my-cluster
    spec:kafka:replicas: 3storage:type: persistent-claimsize: 100Giconfig:num.partitions: 12default.replication.factor: 3zookeeper:replicas: 3

    案例
           在日志分析系统中,通过调整num.io.threads=16log.flush.interval.messages=10000,吞吐量提升40%。

4. 数据库高可用方案
  • 云托管服务选择

    • AWS RDS Multi-AZ部署

    • 阿里云PolarDB集群

    • 自建MySQL Group Replication

  • 备份策略

    # Percona XtraBackup自动化
    innobackupex --user=backup --password=xxx /backups/
    aws s3 sync /backups s3://bucket/db-backups/

    恢复演练
           每季度执行全量恢复测试,确保RTO<30分钟,RPO<5分钟。(RTO是恢复时间目标,指系统允许的最大停机时间,而RPO是恢复点目标,指数据丢失的最大时间范围。)


三、监控与安全

1. 云原生监控体系
  • Prometheus + Grafana

    # Prometheus配置示例
    - job_name: 'java_app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['app:8080']

    自定义业务指标:

    @Timed(value = "order.process.time", description = "订单处理耗时")
    public void processOrder() { ... }
2. 安全加固实践
  • Linux层

    # SSH加固
    sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
    echo "AllowUsers deploy" >> /etc/ssh/sshd_config# 防火墙策略
    ufw allow proto tcp from 10.0.0.0/8 to any port 8080
  • K8s安全

    # Pod安全策略
    securityContext:runAsNonRoot: truecapabilities:drop: ["ALL"]readOnlyRootFilesystem: true

四、回答技巧

  1. 技术结合业务
    "在最近的风控系统中,我们使用tcpdump抓取可疑请求,结合Wireshark分析发现API被恶意爬取,随后通过iptables动态封禁IP段,并优化了鉴权流程"

  2. 故障排查故事
    "某次凌晨3点数据库CPU 100%,通过pt-query-digest分析慢日志,发现缺失索引导致全表扫描,紧急添加索引后恢复,并建立了SQL审核流程"

  3. 架构演进路线
    "系统从单机部署逐步演进为:

    • 阶段1:EC2 + 自建MySQL

    • 阶段2:EKS容器化 + RDS读写分离

    • 阶段3:跨AZ多活 + 混沌工程测试"

  4. 数据量化成果
    "通过优化JVM参数(-XX:+UseZGC)和内核参数(vm.swappiness=10),GC暂停时间从200ms降至10ms,系统吞吐量提升3倍"


                通过以上技术细节与项目实战的结合,既能展示对Linux的深度掌握,又能体现云原生部署的工程能力,这正是高级Java工程师所需的核心竞争力。

--------分界线---------------------------------------------------------------------------------------------------

        综上所述,Linux的高阶用法包括Shell脚本编写、文件系统管理、网络配置与管理、系统性能调优和安全配置与管理等方面。而使用Linux将程序、数据库、中间件等部署在云上则需要选择云服务提供商、创建云服务器实例、配置实例设置、连接到实例、部署程序、数据库和中间件、进行配置和优化以及备份和恢复等操作。

(抱歉,最近在面试,粗糙了些。)

(望各位潘安、各位子健/各位彦祖、于晏不吝赐教!多多指正!🙏)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL智障离谱问题,删了库确还存在、也不能再创建同名库

1、问题 今天跟后端朋友接毕设单子的时候&#xff0c;后端穿过来的【weather.sql】这个文件没弄好&#xff0c;导致这个【weather】数据库的数据是错的&#xff0c;因此我用datagrip的GUI界面直接右键删除&#xff0c;结果就是tmd删不掉&#xff0c;ok&#xff0c;我只能在那新…

高子昂医编---23岁,医疗编上岸,正式开启养老生活

作为一个只想毕业后就找个稳定工作躺平一生的普通人&#xff0c;直接放弃加入考研考公大军&#xff0c;加入了竞争稍微小一点的考编大军&#xff01;毕业那年在学校辛苦奋斗四个多月&#xff0c;直接一战上岸&#xff01;成为了一名有编制的医务工作者&#xff01;现在在我们家…

【Linux系统】—— 调试器 gdb/cgdb的使用

【Linux系统】—— 调试器 gdb/cgdb的使用 1 前置准备2 快速认识 gdb3 cgdb/gdb 的使用3.1 简单认识 cgdb3.2 打断点 / 删断点3.3 逐过程 / 逐语句3.4 查看变量3.5 快速跳转 4 cgdb/gdb 调试技巧4.1 watch4.2 「set var」确定问题原因4.3 条件断点 5 概念理解6 gdb/cgdb 指令一…

llama.cpp部署 DeepSeek-R1 模型

一、llama.cpp 介绍 使用纯 C/C推理 Meta 的LLaMA模型&#xff08;及其他模型&#xff09;。主要目标llama.cpp是在各种硬件&#xff08;本地和云端&#xff09;上以最少的设置和最先进的性能实现 LLM 推理。纯 C/C 实现&#xff0c;无任何依赖项Apple 芯片是一流的——通过 A…

【Vue3】Vue 3 中列表排序的优化技巧

本文将深入探讨 Vue 3 中列表排序的优化技巧&#xff0c;帮助提升应用的性能和响应速度。 1. 避免不必要的排序 按需排序 在实际应用中&#xff0c;并非每次数据更新都需要进行排序。例如&#xff0c;当列表数据仅在特定条件下需要排序时&#xff0c;可通过条件判断来避免不…

HaProxy源码安装(Rocky8)

haproxy具有高性能、高可用性、灵活的负载均衡策略和强大的将恐和日志功能&#xff0c;是法国开发者 威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件&#xff0c;是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器&#xff0c;支持基于cookie的持久性&a…

调用openssl实现加解密算法

由于工作中涉及到加解密&#xff0c;包括Hash&#xff08;SHA256&#xff09;算法、HMAC_SHA256 算法、ECDH算法、ECC签名算法、AES/CBC 128算法一共涉及5类算法&#xff0c;笔者通过查询发现openssl库以上算法都支持&#xff0c;索性借助openssl库实现上述5类算法。笔者用的op…

1-13 tortoiseGit忽略文件与文件夹

前言&#xff1a; 基于本人对小乌龟操作的学习和思考&#xff0c;仅供参考 1-1 忽略问价和文件夹 有时候我们的一些文件是不想要提交&#xff0c;那么我们可以使用stash的方式给这个文件添加忽略&#xff0c;那么我们现在来给这个实际操作创建一个操作的环境。 右键选中添加到忽…

✨2.快速了解HTML5的标签类型

✨✨HTML5 的标签类型丰富多样&#xff0c;每种类型都有其独特的功能和用途&#xff0c;以下是一些常见的 HTML5 标签类型介绍&#xff1a; &#x1f98b;结构标签 &#x1faad;<html>&#xff1a;它是 HTML 文档的根标签&#xff0c;所有其他标签都包含在这个标签内&am…

PostgreSQL 的崛起与无服务器数据库的新时代

根据 2023 年 Stack Overflow 开发人员调查 &#xff0c;PostgreSQL 超越 MySQL 成为最受开发人员推崇和期望的数据库系统&#xff0c;这是一个重要的里程碑。这一转变反映了开发人员社区对 PostgreSQL 强大的功能集、可靠性和可扩展性的日益认同。 这种不断变化的格局激发了数…

Redis(高阶篇)03章——缓存双写一致性之更新策略探讨

一、反馈回来的面试题 一图你只要用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一致性的问题&#xff0c;那么你如何解决一致性的问题双写一致性&#xff0c;你先动缓存redis还是数据库mysql哪一个&#x…

【机器学习监督学习】:从原理到实践,探索算法奥秘,揭示数据标注、模型训练与预测的全过程,助力人工智能技术应用与发展

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏:机器学习专栏 目录 线性回归&#xff08;Linear Regression&#xff09; 基本概念 数学模型 优缺点 利用Python实现线性回归 逻辑回归&#xff08;Logistic Regression&#xff09; 3.2. 数学模型 优缺点 …

数据结构_前言

本次我们将进入一个新的阶段啦~ 要注意哦&#xff1a; 在学数据结构之前&#xff0c;我们要先掌握c语言中所学的指针、结构体、内存的存储这几部分&#xff0c;如果还没太掌握的话&#xff0c;那记得去复习回顾一下噢。 下面我们就一起进入数据结构的学习吧&#xff01; 知识…

VirtualBox 中使用 桥接网卡 并设置 MAC 地址

在 VirtualBox 中使用 桥接网卡 并设置 MAC 地址&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;设置桥接网卡 打开 VirtualBox&#xff0c;选择你的虚拟机&#xff0c;点击 “设置” (Settings)。进入 “网络” (Network) 选项卡。在 “适配器 1” (Adapt…

【Mysql】索引

【Mysql】索引 一、索引的简介二、索引结构2.1 Hash2.2 二叉搜索树2.3 B树2.4 B树 三、索引分类3.1 主键索引3.2 普通索引3.3 唯一索引3.4 全文索引3.5 聚集索引3.6 非聚集索引3.7 索引覆盖 四、使用索引4.1 自动创建索引4.2 手动创建索引4.2.1 主键索引4.2.2 唯一索引4.2.3 普…

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境&#xff1a;Ubuntu-18.04.5编译版本&#xff1a;android13-release下载地址&#xff1a;清华大学开源软件镜像站AOSP # 下载repo # 同步代码&#xff1a;repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

UE5 Niagara 粒子远处闪烁解决

在UE5.2中使用Niagara粒子系统制作水特效时&#xff0c;远处出现粒子闪烁的问题&#xff0c;通常由渲染精度、深度冲突或LOD设置引起 .效果如下&#xff1a; 处理深度缓冲冲突&#xff08;Z-Fighting&#xff09; 问题原因&#xff1a;粒子与场景几何体深度值重叠导致闪烁。 …

机器学习入门实战 4 - 基本模型

&#x1f4cc; 机器学习基本模型项目实战&#xff1a;预测泰坦尼克号乘客的生存概率 &#x1f6a2; 项目背景 1912 年 4 月 15 日&#xff0c;泰坦尼克号在处女航中撞上冰山沉没&#xff0c;船上 2224 名乘客和船员中&#xff0c;仅有约 710 人生还。 哪些因素决定了生还几率&…

电子制造企业数字化转型实战:基于Odoo构建MES平台的深度解决方案

作者背景 拥有8年乙方项目经理经验、8年甲方信息化管理经验&#xff0c;主导过12个Odoo制造业项目落地&#xff0c;服务客户涵盖消费电子、汽车电子、工业设备等领域。本文基于华东某电子企业&#xff08;以下简称"A公司"&#xff09;的实战案例&#xff0c;解析行业…