文章目录
正文
1. Linux 简介
1.1 什么是 Linux?
Linux 是一个开源的操作系统内核,由 Linus Torvalds 在 1991 年首次发布。它可以运行在多种硬件平台上,从个人电脑到大型服务器,甚至移动设备。Linux 以其高度的可定制性、稳定性和安全性而闻名,其开源的特性使得全球无数开发者可以共同参与改进和完善它。
1.2 Linux 与 Windows 的主要区别
特性 | Linux | Windows |
---|---|---|
开源性 | 开源,代码可自由获取、修改和分发 | 闭源,微软拥有代码版权 |
定制性 | 高度可定制,用户可根据需求调整系统 | 定制程度相对较低 |
软件安装 | 多通过包管理器,如 APT、YUM 等 | 多从软件官网下载安装包 |
安全性 | 基于权限的安全模型,较少受病毒攻击 | 易受病毒和恶意软件影响 |
命令行 | 命令行功能强大,常用于系统管理 | 命令行功能相对较弱 |
1.3 Linux 发行版简介
1.3.1 Ubuntu/Debian
Ubuntu 基于 Debian 开发,以易用性和活跃的社区支持著称。Debian 则以稳定性和丰富的软件包而闻名。它们都使用 APT 包管理器,适合初学者和桌面用户。例如,在 Ubuntu 上安装软件只需一行命令:
sudo apt install firefox
1.3.2 CentOS/RHEL
CentOS 是 Red Hat Enterprise Linux(RHEL)的社区版,二者都以稳定性和企业级支持为核心。常用于服务器环境,使用 YUM 或 DNF 包管理器。安装软件命令如下:
sudo yum install httpd
1.3.3 Fedora/Arch Linux
Fedora 注重创新和新技术应用,常作为新功能的试验田。Arch Linux 则强调轻量级和用户定制,适合有一定经验的用户。例如,在 Fedora 上更新系统:
sudo dnf update
1.4 Linux 的应用场景
Linux 在服务器领域占据主导地位,广泛应用于 Web 服务器、数据库服务器、邮件服务器等。同时,在嵌入式系统、超级计算机、移动设备(如 Android 基于 Linux 内核)等领域也有大量应用。
1.5 Linux 系统架构(内核、Shell、文件系统)
Linux 系统由内核、Shell 和文件系统组成。内核负责管理硬件资源,Shell 为用户提供与内核交互的接口,文件系统则负责组织和存储数据。三者关系如图所示:
[此处插入 Linux 系统架构图,展示内核、Shell 和文件系统的关系]
2. Linux 安装与配置
2.1 虚拟机安装(VMware/VirtualBox)
2.1.1 创建虚拟机
在 VMware 或 VirtualBox 中创建虚拟机时,需指定内存、硬盘空间等参数。例如,在 VirtualBox 中创建虚拟机步骤如下:
打开 VirtualBox,点击 “新建”。
输入虚拟机名称,选择 Linux 系统类型和版本。
设置内存大小,建议 2GB 以上。
创建虚拟硬盘,选择动态分配或固定大小。
2.1.2 安装 Linux 系统
将下载好的 Linux 镜像文件挂载到虚拟机光驱,启动虚拟机后按照安装向导进行操作。以 Ubuntu 安装为例:
选择语言和安装类型。
设置用户名、密码等信息。
等待安装完成,重启虚拟机。
2.2 物理机安装(U 盘启动盘制作)
使用工具如 Rufus 将 Linux 镜像写入 U 盘,制作启动盘。在物理机 BIOS 中设置从 U 盘启动,按照安装向导完成安装。
2.3 初次配置
2.3.1 更新软件源
在 Ubuntu 中,编辑 /etc/apt/sources.list
文件,添加或更新软件源地址,然后执行:
sudo apt update
2.3.2 设置网络连接
使用 nmcli
命令设置网络连接,例如设置静态 IP:
sudo nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
sudo nmcli connection up ens33
2.3.3 安装基础工具(如 SSH、Vim)
安装 SSH 服务:
sudo apt install openssh-server
安装 Vim 编辑器:
sudo apt install vim
3. Linux 基本操作与命令
3.1 终端(Terminal)基础
3.1.1 命令语法结构
命令通常由命令名称、选项和参数组成,例如:
ls -l /home
其中 ls
是命令名称,-l
是选项,/home
是参数。
3.1.2 快捷键与 Tab 补全
常用快捷键如 Ctrl+C
终止命令,Ctrl+L
清屏。Tab 键可用于命令和文件名补全,提高输入效率。
3.2 文件和目录操作
3.2.1 ls
、cd
、pwd
ls
用于列出目录内容,cd
用于切换目录,pwd
用于显示当前工作目录。例如:
ls -la # 列出当前目录所有文件,包括隐藏文件
cd /home/user # 切换到 /home/user 目录
pwd # 显示当前所在目录
3.2.2 mkdir
、touch
、rm
mkdir
创建目录,touch
创建文件,rm
删除文件或目录。例如:
mkdir new\_dir # 创建新目录
touch new\_file.txt # 创建新文件
rm new\_file.txt # 删除文件
rm -r new\_dir # 删除目录及其内容
3.2.3 cp
、mv
、find
cp
复制文件或目录,mv
移动或重命名文件 / 目录,find
查找文件。例如:
cp file.txt /backup/ # 复制 file.txt 到 /backup 目录
mv old\_name.txt new\_name.txt # 重命名文件
find / -name "\*.log" # 在根目录下查找所有.log 文件
3.3 文本处理命令
3.3.1 cat
、more
、less
cat
用于查看文件内容,more
和 less
用于分页查看。例如:
cat /etc/passwd # 查看 /etc/passwd 文件内容
more /var/log/syslog # 分页查看 syslog 文件
less /var/log/dmesg # 可上下滚动查看 dmesg 文件
3.3.2 grep
、sed
、awk
grep
用于搜索文本,sed
用于文本替换,awk
用于文本处理和数据提取。例如:
grep "error" /var/log/syslog # 在 syslog 文件中搜索包含 "error" 的行
sed's/old\_text/new\_text/g' file.txt # 将 file.txt 中的 old\_text 替换为 new\_text
awk -F: '{print \$1}' /etc/passwd # 打印 /etc/passwd 文件中每行的第一个字段
3.4 系统信息查看
3.4.1 uname
、df
、free
uname
查看系统信息,df
查看磁盘使用情况,free
查看内存使用情况。例如:
uname -a # 显示系统内核等信息
df -h # 以易读格式显示磁盘使用情况
free -h # 以易读格式显示内存使用情况
3.4.2 top
、ps
、kill
top
实时查看系统进程状态,ps
查看当前进程,kill
终止进程。例如:
top # 启动 top 命令,实时监控进程
ps aux # 查看所有进程
kill -9 1234 # 强制终止进程号为 1234 的进程
4. 文件系统与权限管理
4.1 Linux 文件系统结构(FHS 标准)
Linux 文件系统遵循 FHS(Filesystem Hierarchy Standard)标准,各主要目录作用如下:
目录 | 作用 |
---|---|
/bin | 存放基本命令 |
/etc | 存放系统配置文件 |
/home | 用户主目录 |
/var | 存放可变数据,如日志文件 |
/usr | 存放共享、只读的程序和数据 |
4.2 文件权限与所有权
4.2.1 chmod
(数字与符号模式)
数字模式下,权限用三位八进制数表示,如 755
表示所有者有读、写、执行权限,组用户和其他用户有读、执行权限。符号模式可更直观地修改权限,例如:
chmod u+rwx,g+rx,o+rx file.txt # 为所有者添加读写执行权限,组用户和其他用户添加读执行权限
chmod 755 file.txt # 等同于上述操作
4.2.2 chown
、chgrp
chown
更改文件所有者,chgrp
更改文件所属组。例如:
sudo chown new\_user file.txt # 将 file.txt 的所有者改为 new\_user
sudo chgrp new\_group file.txt # 将 file.txt 的所属组改为 new\_group
4.3 链接文件(硬链接与软链接)
硬链接是文件的另一个名称,与原文件共享相同的 inode。软链接则是一个指向原文件的特殊文件。创建链接示例:
ln file.txt hard\_link.txt # 创建硬链接
ln -s file.txt soft\_link.txt # 创建软链接
5. 软件包管理
5.1 包管理工具概述
包管理工具负责安装、更新和卸载软件包,简化软件管理流程。常见包管理工具如 APT(Debian/Ubuntu)、YUM/DNF(CentOS/RHEL/Fedora)等。
5.2 APT(Debian/Ubuntu)
5.2.1 apt update
、apt install
apt update
更新软件源索引,apt install
安装软件包。例如:
sudo apt update
sudo apt install python3
5.2.2 软件源配置
编辑 /etc/apt/sources.list
文件,添加或修改软件源地址,以获取最新软件包。
5.3 YUM/DNF(CentOS/RHEL/Fedora)
在 CentOS 中使用 YUM,在 Fedora 中使用 DNF。例如安装软件:
sudo yum install httpd # CentOS 安装 httpd 服务
sudo dnf install firefox # Fedora 安装 firefox 浏览器
5.4 源码编译安装
下载软件源码包,解压后进入目录,依次执行 ./configure
、make
、make install
命令进行安装。例如安装 Nginx:
wget http://nginx.org/download/nginx-1.20.2.tar.gz
tar -zxvf nginx-1.20.2.tar.gz
cd nginx-1.20.2
./configure
make
sudo make install
6. 用户与组管理
6.1 用户账户操作
6.1.1 useradd
、usermod
、userdel
useradd
创建用户,usermod
修改用户属性,userdel
删除用户。例如:
sudo useradd new\_user -m -s /bin/bash # 创建新用户,创建主目录并指定默认 shell
sudo usermod -L new\_user # 锁定用户
sudo userdel new\_user # 删除用户
6.1.2 密码管理(passwd
)
passwd
命令用于设置或修改用户密码。例如:
sudo passwd new\_user # 设置 new\_user 的密码
6.2 用户组管理
6.2.1 groupadd
、groupmod
groupadd
创建用户组,groupmod
修改用户组属性。例如:
sudo groupadd new\_group # 创建新用户组
sudo groupmod -n new\_name old\_name # 修改用户组名称
6.3 权限控制(sudo
与 /etc/sudoers
)
通过 sudo
命令,普通用户可临时获得管理员权限。编辑 /etc/sudoers
文件可配置用户的 sudo 权限。例如,允许 user1 执行所有命令:
user1 ALL=(ALL) ALL
7. 网络配置与管理
7.1 网络基础命令
7.1.1 ifconfig
、ip
、ping
ifconfig
查看和配置网络接口,ip
是新一代网络配置工具,ping
测试网络连通性。例如:
ifconfig ens33 # 查看 ens33 网络接口信息
ip addr show ens33 # 查看 ens33 网络接口详细信息
ping 8.8.8.8 # 测试到 8.8.8.8 的网络连通性
7.1.2 netstat
、ss
netstat
和 ss
用于查看网络连接和端口状态。例如:
netstat -tunlp # 查看所有 TCP、UDP 网络连接及对应的进程
ss -tunlp # 功能类似 netstat
7.2 SSH 远程连接
7.2.1 密钥对认证配置
生成密钥对:
ssh-keygen -t rsa
将公钥复制到远程服务器:
ssh-copy-id user@remote\_server
7.3 防火墙配置
7.3.1 ufw
(Ubuntu)
在 Ubuntu 中启用和配置 ufw
防火墙:
sudo ufw enable # 启用防火墙
sudo ufw allow ssh # 允许 SSH 连接
7.3.2 firewalld
(CentOS)
在 CentOS 中启用和配置 firewalld
防火墙:
sudo systemctl start firewalld # 启动防火墙
sudo firewall-cmd --add-service=http --permanent # 允许 HTTP 服务
sudo firewall-cmd --reload # 重新加载配置
8. Shell 脚本编程基础
8.1 Shell 脚本简介
Shell 脚本是一系列 Shell 命令的集合,可用于自动化任务、简化系统管理。例如,创建一个简单的脚本 hello.sh
:
\#!/bin/bash
echo "Hello, World!"
赋予执行权限并运行:
chmod +x hello.sh
./hello.sh
8.2 基本语法
8.2.1 变量与环境变量
定义变量:
name="John"
echo \$name
使用环境变量:
echo \$PATH
8.2.2 条件语句(if-else
)
num=10
if \[ \$num -gt 5 ]; then
  echo "Number is greater than 5"
