[Linux服务器] Linux:详细学习笔记

106 0
Honkers 昨天 16:48 来自手机 | 显示全部楼层 |阅读模式

目录

  • Linux简介
  • Linux发行版
  • Linux安装
  • Linux目录结构
  • 基础命令
  • 文件和目录操作
  • 文本处理
  • 进程管理
  • 用户和权限管理
  • 网络管理
  • 系统监控
  • 软件包管理
  • 系统服务管理
  • Shell编程基础
  • 系统安全
  • 日志管理
  • 备份和恢复
  • 性能优化
  • 故障排除
  • 进阶技巧

Linux简介

什么是Linux
Linux是一个开源的类Unix操作系统内核,由芬兰计算机科学家林纳斯·托瓦兹(Linus Torvalds)于1991年创建。Linux不仅仅是一个内核,通常指的是基于Linux内核的完整操作系统。

Linux的特点
开源免费:源代码完全开放,任何人都可以查看、修改和分发
多用户多任务:支持多个用户同时使用,可以同时运行多个程序
稳定性强:系统运行稳定,很少出现崩溃
安全性高:具有完善的权限管理机制
可移植性好:可以运行在各种硬件平台上
网络功能强大:内置丰富的网络功能

Linux的应用领域
服务器操作系统
嵌入式系统
超级计算机
移动设备(Android)
云计算平台
容器技术

Linux发行版

主要发行版分类
Red Hat系列
Red Hat Enterprise Linux (RHEL):企业级发行版
CentOS:基于RHEL的免费版本
Fedora:Red Hat的社区版本

Debian系列
Debian:稳定性著称的发行版
Ubuntu:基于Debian的用户友好版本
Linux Mint:基于Ubuntu的桌面发行版

SUSE系列
SUSE Linux Enterprise:企业级发行版
openSUSE:社区版本

Arch系列
Arch Linux:滚动更新的发行版
Manjaro:基于Arch的用户友好版本

如何选择发行版
初学者:Ubuntu、Linux Mint
服务器:CentOS、Ubuntu Server、Debian
开发者:Fedora、Ubuntu
高级用户:Arch Linux、Gentoo

Linux安装

安装前准备
硬件要求检查
CPU:x86_64架构
内存:至少2GB(推荐4GB以上)
硬盘:至少20GB空间

制作安装介质
下载ISO镜像文件
制作USB启动盘或刻录DVD

安装过程(以Ubuntu为例)
1、启动安装程序

2、选择语言和键盘布局

3、连接网络

4、选择安装类型
全新安装
双系统安装
其他选项(自定义分区)

5、磁盘分区
根分区(/):15GB以上
交换分区(swap):内存大小的1-2倍
家目录分区(/home):剩余空间

6、创建用户账户

7、完成安装

虚拟机安装
推荐使用VirtualBox或VMware进行虚拟机安装:

  1. # VirtualBox安装命令(Ubuntu)
  2. sudo apt update
  3. sudo apt install virtualbox
复制代码

Linux目录结构

根目录结构

  1. /
  2. ├── bin/ # 基本命令二进制文件
  3. ├── boot/ # 启动文件
  4. ├── dev/ # 设备文件
  5. ├── etc/ # 系统配置文件
  6. ├── home/ # 用户主目录
  7. ├── lib/ # 库文件
  8. ├── media/ # 可移动媒体挂载点
  9. ├── mnt/ # 临时挂载点
  10. ├── opt/ # 可选软件包
  11. ├── proc/ # 进程和系统信息
  12. ├── root/ # root用户主目录
  13. ├── sbin/ # 系统管理命令
  14. ├── tmp/ # 临时文件
  15. ├── usr/ # 用户程序
  16. └── var/ # 可变数据
复制代码

重要目录详解
/bin:存放常用命令,如ls、cp、mv等
/etc:系统配置文件目录
/home:普通用户的主目录
/usr:用户安装的程序和文件
/var:存放经常变化的文件,如日志文件
/tmp:临时文件目录
/proc:虚拟文件系统,显示内核信息

基础命令

文件和目录操作

  1. # 查看当前目录
  2. pwd
  3. # 列出文件和目录
  4. ls # 基本列表
  5. ls -l # 详细信息
  6. ls -la # 包含隐藏文件
  7. ls -lh # 人性化显示文件大小
  8. # 切换目录
  9. cd /path/to/directory # 切换到指定目录
  10. cd ~ # 切换到主目录
  11. cd .. # 返回上级目录
  12. cd - # 返回上次访问的目录
  13. # 创建目录
  14. mkdir dirname # 创建单个目录
  15. mkdir -p path/to/dir # 递归创建目录
  16. # 删除目录
  17. rmdir dirname # 删除空目录
  18. rm -rf dirname # 递归删除目录及内容
