1. 1
1.1. 字符编码系统
- ASCII:1字节,只用于英文
- Unicode:UTF-8
1.2. 操作系统
操作系统=内核+系统调用
内核层(kernel)
- 管理硬件的程序
- 如果你的内核不支持网络协议,那么就算你的电脑有网卡也无济于事
- 内核程序放置于内存中的受保护区域(?)
- 内核程序是守护程序
系统调用层(system call)
- 提供API调用内核
- 应用程序的开发都是参考操作系统提供的API,所以该应用程序只能在该系统上运行
封装:硬件→(内核→系统调用)→应用程序(壳程序)
2. 2
2.1. 磁盘分区
磁盘设备文件名格式:/dev/sd[a-p]
- 按Linux内核检测顺序
- e.g.
USB磁盘:/dev/sdc
磁盘分区
- 磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分,盘片一旦划分成数个分区(Partition),不同类的目录与文件可以存储进不同的分区。
- linux中有两种分区方式:MBR和GPT
MBR | GPT |
---|---|
Master Boot Record | Globally Unique Identifier Partition Table |
主引导记录 | 全局唯一标识分区表 |
可以安装启动程序的地方 | B3 |
MBR引导扇区仅有一个区块,容错低 | - |
MBR内存放启动引导程序的区块只有446bytes,可能会不够用 | - |
不支持2TB以上的大硬盘 | - |
GPT和MBR对普通用户而言最主要的两个区别
- GPT支持单分区容量超过2T
- GPT支持快速启动
2.2. 目录树与挂载
Windows是通过 “某个硬盘-硬盘上的某个分区-分区上的特定文件系统-特定文件系统中的文件” 这样的顺序来访问到一个文件的。
但是与Windows不同, Linux 系统中的一切都是存放在唯一的虚拟文件系统中的,这个虚拟文件系统是树状的结构以一个根目录开始。启动系统后,有这个虚拟文件系统,再识别出各个硬盘,再把某个硬盘的某个分区挂载到这个虚拟文件系统的某个子树上(即分区用某个子目录来表示),再确定分区对应的子目录文件系统,最后的文件就存放在这个特定的文件系统中。也就是说,Linux 系统是通过 “虚拟文件系统-硬盘-硬盘上的分区-分区上的特定文件系统-特定文件系统中的文件” 这样的顺序来访问一个文件的
挂载:利用一个目录当作进入点,将磁盘物理分区挂在该目录下
/mnt
3. 4
- 命令帮助
- man
- info
- 判断用户等级
$
:一般#
:root
- 常用命令
date
cal
:日历bc
:计算器
4. 5
4.1. 文件权限
三种身份决定的权限(除了root)
- 用户User(即文件拥有者)
- 用户组Group(拥有者所在组)
- 其他人Other(非拥有者所在组)
4.2. 文件属性
执行ls -al
后:
1 | drwxrwx--- 3 root root 4096 Jun 25 08:35 .ssh |
第一列:十位数
- 1:文件or目录
- 2-4:用户的权限
- 5-7:用户组权限
- 8-10:其他人权限
第二列:
- 连接占用的节点(i-node)
第三列:
- 文件或目录的拥有者
第四列:
- 拥有者所在的用户组
第五列:文件大小
第六列: 创建日期或最近的修改日期
- Access timestamp (atime)
- Modified timestamp (mtime)
- 默认是mtime
- Change timestamp (ctime)
- 文件的 Access time,atime 是在读取文件或者执行文件时更改的。
- 文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。
- 文件的 Create time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的
第七列:文件名
如果文件名前面有’.’则说明是隐藏文件,只用
ls
的话是看不到隐藏文件的stat
- stat命令的输出信息比ls命令的输出信息要更详细
4.2.1. 更改文件属性
- chgrp:更改所属用户组
-R
recursivechgrp grpname dirname/firename
- chown:更改文件拥有者
-R
recursivechown username dirname/filename
chown username:grpname dirname/filename
- 当文件被cp后,属性未变,所以常用此命令进行修改
- chmod:修改权限属性
-R
recursive- 数字法
- 二进制:
rwx
–>421
- 二进制:
- 符号法
1
2
3
4
5
6chmod u=rwx,go=rx .bashrc
chmod a+w .banshrc
chmod a-x .bashrc
4.2.2. 文件类型
10字符的第1位
- 普通文件:
-
- 纯文本文件
- 二进制文件
- 数据格式文件
- 目录:
d
- 连接文件(link):
l
- 设备与设备文件
- 块设备文件:
b
- 字符设备文件:
c
- 块设备文件:
- 套接字:
s
- 通常在
/var/run
看到这种文件类型
- 通常在
- 管道(FIFO, pipe):
p
4.2.3. 文件扩展名
- 在linux下,文件扩展名没有实际帮助,但可以借由它来了解文件内容
- 在linux下,只要文件属性为x就是可执行,但可执行和能执行成功是不一样的
- 文件或目录最长为255字符
4.3. 目录配置
4.3.1. FHS
- 文件系统层次结构标准(Filesystem Hierarchy Standard,FHS)
- 所有文件和目录
- 仅定义了最上层以及子层这两层
- 文件系统层次结构标准 - 维基百科,自由的百科全书
/usr/
–>Unix Software Resource
4.3.2. 目录权限
- r
- 可以ls
- w
- 可以新建目录或文件(无论其属于谁)
- 删除已存在的目录或文件(无论其属于谁)
- 移动
- x (access)
- 进入目录
1 | chmod 600 test |
4.4. 文件系统(filesystem)
- 操作系统对硬盘读取方式的不同导致了不同的文件系统
- linux: ext3
- VFS(Virtual Firesystem Switch)
操作系统的文件系统虚拟层,在其下是实体的文件系统。虚拟文件系统的主要功用,在于让上层的软件,能够用单一的方式,来跟底层不同的文件系统沟通。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,让操作系统能够很快的支持新的文件系统
5. 6
5.1. 目录和路径
1 | - 前一个工作目录 |
cd
: change directory切换目录pwd
: print working directory显示工作目录-P
: 获得正确的目录名,而不是以连接文件的路径来显示
mkdir
-p
: 建立多层目录mkdir -p /l1/l2/l3
rmdir
: 删除“空目录”-p
: 与上层“空”目录一起删除- 相比于直接
rm
更安全
5.1.1. 环境变量
- 用冒号
:
分隔地址 - 用完整文件名来执行命令
5.2. 查看文件内容
cat
vstac
- 从第一行开始显示 vs 从最后一行开始显示
nl
:cat
带上行号- 可左可右可不加0
more
没法往前翻页,但less
可以od
:查看非纯文本——十六进制touch
:可以创建文件或修改文件时间/日期

