服务器源码查找与下载完全指南
目录
- 基础概念与准备工作
- Linux系统基础信息收集
- Linux系统文件系统探索
- Linux系统进程和服务分析
- Linux系统源码定位技巧
- Windows系统基础信息收集
- Windows系统文件系统探索
- Windows系统服务和应用分析
- Web应用源码查找方法
- 数据库应用源码定位
- Java应用源码查找
- Python应用源码查找
- PHP应用源码查找
- Node.js应用源码查找
- .NET应用源码查找
- 容器化应用源码查找
- 源码下载和打包技巧
- 常见问题排查方法
- 安全注意事项
- 总结与最佳实践
第1段:基础概念与准备工作
1.1 什么是源码查找
当客户告诉你他们的财务系统部署在某台服务器上,但你需要获取源码进行分析、备份或迁移时,就需要进行源码查找。这个过程涉及:
- 源码定位:找到应用程序的源代码文件
- 依赖识别:识别应用程序使用的框架和库
- 配置收集:获取配置文件和环境设置
- 数据提取:下载完整的应用程序包
1.2 常见场景分析
1.2.1 财务系统源码查找场景
场景描述:客户说"我们的财务系统在Linux服务器上,需要备份源码"
可能的情况:
- 系统可能是基于Java的Spring Boot应用
- 可能是PHP开发的Web应用
- 可能是Python Django/Flask应用
- 可能是.NET Core应用
- 可能是Node.js应用
查找策略:
# 1. 先确定系统类型
uname -a
cat /etc/os-release
# 2. 查看运行中的进程
ps aux | grep -E "(java|python|php|node|dotnet)"
# 3. 检查Web服务器
systemctl status apache2 nginx httpd
# 4. 查看监听端口
netstat -tlnp | grep -E "(80|443|8080|3000|5000)"
1.2.2 电商系统源码查找场景
场景描述:客户说"我们的电商平台在Windows服务器上,需要迁移"
可能的情况:
- 可能是ASP.NET MVC应用
- 可能是Java Spring应用
- 可能是PHP Laravel应用
- 可能是Node.js Express应用
查找策略:
# 1. 检查系统信息
systeminfo
wmic os get caption,version
# 2. 查看IIS配置
%windir%system32inetsrvppcmd.exe list sites
# 3. 检查已安装程序
wmic product get name,version
# 4. 查看服务状态
sc query | findstr "RUNNING"
1.3 准备工作
在开始查找之前,需要准备以下工具和信息:
1.3.1 基础工具检查
# 基础工具检查
which find
which grep
which locate
which ps
which netstat
which lsof
# 网络工具
which wget
which curl
which scp
which rsync
# 压缩工具
which tar
which zip
which gzip
# 如果工具不存在,安装方法
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y findutils grep locate procps net-tools lsof wget curl openssh-client rsync tar zip gzip
# CentOS/RHEL
sudo yum install -y findutils grep mlocate procps-ng net-tools lsof wget curl openssh-clients rsync tar zip gzip
# 更新locate数据库
sudo updatedb
1.3.2 网络连接测试
# 测试网络连接
ping -c 4 8.8.8.8
ping -c 4 google.com
# 测试DNS解析
nslookup google.com
dig google.com
# 测试端口连通性
telnet target_server 22
nc -zv target_server 80
1.3.3 磁盘空间检查
# 检查磁盘使用情况
df -h
# 检查inode使用情况
df -i
# 检查目录大小
du -sh /var/www /opt /usr/local
# 清理临时文件
sudo find /tmp -type f -atime +7 -delete
sudo find /var/tmp -type f -atime +7 -delete
1.4 权限要求
确保你拥有足够的权限:
1.4.1 用户权限检查
# 检查当前用户权限
whoami
id
groups
# 检查sudo权限
sudo -l
# 检查文件系统权限
ls -la /
# 检查特定目录权限
ls -la /var/www
ls -la /opt
ls -la /usr/local
1.4.2 权限不足时的解决方案
# 如果权限不足,尝试以下方法:
# 1. 请求管理员权限
sudo su -
# 2. 使用特定用户权限
sudo -u www-data find /var/www
sudo -u nginx find /usr/share/nginx
# 3. 检查文件所有者
ls -la /path/to/application
chown -R current_user:current_user /path/to/application
# 4. 修改文件权限
chmod -R 755 /path/to/application
1.5 信息收集清单
在开始查找前,收集以下信息:
1.5.1 系统信息收集
# 创建信息收集脚本
cat > system_info.sh << 'EOF'
#!/bin/bash
echo "=== 系统信息收集报告 ==="
echo "收集时间: $(date)"
echo "收集用户: $(whoami)"
echo ""
echo "=== 操作系统信息 ==="
uname -a
cat /etc/os-release 2>/dev/null || cat /etc/redhat-release 2>/dev/null
echo ""
echo "=== 系统架构 ==="
arch
getconf LONG_BIT
echo ""
echo "=== 系统运行时间 ==="
uptime
who -b
echo ""
echo "=== 内存信息 ==="
free -h
echo ""
echo "=== 磁盘信息 ==="
df -h
echo ""
echo "=== CPU信息 ==="
cat /proc/cpuinfo | grep "model name" | head -1
cat /proc/cpuinfo | grep "cpu cores" | head -1
echo ""
echo "=== 网络信息 ==="
ip addr show
echo ""
echo "=== 监听端口 ==="
netstat -tlnp
echo ""
echo "=== 运行中的进程 ==="
ps aux | grep -E "(java|python|php|node|apache|nginx|mysql|postgresql)"
echo ""
echo "=== 已安装的软件包 ==="
dpkg -l 2>/dev/null | grep -E "(apache|nginx|mysql|php|java|python)" ||
rpm -qa 2>/dev/null | grep -E "(apache|nginx|mysql|php|java|python)"
echo ""
echo "=== 服务状态 ==="
systemctl list-units --type=service --state=running | grep -E "(apache|nginx|mysql|php|java|python)"
echo ""
echo "=== 环境变量 ==="
env | grep -E "(JAVA_HOME|PYTHONPATH|NODE_PATH|PATH)"
echo ""
echo "=== 用户信息 ==="
cat /etc/passwd | grep -E "(bash|sh)$"
echo ""
echo "=== 防火墙状态 ==="
iptables -L 2>/dev/null || ufw status 2>/dev/null || firewall-cmd --list-all 2>/dev/null
echo ""
echo "=== 信息收集完成 ==="
EOF
chmod +x system_info.sh
./system_info.sh > system_info_report.txt
1.5.2 应用信息收集
# 创建应用信息收集脚本
cat > app_info.sh << 'EOF'
#!/bin/bash
echo "=== 应用信息收集报告 ==="
echo "收集时间: $(date)"
echo ""
echo "=== Web服务器配置 ==="
# Apache配置
if [ -d "/etc/apache2" ]; then
echo "Apache配置目录: /etc/apache2"
find /etc/apache2 -name "*.conf" -exec echo "配置文件: {}" ;
find /etc/apache2 -name "sites-enabled" -exec echo "启用站点: {}" ;
fi
# Nginx配置
if [ -d "/etc/nginx" ]; then
echo "Nginx配置目录: /etc/nginx"
find /etc/nginx -name "*.conf" -exec echo "配置文件: {}" ;
find /etc/nginx -name "sites-enabled" -exec echo "启用站点: {}" ;
fi
echo ""
echo "=== 数据库配置 ==="
# MySQL配置
if [ -f "/etc/mysql/my.cnf" ]; then
echo "MySQL配置文件: /etc/mysql/my.cnf"
grep -E "(datadir|port|bind-address)" /etc/mysql/my.cnf
fi
# PostgreSQL配置
if [ -f "/etc/postgresql/*/main/postgresql.conf" ]; then
echo "PostgreSQL配置文件: /etc/postgresql/*/main/postgresql.conf"
find /etc/postgresql -name "postgresql.conf" -exec grep -E "(data_directory|port|listen_addresses)" {} ;
fi
echo ""
echo "=== 应用目录 ==="
find /var/www /opt /usr/local /home -maxdepth 2 -type d -name "*app*" -o -name "*web*" -o -name "*site*" 2>/dev/null
echo ""
echo "=== 源码文件 ==="
find /var/www /opt /usr/local /home -name "*.php" -o -name "*.java" -o -name "*.py" -o -name "*.js" -o -name "*.cs" 2>/dev/null | head -20
echo ""
echo "=== 配置文件 ==="
find /var/www /opt /usr/local /home -name "*.conf" -o -name "*.config" -o -name "*.ini" -o -name "*.yml" -o -name "*.yaml" 2>/dev/null | head -20
echo ""
echo "=== 日志文件 ==="
find /var/log -name "*.log" 2>/dev/null | head -10
echo ""
echo "=== 应用信息收集完成 ==="
EOF
chmod +x app_info.sh
./app_info.sh > app_info_report.txt
1.6 风险评估和注意事项
1.6.1 操作风险评估
# 1. 备份重要配置文件
sudo cp -r /etc/apache2 /etc/apache2.backup
sudo cp -r /etc/nginx /etc/nginx.backup
sudo cp -r /etc/mysql /etc/mysql.backup
# 2. 记录当前系统状态
sudo systemctl list-units --type=service --state=running > services_before.txt
sudo ps aux > processes_before.txt
sudo netstat -tlnp > ports_before.txt
# 3. 创建回滚脚本
cat > rollback.sh << 'EOF'
#!/bin/bash
echo "回滚系统状态..."
sudo systemctl restart apache2
sudo systemctl restart nginx
sudo systemctl restart mysql
echo "回滚完成"
EOF
chmod +x rollback.sh
1.6.2 安全注意事项
# 1. 检查敏感文件权限
find /var/www /opt /usr/local -name "*.env" -o -name "config.php" -o -name "database.yml" -exec ls -la {} ;
# 2. 检查日志文件权限
find /var/log -name "*.log" -exec ls -la {} ;
# 3. 检查备份文件权限
find /var/backups /opt/backups -type f -exec ls -la {} ;
# 4. 设置临时目录权限
chmod 700 /tmp/source_backup
chmod 600 /tmp/source_backup/*
第2段:Linux系统基础信息收集
2.1 系统信息收集
首先收集系统基础信息:
2.1.1 操作系统详细信息
# 系统版本信息
cat /etc/os-release
uname -a
lsb_release -a
# 系统架构
arch
getconf LONG_BIT
# 系统运行时间
uptime
who -b
# 内核信息
uname -r
cat /proc/version
dmesg | head -20
# 系统启动时间
systemctl show systemd-logind --property=ActiveEnterTimestamp
last reboot | head -5
2.1.2 硬件信息收集
# CPU信息
cat /proc/cpuinfo | grep "model name" | head -1
cat /proc/cpuinfo | grep "cpu cores" | head -1
cat /proc/cpuinfo | grep "siblings" | head -1
nproc
# 内存信息
free -h
cat /proc/meminfo | head -10
dmidecode -t memory 2>/dev/null | grep -E "(Size|Speed|Type)"
# 磁盘信息
df -h
lsblk
fdisk -l 2>/dev/null | grep -E "(Disk|Device)"
cat /proc/partitions
# 网络接口信息
ip addr show
cat /proc/net/dev
2.1.3 系统服务信息
# 系统服务状态
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
service --status-all
# 开机自启动服务
systemctl list-unit-files --type=service --state=enabled
chkconfig --list 2>/dev/null
# 系统日志
journalctl --list-boots
journalctl -b | head -20
2.2 用户和权限信息
2.2.1 用户信息详细收集
# 当前用户信息
whoami
id
groups
echo $HOME
echo $SHELL
# 系统用户列表
cat /etc/passwd | grep -E "(bash|sh)$"
cat /etc/passwd | awk -F: '$3 >= 1000 {print $1, $3, $7}'
# 用户组信息
cat /etc/group
groups $(whoami)
# 检查sudo权限
sudo -l 2>/dev/null
cat /etc/sudoers 2>/dev/null | grep -v "^#"
# 检查wheel组用户
grep wheel /etc/group
grep sudo /etc/group
2.2.2 权限和访问控制
# 文件系统权限
ls -la /
ls -la /var/www
ls -la /opt
ls -la /usr/local
# 检查重要目录权限
find /var/www /opt /usr/local -maxdepth 1 -type d -exec ls -ld {} ;
# 检查敏感文件权限
find /etc -name "*.conf" -exec ls -la {} ; | head -20
find /var/log -name "*.log" -exec ls -la {} ; | head -10
# SELinux状态
getenforce 2>/dev/null
sestatus 2>/dev/null
ls -Z /var/www 2>/dev/null
2.3 网络服务信息
2.3.1 网络配置和连接
# 监听端口
netstat -tlnp
ss -tlnp
lsof -i -P -n | grep LISTEN
# 网络连接
netstat -an
ss -an
lsof -i -P -n
# 网络接口配置
ip addr show
ip route show
cat /etc/network/interfaces 2>/dev/null
cat /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null
# DNS配置
cat /etc/resolv.conf
cat /etc/hosts
2.3.2 防火墙和安全配置
# 检查防火墙
iptables -L
iptables -L -n
ufw status
firewall-cmd --list-all 2>/dev/null
# 检查SELinux
getenforce 2>/dev/null
sestatus 2>/dev/null
setsebool -a 2>/dev/null | grep -E "(httpd|nginx|mysql)"
# 检查AppArmor
aa-status 2>/dev/null
2.3.3 网络服务分析
# 分析监听端口
netstat -tlnp | awk '{print $1, $4, $7}' | sort | uniq
ss -tlnp | awk '{print $1, $4, $7}' | sort | uniq
# 检查常见服务端口
for port in 22 80 443 3306 5432 6379 27017 8080 3000 5000; do
echo "Port $port:"
netstat -tlnp | grep ":$port "
ss -tlnp | grep ":$port "
done
# 检查Web服务器
systemctl status apache2 2>/dev/null
systemctl status nginx 2>/dev/null
systemctl status httpd 2>/dev/null
2.4 系统资源使用情况
2.4.1 内存和CPU使用
# 内存使用
free -h
cat /proc/meminfo | head -20
vmstat 1 5
# CPU使用
top -n 1 -b
htop 2>/dev/null || top -n 1
cat /proc/loadavg
uptime
# 进程信息
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
2.4.2 磁盘和存储
# 磁盘使用
df -h
df -i
lsblk
fdisk -l 2>/dev/null
# 目录大小
du -sh /var/www /opt /usr/local /home 2>/dev/null
du -sh /var/log 2>/dev/null
du -sh /tmp 2>/dev/null
# 磁盘I/O
iostat -x 1 5 2>/dev/null
iotop 2>/dev/null || iotop -o
2.4.3 系统负载和性能
# 系统负载
cat /proc/loadavg
uptime
w
# 系统统计
vmstat 1 5
sar -u 1 5 2>/dev/null
sar -r 1 5 2>/dev/null
# 网络统计
netstat -i
ss -s
cat /proc/net/dev
2.5 环境变量和路径
2.5.1 环境变量检查
# 查看所有环境变量
env
printenv
# 查看PATH
echo $PATH
echo $PATH | tr ':' '
'
# 查看特定环境变量
echo $JAVA_HOME
echo $PYTHONPATH
echo $NODE_PATH
echo $MYSQL_HOME
echo $ORACLE_HOME
# 查看shell配置
cat ~/.bashrc 2>/dev/null
cat ~/.bash_profile 2>/dev/null
cat ~/.profile 2>/dev/null
2.5.2 软件安装路径
# 查找已安装软件
which java
which python
which php
which node
which mysql
which apache2
which nginx
# 查找软件安装目录
find /usr -name "java" -type f 2>/dev/null
find /opt -name "java" -type f 2>/dev/null
find /usr/local -name "java" -type f 2>/dev/null
# 检查包管理器
dpkg -l 2>/dev/null | head -10
rpm -qa 2>/dev/null | head -10
yum list installed 2>/dev/null | head -10
apt list --installed 2>/dev/null | head -10
2.6 系统日志和审计
2.6.1 系统日志检查
# 系统日志
journalctl --list-boots
journalctl -b | head -20
journalctl -u apache2 --since "1 hour ago" 2>/dev/null
journalctl -u nginx --since "1 hour ago" 2>/dev/null
# 传统日志文件
ls -la /var/log/
tail -20 /var/log/syslog 2>/dev/null
tail -20 /var/log/messages 2>/dev/null
tail -20 /var/log/auth.log 2>/dev/null
2.6.2 应用日志检查
# Web服务器日志
ls -la /var/log/apache2/ 2>/dev/null
ls -la /var/log/nginx/ 2>/dev/null
ls -la /var/log/httpd/ 2>/dev/null
# 数据库日志
ls -la /var/log/mysql/ 2>/dev/null
ls -la /var/log/postgresql/ 2>/dev/null
# 应用日志
find /var/log -name "*.log" -mtime -1 2>/dev/null
find /var/log -name "*error*" -mtime -1 2>/dev/null
2.7 自动化信息收集脚本
2.7.1 完整系统信息收集脚本
# 创建完整的系统信息收集脚本
cat > complete_system_info.sh << 'EOF'
#!/bin/bash
# 设置输出文件
OUTPUT_FILE="complete_system_info_$(date +%Y%m%d_%H%M%S).txt"
echo "=== 完整系统信息收集报告 ===" > $OUTPUT_FILE
echo "收集时间: $(date)" >> $OUTPUT_FILE
echo "收集用户: $(whoami)" >> $OUTPUT_FILE
echo "服务器: $(hostname)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 系统信息
echo "=== 操作系统信息 ===" >> $OUTPUT_FILE
uname -a >> $OUTPUT_FILE
cat /etc/os-release 2>/dev/null >> $OUTPUT_FILE
lsb_release -a 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 硬件信息
echo "=== 硬件信息 ===" >> $OUTPUT_FILE
echo "CPU信息:" >> $OUTPUT_FILE
cat /proc/cpuinfo | grep "model name" | head -1 >> $OUTPUT_FILE
cat /proc/cpuinfo | grep "cpu cores" | head -1 >> $OUTPUT_FILE
nproc >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "内存信息:" >> $OUTPUT_FILE
free -h >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "磁盘信息:" >> $OUTPUT_FILE
df -h >> $OUTPUT_FILE
lsblk >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 网络信息
echo "=== 网络信息 ===" >> $OUTPUT_FILE
ip addr show >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "监听端口:" >> $OUTPUT_FILE
netstat -tlnp >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 用户信息
echo "=== 用户信息 ===" >> $OUTPUT_FILE
whoami >> $OUTPUT_FILE
id >> $OUTPUT_FILE
groups >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 服务信息
echo "=== 服务信息 ===" >> $OUTPUT_FILE
systemctl list-units --type=service --state=running >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 进程信息
echo "=== 进程信息 ===" >> $OUTPUT_FILE
ps aux | grep -E "(java|python|php|node|apache|nginx|mysql|postgresql)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 环境变量
echo "=== 环境变量 ===" >> $OUTPUT_FILE
env | grep -E "(JAVA_HOME|PYTHONPATH|NODE_PATH|PATH)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 软件包信息
echo "=== 软件包信息 ===" >> $OUTPUT_FILE
dpkg -l 2>/dev/null | grep -E "(apache|nginx|mysql|php|java|python)" >> $OUTPUT_FILE
rpm -qa 2>/dev/null | grep -E "(apache|nginx|mysql|php|java|python)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 防火墙信息
echo "=== 防火墙信息 ===" >> $OUTPUT_FILE
iptables -L 2>/dev/null >> $OUTPUT_FILE
ufw status 2>/dev/null >> $OUTPUT_FILE
firewall-cmd --list-all 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 日志信息
echo "=== 日志信息 ===" >> $OUTPUT_FILE
ls -la /var/log/ >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "=== 信息收集完成 ===" >> $OUTPUT_FILE
echo "报告已保存到: $OUTPUT_FILE"
EOF
chmod +x complete_system_info.sh
./complete_system_info.sh
2.7.2 快速系统检查脚本
# 创建快速系统检查脚本
cat > quick_system_check.sh << 'EOF'
#!/bin/bash
echo "=== 快速系统检查 ==="
echo "时间: $(date)"
echo "用户: $(whoami)"
echo "主机: $(hostname)"
echo ""
echo "=== 系统版本 ==="
cat /etc/os-release | grep PRETTY_NAME
uname -r
echo ""
echo "=== 系统负载 ==="
uptime
echo ""
echo "=== 内存使用 ==="
free -h | grep Mem
echo ""
echo "=== 磁盘使用 ==="
df -h | grep -E "(/$|/var|/opt|/usr)"
echo ""
echo "=== 监听端口 ==="
netstat -tlnp | grep -E "(80|443|3306|5432|8080|3000|5000)"
echo ""
echo "=== 运行中的服务 ==="
systemctl list-units --type=service --state=running | grep -E "(apache|nginx|mysql|postgresql|java|python|php|node)"
echo ""
echo "=== 进程信息 ==="
ps aux | grep -E "(java|python|php|node|apache|nginx|mysql|postgresql)" | grep -v grep
echo ""
echo "=== 环境变量 ==="
env | grep -E "(JAVA_HOME|PYTHONPATH|NODE_PATH)"
echo ""
echo "=== 快速检查完成 ==="
EOF
chmod +x quick_system_check.sh
./quick_system_check.sh
第3段:Linux系统文件系统探索
3.1 常见应用部署目录
在Linux系统中,应用程序通常部署在以下目录:
3.1.1 Web应用部署目录
# Web应用常见目录
/var/www/
/var/www/html/
/usr/share/nginx/html/
/opt/
/home/*/public_html/
/srv/
# 检查这些目录
ls -la /var/www/
ls -la /var/www/html/
ls -la /usr/share/nginx/html/
ls -la /opt/
ls -la /srv/
# 检查用户目录
find /home -name "public_html" -type d 2>/dev/null
find /home -name "www" -type d 2>/dev/null
find /home -name "html" -type d 2>/dev/null
3.1.2 应用安装目录
# 应用安装目录
/usr/local/
/opt/
/usr/share/
/home/*/apps/
/home/*/applications/
# 检查这些目录
ls -la /usr/local/
ls -la /opt/
ls -la /usr/share/
# 检查用户应用目录
find /home -name "apps" -type d 2>/dev/null
find /home -name "applications" -type d 2>/dev/null
find /home -name "projects" -type d 2>/dev/null
3.1.3 配置文件目录
# 配置文件目录
/etc/
/etc/apache2/
/etc/nginx/
/etc/httpd/
/etc/mysql/
/etc/postgresql/
# 检查这些目录
ls -la /etc/
ls -la /etc/apache2/ 2>/dev/null
ls -la /etc/nginx/ 2>/dev/null
ls -la /etc/httpd/ 2>/dev/null
ls -la /etc/mysql/ 2>/dev/null
ls -la /etc/postgresql/ 2>/dev/null
3.2 使用find命令查找
3.2.1 基础文件查找
# 查找所有PHP文件
find / -name "*.php" -type f 2>/dev/null
# 查找所有Java文件
find / -name "*.java" -type f 2>/dev/null
# 查找所有Python文件
find / -name "*.py" -type f 2>/dev/null
# 查找所有JavaScript文件
find / -name "*.js" -type f 2>/dev/null
# 查找所有C#文件
find / -name "*.cs" -type f 2>/dev/null
# 查找配置文件
find / -name "*.conf" -o -name "*.config" -o -name "*.ini" 2>/dev/null
# 查找特定应用名称
find / -name "*finance*" -o -name "*accounting*" 2>/dev/null
3.2.2 高级文件查找
# 按文件大小查找
find / -size +100M -type f 2>/dev/null
find / -size -1k -name "*.php" 2>/dev/null
# 按修改时间查找
find / -mtime -7 -name "*.php" 2>/dev/null
find / -mtime +30 -name "*.log" 2>/dev/null
# 按权限查找
find / -perm 777 -type f 2>/dev/null
find / -perm -4000 -type f 2>/dev/null
# 按所有者查找
find / -user www-data -type f 2>/dev/null
find / -user nginx -type f 2>/dev/null
# 按组查找
find / -group www-data -type f 2>/dev/null
find / -group nginx -type f 2>/dev/null
3.2.3 特定文件类型查找
# 查找可执行文件
find / -type f -executable 2>/dev/null
# 查找符号链接
find / -type l 2>/dev/null
# 查找空文件
find / -type f -empty 2>/dev/null
# 查找目录
find / -type d -name "*app*" 2>/dev/null
find / -type d -name "*web*" 2>/dev/null
find / -type d -name "*site*" 2>/dev/null
# 查找特定扩展名
find / -name "*.war" -o -name "*.jar" -o -name "*.ear" 2>/dev/null
find / -name "*.sql" -o -name "*.dump" -o -name "*.backup" 2>/dev/null
3.2.4 内容搜索
# 在文件中搜索内容
find / -type f -name "*.php" -exec grep -l "mysql_connect" {} ; 2>/dev/null
find / -type f -name "*.java" -exec grep -l "spring" {} ; 2>/dev/null
find / -type f -name "*.py" -exec grep -l "django" {} ; 2>/dev/null
# 搜索配置文件中的特定内容
find / -name "*.conf" -exec grep -l "DocumentRoot" {} ; 2>/dev/null
find / -name "*.conf" -exec grep -l "server_name" {} ; 2>/dev/null
# 搜索数据库连接字符串
find / -type f -exec grep -l "jdbc:" {} ; 2>/dev/null
find / -type f -exec grep -l "mysql://" {} ; 2>/dev/null
find / -type f -exec grep -l "postgresql://" {} ; 2>/dev/null
3.3 使用locate命令
3.3.1 更新和使用locate
# 更新locate数据库
sudo updatedb
# 查找特定文件
locate "*.php"
locate "config"
locate "application"
# 使用正则表达式
locate -r ".*.php$"
locate -r ".*config.*"
# 限制结果数量
locate "*.php" | head -20
locate "*.java" | head -20
3.3.2 locate高级用法
# 忽略大小写
locate -i "config"
# 显示匹配数量
locate -c "*.php"
# 显示数据库统计信息
locate -S
# 查找特定目录下的文件
locate "*/var/www/*.php"
locate "*/opt/*.jar"
3.4 检查Web根目录
3.4.1 Apache配置检查
# 检查Apache配置
cat /etc/apache2/sites-enabled/* 2>/dev/null
cat /etc/httpd/conf/httpd.conf 2>/dev/null
# 查找DocumentRoot
grep -r "DocumentRoot" /etc/apache2/ 2>/dev/null
grep -r "DocumentRoot" /etc/httpd/ 2>/dev/null
# 查找虚拟主机配置
grep -r "VirtualHost" /etc/apache2/ 2>/dev/null
grep -r "VirtualHost" /etc/httpd/ 2>/dev/null
# 查找别名配置
grep -r "Alias" /etc/apache2/ 2>/dev/null
grep -r "Alias" /etc/httpd/ 2>/dev/null
# 检查Apache模块
apache2ctl -M 2>/dev/null
httpd -M 2>/dev/null
3.4.2 Nginx配置检查
# 检查Nginx配置
cat /etc/nginx/sites-enabled/* 2>/dev/null
cat /etc/nginx/nginx.conf 2>/dev/null
# 查找root指令
grep -r "root" /etc/nginx/ 2>/dev/null
# 查找server块
grep -r "server_name" /etc/nginx/ 2>/dev/null
# 查找location块
grep -r "location" /etc/nginx/ 2>/dev/null
# 检查Nginx模块
nginx -V 2>&1 | grep -o "with-[a-z_]*"
3.4.3 其他Web服务器配置
# 检查Lighttpd配置
cat /etc/lighttpd/lighttpd.conf 2>/dev/null
grep -r "server.document-root" /etc/lighttpd/ 2>/dev/null
# 检查Tomcat配置
find / -name "server.xml" 2>/dev/null
find / -name "web.xml" 2>/dev/null
# 检查Jetty配置
find / -name "jetty.xml" 2>/dev/null
find / -name "jetty.conf" 2>/dev/null
3.5 目录结构分析
3.5.1 分析目录结构
# 分析目录结构
tree /var/www 2>/dev/null || find /var/www -type d | head -20
tree /opt 2>/dev/null || find /opt -type d | head -20
tree /usr/local 2>/dev/null || find /usr/local -type d | head -20
# 查找最大目录
du -h /var/www /opt /usr/local 2>/dev/null | sort -hr
# 查找目录中的文件数量
find /var/www -type f | wc -l
find /opt -type f | wc -l
find /usr/local -type f | wc -l
3.5.2 文件权限分析
# 分析文件权限
find /var/www -type f -exec ls -la {} ; | head -20
find /opt -type f -exec ls -la {} ; | head -20
# 查找权限异常的文件
find /var/www -type f -perm 777 2>/dev/null
find /opt -type f -perm 777 2>/dev/null
# 查找可写文件
find /var/www -type f -writable 2>/dev/null
find /opt -type f -writable 2>/dev/null
3.6 自动化文件系统探索脚本
3.6.1 完整文件系统探索脚本
# 创建完整的文件系统探索脚本
cat > filesystem_exploration.sh << 'EOF'
#!/bin/bash
# 设置输出文件
OUTPUT_FILE="filesystem_exploration_$(date +%Y%m%d_%H%M%S).txt"
echo "=== 文件系统探索报告 ===" > $OUTPUT_FILE
echo "探索时间: $(date)" >> $OUTPUT_FILE
echo "探索用户: $(whoami)" >> $OUTPUT_FILE
echo "服务器: $(hostname)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 目录结构分析
echo "=== 目录结构分析 ===" >> $OUTPUT_FILE
echo "主要目录大小:" >> $OUTPUT_FILE
du -h /var/www /opt /usr/local /home 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "主要目录文件数量:" >> $OUTPUT_FILE
echo "var/www: $(find /var/www -type f 2>/dev/null | wc -l)" >> $OUTPUT_FILE
echo "opt: $(find /opt -type f 2>/dev/null | wc -l)" >> $OUTPUT_FILE
echo "usr/local: $(find /usr/local -type f 2>/dev/null | wc -l)" >> $OUTPUT_FILE
echo "home: $(find /home -type f 2>/dev/null | wc -l)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 源码文件查找
echo "=== 源码文件查找 ===" >> $OUTPUT_FILE
echo "PHP文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.php" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "Java文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.java" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "Python文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.py" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "JavaScript文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.js" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 配置文件查找
echo "=== 配置文件查找 ===" >> $OUTPUT_FILE
echo "配置文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.conf" -o -name "*.config" -o -name "*.ini" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 数据库文件查找
echo "=== 数据库文件查找 ===" >> $OUTPUT_FILE
echo "SQL文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local /home -name "*.sql" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 日志文件查找
echo "=== 日志文件查找 ===" >> $OUTPUT_FILE
echo "日志文件:" >> $OUTPUT_FILE
find /var/log -name "*.log" 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# Web服务器配置
echo "=== Web服务器配置 ===" >> $OUTPUT_FILE
echo "Apache配置:" >> $OUTPUT_FILE
find /etc/apache2 /etc/httpd -name "*.conf" 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "Nginx配置:" >> $OUTPUT_FILE
find /etc/nginx -name "*.conf" 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 数据库配置
echo "=== 数据库配置 ===" >> $OUTPUT_FILE
echo "MySQL配置:" >> $OUTPUT_FILE
find /etc/mysql -name "*.cnf" 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "PostgreSQL配置:" >> $OUTPUT_FILE
find /etc/postgresql -name "*.conf" 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
# 权限分析
echo "=== 权限分析 ===" >> $OUTPUT_FILE
echo "权限异常文件:" >> $OUTPUT_FILE
find /var/www /opt /usr/local -type f -perm 777 2>/dev/null >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "=== 文件系统探索完成 ===" >> $OUTPUT_FILE
echo "报告已保存到: $OUTPUT_FILE"
EOF
chmod +x filesystem_exploration.sh
./filesystem_exploration.sh
3.6.2 快速文件查找脚本
# 创建快速文件查找脚本
cat > quick_file_search.sh << 'EOF'
#!/bin/bash
echo "=== 快速文件查找 ==="
echo "时间: $(date)"
echo "用户: $(whoami)"
echo "主机: $(hostname)"
echo ""
echo "=== 源码文件统计 ==="
echo "PHP文件: $(find /var/www /opt /usr/local /home -name "*.php" 2>/dev/null | wc -l)"
echo "Java文件: $(find /var/www /opt /usr/local /home -name "*.java" 2>/dev/null | wc -l)"
echo "Python文件: $(find /var/www /opt /usr/local /home -name "*.py" 2>/dev/null | wc -l)"
echo "JavaScript文件: $(find /var/www /opt /usr/local /home -name "*.js" 2>/dev/null | wc -l)"
echo ""
echo "=== 配置文件统计 ==="
echo "配置文件: $(find /var/www /opt /usr/local /home -name "*.conf" -o -name "*.config" -o -name "*.ini" 2>/dev/null | wc -l)"
echo ""
echo "=== 数据库文件统计 ==="
echo "SQL文件: $(find /var/www /opt /usr/local /home -name "*.sql" 2>/dev/null | wc -l)"
echo ""
echo "=== 主要目录内容 ==="
echo "var/www目录:"
ls -la /var/www/ 2>/dev/null | head -10
echo ""
echo "opt目录:"
ls -la /opt/ 2>/dev/null | head -10
echo ""
echo "usr/local目录:"
ls -la /usr/local/ 2>/dev/null | head -10
echo ""
echo "=== 快速文件查找完成 ==="
EOF
chmod +x quick_file_search.sh
./quick_file_search.sh
3.7 特殊文件查找
3.7.1 隐藏文件查找
# 查找隐藏文件
find /var/www /opt /usr/local -name ".*" -type f 2>/dev/null
find /var/www /opt /usr/local -name ".*" -type d 2>/dev/null
# 查找特定隐藏文件
find /var/www /opt /usr/local -name ".env" 2>/dev/null
find /var/www /opt /usr/local -name ".htaccess" 2>/dev/null
find /var/www /opt /usr/local -name ".git" -type d 2>/dev/null
3.7.2 备份文件查找
# 查找备份文件
find /var/www /opt /usr/local -name "*.bak" 2>/dev/null
find /var/www /opt /usr/local -name "*.backup" 2>/dev/null
find /var/www /opt /usr/local -name "*.old" 2>/dev/null
find /var/www /opt /usr/local -name "*~" 2>/dev/null
# 查找临时文件
find /var/www /opt /usr/local -name "*.tmp" 2>/dev/null
find /var/www /opt /usr/local -name "*.temp" 2>/dev/null
3.7.3 压缩文件查找
# 查找压缩文件
find /var/www /opt /usr/local -name "*.zip" 2>/dev/null
find /var/www /opt /usr/local -name "*.tar" 2>/dev/null
find /var/www /opt /usr/local -name "*.tar.gz" 2>/dev/null
find /var/www /opt /usr/local -name "*.rar" 2>/dev/null
find /var/www /opt /usr/local -name "*.7z" 2>/dev/null
第4段:Linux系统进程和服务分析
4.1 运行中的进程分析
4.1.1 基础进程查看
# 查看所有进程
ps aux
ps -ef
# 查看特定进程
ps aux | grep -E "(java|python|php|node|apache|nginx)"
# 查看进程树
pstree
pstree -p
# 查看进程详细信息
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
4.1.2 进程详细信息分析
# 查看进程的完整命令行
ps aux | grep -E "(java|python|php|node)" | grep -v grep
# 查看进程的工作目录
ps aux | awk '{print $2, $11}' | grep -E "(java|python|php|node)"
# 查看进程的启动时间
ps -eo pid,ppid,cmd,etime | grep -E "(java|python|php|node)"
# 查看进程的父进程
ps -eo pid,ppid,cmd | grep -E "(java|python|php|node)"
4.1.3 特定应用进程分析
# Java应用进程分析
ps aux | grep java | grep -v grep
jps -l
jps -v
# Python应用进程分析
ps aux | grep python | grep -v grep
ps aux | grep python3 | grep -v grep
# PHP应用进程分析
ps aux | grep php | grep -v grep
ps aux | grep php-fpm | grep -v grep
# Node.js应用进程分析
ps aux | grep node | grep -v grep
ps aux | grep npm | grep -v grep
# Web服务器进程分析
ps aux | grep apache | grep -v grep
ps aux | grep nginx | grep -v grep
ps aux | grep httpd | grep -v grep
4.1.4 进程资源使用分析
# 查看进程资源使用情况
top -n 1 -b
htop 2>/dev/null || top -n 1
# 查看特定进程的资源使用
ps -eo pid,ppid,cmd,%cpu,%mem,etime | grep -E "(java|python|php|node)"
# 查看进程打开的文件
lsof -p $(pgrep java) 2>/dev/null
lsof -p $(pgrep python) 2>/dev/null
lsof -p $(pgrep php) 2>/dev/null
lsof -p $(pgrep node) 2>/dev/null
4.2 服务状态检查
4.2.1 系统服务状态
# 系统服务状态
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
service --status-all
# 查看所有服务
systemctl list-units --type=service --all
# 查看服务依赖关系
systemctl list-dependencies apache2
systemctl list-dependencies nginx
systemctl list-dependencies mysql
4.2.2 Web服务检查
# 检查Apache服务
systemctl status apache2
systemctl status httpd
apache2ctl status 2>/dev/null
httpd status 2>/dev/null
# 检查Nginx服务
systemctl status nginx
nginx -t
nginx -V
# 检查其他Web服务器
systemctl status lighttpd 2>/dev/null
systemctl status tomcat 2>/dev/null
systemctl status jetty 2>/dev/null
4.2.3 数据库服务检查
# 检查MySQL服务
systemctl status mysql
systemctl status mysqld
mysqladmin status 2>/dev/null
mysqladmin ping 2>/dev/null
# 检查PostgreSQL服务
systemctl status postgresql
systemctl status postgresql@12-main 2>/dev/null
pg_isready 2>/dev/null
# 检查MongoDB服务
systemctl status mongodb
systemctl status mongod
mongo --eval "db.runCommand('ping')" 2>/dev/null
# 检查Redis服务
systemctl status redis
systemctl status redis-server
redis-cli ping 2>/dev/null
4.2.4 应用服务检查
# 检查Java应用服务
systemctl status tomcat
systemctl status jetty
systemctl status wildfly
systemctl status glassfish
# 检查Python应用服务
systemctl status gunicorn
systemctl status uwsgi
systemctl status supervisor
# 检查PHP应用服务
systemctl status php-fpm
systemctl status php7.4-fpm 2>/dev/null
systemctl status php8.0-fpm 2>/dev/null
# 检查Node.js应用服务
systemctl status pm2
systemctl status node
systemctl status npm
4.3 端口和服务关联
4.3.1 端口占用分析
# 查看端口占用
lsof -i -P -n | grep LISTEN
netstat -tlnp | grep LISTEN
ss -tlnp | grep LISTEN
# 查看特定端口
lsof -i :80
lsof -i :443
lsof -i :3306
lsof -i :5432
lsof -i :8080
lsof -i :3000
lsof -i :5000
# 查看端口范围
lsof -i :8000-9000
netstat -tlnp | grep -E ":(8000|8001|8002|8003|8004|8005|8006|8007|8008|8009)"
4.3.2 进程和端口关联
# 查看进程打开的文件和端口
lsof -p $(pgrep java) 2>/dev/null
lsof -p $(pgrep python) 2>/dev/null
lsof -p $(pgrep php) 2>/dev/null
lsof -p $(pgrep node) 2>/dev/null
# 查看特定进程的网络连接
netstat -tlnp | grep $(pgrep java)
netstat -tlnp | grep $(pgrep python)
netstat -tlnp | grep $(pgrep php)
netstat -tlnp | grep $(pgrep node)
4.3.3 网络连接分析
# 查看所有网络连接
netstat -an
ss -an
# 查看TCP连接
netstat -tlnp
ss -tlnp
# 查看UDP连接
netstat -ulnp
ss -ulnp
# 查看网络统计
netstat -i
ss -s
cat /proc/net/dev
4.4 环境变量检查
4.4.1 系统环境变量
# 查看环境变量
env
printenv
# 查看PATH
echo $PATH
echo $PATH | tr ':' '
'
# 查看特定环境变量
echo $JAVA_HOME
echo $PYTHONPATH
echo $NODE_PATH
echo $MYSQL_HOME
echo $ORACLE_HOME
echo $CATALINA_HOME
echo $TOMCAT_HOME
4.4.2 进程环境变量
# 查看特定进程的环境变量
cat /proc/$(pgrep java)/environ 2>/dev/null | tr '