复制代码

文件操作

  1. # 创建文件
  2. touch filename # 创建空文件
  3. echo"content" > file # 创建文件并写入内容
  4. # 复制文件
  5. cp source destination # 复制文件
  6. cp -r source dest # 递归复制目录
  7. # 移动/重命名文件
  8. mv oldname newname # 重命名
  9. mv file /path/to/dest # 移动文件
  10. # 删除文件
  11. rm filename # 删除文件
  12. rm -f filename # 强制删除
  13. rm -i filename # 交互式删除
复制代码

查看文件内容

  1. # 查看文件内容
  2. cat filename # 显示全部内容
  3. less filename # 分页显示
  4. more filename # 分页显示(简化版)
  5. head filename # 显示前10行
  6. head -n 20 filename # 显示前20行
  7. tail filename # 显示后10行
  8. tail -f filename # 实时显示文件更新
复制代码

文件和目录操作

文件权限
Linux文件权限分为三类用户:

所有者(u):文件的创建者
所属组(g):文件所属的用户组
其他用户(o):除所有者和所属组外的其他用户

权限类型:

读取(r):4
写入(w):2
执行(x):1

  1. # 查看文件权限
  2. ls -l filename
  3. # 修改文件权限
  4. chmod 755 filename # 数字方式
  5. chmod u+x filename # 符号方式
  6. chmod g-w filename # 移除组写权限
  7. chmod o=r filename # 设置其他用户只读
  8. # 修改文件所有者
  9. chown user:group filename
  10. chown user filename
  11. chgrp group filename
复制代码

文件查找

  1. # find命令
  2. find /path -name "filename" # 按名称查找
  3. find /path -type f # 查找文件
  4. find /path -type d # 查找目录
  5. find /path -size +100M # 查找大于100M的文件
  6. find /path -mtime -7 # 查找7天内修改的文件
  7. # locate命令(需要先更新数据库)
  8. updatedb # 更新数据库
  9. locate filename # 快速查找文件
  10. # which命令
  11. which command # 查找命令的位置
复制代码
  1. 文件链接
  2. # 硬链接
  3. ln source_file hard_link
  4. # 软链接(符号链接)
  5. ln -s source_file soft_link
  6. # 查看链接信息
  7. ls -l link_file
复制代码

文本处理

grep命令

  1. # 基本搜索
  2. grep "pattern" filename # 搜索模式
  3. grep -i "pattern" filename # 忽略大小写
  4. grep -n "pattern" filename # 显示行号
  5. grep -v "pattern" filename # 反向搜索
  6. grep -r "pattern" directory # 递归搜索
  7. # 正则表达式
  8. grep "^start" filename # 搜索以start开头的行
  9. grep "end$" filename # 搜索以end结尾的行
  10. grep "[0-9]" filename # 搜索包含数字的行
复制代码

sed命令

  1. # 替换文本
  2. sed 's/old/new/' filename # 替换每行第一个匹配
  3. sed 's/old/new/g' filename # 替换所有匹配
  4. sed 's/old/new/gi' filename # 替换所有匹配(忽略大小写)
  5. # 删除行
  6. sed '2d' filename # 删除第2行
  7. sed '/pattern/d' filename # 删除包含模式的行
  8. # 插入和追加
  9. sed '2i\new line' filename # 在第2行前插入
  10. sed '2a\new line' filename # 在第2行后追加
复制代码

awk命令

  1. # 基本用法
  2. awk '{print $1}' filename # 打印第一列
  3. awk '{print $1, $3}' filename # 打印第一和第三列
  4. awk '{print NF}' filename # 打印每行的字段数
  5. awk '{print NR, $0}' filename # 打印行号和内容
  6. # 条件处理
  7. awk '$1 > 100' filename # 打印第一列大于100的行
  8. awk '/pattern/ {print $2}' file # 匹配模式并打印第二列
  9. # 计算
  10. awk '{sum += $1} END {print sum}' file # 计算第一列的总和
复制代码

其他文本处理工具

  1. # sort排序
  2. sort filename # 按字典序排序
  3. sort -n filename # 按数字排序
  4. sort -r filename # 反向排序
  5. sort -k2 filename # 按第二列排序
  6. # uniq去重
  7. uniq filename # 去除相邻重复行
  8. sort filename | uniq # 去除所有重复行
  9. uniq -c filename # 统计重复次数
  10. # cut切割
  11. cut -d':' -f1 /etc/passwd # 以:为分隔符,取第一字段
  12. cut -c1-10 filename # 取每行的1-10个字符
  13. # tr替换
  14. tr 'a-z''A-Z' < filename # 转换大小写
  15. tr -d '0-9' < filename # 删除数字
