一、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.txt
或head -n 20 file.txt
(显示前20行)
- 示例:
- tail:显示文件末尾部分内容,默认后10行。
- 示例:
tail file.txt
或tail -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.gz
或gunzip 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 -i
或sudo 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使用排序。
- 按
- 常用操作:
- htop:
top
的增强版,提供彩色显示和更友好的交互界面。- 安装:
sudo apt install htop
或sudo 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
- 查看所有TCP连接:
- 示例:
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
- CentOS/RHEL:
- 查看规则:
五、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 编写和执行脚本
-
创建脚本文件:
- 使用编辑器(如
vim
或nano
)创建脚本文件,例如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
- 这将显示脚本执行的每个命令及其参数,便于调试。
- 在Shebang行添加
-
使用
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
- 安装RPM包:
- 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 使用源码编译
-
基本步骤:
-
下载源码:通常从官方网站或Git仓库获取。
wget http://example.com/software.tar.gz tar -xzvf software.tar.gz cd software
-
配置编译选项:
./configure --prefix=/usr/local
--prefix
指定安装路径,默认通常是/usr/local
。
-
编译源码:
make
-
安装软件:
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 gcc
或sudo apt install build-essential
- 安装:
-
make:构建自动化工具。
- 安装:
sudo yum install make
或sudo apt install make
- 安装:
-
git:版本控制工具。
- 安装:
sudo yum install git
或sudo apt install git
- 安装:
-
wget
和
curl:下载工具。
- 安装:
sudo yum install wget curl
或sudo apt install wget curl
- 安装:
-
-
常用库和依赖:
-
OpenSSL:加密库。
- 安装:
sudo yum install openssl-devel
或sudo apt install libssl-dev
- 安装:
-
zlib:数据压缩库。
- 安装:
sudo yum install zlib-devel
或sudo 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 资源监控工具
- top 和 htop:实时监控系统资源使用情况,包括CPU、内存、进程等。
- vmstat:报告虚拟内存统计信息。
- 示例:
vmstat 5
(每5秒刷新一次)
- 示例:
- iostat:报告CPU利用率和磁盘I/O统计信息。
- 示例:
iostat -xz 5
(显示详细的磁盘统计,每5秒刷新一次)
- 示例:
- sar(System Activity Reporter):
- 收集和报告系统活动信息。
- 安装:
sudo yum install sysstat
或sudo apt install sysstat
- 启动数据收集:编辑
/etc/default/sysstat
或/etc/sysconfig/sysstat
,设置ENABLED="true"
- 示例:
sar -u 5 10
(每5秒收集一次,共10次,显示CPU使用率)
3.2 网络监控工具
- iftop:实时监控网络带宽使用情况。
- 安装:
sudo yum install iftop
或sudo apt install iftop
- 启动:
sudo iftop
- 示例:
sudo iftop -i eth0
(监控eth0
接口)
- 安装:
- netstat 和 ss:查看网络连接和套接字信息。
- nload:实时监控网络流量。
- 安装:
sudo yum install nload
或sudo apt install nload
- 启动:
nload
- 安装:
八、性能优化与调优
1. 系统性能调优
1.1 内存、CPU、I/O优化
-
内存优化:
-
监控内存使用:使用
free -m
查看内存使用情况。
free -m
-
交换空间(Swap):
-
查看交换空间:
swapon -s
或free -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使用:使用
top
或htop
查看CPU使用情况。 -
调整进程优先级:
- 使用
nice
启动进程:nice -n 10 command
- 使用
renice
调整已有进程优先级:sudo renice +5 -p PID
- 使用
-
-
I/O优化:
-
监控磁盘I/O:使用
iostat
查看磁盘I/O性能。 -
优化文件系统:
- 使用适合的文件系统(如
ext4
、xfs
、btrfs
)。 - 调整挂载选项,如
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
- 示例:监控GC活动:
- jmap:生成堆转储(heap dump)和查看内存分布。
- 生成堆转储:
jmap -dump:live,format=b,file=heapdump.hprof 12345
- 生成堆转储:
- jstack:生成Java线程堆栈跟踪,分析死锁和线程问题。
- 生成线程堆栈:
jstack 12345 > threaddump.txt
- 生成线程堆栈:
- VisualVM:图形化的JVM监控和分析工具,支持内存、CPU、线程等监控。
- 启动VisualVM:
jvisualvm
- 启动VisualVM:
九、版本控制与协作工具
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任务,设置构建步骤和触发器。
- 访问Jenkins:
-
-
GitLab CI:
-
基本概念:
- GitLab CI集成在GitLab中,通过
.gitlab-ci.yml
文件定义CI/CD流程。
- GitLab CI集成在GitLab中,通过
-
示例
.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的副本和更新。
-
安装:通常使用
kubeadm
、minikube
等工具在本地或服务器上安装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
-
这将只允许
user1
和user2
通过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 灾难恢复计划
- 制定恢复策略:
- 确定关键数据和系统。
- 定义备份频率和保留策略。
- 制定恢复步骤和责任人。
- 测试恢复过程:
- 定期进行恢复演练,确保备份数据可用且恢复过程顺利。
- 使用备份工具和服务:
- 使用自动化备份工具,如
Bacula
、Amanda
。 - 采用云备份服务,如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
测试连通性。 - 检查防火墙设置,确保必要端口开放。
- 使用
netstat
或ss
查看端口是否被监听。
- 使用
- 磁盘空间不足:
- 使用
df -h
查看磁盘使用情况。 - 清理不必要的文件或日志,使用
du -sh *
查找大文件。
- 使用
- 高CPU或内存使用:
- 使用
top
或htop
识别高资源消耗的进程。 - 分析应用程序的性能,优化代码或配置。
- 使用
2.2 使用日志和监控工具进行诊断
-
日志分析:
- 识别错误或异常事件,使用
grep
过滤相关日志。 - 使用
awk
、sed
等工具提取和格式化日志信息。
- 识别错误或异常事件,使用
-
监控工具:
- Prometheus:开源监控和警报系统,适用于收集和查询时间序列数据。
- Grafana:开源数据可视化平台,常与Prometheus配合使用。
- Nagios:老牌监控工具,支持广泛的插件和警报机制。
-
示例诊断流程:
-
确认问题:用户报告无法访问应用。
-
检查服务状态:
sudo systemctl status myapp
-
查看服务日志:
sudo journalctl -u myapp -f
-
检查网络配置:
sudo firewall-cmd --list-all sudo netstat -tuln | grep 8080
-
分析应用日志:
tail -f /var/log/myapp/app.log
-
执行进一步诊断,如查看数据库连接、依赖服务状态等。
-