第1章 计算机体系结构与操作系统

  1. 计算科学与计算机系统

冯诺依曼体系的结构要点

计算机数制采用二进制,程序指令和数据统一存储,计算机应按照程序顺序执行。按照冯诺依曼结构设计的计算机由 控制器,运算器,存储器和输入设备,输出设备五部分组成。冯诺依曼:控制+运算+存储+输入+输出 设备

  1. 控制器运算器 构成现代通用计算机系统的中央处理器 (CPU,central processing unit),即传统的单核CPU。
  2. 在主存储器中实现存入要执行的程序和要处理的数据,运行时 CPU将自动并按顺序从主存储器中取出指令一条一条执行。冯诺依曼结构的计算机系统映射现实世界的时空观,存储体系对应空间域,指令顺序执行过程对应时间域。

计算机体系结构的基本概念

计算机系统的层次结构

计算机系统是由软件硬件组成的一个复杂的有机整体

计算机系统的层次结构

把计算机系统按功能可分为多级层次结构。第0层:数字逻辑层,第1层:微体系结构层,第2层:传统机器层,第3层:操作系统层,第4层:汇编语言层,第5层:高级语言层,第6层:应用程序层。

 计算机系统结构设计者所关心的是(机器语言或汇编语言程序员)所看到的计算机结构

指令集
  • 指令集是一个计算机系统支持的所有机器指令的集合,它常常被看作软硬件之间的分界面。
  • 计算机中最普通的指令格式是:操作码+操作数(地址)。用二进制数据来表示。
  • 根据操作数的数量不同,可以将指令格式分为:零地址指令,一地址指令、二地址指令、三地址指令和多地址指令。
  • 寻址方式按指令的寻址空间来分,可分为立即数寻址、寄存器寻址、主存寻址和堆栈寻址4种。
  • 指令的功能分类:
    • 从指令的从操用计算机的指令系统中常见的指令类型包括:数据传输指令、算术运算指令、逻辑运算指令、程序控制指令、输入输出指令、处理器控制和调试指令。

指令集因其系统性和复杂性,也被称为指令集体系结构ISA(instruction set architecture)

按照指令系统复杂程度不同,ISA可分为CISCRISC两大阵营。CISC是指复杂指令系统计算机complex instruction set computer; RISC是指精简指令系统计算机 reduced instruction set computer.  此人爱四川(CR I SC)

CISC结构追求的目标是强化指令功能,减少程序的指令条数,以达到提高性能的目的。RISC通过减少指令种类、规范指令格式和简化寻址方式等方法,方便处理器内部的并行处理,提高超大规模集成电路VLSI期间的使用效率,从而大幅度的提高处理器的性能。

存储系统
  • 现代通用计算机中存储系统的层次结构:

第一层寄存器组,第二层高速缓冲存储器(cache),第三层主存储器,第四层辅助存储器,第五层脱机存储器。存储介质越往上速度越快、价格越高,越往下,容量越大。

  • 程序访问的局部性包含时间局部性空间局部性两方面。

时间局部性是指最近访问过的内容很可能会在短期内被再次访问。如程序中的循环,循环体的指令要被反复执行。空间局部性是指某个存储单位被访问,短时间内其附近的存储单元也会被访问。


  1. “Cache-主存-辅存”是存储体系里最重要的三级层次,通常将其分为“Cache-主存”和“主存-辅存”两个两级存储系统来讨论。“主存-辅存”两级存储系统也称为虚拟存储系统。
  2. “Cache-主存”层次的理论依据是程序局部性。
  3. Cache与主存储器间最基本的地址映射方式有三种:全相联映射、直接映射和组相联映射。
  4. 在采用全相联映射和组相联映射的系统中,当主存向Cache传送一个新块而Cache已满时,就需要使用替换算法将Cache中的某一块换出。常用替换算法有随机法(RAND),先进先出(FIFO)、最近最少使用法(LRU)。
  5. Cache读写过程设计数据一致性的问题,一致性是指同一份数据在不同存储位置的多个拷贝应保持一致。Cache的一致性体现在连个方面,一是Cache和主存之间的数据一致性,二是各个处理器内核私有的Cache之间的数据一致性。
  6. Cache与主存之间的数据一致性通过Cache特定的写操作方式来保证:写直达(write through),写回(write back)
  7. 多核处理器中,处理器内核之间的缓存一致性通过缓存一致性协议类维护,MESI(Modified Exclusive Shared or Invalid)最为经典的缓存一致性协议
  8. MESI协议将Cache Line 的状态分成 修改(Modify)、独占(Exclusive)、共享(Shared)和失效(Invalid)MESI协议:修改独占,使之失效,使之共享
  9. 虚拟存储系统的提出是为了满足应用程序对高速大容量主存的需求,扩大存储系统的容量,速度慢。“主存-辅存”层次的存储管理技术称为虚拟存储管理技术。

微处理器体系结构

  • 微处理器,即中央处理器CPU 是计算机系统中最重要、最核心的部件
  • CPU 单核处理器基本逻辑结构,主要由控制器、运算器和存储单元三部分组成,这三部份由CPU内部总线相连。
  • 目前,通用处理器芯片基本上都采用了多核处理器(Chip Multi-Processor,CMP)架构。