else
  echo "Number is less than or equal to 5"
fi
8.2.3 循环(for
、while
)
for
循环示例:
for i in {1..5}; do
  echo \$i
done
while
循环示例:
count=1
while \[ \$count -le 5 ]; do
  echo \$count
  count=\$((count + 1))
done
8.3 函数与参数传递
定义函数:
add\_numbers() {
  sum=\$(( \$1 + \$2 ))
  echo \$sum
}
调用函数并传递参数:
result=\$(add\_numbers 3 5)
echo \$result
8.4 实用脚本案例(如备份脚本)
备份脚本示例:
\#!/bin/bash
source\_dir="/home/user/data"
backup\_dir="/backup/user\_data\_\$(date +%Y%m%d%H%M%S)"
mkdir -p \$backup\_dir
cp -r \$source\_dir \$backup\_dir
echo "Backup completed."
9. 系统服务与进程管理
9.1 Systemd 基础
9.1.1 systemctl
命令(启动 / 停止 / 重启服务)
在现代 Linux 系统中,Systemd 成为主流的初始化系统,负责管理系统服务和进程。systemctl
是与 Systemd 交互的主要命令。例如,启动 Apache 服务:
sudo systemctl start httpd
停止服务:
sudo systemctl stop httpd
重启服务:
sudo systemctl restart httpd
还可以查看服务状态:
sudo systemctl status httpd
若服务处于活动状态,会显示类似如下信息:
● httpd.service - The Apache HTTP Server
  Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Active: active (running) since Mon 2025-03-03 14:25:10 UTC; 3min 15s ago
  Docs: man:httpd(8)
  man:apachectl(8)
 Main PID: 1234 (httpd)
  Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
  Tasks: 213 (limit: 4915)
  Memory: 12.5M
  CGroup: /system.slice/httpd.service
  ├─1234 /usr/sbin/httpd -DFOREGROUND
  ├─1235 /usr/sbin/httpd -DFOREGROUND
  ├─1236 /usr/sbin/httpd -DFOREGROUND
  ├─1237 /usr/sbin/httpd -DFOREGROUND
  └─1238 /usr/sbin/httpd -DFOREGROUND
