首页 > 系统相关 >Java工程师必学的Linux知识点

Java工程师必学的Linux知识点

时间:2025-01-09 21:33:23浏览次数:3  
标签:知识点 sudo file 示例 必学 文件 install Linux 日志

一、Linux基础知识

1. Linux概述

1.1 Linux发行版

Linux发行版(Distributions)是基于Linux内核构建的操作系统,通常包含内核、系统工具、应用软件和包管理器。常见的发行版包括:

  • CentOS:企业级发行版,基于Red Hat Enterprise Linux(RHEL),稳定性高,常用于服务器环境。
  • Ubuntu:用户友好,社区支持活跃,适合开发和桌面环境,也广泛用于服务器。
  • Debian:以稳定性著称,是许多其他发行版(如Ubuntu)的基础。
  • Fedora:由Red Hat支持,包含最新的软件和技术,适合开发者和技术爱好者。
  • Arch Linux:滚动更新,极高的可定制性,适合高级用户。

1.2 文件系统结构

Linux的文件系统是一个单一的层次结构,从根目录(/)开始,包含多个子目录,每个目录有特定的用途。

  • /:根目录,文件系统的起点。
  • /home:用户主目录,存放各用户的个人文件和配置。
  • /var:可变数据文件,如日志、缓存、邮件等。
  • /etc:系统配置文件目录,存放各种系统和应用程序的配置文件。
  • /usr:用户相关的程序和数据,包含二进制文件、库文件、文档等。
  • /bin:基本命令二进制文件,系统启动和修复所需的命令。
  • /sbin:系统管理员使用的二进制文件,包含系统维护工具。
  • /tmp:临时文件存放目录。
  • /dev:设备文件目录,表示系统中的硬件设备。
  • /proc:虚拟文件系统,提供内核和进程信息。
  • /mnt和**/media**:挂载点,临时挂载文件系统和设备。

2. 基本命令

2.1 文件和目录操作

  • ls:列出目录内容。
    • 常用选项:
      • ls -l:长格式显示,包含权限、所有者、大小、修改时间等信息。
      • ls -a:显示所有文件,包括隐藏文件(以.开头)。
      • ls -lh:以人类可读的格式显示文件大小。
  • cd:更改当前目录。
    • 示例:
      • cd /home/user:进入/home/user目录。
      • cd ..:返回上一级目录。
      • cd ~:进入当前用户的主目录。
  • cp:复制文件或目录。
    • 基本用法:
      • 复制文件:cp source.txt destination.txt
      • 复制目录:cp -r source_dir/ destination_dir/
  • mv:移动或重命名文件或目录。
    • 示例:
      • 移动文件:mv file.txt /path/to/destination/
      • 重命名文件:mv oldname.txt newname.txt
  • rm:删除文件或目录。
    • 基本用法:
      • 删除文件:rm file.txt
      • 删除目录及其内容:rm -r directory/
      • 强制删除:rm -f file.txt
  • mkdir:创建新目录。
    • 示例:
      • 创建单个目录:mkdir new_directory
      • 创建多级目录:mkdir -p parent/child/grandchild
  • rmdir:删除空目录。
    • 示例:
      • 删除单个空目录:rmdir empty_directory

2.2 查看和编辑文件

  • cat:连接并显示文件内容。
    • 示例:cat file.txt
  • less:分页查看文件内容,支持向前和向后浏览。
    • 示例:less file.txt
  • more:分页查看文件内容,仅支持向前浏览。
    • 示例:more file.txt
  • head:显示文件开头部分内容,默认前10行。
    • 示例:head file.txthead -n 20 file.txt(显示前20行)
  • tail:显示文件末尾部分内容,默认后10行。
    • 示例:tail file.txttail -n 20 file.txt(显示后20行)
  • vi/vim:强大的文本编辑器,适用于编辑配置文件和代码。
    • 基本用法:
      • 打开文件:vim file.txt
      • 插入模式:按i键进入插入模式,编辑内容。
      • 保存并退出:在命令模式下输入:wq
      • 退出不保存:输入:q!
  • nano:简单易用的文本编辑器,适合初学者。
    • 基本用法:
      • 打开文件:nano file.txt
      • 保存文件:按Ctrl + O,然后按Enter
      • 退出:按Ctrl + X

2.3 权限管理

  • chmod:更改文件或目录的权限。
    • 基本语法:chmod [选项] 模式 文件
    • 示例:
      • 赋予所有者执行权限:chmod u+x script.sh
      • 设置权限为755:chmod 755 file
      • 递归更改目录权限:chmod -R 755 directory/
  • chown:更改文件或目录的所有者和所属组。
    • 基本语法:chown [选项] 用户[:组] 文件
    • 示例:
      • 更改所有者:chown user file.txt
      • 更改所有者和组:chown user:group file.txt
      • 递归更改目录所有者:chown -R user:group directory/
  • chgrp:更改文件或目录的所属组。
    • 基本语法:chgrp [选项] 组 文件
    • 示例:
      • 更改所属组:chgrp group file.txt
      • 递归更改目录所属组:chgrp -R group directory/

