Author:Onceday date:2022年7月29日
Linux基础知识整理系列,不积跬步无以至千里。
在Linux里,每个硬件都被当成一个文件来看待。
常见硬件的设备名(持续更新):
| 设备 | 设备在linux中的文件名 |
|---|---|
| SCSI/SATA/USB磁盘驱动器 | /dev/sd[a-p] |
| U盘 | /dev/sd[a-p] |
| 虚拟磁盘Virtio接口 | /dev/vd[a-p] |
| 软盘驱动器 | /dev/fd[0-7] |
| 打印机 | /dev/lp[0-2],25针接口;/dev/usb/lb[0-15],USB接口 |
| 鼠标 | /dev/input/mouse[0-15]通用;/dev/psaux(PS/2接口)/dev/mouse(当前鼠标) |
| CD-ROM/DVD-ROM | /dev/scd[0-1];/dev/sr[0-1];/dev/cdrom当前CD-ROM |
| 磁带机 | /dev/ht0;/dev/st0;.dev/tape当前磁带 |
| IDE磁盘驱动器 | /dev/hd[a-d] |
MBR(Master Boot Record),主引导记录。
这种分区格式, 通常把启动引导程序记录区和分区表放在磁盘的第一个扇区。
该扇区通常是512字节,其中446字节用来存放启动引导程序。
剩余的64字节用来存放分区表,最多有四组记录。每组记录了该区段的起始和结束的柱面号码。
这四个分区记录,被称为主要分区(Primary),其固定分配/dev/sda1-4四个名字。
可以拿主要分区的空间来存放扩展分区(Extended),其指向分区存放有额外的分区表。
扩展分区的分配号码从/dev/sda[5, xx]开始,最低序号为5。
由扩展分区划分出来的多个新分区,称为逻辑分区(logical partition)。
其具有以下两个较大的缺陷:
操作系统无法使用2.2TB以上的磁盘容量
MBR仅有一个区块,若被破坏后,经常无法或很难恢复。
GPT(GUID partition table)磁盘分区表
使用逻辑区块地址LBA(Logical Block Address)来替代扇区概念,其大小默认为512字节。
GPT使用开头的34个LBA区块来记录分区信息,此外还使用磁盘最后的34个LBA拿来做另外一个备份。
LBA0区块用来兼容MBR分区格式:
该分区的格式和MBR一样,但放入了一个特殊标识符,可以表明此磁盘是GPT格式之意。
LBA1(GPT表头记录):
记录了分区表本身的位置和大小,同时记录了备份用的GPT分区放置的位置,以及分区表的校验码(CRC-32),
LBA2-33(实际记录分区记录):
从LBA2区块开始,每个LBA都可以记录4组分区记录,所以在默认的情况下,总共可以有4x32=128 组分区记录,每组LBA有512字节,每组记录用到128字节的空间,GPT在每组记录中分别提供64位来记录开始/结束的扇区号码。因此单个最大空间高达1ZB。
流程如下:
BIOS(Basic Input Output System),基本输入输出系统:启动主动执行的固件,会认识到第一个可启动的设备。
MBR(Master Boot Record),主分区记录:第一个可启动设备的第一个扇区内的主引导记录块,内含启动引导代码。
启动引导程序(boot loader):一个可读取内核文件来执行的软件
内核文件:开始启动操作系统
注意: 如果分区表为GPT格式,BIOS可以从LBA0的MBR兼容区块读取第一阶段的启动引导程序代码,如果启动引导程序能够支持GPT,那么BIOS同样可以读取到正确的操作系统内核。如果启动代码不懂GPT,那么无法读取内核文件,也就无法启动。
Boot loader的主要任务有以下部分:
提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能。
加载内核文件:直接指向可使用的程序区段来启动操作系统。
转交其他启动引导程序:将启动管理功能转交给其他启动引导程序负责。
启动引导程序除了可以安装在MBR之外,还可以安装到每个分区的启动扇区(boot sector)。
UEFI(Unified extensible Firmware interface),统一可扩展固件接口。
以下是UEFI和传统BIOS的差异:
| 比较项目 | 传统BIOS | UEFI |
|---|---|---|
| 使用程序语言 | 汇编语言 | C语言 |
| 硬件资源控制 | 使用中断(IRQ)管理/不可变的内存存取/不可变的输入/输出存取 | 使用驱动程序与协议 |
| 处理器运行环境 | 16位 | CPU保护模式 |
| 扩充方式 | 通过IRQ连接 | 直接加载驱动程序 |
| 第三方厂商支持 | 较差 | 较佳且可支持多平台 |
| 图形能力 | 较差 | 较佳 |
| 内置简化操作系统环境 | 不支持 | 支持 |
一般而言,BIOS boot需要一个额外的分区,一般2MB大小,存放实际的启动程序。
UEFI则需要一个FAT格式的文件系统分区(/boot),大约500MB到1GB大小。
因此现在前两个分区一般都是他们占用了,实际磁盘分区都会从/dev/sda3开始了。
LInux默认有六个终端存在,X Windows启动在tty1。
使用[Ctrl]+[Alt]+[F1-F6]指令便可以进行切换。
使用su 用户名可以切换用户。
使用exit可以注销登入。
使用locale可查看使用的语系。
使用以下两个指令可切换到英文(中文下,终端会有乱码)
LANG=en_US.utf8
export LC_ALL=en_US.utf8
date #按默认格式直接输出日期时间
date --help #获取帮助文档
显示日历:
cal #默认显示当月时间
cal 2022 #显示这一年的日历
cal 10 2022 #显示此年该月的日历
man date
查询的date(1)的数字含义如下:
| 代号 | 代表内容 |
|---|---|
| 1 | 用户在shell环境中可以操作的命令或可执行文件 |
| 2 | 系统内核可调用的函数和工具 |
| 3 | 一些常用的函数(function)与函数库(library),大部分为c的函数库(libc) |
| 4 | 设备文件的说明,通常在/dev下的文件 |
| 5 | 配置文件或者某些文件的格式 |
| 6 | 游戏(games) |
| 7 | 惯例与协议等,例如Linux文件系统,网络协议,ASCII代码等的说明 |
| 8 | 系统管理员可用的管理命令 |
| 9 | 跟内核有关的文件 |
man page常用按键:
| 按键 | 进行工作 |
|---|---|
| 空格键 | 向下翻一页 |
| Page Down | 向下翻一页 |
| Page Up | 向上翻一页 |
| Home | 去到第一页 |
| [End] | 去到最后一页 |
| /string | 向下查找string这个字符串 |
| ?string | 向上查找string这个字符串 |
| n,N | 利用/或?查找字符串,可以使用他们 |
| q | 结束这次man page |
在linux上可以使用info xxx来代替,可提供超链接能力,操作与man类似。
更多额外的文档帮助可以在:/usr/share/doc下面查一查。
直接使用即可,比较简单,有中文介绍。
首先需要内存数据同步写回磁盘。
sync #同步所有缓存文件
sync [-f] 文件 #同步该文件及他所包含的文件系统
sync [-d] 文件 #仅同步文件数据,不处理无需同步的元数据
然后可以使用以下的命令进行不同的操作:
shutdown #1分钟后关机
shutdown -h #立即关机
shutdown -c #取消关机
shutdown -k #假装要关机
shutdown -r #重新启动
以下三个命令也很常用:
reboot #重新启动
halt #系统停止
poweroff #系统关机
用户账号信息保存在/etc/passwd。
个人密码信息保存在/etc/shadow。
所有组名信息记录在/etc/group
使用命令ls -al查看所有文件和属性:
[[-][rwxrwx---]][1][root][root][1456][May 4 18:25][xxxx.xxx]
其输出行形式如图所示:
第一个斜杠字符代表了文件类型:
[l]表示链接,
[-]表示文件,
[d]表示目录,
[b]表示设备文件里面可供存储的周边设备,
[c]表示为设备文件里面的串行端口设备,例如键盘、鼠标。
[s]数据接口文件,如sockets。
[p]数据输送文件(FIFO,pipe)
[1]这个表示链接数。
后面依次是文件拥有者、文件所属用户组、大小、修改时间、文件名。
修改文件所属用户组:
chgrp 用户组 [-R] 目录/文件 #-R用于文件目录下的递归修改
修改文件拥有者:
chown [-R] 账号名[:用户组名] 文件/目录 #-R用于文件目录下的递归修改
修改文件权限:
对于标准的9位权限:rwxrwxrwx。
将每一位看成2进制,则可以看成三个数字[xyz]:[rwx][rwx][rwx]=[0-7][0-7][0-7]
常用指令如下:
chmod [-R] xyz 文件/目录 #-R用于文件目录下的递归修改
可以使用以下组合进行细节修改:
| 命令 | 参数 | 方式 | 权限 | 对象 |
|---|---|---|---|---|
| chmod | u(user)/g(group)/o(others)/a(all) | +(加入)/-(移除)/=(设置) | r/w/x | 文件/目录 |
示例如下:
chmod u=rwx,go=rx .bashrc
chmod a+w .bashrc
rwx对文件来说,意义如下:
r(read):可以读取此文件的实际内容,如读取文本文件的文字内容。
w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件)。
x(execute):该文件具有可以被系统执行的权限。
rwx对于目录来说,意义如下:
r(read contents in directory)读取目录结构列表的权限,如使用ls命令浏览文件。
w(modify contents of directory)具有改动该目录结构列表的权限。
1.建立新的文件和目录
2.删除已经存在的文件和目录
3.将已存在的文件和目录进行更名
4.移动该目录内的文件、目录位置
x(access directory),是否可以把当前目录变成工作目录
常见的三层目录架构:
/(root,根目录),与启动系统有关。
/usr(unix software resource),与软件安装/执行有关。
/var (variable),与系统运行过程有关。
FHS定义的根目录下面的目录:
| 目录 | 应放置的文件内容 |
|---|---|
/bin | 存放执行文件的地方,一般由root直接调用 |
/boot | 存放启动会使用到的文件,如内核vmlinuz,启动引导程序/grub2 |
/dev | linux上的任何设备和接口设备都是以文件的形式存放在这个目录里面 |
/etc | 系统的主要配置文件几乎都放置在这个目录里面,如账户密码,服务的启动文件。 |
/lib | 系统的库函数 |
/media | 放置多媒体设备 |
/mnt | 暂时挂载某些额外的设备 |
/opt | 给第三方辅助软件放置的目录 |
/run | 启动后运行产生的各类信息 |
/sbin | 启动过程(启动、修复、还原系统)所需的命令 |
/srv | 网络服务启动后,其所需的数据目录 |
/tmp | 让一般用户或者正在执行的程序暂时放置文件的地方,任何人都能存取。 |
/home | 系统默认的用户家目录 |
/root | 系统管理员的家目录 |
/lost+found | 使用标准的ext2、ext3、ext4文件格式产生的目录,用于发生错误时,存放一些片段。 |
/proc | 虚拟文件系统,数据在内存中,如系统内核,进程信息,外接设备的状态等 |
/sys | 虚拟文件系统,记录内核与系统硬件信息相关的内容。 |
/usr/bin | 所有一般用户能够使用的命令都在这里。 |
/usr/lib | 与/lib一样,直接链接,存放函数库文件 |
/usr/local | 安装的本机自己下载的软件 |
/usr/sbin | 非系统正常运行所需的系统命令,/sbin直接链接 |
/usr/share | 放置只读的数据文件,包括共享文件,比如帮助文档 |
/usr/include | 程序语言用到的各类头文件 |
/usr/src | 一般的源代码文件 |
/var/cache | 程序运行过程的缓存 |
/var/lib | 程序本身执行过程中,需要使用到的数据文件放置的目录。 |
/var/log | 日志文件放置的地方 |
/var/mail | 放置个人电子邮件的目录 |
/var/run | 某些程序或者服务启动后,会将它们的PID放置在该目录下。 |