Bo2SS

Bo2SS

5 基本系统

课程内容#

目录结构#

  • 图片
  • 图片
  • 最上头的 root 为根目录 /,不是 root 用户

  • 此外,在根目录 / 下还有一个 root 文件夹,是 root 用户的家目录

    • 除了 root 用户,其它用户都无法进入
  • bin、sbin 二进制 /[系统的]

  • etc 配置文件夹【全局】

  • opt 可选的,存在意义不是很强,用户可选择地放文件

  • run 当前正在跑的文件,一般不关注

  • var 动态数据

    • mail 系统的通知机制,不是 e-mail
    • log 日志【重要,勿修改】
      • 查看信息一般需要 sudo 权限,一般要查看 error、warning 的位置
      • last 显示的登录信息就存放在 wtmp 文件中
  • boot 内核文件,启动相关

  • home 所有用户的家的父目录

    • 用户的家都在 home 下,路径为 ${HOME} 或~
  • lib、lib64 库

  • media 媒体 [早期挂载软盘、光驱用,U 盘不在这,现在都用得少了]

  • mnt 挂载目录

    • 挂载其它的文件系统,如 U 盘、WSL 中的 CD... 盘
    • 约定俗成的挂载点,不会自动挂载,也可以有其他任意位置的挂载点
  • proc 进程

    • 通过 ps 查看对应进程 id 后,可在 proc 目录下找到对应 id 的目录
    • 目录里的文件大都是 0KB,因为都不是真的,只是为了显示
    • 其中有一个 fd 目录→文件描述符 file descriptor
      • 图片
      • 可以往 stdout【#1】输入 abc,即会在终端显示
      • 暂时不管 10 是做什么的
  • tmp 临时文件夹

    • 关机就会清空,不是缓冲
    • [PS] tmpfile 命令,可创建临时文件,参考 man tmpfile
  • dev 设备文件

  • usr用户主动安装的文件

    • 一般是管理员用户,普通用户无法安装软件
    • local 共享文件 [手册...]

启动流程#

  • 👉按下开机键
  • 👉加载BIOS:硬件检测 [CPU、磁盘、内存条等],读取配置 [系统安装位置等],直到读取 MBR
    • BIOS—— 基本输入输出系统,基于 CMOS 芯片的固件
      • 固件是基于软件和硬件的,将一些程序固化 [烧制] 在一个芯片上
      • 一直上电的 [纽扣电池],掉电就会初始化
  • 👉读取第一个可启动设备内的 MBR [主引导分区]
    • 存储了引导程序 Boot Loader
    • 加载 kernel:检测硬件,加载驱动
    • 此时 kernel 接手 BIOS 的工作
  • 👉执行引导程序 [Ubuntu:Grub]
    • 加载虚拟文件系统,把内核 kernel 跑起来
  • 👉初始化磁盘,读取系统镜像文件
  • 👉启动 1 号进程
    • 早期叫 init,现在叫 cnd
    • 此时系统有自己的功能了
  • 👉加载磁盘,挂载数据启动各种服务,连接终端
  • 👉【最后】运行 x windows 系统→有图形化界面

运行级别#

Linux 下,不同的运行级别对应不同的服务来启动系统

run level含义备注
0halt系统关机
1single user mode在系统出问题时维护用,类似安全模式
2multi-user, without nfsnfs:network file system
3full multi-user mode完整的多用户纯文本模式【常用】
4unused系统保留,没有用
5X11在 run level 3 的基础上加载 X windows
6reboot重启
  • 启动方式发展
    • System V [依次启动]
    • Upstart [分组启动,没有依赖关系的服务可以同时启动]
    • Systemd [全部服务一起启动,有依赖关系的服务再稍稍滞后,进一步提高并发性]
  • 系统启动速度并不代表系统性能的好坏,如大型机器,几年重启一次,要好好检查一下硬件
  • 热启动:在没有必要的情况下,跳过 BIOS 的硬件检测过程,加快启动速度

配置文件#

文件系统#

  • /etc/fstab 开机时挂载的文件系统
    • 静态文件系统信息,指示需要挂载的系统盘
    • 如:需给公司机器挂载一个其它的磁盘,可以在这设置
  • /etc/mtab 当前挂载的文件系统

用户系统#

  • /etc/passwd 用户信息
    • 不仅有普通的用户,还有非常多系统用户
    • 用户:密码占用符:uid:gid: 用户描述:家目录:默认 shell
    • 以前密码占用符存放密码,现在放在👇
  • /etc/shadow 用户密码
    • 显示的密码加密了,解密成本也许大于获取的价值
  • /etc/group 群组信息
  • /etc/gshadow 群组密码
    • 基本不用,root 来管整个体系即可,没必要细分到组
  • /etc/sudoers Sudoer 列表
    • % 代表组
    • 可自己添加

Shell#

  • echo ${SHELL} 查看该用户的 Shell 类型
  • /etc/shells 可用的 Shells 列表