复制代码

进程管理

查看进程

  1. # ps命令
  2. ps # 显示当前终端的进程
  3. ps aux # 显示所有进程详细信息
  4. ps -ef # 显示所有进程完整信息
  5. ps -u username # 显示指定用户的进程
  6. # top命令
  7. top # 实时显示进程信息
  8. htop # 增强版top(需要安装)
  9. # pgrep命令
  10. pgrep process_name # 查找进程ID
  11. pgrep -u username # 查找指定用户的进程
复制代码

进程控制

  1. # 后台运行
  2. command & # 在后台运行命令
  3. nohup command & # 不挂断后台运行
  4. # 进程信号
  5. kill PID # 终止进程(SIGTERM)
  6. kill -9 PID # 强制终止进程(SIGKILL)
  7. kill -STOP PID # 暂停进程
  8. kill -CONT PID # 继续进程
  9. # killall命令
  10. killall process_name # 终止所有同名进程
  11. pkill process_name # 根据名称终止进程
复制代码

作业控制

  1. # 作业管理
  2. jobs # 显示作业列表
  3. bg %1 # 将作业1放到后台
  4. fg %1 # 将作业1放到前台
  5. disown %1 # 分离作业
  6. # 会话管理
  7. screen # 创建新会话
  8. screen -S session_name # 创建命名会话
  9. screen -r session_name # 恢复会话
  10. screen -ls # 列出所有会话
  11. # tmux(推荐)
  12. tmux new -s session_name # 创建新会话
  13. tmux attach -t session_name # 连接会话
  14. tmux list-sessions # 列出会话
复制代码

用户和权限管理

用户管理

  1. # 添加用户
  2. useradd username # 添加用户
  3. useradd -m username # 添加用户并创建主目录
  4. useradd -s /bin/bash username # 指定shell
  5. # 设置密码
  6. passwd username # 设置用户密码
  7. passwd # 修改当前用户密码
  8. # 修改用户
  9. usermod -s /bin/zsh username # 修改用户shell
  10. usermod -G group username # 添加用户到组
  11. usermod -aG group username # 追加用户到组
  12. # 删除用户
  13. userdel username # 删除用户
  14. userdel -r username # 删除用户和主目录
复制代码

组管理

  1. # 添加组
  2. groupadd groupname # 添加组
  3. # 修改组
  4. groupmod -n newname oldname # 重命名组
  5. # 删除组
  6. groupdel groupname # 删除组
  7. # 查看组信息
  8. groups username # 查看用户所属组
  9. id username # 查看用户ID和组ID
复制代码

sudo权限

  1. # 编辑sudo配置
  2. visudo # 安全编辑sudo配置文件
  3. # 添加sudo权限
  4. # 在/etc/sudoers中添加:
  5. username ALL=(ALL:ALL) ALL # 给用户完全sudo权限
  6. %groupname ALL=(ALL:ALL) ALL # 给组完全sudo权限
  7. # 使用sudo
  8. sudo command # 以root权限执行命令
  9. sudo -u username command # 以指定用户权限执行
  10. sudo su - # 切换到root用户
复制代码

文件权限高级操作

  1. # 特殊权限
  2. chmod +s filename # 设置SUID/SGID
  3. chmod +t directory # 设置粘滞位
  4. # ACL权限
  5. setfacl -m u:username:rwx file # 设置用户ACL权限
  6. setfacl -m g:groupname:rx file # 设置组ACL权限
  7. getfacl filename # 查看ACL权限
复制代码

网络管理

网络配置

  1. # 查看网络接口
  2. ip addr show # 显示网络接口信息
  3. ip a # 简化命令
  4. ifconfig # 传统命令(需要安装net-tools)
  5. # 配置网络接口
  6. ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址
  7. ip link set eth0 up # 启用网络接口
  8. ip link set eth0 down # 禁用网络接口
  9. # 路由管理
  10. ip route show # 显示路由表
  11. ip route add default via 192.168.1.1 # 添加默认路由
  12. ip route del 192.168.2.0/24 # 删除路由
复制代码

网络测试

  1. # ping测试
  2. ping hostname # 测试连通性
  3. ping -c 4 hostname # 发送4个包
  4. # 域名解析
  5. nslookup hostname # 查询DNS记录
  6. dig hostname # 详细DNS查询
  7. host hostname # 简单DNS查询
  8. # 端口测试
  9. telnet hostname port # 测试端口连通性
  10. nc -zv hostname port # 使用netcat测试
  11. # 网络连接
  12. netstat -tuln # 显示监听端口
  13. netstat -an # 显示所有连接
  14. ss -tuln # 现代化的netstat替代品