按照计算内核的对等与否,CMP可分为同构多核和异构多核:计算内核相同、地位对等的称为同构多核;计算内核不同、地位不对等的称为异构多核,多采用“主处理核+协处理核”的设计。异同构多核

    • CPU指令执行过程基本上包含5个阶段:取指令、指令译码、执行指令、访存取数、结果写回

    操作系统的基本概念

    • 操作系统是通用计算机系统中不可或缺的系统软件
    • 计算机系统的资源按照其作用可大致分为四类:处理器、存储器、I/O设备和文件。
    • 对这四类资源的管理就是操作系统内核的主要功能。
    操作系统的基本特征

    现代通用操作系统一般具有并发、共享、虚拟和异步这四个基本特征。

    1. 并发是指两个或多个事件在同一时间间隔内发生。
    2. 共享是指计算机系统中的软硬件资源可被多个并发执行的进程共同使用,而不是被一个进程所独占。
    3. 虚拟是指把一个物理上的实体变为一个或多个逻辑上的对应物。
    4. 异步又称随机性或不确定性,异步是指在相同的计算机环境和初始条件下,在同一数据集上运行的同一程序每次执行的顺序和所需时间都不一定相同

    (避免混淆:并行是指两个或多个事件在同一时刻发生

    操作系统的基本功能和原理

    从资源管理的角度来看,操作系统具备五大基本功能:处理器管理、存储管理、设备管理、文件管理和作业管理。操作系统的基本功能是:处理器设备用来储存文件和作业

    处理器管理

    处理器管理的功能主要有两个:中断处理和进程管理。

    中断处理

    在处理器上运行的指令,根据权限可分为两种:

    特权指令:只能被操作系统内核使用的指令,这些指令设计改变机器状态、修改寄存器内容、启动设备等敏感操作。

    非特权指令:所有程序都能使同的指令。

    处理器的运行状态一般分为内核态用户态,在内核态下能执行所有指令,在用户态下只能执行非特权指令。

    用户态切换到内核态3种方式:系统调用,异常,外围设备的中断。3种方式都通过中断机制发生。

    中断是指CPU对系统事件的响应,它暂停当前程序,保存现场后执行相应的处理程序。处理完成后,如果被中断进程优先级最高,则从中断点继续执行被“打断”的程序。

    引起中断的事件或发出中断请求的来源称为中断源中断源向CPU提出的处理请求称为中断请求。发生中断时,被打断程序的暂停点称为断点

    中断概念的另一个发展是访管指令(即访问管理指令或系统调用)的使用。

    中断类型 按功能划分

    这种分类法类似于IBM 360/370系统的分类法,所有中断源分为5类。

    1. 机器故障中断:当机器发生错误时触发,用于反映硬件故障,进入诊断程序处理,如电路错误、电源故障或内存读写错误等。
    2. I/O中断:来自外部设备或通道,反映设备工作情况,如打印机完成打印、磁盘传输完成或终端输入输出等。
    3. 外部中断:来自计算机外部装置,用于反映外界对系统的请求,如计时器溢出、操作者按键或多机系统信号等。
    4. 程序性中断:因指令或数据使用错误触发,用于反映程序执行中的异常情况,如非法操作码、无效地址或运算溢出等。
    5. 访管中断:由于执行访问管理指令触发,用于将CPU从用户态切换到管理态,由操作系统处理资源请求。

    在配置了通道的计算机系统中,用户程序需要进行输入/输出时,引发的中断是访管中断

    进程管理

    进程是计算机中程序在某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。进程与程序是既有联系又有区别的概念。

    • 进程是一个动态概念,具有并发特性,并在计算机运行期间存在;而程序是静态的,可以长期保存在外存上。
    • 进程和程序并不总是一一对应,同一个程序执行在不同数据集上会形成多个进程。
    • 进程由程序数据控制块组成,而程序只是代码本身。

    为了描述进程的动态变化过程,使用了进程控制块(PCB),它是进程存在的唯一标志。

    线程是被处理器调度运行的最小单位,包含在进程中。每个线程代表进程中的一个单一控制流,一个进程可以并发多个线程,每个线程并行执行不同任务。

    进程的状态及转换

    3种基本状态是:运行态(running),就绪态(ready),等待态(wait):又称阻塞态(blocked)或睡眠态(sleep)。实际系统中增加两个进程状态:新建态(new),终止态(exit)

    图片中的对应关系要记住!

    已经获得除 CPU 以外的所有运行所需资原的进程处于就堵状态

    存储管理

    存储管理将用户源程序转化为可以在内存中执行的程序,主要包括以下步骤:

    1. 编译:将源代码转化为机器代码。
    2. 链接:将多个目标代码文件链接成一个可执行文件。
    3. 装入:将可执行文件加载到内存中,准备执行。

    存储器管理的主要功能包括:

    • 内存空间的分配与回收:合理分配内存空间给进程,并在进程结束时回收内存。
    • 地址转换:将虚拟地址转换为物理地址,确保进程访问内存时不发生冲突。
    • 内存扩充:根据需要动态分配内存,避免内存不足。
    • 存储保护:防止进程非法访问其他进程的内存区域。
    设备管理

    设备管理模块负责处理器与外部设备之间的数据交换。其主要功能包括:

    • 将设备分配给请求使用的进程。
    • 处理CPU与设备间的I/O通信。
    • 响应设备的中断请求。
    • 维护和回收设备的使用。
    文件管理

    文件管理部分被称为文件系统,其主要职责是:

    • 设计文件的逻辑组织和物流组织。
    • 管理目录结构,确保文件存储的高效性。

    常用的文件物理结构包括:

    • 顺序结构:文件数据按顺序存储。
    • 链接结构:文件的数据块通过指针链接。
    • 索引结构:通过索引表管理文件的数据块。
    作业管理

    作业是计算机系统在一次计算过程中或事务处理中的基本工作单元。作业管理的内容包括:

    • 作业的输入和输出:作业的提交、处理和结果输出。
    • 作业的调度和控制:控制作业的执行顺序和资源分配。

    一个作业通常经历四个状态:

    1. 提交:作业提交给计算机系统。
    2. 后备:作业等待分配资源。
    3. 执行:作业正在执行。
    4. 完成:作业执行完毕,退出系统。

    这四个状态帮助操作系统管理作业的生命周期,确保资源合理分配和高效执行。

    第2章 Linux系统概述

    1. Linus Torvalds 负责开发的Linux只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,只是操作系统的核心。

    2. Linux发行版本:Red Hat(红帽)、Debian Linux、Fedora Core、CentOS、Ubuntu Linux、SuSE Linux、Gentoo Linux、Slackware

    3. 2019年截止,世界超级计算机500强上运行的都是Linux。安卓系统是基于Linux的开源系统,是Google公司为移动终端打造的真正开放和完整的移动软件。亚马逊云阿里云谷歌云都部署在Linux系统上。人工智能和区块链的底层也都是Linux。

    第3章 Linux系统使用基础

    常用Linux命令

    Linux命令的基本格式

    在Linux系统中,打开终端(通常通过“开始”菜单中选择应用程序 -> 附件 -> 终端),进入shell环境,命令提示符通常显示如下:

    [root@localhost ~]#
    
    • root:当前登录的用户。
    • localhost:当前系统的主机名(简写为localhost,完整名为localhost.localdomain)。
    • ~:用户当前所在的目录。~是用户的家目录。
    • #:命令提示符。若为超级用户(root),提示符为#;普通用户的提示符为$

    家目录(或主目录)是用户登录后的初始位置,超级用户的家目录为/root,普通用户的家目录为/home/用户名。初始登录状态下,用户创建的文件都放在家目录内。使用cd命令可以切换目录。

    Linux命令的基本格式

    Linux命令的基本格式为:

    [root@localhost ~]# 命令 [选项] [参数]
    
    • 命令:要执行的操作(如lscd等)。
    • 选项(可选):用于修改命令执行方式的参数。选项有两种格式:
      • 短格式选项(例如:-l
      • 长格式选项(例如:--all
    • 参数(可选):命令操作的对象或文件。

    例如:

    • ls -l /home:列出/home目录中的详细文件信息。
    • cd /home:切换到/home目录。

    总结:选项用于调整命令执行的方式,而参数指定命令操作的对象或路径。

    Linux 简单命令

    wwho 命令

    这两个命令都可以查看服务器上当前登录的用户信息,但它们有所不同:

    • w 命令除了可以显示当前登录的用户信息,还可以显示每个用户执行的任务。
    • who 命令仅显示用户登录的信息。

    w 命令基本格式

    [root@localhost ~]# w [选项] [用户名]
    
    • 仅跟用户名时,表示只显示该用户的信息。
    • -h:不显示输出信息的标题。
    • -l:以详细格式输出。
    • -s:以简洁格式输出。

    who 命令基本格式

    [root@localhost ~]# who [选项] [file]
    

    默认通过 /var/run/utmp 文件获取登录用户信息,常用选项:

    • -a:列出所有信息,相当于所有选项。
    • -b:列出系统最近启动时间。
    • -l:列出所有可登录的终端信息。
    • -m:仅列出当前终端的信息,相当于 who am I
    • -r:显示当前系统的运行级别。
    • -s:仅显示名称、线路和时间字段信息,默认选项。
    • -u:显示每个用户的用户名、登录终端和登录时间(包括登录来源IP地址)。
    echo 命令

    echo 命令用于将参数显示到标准输出(屏幕)上,基本格式为:

    [root@localhost ~]# echo [选项] [输出内容]
    

    常用选项:

    • -n:取消输出后的换行符(内容输出后不换行)。
    • -e:启用反斜线控制字符的转换。

    常见控制字符

    控制字符 含义
    \\ 输出反斜杠\
    \a 输出警告音 (alert)
    \b 退格键 (backspace)
    \c 取消输出行末换行符
    \e 输出Esc键 (escape)
    \f 换页符 (form feed)
    \n 换行符 (new line)
    \r 回车键 (return)
    \t 制表符 (tab)
    \v 垂直制表符 (vertical tab)
    Onnn 输出按八进制ASCII码表示的字符
    \xhh 输出按十六进制ASCII码表示的字符
    date 命令

    date 命令用于显示或设置系统的日期与时间。基本格式:

    [root@localhost ~]# date -s "YYYY-MM-DD HH:MM:SS"
    
    • 只有 root 权限的用户才能修改系统时间。
    passwd 命令

    passwd 命令用于修改密码,基本格式:

    [root@localhost ~]# passwd [选项] [用户名]
    
    • 普通用户只能修改自己的密码,超级用户(root)可以修改自己和其他用户的密码。
    • 普通用户修改密码时,需要输入旧密码;超级用户修改时不需要。

    这些是常见的Linux命令,通过这些命令,用户可以进行基本的系统管理和操作。

    软件包管理

    在Linux中,软件包主要分为两类:源码包和二进制包。二进制包包含已经编译好的程序文件,而源码包包含的是源代码,需要通过编译器编译后才能使用。常见的Linux打包格式为tar.gz,源码包通常称为Tarball,它是一个用于打包文件的工具。

    主流包管理系统

    • RPM包管理系统(Red Hat Package Manager):常见于基于Red Hat的发行版(如CentOS、Fedora)。
    • DPKG包管理系统:主要用于Debian及其衍生的发行版(如Ubuntu)。

    软件安装、运行与卸载

    RPM包管理

    RPM包默认安装路径:

    路径 说明
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置

    RPM包的安装:

    安装RPM包的命令格式如下:

    [root@localhost ~]# rpm -ivh 包全名
    

    命令选项说明:

    • -i:安装(install)
    • -v:显示详细信息(verbose)
    • -h:显示安装进度(hash)

    可以一次性安装多个软件包:

    [root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
    

    安装完成后,可以尝试启动服务:

    [root@localhost ~]# service 服务名 start|stop|restart|status
    

    各参数含义:

    • start:启动服务
    • stop:停止服务
    • restart:重启服务
    • status:查看服务状态

    RPM包的升级:

    • 如果软件包未安装,则安装;如果已安装,则升级至最新版本:

      [root@localhost ~]# rpm -Uvh 包全名
      
    • 如果软件包已安装且版本较低,可以升级:

      [root@localhost ~]# rpm -Fvh 包全名
      

    RPM包的卸载:

    卸载时要注意软件包之间的依赖关系。例如,先安装httpd软件包,再安装其功能模块mod_ssl包,那么卸载时需要先卸载mod_ssl,再卸载httpd。

    卸载命令格式:

    [root@localhost ~]# rpm -e 包名
    
    • -e:卸载(erase)

    可以使用-nocteps选项来忽略依赖性检查,但不推荐使用。

    软件包查询:

    • 查询已安装软件包:

      [root@localhost ~]# rpm -qa
      

      使用管道符可以查询特定软件包:

      [root@localhost ~]# rpm -qa | grep httpd
      
    • 查询软件包的详细信息:

      [root@localhost ~]# rpm -qi 包名
      
    • 查询未安装软件包的详细信息(使用包的绝对路径):

      [root@localhost ~]# rpm -qip 包全名
      
    • 查询已安装软件包包含的所有文件及其安装位置:

      [root@localhost ~]# rpm -ql 包名
      
    • 查询未安装软件包包含的所有文件及预定的安装路径:

      [root@localhost ~]# rpm -qlp 包全名
      

    反向查询:

    查询某个文件属于哪个RPM软件包:

    [root@localhost ~]# rpm -qf 系统文件名
    

    例如:

    [root@localhost ~]# rpm -qf /bin/ls
    

    查询软件包的依赖性:

    [root@localhost ~]# rpm -qR 包名
    

    查询未安装软件包的依赖性:

    [root@localhost ~]# rpm -qRp 包全名
    

    通过这些命令,用户可以方便地安装、升级、卸载软件包,并查询软件包的详细信息以及它们的依赖关系。

    第4章 shell脚本编程基础

    4小时速通shell外加100例-CSDN博客

    第5章 用户管理

    5.1 用户与用户组管理

    1. 用户名和ID的对应关系存储在 /etc/passwd 文件中

    • /etc/passwd 文件中保存了系统中每个用户的基本信息,包括:
      • 用户名
      • 用户ID(UID)
      • 用户组ID(GID)
      • 用户的全名或注释
      • 用户的主目录路径
      • 用户的默认 shell(如 /bin/bash
      每个用户在该文件中都有一行记录,通常格式如下:
      username:password:UID:GID:comment:home_directory:shell
      
      • username:用户名
      • password:用户密码的占位符(通常是“x”,真正的密码存储在 /etc/shadow 文件中)
      • UID:用户ID
      • GID:用户组ID
      • comment:通常是用户的全名
      • home_directory:用户的主目录
      • shell:用户登录时使用的默认 shell

    2. 在默认情况下,管理员创建一个用户时会在 /home 目录下创建一个用户主目录

    • 每个用户都有一个默认的主目录,通常位于 /home/username。这个目录存储该用户的文件和配置。
    • 创建用户时,系统会自动创建该用户的主目录,并将该目录的所有者设置为该用户。
    • 可以通过命令 useradd 来创建新用户,示例如下:
      sudo useradd username
      
      • 该命令会在 /home/ 目录下为 username 创建主目录。

    3. 存放用户密码信息的目录是 /etc/shadow(影子文件)

    • 密码信息存储在 /etc/shadow 文件中,这个文件是为了增强系统安全性而设计的。

    • /etc/shadow 文件中的每一行对应一个用户,并包含以下信息:

      username:password:last_change:min_age:max_age:warn_period:inactive_period:expire_date:reserved
      
      • username:用户名
      • password:存储加密的密码(如果为空,表示该用户没有密码)
      • last_change:密码上次修改的日期(以天数为单位,从1970年1月1日开始)
      • min_age:最短密码使用周期,表示密码在多少天后才能更改
      • max_age:密码最长使用周期,表示密码过期时间
      • warn_period:在密码过期前多久警告用户
      • inactive_period:密码过期后多久禁用账户
      • expire_date:账户过期日期(从1970年1月1日以来的天数)
      • reserved:保留字段,未使用
    • /etc/shadow 文件只有 root 用户或管理员具有读取权限,从而保护密码信息的安全性。

    用户管理常见命令:
    • 创建用户useraddadduseradduseruseradd 的一个交互式版本)

      sudo useradd username
      
      • 创建用户时可以使用 -m 参数指定创建用户的主目录:
        sudo useradd -m username
        
    • 设置密码passwd 命令用于设置用户密码:

      sudo passwd username
      
    • 删除用户userdel 用于删除用户:

      sudo userdel username
      
      • 若要同时删除用户的主目录和文件,可以使用 -r 参数:
        sudo userdel -r username
        
    • 查看当前用户信息:查看 /etc/passwdid 命令:

      cat /etc/passwd
      id username
      
    小结:
    • /etc/passwd 存储用户名和用户ID等基本信息。
    • 默认创建用户时会在 /home 下创建主目录。
    • 密码存储在 /etc/shadow 文件中,它为系统提供了额外的安全保护。

    5.2 用户和用户组管理相关的文件

    • /etc/passwd:包含用户的基本信息,权限为 rw-r--r--(644),允许其他用户读取,但不允许修改。
    • /etc/shadow:包含用户的密码信息,权限为 rw-------(600),只有 root 用户能读取和修改,以保障系统的安全。

    这些文件的权限设置确保了用户的基本信息是公开的(例如用户名和UID等),但密码信息是私密的,仅限管理员访问。

    5.3 用户和用户组管理的命令

    5.3.1 用户的添加

    命令:useradd [选项] 用户名

    useradd 命令用于添加新用户。它会根据系统配置文件(/etc/login.defs/etc/default/useradd)中的规则进行用户创建,并在以下文件中添加用户信息:

    • /etc/passwd: 用户基本信息
    • /etc/shadow: 用户密码信息
    • /etc/group: 用户组信息
    • /etc/gshadow: 用户组密码信息

    另外,系统会根据 /etc/default/useradd 中的设置,在指定的目录下为用户创建主目录,并从 /etc/skel 目录中复制必要的文件到主目录中。

    5.3.2 密码配置命令

    命令:passwd [选项] 用户名

    • 普通用户只能修改 自己 的密码,不能修改其他用户的密码。
    • 超级用户(root)可以修改 自己其他用户 的密码。

    5.3.3 修改用户信息命令

    命令:usermod [选项] 用户名

    • -L: 临时锁定用户账户(锁定账户)
    • -U: 解锁用户账户(解除锁定)

    5.3.4 修改用户密码状态命令

    命令:chage [选项] 用户名

    • chage 用于修改用户的密码状态和密码过期设置。
    • 除了修改密码信息外,chage 还可以强制用户在第一次登录后更改密码。

    5.3.5 删除用户命令

    命令:userdel -r 用户名

    • -r: 删除用户时,连同用户的主目录和邮箱一起删除。
    • 只有 root 用户可以执行该命令。

    5.3.7 用户间切换命令

    命令:su [选项] 用户名

    • su: 切换到指定用户的身份。如果不指定用户名,默认切换为 root 用户。
    • -: 如果使用了 - 选项,切换到指定用户的同时,也会切换环境变量(如 PATHMAIL 等)。如果没有 -,则只会切换用户身份,当前的环境变量保持不变。

    5.3.8 用户组管理命令

    • 添加用户组 命令:groupadd [选项] 组名

    • 修改用户组相关信息 命令:groupmod [选项] 组名

    • 删除用户组 命令:groupdel 组名 只能删除那些没有任何用户作为初始组的用户组。

    • 设置组管理员 命令:gpasswd [选项] 组名

      • -a user: 将指定用户 user 添加到该组。
      • -d user: 将指定用户 user 从该组移除。
      • 若不带选项,表示为组设置密码(仅 root 用户可用)。

    第6章 文件管理

    6.1 文件系统

    6.1.1 文件

    • 文件是存储数据的最小逻辑单元。
    • Linux系统中,所有文件和目录都从根目录“/”开始,组织成树状结构。通过文件名进行访问。

    6.1.2 文件结构和类型

    1. 文件结构

      • 文件由两部分组成:数据项文件控制块(即索引节点)。文件控制块包含文件的元数据(如大小、权限等)。
    2. 文件类型

      • 根据文件数据项是否具有结构,文件可以分为 无结构文件(如字符流文件)和 有结构文件(如目录文件)。
      • 常见的Linux文件类型有:
        • 普通文件:存储数据的文件。
        • 目录文件:包含文件和其他目录的文件。
        • 链接文件:包括硬链接(Hard Link)和符号链接(软链接,Symbolic Link)。
        • 设备文件:代表硬件设备,位于 /dev 目录下。
    3. 路径类型

      • 绝对路径:从根目录(/)开始的完整路径。
      • 相对路径:相对于当前工作目录的路径。

    6.2 文件与目录操作

    6.2.1 文件操作命令

    1. cat:显示文件内容或合并多个文件

      • cat -n 文件名: 显示文件内容并为每行编号。
      • cat 文件1 文件2 > 文件3: 合并文件1和文件2的内容并保存到文件3。
    2. more:分页显示文件内容

      • more 文件名: 分页显示文件内容,逐页查看。
    3. head:显示文件的前若干行

      • head -n 10 文件名: 显示文件的前10行内容。
    4. tail:显示文件的后若干行

      • tail -n 10 文件名: 显示文件的最后10行内容。
      • tail -f 文件名: 监听文件的新增内容,适用于日志文件。
    5. touch:创建空文件或修改文件时间戳

      • touch 文件名: 创建新文件或更新已有文件的访问时间和修改时间。
    6. grep:搜索文件中的模式

      • grep '模式' 文件名: 在文件中查找符合模式的内容。
      • -n:显示匹配行的行号。
      • -v:显示不匹配模式的行。
    7. sed:编辑文件内容

      • sed '命令' 文件名: 用于文件的文本替换、删除等操作。
      • -i:直接修改文件。
      • 常用命令:s/old/new/g(替换)、d(删除)、a(添加)等。
    8. awk:格式化和处理文本

      • awk '{print $1}' 文件: 显示每行的第一个字段。
      • $0 代表整行,$1 代表第一列,依此类推。
    9. cp:复制文件或目录

      • cp -r 源目录 目标目录: 递归复制目录。
      • -i: 询问覆盖确认。
    10. rm:删除文件或目录

      • rm -r 目录: 递归删除目录及其内容。
      • -f: 强制删除。
    11. mv:移动或重命名文件/目录

      • mv 源目标: 将文件或目录移动到目标位置。
      • -i: 询问是否覆盖。
    12. sort:排序文件内容

      • sort 文件名: 按字母顺序排序文件内容。
      • -r:反向排序,-n:按数字排序。
    13. wc:统计文件中的行数、单词数或字符数

      • wc -l 文件名: 统计行数。
      • wc -w 文件名: 统计单词数。
      • wc -m 文件名: 统计字符数。

    6.2.2 目录操作命令

    1. mkdir:创建目录

      • mkdir 目录名: 创建单个目录。
      • -p: 创建父目录和子目录,若父目录不存在则创建。
    2. rmdir:删除空目录

      • rmdir 目录名: 删除空目录。
      • -p: 递归删除空目录。
    3. cd:切换目录

      • cd 目录名: 切换到指定目录。
      • cd ~: 回到用户的主目录。
      • cd -: 返回上一个目录。
    4. pwd:显示当前目录

      • pwd: 输出当前工作目录的绝对路径。
    5. ls:列出目录内容

      • ls: 显示当前目录的文件和目录。
      • -a: 显示所有文件(包括隐藏文件)。
    6. ln:创建链接

      • ln -s 源文件 目标文件: 创建软链接。
      • 硬链接和软链接的区别:硬链接不能跨文件系统,删除源文件后硬链接仍可访问;软链接类似快捷方式,删除源文件后失效。

    6.3 访问权限管理(Access Control)

    Linux系统中的文件权限管理主要依赖于 (r)、(w)和 执行(x)三种基本权限。文件权限的设计允许系统管理员对文件或目录进行细粒度控制,确保不同用户和群体在使用文件时的安全性和效率。

    文件权限的表示

    文件的权限由以下部分构成:

    • 文件类型:第1位表示文件类型。常见的文件类型有:
      • d:目录
      • -:普通文件
      • l:符号链接
    • 权限部分:接下来的9位表示文件所有者、所属组和其他用户的权限,每组三位,格式如下:
      • 所有者(User):前3位,表示所有者的权限。
      • 所属组(Group):中间3位,表示所属组的权限。
      • 其他用户(Others):后3位,表示其他用户的权限。

    每个权限位的含义:

    • r(读)= 4
    • w(写)= 2
    • x(执行)= 1

    例子

    • -rwxr-xr-- 说明:
      • 所有者有读、写、执行权限(rwx)
      • 所属组有读、执行权限(r-x)
      • 其他人有读权限(r--)

    权限管理命令

    1. chmod 命令(Change Mode):用于修改文件或目录的权限。

      • +:添加权限
      • -:去除权限
      • =:设置权限,覆盖现有权限 例如:
      chmod u+x file       # 为文件所有者添加执行权限
      chmod go-rwx file    # 去除组和其他用户的所有权限
      chmod 644 file       # 设置文件权限为 rw-r--r--,所有者有读写权限,组和其他用户只有读权限
      chmod -R 755 dir     # 递归设置目录及其内容的权限为 rwx r-x r-x
      
    2. umask 命令:设置新建文件或目录的默认权限掩码。

      • 文件的最大默认权限是 666(rw-rw-rw-)
      • 目录的最大默认权限是 777(rwxrwxrwx) 通过 umask 命令可以屏蔽某些默认权限位,从而影响新文件和目录的权限。 例如:
      umask 022   # 屏蔽写权限,文件权限将为 644,目录权限为 755
      
    3. chown 命令(Change Owner):修改文件或目录的所有者。

      chown owner file      # 修改文件所有者
      chown owner:group file  # 修改文件所有者和所属组
      chown -R owner:group dir  # 递归修改目录及其中的文件的所有者和所属组
      
    4. chgrp 命令(Change Group):修改文件或目录的所属组。

      chgrp group file      # 修改文件的所属组
      

    文件权限的小贴士

    • 文件权限由三个主要部分组成:所有者权限、所属组权限、其他用户权限。
    • 使用 ls -l 命令可以查看文件的权限和所有者。
    • 为了确保系统安全,应合理设置文件和目录的权限,避免不必要的权限暴露。
    • 在多人协作环境中,适当的权限设置可以有效防止数据泄露和误操作。

    第7章 进程管理

    在Linux系统中,进程管理是系统管理员的重要任务之一。通过进程管理命令,可以监控、管理、结束进程,调整进程的优先级等。以下是关于进程管理的一些核心概念和常用命令。


    7.1 进程概述

    • PID(进程ID):每个运行的程序都会被操作系统分配一个唯一的进程ID(PID)。PID用于区分不同的进程,当程序执行时,它的所有信息都会加载到内存,并且由操作系统分配一个PID来标识该进程。

    7.2 进程监控

    1. ps命令(Process Status)

      ps 命令用于查看当前系统的进程状态,显示正在运行的进程。常见选项有:

      • -a:显示当前终端下的所有进程(不包括会话引线进程)。
      • -u:显示进程的用户和内存使用情况。
      • -x:显示没有控制终端的进程。
      • -l:显示更详细的进程信息。
      • -e:显示所有进程。

      常用命令:

      ps aux  # 查看所有进程
      ps -le  # 查看所有进程以及父进程PID、优先级等信息
      ps -l   # 只显示当前shell的进程
      

      僵尸进程:当子进程在父进程之前终止,但父进程没有正确回收子进程时,子进程会变为僵尸进程。解决方法可以是优化软件或者强制终止进程。

    2. pstree命令

      pstree 命令以树形结构显示进程之间的关系。它展示了进程的层级关系,能帮助更好地理解进程树的结构。

      pstree [选项] [PID 或 用户名]
      
    3. top命令

      top 命令动态实时地显示进程的运行状态,每隔一段时间刷新。它是一个交互式命令,允许用户定制输出内容,显示如内存使用、CPU使用等。

      top  # 动态监控进程
      
    4. lsof命令(List Opened Files)

      lsof 用于列出当前系统中打开的文件及其相关进程,可以进一步了解进程访问的文件。

      • -c <字符串>:列出以指定字符串开头的进程打开的文件。
      • -p <PID>:列出指定PID进程打开的文件。

      示例:

      lsof -p <PID>  # 列出指定PID的进程打开的文件
      lsof -c <进程名>  # 列出指定进程打开的文件
      

    7.3 结束进程

    1. kill命令

      kill 命令用于发送信号给进程,常见的信号有:

      • 1SIGHUP(进程重新启动并重新读取配置文件)。
      • 9SIGKILL(强制结束进程,不能被阻塞或忽略)。
      • 15SIGTERM(正常结束进程,默认信号,进程会有机会进行清理)。

      示例:

      kill -9 <PID>   # 强制结束指定PID的进程
      kill -15 <PID>  # 正常结束指定PID的进程
      
    2. killall命令

      killall 命令根据进程名终止一类进程,而不是单个进程。它比kill更方便,适用于终止同一程序的多个进程。

      killall <进程名>  # 结束所有指定名称的进程
      
    3. pkill命令

      pkill 命令与 killall 类似,但它还支持根据特定条件(如终端号)终止进程。

      pkill <进程名>  # 结束所有指定进程名的进程
      pkill -t <终端号>  # 按终端号终止进程
      

    7.4 进程优先级

    在Linux系统中,进程的优先级由两个参数表示:PRINI(Nice值)。优先级较高的进程优先获得CPU的处理时间。

    • PRI:进程的优先级值,内核会根据该值调整CPU分配给进程的时间片。

    • NI:用户设置的Nice值,范围为 -20(最高优先级)到 19(最低优先级)。

      • PRI = PRI(原始值) + NI

      调整进程优先级

      • 普通用户可以通过 nice 命令来调整新启动进程的优先级。

      • 只有root用户才能设置NI为负值,以提高进程优先级。

      1. nice命令:设置进程的NI值,影响进程的优先级。

        nice -n <NI值> <命令>  # 启动进程时设置优先级
        
      2. renice命令:用于在进程运行时修改其NI值。

        renice <优先级值> <PID>  # 修改指定进程的优先级
        

      注意事项

      • nice 命令可以影响新进程的优先级,renice 命令可以修改正在运行的进程的优先级。
      • 普通用户只能增加NI值(即降低优先级),而不能减少(提高优先级),只有root用户可以将NI值设为负数。

    总结

    进程管理是Linux系统管理员的基础任务之一,通过这些命令(如 ps, top, kill, nice, renice 等),管理员可以有效地监控、管理和优化系统中的进程,确保系统的稳定和高效运行。在多人多进程的环境中,合理的进程优先级调整和及时的进程结束,能够帮助系统更好地响应用户需求,避免不必要的资源浪费。

    第8章 存储管理(详细版)

    8.1 存储设备的查看

    硬盘根据存储介质的不同,分为 机械硬盘(HDD)固态硬盘(SSD)

    • 机械硬盘(HDD):通过磁性碟片来存储数据,具有较慢的读写速度,且容易受到震动影响。硬盘的逻辑结构由 磁道扇区柱面 组成。

      • 磁道:硬盘表面分成多个同心圆。
      • 扇区:每个磁道上的最小存储单位,通常为512字节或4KB。
      • 柱面:由多个磁道构成,通常是硬盘内部所有盘片的同一位置。
    • 固态硬盘(SSD):通过闪存颗粒存储数据,拥有更高的读写速度、低功耗、无噪声、抗震动等特点。虽然价格较高,但寿命有限。

    常见的硬盘接口类型:

    • IDE(Integrated Drive Electronics):较旧的硬盘接口,速度较慢。
    • SATA(Serial ATA):广泛用于现代硬盘的接口,传输速度较快。
    • SCSI(Small Computer System Interface):适用于企业级应用,支持多个设备。

    硬盘分区的意义在于方便管理、提高系统效率、配合磁盘配额限制用户磁盘空间,并帮助进行数据备份和恢复。一个硬盘最多支持4个主分区。如果需要更多分区,可以通过扩展分区来实现。

    8.2 存储设备的挂载

    挂载:将硬盘或其他存储设备的文件系统与操作系统的目录结构连接。通过 挂载点 将设备和系统中的目录关联。

    • 挂载点:是系统中用于接入外部存储设备的目录。
    • 自动挂载:某些设备(如硬盘)在系统启动时自动挂载,而其他设备(如U盘、光盘)则需要手动挂载。

    常用命令:

    • mount -l:查看系统中所有已挂载的设备及卷标。
    • mount -a:检查并挂载 /etc/fstab 中定义的设备。

    挂载命令:

    mount [-t 文件系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点
    
    • -t:指定文件系统类型(如 ext4、vfat 等)。
    • -L:通过卷标名称挂载。
    • -o:指定额外选项(如读写权限、同步/异步等)。
    • -n:不更新 /etc/mtab 文件。

    卸载命令:

    umount 挂载点
    

    挂载光盘和U盘:

    • 光盘:首先创建挂载点,然后使用 mount 命令挂载。

      mkdir /mnt/cdrom
      mount /dev/cdrom /mnt/cdrom
      
    • U盘:通过 fdisk -l 查找设备名(如 /dev/sda1),然后创建挂载点并挂载:

      mkdir /mnt/usb
      mount -t vfat /dev/sda1 /mnt/usb/
      

    自动挂载: 通过编辑 /etc/fstab 文件,在其中添加设备信息,系统启动时会自动挂载设备。

    8.3 分区管理

    在 Linux 中管理分区的命令包括 fdiskpartedfdisk 用于较小的磁盘(2TB以下),而 parted 支持大于2TB的磁盘分区。

    8.3.1 fdisk 命令

    fdisk 是一个常用的磁盘分区工具,用于管理和创建分区。以下是一些常见命令:

    • fdisk -l:列出所有磁盘和分区信息。
    • fdisk /dev/sda:进入指定硬盘(如 /dev/sda)的分区管理。
    • n:创建新分区。
    • p:显示现有分区。
    • d:删除分区。
    • t:修改分区类型。
    • w:保存并退出。
    • q:退出不保存更改。

    分区过程:

    1. 使用 fdisk /dev/sda 进入硬盘分区界面。
    2. 输入 n 创建新分区。
    3. 输入 p 创建主分区或 e 创建扩展分区。
    4. 指定分区的大小(如 +5G 表示创建一个5GB的分区)。
    5. 输入 w 保存分区表并退出。

    注意:在 fdisk 中修改分区表后需要保存,否则修改不会生效。

    8.3.2 parted 命令

    parted 是另一个分区管理工具,支持大于2TB的硬盘,适合对大容量磁盘进行分区。通过 parted 可以进行交互式分区管理。

    常见操作:

    1. 使用 parted /dev/sda 进入硬盘的分区管理模式。
    2. mklabel 创建新的分区表(如 gpt)。
    3. mkpart 创建新分区。
    4. resizepart 调整分区大小。
    5. quit 退出 parted

    注意parted 在分区时立即生效,操作不可撤销。

    8.4 磁盘管理工具

    8.4.1 df 命令

    df(Disk Free)命令用于查看磁盘的使用情况,显示文件系统的总容量、已用容量、剩余容量等信息。

    常见选项:

    • -h:以人类可读的方式显示容量(例如以GB或MB为单位)。
    • -i:显示 inode(索引节点)的使用情况。
    • -a:显示所有文件系统的信息,包括虚拟文件系统。

    示例:

    df -h
    

    输出:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1       100G  50G   50G  50% /
    

    8.4.2 du 命令

    du(Disk Usage)命令用于查看指定目录或文件所占用的磁盘空间。

    常见选项:

    • -a:显示所有子目录和子文件的磁盘占用。
    • -h:使用人类可读的单位(如 KB、MB、GB)。
    • -s:显示总的磁盘占用,而不列出每个子目录的占用量。

    示例:

    du -sh /home/user/
    

    8.4.3 fsck 命令

    fsck(File System Consistency Check)命令用于检查并修复文件系统中的错误。

    常见选项:

    • -a:自动修复文件系统,且不提示。
    • -r:交互式修复模式,在修改前会提示用户确认。

    示例:

    fsck /dev/sda1
    

    修复后,如果文件丢失,用户可以到 lost+found 目录中查找可能恢复的文件。

    8.5 磁盘阵列

    磁盘阵列(RAID)技术通过将多个硬盘组合在一起,达到提高性能、提供冗余或两者兼具的目的。常见的 RAID 级别包括:

    • RAID 0:条带化,提供更高的性能,但没有冗余。
    • RAID 1:镜像,提供冗余,数据会被复制到两个硬盘。
    • RAID 5:提供冗余和性能提升,要求至少3个硬盘。

    RAID 可通过软件(如 mdadm)或硬件 RAID 控制器实现。


    这些概念和命令是 Linux 存储管理的核心,掌握了它们,你可以有效地管理系统的存储设备、分区、文件系统以及磁盘空间。希望这个详细的解释能帮助你更好地理解存储管理!

    第9章 设备管理

    9.1 设备文件

    Linux 中,用户通过文件系统与设备进行交互。每个设备都由驱动程序控制,并通过 /dev 目录下的特殊设备文件进行管理。设备文件屏蔽了硬件的具体管理细节,使用户能够像操作普通文件一样使用设备。

    设备文件的命名规则

    • 设备文件位于 /dev 目录下,每个设备对应一个设备文件。
    • 设备文件由主设备号次设备号组成。
      • 主设备号:表示设备的类型(如 hd 代表 IDE 硬盘,sd 代表 SCSI 硬盘,tty 代表终端设备等)。
      • 次设备号:表示同类设备中的编号(如 /dev/hda/dev/hdb 等)。

    常见设备文件

    • IDE 硬盘/dev/hda/dev/hdb
    • SCSI 硬盘/dev/sda/dev/sdb
    • 软盘/dev/fd0
    • 磁带机/dev/st*(自动回卷)和 /dev/nst*(不回卷)
    • 特殊设备文件
      • /dev/null:黑洞设备,所有写入的数据都会被丢弃。
      • /dev/zero:提供无限的空字节流,常用于初始化文件。
      • /dev/full:写入时始终返回“设备无剩余空间”错误。
      • /dev/random/dev/urandom:提供随机数。

    硬盘分区编号规则

    • 一台主机最多可支持 16 块硬盘(a~p)。
    • 分区编号
      • 主分区和扩展分区:编号从 14
      • 逻辑分区:从 5 开始编号。
    • 主引导记录(MBR)
      • 存储在硬盘的第一个扇区,包含 446 字节的引导代码、64 字节的分区表,以及 2 字节的结束标识。

    9.2 常用设备管理命令

    9.2.1 查看 CPU 信息

    • lscpu:显示 CPU 及处理单元的信息。

    9.2.2 查看内存信息

    • free:查看系统内存状态,包括物理内存、交换内存(swap)及缓冲区。
      • -k:以 KB 显示(默认)。
      • -m:以 MB 显示。
      • -g:以 GB 显示。
      • -t:显示内存和交换分区的总量。
      • -s 秒数:间隔指定时间持续显示内存使用情况。
    • vmstat:监测虚拟内存的使用情况。
      • Page-Out(页面换出):将内存页写入磁盘。
      • Page-In(页面换入):将磁盘页加载回内存。
      • Thrashing(颠簸):过度的 Page-Out/Page-In 导致系统性能下降。

    9.2.3 查看块设备

    • dmesg:查看系统启动日志和硬件检测信息。
    • lsblk:列出所有块设备及其依赖关系(如硬盘、闪存盘、CD-ROM)。

    9.2.4 磁盘配额管理

    • quota:查询用户或组的磁盘配额使用情况。
    • quotacheck:扫描文件系统并建立磁盘配额记录。
    • quotaon / quotaoff:启用/关闭磁盘配额服务。
    • edquota:修改用户或组的磁盘配额。

    通过这些命令,管理员可以高效管理 Linux 系统的设备,提高资源利用率并确保系统稳定运行。

    第10章 网络管理

    10.1 管理网络接口

    计算机的基本网络参数包括:

    • IP地址:标识网络接口,由网络号和主机号组成。
    • 子网掩码:确定网络部分的位数,与IP地址成对出现。
    • 网关:跨区域通信的桥梁。
    • DNS:用于将域名解析为IP地址。
    1. Linux联网配置步骤
    1. 分配IP地址和子网掩码
    2. 配置默认网关
    3. 配置DNS服务器
    2. 网络接口卡(NIC)

    网络连接通过PCI设备(网卡)实现,使用 lspci 命令可检测系统内的PCI设备。

    3. 网络接口

    Linux不允许直接访问NIC,而是通过网络接口进行管理。常见接口类型包括:

    名称 类型
    eth0 以太网
    lo 回环设备
    ppp0 PPP协议串口设备
    tr0 令牌环
    fddi0 光纤
    4. 使用 ifconfig 进行网络接口管理
    • ifconfig -a:显示所有网络接口信息。
    • ifconfig:仅显示活动接口。
    • ifconfig <接口> <IP地址>:配置接口。
    5. 网络接口配置文件
    • 启动网络服务:/etc/init.d/network
    • 配置文件路径:/etc/sysconfig/network-scripts/ifcfg-<interface>
    • 典型回环地址:127.0.0.1/255.0.0.0

    10.2 基本IP路由和网关

    1. IP地址结构

      • A类:255.0.0.0
      • B类:255.255.0.0
      • C类:255.255.255.0
    2. 以太网硬件地址(MAC)

      • IP地址用于跨网通信。
      • MAC地址用于同一网段通信。
      • arp -a 可查看ARP缓存。

    10.3 配置DNS客户端

    • 静态解析/etc/hosts
    • 动态解析/etc/resolv.conf

    10.4 DHCP配置

    • BOOTPROTO=dhcp 可在接口配置文件中开启DHCP。
    • dhclient 进程自动管理DHCP。

    10.5 配置Web服务器

    • HTTP(超文本传输协议):默认端口80,也可使用8080
    • Apache:提供Web服务的服务器软件。

    10.6 配置Telnet

    • Telnet远程控制默认使用端口23

    10.7 其他网络设置

    1. 主机名管理

      • hostname 命令可修改主机名。
      • /etc/sysconfig/network 记录主机名配置。
    2. 网络服务管理

      • service network stop/start 控制网络服务。

    10.8 网络诊断工具

    1. 基本命令

      • ping:测试网络连通性。
      • host:查询DNS解析。
      • traceroute:追踪数据包路由路径。
      • tcpdump:监视网络流量。
    2. 系统文件与配置

      • /etc/hosts:本地主机名解析。
      • /etc/sysctl.conf:开启IP转发(net.ipv4.ip_forward=1)。

    第11章 系统服务与日志

    11.1 Linux 系统服务概述

    Linux 系统服务(System Services),有时也称为守护进程(Daemon),是在Linux系统启动时自动加载,在系统退出时自动停止的后台进程。

    系统服务的分类

    根据启动与管理方式,Linux的系统服务主要分为以下两大类:

    1. 独立运行的服务(standalone service)

      • 这些服务可以单独启动和运行,不需要依赖其他守护进程。
      • 例如:sshd(SSH服务)、httpd(Apache服务器)、mysqld(MySQL数据库)。
      • 管理方式:
        • 通过 /etc/init.d/ 目录中的启动脚本管理:
          /etc/init.d/sshd start    # 启动服务
          /etc/init.d/sshd stop     # 停止服务
          /etc/init.d/sshd restart  # 重启服务
          
        • 使用 service 命令管理:
          service sshd start
          service sshd stop
          service sshd restart
          
        • 使用 systemctl(适用于 systemd):
          systemctl start sshd
          systemctl stop sshd
          systemctl restart sshd
          
    2. 由超级守护进程(Super Daemon)管理的服务

      • 这些服务不是独立运行的,而是由inetdxinetd 这样的超级守护进程统一管理。
      • 例如:Telnet (telnetd)、FTP (vsftpd)。
      • 管理方式:
        • xinetd 配置文件路径:/etc/xinetd.d/
        • 启动/停止 xinetd 服务:
          service xinetd start
          service xinetd stop
          systemctl restart xinetd
          

    11.2 查看和管理服务

    1. 查看当前系统中所有可用服务

    systemctl list-unit-files --type=service
    

    或:

    service --status-all
    

    2. 设置开机自动启动的服务

    使用 systemctl enable 使某个服务在开机时自动启动:

    systemctl enable sshd
    

    3. 禁用开机启动服务

    systemctl disable sshd
    

    11.3 Linux 系统日志

    1. 日志的作用

    系统日志用于记录Linux系统的运行情况、错误信息、安全事件等,便于排查问题监控系统状态

    2. 主要的日志管理服务

    • rsyslogd(rocket-fast system for log):

      • 负责收集和管理日志信息,日志存储在 /var/log/ 目录下。
      • 主要配置文件:/etc/rsyslog.conf
    • journalctl(systemd 日志管理工具):

      • 适用于 systemd,可查询内核、系统和应用日志

    3. 重要的日志文件

    日志文件 说明
    /var/log/messages 记录系统的通用日志信息(系统启动、服务信息等)
    /var/log/syslog 记录系统和内核相关的信息
    /var/log/auth.log 记录用户登录、认证、安全相关日志
    /var/log/secure 记录安全相关事件(如SSH登录)
    /var/log/dmesg 记录系统启动时的内核消息
    /var/log/boot.log 记录系统启动过程
    /var/log/httpd/access.log 记录Apache Web服务器访问日志
    /var/log/httpd/error.log 记录Apache Web服务器错误日志

    4. 查看日志

    1)使用 cat / tail / less 命令

    cat /var/log/messages      # 查看系统日志
    tail -n 50 /var/log/auth.log  # 查看最近50行日志
    less /var/log/syslog       # 分页查看日志
    

    2)使用 journalctl 命令

    journalctl -xe         # 查看最新的系统日志
    journalctl -u sshd     # 查看特定服务(如SSH)的日志
    journalctl --since "2024-03-01" --until "2024-03-24"  # 查看指定时间范围的日志
    

    11.4 日志等级

    日志的等级(Log Level)决定了日志的重要性,rsyslog使用8个级别(从高到低):

    级别 名称 说明
    0 emerg(LOG_EMERG) 紧急:系统无法使用,必须立即修复
    1 alert(LOG_ALERT) 严重警报:必须立刻采取行动
    2 crit(LOG_CRIT) 严重错误:关键组件故障
    3 err(LOG_ERR) 错误:一般性错误,但系统仍可运行
    4 warning(LOG_WARNING) 警告:可能影响系统运行的问题
    5 notice(LOG_NOTICE) 通知:重要但非关键的信息
    6 info(LOG_INFO) 信息:普通的系统运行信息
    7 debug(LOG_DEBUG) 调试:详细的调试信息

    示例:

    grep -i "error" /var/log/messages   # 只查看错误日志
    

    11.5 其他网络相关日志

    1. Apache Web 服务器日志

    • 访问日志(记录所有访问请求)
      /var/log/httpd/access.log
      
      示例:
      tail -f /var/log/httpd/access.log
      
    • 错误日志(记录错误信息)
      /var/log/httpd/error.log
      
      示例:
      tail -f /var/log/httpd/error.log
      

    2. SSH 认证日志

    cat /var/log/auth.log | grep "sshd"
    

    3. 网络诊断工具

    1)ping 测试网络连通性

    ping -c 4 8.8.8.8
    

    2)traceroute 测试网络路径

    traceroute google.com
    

    3)tcpdump 抓包

    tcpdump -i eth0 port 80
    

    11.6 配置和优化日志

    1. 修改日志存储路径

    编辑 /etc/rsyslog.conf,修改日志存放目录:

    *.info;mail.none;authpriv.none;cron.none   /var/log/syslog
    

    重启 rsyslog 服务:

    systemctl restart rsyslog
    

    2. 清理日志

    长期存储的日志可能会占用大量磁盘空间,定期清理:

    logrotate -f /etc/logrotate.conf
    

    总结

    • Linux系统服务有 独立运行由超级守护进程管理 两类。
    • 日志文件存储在 /var/log/ 目录,主要由 rsyslogd 管理。
    • 重要的日志文件包括 /var/log/messages/var/log/auth.log
    • 使用 journalctl 查看 systemd 相关日志。
    • 日志等级从高到低为 emerg > alert > crit > err > warning > notice > info > debug
    • pingtraceroutetcpdump 是常见的网络诊断工具。

    第12章 VI编辑器

    12.1 VI工作模式

    VI编辑器有三种工作模式:

    • 命令模式(Command Mode):默认进入的模式,可执行光标移动、删除、复制等操作。
    • 文本编辑模式(Insert Mode):用于插入和编辑文本。
    • 末行模式(Last Line Mode):用于执行保存、退出、替换等命令。

    模式切换方式:

    • ESC 进入命令模式。
    • 在命令模式下,按 i(插入)、a(追加)、o(新行)进入文本编辑模式。
    • 在命令模式下,按 : 进入末行模式。

    12.2 进入和退出VI

    12.2.1 进入VI

    命令 说明
    vi 进入VI编辑器
    vi 文件名 打开文件,不存在则创建
    vi +n 文件名 打开文件并定位到第 n 行
    vi + 文件名 打开文件并定位到末行
    vi +/字符串 文件名 打开文件并定位到第一个匹配的字符串

    12.2.2 退出VI

    命令 说明
    ZZ 保存并退出
    :w 保存但不退出
    :w 文件名 另存为
    :w! 文件名 强制保存到指定文件
    :q 退出(未保存时失败)
    :q! 强制退出,不保存修改
    :wq / :x 保存并退出

    12.3 文本编辑

    12.3.1 插入文本

    命令 说明
    i 在光标前插入
    a 在光标后插入
    o 在下一行插入
    O 在上一行插入

    12.3.2 光标移动

    命令 说明
    h 左移
    l 右移
    j 下移
    k 上移
    w 移动到下一个单词首
    b 移动到上一个单词首
    0 移动到行首
    $ 移动到行尾
    G 移动到文件末尾
    nG 移动到第 n 行

    12.4 删除、复制和粘贴

    12.4.1 删除文本

    命令 说明
    x 删除光标所在字符
    nx 删除 n 个字符
    dw 删除单词
    dd 删除整行
    d0 删除光标到行首
    d$ 删除光标到行尾

    12.4.2 复制和粘贴

    命令 说明
    yy 复制当前行
    nyy 复制 n 行
    p 在光标后粘贴
    P 在光标前粘贴

    12.5 查找和替换

    12.5.1 查找

    命令 说明
    /字符串 从光标位置向下查找
    ?字符串 从光标位置向上查找
    n 查找下一个匹配项
    N 查找上一个匹配项

    12.5.2 替换

    命令 说明
    :s/old/new/ 替换当前行第一个匹配项
    :s/old/new/g 替换当前行所有匹配项
    :1,10s/old/new/g 替换第1-10行所有匹配项
    :%s/old/new/g 替换整个文件中的所有匹配项

    12.6 撤销与恢复

    命令 说明
    u 撤销上一步操作
    Ctrl + r 恢复撤销的操作

    12.7 编辑多个文件

    命令 说明
    :n 编辑下一个文件
    :e 文件名 切换到指定文件
    :ar 查看所有打开的文件

    12.8 VI设置

    12.8.1 set 命令选项

    选项 说明
    :set number 显示行号
    :set nonumber 取消行号显示
    :set autoindent 自动缩进
    :set ignorecase 搜索时忽略大小写
    :set hlsearch 高亮显示搜索结果

    12.8.2 环境配置

    VI的配置可通过 ~/.vimrc 设置,例如:

    " 基础显示配置
    set number        " 显示行号
    set relativenumber " 显示相对行号(方便跳转)
    set cursorline    " 高亮当前行
    set showcmd       " 在底部显示正在输入的命令
    set ruler         " 显示光标所在行列信息
    
    " 搜索优化
    set ignorecase    " 搜索时忽略大小写
    set smartcase     " 若搜索包含大写字母,则区分大小写
    set hlsearch      " 高亮搜索匹配项
    set incsearch     " 输入搜索内容时实时显示匹配
    
    " 缩进与制表符
    set autoindent    " 自动缩进
    set smartindent   " 智能缩进,适用于代码编辑
    set tabstop=4     " 设置 Tab 显示宽度为 4 个空格
    set shiftwidth=4  " 设置缩进级别为 4
    set expandtab     " 将 Tab 替换为空格
    set softtabstop=4 " 使退格键可以一次删除 4 个空格
    
    " 文件与性能优化
    set autoread      " 外部修改文件时自动加载
    set backspace=2   " 允许退格键删除换行符和缩进
    set lazyredraw    " 仅在必要时重绘屏幕,提高性能
    set updatetime=300 " 降低 Vim 触发 CursorHold 事件的时间,默认 4000ms
    
    " 备份与撤销
    set undofile      " 允许撤销历史持久化
    set backup        " 启用文件备份
    set swapfile      " 允许创建交换文件
    

    总结: VI编辑器是Linux系统中功能强大的文本编辑工具,熟练掌握其基本操作(模式切换、文本编辑、查找替换、复制粘贴等)能极大提高效率。

    第13章 Emacs编辑器

    13.1 Emacs的操作

    13.1.1 安装Emacs

    在Ubuntu中,使用以下命令安装Emacs:

    sudo apt-get install emacs
    

    13.1.2 启动Emacs

    • 启动命令:emacs 或者 emacs 文件名

    • 启动界面包括:标题栏、菜单栏、窗口区域、模式行、回显行。

      • 标题栏:显示当前Emacs编辑器的状态。
      • 菜单栏:包含常用操作菜单。
      • 窗口区域:显示当前编辑的内容。
      • 模式行:显示当前的状态信息,位于界面的倒数第二行。
      • 回显行:用于显示输入的命令和提示信息。

    13.1.3 模式行的解释

    • 模式行字段
      • 冒号后面的字符:表示缓冲区中文本的状态
        • --:缓冲区未编辑
        • **:缓冲区文本已被修改
        • %%:只读缓冲区未修改
        • %*:只读缓冲区已被修改
      • buf:显示窗口缓冲的名称,通常为文件名。
      • pos:表示文件在窗口中的显示位置,如:
        • All:显示整个文件
        • Top:显示文件的开始部分
        • Bot:显示文件的末尾部分
        • NN%:显示文件的百分比位置
      • L#:当前光标所在行的行号。
      • (Pattern):表示当前缓冲区使用的模式。例如:Fundamental模式、Text模式、Lisp模式等。

    13.2 Emacs的退出

    退出Emacs的命令如下:

    命令 含义
    Ctrl+X 然后 Ctrl+S 保存文件并退出
    Ctrl+X 然后 Ctrl+C 不保存文件并退出
    Ctrl+X 然后 Ctrl+W 另存为文件

    13.3 文件与缓冲区操作

    命令 含义
    Ctrl+X 然后 Ctrl+F 打开文件
    Ctrl+X 然后 Ctrl+V 替换当前文件
    Ctrl+X 然后 Ctrl+I 在光标处插入文件
    Alt+X 恢复自动保存的文件
    Ctrl+X 然后 Ctrl+B 切换缓冲区
    Ctrl+X 然后 Ctrl+S 保存缓冲区
    Ctrl+G 撤销命令

    13.4 Emacs的基本操作

    1. 光标的移动
    命令 含义
    Ctrl+F 光标向前移动一个字符
    Ctrl+B 光标向后移动一个字符
    Ctrl+P 光标移动到上一行
    Ctrl+N 光标移动到下一行
    Ctrl+A 光标移到行首
    Ctrl+E 光标移到行尾
    Ctrl+V 光标向前移动一屏
    Alt+V 光标向后移动一屏
    Alt+F 光标向前移动一个单词
    Alt+B 光标向后移动一个单词
    Alt+< 光标移到文本开头
    Alt+> 光标移到文本末尾
    1. 删除命令按键
    命令 含义
    Backspace 删除光标前的一个字符
    Ctrl+D 删除光标处的字符
    Ctrl+X 然后 U 撤销上次修改
    Alt+D 删除光标后的一个单词
    Ctrl+K 删除从光标到行尾的所有字符
    Ctrl+X 然后 Backspace 删除前一句
    Ctrl+W 删除两个位置之间的文本
    1. 重排操作
    命令 含义
    Ctrl+空格键 设置标记
    Ctrl+X,Ctrl+X 交换光标和标记位置
    Ctrl+W 删除选中的文本
    Ctrl+Y 插入被删除的文本
    1. 搜索和替换
    命令 含义
    Ctrl+S 向前递增搜索
    Ctrl+R 向后递增搜索
    Alt+Shift+5 替换文本
    空格键Y 替换当前匹配
    DeleteN 忽略当前匹配
    ,(逗号键) 显示替换结果
    EnterQ 退出替换
    .(句号键) 替换当前匹配并退出
    ! 替换所有匹配
    1. 大小写字母转换
    命令 含义
    Alt+U 将单词转为大写
    Alt+L 将单词转为小写
    Alt+C 将首字母转为大写
    Ctrl+X 然后 Ctrl+U 将指定区域转为大写
    Ctrl+X 然后 Ctrl+L 将指定区域转为小写
    1. 帮助操作
    命令 含义
    Ctrl+H 调用Emacs的帮助

    13.5 窗口操作

    命令 含义
    Ctrl+X 然后 2 水平分割窗口
    Ctrl+X 然后 3 垂直分割窗口
    Ctrl+X 然后 > 向右滚动窗口
    Ctrl+X 然后 < 向左滚动窗口
    Ctrl+X 然后 0 删除当前窗口
    Ctrl+X 然后 O 将光标移到其他窗口
    Ctrl+X 然后 1 删除所有其他窗口

    13.6 在Emacs中编译并运行C/C++程序

    1. 启动Emacs,输入 emacs -nw 命令。
    2. 使用 Ctrl+X 然后 Ctrl+F 打开 test.c 文件。
    3. 使用 Ctrl+X 然后 Ctrl+S 保存文件。
    4. 进入缓冲区,使用 Alt+X 输入 eshell 命令。
    5. 编译源文件:gcc test.c -o test
    6. 运行程序:./test

    第14章 OpenSSH

    OpenSSH 是 SSH(安全外壳协议,Secure Shell)的一种免费开源实现。它被广泛用于远程控制和文件传输,并提供了加密技术来保证数据的安全性。OpenSSH 是通过非对称加密算法(例如 RSA)来加密所有的传输数据,从而保证传输过程中的安全。

    14.1 安装OpenSSH

    1. 检查是否已经安装 OpenSSH:

      • 在 CentOS 下,可以通过以下命令来查看 OpenSSH 是否已经安装:
        rpm -qa openssh*
        
    2. 启动 SSH 服务:

      • 使用以下命令启动 SSH 服务:
        service sshd start
        
    3. 开启防火墙的22号端口:

      • 使用以下命令来打开防火墙的 22 端口(默认端口):
        sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
        

    14.2 配置OpenSSH

    • OpenSSH 的主配置文件是 /etc/ssh/sshd_config,可以通过编辑该文件来修改 OpenSSH 的设置。

    常见配置选项:

    1. 设置 SSH 端口:
      • 修改 sshd_config 文件中的 Port 设置来指定 SSH 服务的端口号,默认是 22。
        Port 22
        

    14.3 OpenSSH的使用

    14.3.1 文件传输

    • SFTP(安全文件传输协议)和 SCP(安全复制协议)是 SSH 协议提供的用于安全传输文件的工具。

      1. SFTP:用于提供安全的文件传输加密方法。
      2. SCP:用于远程文件复制,复制过程中数据是加密的。

    SCP 传输示例:

    • 从服务器下载文件到本地:
      scp root@远程ip:/opt/test1.txt /opt/
      
    • 从本地上传文件到服务器:
      scp /opt/test.txt root@远程ip:/opt/
      
    • 传输目录时,使用 -r 参数:
      scp -r /opt/目录 root@远程ip:/opt/
      

    14.3.2 免密登录

    • 免密登录 是通过 SSH 公钥和私钥机制来实现的。通过这种方式,可以让用户在不输入密码的情况下登录远程服务器。

    过程:

    1. 生成密钥对(公钥 id_rsa.pub 和私钥 id_rsa):

      • 在源机器上生成 SSH 密钥对:
        ssh-keygen -t rsa
        
    2. 将公钥添加到目标机器的 authorized_keys 文件中:

      • 将公钥复制到目标机器的 ~/.ssh/authorized_keys 文件中:
        ssh-copy-id root@远程ip
        
      • authorized_keys 文件中存储了所有授权的公钥。
    3. 实现免密登录:

      • 通过 SSH 免密登录,用户无需输入密码即可访问目标服务器:
        ssh root@远程ip
        

    15章 Linux系统的应用程序开发技术

    15.1 GCC编辑器

    15.1.1 C语言程序的编译过程

    C语言程序的编译过程可以分为四个主要阶段:

    1. 预处理阶段

      • 命令gcc -E test.c -o test.i
      • 作用:对源代码进行预处理,生成中间文件(.i文件)。该阶段会处理诸如宏替换、头文件包含等操作。
    2. 编译阶段

      • 命令gcc -S test.i -o test.s
      • 作用:将预处理后的代码转换为汇编语言(.s文件)。这个阶段将C语言代码转换成相应的低级汇编代码。
    3. 汇编阶段

      • 命令gcc -c test.s -o test.o
      • 作用:将汇编代码编译为目标文件(.o文件)。目标文件包含机器码,但尚未链接成可执行文件。
    4. 链接阶段

      • 命令gcc test.o -o test
      • 作用:将目标文件链接成可执行文件,最终生成可以在操作系统中运行的程序。
    简化命令

    如果你想一步完成所有过程,可以使用以下简化命令:

    gcc test.c -o test
    

    该命令会自动完成预处理、编译、汇编和链接过程,直接生成可执行文件。


    15.1.2 GCC基本用法

    GCC的基本命令格式如下:

    gcc [选项] [文件名]
    
    • 选项:可以指定编译器的行为,如 -g(生成调试信息)、-L(指定库文件路径)等。
    • 文件名:需要编译的源代码文件。

    默认情况下,GCC会在系统的标准路径(例如 /usr/lib)中查找所需的库文件。如果使用了 -L 选项,它会优先在指定的路径中查找库文件。


    15.2 GDB调试器

    15.2.1 启动和退出

    • 启动GDBgdb 程序名 或者先输入 gdb,然后使用 file 程序名 来加载程序进行调试。
    • 退出GDB:在GDB命令行输入 quit

    15.2.2 调试前的准备

    为了启用调试信息,必须在编译时使用 -g 选项:

    gcc -g test.c -o test
    

    编译后,使用 gdb 启动调试器时可以获取调试信息。

    在GDB调试过程中,可以使用 help 命令获得详细帮助信息,类似于 help listhelp all

    15.2.3 显示和查找源代码

    • 显示源代码

      • list:每次显示源代码的10行。
      • list m,n:显示从第 m 行到第 n 行的代码。
      • list 函数名:显示指定函数附近的代码。
    • 查找字符串:可以使用 searchreverse-search 命令在源代码中查找特定字符串。

    15.2.4 执行程序

    在GDB中,使用 runr 命令启动程序。

    15.2.5 设置断点

    • 设置断点

      • break 行号:在指定行号设置断点。
      • break 函数名:在指定函数设置断点。
      • break 行号 or 函数名 if 条件:使用条件来设置断点,例如在特定变量值满足条件时触发。
    • 管理断点

      • info breakpoints:查看当前所有断点的信息。
      • disable 断点编号:禁用指定的断点。
      • enable 断点编号:启用指定的断点。
      • clear:删除所有断点。
      • clear 行号:删除特定行的断点。
      • delete 断点编号:删除指定编号的断点。

    15.2.6 查看和设置变量的值

    • 查看变量的值:使用 print 命令查看变量当前的值。
    • 查看变量类型:使用 whatis 查看变量的类型。
    • 设置变量的值:使用 set variable 命令修改变量的值。

    15.2.7 调试控制

    • 继续执行:使用 continue 命令继续程序的执行,直到下一个断点。
    • 单步执行
      • next:单步执行,不进入函数内部。
      • step:单步执行,进入函数内部。
    • 单条指令执行:使用 nextistepi 命令逐条指令执行程序。

    15.2.8 GDB常用命令

    命令 缩写 说明
    list l 显示源代码
    break b 设置断点
    info i 查看程序状态
    run r 开始运行程序
    display disp 跟踪变量的变化
    step s 执行下一条语句,进入函数
    next n 执行下一条语句,不进入函数
    print p 打印变量的值
    continue c 继续程序的执行,直到下一个断点
    set variable 设置变量的值
    start st main 函数的第一条语句开始执行
    file 装入需要调试的程序
    kill k 终止当前程序的调试
    watch 监视变量值的变化
    backtrace bt 查看函数调用栈信息
    frame f 查看当前栈帧
    quit q 退出GDB环境

    15.3 make工具

    15.3.1 makefile文件的构成

    makefile 文件用于定义源文件之间的依赖关系及如何生成目标文件。其基本结构如下:

    目标文件: 依赖文件
        命令
        命令
    
    • 目标文件:需要生成的文件。
    • 依赖文件:目标文件依赖的文件。
    • 命令:用于生成目标文件的命令。

    15.3.2 执行makefile

    • 执行 make 命令make 会在当前目录查找名为 makefileMakefile 的文件,根据文件中的规则编译源文件,自动生成目标文件。

    15.4 头文件 #include <my.h>#include "my.h" 的区别

    • #include <my.h>:编译器首先在系统的标准库路径(如 /usr/include)中查找该头文件。
    • #include "my.h":编译器首先在当前目录中查找该头文件。如果当前目录中未找到,再到标准库路径中查找。

    第16章 Web服务器搭建、应用开发与部署

    在Linux环境下,我们将使用Eclipse开发工具,通过SSM(Spring、SpringMVC、MyBatis)框架来进行基于MVC的Java Web开发和应用部署演示。

    16.1 Web服务器搭建的准备

    16.1.1 配置Java

    在Linux上配置Java时,我们首先需要卸载系统自带的openJDK,然后安装Oracle的JDK。步骤如下:

    1. 查看已安装的Java版本
      使用以下命令检查已安装的Java版本:

      java -version
      
    2. 查找并卸载openJDK
      使用以下命令查找已安装的openJDK位置:

      rpm -qa | grep java
      

      然后,逐一卸载openJDK:

      sudo rpm -e <openjdk包名>
      
    3. 下载并安装Oracle JDK
      下载Oracle的JDK压缩包。你可以访问Oracle官网下载适合你Linux版本的JDK。下载后,解压文件并将JDK安装在你选择的目录中。

      tar -zxvf jdk-<version>-linux-x64.tar.gz -C /opt
      
    4. 配置环境变量
      编辑 ~/.bashrc 文件,配置以下四个环境变量:

      gedit ~/.bashrc
      

      添加以下内容:

      export JAVA_HOME=/opt/jdk-<version>
      export JRE_HOME=$JAVA_HOME/jre
      export PATH=$JAVA_HOME/bin:$PATH
      export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
      

      完成后保存并关闭文件。然后执行以下命令使环境变量生效:

      source ~/.bashrc
      
    5. 验证配置
      确保Java配置成功,可以通过运行以下命令验证:

      java -version
      

    16.1.2 配置MySQL

    1. 安装MySQL
      在Linux上安装MySQL时,使用包管理工具(例如 yumapt)来安装MySQL:

      sudo apt-get install mysql-server
      
    2. 配置MySQL的配置文件
      MySQL的配置文件位于 /etc/mysql/my.cnf。在该文件中,可以设置MySQL的相关配置,如下所示:

      • 设置MySQL的安装目录 (basedir)
      • 设置MySQL的数据存放目录 (datadir)

      编辑 my.cnf 配置文件时,可以修改这些设置来调整MySQL的工作路径:

      sudo gedit /etc/mysql/my.cnf
      
      [mysqld]
      basedir = /usr/local/mysql
      datadir = /var/lib/mysql
      
    3. 启动MySQL服务

      sudo systemctl start mysql
      
    4. 验证MySQL安装

      通过以下命令查看MySQL是否成功安装并启动:

      mysql -u root -p
      

    16.2 Web服务器的搭建

    16.2.1 安装配置Tomcat

    1. 安装Tomcat

      可以从Apache Tomcat的官网下载适合你系统的Tomcat版本(例如Tomcat 8)。下载并解压到目标路径:

      wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.73/bin/apache-tomcat-8.5.73.tar.gz
      tar -zxvf apache-tomcat-8.5.73.tar.gz -C /opt
      
    2. 启动Tomcat

      使用Tomcat自带的 startup.sh 脚本来启动服务:

      /opt/apache-tomcat-8.5.73/bin/startup.sh
      

      你可以在浏览器中访问 http://localhost:8080 来验证Tomcat是否成功启动。

    3. 停止Tomcat

      使用 shutdown.sh 脚本来关闭Tomcat服务:

      /opt/apache-tomcat-8.5.73/bin/shutdown.sh
      

    16.2.2 配置DNS、DHCP、FTP服务

    1. 配置DNS(BIND)

      域名系统(DNS)是用来将域名解析为IP地址的系统。在Linux中,BIND(Berkeley Internet Name Domain)是最常用的DNS服务软件。

      • 安装BINDsudo apt-get install bind9
      • 配置正向和反向解析:编辑BIND的配置文件(例如 /etc/bind/named.conf.local)来设置域名和IP地址的映射关系。
      zone "example.com" IN {
          type master;
          file "/etc/bind/db.example.com";
      };
      
      • 正向解析数据库/etc/bind/db.example.com
      • 反向解析数据库/etc/bind/db.172.16.5
    2. 配置DHCP

      动态主机配置协议(DHCP)用于在网络中自动分配IP地址和其他网络配置信息。

      • 安装DHCPsudo apt-get install isc-dhcp-server
      • 配置DHCP服务:编辑 /etc/dhcp/dhcpd.conf 文件,配置IP池和网络范围。
    3. 配置FTP

      文件传输协议(FTP)用于在客户端和服务器之间传输文件。

      • 安装FTP服务sudo apt-get install vsftpd
      • 配置FTP:编辑 /etc/vsftpd.conf 文件来调整FTP的配置选项。

    16.3 开发环境与配置

    开发环境的配置对于Web开发至关重要。你可以使用Eclipse作为IDE,结合Tomcat作为Web服务器,进行Java Web应用的开发和测试。配置好Tomcat后,可以将应用部署到Tomcat服务器上进行运行。


    16.4 网站设计开发与部署

    16.4.1 MVC简介

    MVC(Model-View-Controller)是一种设计模式,它将应用程序分为三个核心组件:

    • Model(模型):表示应用程序的数据和业务逻辑。
    • View(视图):用户界面部分,用来展示数据。
    • Controller(控制器):协调模型和视图之间的交互,处理用户输入。

    这种分层架构可以提高应用的可维护性、可扩展性和可测试性。

    16.4.2 常见框架

    1. Struts 2
      Struts 2 是一个基于MVC设计模式的Web应用框架,提供了控制器(Action)和视图(JSP)的集成,支持拦截器和标签库。

    2. Spring
      Spring 是一个轻量级的框架,支持控制反转(IoC)和面向切面编程(AOP)。Spring的核心功能包括事务管理、安全性、消息传递等,适用于构建企业级应用。

    3. MyBatis
      MyBatis 是一个持久层框架,支持SQL映射和存储过程调用。与Hibernate相比,MyBatis更为灵活,能够定制化SQL语句,非常适合处理复杂查询和SQL优化需求。

    Logo

    DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

    更多推荐