Featured image of post Linux基础(一):初识 Linux

Linux基础(一):初识 Linux

系统构成、shell核心

Linux 系统构成

从功能维度划分

  1. 系统调用接口:为上层应用程序准备好的一系列可调用的接口

  2. 内核:负责具体控制硬件的运行

    应用程序本身是无法操作硬件的,但凡想操作硬件都要给系统发请求

操作系统的两种工作状态:

  1. 用户态: 运行的系统接口代码在与应用程序打交道
  2. 内核态:运行的是系统的内核代码在与硬件打交道

从文件维度划分

操作系统源自 iso 镜像文件,镜像文件本质就是一个压缩包,压缩里放着一系列的系统的文件 这些文件分为两大类:bootfs+rootfs

  1. Bootfs(系统启动前) 包含启动文件(bootloader 程序,不是以文件的形式存在,是直接写入硬盘的第一个扇区/mbr)、内核文件 (/boot/vm…)
  2. Rootfs(系统启动后) 本质就是一堆文件夹/文件

Linux 系统的启动顺序

程序与进程 程序:就是一个或者一系列代码文件—》静态 进程:就是一个程序的运行过程——–》动态

进程代表的是程序的运行过程,而负责运行整个过程是操作系统,所以进程是操作系统的最核心的概念没有之一

  1. 加电,先启动 bios
  2. Bios 负责找到启动盘
  3. Bios 读取启动盘第一块扇区 mbr 主引导记录(放着的是 bootloder 程序)放入内存,让 cpu 来执行,bootloader 成功启动
  4. Bootloader 启动之后,负责从硬盘中找到内核文件读入内存,并启动,此时操作系统就启动起来

操作系统启动起来负责管理一系列进程,这些进程可以分为两大类 内核先启动一个老祖宗程序,pid 为 0

0号进程负责运行两个顶级程序,产生两个顶级的进程 运行 init 程序,pid 号为 1:是所有用户态进程的祖宗 运行 kthreadd 程序,pid 2:是所有内核态进程的祖宗

Linux 系统启动级别

  • 0: 关机 poweroff. target
  • 1:单用户模式 rescue.target
  • 2:多用户模式(没有文件系统,没有网络) multi-user.target
  • 3:多用户模式(命令行) multi-user.target
  • 4:没有被使用 multi-user.target
  • 5:图形化界面 graphical.target
  • 6:重启 reboot.target init 0 关机

Shell 解释器介绍

在默认启动级别为3的情况下,linux系统启动之后默认会启动一个 命令解释器铺满全屏幕给你去(称之为字符终端),只能在里面敲命令

Linux系统中的命令解释器称之为shell,翻译为壳,表达了对系统接口封装的思想

具体来说shell解释器分为很多种类,默认用的bash这种

Shell 交互式环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[ ]内各个部分的意思:
第一部分: 登录的用户名
第二部分@: 分割符
第三部分:主机名字
第四部分:当前所在的文件夹
~: 代表当前用户的个人文件夹/家目录
root用户的家目录/root
普通用户的家目录/home/用户名

[ ]括号外:
$ : 当前登录的用户身份是一个普通用户
\# : 当前登录的用户身份是一个超级管理员

补充:
useradd 用户名
passwd 用户名 # 交互式
echo "123" | passwd --stdin egon # 非交互式

Shell 脚本

脚本就是一个简单的程序(整个程序就是一个文件) 把你执行某个任务需要的 10 条命令扔到一个文件里,该文件就是一个 shell 脚本

Shell 命令基本语法

ls -l /boot 三大组成部分:

  • ls 命令,代表要做什么事
  • -l 选项,控制命令具体怎么做(可选)
  • /boot 参数,命令具体操作的目标(可选)

bash 解释器交互式环境的一些特性/快捷方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
ctrl+c: 强制终止当前命令的执行
ctrl+l:清屏,等同于clear命令

ctrl+a 光标移到命令行的最前端
ctrl+e 光标移到命令行的后端

history 查出命令的编号,然后!编号
history -c # 清空历史记录
上下箭头 查出历史命令

!$ # 取上一条命令的参数
tab 键补全

Shell 命令的种类和优先级

Shell 解析命令的顺序:

带路径 > 别名 > 复合命令 > 函数 > 内置命令 > Hash 缓存 > PATH 查找

带路径的命令

  • 绝对路径: 从根目录开始,例如 /bin/ls
  • 相对路径: 相对于当前目录,例如 ./ls 或 b/c/1.txt
    • . 表示当前目录,例如 ./b/c/1.txt 等同于 b/c/1.txt
    • .. 表示上一级目录

别名 alias

通过 alias 命令定义的快捷命令,优先级高于后续类型

  • 定义: alias xxx="ls /etc/sysconfig/network-scripts;echo 123;echo 456"
  • 取消: unalias xxx

复合命令 Compound Commands

  • 包含循环或条件语句的结构化命令。

    示例:

    • for((i=0;i<3;i++)); do echo 66666; done
    • if 语句

函数 Function

1
2
3
4
5
6
7
function f() {
    echo 111
    echo 222
    echo 333
}

f  #调用

内置命令 Built-in Commands

  • Shell 解释器内置的命令,例如 cd、pwd
  • 查看类型: type cd(返回 cd is a shell builtin)

hash 缓存

  • Shell 会缓存最近使用的命令路径到内存,提升下次执行效率。

    示例:

    • 查看: hash
    • 清空: hash -r

环境变量 PATH

  • 环境变量:在系统任意位置都能访问到,是全局有效的变量

  • 当命令不带路径时,Shell 在 PATH 中的目录依次查找 (负责兜底)

  • PATH 是一组用冒号分隔的目录,例如 /usr/bin:/bin

    示例:

    • 查看: echo $PATH
    • 定义全局变量: export name=“egon”

想要不加前缀去调用自定义脚本 xxx 的方法

  • 方法一:把该脚本移动到 PATH 的某个文件夹下面
  • 方法二:把该脚本所在的文件夹添加到PATH里

一些简单的常用命令

设置主机名

1
hostnamectl set-hostname aliyun #//  退出重新进入即可看到

设置默认启动级别

1
2
systemctl set-default graphical.target  # 图形界面
systemctl set-default multi-user.target # 字符终端

查看ip地址(设置ip地址会在网络配置章节里详细介绍)

1
2
3
# 查看
ifconfig  # rockylinux、ubunt都需要安装net-tools才能用ifconfi
ifconfig eth0 # 也可以执行ip a show eth0

用date命令操作时间

1
2
date --helpdate "+%Y_%m_%d  %H-%M-%S" # 查看时间
date -s "2018-05-17 09:51:50" # 设置时间 

两种时间 1、系统时间:我们刚刚用 date -s 设置的是系统时间 2、硬件时间:存在 CMOS 中,开机时会读入内存作为系统的初始时间 如果刚 date -s 设置完时系统立即崩溃,系统还没来得及将刚改的时间写入 CMOS 中,则本次设置无效为了解决了改问题,可以在 date -s 之后理解执行 hwclock –w 这个命令强制把系统时间写入 CMOS。

使用 Hugo 构建
主题 StackJimmy 设计