<commit_before>---
layout: post
title: 鸟哥的Linux私房菜 基础学习篇 笔记
category: notes
description: 这本书个人并不是太喜欢，觉得太啰嗦，扯皮的话说得太多。广度还可以，深度不够，作为Linux入门还凑合。
---

* 目录
{:toc}

#1. 第一部分 Linux规划与安装
一些概念

* 当使用M，G之类的单位时，如果指硬盘、文件、内存这种容量单位，按1024计算。如果指频率、带宽这种速度单位，按1000计算。
* 操作系统包含内核和系统调用两部分，对下直接操作硬件，对上为应用程序提供访问操作系统的接口。
* 操作系统内核的功能：1. 系统调用接口。2.程序管理。3.内存管理。4.文件系统管理。5.设备驱动。
* Linux distribution = Kernel + Softwares + Tools
* Linux两大系统：使用RPM方式安装软件的Red Hat, Fedora, SuSE等；使用dpkg方式安装软件的Debian，Ubuntu, B2D等。
* Linux系统中所有硬件设备都当作一个文件。IDE硬盘对应文件名/dev/hd[a-d]，SATA/USB硬盘对应文件名/dev/sd[a-p]。

##1.1 磁盘分区
磁盘每个扇区512bytes，第一个扇区记录了主引导分区（MBR，Master Boot Record），446bytes和分区表（partition table），64bytes。

###1.1.1 磁盘主引导分区
开机过程：

1. BIOS启动第一个程序，识别第一个可开机设备。（硬件信息从CMOS中读取）
2. MBR在设备第一个扇区，包含一个最基本的引导加载程序。
3. 引导加载程序（Boot loader）读取内核文件。
4. 内核文件开始操作系统。

引导加载程序提供的功能：

* 提供菜单，用于开机多重引导
* 载入内核文件
* 将引导加载任务转交其他loader，用于多重引导功能

引导加载程序不仅可以安装在MBR，还能安装在每个分区的引导扇区。每个loader只认识自己系统分区内的开机内核文件和其他loader。

Linux的loader可以手动设置菜单，但Windows装机的时候会覆盖MBR以及自己分区的启动扇区。所以装双系统时必须先装Windows再装Linux。

###1.1.2 磁盘分区表
柱面（cylinder）为文件系统的最小单位，也是分区的最小单位。

磁盘分区表包含四组记录区，每组记录区记录了该区段的起始和结束柱面号。分区可以是主（Primary）分区或者扩展（Extended）分区类型。其中扩展分区最多只能有一个。

扩展分区记录了分区范围，同时扩展分区本身只是额外的用来记录分区的扇区。扩展分区本身无法格式化，由扩展分区分出来的分区被称为逻辑分区（logical partition）。

设备文件名前4个/dev/hda[1-4]保留给主分区或扩展分区，逻辑分区的设备文件名从5开始。

###1.1.3 目录结构
Linux的文件系统是目录数结构，根目录为"/"目录。对每个磁盘分区，需要使用一个目录当成进入点，使该磁盘内的数据都放置在该目录下。将磁盘分区与目录相关联的过程叫挂载，这个目录叫挂载点。

若根目录"/"在partition1，"/home"目录挂载在partition2，则"/home"目录下所有文件都在partition2。

重要目录：
/boot : 放在整个硬盘最前面，100MB左右（小于1024个柱面）。有些老主板的BIOS无法识别大硬盘，导致开机无法启动。
/ : 根目录
/usr：系统可执行文件  
/var：系统数据  
/home：用户数据  
swap：交换分区  

###1.1.4 文件系统类型
在给Linux系统分区时，可以选择如下文件系统类型

* ext2/ext3: Linux适用的文件系统类型。
* physical volume (LVM): 可用来弹性调整文件系统大小的类型。
* software RAID: 用软件仿真磁盘阵列。
* swap: 内存交换空间类型。如果用此类型就不需要指定挂载点。
* vfat: 同时被Linux和Windows支持的类型。

##1.2 安装启动相关
Windows的环境中最好将Linux的根目录与swap取消挂载，否则Windows的资源管理器会提示你格式化这两个分区。

Linux不要随便删除，因为grub会读取Linux根目录下的/boot/目录内容。如果删除了，Windows也无法启动。

即使有多块硬盘，也只有一个MBR，BIOS会读取第一个可开机设备的MBR。

Linux默认提供6个终端界面tty1~tty6，还有一个图形界面。
CTRL+ALT+F1~F6: 文字界面登录tty1~tty6终端。 
CTRL+ALT+F7: 图形界面桌面。