2.4 压缩与解压

  • tar:用于打包和解包文件。
    • 常用选项:
      • 创建压缩包:tar -cvf archive.tar directory/
      • 解压压缩包:tar -xvf archive.tar
      • 创建gzip压缩包:tar -czvf archive.tar.gz directory/
      • 解压gzip压缩包:tar -xzvf archive.tar.gz
  • gzip:用于压缩文件,生成.gz文件。
    • 压缩文件:gzip file.txt(生成file.txt.gz
    • 解压文件:gzip -d file.txt.gzgunzip file.txt.gz
  • unzip:用于解压.zip文件。
    • 解压文件:unzip archive.zip
    • 指定解压目录:unzip archive.zip -d /path/to/destination/

二、用户与权限管理

1. 用户和组

1.1 添加、删除用户和组

  • useradd:添加新用户。
    • 基本语法:useradd [选项] 用户名
    • 示例:
      • 创建用户并指定主目录:useradd -m -d /home/newuser newuser
      • 创建用户并指定默认shell:useradd -s /bin/bash newuser
  • userdel:删除用户。
    • 基本语法:userdel [选项] 用户名
    • 示例:
      • 删除用户但保留主目录:userdel newuser
      • 删除用户并删除主目录:userdel -r newuser
  • groupadd:添加新组。
    • 基本语法:groupadd [选项] 组名
    • 示例:groupadd developers
  • groupdel:删除组。
    • 基本语法:groupdel 组名
    • 示例:groupdel developers

1.2 修改用户和组信息

  • usermod:修改现有用户的属性。
    • 基本语法:usermod [选项] 用户名
    • 示例:
      • 更改用户所属组:usermod -g newgroup user
      • 添加用户到附加组:usermod -aG supplementarygroup user
      • 更改用户主目录:usermod -d /new/home user
  • groupmod:修改现有组的属性。
    • 基本语法:groupmod [选项] 组名
    • 示例:
      • 更改组名:groupmod -n newgroup oldgroup

2. 权限控制

2.1 文件权限

Linux中的每个文件和目录都有权限设置,分为所有者(User)、所属组(Group)和其他用户(Others),权限类型包括:

  • 读(r):查看文件内容或列出目录内容。
  • 写(w):修改文件内容或添加、删除目录中的文件。
  • 执行(x):执行文件或访问目录。
查看权限

使用ls -l命令查看文件权限。例如:

-rwxr-xr-- 1 user group 1234 Jan 1 12:34 file.txt

解释:

  • -:文件类型(-表示普通文件,d表示目录)。
  • rwx:所有者权限(读、写、执行)。
  • r-x:所属组权限(读、执行)。
  • r--:其他用户权限(读)。
修改权限

使用chmod命令修改权限,例如:

  • 赋予所有者执行权限:chmod u+x file.txt
  • 移除其他用户的写权限:chmod o-w file.txt
  • 设置权限为755:chmod 755 file.txt

2.2 特殊权限

  • SUID(Set User ID)
    • 当设置在可执行文件上时,程序以文件所有者的权限运行,而不是执行者的权限。
    • 设置方法:chmod u+s file
    • 示例:chmod u+s /usr/bin/passwd
  • SGID(Set Group ID)
    • 对文件:类似于SUID,但程序以文件所属组的权限运行。
    • 对目录:新创建的文件继承目录的组,而不是创建者的组。
    • 设置方法:chmod g+s directory/
    • 示例:chmod g+s /var/www
  • Sticky Bit
    • 主要用于目录,只有文件的所有者或超级用户可以删除或重命名该目录下的文件。
    • 常用于/tmp目录。
    • 设置方法:chmod +t directory/
    • 示例:chmod +t /tmp

2.3 sudo权限配置

sudo允许用户以超级用户或其他用户的身份运行命令,而无需切换用户。

  • 配置sudo权限

    • 编辑/etc/sudoers文件,推荐使用visudo命令以防止语法错误。

    • 示例:

      user ALL=(ALL) ALL
      

      这表示

      user
      

      可以在所有主机上以所有用户身份执行所有命令。

  • 常用sudo命令

    • 以超级用户身份执行命令:sudo command
    • 切换到超级用户:sudo -isudo su -
  • 限制sudo权限

    • 只允许执行特定命令,例如:

      user ALL=(ALL) /usr/bin/systemctl, /usr/bin/journalctl
      

      这表示

      user
      

      只能执行

      systemctl
      

      journalctl
      

      命令。


三、进程与作业管理

1. 进程管理

1.1 查看进程

  • ps:显示当前系统的进程信息。
    • 常用选项:
      • ps aux:显示所有用户的所有进程,包括详细信息。
      • ps -ef:与ps aux类似,显示全格式输出。
  • top:实时显示系统中进程的动态信息,默认每3秒刷新一次。
    • 常用操作:
      • q退出。
      • k杀死进程。
      • M按内存使用排序。
      • P按CPU使用排序。
  • htoptop的增强版,提供彩色显示和更友好的交互界面。
    • 安装:sudo apt install htopsudo yum install htop
    • 启动:输入htop
    • 常用操作:
      • 使用箭头键导航。
      • F9杀死进程。
      • F10退出。

1.2 管理进程

  • kill:发送信号给指定PID的进程。
    • 基本语法:kill [信号] PID
    • 常用信号:
      • -SIGTERM(15):请求进程终止,允许清理。
      • -SIGKILL(9):强制终止进程,不允许清理。
    • 示例:
      • 终止进程:kill 1234
      • 强制终止进程:kill -9 1234
  • pkill:根据进程名称发送信号。
    • 基本语法:pkill [选项] 进程名
    • 示例:
      • 终止所有java进程:pkill java
      • 发送特定信号:pkill -9 java
  • killall:根据进程名称终止所有匹配的进程。
    • 基本语法:killall [选项] 进程名
    • 示例:
      • 终止所有nginx进程:killall nginx
      • 发送特定信号:killall -9 nginx

2. 作业控制

2.1 前台与后台作业

  • 在后台运行命令

    • 使用&符号将命令放到后台运行。
    • 示例:./long_running_task.sh &
  • 将后台作业移到后台

    • 使用bg命令继续在后台运行被暂停的作业。

    • 示例:

      Ctrl + Z
      bg
      
  • 将后台作业移到前台

    • 使用fg命令将作业带到前台。
    • 示例:fg %1(将第一个作业带到前台)

2.2 作业列表与控制

  • jobs:列出当前用户的作业。

    • 示例:

      [1]+  Running                 ./long_running_task.sh &
      [2]-  Stopped                 nano file.txt
      
  • nohup:忽略挂起信号,使命令在退出终端后继续运行。

    • 基本语法:nohup command &
    • 示例:nohup ./long_running_task.sh &
  • disown:将作业从当前shell中移除,防止其收到挂起信号。

    • 基本语法:disown [选项] [作业编号]

    • 示例:

      ./long_running_task.sh &
      disown %1
      

四、网络管理

1. 基础网络命令

1.1 查看网络配置

  • ifconfig:显示或配置网络接口信息。
    • 示例:ifconfig
    • 注意:在某些现代发行版中,ifconfig已被弃用,推荐使用ip命令。
  • ip:强大的网络配置和管理工具。
    • 查看所有接口:ip addr
    • 查看路由表:ip route
    • 查看接口状态:ip link
  • netstat:显示网络连接、路由表、接口统计等信息。
    • 示例:
      • 查看所有连接:netstat -a
      • 查看监听端口:netstat -tuln
  • ss:用于调查套接字统计信息,功能类似于netstat,但更快更详细。
    • 示例:
      • 查看所有TCP连接:ss -t
      • 查看所有监听端口:ss -tuln

1.2 测试网络连通性

  • ping:测试与目标主机的网络连通性。
    • 示例:ping www.google.com
    • 常用选项:
      • -c:指定发送的包数,例如ping -c 4 www.google.com
  • traceroute:跟踪数据包到目标主机的路由路径。
    • 示例:traceroute www.google.com
  • telnet:测试TCP端口连通性,常用于调试服务。
    • 示例:telnet www.google.com 80
  • nc(netcat):强大的网络工具,支持多种网络操作。
    • 示例:
      • 测试端口连通性:nc -zv www.google.com 80
      • 监听端口:nc -l 1234

2. 端口管理

2.1 查看开放端口

  • netstat
    • 查看所有监听端口:netstat -tuln
    • 解释:
      • -t:TCP
      • -u:UDP
      • -l:监听状态
      • -n:显示数字形式的地址和端口
  • lsof:列出打开的文件,包括网络端口。
    • 查看所有监听端口:lsof -i -P -n | grep LISTEN
  • ss
    • 查看所有监听端口:ss -tuln

2.2 管理端口

  • firewalld:动态管理防火墙,支持区域和服务的配置。
    • 常用命令:
      • 查看当前防火墙状态:sudo firewall-cmd --state
      • 查看开放的端口:sudo firewall-cmd --list-ports
      • 开放端口:sudo firewall-cmd --permanent --add-port=8080/tcp,然后sudo firewall-cmd --reload
      • 关闭端口:sudo firewall-cmd --permanent --remove-port=8080/tcp,然后sudo firewall-cmd --reload
  • iptables:底层防火墙工具,灵活但配置复杂。
    • 查看规则:sudo iptables -L -n -v
    • 添加规则:sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    • 保存规则(根据发行版不同):
      • CentOS/RHEL:sudo service iptables save
      • Debian/Ubuntu:sudo iptables-save > /etc/iptables/rules.v4

五、Shell脚本与自动化

1. Shell基础

1.1 Shell类型

  • Bash(Bourne Again Shell):最常用的Shell,功能强大,适用于大多数Linux发行版。
  • Zsh(Z Shell):功能更丰富,支持更高级的特性,如更好的自动补全和主题。
  • 其他Shell:如sh(Bourne Shell)、csh(C Shell)、fish等。

1.2 基本语法

  • 变量

    • 定义变量:VAR_NAME=value

    • 使用变量:echo $VAR_NAME

    • 示例:

      NAME="John"
      echo "Hello, $NAME!"
      
  • 条件语句

    • if-else:

      if [ condition ]; then
        # commands
      elif [ condition ]; then
        # commands
      else
        # commands
      fi
      
    • 示例:

      if [ -f "/etc/passwd" ]; then
        echo "File exists."
      else
        echo "File does not exist."
      fi
      
  • 循环

    • for循环:

      for i in {1..5}; do
        echo "Number $i"
      done
      
    • while循环:

      count=1
      while [ $count -le 5 ]; do
        echo "Count $count"
        count=$((count + 1))
      done
      
  • 函数

    function greet() {
      echo "Hello, $1!"
    }
    
    greet "Alice"
    

2. 脚本编写

2.1 编写和执行脚本

  • 创建脚本文件

    • 使用编辑器(如vimnano)创建脚本文件,例如script.sh
    • 添加Shebang行:#!/bin/bash(指定脚本解释器)。
  • 示例脚本

    #!/bin/bash
    
    echo "Starting backup..."
    
    tar -czvf backup.tar.gz /home/user/data
    
    echo "Backup completed."
    
  • 赋予执行权限

    chmod +x script.sh
    
  • 执行脚本

    ./script.sh
    

2.2 脚本调试技巧

  • 使用-x选项调试

    • 在Shebang行添加-x#!/bin/bash -x
    • 或在执行脚本时使用:bash -x script.sh
    • 这将显示脚本执行的每个命令及其参数,便于调试。
  • 使用set命令

    • set -e:在命令失败时立即退出脚本。

    • set -u:在使用未定义变量时退出脚本。

    • 示例:

      #!/bin/bash
      set -eu
      
      echo "Value: $VAR"  # 如果VAR未定义,脚本将退出
      
  • 使用echo输出变量值

    • 在关键位置添加echo语句,查看变量的值和脚本的执行流程。

    • 示例:

      echo "Current directory: $(pwd)"
      

3. 自动化任务

3.1 定时任务

  • cron:基于时间的作业调度工具,适合定期执行任务。

  • crontab:用于管理cron作业的命令。

  • 基本语法

    * * * * * command
    | | | | |
    | | | | └─── 星期几(0-7,0和7表示星期天)
    | | | └────── 月份(1-12)
    | | └──────── 天(1-31)
    | └────────── 小时(0-23)
    └──────────── 分钟(0-59)
    
  • 编辑crontab

    crontab -e
    
  • 示例

    • 每天凌晨2点执行备份脚本:

      0 2 * * * /home/user/backup.sh
      
    • 每小时的第15分钟运行任务:

      15 * * * * /home/user/task.sh
      
  • 查看crontab

    crontab -l
    

3.2 自动化部署脚本

  • 示例部署脚本

    #!/bin/bash
    set -e
    
    echo "Stopping application..."
    systemctl stop myapp
    
    echo "Updating code..."
    git pull origin main
    
    echo "Installing dependencies..."
    mvn clean install -DskipTests
    
    echo "Starting application..."
    systemctl start myapp
    
    echo "Deployment completed successfully."
    
  • 执行部署脚本

    ./deploy.sh
    
  • 使用nohup&运行脚本

    nohup ./deploy.sh > deploy.log 2>&1 &
    

六、包管理与软件安装

1. 包管理工具

1.1 RPM与YUM(CentOS)

  • RPM(Red Hat Package Manager):用于管理RPM格式的软件包。
    • 安装RPM包:sudo rpm -ivh package.rpm
    • 升级RPM包:sudo rpm -Uvh package.rpm
    • 卸载RPM包:sudo rpm -e package_name
  • YUM(Yellowdog Updater Modified):高级包管理工具,自动处理依赖关系。
    • 更新软件包索引:sudo yum update
    • 安装软件包:sudo yum install package_name
    • 卸载软件包:sudo yum remove package_name
    • 搜索软件包:yum search keyword

1.2 APT(Debian/Ubuntu)

  • APT(Advanced Package Tool):高级包管理工具,类似于YUM。

    • 更新软件包索引:sudo apt update
    • 升级已安装的软件包:sudo apt upgrade
    • 安装软件包:sudo apt install package_name
    • 卸载软件包:sudo apt remove package_name
    • 搜索软件包:apt search keyword

2. 编译与安装软件

2.1 使用源码编译

  • 基本步骤

    1. 下载源码:通常从官方网站或Git仓库获取。

      wget http://example.com/software.tar.gz
      tar -xzvf software.tar.gz
      cd software
      
    2. 配置编译选项

      ./configure --prefix=/usr/local
      
      • --prefix指定安装路径,默认通常是/usr/local
    3. 编译源码

      make
      
    4. 安装软件

      sudo make install
      
  • 示例:安装htop工具。

    wget https://hisham.hm/htop/releases/3.0.5/htop-3.0.5.tar.gz
    tar -xzvf htop-3.0.5.tar.gz
    cd htop-3.0.5
    ./configure
    make
    sudo make install
    

2.2 安装常用工具和依赖

  • 常用开发工具

    • gcc:GNU编译器集合。

      • 安装:sudo yum install gccsudo apt install build-essential
    • make:构建自动化工具。

      • 安装:sudo yum install makesudo apt install make
    • git:版本控制工具。

      • 安装:sudo yum install gitsudo apt install git
    • wget

      curl:下载工具。

      • 安装:sudo yum install wget curlsudo apt install wget curl
  • 常用库和依赖

    • OpenSSL:加密库。

      • 安装:sudo yum install openssl-develsudo apt install libssl-dev
    • zlib:数据压缩库。

      • 安装:sudo yum install zlib-develsudo apt install zlib1g-dev

七、日志管理与监控

1. 日志文件

1.1 常见日志目录

  • /var/log

    :主要的日志文件存放目录,包含各种系统和应用程序的日志。

    • /var/log/syslog/var/log/messages:系统日志,记录系统级事件。
    • /var/log/auth.log/var/log/secure:认证和授权日志,记录登录尝试和sudo操作。
    • /var/log/kern.log:内核日志,记录内核相关事件。
    • /var/log/dmesg:内核启动日志。
    • /var/log/httpd//var/log/nginx/:Web服务器日志。
    • /var/log/mysql/:数据库日志。
    • /var/log/cron:定时任务日志。

1.2 查看和分析日志

  • tail:查看文件的末尾部分。

    • 实时查看日志更新:tail -f /var/log/syslog
  • grep:在文件中搜索特定模式。

    • 示例:grep "ERROR" /var/log/app.log
  • awk:文本处理工具,用于格式化和提取数据。

    • 示例:提取日志中的IP地址:

      grep "Failed" /var/log/auth.log | awk '{print $11}'
      
  • less:分页查看日志文件,支持搜索和导航。

    • 示例:less /var/log/syslog

2. 日志轮转

2.1 配置logrotate

logrotate用于管理和轮转日志文件,防止日志文件过大。

  • 配置文件

    • 全局配置:/etc/logrotate.conf
    • 具体服务配置:/etc/logrotate.d/
  • 示例配置

    • /etc/logrotate.d/myapp
      

      /var/log/myapp/*.log {
          daily
          rotate 7
          compress
          missingok
          notifempty
          create 0640 user group
          sharedscripts
          postrotate
              systemctl restart myapp
          endscript
      }
      

      解释:

      • daily:每天轮转。
      • rotate 7:保留7个轮转文件。
      • compress:压缩旧日志。
      • missingok:如果日志文件不存在,忽略错误。
      • notifempty:如果日志为空,不轮转。
      • create:轮转后创建新日志文件,指定权限、所有者和组。
      • postrotate:轮转后执行命令,如重启服务。
  • 手动执行logrotate

    sudo logrotate -f /etc/logrotate.conf
    

3. 系统监控

3.1 资源监控工具

  • tophtop:实时监控系统资源使用情况,包括CPU、内存、进程等。
  • vmstat:报告虚拟内存统计信息。
    • 示例:vmstat 5(每5秒刷新一次)
  • iostat:报告CPU利用率和磁盘I/O统计信息。
    • 示例:iostat -xz 5(显示详细的磁盘统计,每5秒刷新一次)
  • sar(System Activity Reporter):
    • 收集和报告系统活动信息。
    • 安装:sudo yum install sysstatsudo apt install sysstat
    • 启动数据收集:编辑/etc/default/sysstat/etc/sysconfig/sysstat,设置ENABLED="true"
    • 示例:sar -u 5 10(每5秒收集一次,共10次,显示CPU使用率)

3.2 网络监控工具

  • iftop:实时监控网络带宽使用情况。
    • 安装:sudo yum install iftopsudo apt install iftop
    • 启动:sudo iftop
    • 示例:sudo iftop -i eth0(监控eth0接口)
  • netstatss:查看网络连接和套接字信息。
  • nload:实时监控网络流量。
    • 安装:sudo yum install nloadsudo apt install nload
    • 启动:nload

八、性能优化与调优

1. 系统性能调优

1.1 内存、CPU、I/O优化

  • 内存优化

    • 监控内存使用:使用

      free -m
      

      查看内存使用情况。

      free -m
      
    • 交换空间(Swap):

      • 查看交换空间:swapon -sfree -m

      • 增加交换空间:

        sudo fallocate -l 2G /swapfile
        sudo chmod 600 /swapfile
        sudo mkswap /swapfile
        sudo swapon /swapfile
        sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
        
  • CPU优化

    • 监控CPU使用:使用tophtop查看CPU使用情况。

    • 调整进程优先级:

      • 使用nice启动进程:nice -n 10 command
      • 使用renice调整已有进程优先级:sudo renice +5 -p PID
  • I/O优化

    • 监控磁盘I/O:使用iostat查看磁盘I/O性能。

    • 优化文件系统:

      • 使用适合的文件系统(如ext4xfsbtrfs)。
      • 调整挂载选项,如noatime减少磁盘写入。
    • 使用RAID:通过RAID提升磁盘性能和冗余。

1.2 调整系统参数(sysctl)

sysctl用于修改内核参数,可以临时或永久调整系统性能。

  • 查看当前参数

    sysctl -a
    
  • 临时修改参数

    sudo sysctl -w net.ipv4.ip_forward=1
    
  • 永久修改参数

    • 编辑

      /etc/sysctl.conf
      

      /etc/sysctl.d/99-sysctl.conf
      

      ,添加或修改参数。

      net.ipv4.ip_forward = 1
      vm.swappiness = 10
      fs.file-max = 100000
      
    • 应用更改:

      sudo sysctl -p
      
  • 常见性能相关参数

    • 网络性能:

      net.core.somaxconn = 1024
      net.ipv4.tcp_fin_timeout = 15
      net.ipv4.tcp_tw_reuse = 1
      
    • 内存管理:

      vm.swappiness = 10
      vm.vfs_cache_pressure = 50
      
    • 文件描述符:

      fs.file-max = 100000
      

2. JVM优化

2.1 JVM参数配置

  • 堆大小

    • Xms:初始堆大小。
    • Xmx:最大堆大小。
    • 示例:-Xms512m -Xmx2g
  • 垃圾回收器(GC)

    • Serial GC:单线程,适用于小型应用。

      • 参数:-XX:+UseSerialGC
    • Parallel GC:多线程,适用于多核处理器。

      • 参数:-XX:+UseParallelGC
    • CMS GC(Concurrent Mark Sweep):低停顿,适用于需要响应性的应用。

      • 参数:-XX:+UseConcMarkSweepGC
    • G1 GC(Garbage First):适用于大堆和多处理器系统,提供可预测的停顿时间。

      • 参数:-XX:+UseG1GC
  • 其他常用参数

    • 启用GC日志:

      -Xlog:gc*:file=gc.log:time,level,tags
      
    • 启用JMX监控:

      -Dcom.sun.management.jmxremote
      

2.2 性能分析工具

  • jstat:监控JVM的性能统计信息。
    • 示例:监控GC活动:jstat -gc 12345 1000 10
  • jmap:生成堆转储(heap dump)和查看内存分布。
    • 生成堆转储:jmap -dump:live,format=b,file=heapdump.hprof 12345
  • jstack:生成Java线程堆栈跟踪,分析死锁和线程问题。
    • 生成线程堆栈:jstack 12345 > threaddump.txt
  • VisualVM:图形化的JVM监控和分析工具,支持内存、CPU、线程等监控。
    • 启动VisualVM:jvisualvm

九、版本控制与协作工具

1. Git使用

1.1 基本操作

  • 克隆仓库

    git clone https://github.com/user/repo.git
    
  • 查看仓库状态

    git status
    
  • 添加更改到暂存区

    git add file.txt
    git add .  # 添加所有更改
    
  • 提交更改

    git commit -m "Commit message"
    
  • 推送到远程仓库

    git push origin main
    
  • 拉取远程更改

    git pull origin main
    

1.2 分支管理与冲突解决

  • 创建新分支

    git checkout -b feature/new-feature
    
  • 切换分支

    git checkout main
    
  • 合并分支

    git checkout main
    git merge feature/new-feature
    
  • 解决冲突

    • 当合并过程中出现冲突时,Git会提示冲突文件。

    • 手动编辑冲突文件,解决冲突后,添加到暂存区并提交。

      git add conflicted_file.txt
      git commit -m "Resolve merge conflict in conflicted_file.txt"
      
  • 删除分支

    git branch -d feature/new-feature
    

2. 其他工具

2.1 Maven/Gradle在Linux环境下的使用

  • Maven

    • 安装:

      sudo apt install maven  # Debian/Ubuntu
      sudo yum install maven  # CentOS/RHEL
      
    • 基本命令:

      • 编译项目:mvn compile
      • 打包项目:mvn package
      • 运行测试:mvn test
      • 安装到本地仓库:mvn install
  • Gradle

    • 安装:

      sudo apt install gradle  # Debian/Ubuntu
      sudo yum install gradle  # CentOS/RHEL
      
    • 基本命令:

      • 编译项目:gradle build
      • 运行任务:gradle <task>
      • 清理构建:gradle clean

2.2 CI/CD工具(Jenkins, GitLab CI)

  • Jenkins

    • 安装:

      sudo apt update
      sudo apt install openjdk-11-jdk
      wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
      sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
      sudo apt update
      sudo apt install jenkins
      sudo systemctl start jenkins
      sudo systemctl enable jenkins
      
    • 基本使用:

      • 访问Jenkins:http://your_server_ip:8080
      • 解锁Jenkins:查看初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
      • 安装推荐插件,创建管理员用户。
      • 配置Jenkins任务,设置构建步骤和触发器。
  • GitLab CI

    • 基本概念:

      • GitLab CI集成在GitLab中,通过.gitlab-ci.yml文件定义CI/CD流程。
    • 示例.gitlab-ci.yml

      stages:
        - build
        - test
        - deploy
      
      build_job:
        stage: build
        script:
          - mvn compile
      
      test_job:
        stage: test
        script:
          - mvn test
      
      deploy_job:
        stage: deploy
        script:
          - ./deploy.sh
        only:
          - main
      
    • 使用步骤:

      • 在项目根目录创建.gitlab-ci.yml文件。
      • 提交并推送到GitLab仓库,GitLab会自动触发CI/CD流程。

十、容器化与虚拟化基础

1. Docker基础

1.1 容器管理

  • 安装Docker

    • 在Ubuntu上安装:

      sudo apt update
      sudo apt install apt-transport-https ca-certificates curl software-properties-common
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
      sudo apt update
      sudo apt install docker-ce
      sudo systemctl start docker
      sudo systemctl enable docker
      
    • 在CentOS上安装:

      sudo yum install -y yum-utils
      sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      sudo yum install docker-ce
      sudo systemctl start docker
      sudo systemctl enable docker
      
  • 常用容器管理命令

    • 运行容器:

      docker run -d --name mycontainer nginx
      
    • 查看运行中的容器:

      docker ps
      
    • 停止容器:

      docker stop mycontainer
      
    • 启动容器:

      docker start mycontainer
      
    • 删除容器:

      docker rm mycontainer
      

1.2 镜像管理

  • 构建镜像

    • 创建

      Dockerfile
      

      FROM openjdk:11-jre
      COPY target/myapp.jar /app/myapp.jar
      CMD ["java", "-jar", "/app/myapp.jar"]
      
    • 构建镜像:

      docker build -t myapp:latest .
      
  • 拉取镜像

    docker pull ubuntu:20.04
    
  • 推送镜像

    • 登录Docker Hub:

      docker login
      
    • 标记镜像:

      docker tag myapp:latest yourdockerhubusername/myapp:latest
      
    • 推送镜像:

      docker push yourdockerhubusername/myapp:latest
      

2. 容器编排

2.1 基本概念

  • Docker Compose

    • 用于定义和运行多容器Docker应用,使用docker-compose.yml文件描述服务、网络和卷。

    • 安装:

      sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      sudo chmod +x /usr/local/bin/docker-compose
      
    • 示例docker-compose.yml

      version: '3'
      services:
        web:
          image: nginx
          ports:
            - "80:80"
        db:
          image: mysql:5.7
          environment:
            MYSQL_ROOT_PASSWORD: password
      
    • 使用命令:

      • 启动服务:docker-compose up -d
      • 查看状态:docker-compose ps
      • 停止服务:docker-compose down
  • Kubernetes简介

    • Kubernetes是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用。

    • 主要组件:

      • Master节点:管理集群状态,包含API Server、Scheduler、Controller Manager等。
      • Worker节点:运行容器,包含Kubelet、Kube-proxy等。
      • Pod:Kubernetes中最小的部署单元,一个Pod可以包含一个或多个容器。
      • Service:定义一组Pod的访问策略,提供负载均衡。
      • Deployment:管理Pod的副本和更新。
    • 安装:通常使用kubeadmminikube等工具在本地或服务器上安装Kubernetes集群。


十一、安全基础

1. SSH管理

1.1 配置SSH密钥

  • 生成SSH密钥对

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    
    • 按提示设置密钥文件路径和密码。
  • 将公钥复制到远程服务器

    ssh-copy-id user@remote_server
    
    • 或手动复制~/.ssh/id_rsa.pub内容到远程服务器的~/.ssh/authorized_keys文件中。
  • 使用SSH密钥登录

    ssh user@remote_server
    

1.2 安全配置

  • 禁用root登录

    • 编辑

      /etc/ssh/sshd_config
      

      文件,修改或添加以下行:

      PermitRootLogin no
      
    • 重启SSH服务:

      sudo systemctl restart sshd
      
  • 修改默认SSH端口

    • 编辑

      /etc/ssh/sshd_config
      

      文件,修改

      Port
      

      参数,例如:

      Port 2222
      
    • 确保防火墙允许新端口:

      sudo firewall-cmd --permanent --add-port=2222/tcp
      sudo firewall-cmd --reload
      
    • 重启SSH服务:

      sudo systemctl restart sshd
      
  • 限制用户登录

    • /etc/ssh/sshd_config
      

      中添加:

      AllowUsers user1 user2
      
    • 这将只允许user1user2通过SSH登录。

2. 防火墙配置

2.1 基本防火墙规则设置

  • firewalld(CentOS/RHEL):

    • 查看当前区域:sudo firewall-cmd --get-active-zones

    • 查看开放的服务和端口:sudo firewall-cmd --list-all

    • 开放端口:

      sudo firewall-cmd --permanent --add-port=8080/tcp
      sudo firewall-cmd --reload
      
    • 关闭端口:

      sudo firewall-cmd --permanent --remove-port=8080/tcp
      sudo firewall-cmd --reload
      
  • ufw(Ubuntu):

    • 启用ufw:sudo ufw enable

    • 查看状态:sudo ufw status

    • 开放端口:

      sudo ufw allow 8080/tcp
      
    • 关闭端口:

      sudo ufw deny 8080/tcp
      

2.2 常见端口安全配置

  • SSH端口
    • 如果修改了SSH端口,确保防火墙开放新端口。
    • 关闭默认SSH端口(22),仅开放新端口。
  • Web服务器端口
    • 确保仅开放必要的端口,如HTTP(80)和HTTPS(443)。
    • 关闭不必要的管理端口。
  • 数据库端口
    • 限制数据库端口(如3306)只允许本地访问或特定IP访问。
  • 使用端口转发和NAT
    • 配置防火墙进行端口转发,增强安全性。

十二、备份与恢复

1. 数据备份

1.1 使用tar、rsync进行备份

  • 使用tar进行备份

    • 创建压缩备份:

      tar -czvf backup.tar.gz /path/to/directory
      
    • 增量备份:

      tar -czvf backup.tar.gz --newer-mtime='2023-01-01' /path/to/directory
      
  • 使用rsync进行备份

    • 基本语法:

      rsync -av --delete /source/directory/ /destination/directory/
      
    • 示例:

      rsync -avz /home/user/data/ /mnt/backup/data/
      
    • 解释:

      • -a:归档模式,保持文件权限、符号链接等。
      • -v:详细输出。
      • -z:压缩传输数据。
      • --delete:删除目标目录中源目录不存在的文件。

1.2 定期备份策略

  • 全备份:备份所有数据,耗时较长,存储需求大。

  • 增量备份:仅备份自上次备份以来发生更改的数据,节省存储和时间。

  • 差异备份:备份自上次全备份以来发生更改的数据。

  • 示例定期备份任务

    • 使用

      cron
      

      设置每日备份:

      0 2 * * * tar -czvf /backup/daily_backup_$(date +\%F).tar.gz /home/user/data
      
    • 使用

      rsync
      

      设置每小时同步:

      0 * * * * rsync -avz /home/user/data/ /mnt/backup/data/
      

2. 数据恢复

2.1 恢复备份数据的方法

  • 使用tar恢复备份

    tar -xzvf backup.tar.gz -C /path/to/restore/
    
  • 使用rsync恢复备份

    rsync -avz /mnt/backup/data/ /home/user/data/
    

2.2 灾难恢复计划

  • 制定恢复策略
    • 确定关键数据和系统。
    • 定义备份频率和保留策略。
    • 制定恢复步骤和责任人。
  • 测试恢复过程
    • 定期进行恢复演练,确保备份数据可用且恢复过程顺利。
  • 使用备份工具和服务
    • 使用自动化备份工具,如BaculaAmanda
    • 采用云备份服务,如AWS S3、Google Cloud Storage。

十三、常见问题排查

1. 系统启动与服务管理

1.1 使用systemd管理服务

systemd是现代Linux发行版的初始化系统和服务管理器。

  • 启动服务

    sudo systemctl start service_name
    
  • 停止服务

    sudo systemctl stop service_name
    
  • 重启服务

    sudo systemctl restart service_name
    
  • 重新加载服务配置

    sudo systemctl reload service_name
    
  • 启用服务开机自启

    sudo systemctl enable service_name
    
  • 禁用服务开机自启

    sudo systemctl disable service_name
    
  • 查看服务状态

    sudo systemctl status service_name
    
  • 查看所有服务

    systemctl list-unit-files --type=service
    

1.2 启动过程排查

  • 查看启动日志

    sudo journalctl -b
    
    • -b选项显示当前启动过程的日志。
    • 使用-p过滤日志级别,例如sudo journalctl -b -p err显示错误级别日志。
  • 分析启动失败的服务

    • 使用systemctl status service_name查看具体服务的错误信息。
    • 检查相关的日志文件,如/var/log/syslog/var/log/messages

2. 故障排查

2.1 常见故障及解决方案

  • 服务无法启动
    • 查看服务状态和日志,确认错误原因。
    • 检查配置文件是否正确,必要时恢复默认配置。
    • 确认依赖的服务是否已启动。
  • 网络连接问题
    • 使用ping测试连通性。
    • 检查防火墙设置,确保必要端口开放。
    • 使用netstatss查看端口是否被监听。
  • 磁盘空间不足
    • 使用df -h查看磁盘使用情况。
    • 清理不必要的文件或日志,使用du -sh *查找大文件。
  • 高CPU或内存使用
    • 使用tophtop识别高资源消耗的进程。
    • 分析应用程序的性能,优化代码或配置。

2.2 使用日志和监控工具进行诊断

  • 日志分析

    • 识别错误或异常事件,使用grep过滤相关日志。
    • 使用awksed等工具提取和格式化日志信息。
  • 监控工具

    • Prometheus:开源监控和警报系统,适用于收集和查询时间序列数据。
    • Grafana:开源数据可视化平台,常与Prometheus配合使用。
    • Nagios:老牌监控工具,支持广泛的插件和警报机制。
  • 示例诊断流程

    1. 确认问题:用户报告无法访问应用。

    2. 检查服务状态:

      sudo systemctl status myapp
      
    3. 查看服务日志:

      sudo journalctl -u myapp -f
      
    4. 检查网络配置:

      sudo firewall-cmd --list-all
      sudo netstat -tuln | grep 8080
      
    5. 分析应用日志:

      tail -f /var/log/myapp/app.log
      
    6. 执行进一步诊断,如查看数据库连接、依赖服务状态等。

标签:知识点,sudo,file,示例,必学,文件,install,Linux,日志
From: https://blog.csdn.net/print_helloword/article/details/145042719

相关文章

  • 【学习路线】Python基础 详细知识点学习路径(附学习资源)
    其他路线:Python基础>>Python进阶>>Python爬虫>>Python数据分析(数据科学) >>Python 算法(人工智能) >>Python Web开发 >>Python自动化运维 >>符号表解释:可根据知识点前的符号按需选学,并获取知识点描述和学习资源。 必学:核⼼知识点,经常⽤到。建议学:重要知......
  • Linux tee命令详解
    tee命令是一个非常实用的Linux命令,它用于从标准输入读取数据,并将这些数据同时输出到标准输出和一个或多个文件中。这个命令的名字来源于管道(pipe)的概念,就像一个T型接头一样,将数据分流到多个方向。基本语法tee[选项][文件...]常用选项-a:追加模式。默认情况下,tee会覆盖文件......
  • linux网桥(Linux Bridge)的一些个人记录
    目录1.LinuxBridge简述2.网桥创建创建配置持久化在Debian/Ubuntu系统上:在CentOS/RHEL系统上:启用和验证3.关于linux网桥不转发ip帧的问题原因解决配置持久化4.查看网桥学习交换表手动添加或删除条目添加条目删除条目配置静态条目设置条目的老化时间持久化配置5.关于linux网桥......
  • Linux 运维必备 150 个命令汇总
    本文章盘点了Linux运维必备150个命令,可配合Linuxcool网站使用。线上查询及帮助命令man:全拼manual,用来查看系统中自带的各种参考手册。help:用于显示shell内部命令的帮助信息。文件和目录操作命令ls:全拼list,列出目录的内容及其内容属性信息。cd:全拼changedirectory,切换当......
  • Rocky Linux 9.5 安装 MySQL 8.0
    RockyLinux9.5安装MySQL8.0RockyLinux9.5 [root@netkiller~]#dnfinstall-ymysql-server[root@netkiller~]#systemctlenablemysqldCreatedsymlink/etc/systemd/system/multi-user.target.wants/mysqld.service→/usr/lib/systemd/system/mysqld.ser......
  • linux kernel bind()时发生了什么
    配置实验一下,我有两个口lo和enp0s3,两个地址,如下所示。 真实物理口测试访问同子网的10.0.2.2如果没有地址,返回:Cannotassignrequestedaddress,说明bind失败了。 lo口测试访问loopback地址127.0.0.1如果没有地址,返回:Cannotassignrequestedaddress,说明bind失败了......
  • Linux移植touchpad驱动
    项目场景:    更换触摸屏,移植别的厂家触摸屏驱动。解决方案:解压厂家驱动到/drivers/input/touchscreen/文件夹。修改本层目录内的Makefile,添加代码obj-y+=XXX/,XXX是刚解压好的文件名。如果存在Kconfig,需要在里面source加压文件的Kconfig,没有则继续,实际上此步骤......
  • linux8安装oracle 11g遇到的问题记录
    大家都知道oracle11g在linux6或7上安装是没有问题的,但在linux8上安装时在link编译环节会遇见各种问题。按照oracle官网的说法,可直接跳过这些错误,等他安装完毕,然后打补丁,再重新编译即可。官网给出的方案1、InstallOracleDatabase11.2.0.4(softwareonly):Note:Ignoreany......
  • linux 手动释放内存
    在Linux系统中,内存管理通常由系统自动处理,但在某些情况下,手动释放内存可能是必要的。例如,当业务应用比较繁忙时会频繁存取文件,物理内存会被缓存大量占用,有时会出现内存不足的情况发生,甚至会导致系统性能下降。此时可主动在业务闲时手动释放内存。一、首先查看当前内存使用情况......
  • 使用Rocky Linux 快速部署虚拟化环境,浏览器访问,开源免费
    正常安装一个最小化的RockyLinux,然后执行下面的命令#设置阿里云的yum源sed-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'\-i.bak\/etc/yum.repos.d/Rock......