Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

 

Linux 基础

开源软件&共享精神
简单来说,开源软件的特点就是把软件程序与源代码⽂件⼀起打包提供给⽤⼾,让⽤⼾ 在不受限制地使⽤某个软件
功能的基础上还可以按需进⾏修改,或编制成衍⽣产品再发布出 去。⽤⼾具有使⽤⾃由、修改⾃由、重新发布⾃由
以及创建衍⽣品的⾃由。这也正好符合了⿊ 客和极客对⾃由的追求,因此国内外开源社区的根基都很庞⼤,⼈⽓也
相当⾼。 坦⽩来讲,每位投⾝于 Linux ⾏业的技术⼈或者程序员只要听到开源项⽬就会由衷地感到⾃豪,这是⼀
种从⻣⼦⾥带有的独特情怀。开源的企业不单纯是为了利益,而是互相扶持, 努⼒服务好更多的⽤⼾。开源软件最
重要的特性有下⾯这些。
 

➢ 低⻛险 使⽤闭源软件⽆疑把命运交付给他⼈,⼀旦封闭的源代码没有⼈来维护,你 将进退维⾕;而且相较于商


业软件公 司,开源社区很少存在倒闭的问题。
➢ ⾼品质 相较于闭源软件产品,开源项⽬通常是由开源社区来研发及维护的,参与编 写、维护、测试的⽤⼾量众
多,⼀般的bug 还没有等爆发就已经被修补。
➢ 低成本 开源⼯作者都是在幕后默默且⽆偿地付出劳动成果,为美好的世界贡献⼀份 ⼒量,因此使⽤开源社区推
动的软件项⽬可以节省⼤量的⼈⼒、物⼒和财⼒。
➢ 更透明 没有哪个笨蛋会把木⻢、后⻔等放到开放的源代码中,这样⽆疑是把⾃⼰的 罪⾏暴露在阳光之下。


Linux Linux is not Unix
(/ˈlɪnəks/ lin-əks)是由 Linus Torvalds 开发的⼀款类 Unix 操作系统内核。
Linux

操作系统的故事
上世纪六⼗年代,为了研发⼀个多⽤⼾,多⽤途的操作系统 AT&T 、G.E 、MIT联⼿打造MULTICS
过于庞⼤,对前途产⽣了迷茫 Bell实验室退出开发团队
Ken Thompson正在开发⼀款游戏,⽤汇编编写了Unics

Dennis Ritchie为了解决平台问题开发出C语⾔,重构Unix
Unix
由AT&T Bell实验室开发,当时式计算机界的主流操作系统。
操作系统⽼⼤哥
20 世纪 60 年代,UNIX系统是开源而且免费的,供⼤学教学使⽤
但是在 1979 年时,AT&T 公司宣布了对 UNIX 系统的商业化计划
衍⽣出两⼤派别:BSD的 Unix 和AT&T 的Unix
类Unix
各种版本的 UNIX 系统,⽬前常⻅的有 Sun Solaris、FreeBSD、IBM AIX、HP-UX OS X基于FreBSD Berkeley
Software Distribution,伯克利软件发布版

GNU :GNU is Not Unix


GCC :GNU Compiler Collection
,GNU通⽤公共许可证 复制⾃由 :允许把软件复制到任何⼈的电脑中,
GNU GPL GNU General Public License
并且不限制复制的数量。 传播⾃由:允许软件以各种形式进⾏传播。 收费传播:允许在各种媒介上出售该软件,
但必须提前让买家知道这个软件是可以免费获得的;因此,⼀般来讲,开源软件都是通过为⽤⼾提供有偿服务的形
式来盈利的。
修改⾃由:允许开发⼈员增加或删除软件的功能,但软件修改后必须依然基于 GPL 许可协议授权。
企鹅 Tux
 

系统
Linux 系统包括 Linux Kernel, GNU Software, X Window System, Package Manager 等。
Linux Kernel
Linux 系统内核指的是⼀个由 Linus Torvalds 负责维护,提供硬件抽象层、硬盘及⽂件 系统控制及多任务功能的系
统核⼼程序。
Linux 发⾏套件系统是我们常说的 Linux 操作系统,也即是由 Linux 内核与各种常⽤软件的集合产品。