复制代码

防火墙管理

  1. # ufw(Ubuntu)
  2. ufw enable # 启用防火墙
  3. ufw disable # 禁用防火墙
  4. ufw allow 22 # 允许SSH端口
  5. ufw deny 80 # 拒绝HTTP端口
  6. ufw status # 查看防火墙状态
  7. # firewalld(CentOS/RHEL)
  8. systemctl start firewalld # 启动防火墙
  9. firewall-cmd --list-all # 查看所有规则
  10. firewall-cmd --add-port=80/tcp --permanent # 添加端口规则
  11. firewall-cmd --reload # 重新加载配置
  12. # iptables(底层防火墙)
  13. iptables -L # 查看规则
  14. iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 添加规则
复制代码

系统监控

系统资源监控

  1. # CPU监控
  2. top # 实时进程监控
  3. htop # 增强版top
  4. sar -u 1 5 # CPU使用率统计
  5. # 内存监控
  6. free -h # 内存使用情况
  7. vmstat 1 5 # 虚拟内存统计
  8. sar -r 1 5 # 内存使用率统计
  9. # 磁盘监控
  10. df -h # 磁盘空间使用
  11. du -sh directory # 目录大小
  12. iotop # 磁盘I/O监控
  13. sar -d 1 5 # 磁盘活动统计
复制代码

系统信息

  1. # 系统信息
  2. uname -a # 系统信息
  3. lsb_release -a # 发行版信息
  4. cat /proc/version # 内核版本
  5. uptime # 系统运行时间
  6. whoami # 当前用户
  7. who # 当前登录用户
  8. w # 详细登录信息
  9. # 硬件信息
  10. lscpu # CPU信息
  11. lsmem # 内存信息
  12. lsblk # 块设备信息
  13. lsusb # USB设备信息
  14. lspci # PCI设备信息
复制代码

日志监控

  1. # 系统日志
  2. dmesg # 内核消息
  3. journalctl # systemd日志
  4. journalctl -f # 实时查看日志
  5. journalctl -u service_name # 查看服务日志
  6. # 日志文件
  7. tail -f /var/log/syslog # 实时查看系统日志
  8. tail -f /var/log/auth.log # 认证日志
  9. tail -f /var/log/apache2/access.log # Web服务器日志
复制代码

软件包管理

Debian/Ubuntu系列(APT)

  1. # 更新软件包列表
  2. apt update # 更新包列表
  3. apt upgrade # 升级所有包
  4. apt full-upgrade # 完整升级
  5. # 安装软件包
  6. apt install package_name # 安装软件包
  7. apt install -y package_name # 自动确认安装
  8. apt install ./package.deb # 安装本地deb包
  9. # 搜索和查询
  10. apt search keyword # 搜索软件包
  11. apt show package_name # 显示包信息
  12. apt list --installed # 列出已安装包
  13. # 删除软件包
  14. apt remove package_name # 删除软件包
  15. apt purge package_name # 完全删除(包括配置)
  16. apt autoremove # 删除不需要的依赖
  17. # 软件源管理
  18. add-apt-repository ppa:user/repo # 添加PPA源
复制代码

Red Hat系列(YUM/DNF)

  1. # CentOS/RHEL(YUM)
  2. yum update # 更新所有包
  3. yum install package_name # 安装软件包
  4. yum search keyword # 搜索软件包
  5. yum info package_name # 显示包信息
  6. yum remove package_name # 删除软件包
  7. yum list installed # 列出已安装包
  8. # Fedora(DNF)
  9. dnf update # 更新所有包
  10. dnf install package_name # 安装软件包
  11. dnf search keyword # 搜索软件包
  12. dnf info package_name # 显示包信息
  13. dnf remove package_name # 删除软件包
复制代码

源码编译安装

  1. # 典型编译安装流程
  2. tar -xzf package.tar.gz # 解压源码包
  3. cd package/ # 进入源码目录
  4. ./configure # 配置编译选项
  5. make # 编译
  6. sudo make install # 安装
  7. # 配置选项示例
  8. ./configure --prefix=/usr/local --enable-feature
复制代码

系统服务管理

