本文全部整理自:
Linux 系统启动过程 | 菜鸟教程 https://www.runoob.com/linux/linux-system-boot.html
一、Linux 系统启动过程
1、分为 5 个阶段
- 内核的引导
打开电源 → BIOS 开机自检 → 按 BIOS 中设置的启动设备(通常是硬盘)来启动→ 操作系统接管硬件 → 首先读入 /boot 目录下的内核文件。 - 运行 init
- init 进程
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先读取配置文件 /etc/inittab。 - 运行级别(7 个:0-6。)
Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做 "运行级别"(runlevel)。
也就是说,启动时根据 "运行级别",确定要运行哪些程序。 - 系统初始化
- init 的配置文件执行/etc/rc.d/rc.sysinit
主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。 - rc.sysinit中l5:5:wait:/etc/rc.d/rc 5
- 以 5 为参数运行 /etc/rc.d/rc,/etc/rc.d/rc 是一个 Shell 脚本,它接受 5 作为参数,去执行 /etc/rc.d/rc5.d/ 目录下的所有的 rc 启动脚本。
- /etc/rc.d/rc5.d/ 目录中的这些启动脚本实际上都是一些连接文件,而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在 /etc/rc.d/init.d/ 目录下。
- 建立终端
- rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
- init 接下来会打开 6 个终端,以便用户登录系统。
注:为什么会是6个终端? - 用户登录系统
- 登录方式有三种
- 命令行登录
2. ssh 登录
3. 图形界面登录
- 命令行登录
2、Linux 关机
正确的关机流程为:sync > shutdown > reboot > halt。
3、shell、操作系统、内核的关系
- 操作系统是一个整体,包括shell、内核和其他没说明的东西;
- 内核是操作系统最重要的部分;
- shell 是用户交互界面。
4、参考:
shell、操作系统、内核是一个东西吗-知乎 https://www.zhihu.com/question/37695460
二、Linux 系统目录结构
每个目录的作用直接看原文吧,没必要重复整理。
Linux 系统目录结构 | 菜鸟教程 https://www.runoob.com/linux/linux-system-contents.html
三、Linux 文件基本属性
1、Linux文件属性
注:"-" 字符表示没有权限。
文件类型还有:
- d表示目录
- -表示文件
- l表示链接文档 (link file)
- b表示装置文件里面的可供储存的接口设备 (可随机存取装置)
- c表示装置文件里面的串行端口设备,例如键盘、鼠标 (一次性读取装置)
2、Linux用户的划分。
在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。(一个而用户必定属于一个组么?有没有不属于任何组的用户?)
- 用户自身(对文件所有者来说,又叫属主)
- 同组用户(对文件所有者来说,又叫属主)
- 其他用户(对文件所有者来说,就是其他组的用户和其他用户)
root 用户来说,一般情况下,文件的权限对其不起作用。
3、更改文件属性:
见原文。注意用数字更改文件属性,很精妙的一种实现。
四、Linux 文件与目录管理
1、绝对路径和相对路径
- 绝对路径:以/开始
- 相对路径:不以/开始
- ..表示父级
- .表示自己
2、常用命令说明
文件和目录操作
ls
cd
pwd
mkdir
redir
cp
rm
mv
- 注意命令对于文件和目录的操作不同,有时候对文件和目录需要不同的选项。
文件查看
cat
tac
nl
more
less
head
tail
五、Linux 用户和用户组管理
1、用户管理
- 添加新用户:useradd
- 删除帐号:userdel
- 修改帐号:usermod
- 密码(口令)管理:passwd
2、用户组管理:
- 添加用户组:groupadd
- 删除用户组:groupdel
- 修改用户组的属性:groupmod
- 用户切换用户组:newgrp
用户组的属性:组标识号、组名
组标识号(GID)是什么?同用户号。多个组名可以有同一个组标识号。Linux系统内部实际是根据组标识号进行区分的。
3、用户的属性和常用文件解读
用户名,用户主目录,用户组,用户附加组,用户登录Shell,用户号,口令,注释性描述
- 用户名
- 用户标识号:
- 一般情况下它与用户名是一一对应的。
- 如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录 Shell 等。
- 主目录:用户的起始工作目录。
- 用户登录Shell
- 什么是Shell?
- Shell 是用户与 Linux 系统之间的接口。
- Linux 的 Shell 有许多种,每种都有不同的特点。常用的有 sh (Bourne Shell), csh (C Shell), ksh (Korn Shell), tcsh (TENEX/TOPS-20 type C Shell), bash (Bourne Again Shell) 等。
- 所以,实际Shell就是用户登陆后使用的具体某个软件。
- 用户登录Shell:即指定用户登陆后使用的软件。
- 如果不指定 Shell,那么系统使用 sh 为默认的登录 Shell,即这个字段的值为 /bin/sh。
- 如果登录 Shell 为空,则用户无法登录。(就是伪用户)
- 什么是Shell?
- 伪用户
- 常用伪用户
- 用户组和用户附加组:
- 当一个用户同时是多个组中的成员时,在 /etc/passwd 文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。
常用文件解读:
- /etc/passwd 文件 :存放用户信息
- /etc/passwd:存放用户口令信息
- /etc/group:存放用户组的所有信息
4、添加批量用户操作
具体见原文
六、Linux 磁盘管理
1、常用命令
- df:列出文件系统的整体磁盘使用量
- 检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
- du:检查磁盘空间使用量
- 与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看
- fdisk:用于磁盘分区
- 格式化:mkfs
- 磁盘检验:fsck
- 磁盘挂载与卸除:
- 挂载使用 mount 命令
- 卸载使用 umount 命令
2、关于磁盘分区和挂载
- 磁盘:
- 就是你买的硬件,比如你买的1T影盘
- 分区:
- 逻辑上将该磁盘分为几部分,一个部分就是一个区。
- 为什么要分区?
- 便于管理和使用。
- 不分区,一个磁盘就是一整块。
- 分区后,磁盘被分成了多个部分,每个部分户部干扰。
- 虽然物理上他们都是同一个磁盘,但逻辑上互不干扰。是不是很方便。
- 同时分区还有其他作用,比如分区能提高文件系统管理效率,然后操作系统启动时也需要从特定分区加载系统文件等等。不是很清楚,先不写了,不过这些不影响对分区的理解。
- 便于管理和使用。
- 挂载:
- 以Linux的文件系统来说明。
- Linux的树形文件结构只是逻辑上的结构,一个文件可以在这个树上,但这个文件本身必须保存在磁盘的某个分区上。
- 而树形结构要和磁盘的某个分区之间有一个映射关系。这个关系的建立就是挂载。
- 比如你创建一个文件,实际上有两块:
- 第一步,文件系统中有这个文件;
- 第二步:磁盘上有这个文件本身。
- 如果你不挂载,你就无法创建文件。想一想呀,文件该存在哪里呢?空气中么?
- 但为什么你不挂载依然可以创建文件。
- 因为操作系统启动时肯定有一个你没有手动操作的挂载(这个步骤可能不叫挂载,不过和挂载作用一致,就是建立映射关系)。
- 然后,即使你不主动指定挂载,当你创建文件时,系统会一直向上找,直到找到一个可用的挂载,然后创建文件。
- 如果你想指定另外的挂载
- 使用挂载命令即可。解除挂载就使用解除挂载命令。
- 挂载操作之后有什么影响?
- 当你将一个已有目录挂载到新的分区上。即使文件系统中有这个我呢见,但是文件系统会找不到。因为文件实际在之前的分区上。新的分区上可能就是空白。
- 所以:你更换了分区,也就破坏了联系,就无法在找到之前的文件了。
- 如果你在新的挂载分区上创建新的文件和目录,就没有任何问题。
- 比如你创建一个文件,实际上有两块:
- 以Linux的文件系统来说明。
参考:
- Linux 系统分区和挂载浅谈 - CC 的技术专栏 - CSDN 博客 https://blog.csdn.net/cc_net/article/details/2894510
- Linux 文件系统下的分区和挂载 - 小小呆的博客 - CSDN 博客 https://blog.csdn.net/gui951753/article/details/79032190
注:详细讲解了为什么要分区,以及分区的到底是什么?
挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,进入该目录就可以读取该分区。 - 能否通俗易懂,深入浅出地解释一下linux中的挂载的概念? - 知乎 https://www.zhihu.com/question/266907637
- Linux 学习笔记(二):什么是挂载?mount 的用处在哪? - Machine Learning with Peppa - CSDN 博客 https://blog.csdn.net/qq_39521554/article/details/79501714
七、Linux vi/vim
Vim的使用:
1、各命令模式
2、常用按键说明:
见原文。
八、linux yum 命令
yum 实际就是软件的安装,更新,卸载等操作。
以Window为例,来理解yum
当我们想安装一个软件时:
- 首先需要一个应用商店,提供所有的团结。
- 在Linux中,应用商品就是 yum 源
- 软件有名字,我们也能根据名字找到软件。
- 在Linux中,软件名在就是package
- 然后,下载、安装、更新、卸载
- Linux中。安装(install)时,会根据package同时执行查询、下载和安装操作。
- 其他更新就是更新,卸载就是移除。
更换 yum 源就相当于更换应用商店,因为有的不好用。而且,为了防止总从yum源中后去,我们可以本地生成一个缓存。