INODE全称叫index node
表中包含文件系统所有文件列表
一个节点是在一个表项 包含有关文件的信息 ( 元数据 )
包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数
1 文件引用一个是 inode号
2 我们是通过文件名来引用一个文件
3 一个目录是目录下的文件名和文件inode号之间的映射
由于 inode 找数据是不断地 创建新的节点 所以他的节点创建有局限性 而他的最大数量可为 1T
而之前我们所学的 cp mv rm 等命令 都可以用 inode来解释 例如
rm 命令 删除
rm 命令相当于链接数递减 从而释放的inode号可以被重用 把数据块放在空闲列表中 删除目录项 数据实际上不会马上被删除 但当另一个文件使用数据块 时将被覆盖
硬链接
1 创建硬链接会增加额外的记录项以引用文件
2 对应于同一文件系统上一个物理文件
3 每个目录引用相同的inode号
4 创建时链接数递增
5 删除文件时 rm命令递减计数的链接 文件要存在
6 至少有一个链接数 当链接数为零时 该文件被删除
7 硬链接不能跨越驱动器或分区 指向
8 硬链接与硬连接之间 指向同一个文件 地位 等同
语法 ln filename [linkname ]
软链接也称符号链接
1 一个符号链接指向另一个文件
2 ls - l的 显示链接的名称和引用的文件
3 一个符号链接的内容是它引用文件的名称
4 可以对目录进行 可以跨分区 指向的是另一个文件的路径
5 其大小为指向的路径字符串的 长度 不增加或减少目标文件inode的引用计数
7 软链接可以对应多个文件 但这些文件 都不相同
语法 ln -s filename [linkname]
硬链接和软连接之间的区别
硬链接是相对于同一文件系统上的物理文件 可以有多个别名 但只有一个文件 而软连接可以指向多个文件虽然文件不同 但 软链接可以跨区 指向 创建硬连接时需要占用节点 而软连接则直接指向路径字符串 不增加或减少节点
硬软连接的简单 演示 硬盘 到 系统上的文件 到 硬链接 再到 软链接
重定向 标准输入输出 和管道
标准输入输出简称 IO
Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
程序:指令+数据 读入数据 Input 输出数据 Output
打开的文件都有一个fd file descriptor 文件描述符
I/O重定向就是 改变默认位置
把输出和错误重新定向到文件
下面是重定向的一些命令
1 > 把STDOUT重定向到文件
2 2> 把STDERR重定向到文件
3 &> 把所有输出重定向到文件
4 > 文件内容会被覆盖
5 # set -C 禁止将内容覆盖已有文件 但可追加
6 强制覆盖 >|
7 # set +C 允许覆盖
8 >> 原有内容基础上 追加内容
9 2> 覆盖重定向错误输出数据流;
10 2>> 追加重定向错误输出数据流;
11 标准输出和错误输出各自定向至不同位置:
12 COMMAND > /path/to/file.out 2> /path/to/error.out
13 合并标准输出和错误输出为同一个数据流进行重定向:
14 &>:覆盖重定向 &>> 追加重定向
15 COMMAND > /path/to/file.out 2> &1 (顺序很重要)
16 COMMAND >> /path/to/file.out 2>> &1 find /etc -name passwd 2> /dev/null
17 () 合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt
重定向 属于将数据流 导入或导出 一般和管道符使用 最佳
tr命令
tr – 转换和删除字符
tr [OPTION]... SET1 [SET2] 选项
-c或——complermen 取字符集的补集
-d或——delete 删除所有属于第一字符集的字符
-s或—squeeze-repeats 把连续重复的字符以单独一个字符 表示
-t或--truncate-set1 将第一个字符集对应字符转化为第二 字符集对应的字符
管道
管道(使用符号“|”表示)用来连接命令
例如命令1 | 命令2 | 命令3 | … 将命令1的STDOUT发送给命令2的STDIN 命令2的 STDOUT发送到命令3的STDIN STDERR默认不能通过管道转发 可利用2>&1 或 |& 实现 最后一个命令会在当前shell进程的子shell进程中执行用来 组合多种工具的功能 ls | tr ‘a-z‘ ‘A-Z‘
管道是在 shell 脚本中连接 命令 字符 文件 的最佳 粘合剂
通过管道 我们可以把一些单一的命令组织起来 完成一项复杂的任务
例如 重定向到多个目标
$命令1 | tee 文件名 | 命令2 把命令1的STDOUT保存在文件名中,然后管道输入给命令2 使用 保存不同阶段的输出 复杂管道的故障排除 同时查看和记录输出