Systemd服务管理

  1. # 服务控制
  2. systemctl start service_name # 启动服务
  3. systemctl stop service_name # 停止服务
  4. systemctl restart service_name # 重启服务
  5. systemctl reload service_name # 重新加载配置
  6. # 服务状态
  7. systemctl status service_name # 查看服务状态
  8. systemctl is-active service_name # 检查服务是否运行
  9. systemctl is-enabled service_name # 检查服务是否开机启动
  10. # 开机启动管理
  11. systemctl enable service_name # 设置开机启动
  12. systemctl disable service_name # 禁用开机启动
  13. # 列出服务
  14. systemctl list-units --type=service # 列出所有服务
  15. systemctl list-unit-files --type=service # 列出服务文件
复制代码

创建自定义服务

  1. # 创建服务文件
  2. sudo nano /etc/systemd/system/myapp.service
  3. # 服务文件内容示例
  4. [Unit]
  5. Description=My Application
  6. After=network.target
  7. [Service]
  8. Type=simple
  9. User=myuser
  10. WorkingDirectory=/path/to/app
  11. ExecStart=/path/to/app/start.sh
  12. Restart=always
  13. [Install]
  14. WantedBy=multi-user.target
  15. # 重新加载systemd
  16. systemctl daemon-reload
  17. systemctl enable myapp.service
  18. systemctl start myapp.service
复制代码

Shell编程基础

变量和环境

  1. # 变量定义
  2. name="John" # 定义变量
  3. echo$name # 使用变量
  4. echo${name} # 使用变量(推荐)
  5. # 环境变量
  6. export PATH=$PATH:/new/path # 添加到PATH
  7. export MY_VAR="value" # 导出环境变量
  8. env # 查看所有环境变量
  9. echo$HOME # 主目录
  10. echo$USER # 当前用户
  11. echo$PWD # 当前目录
复制代码

条件判断

  1. # if语句
  2. if [ condition ]; then
  3. echo"True"
  4. elif [ other_condition ]; then
  5. echo"Other"
  6. else
  7. echo"False"
  8. fi
  9. # 文件测试
  10. if [ -f filename ]; then # 文件存在
  11. echo"File exists"
  12. fi
  13. if [ -d dirname ]; then # 目录存在
  14. echo"Directory exists"
  15. fi
  16. # 字符串比较
  17. if [ "$str1" = "$str2" ]; then
  18. echo"Strings are equal"
  19. fi
  20. # 数值比较
  21. if [ $num1 -gt $num2 ]; then # 大于
  22. echo"num1 is greater"
  23. fi
复制代码

循环结构

  1. # for循环
  2. for i in 1 2 3 4 5; do
  3. echo$i
  4. done
  5. for file in *.txt; do
  6. echo"Processing $file"
  7. done
  8. # while循环
  9. counter=1
  10. while [ $counter -le 5 ]; do
  11. echo$counter
  12. counter=$((counter + 1))
  13. done
  14. # until循环
  15. until [ $counter -gt 5 ]; do
  16. echo$counter
  17. counter=$((counter + 1))
  18. done
复制代码

函数定义

  1. # 函数定义
  2. functiongreet() {
  3. echo"Hello $1"
  4. }
  5. # 或者
  6. greet() {
  7. echo"Hello $1"
  8. }
  9. # 调用函数
  10. greet "World"
  11. # 带返回值的函数
  12. calculate() {
  13. local result=$(($1 + $2))
  14. echo$result
  15. }
  16. sum=$(calculate 5 3)
  17. echo"Sum is: $sum"
复制代码

脚本参数处理

  1. #!/bin/bash
  2. # 脚本参数
  3. echo"Script name: $0"
  4. echo"First argument: $1"
  5. echo"Second argument: $2"
  6. echo"All arguments: $@"
  7. echo"Number of arguments: $#"
  8. # 参数检查
  9. if [ $# -lt 2 ]; then
  10. echo"Usage: $0 <arg1> <arg2>"
  11. exit 1
  12. fi
  13. # getopts处理选项
  14. whilegetopts"hf:o:" opt; do
  15. case$optin
  16. h)
  17. echo"Help message"
  18. exit 0
  19. ;;
  20. f)
  21. input_file="$OPTARG"
  22. ;;
  23. o)
  24. output_file="$OPTARG"
  25. ;;
  26. \?)
  27. echo"Invalid option: -$OPTARG" >&2
  28. exit 1
  29. ;;
  30. esac
  31. done
复制代码

系统安全

用户认证安全

  1. # 密码策略
  2. # 编辑 /etc/login.defs
  3. PASS_MAX_DAYS 90 # 密码最大有效期
  4. PASS_MIN_DAYS 7 # 密码最小更换间隔
  5. PASS_MIN_LEN 8 # 密码最小长度
  6. PASS_WARN_AGE 7 # 密码过期警告天数
  7. # 账户锁定策略
  8. # 编辑 /etc/pam.d/common-auth
  9. auth required pam_tally2.so deny=5 unlock_time=300
  10. # 查看和解锁账户
  11. pam_tally2 --user username # 查看失败登录次数
  12. pam_tally2 --user username --reset # 重置计数器