##1.3 执行Linux命令
Linux命令的基本格式为：

    command [-options] para1 para2
    command: 命令或者可执行文件
    [Tab]键：在输入命令时作“命令补全”，在输入para时，作“文件补齐”
    [Ctrl]+c: 中断当前命令执行
    [Ctrl]+d: 作EOF，代表键盘输入结束
    
    
命令太长时，使用反斜杠"\"+[Enter]换行。

##1.4 命令查询
man是manual的简称，可以查询Linux的系统相关信息，类似的还有info命令。man可查寻的内容包括：

* 1: 命令或可执行文件
* 2: 系统内核可调用的函数于工具
* 3: 一些常用的函数与函数库，大部分为C的函数库(libc)
* 4: 设备文件的说明，通常在/dev下的文件
* 5: 设备文件或者是某些文件的格式
* 6: 游戏
* 7: 惯例于协议等，如Linux文件系统、网络协议、ASCII说明
* 8: 系统管理员可用的管理命令
* 9: 根kernel有关的文件

这些项会在查询结果的后面用相应数字加以区分。同时可用`man [number] item`的方式查询某个类型的项。

    man -f item     # 查找所有类型中与item有关的文件
    man -k item     # 在系统说明文件中搜索字符串item

在man page常用的按键
space       向下翻一页
Page Down   向下翻一页
Page Up     向上翻一页
Home        去第一页
End         去最后一页
/string     向下查询string
?string     向上查询string
n,N         n表示继续向下查询，N表示继续向上查询，不管是用的/或?
q           退出此man page
 





<commit_msg>Add linux file chapter6<commit_after>---
layout: post
title: 鸟哥的Linux私房菜 基础学习篇 笔记
category: notes
description: 这本书个人并不是太喜欢，觉得太啰嗦，扯皮的话说得太多。广度还可以，深度不够，作为Linux入门还凑合。
---

* 目录
{:toc}

#1. 第一部分 1-5章 Linux规划与安装
一些概念

* 当使用M，G之类的单位时，如果指硬盘、文件、内存这种容量单位，按1024计算。如果指频率、带宽这种速度单位，按1000计算。
* 操作系统包含内核和系统调用两部分，对下直接操作硬件，对上为应用程序提供访问操作系统的接口。
* 操作系统内核的功能：1. 系统调用接口。2.程序管理。3.内存管理。4.文件系统管理。5.设备驱动。
* Linux distribution = Kernel + Softwares + Tools
* Linux两大系统：使用RPM方式安装软件的Red Hat, Fedora, SuSE等；使用dpkg方式安装软件的Debian，Ubuntu, B2D等。
* Linux系统中所有硬件设备都当作一个文件。IDE硬盘对应文件名/dev/hd[a-d]，SATA/USB硬盘对应文件名/dev/sd[a-p]。

##1.1 磁盘分区
磁盘每个扇区512bytes，第一个扇区记录了主引导分区（MBR，Master Boot Record），446bytes和分区表（partition table），64bytes。

###1.1.1 磁盘主引导分区
开机过程：

1. BIOS启动第一个程序，识别第一个可开机设备。（硬件信息从CMOS中读取）
2. MBR在设备第一个扇区，包含一个最基本的引导加载程序。
3. 引导加载程序（Boot loader）读取内核文件。
4. 内核文件开始操作系统。

引导加载程序提供的功能：

* 提供菜单，用于开机多重引导
* 载入内核文件
* 将引导加载任务转交其他loader，用于多重引导功能

引导加载程序不仅可以安装在MBR，还能安装在每个分区的引导扇区。每个loader只认识自己系统分区内的开机内核文件和其他loader。

Linux的loader可以手动设置菜单，但Windows装机的时候会覆盖MBR以及自己分区的启动扇区。所以装双系统时必须先装Windows再装Linux。

###1.1.2 磁盘分区表
柱面（cylinder）为文件系统的最小单位，也是分区的最小单位。

磁盘分区表包含四组记录区，每组记录区记录了该区段的起始和结束柱面号。分区可以是主（Primary）分区或者扩展（Extended）分区类型。其中扩展分区最多只能有一个。

扩展分区记录了分区范围，同时扩展分区本身只是额外的用来记录分区的扇区。扩展分区本身无法格式化，由扩展分区分出来的分区被称为逻辑分区（logical partition）。

设备文件名前4个/dev/hda[1-4]保留给主分区或扩展分区，逻辑分区的设备文件名从5开始。