9.1.2 服务配置文件解析
服务配置文件通常位于 /etc/systemd/system/
目录下,以 .service
结尾。例如,httpd.service
的配置文件内容如下:
\[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
\[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd \$OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd \$OPTIONS -k graceful
ExecStop=/bin/kill -WINCH \${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true
\[Install]
WantedBy=multi-user.target
[Unit]
部分描述服务的基本信息和依赖关系;[Service]
部分定义服务的启动、停止和重启等操作;[Install]
部分指定服务在哪些运行级别下启动。
9.2 定时任务(cron
与 crontab
)
cron
是 Linux 系统中的定时任务服务,crontab
用于管理用户的定时任务。每个用户都可以通过 crontab -e
命令编辑自己的定时任务列表。例如,设置每天凌晨 2 点执行一次备份脚本:
0 2 \* \* \* /path/to/backup\_script.sh
这行命令中,五个字段分别表示分钟(0 - 59)、小时(0 - 23)、日期(1 - 31)、月份(1 - 12)、星期(0 - 6,0 表示周日)。
10. Linux 安全基础
10.1 文件系统安全(SELinux/AppArmor)
10.1.1 SELinux
SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)安全模块,它为文件、进程和用户分配安全上下文。例如,在 SELinux 处于强制模式下,若一个进程试图访问没有相应权限的文件,即使该进程的所有者具有文件的读写权限,访问也会被拒绝。可以通过 sestatus
命令查看 SELinux 的状态:
sestatus
若输出 SELinux status: enabled
,表示 SELinux 已启用。要临时切换到宽容模式(仅记录违反规则的操作,但不阻止),可执行:
setenforce 0
要永久更改 SELinux 模式,需编辑 /etc/selinux/config
文件,将 SELINUX=enforcing
修改为 SELINUX=permissive
或 SELINUX=disabled
,然后重启系统。
10.1.2 AppArmor
AppArmor 也是一种基于 MAC 的安全系统,它通过为每个程序定义一个配置文件来限制程序的访问权限。例如,对于 Apache 服务,AppArmor 配置文件 /etc/apparmor.d/usr.sbin.httpd
定义了 Apache 进程可以访问的文件和目录。启用或禁用 AppArmor 配置文件可使用 aa-enforce
和 aa-complain
命令:
sudo aa-enforce /etc/apparmor.d/usr.sbin.httpd # 强制模式
sudo aa-complain /etc/apparmor.d/usr.sbin.httpd # 宽容模式
10.2 日志管理(journalctl
)
journalctl
用于查看和管理系统日志。它收集了内核、系统服务和应用程序的日志信息。例如,查看系统启动日志:
journalctl -b
查看某个服务的日志,如 httpd
服务:
journalctl -u httpd
还可以根据时间范围查看日志,例如查看过去一小时的日志:
journalctl --since "1 hour ago"
10.3 安全最佳实践
10.3.1 最小化权限原则
只给用户和进程分配完成任务所需的最小权限。例如,普通用户不需要执行 sudo
命令的权限,除非确实有必要。在文件权限设置上,避免赋予过多的读写执行权限。对于一个只需要读取的文件,将其权限设置为 444
(所有者、组用户和其他用户都只有读权限)。
10.3.2 定期更新与漏洞修复
定期使用包管理器更新系统软件包,以修复已知的安全漏洞。在 Ubuntu 上:
sudo apt update && sudo apt upgrade
在 CentOS 上:
sudo yum update
11. 实战场景与应用
11.1 Web 服务器部署(Nginx/Apache)
11.1.1 Nginx 部署
安装 Nginx:
在 Ubuntu 上:
sudo apt install nginx
在 CentOS 上:
sudo yum install nginx
配置 Nginx:编辑 /etc/nginx/nginx.conf
或在 /etc/nginx/conf.d/
目录下创建新的配置文件。例如,创建一个简单的虚拟主机配置文件 /etc/nginx/conf.d/mysite.conf
:
server {
  listen 80;
  server\_name mysite.com;
  location / {
  root /var/www/html/mysite;
  index index.html index.htm;
  }
}
启动 Nginx 服务:
sudo systemctl start nginx
11.1.2 Apache 部署
安装 Apache:
在 Ubuntu 上:
sudo apt install apache2
在 CentOS 上:
sudo yum install httpd
配置 Apache:编辑 /etc/httpd/conf/httpd.conf
或在 /etc/httpd/conf.d/
目录下创建新的配置文件。例如,创建一个虚拟主机配置文件 /etc/httpd/conf.d/mysite.conf
:
\<VirtualHost \*:80>
  ServerName mysite.com
  DocumentRoot /var/www/html/mysite
\</VirtualHost>
启动 Apache 服务:
sudo systemctl start httpd
11.2 数据库安装(MySQL/PostgreSQL)
11.2.1 MySQL 安装
在 Ubuntu 上安装 MySQL:
sudo apt install mysql-server
安装过程中,会提示设置 root 用户密码。安装完成后,可通过以下命令登录 MySQL:
mysql -u root -p
进行一些基本的安全设置,如删除匿名用户、禁止 root 远程登录等:
DELETE FROM mysql.user WHERE User='';
UPDATE mysql.user SET Host='localhost' WHERE User='root';
FLUSH PRIVILEGES;
11.2.2 PostgreSQL 安装
在 Ubuntu 上安装 PostgreSQL:
sudo apt install postgresql
默认情况下,PostgreSQL 创建一个名为 postgres
的系统用户。切换到该用户并启动 PostgreSQL 命令行工具:
sudo su - postgres
psql
在 psql
提示符下,可以创建新用户和数据库:
CREATE USER new\_user WITH PASSWORD 'password';
CREATE DATABASE new\_database OWNER new\_user;
11.3 容器化入门(Docker 基础)
安装 Docker:
在 Ubuntu 上:
sudo apt-get update
sudo apt-get install \\
  ca-certificates \\
  curl \\
  gnupg \\
  lsb - release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \\
  "deb \[arch=\$(dpkg --print -architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\
  \$(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker - ce docker - ce - cli containerd.io docker - compose - plugin
在 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 docker - ce - cli containerd.io docker - compose - plugin
验证 Docker 安装:
sudo docker run hello - world
拉取并运行一个简单的容器,如运行一个基于 nginx
镜像的容器:
sudo docker pull nginx
sudo docker run -d -p 8080:80 nginx
上述命令中,-d
表示在后台运行容器,-p 8080:80
将容器的 80 端口映射到主机的 8080 端口。
结语
感谢您的阅读!期待您的一键三连!欢迎指正!