复制代码

SSH安全配置

  1. # SSH服务配置(/etc/ssh/sshd_config)
  2. Port 2222 # 更改默认端口
  3. PermitRootLogin no # 禁止root直接登录
  4. PasswordAuthentication no # 禁用密码认证
  5. PubkeyAuthentication yes # 启用公钥认证
  6. AllowUsers user1 user2 # 限制允许登录的用户
  7. # 生成SSH密钥对
  8. ssh-keygen -t rsa -b 4096 # 生成RSA密钥
  9. ssh-keygen -t ed25519 # 生成Ed25519密钥(推荐)
  10. # 复制公钥到服务器
  11. ssh-copy-id user@hostname # 复制公钥
复制代码

文件完整性检查

  1. # 计算文件哈希
  2. md5sum filename # MD5哈希
  3. sha256sum filename # SHA256哈希
  4. sha512sum filename # SHA512哈希
  5. # 批量检查
  6. find /path -type f -exec sha256sum {} \; > checksums.txt
  7. sha256sum -c checksums.txt # 验证文件完整性
  8. # 使用AIDE监控文件变化
  9. aide --init # 初始化数据库
  10. aide --check # 检查文件变化
复制代码

系统审计

  1. # auditd服务
  2. systemctl enable auditd # 启用审计服务
  3. systemctl start auditd # 启动审计服务
  4. # 添加审计规则
  5. auditctl -w /etc/passwd -p wa -k passwd_changes
  6. auditctl -w /etc/shadow -p wa -k shadow_changes
  7. # 查看审计日志
  8. ausearch -k passwd_changes # 按关键字搜索
  9. aureport --summary # 审计报告
复制代码

日志管理

系统日志

  1. # 重要日志文件
  2. /var/log/syslog # 系统日志(Debian/Ubuntu)
  3. /var/log/messages # 系统日志(Red Hat系列)
  4. /var/log/auth.log # 认证日志
  5. /var/log/kern.log # 内核日志
  6. /var/log/boot.log # 启动日志
  7. # 使用journalctl查看日志
  8. journalctl # 查看所有日志
  9. journalctl -n 50 # 查看最近50条
  10. journalctl -f # 实时跟踪日志
  11. journalctl -u ssh.service # 查看特定服务日志
  12. journalctl --since "1 hour ago"# 查看1小时内的日志
  13. journalctl --until "2023-01-01"# 查看指定时间前的日志
复制代码

日志分析工具

  1. # logrotate配置
  2. # 编辑 /etc/logrotate.conf 或 /etc/logrotate.d/
  3. /var/log/myapp.log {
  4. daily # 每日轮转
  5. missingok # 文件不存在不报错
  6. rotate 52 # 保留52个备份
  7. compress # 压缩旧日志
  8. delaycompress # 延迟压缩
  9. notifempty # 空文件不轮转
  10. create 644 user group # 创建新文件的权限
  11. postrotate
  12. systemctl reload myapp
  13. endscript
  14. }
  15. # 手动执行logrotate
  16. logrotate -f /etc/logrotate.conf # 强制执行轮转
复制代码

远程日志

  1. # rsyslog远程日志配置
  2. # 在 /etc/rsyslog.conf 中添加:
  3. *.* @@remote-log-server:514 # UDP传输
  4. *.* @@remote-log-server:514 # TCP传输
  5. # 重启rsyslog服务
  6. systemctl restart rsyslog
复制代码

备份和恢复

tar命令备份

  1. # 创建备份
  2. tar -czf backup.tar.gz /path/to/backup # 创建压缩备份
  3. tar -cjf backup.tar.bz2 /path/to/backup # 使用bzip2压缩
  4. tar -cJf backup.tar.xz /path/to/backup # 使用xz压缩
  5. # 恢复备份
  6. tar -xzf backup.tar.gz # 解压到当前目录
  7. tar -xzf backup.tar.gz -C /restore/path # 解压到指定目录
  8. # 增量备份
  9. tar -czf backup-full.tar.gz /data # 完整备份
  10. tar -czf backup-inc.tar.gz --newer-mtime="2023-01-01" /data # 增量备份
  11. # 查看备份内容
  12. tar -tzf backup.tar.gz # 查看压缩包内容
复制代码

