【Linux】概览

在这里插入图片描述

个人主页:Guiat
归属专栏:Linux

在这里插入图片描述

文章目录

正文

1. Linux 简介

1.1 什么是 Linux?

Linux 是一个开源的操作系统内核,由 Linus Torvalds 在 1991 年首次发布。它可以运行在多种硬件平台上,从个人电脑到大型服务器,甚至移动设备。Linux 以其高度的可定制性、稳定性和安全性而闻名,其开源的特性使得全球无数开发者可以共同参与改进和完善它。

1.2 Linux 与 Windows 的主要区别

特性LinuxWindows
开源性开源,代码可自由获取、修改和分发闭源,微软拥有代码版权
定制性高度可定制,用户可根据需求调整系统定制程度相对较低
软件安装多通过包管理器,如 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 lscdpwd

ls 用于列出目录内容,cd 用于切换目录,pwd 用于显示当前工作目录。例如:

ls -la  # 列出当前目录所有文件,包括隐藏文件

cd /home/user  # 切换到 /home/user 目录

pwd  # 显示当前所在目录

3.2.2 mkdirtouchrm

mkdir 创建目录,touch 创建文件,rm 删除文件或目录。例如:

mkdir new\_dir  # 创建新目录

touch new\_file.txt  # 创建新文件

rm new\_file.txt  # 删除文件

rm -r new\_dir  # 删除目录及其内容

3.2.3 cpmvfind

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 catmoreless

cat 用于查看文件内容,moreless 用于分页查看。例如:

cat /etc/passwd  # 查看 /etc/passwd 文件内容

more /var/log/syslog  # 分页查看 syslog 文件

less /var/log/dmesg  # 可上下滚动查看 dmesg 文件

3.3.2 grepsedawk

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 unamedffree

uname 查看系统信息,df 查看磁盘使用情况,free 查看内存使用情况。例如:

uname -a  # 显示系统内核等信息

df -h  # 以易读格式显示磁盘使用情况

free -h  # 以易读格式显示内存使用情况

3.4.2 toppskill

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 chownchgrp

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 updateapt 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 源码编译安装

下载软件源码包,解压后进入目录,依次执行 ./configuremakemake 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 useraddusermoduserdel

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 groupaddgroupmod

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 ifconfigipping

ifconfig 查看和配置网络接口,ip 是新一代网络配置工具,ping 测试网络连通性。例如:

ifconfig ens33  # 查看 ens33 网络接口信息

ip addr show ens33  # 查看 ens33 网络接口详细信息

ping 8.8.8.8  # 测试到 8.8.8.8 的网络连通性

7.1.2 netstatss

netstatss 用于查看网络连接和端口状态。例如:

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 循环(forwhile

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 定时任务(croncrontab

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=permissiveSELINUX=disabled,然后重启系统。

10.1.2 AppArmor

AppArmor 也是一种基于 MAC 的安全系统,它通过为每个程序定义一个配置文件来限制程序的访问权限。例如,对于 Apache 服务,AppArmor 配置文件 /etc/apparmor.d/usr.sbin.httpd 定义了 Apache 进程可以访问的文件和目录。启用或禁用 AppArmor 配置文件可使用 aa-enforceaa-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>

&#x20;   ServerName mysite.com

&#x20;   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 \\

&#x20;   ca-certificates \\

&#x20;   curl \\

&#x20;   gnupg \\

&#x20;   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 \\

&#x20; "deb \[arch=\$(dpkg --print -architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\

&#x20; \$(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 \\

&#x20;   \--add - repo \\

&#x20;   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 端口。

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guiat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值