5.3. 文件默认权限
umask
chmod
用于更改已有对象的权限,umask
影响之后新建对象的权限
5.4. 文件隐藏权限
chattr
- 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性(8种)
用chattr命令防止系统中某个关键文件被修改:
1
chattr +i /etc/fstab
然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。
让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
1
chattr +a /data1/user_act.log
- 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性(8种)
lsattr
5.5. 文件类型
file
1
2➜ ~ file package-lock.json
package-lock.json: ASCII text
5.6. 搜索文件
which
:寻找执行文件-a
:将所有可找到的命令全部列出
6. 7
6.1. 载入点(inode)
inode (index node)是指在许多“类Unix文件系统”中的一种数据结构,用于描述文件系统对象(包括文件、目录、设备文件、socket、管道等)。每个inode保存了文件系统对象数据的属性和磁盘块位置
6.2. df
df命令:用于显示磁盘分区上的可使用的磁盘空间。
- 默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
6.3. du
du命令 也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看
du -sh * |sort -rh
6.4. 链接文件
有点类似于windows中的快捷方式,指向一个源文件
链接文件按结构分类:
- 硬链接
- 软连接
6.4.1. 硬链接(实际链接)
文件系统创建(格式化)时,就把存储区域分为两大连续的存储区域。
- 一个用来保存文件系统对象的元信息数据,这是由inode组成的表(inode表)
- 另一个用来保存“文件系统对象”的内容数据
文件系统中每个“文件系统对象”对应一个“inode”数据,并用一个整数值来辨识。这个整数常被称为inode号码(“i-number”或“inode number”)
- 文件系统中如果两个文件或者两个目录具有相同的inode号码,那么就称它们是“硬链接”关系。实际上都是这个inode的别名。
- 换句话说,一个inode对应的所有文件(或目录)中的每一个,都对应着文件系统某个“目录文件”中唯一的一个目录项。
- 比如
~
和/home/xxx
?
- 比如
- 创建一个目录时,实际做了3件事:
- 在其“父目录文件”中增加一个条目;
- 分配一个inode;
- 再分配一个存储块,用来保存当前被创建目录包含的文件与子目录
- 换句话说,一个inode对应的所有文件(或目录)中的每一个,都对应着文件系统某个“目录文件”中唯一的一个目录项。
6.4.2. 软连接(符号链接)
- 类似指针,存储的是实际文件的地址
6.4.3. ln
ln命令 用来为文件创建链接,默认的链接类型是硬链接。如果要创建符号链接必须使用”-s”选项。
- 为何使用?理由如同快捷方式(快速访问?)
6.5. 磁盘分区、格式化、挂在与卸载
略
6.6. 建立虚拟内存
- 目的:增加虚拟内存
- 避免杀进程
- 方法:
- 建立
swap
分区 - 设置虚拟内存文件
- 建立
7. 8
7.1. 压缩
.tar
- tar打包,并没有压缩过
.gz
(例如.tar.gz
)- gzip压缩
7.1.1. tar
tar命令:可以为linux的文件和目录创建档案(备份文件)
- 打包是指将一大堆文件或目录变成一个总的文件
- Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)
7.1.2. gzip
- gzip:压缩
- gunzip:解压缩,用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为.gz。
- 事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成
8. 9
8.1. linux下的任务管理器
top
- 实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具
- 从结果上包含了
free
查看内存的结果
ps
- 报告当前系统的进程状态
- Process Status
lsof
lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。
kill
:终止进程