rsync同步备份

  1. # 本地同步
  2. rsync -av source/ destination/ # 同步目录
  3. rsync -av --delete source/ destination/ # 同步并删除目标多余文件
  4. # 远程同步
  5. rsync -av source/ user@remote:/path/ # 推送到远程
  6. rsync -av user@remote:/path/ destination/ # 从远程拉取
  7. # 排除文件
  8. rsync -av --exclude='*.log' source/ dest/ # 排除日志文件
  9. rsync -av --exclude-from=exclude.txt source/ dest/ # 从文件读取排除列表
  10. # 断点续传
  11. rsync -av --partial --progress source/ dest/ # 显示进度和断点续传
复制代码

系统级备份

  1. # 完整系统备份
  2. tar --exclude=/proc --exclude=/sys --exclude=/dev \
  3. --exclude=/run --exclude=/mnt --exclude=/media \
  4. --exclude=/tmp --exclude=/lost+found \
  5. -czf system-backup.tar.gz /
  6. # 使用dd备份分区
  7. dd if=/dev/sda1 of=partition-backup.img bs=4M # 备份分区
  8. dd if=partition-backup.img of=/dev/sda1 bs=4M # 恢复分区
  9. # LVM快照备份
  10. lvcreate -L 1G -s -n snap-data /dev/vg0/data # 创建快照
  11. mount /dev/vg0/snap-data /mnt/snapshot # 挂载快照
  12. # 备份快照数据
  13. umount /mnt/snapshot # 卸载快照
  14. lvremove /dev/vg0/snap-data # 删除快照
复制代码

性能优化

系统性能分析

  1. # CPU性能分析
  2. top # 实时进程监控
  3. htop # 增强版top
  4. sar -u 1 5 # CPU使用率统计
  5. iostat -x 1 5 # I/O统计
  6. vmstat 1 5 # 虚拟内存统计
  7. # 内存分析
  8. free -h # 内存使用情况
  9. pmap PID # 进程内存映射
  10. smem -t # 内存使用详情(需要安装)
  11. # 磁盘I/O分析
  12. iotop # 实时I/O监控
  13. iftop # 网络流量监控
  14. nethogs # 按进程显示网络使用
复制代码

内核参数优化

  1. # 查看内核参数
  2. sysctl -a # 查看所有参数
  3. sysctl vm.swappiness # 查看特定参数
  4. # 临时修改参数
  5. sysctl vm.swappiness=10 # 减少交换使用
  6. sysctl net.core.rmem_max=134217728 # 增加接收缓冲区
  7. # 永久修改参数
  8. # 编辑 /etc/sysctl.conf
  9. vm.swappiness = 10
  10. net.core.rmem_max = 134217728
  11. net.core.wmem_max = 134217728
  12. # 应用配置
  13. sysctl -p # 重新加载配置
复制代码

服务优化

  1. # 禁用不需要的服务
  2. systemctl list-units --type=service --state=running # 查看运行的服务
  3. systemctl disable bluetooth # 禁用蓝牙服务
  4. systemctl mask cups # 完全禁用打印服务
  5. # 调整服务启动顺序
  6. systemctl edit myservice # 编辑服务配置
  7. # 添加依赖关系:
  8. [Unit]
  9. After=network.target
  10. Requires=database.service
复制代码

故障排除

系统启动问题

  1. # 查看启动日志
  2. journalctl -b # 查看本次启动日志
  3. journalctl -b -1 # 查看上次启动日志
  4. dmesg # 内核消息
  5. # GRUB救援
  6. # 在GRUB菜单按'e'编辑启动参数
  7. # 在linux行末添加:
  8. init=/bin/bash # 进入单用户模式
  9. systemd.unit=rescue.target # 进入救援模式
  10. # 修复文件系统
  11. fsck /dev/sda1 # 检查并修复文件系统
  12. fsck -y /dev/sda1 # 自动修复
复制代码

网络问题诊断

  1. # 连通性测试
  2. ping -c 4 8.8.8.8 # 测试外网连通性
  3. ping -c 4 gateway_ip # 测试网关连通性
  4. traceroute hostname # 跟踪路由路径
  5. # DNS问题
  6. nslookup hostname # DNS查询
  7. dig hostname # 详细DNS查询
  8. cat /etc/resolv.conf # 查看DNS配置
  9. # 端口和连接问题
  10. netstat -tuln # 查看监听端口
  11. ss -tuln # 现代替代命令
  12. lsof -i :80 # 查看使用端口80的进程
复制代码