【针对 zsh】

  • /etc/zsh/zprofile 用户首选项【全局】
  • ⭐在 man zsh 里搜索 ——FILES,即可看到所有可配置 zsh 的文件路径
    • 举例:在 4 个全局配置、4 个用户配置里 echo "In ..."
    • 在用户登录 zsh 时,显示顺序如下:
    • 图片
    • 顺序:zshenv→zprofile→zshrc→zlogin,先全局 (G),再用户 (L)
    • [PS] 用户配置文件
      • $ZDOTDIR/.zshenv
      • $ZDOTDIR/.zprofile
      • $ZDOTDIR/.zshrc
      • $ZDOTDIR/.zlogin
      • $ZDOTDIR/.zlogout
      • $ZDOTDIR—— 默认为用户的家目录

系统环境#

  • /etc/environment 环境变量
    • PATH 环境变量:${PATH}
    • which 命令,会在这【PATH 环境变量】里面的路径找命令对应的文件【文件需可执行】
    • ⭐PATH 添加路径 ".":PATH=${PATH}:.
      • 可直接在 PATH 变量后添加:.,即可连接
      • 还可使用 export PATH=${PATH}:.
      • ❗ 但两种方式都是在内存中修改,重连 shell 后就会消失
    • 详见下 2 节 —— 环境变量
  • /etc/updatedb.conf 文件检索数据库配置信息
    • updatedb 更新数据库 [更新后,可以使刚被创建的文件被 locate 找到,数据库不是实时更新的]
  • /etc/issue、/etc/issue.net 发行信息、[远程登录时的显示]
  • /etc/os-release 更详细的系统信息

图片

网络#

  • ⭐/etc/hosts 主机列表
    • 也叫静态 DNS,可以写对应关系
    • ❗ 域名 [主机名]→IP 地址
    • [自己的理解] 类似 windows 的 hosts,对于一个名称的解析先找 hosts,再使用 DNS
  • /etc/hostname 主机名
    • ①需要 sudo 权限修改→新的主机名
    • 重启主机;或者使用 [hostname 新的主机名]临时修改内存中的主机名,否则改了后,环境里的主机名并没有变
    • ③再重连即可
    • [自己的理解] 第①步改的是真正的主机名,第②步 hostname 用来临时修改内存里的主机名,直接重启也可刷新内存
  • ⭐/etc/resolv.conf 域名解析服务器地址
    • DNS 动态域名服务器
    • ❗ 域名→IP 地址
  • /etc/network/interfaces 网卡配置文件,先自行查看

环境变量#

  • env 所有环境变量,命名通常为大写字母
    • 通过 $ 加上环境变量的名称,即可调用
    • PATH 可执行文件夹的路径
    • OLDPWD 上次工作目录
    • HISTSIZE 保存的历史记录大小 [输入命令]
      • bash 默认保存 1000 行
      • zsh 暂时没有该变量
      • 通过 history 可以查看输入的命令历史,无痕浏览自行搜索
  • export
    • export PATH=${PATH}:.
    • 等同于 PATH=${PATH}:.
    • 相比直接给环境变量赋值,export 更规范
    • 这是在内存中修改,如果想固化该变量,每次连接都生效,可在任意【配置文件】中添加上述语句,zsh 的配置文件详见上 3 节 ——Shell
  • [PS] 可通过 set 查看所有本地定义的环境变量

软件管理#

  • 源码安装
git clone XXXX  # 下载源代码
cd XXX
make            # 编译
make install    # 安装
  • 软件包管理系统
    • ⭐推荐 apt:它可以被理解为 apt-get 和 apt-cache 的高级集成版
    • man apt 可以看到其描述:高级、比 apt-get、apt-cache 交互性更好
    • 图片
    • 举例:

随堂练习#

代码演示#

附加知识点#

  • shell 中声明定义的变量存储在内存中,在进程空间里,将 shell 关闭再打开,变量就没了
    • 不要把一切皆文件的概念理解过头了,文件是静态的,需要进程来维护文件,使动态化
    • 变量存储在进程空间里
  • ps 可以看到进程 ID
  • ⭐使用 ssh 绰号登录云主机,如 ssh Ten,WSL 上效果如下👇
    • 图片
    • 针对 WSL 或 MacOS
    • ①在本机的 /etc/hosts 里添加云主机的 IP,对应一个绰号 Ten,如:45.123.111.1 Ten
    • ②在本机创建一个用户,名称与想登录的云主机用户一致,如:hz [本机用户]、hz [云主机用户]
    • ③此时在本机 ssh Ten,输入密码即可登录
    • ❗ 重启后失效 [针对 WSL 2,其他系统方法自行搜索,WSL 1 不能 chattr]
      • 使用 sudo chattr +i /etc/hosts,使 /etc/hosts 只读,重启也不会被重置
      • 若要再修改:sudo chattr -i /etc/hosts
    • [PS] 还可使用 ssh-copy-id 做免密登录,tldr ssh-copy-id 可查看帮助说明
  • 域名和 IP 可以是多对多的,可以做负载均衡

思考点#

Tips#

  • [bash 下] /etc/profile 用户首选项【全局】 [默认 shell 为 bash 时会先运行的文件]

课程速记#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。