###1.1.3 目录结构
Linux的文件系统是目录数结构，根目录为"/"目录。对每个磁盘分区，需要使用一个目录当成进入点，使该磁盘内的数据都放置在该目录下。将磁盘分区与目录相关联的过程叫挂载，这个目录叫挂载点。

若根目录"/"在partition1，"/home"目录挂载在partition2，则"/home"目录下所有文件都在partition2。

重要目录：
/boot : 放在整个硬盘最前面，100MB左右（小于1024个柱面）。有些老主板的BIOS无法识别大硬盘，导致开机无法启动。
/ : 根目录
/usr：系统可执行文件  
/var：系统数据  
/home：用户数据  
swap：交换分区  

###1.1.4 文件系统类型
在给Linux系统分区时，可以选择如下文件系统类型

* ext2/ext3: Linux适用的文件系统类型。
* physical volume (LVM): 可用来弹性调整文件系统大小的类型。
* software RAID: 用软件仿真磁盘阵列。
* swap: 内存交换空间类型。如果用此类型就不需要指定挂载点。
* vfat: 同时被Linux和Windows支持的类型。

##1.2 安装启动相关
Windows的环境中最好将Linux的根目录与swap取消挂载，否则Windows的资源管理器会提示你格式化这两个分区。

Linux不要随便删除，因为grub会读取Linux根目录下的/boot/目录内容。如果删除了，Windows也无法启动。

即使有多块硬盘，也只有一个MBR，BIOS会读取第一个可开机设备的MBR。

Linux默认提供6个终端界面tty1~tty6，还有一个图形界面。
CTRL+ALT+F1~F6: 文字界面登录tty1~tty6终端。 
CTRL+ALT+F7: 图形界面桌面。

##1.3 执行Linux命令
Linux命令的基本格式为：

    command [-options] para1 para2
    command: 命令或者可执行文件
    [Tab]键：在输入命令时作“命令补全”，在输入para时，作“文件补齐”
    [Ctrl]+c: 中断当前命令执行
    [Ctrl]+d: 作EOF，代表键盘输入结束
    
    
命令太长时，使用反斜杠"\"+[Enter]换行。

##1.4 命令查询
man是manual的简称，可以查询Linux的系统相关信息，类似的还有info命令。man可查寻的内容包括：

* 1: 命令或可执行文件
* 2: 系统内核可调用的函数于工具
* 3: 一些常用的函数与函数库，大部分为C的函数库(libc)
* 4: 设备文件的说明，通常在/dev下的文件
* 5: 设备文件或者是某些文件的格式
* 6: 游戏
* 7: 惯例于协议等，如Linux文件系统、网络协议、ASCII说明
* 8: 系统管理员可用的管理命令
* 9: 根kernel有关的文件

这些项会在查询结果的后面用相应数字加以区分。同时可用`man [number] item`的方式查询某个类型的项。

    man -f item     # 查找所有类型中与item有关的文件
    man -k item     # 在系统说明文件中搜索字符串item

在man page常用的按键
space       向下翻一页
Page Down   向下翻一页
Page Up     向上翻一页
Home        去第一页
End         去最后一页
/string     向下查询string
?string     向上查询string
n,N         n表示继续向下查询，N表示继续向上查询，不管是用的/或?
q           退出此man page
 
#2. 第6、7章 Linux文件与目录
##2.1 文件与目录权限
Linux包含用户和用户组的概念，一个用户可以属于多个用户组。
* 系统所有用户账号信息默认在文件/etc/passwd
* 个人密码记录在文件/etc/shadow
* 所有组名记录在文件/etc/group


	$ ls -l
	total 132
										
	-rwxrw-r--	4	root	root	32142	Sep 8 18:26	install.log
	[文件权限][连接数][所有者][所属用户组][大小][最后修改时间][文件名]
	...

文件权限的第一个字母表示文件类型：
* [d] 目录
* [-] 文件
* [l] 链接文件
* [b] 块设备，比如硬盘
* [c] 串行端口设备，比如键盘、鼠标

其余9个字母分成三组，分别表示[所有者、所属用户组、所有人]所拥有的权限。
r-读，w-写，x-执行。对于目录和文件，两者的意义略有不同。
root用户不受用户权限限制。






{'fraction_non_alphanumeric': 0.11722073420513629, 'fraction_numerical': 0.029462738301559793, 'mean_word_length': 6.006622516556291, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2548349', 'n_tokens_mistral': 4889, 'n_tokens_neox': 5610, 'n_words': 382}