磁盘空间问题

  1. # 查找大文件
  2. find / -size +100M 2>/dev/null # 查找大于100M的文件
  3. du -sh /* 2>/dev/null | sort -hr # 按目录大小排序
  4. # 清理空间
  5. apt autoremove # 删除不需要的包
  6. apt autoclean # 清理包缓存
  7. journalctl --vacuum-time=7d # 清理7天前的日志
  8. find /tmp -mtime +7 -delete # 删除7天前的临时文件
  9. # 查找删除的文件但仍被占用的空间
  10. lsof | grep deleted # 查找已删除但未释放的文件
复制代码

性能问题诊断

  1. # 查找高CPU使用进程
  2. top -o %CPU # 按CPU使用率排序
  3. ps aux --sort=-%cpu | head # 显示CPU使用最高的进程
  4. # 查找高内存使用进程
  5. top -o %MEM # 按内存使用率排序
  6. ps aux --sort=-%mem | head # 显示内存使用最高的进程
  7. # I/O性能测试
  8. dd if=/dev/zero of=testfile bs=1M count=1000 # 写入测试
  9. dd if=testfile of=/dev/null bs=1M # 读取测试
  10. hdparm -t /dev/sda # 硬盘读取速度测试
复制代码

进阶技巧

文本处理进阶

  1. # 复杂的awk脚本
  2. awk '
  3. BEGIN { total = 0 }
  4. $1 > 100 { total += $1; count++ }
  5. END { print "Average:", total/count }
  6. ' datafile
  7. # sed高级用法
  8. sed -n '1,5p' file # 打印1-5行
  9. sed '/start/,/end/d' file # 删除start到end之间的行
  10. sed 's/\(.*\):\(.*\)/\2:\1/' file # 交换冒号分隔的两部分
  11. # 正则表达式进阶
  12. grep -P '(?<=\d{3})\d{4}' file # 使用Perl正则表达式
  13. grep -E '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' file # 匹配邮箱
复制代码

进程间通信

  1. # 管道和重定向
  2. command1 | command2 # 管道
  3. command > file 2>&1 # 重定向标准输出和错误输出
  4. command < inputfile > outputfile # 输入输出重定向
  5. # 命名管道
  6. mkfifo mypipe # 创建命名管道
  7. echo "data" > mypipe & # 写入数据
  8. cat < mypipe # 读取数据
  9. # 消息队列、信号量等
  10. ipcs # 查看IPC资源
  11. ipcrm -q msgid # 删除消息队列
复制代码

系统调优技巧

  1. # 文件描述符限制
  2. ulimit -n # 查看文件描述符限制
  3. ulimit -n 65536 # 设置文件描述符限制
  4. # 在 /etc/security/limits.conf 中永久设置:
  5. * soft nofile 65536
  6. * hard nofile 65536
  7. # TCP调优
  8. echo'net.core.somaxconn = 65535' >> /etc/sysctl.conf
  9. echo'net.ipv4.tcp_max_syn_backlog = 65535' >> /etc/sysctl.conf
  10. sysctl -p
  11. # 内存调优
  12. echo'vm.dirty_ratio = 15' >> /etc/sysctl.conf
  13. echo'vm.dirty_background_ratio = 5' >> /etc/sysctl.conf
复制代码

自动化脚本

  1. # Cron任务
  2. crontab -e # 编辑定时任务
  3. crontab -l # 查看定时任务
  4. # Cron格式:分 时 日 月 周 命令
  5. 0 2 * * * /path/to/backup.sh # 每天2点执行备份
  6. */5 * * * * /path/to/check.sh # 每5分钟执行检查
  7. # 系统启动脚本
  8. # 创建 /etc/rc.local
  9. #!/bin/bash
  10. # 在此添加启动时执行的命令
  11. exit 0
  12. chmod +x /etc/rc.local
复制代码

容器化技术基础

  1. # Docker基础命令
  2. docker run -it ubuntu:20.04 bash # 运行容器
  3. docker ps # 查看运行的容器
  4. docker images # 查看镜像
  5. docker exec -it container_id bash # 进入容器
  6. # 构建镜像
  7. # 创建Dockerfile
  8. FROM ubuntu:20.04
  9. RUN apt update && apt install -y nginx
  10. COPY index.html /var/www/html/
  11. EXPOSE 80
  12. CMD ["nginx", "-g", "daemon off;"]
  13. docker build -t myapp . # 构建镜像
  14. docker run -p 80:80 myapp # 运行容器
复制代码

总结

Linux是一个功能强大的操作系统,掌握它需要:

基础扎实:熟练掌握文件系统、基本命令和权限管理
实践为主:通过实际项目和问题解决来提高技能
持续学习:关注新技术和最佳实践
文档阅读:善用man页面和官方文档
社区参与:积极参与Linux社区,学习他人经验

学习建议
从基础命令开始,逐步深入
建立自己的Linux实验环境
多练习Shell脚本编写
学习系统管理和运维技能
关注安全和性能优化

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行天