Chapter 2 安装 Linux

2.1 硬件组成

(冯·诺依曼结构)

  • 运算器

    CPU,算术逻辑单元

  • 控制器

    CPU,控制单元

  • 存储器

    • RAM (random access memory)

    • ROM (read-only memory)

      只读存储器,可以用来存储BIOS等固件

    • 辅助存储,例如机械硬盘(磁)、固态硬盘(半导体)、光盘(光学)等外置存储器

  • 输入设备

  • 输出设备

2.1.1 CPU

2.1.1.1 CPU的架构

  • 复杂指令集(CISC, Complex Instruction Set Computer)

    复杂指令集的特点是指令数目多而复杂,每个指令可执行若干低端操作,诸如从存储器读取、存储、和计算操作,全部集于单一指令之中

  • 精简指令集(RISC, Reduced Instruction Set Computer)

    精简指令集对指令数目和寻址方式都做了精简,相比CISC的单一复杂指令,RISC用更精简的一系列指令来完成同一个任务

2.1.1.2 CPU如何工作

2.1.1.2.1 寄存器

一个CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。简单的说,在CPU中,运算器进行信息处理、寄存器进行信息存储。下面列举了几个寄存器:

  • 通用寄存器

    ax:通常用于执行加法,函数调用的返回值也放在这里面

    bx:通常用于存取数据

    cx:通常用于计数,例如for循环

    sp:栈顶指针

    sb:栈底指针

  • 段寄存器

    cs:代码段

    ds:数据段

    ss:栈段

    es:扩展段

  • 指令寄存器

    ip:始终指向CPU要执行的指令


2.1.1.2.2 指令

那怎么操作这些寄存器呢?CPU只认识机器指令,可以用二进制码直接控制CPU

例如,将bx中的内容写入ax中:

机器指令:1000100111011000

但是,机器语言难以读懂、记忆和查错。于是汇编语言诞生了

汇编指令:mov ax,bx

汇编指令是机器指令的助记符,用汇编语言写好的程序,翻译成机器指令,就能运行了。

假如我们要计算123*456,可以这样写:

    mov ax,0
    mov cx,123
    s:add ax,456
    loop s

将它编译运行之后,CPU是这样工作的:

首先程序加载到内存中,CS:IP指向第一条指令:将ax设为0,

然后IP自加该指令的长度,CS:IP就指向了下一条指令:将cx设置为123,以此类推

当执行到 loop s 时,如果cx大于零,CS:IP就会回到标记 s: 处,cx自减1,

等最后cx减到0,循环已经执行了123次,ax中就是123个456相加,即123*456的结果


2.2 时间与日期

  • date:显示日期时间

  • date “+%Y-%m-%d %H:%M:%S” 指定格式

  • date -s 字符串时间:设置时间

    举例:date -s 11:11:11date -s "2021-12-02 20:21:12"

[root@CentOS ~]# touch `date +%F`_file.txt
[root@CentOS ~]# ls
2019-03-16_file.txt
  • cal:显示当月日历
  • cal 2021:显示2021年的日历

yum install ntp -y

  • 时间同步 ntpdate ntp.aliyun.com
  • 开启本地NTP服务器 service ntpd start,其他服务器可以 ntpdate 服务器IP进行同步
  • 配置文件 /etc/ntp.conf

2.3 网络连接

IP:网络地址+主机地址

子网掩码(subnet mask):与IP逻辑与运算,可分割网络地址和主机地址

网关(Gateway):转发其他服务器通信数据的服务器


虚拟机网络连接的三种模式:

  • 桥接模式

    bridged

    虚拟系统可以和外部系统通讯,但是容易造成IP冲突

  • NAT模式

    network address translation,网络地址转换

    虚拟机可以和访问外部网络,但是外部系统无法访问虚拟机不会造成IP冲突

  • 仅主机模式

    host-only

    独立的系统,不与外部发生联系

关于网络的配置,这里提供两种方式:

2.3.1 network

以CentOS 7为例

  • 编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33

按需修改,下面一个例子:

iscfg-ens33

  • 重启网络服务
systemctl restart network.service

ip addr 确认刚才配置的ip

2.3.2 nmcli

NetworkManager CLI,比修改配置文件更简单一些

  • 查看设备名

    nmcli connection show 我这里得到 ens1

  •   [root@localhost ~]# nmcli connection modify ens1 \
      >connection.autoconnect yes \
      >ipv4.method manual \  # 如果用dhcp,这里写auto,下面几行不需要写
      >ipv4.addresses 192.168.122.33/16 \
      >ipv4.gateway 192.168.122.1 \
      >ipv4.dns 114.114.114.114
  • nmcli connection up ens1

防火墙:

  • systemctl stop firewalld 临时禁用防火墙,重启还会打开
  • systemctl disable firewalld 重启后防火墙禁用

SELinux:

vi /etc/selinux/config
  • enforcing - SELinux security policy is enforced.

  • permissive - SELinux prints warnings instead of enforcing.

  • disabled - No SELinux policy is loaded.

不建议设置SELinux=disabled

2.4 关机重启

  • shutdown -h now 立即关机(-h:halt)

  • shutdown -h 1 一分钟后关机(shutdown 默认命令)

  • shutdown -r now 立即重启

  • halt 关机

  • reboot 重启

  • sync 把内存的数据同步到磁盘

关机之前应当执行sync,目前shutdown/reboot/halt 等命令将会自动执行sync

2.5 运行级别

  • 0:关机

  • 1:单用户(可以找回密码)

  • 2:多用户,无网络

  • 3:多用户,有网络

  • 4:系统未使用,保留给用户

  • 5:图形界面

  • 6:系统重启

  • init 3:切换到级别3

  • systemctl get-default:查看默认运行级别

  • systemctl set-default [graphical|multi-user|…].target:设置默认运行级别

2.5.1 找回root密码(debian):

  1. 开机按e进入编辑界面
  2. 在linux开头的一行,ro改成rw,并追加init=/bin/sh
  3. Ctrl+x进入单用户模式
  4. passwd root
  5. 强制重启

2.5.2 找回root密码(centos7):

  1. 开机按e进入编辑界面
  2. 在linux开头的一行追加init=/bin/sh
  3. Ctrl+x进入单用户模式
  4. 挂载根目录mount -o remount, rw /
  5. passwd root
  6. 如果开启了SELinux,需要输入touch /.autorelabel
  7. 重启exec /sbin/initexec /sbin/reboot