Linux系统编程基础详解
Linux 系统详解
大纲
-
引言
- Linux 的定义
- Linux 的历史与发展
- 本文结构概述
-
Linux 的基本概念
- Linux 的架构
- 内核与用户空间
- 系统调用
- Linux 的文件系统
- 文件与目录结构
- 权限管理
- Linux 的进程管理
- 进程与线程
- 进程调度
- Linux 的架构
-
Linux 的基本命令与操作
- 常用命令概述
- 文件与目录操作命令
- 文件权限管理命令
- 使用终端
- 终端的基本操作
- Shell 的使用
- 编写简单的 Shell 脚本
- 常用命令概述
-
Linux 的网络配置与管理
- 网络基础知识
- 配置网络接口
- 使用网络命令
-
Linux 的软件包管理
- 软件包的概念
- 常用包管理工具
- 安装与卸载软件
-
Linux 的安全性与权限管理
- 用户与组管理
- 文件权限与安全性
- 防火墙与安全工具
-
Linux 的系统监控与性能调优
- 系统监控工具
- 性能调优方法
- 日志管理
-
总结与展望
- Linux 的未来发展
- 参考文献
1. 引言
1.1 Linux 的定义
Linux 是一种开源的类 Unix 操作系统,最初由 Linus Torvalds 于 1991 年发布。它是基于 Unix 的设计理念,具有多用户、多任务和多线程的特性。Linux 的核心是 Linux 内核,用户可以在其上运行各种应用程序。
1.2 Linux 的历史与发展
Linux 的发展经历了多个阶段:
- 1991 年:Linus Torvalds 发布了第一个 Linux 内核。
- 1992 年:Linux 开始采用 GNU 通用公共许可证(GPL),成为开源软件。
- 1993 年:Linux 逐渐获得了越来越多的用户和开发者支持,形成了多个发行版。
- 2000 年代:Linux 在服务器和嵌入式系统中获得了广泛应用。
- 现在:Linux 已成为全球最流行的操作系统之一,广泛应用于服务器、桌面、移动设备和超级计算机等领域。
1.3 本文结构概述
本文将详细探讨 Linux 的基本概念、命令与操作、网络配置与管理等内容,旨在帮助读者深入理解 Linux 系统的工作原理和使用方法。
2. Linux 的基本概念
2.1 Linux 的架构
Linux 系统的架构主要由内核和用户空间组成。
2.1.1 内核与用户空间
-
内核:是操作系统的核心,负责管理系统资源、进程调度、内存管理、设备驱动等。内核直接与硬件交互,提供系统调用接口供用户空间程序使用。
-
用户空间:是运行用户应用程序的环境,用户程序通过系统调用与内核进行交互。用户空间中的程序无法直接访问硬件资源,必须通过内核提供的接口。
2.1.2 系统调用
系统调用是用户空间程序与内核之间的接口,允许用户程序请求内核执行特权操作,如文件操作、进程管理等。常见的系统调用包括 open()、read()、write()、fork() 等。
2.2 Linux 的文件系统
Linux 的文件系统采用层次化结构,所有文件和目录都从根目录 / 开始。
2.2.1 文件与目录结构
Linux 文件系统的基本结构如下:
/:根目录/bin:存放基本命令的二进制文件/etc:系统配置文件/home:用户主目录/var:可变数据文件,如日志文件/tmp:临时文件
graph TD;A[/] --> B[/bin];A --> C[/etc];A --> D[/home];A --> E[/var];A --> F[/tmp];
2.2.2 权限管理
Linux 文件系统采用权限管理机制,每个文件和目录都有三个权限设置:读(r)、写(w)、执行(x)。权限分为三类:
- 用户(u):文件的所有者
- 组(g):与文件所有者同组的用户
- 其他(o):其他用户
权限可以通过 ls -l 命令查看,并使用 chmod 命令进行修改。
# 查看文件权限
ls -l filename# 修改文件权限
chmod u+x filename # 为文件所有者添加执行权限
2.3 Linux 的进程管理
Linux 是一个多任务操作系统,支持同时运行多个进程。
2.3.1 进程与线程
- 进程:是正在执行的程序的实例,具有独立的内存空间和系统资源。
- 线程:是进程中的一个执行单元,多个线程共享进程的内存空间和资源。
2.3.2 进程调度
Linux 内核使用调度算法来管理进程的执行。常见的调度算法包括:
- 轮转调度(Round Robin):为每个进程分配固定的时间片,时间片用完后切换到下一个进程。
- 优先级调度:根据进程的优先级进行调度,高优先级进程优先执行。
进程的状态可以通过 ps 命令查看,常见状态包括:
- 运行(R):正在运行或可运行的状态
- 睡眠(S):等待某个事件发生
- 停止(T):被暂停的状态
# 查看当前进程
ps aux
3. Linux 的基本命令与操作
3.1 常用命令概述
Linux 提供了丰富的命令行工具,用户可以通过命令行与系统进行交互。
3.1.1 文件与目录操作命令
ls:列出目录内容cd:切换目录cp:复制文件或目录mv:移动或重命名文件或目录rm:删除文件或目录
# 列出当前目录内容
ls -l# 切换到上级目录
cd ..# 复制文件
cp source.txt destination.txt# 移动文件
mv oldname.txt newname.txt# 删除文件
rm file.txt
3.1.2 文件权限管理命令
chmod:修改文件权限chown:修改文件所有者chgrp:修改文件所属组
# 修改文件权限
chmod 755 script.sh# 修改文件所有者
chown user:group file.txt# 修改文件所属组
chgrp group file.txt
3.2 使用终端
终端是与 Linux 系统交互的主要工具,用户可以通过终端输入命令来执行各种操作。
3.2.1 终端的基本操作
- 打开终端:在桌面环境中,通常可以通过快捷键或菜单打开终端。
- 输入命令:在终端中输入命令并按回车执行。
- 查看帮助:使用
man命令查看命令的手册页,例如man ls。
3.2.2 Shell 的使用
Shell 是 Linux 的命令行解释器,负责解析用户输入的命令并执行。常见的 Shell 包括 Bash、Zsh 等。
# 在 Bash 中执行命令
echo "Hello, World!"
3.3 编写简单的 Shell 脚本
Shell 脚本是一种用于自动化任务的脚本语言。以下是一个简单的 Shell 脚本示例:
#!/bin/bash
# Hello World 脚本
echo "Hello, World!"
3.3.1 创建与执行 Shell 脚本
- 创建脚本文件:
nano hello.sh
-
输入脚本内容并保存。
-
赋予执行权限:
chmod +x hello.sh
- 执行脚本:
./hello.sh
3. Linux 的基本命令与操作(续)
3.4 进阶命令与技巧
在掌握了基本命令后,用户可以进一步学习一些进阶命令和技巧,以提高工作效率。
3.4.1 管道与重定向
- 管道(|):将一个命令的输出作为另一个命令的输入。例如,使用
grep过滤ls的输出:
ls -l | grep ".txt" # 列出当前目录下所有的 .txt 文件
- 重定向(> 和 >>):将命令的输出重定向到文件中。
>会覆盖文件,>>会追加到文件末尾。
echo "Hello, World!" > output.txt # 将输出写入文件
echo "Another line" >> output.txt # 追加输出到文件
3.4.2 文件查找与搜索
find:在指定目录下查找文件。
find /path/to/search -name "*.txt" # 查找所有 .txt 文件
grep:在文件中搜索特定字符串。
grep "search_term" filename.txt # 在文件中查找字符串
3.4.3 进程管理命令
top:实时显示系统进程和资源使用情况。
top # 打开进程监视器
kill:终止进程。
kill PID # 终止指定进程
ps:查看当前运行的进程。
ps aux # 列出所有进程
4. Linux 的网络配置与管理
4.1 网络基础知识
在 Linux 系统中,网络配置和管理是非常重要的部分。了解网络基础知识是进行网络管理的前提。
4.1.1 网络协议
- TCP/IP:传输控制协议/互联网协议,是互联网的基础协议,负责数据的传输和路由。
- UDP:用户数据报协议,提供无连接的传输服务,适用于实时应用。
4.1.2 IP 地址
每个连接到网络的设备都有一个唯一的 IP 地址。IP 地址分为 IPv4 和 IPv6 两种类型。
- IPv4:由四个字节组成,通常表示为
192.168.1.1。 - IPv6:由八组十六进制数表示,通常表示为
2001:0db8:85a3:0000:0000:8a2e:0370:7334。
4.2 配置网络接口
在 Linux 中,网络接口的配置可以通过命令行工具进行。
4.2.1 查看网络接口
使用 ifconfig 或 ip 命令查看当前网络接口的状态。
# 使用 ifconfig
ifconfig# 使用 ip
ip addr show
4.2.2 配置静态 IP 地址
可以通过编辑网络配置文件或使用命令行工具来配置静态 IP 地址。以下是使用 ip 命令配置静态 IP 地址的示例:
sudo ip addr add 192.168.1.100/24 dev eth0 # 为 eth0 接口配置静态 IP
sudo ip link set eth0 up # 启用网络接口
4.2.3 配置 DHCP
使用 DHCP(动态主机配置协议)可以自动获取 IP 地址。可以通过以下命令启用 DHCP:
sudo dhclient eth0 # 为 eth0 接口请求 DHCP 地址
4.3 使用网络命令
Linux 提供了多种网络命令,用于管理和测试网络连接。
4.3.1 ping 命令
ping 命令用于测试与远程主机的连接。
ping www.example.com # 测试与 www.example.com 的连接
4.3.2 traceroute 命令
traceroute 命令用于跟踪数据包到达目标主机的路径。
traceroute www.example.com # 跟踪到 www.example.com 的路径
4.3.3 netstat 命令
netstat 命令用于显示网络连接、路由表和网络接口信息。
netstat -tuln # 显示所有监听的 TCP 和 UDP 端口
5. Linux 的软件包管理
5.1 软件包的概念
在 Linux 中,软件包是包含程序及其依赖文件的压缩文件。软件包管理工具用于安装、更新和卸载软件包。
5.2 常用包管理工具
不同的 Linux 发行版使用不同的包管理工具。以下是一些常见的包管理工具:
- Debian/Ubuntu:使用
apt和dpkg。 - Red Hat/CentOS:使用
yum和dnf。 - Arch Linux:使用
pacman。
5.3 安装与卸载软件
5.3.1 使用 apt 安装软件(Debian/Ubuntu)
sudo apt update # 更新软件包列表
sudo apt install package_name # 安装软件包
5.3.2 使用 yum 安装软件(Red Hat/CentOS)
sudo yum install package_name # 安装软件包
5.3.3 卸载软件
使用相应的包管理工具卸载软件包。
# Debian/Ubuntu
sudo apt remove package_name# Red Hat/CentOS
sudo yum remove package_name
5.4 查找软件包
可以使用包管理工具查找可用的软件包。
# Debian/Ubuntu
apt search package_name# Red Hat/CentOS
yum search package_name
6. Linux 的安全性与权限管理
6.1 用户与组管理
在 Linux 中,用户和组是权限管理的基础。每个用户都有一个唯一的用户名和用户 ID(UID),每个组都有一个组名和组 ID(GID)。
6.1.1 添加与删除用户
使用 useradd 命令添加用户,使用 userdel 命令删除用户。
# 添加用户
sudo useradd username# 删除用户
sudo userdel username
6.1.2 添加与删除组
使用 groupadd 命令添加组,使用 groupdel 命令删除组。
# 添加组
sudo groupadd groupname# 删除组
sudo groupdel groupname
6.2 文件权限与安全性
Linux 文件系统采用权限管理机制,每个文件和目录都有读、写、执行权限。
6.2.1 查看与修改文件权限
使用 ls -l 查看文件权限,使用 chmod 修改文件权限。
# 查看文件权限
ls -l filename# 修改文件权限
chmod 755 filename # 设置所有者可读写执行,组和其他用户可读执行
6.2.2 设置文件所有者与组
使用 chown 命令设置文件的所有者和组。
# 修改文件所有者
sudo chown user:group filename
6.3 防火墙与安全工具
Linux 提供了多种防火墙和安全工具,用于保护系统安全。
6.3.1 使用 iptables
iptables 是 Linux 的防火墙工具,用于设置网络流量的过滤规则。
# 查看当前 iptables 规则
sudo iptables -L# 添加规则,允许 SSH 连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
6.3.2 使用 ufw
ufw(Uncomplicated Firewall)是一个简单易用的防火墙工具。
# 启用 ufw
sudo ufw enable# 允许 SSH 连接
sudo ufw allow ssh
7. Linux 的系统监控与性能调优
7.1 系统监控工具
Linux 提供了多种工具用于监控系统性能和资源使用情况。
7.1.1 top 命令
top 命令用于实时监控系统进程和资源使用情况。
top # 打开进程监视器
7.1.2 htop 命令
htop 是 top 的增强版,提供更友好的界面。
htop # 打开 htop 监视器
7.2 性能调优方法
7.2.1 内存管理
使用 free 命令查看内存使用情况。
free -h # 查看内存使用情况
7.2.2 CPU 调度
使用 nice 和 renice 命令调整进程的优先级。
# 启动进程时设置优先级
nice -n 10 command# 修改运行中进程的优先级
renice -n 10 -p PID
7.3 日志管理
Linux 系统会记录各种日志信息,通常存放在 /var/log 目录下。可以使用 tail 命令查看日志文件的最新内容。
tail -f /var/log/syslog # 实时查看系统日志
以上是关于 Linux 系统的详细讲解。希望这些信息能对您有所帮助!
相关文章:
Linux系统编程基础详解
Linux 系统详解 大纲 引言 Linux 的定义Linux 的历史与发展本文结构概述 Linux 的基本概念 Linux 的架构 内核与用户空间系统调用 Linux 的文件系统 文件与目录结构权限管理 Linux 的进程管理 进程与线程进程调度 Linux 的基本命令与操作 常用命令概述 文件与目录操作命令文…...
钉钉应用开发
一.开发调试工具认识与安装 选择微应用调试工具-RC版 微应用调试工具—RC版 - 钉钉开放平台(下载和使用说明) 案例 创建一个钉钉应用 开发工具和安装包 vscode 开发环境 预装node.js---- https://nodejs.org/zh-cn --npm是随Node.js一起安装的 在…...
打破限制!自定义 Hooks 如何提升 React 组件的灵活性
本周开发监控项目,我发现了很多的 React 类组件封装,发现出现了多次UI渲染的情况、代码辨识度也较差,对性能和维护都产生了挑战。这里多个场景的都是状态管理和逻辑复用需求,其实完全没有必要封装类组件。相反我通过引入 React 自…...
使用arthas测试接口响应时间
一、下载解压 git下载地址: https://github.com/alibaba/arthas/releases 二、启动和选择Java进程 java -jar arthas-boot.jar选择需要测试的java进程,我输入1然后回车 三、使用trace命令 trace 全路径 方法名 trace com.xxx.b2b.mall.goods.service…...
Vue3.x的深度选择器详细解读
在 Vue 3 中,深度选择器(Deep Selector)用于在 <style scoped> 中穿透作用域样式,影响子组件的样式。Vue 3 中深度选择器的语法与 Vue 2 有所不同,以下是详细说明: 1. 深度选择器的作用 在 Vue 的单…...
基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)
基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频,带爬虫 配套论文1w5字 可定制到某个省份,加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频,加20 旅游数据分析推荐系统采用了Python语…...
Django ModelForm使用(初学)
1.目的是根据员工表字段,实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写 定义 ModelForm 类:UserModelForm (自己命名的类名)使用时需要导入包 定义视图函数:user_model_form_add(在函…...
android ViewPager 管理 Fragment的预加载onCreate
一、前言 当ViewPager 加载多个 Fragment时候,怎么管理Fragment预加载。因为有些数据需要提前加载,第一个方便后面数据使用,提前初始化。或者预加载网络数据等。 二、实现示例 在onCreate方法进行数据预加载。如果在onCreateView函数里面&…...
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。充分利用现有…...
国产编辑器EverEdit -告别东找西找!一键打开当前文件所在目录!
1 文件操作 2 应用场景 在文件编辑过程中,有时需要对文件进行一些操作,比如:在命令窗口输入文件路径、文件名,进入到文件目录,对文件进行压缩等,如果没有直达命令,用户需要通过文件管理器找到目…...
【分治法】线性时间选择问题
问题描述 给定线性序列中n个元素和一个整数k,1≤k≤n,要求在线性时间中找出这n个元素中第k小的元素 常规思路 常规思路是对序列先排序,落在第k个位置的元素就是第k小的元素。 这种方法的时间复杂度不是线性的,是O(nlogn)的时间…...
SpringBoot速成(16)项目部署P30
部署是一个非常重要的环节。部署的目的是将开发完成的程序运行在服务器上,让其他用户或系统能够访问和使用它。 让程序对外提供服务 开发环境的局限性:开发环境通常是本地计算机,仅供开发人员使用。但实际应用需要让其他用户(比如…...
【Mysql:数据库的基础操作】
目录 数据库创建,删除基础指令: 数据库的编码集: 数据库备份与恢复: 表的操作: 数据库创建,删除基础指令: show databases;//查看数据库列表//创建数据库 create database db_name; crea…...
Nacos Derby 远程命令执行漏洞修复建议
由于Nacos < 2.4.0 BETA 存在 Derby 远程命令执行漏洞,恶意攻击者利用此漏洞可以未授权执行SQL语句,最终导致任意代码执行。目前该漏洞PoC和技术细节已在互联网上公开。 一、漏洞情况分析 Nacos 是一个功能强大的服务注册与发现、配置管理平台&#…...
idea 2023.3.7常用插件
idea 2023.3.7常用插件 文档 idea 2019.3常用插件idea 2023.3.7常用插件 idea 2023.3.7常用插件 插件名称插件版本说明1AceJump3.5.9AceJump允许您快速将插入符号导航到编辑器中可见的任何位置。只需按“ctrl;”,键入一个字符,然后在Ace …...
DeepSeek和ChatGPT在科研课题设计和SCI论文写作中的应用
DeepSeek和ChatGPT在科研课题设计和SCI论文写作中的应用 一、DeepSeek和ChatGPT的基础理论 (理论讲解案例分析) 1.DeepSeek的技术架构 (1)DeepSeek的定义与核心目标 (2)DeepSeek的主要类型 如DeepSeek-R1、DeepSeek-V3等 (3)DeepSeek的主要创新点、优势能力以及主要应用场景 2.…...
kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决
kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。有时候有很多部门提了建k8s的需求,有些是临…...
2024年河北省职业院校技能大赛网络系统管理赛项样题解法
有问题请留言或主页私信咨询 2024年河北省职业院校技能大赛 网络系统管理赛项 网络构建 目录 任务描述 任务清单 (一)基础配置 (二)有线网络配置 (三)无线网络配置 (四&am…...
【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
本文项目编号 T 203 ,文末自助获取源码 \color{red}{T203,文末自助获取源码} T203,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
纯新手教程:用llama.cpp本地部署DeepSeek蒸馏模型
0. 前言 llama.cpp是一个基于纯C/C实现的高性能大语言模型推理引擎,专为优化本地及云端部署而设计。其核心目标在于通过底层硬件加速和量化技术,实现在多样化硬件平台上的高效推理,同时保持低资源占用与易用性。 最近DeepSeek太火了&#x…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