GNU/Linux 命名争议

GNU 开发者们主张以 GNU/Linux 来称呼各种 Linux 操作系统。 Linus Torvalds 认为 GNU/Linux 这个称呼
是合理的,但⽤ GNU/Linux 来称呼所有的 Linux 发⾏版 (Debian, Red Hat Linux, SuSE Linux 等) 是不合理
的。
Linux Kernel 是操作系统的核⼼,功能包括
进程管理 (fork, exec)
内存管理 (malloc, free)
⽂件系统 (ext4, btrfs, xfs, vfat)
服务管理 (systemctl)
⽹络协议 (tcp/ip stack)
硬件驱动 (linux 是⽀持硬件驱动最多的操作系统)
GNU Software
coreutils (chmod, ls, cp, mv, mkdir) 所有⽤⼾都会⽤到且离不开的命令集
grub
Hurd
binutils (as, ld, objdump)
gcc, glibc, gdb
autoconf, automake
gtk+
gnome
bash
emacs

Linux 发⾏版(Package Manager )


DPKG/APT 系
Debian ( 第⼆⽼的发⾏版,最⼤的社区发⾏版,祖师爷级别)
Ubuntu (派⽣⾃ Debian ⽤⼾最多)
Kubuntu, Lubuntu, *ubuntu (Ubuntu 换了桌⾯)
Deepin 墙裂推荐
Mint (和 Ubuntu 类似)
Kali (渗透攻防)
Raspbian (树莓派)
Xilinux 赛琳斯linux

RPM/YUM 系
业界⽼⼤)
Red Hat Enterprise Linux (RHEL
Fedora (社区维护,⽤于测试新特性)
CentOS (社区维护,主打稳定、免费,已被红帽收编)

PACMAN 系
Arch Linux ( 滚动更新, Wiki 完善,软件多到哭)
Manjaro ( 不滚了、稳定、美观、有桌⾯)
其它
Slackware最早的发⾏版
SUSE 商业发⾏版,zapper 包管理
gentoo 所有软件需⾃⾏编译
openSUSE 源⾃德国的⼀款著名的 Linux 系统,在全球范围内 有着不错的声誉及市场占有率。
oreos 容器化发⾏版,只能安装 Docker 容器
Apline 主打轻量和安全的发⾏版,使⽤ apk 包管理

X Window System
 

执⾏在UNIX系统上的视窗系统 X Server主要是处理输⼊输出的信息,X Client运⾏⼤部分应⽤程序的运算功能,X


Protocol则是建⽴X Server和X Client的沟通管道。 X Window System并⾮⼀个软件,而是⼀个协议,这个协议定
义⼀个系统成品所必需具备的功能。能满⾜此协议及 符合X协会其它规范的系统便可称为X。⼀个 C/S 架构的设备
独⽴的框架/协议,⽤于构建 GUI 环境。
X SERVER

处理输⼊事件 (⿏标、键盘事件) 传输Events给client,接受Request 处理窗口绘制请求(交给显卡渲染,输出到


显⽰器上) 使⽤ sudo apt list xserver-* 查看⾃⼰电脑上的 X Server.
X CLIENT

的计算处理 返回Request给server
Events

X Protocol

提供client 和server间的通信
流程
(1)⽤⼾通过⿏标键盘对X server下达操作命令 (2)X server利⽤Event传递⽤⼾操作信息给X client (3)X
client进⾏程序运算 (4)X client利⽤Request传回所要显⽰的结果 (5)X server将结果显⽰在屏幕上

X SESSION MANAGER
⼀个 session 表⽰⼀系列窗口程序的状态,SM ⽤于保存和恢复这些程序的状态。
DISPLAY MANAGER

DM 是⼀个系统的登录界⾯,登录之后唤起 Window Manager。


XDM
GDM
KDM
LightDM

WINDOW MANAGER

WM ⽤于处理窗口的焦点、位置、移动、缩放和样式。 ⾼玩可以不⽤DE,只⽤WM。
DESKTOP ENVIRONMENT

DE是⼀系列软件的集合,包括 SM, DM, WM 和⼀些实⽤的图形化应⽤程序,给⽤⼾提供⼀致性的图形化⽤⼾体


验。
XFCE
LXDE
KDE
GNOME
MATE
Unity
DDE

Linux 的应⽤
1. 服务器领域

随着 Linux 容器的发展,服务器领域的 Linux 相对 Windows 和 Unix 会持续增⻓。


2. 超算领域
2017 年 Top 500 的超算⼏乎全都是 Linux 系统,表明 Linux 的性能、稳定性、扩展性⾮常强⼤。
3. 嵌⼊式领域
Openwrt 路由器
Android ⼿机操作系统
Raspberry Pi 树莓派
xillinux 赛琳斯

4. 桌⾯领域

简直少得可怜,主要原因还是软件⽣态不够强⼤,学习⻔槛⾼等。
 

Console, Terminal, Shell


console:早期的电脑上对电脑进⾏操作的控制台
terminal:⽀持多⽤⼾同时连接的主机上,每个⽤⼾所使⽤的操作设备
shell: 命令⾏的解释器软件
tty: 电传打字机 Teletypewriter 的缩写,是当时最流⾏的终端设备

现代 Linux 上
/dev/console控制台终端,与显⽰器连接
/dev/tty*虚拟控制台终端设备,与 /dev/console 相关联,通过 ctrl+alt+fn 来切换,tty0 表⽰当前激活的
tty,tty0 和 console 是同⼀个概念
/dev/pty 伪终端 (xterm, gnome-terminal)
/dev/ptmx 伪终端的 master 部分
/dev/pts/* 伪终端的 slave 部分(每打开⼀个终端模拟器的⻚⾯就会创建⼀个 pts 设备)
shell 命令⾏解释器 (sh, bash, csh, zsh, fish)

常⽤命令
命令 作⽤
ls 列出当前⽬录内容
pwd 打印当前⽬录
cd <dir> 切换⽬录
rm [-rf] <filename> 删除⽂件
cp [-rf] <filename> 复制⽂件
mv <src> <dst> 移动⽂件
cat [file] ... 合并⽂件内容打印到标准输出
tail -n filename 查看⽂件最后 n ⾏内容
less <filename> 分⻚显⽰⽂件内容,按 n 下⼀⻚,按 b 上⼀⻚
grep <pattern> [FILE] 在给定的⽂件中搜索指定的字符串
find [path...] [expression] 查找路径中满⾜匹配条件的⽂件
tar zvxf filename.tar.gz 解压提取 .tar.gz 格式的⽂件
unzip filename.zip -d dir 解压 filename.zip 到 dir ⽬录
man command 查看帮助
ping <destination> 向远程主机发送 ICMP 数据包
who 列出当前登录的⽤⼾名
sudo command 以 root ⾝份执⾏命令
su [user] 切换⽤⼾
uname -a 查看系统内核、架构、主机信息
screenfetch 显⽰系统发⾏版信息
df -h 查看磁盘使⽤情况
ps -aux 查看进程信息
top 和 htop 命令⾏版的 “任务管理器”
shutdown -h now 关机
 

管道和重定向
Linux 中,每个进程启动时会打开三个⽂件描述符,分别为 stdin, stdout, stderr.
重定向的作⽤是,改变这⼏个⽂件描述符关联的⽂件,从而改变输⼊输出的位置。
管道的作⽤是,将前⼀个命令的标准输出作为后⼀个命令的标准输⼊。
重定向符号 n> 和 n>> ,前者表⽰写⼊,后者表⽰追加。n 表⽰⽂件描述符,stdin = 0, stdout = 1, stderr = 2, n
默认为 1.
# 向 hello.txt 中写⼊ hello
echo "hello" > hello.txt
# 查看⽂件内容
cat hello.txt
# 向 hello.txt 中写⼊ world
echo "world" > hello.txt
# 查看⽂件内容
cat hello.txt
# 向 hello.txt 中追加 hello
echo "hello" >> hello.txt
# 查看⽂件内容
cat hello.txt

管道符号 | 。
# 查看所有已安装的名字含有 xserver 的包
sudo apt list | grep xserver | grep installed

xargs 将标准输⼊的内容作为⼀条命令的命令⾏参数。
# 删除所有 .pyc ⽂件
find . -name "*.pyc" | xargs rm -rf
# 统计 .py ⽂件的代码⾏数
find . -name "*.py" | xargs wc -l

⽬录结构
根⽬录
/
├── bin # 所有⽤⼾可执⾏的⽂件
├── boot # 引导器和内核
├── dev # 设备⽂件
├── etc # 配置⽂件
├── home # ⽤⼾主⽬录
├── libxx # 动态库 .so
├── media # 可移出设备的挂载点
├── mnt # 临时挂载点
├── opt # ⾃带依赖的软件
├── proc # 包含内核和进程信息的虚拟⽂件系统
├── root # root ⽤⼾的主⽬录
├── run # 运⾏时⽂件⽬录,如进程 pid ⽂件,套接字⽂件
├── sbin # 只有 root ⽤⼾可执⾏的⽂件
├── sys # 包含内核和系统信息的虚拟⽂件系统
├── tmp # 临时⽂件系统
├── usr # Unix System Resources 的缩写,存放软件
└── var # 存放经常变化的⽂件,如⽇志

⼀切皆⽂件(重要的Linux哲学)
/proc ⽂件系统,是⼀个虚拟⽂件系统,包含进程运⾏的所有信息。⼦⽬录全以进程 pid 命
名, /proc/<pid>/cmdline ⾥可以看到进程的命令⾏。
/sys ⽂件系统,是⼀个虚拟⽂件系统,包含内核中⾮进程信息的所有信息。

/dev ⽬录,包含所有设备⽂件。

存放软件的⽬录
/bin , /sbin , libxx 系统启动所必须的命令。
/usr/bin , /usr/sbin , /usr/libxx 系统⾃带的⾮必需命令。
/usr/local/bin/ , /usr/local/sbin , /usr/local/libxx ⽤⼾安装的命令。
/opt 存放那些⾃带所有依赖,不需要安装到上⾯那些⽬录的软件,如 Pycharm IDE, JDK 等。

以上说法并不严谨,因为现在系统启动需要的依赖越来越多,所以都是通过 initramfs 启动的,因此本地系统上


/bin 与 /usr/bin 的区别已经不明显,有很多要把这两层⽬录合并的呼声。挺有意思的⼀件事,具体内容请阅
读 https://askubuntu.com/questions/130186/what-is-the-rationale-for-the-usr-directory .
⽂件类型, ls -al 第⼀列的第⼀个字符表⽰⽂件类型。
符号 类型
c 字符设备, /dev/zero , /dev/null , /dev/ttyx

b 块设备, /dev/sdx , /dev/loopx`


p FIFO 设备,有名管道

s socket ⽂件

d ⽬录
l 符号链接
 

⽂件系统
Linux 是⽀持⽂件系统最多的操作系统
⽂件系统 描述
ext4 扩展⽂件系统,具有⽇志功能
btrfs ⽀持写时复制、压缩、⼦卷的现代⽂件系统
vfat FAT ⽂件系统

ntfs Windows NT ⽂件系统

exfat 微软开发的适合闪存设备的⽂件系统
FAT32 micro SD

hfs 苹果的⽂件系统
iso9660 光盘和镜像⽂件系统
tmpfs 内存⽂件系统, /dev/shm
squashfs 只读压缩⽂件系统,⽤于 initramfs
overlayfs ⽀持联合挂载的⽂件系统,⽤于 Docker 容器
Linux 中使⽤ mkfs.xxfs 来创建⽂件系统(这个概念等同于 Windows 上的格式化磁盘分区)。
创建好的⽂件系统需要 mount 挂载到⼀个⽬录下才能访问,此时访问挂载的⽬录即访问该⽂件系统的根⽬录。
Linux 开机启动的时候会读取 /etc/fstab ⽂件,该⽂件包含分区挂载的信息,⽤于启动时⾃动挂载分区。

# 创建⼀个 200M 的⽂件


dd if=/dev/zero of=/tmp/test.img bs=1M count=200
# 创建 ext4 ⽂件系统
sudo mkfs.ext4 /tmp/test.img
# 挂载镜像
sudo mount /tmp/test.img /mnt
# 修改权限
sudo chown zyh /mnt
# 测试⽂件系统,接下来的操作就和⼀个普通分区没有区别了
cd /mnt
echo hello > hello.txt

注:在这个镜像上测试各种⽂件系统的创建吧,记得要先 umount 才能格式化哦。


 

⽤⼾管理
Linux 是⼀个多⽤⼾的操作系统,同⼀时刻可以有多个⽤⼾同时登陆。
/etc/passwd 保存账⼾和密码信息
/etc/shadow 保存加密过的⽤⼾密码
/etc/group 保存⽤⼾组信息
/etc/gshadow 保存加密过的⽤⼾组密码
创建⼀个⽤⼾并登录
# 添加⽤⼾组 test
sudo groupadd test
# 添加⽤⼾ test,创建主⽬录 /home/test
sudo useradd -m -d /home/test test -g test
# 修改⽤⼾默认 shell 为 bash
sudo usermod -s /bin/bash test
# 为⽤⼾设置密码
sudo passwd test
# 按 ctrl+alt+f2 切换 tty,登录⽤⼾
# 登录后查看当前⽬录
pwd
ls -al
# 启动桌⾯环境,按 ctrl+alt+fx 在两个桌⾯环境间切换
startx

通过以上的操作,可以看出 Linux 是真正的多⽤⼾操作系统,新⽤⼾登录并没有使⽼⽤⼾下线。 但是


/dev/console 只有⼀个,只有处于激活状态的 tty 才能向显⽰器输出图像、处理⽤⼾输⼊、播放⾳频等(可以试
⼀下哦)。
切换回⽼⽤⼾,尝试删除新⽤⼾主⽬录下的⽂件,并没有写权限。
cd /home/test
rm -f .bashrc
# 输出
# rm: ⽆法删除'.bashrc': 权限不够
# root ⽤⼾可以删除
sudo rm .bashrc

删除刚刚创建的⽤⼾
# 先注销刚刚登录的⽤⼾
# 删除⽤⼾和其主⽬录,和同名的⽤⼾组
sudo userdel -r test

⽂件系统权限
执⾏ ls -al 命令时,第 1, 3, 4 列显⽰了⽂件的权限信息,⽰例如下。
-rw-r--r-- 1 zyh zyh ⽉
4867 6 19 13:34 .bashrc

第三列 zyh 表⽰这个⽂件的所有者 (owner) 是 zyh。 第四列 zyh 表⽰这个⽂件所属的⽤⼾组 (group) 是 zyh。
第⼀列 -rw-r--r-- 共有10个字符
第⼀个字符表⽰⽂件类型,其值可为 d ⽬录, - 普通⽂件, l 链接⽂件, b 块设备⽂件, c 字符设备
⽂件
后9个字符,每三个⼀组,每组分别表⽰,所有者权限,⽤⼾组权限,其它⽤⼾权限,⼀组的三个字符为 r
可读权限, w 可写权限, x 可执⾏权限。
权限还可以使⽤⼋进制编码来表⽰
类型 读 写 执⾏
- r w x

0 4 2 1

0644 -rw-r--r--
0755 -rwxr-xr-x
0666 -rw-rw-rw-

对于之前的 .bashrc ⽂件 :所有者为zyh,⽤⼾组为 wqy,类型为普通⽂件,所有者可读写,同⽤⼾组⽤⼾可


读,其它⽤⼾可读。
回想之前创建 test ⽤⼾后,其主⽬录下满⾜什么条件的⽂件可以不以 root 权限删除?
所有者或⽤⼾组为 zyh
权限为 -rw-r--rw
# 修改所有者
sudo chown zyh .bashrc
# 修改⽤⼾
sudo chgrp zyh .bashrc
# 修改⽂件权限
sudo chmod 0646 .bashrc
# 也可以⽤ chmod [ugoa]+[rwx] 来修改权限,ugoa 依次表⽰所有者、⽤⼾组、其他⽤⼾、全部⽤⼾
sudo chmod o+w .bashrc

服务管理
服务 (service) 是⼀个(在后台)⻓期运⾏的程序。例如 Web 服务,数据库服务,shadowsocks 等。
以 ssh 为例
systemctl status [service] # 查看服务状态
systemctl start <service> # 启动服务
systemctl stop <service> # 停⽌服务
systemctl enable <service> # 开机启动服务
systemctl disable <service> # 开机不启动服务

 
信号/软中断
中断是由硬件产⽣中断信号,CPU暂停当前进程,执⾏中断处理程序的过程。中断的存在为操作系统提供了抢占式
进程调度的⽀持。
信号是在软件层⾯上对中断的⼀种模拟,所以也叫软中断。信号可视为进程间进⾏异步通信的⼀种⽅式。信号由硬
件(键盘)和软件(kill, raise 命令) 产⽣,内核将信号加⼊信号队列,在接收信号的进程执⾏时将执⾏信号处理函
数。
信号名称 值 默认动作 触发
终⽌进程 ⽤⼾退出Shell时,由该shell启动的所有
SIGHUP 1
进程都会收到这个信号。
SIGINT 2 终⽌进程 ctrl+c

SIGQUIT 3 终⽌进程 ctrl+\

SIGKILL 9 ⽆条件终⽌进程 kill -9

终⽌进程,可以被阻塞或终⽌,以
SIGTERM 15
便在退出时回收资源 kill -s SIGTERM

挂起进程,可以⽤ fg/bg 恢复执⾏


SIGSTP 18,20,24
前台或后台的进程 ctrl+z

注: ctrl+d 表⽰ EOF ,它不是⼀个信号,但是可以表⽰标准输⼊结束。


向指定 pid 的进程发送信号
kill -s SIGXXX <pid>
kill -n $SIGNUM <pid>
kill -$SIGNUM <pid>

使⽤ kill -l 查看所有⽀持的所有信号
➜ ~ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
使⽤ stty -a 查看信号快捷键
wqy@wqy-PC:~$ stty -a
speed 38400 baud; rows 34; columns 91; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -
ixany
-imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl
echoke
-flusho -extproc

Linux 的安装和启动
Linux 安装程序做了什么?
1. 复制根⽂件系统到⽬的分区
2. 设置语⾔、时区
3. 创建⽤⼾
4. 安装内核和 initramfs
5. 安装引导器 GRUB / syslinux

Linux 的启动过程

1. BIOS/UEFI 启动引导器
2. 引导器装载内核和 initramfs
3. 内核将 initramfs 挂载为根⽬录
4. 内核执⾏ /sbin/init 来初始化系统、设置硬件驱动
5. /sbin/init 在加载完驱动后,挂载真正的根⽬录,切换根⽂件系统
6. 执⾏根⽂件系统中的 /sbin/init
7. 移除 initramfs , 系统启动完成

本地⽂件系统中的 /sbin/init 是第⼀个⽤⼾进程,所有进程都是它的⼦进程,它不能被杀死。


系统启动时,它负责启动各种开机启动的服务,包括 sshd , 桌⾯环境等。
常⻅的 /sbin/init 有
SysV Init 已过时,同步阻塞
Upstart Ubuntu 15.04 之前默认使⽤,⽀持异步任务
Systemd 主流发⾏版默认,⽀持异步任务
  特性 命令 配置
SysV Init 基于运⾏级别 service /etc/init.d

Upstart 事件驱动 initctl /etc/init

Systemd 事件驱动 system-ctl /usr/lib/systemd

有趣的命令
打印⼀条随机的有正能量的谚语。
fortune

cowsay 打印⼀头⽜说话的 ASCII 字符画。

它俩组合起来可以产⽣奇妙的化学反应。
➜ ~ fortune| cowsay
_________________________________________
/ You are deeply attached to your friends \
\ and acquaintances. /
-----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||

作业
安装Arch Linux,包括图形界⾯
Markdown 记录安装过程 -图⽚- 命令

发送到 1786077116@qq.com

You might also like