长沙市网站建设_网站建设公司_GitHub_seo优化
2025/12/17 21:10:13 网站建设 项目流程

03 Linux下文件管理和IO重定向

1、文件系统目录结构

img

  • 每个文件都有两类相关数据:元数据:metadata,即属性;数据:data,即文件内容

1.1 常见的文件系统目录功能

img

1.2 应用程序的组成部分

不同类型的文件常用的目录

文件类型 常用目录
二进制文件 /bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
库文件 /lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
配置文件 /etc,/etc/DIRECTORY,/usr/local/etc
帮助文件 /usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc

1.3 Linux下文件类型

文件类型 标识符 说明
普通文件 -
目录文件 d directory
符号链接文件 l link
块设备文件 b block
字符设备文件 c character
管道文件 p pipe
套接字文件 s socket

img

2、文件操作命令

2.1 显示当前工作目录

pwd#常用选项
-P    #显示真实的物理路径
-L    #显示链接路径(默认)

2.2 绝对路径和相对路径

  • 绝对路径

    • 以正斜杠/即根目录开始
    • 描述完整的文件的位置路径
    • 可用于任何想指定有一个文件名的时候
  • 相对路径

    • 不以斜线开始,而是以当前所在的位置开始
    • 一般情况下,是指相对于当前工作目录的路径,特殊场景下啊,是相对于某目录的位置
    • 可以作为一个简短的形式指定一个文件名

2.3 更改目录

cd#常用选项
-L          #切换至链接目录,默认选项
-P          #切换至真是目录,而非链接目录cd ..            #切换至父目录
cd -             #切换至上一个目录
cd | cd ~        #切换至当前用户家目录
cd ~username     #切换至指定用户家目录

2.4 列出目录内容

ls#常用选项-a              #包含隐藏文件
-l              #显示额外的信息
-s              #按从大到小排序
-X              #按文件后缀排序

2.5 查看文件状态stat

stat filename | dirname

2.6 确定文件内容


filecat

2.7 文件通配符模式

常见的通配符如下:

*				#匹配零个或多个字符,但不匹配“.”开头的文件,即隐藏文件
?				#匹配任何单子字符,一个汉字也算一个字符
[0~9]			#匹配数字范围
[a-z]			#一个字母
[A-Z]			#一个字母
[wang]			#匹配列表中的任何的一个字符
[^wang]			#匹配列表中所有字符以外的字符
[^a-z]			#匹配列表中所有字符以外的字符

2.8 创建空文件和刷新时间

touch [OPTION]... FILE...

2.9 复制文件和目录

cp [OPTION]... [-T]  SOURCE    DEST#可以用来做备份的操作
cp -i --backup=numberd issue abc

2.10 移动和重命名文件

mv [OPTION]... [-T]  SOURCE DEST#常用选项
-b					#如果目标存在,则先备份
-n|--no-clobber		#如果目标文件已存在,则跳过此文件移动
-i|--interactive	#如果目标文件已存在,则提示是否覆盖
-u|--upgrade		#当源文件比目标文件新时,才执行移动操作
-v|--verbose		#显示移动过程

2.11 删除文件

rm [OPTION]... [FILE]...#常用选项-i				#删除前确认
-f				#不确认直接删除
-r				#递归删除
-d				#删除空目录

2.12 目录操作

2.12.1 显示目录树tree

tree#常用选项
-a						#显示所有,包括隐藏目录和文件
-d						#只显示目录
-f						#显示所有内容的完整路径
-F						#在执行文件,目录,Socket,符号链接,管道文件,各自加上“*”,“/”,“=”,“@”,“|”号
-p						#显示内容权限
-s						#显示内容大小
-o filename				#将显示的内容输出到指定文件中
-L n					#只显示n层目录

2.12.2 创建目录mkdir

mkdir [OPTION]... DIRECTORY...#常用选项
-m|--mode				#目录权限属性
-p|--parents			#如果要创建的目录父级目录不存在,则一起创建,是递归的意思
-v|--verbose			#显示创建过程

2.12.3 删除空目录

rmdir [OPTION]... DIRECTORY...#常用选项
--ignore-fail-on-non-empty			#忽略非空错误提示
-p|--prents							#连着父目录一起删除
-v|--verbose						#显示删除过程

3、文件元数据和节点表结构

3.1 inode表结构

在Linux系统中,一切皆文件,每个文件,又分为文件元数据和具体内容两部分。

每个文件都有一个inode和n(n>=1)个block数据块,inode存储文件元数据,数据块存储文件具体内容数据。

磁盘在格式化时,系统会自动将磁盘分为两个区域:

  • 一个是inode区(inode table),用来存放文件的inode
  • 一个是数据区,分成很多个block(块),用来存放文件的具体内容数据

一个磁盘分区上有多少个inode和多少个block,由系统自行决定,跟文件系统,磁盘分区大小,数据块大小有关

一个磁盘分区,能存放多沙鸥个文件,由文件大小,磁盘分区大小,inode数量决定

inode编号可重复使用,当删除一个文件之后,其inode编号会被回收,供下次新文件使用

每一个inode表记录对应的保存了一下信息:

  • inode number(索引节点编号)
  • 文件类型
  • 权限
  • 属主属组
  • 链接数
  • 文件大小
  • 各时间戳
  • 指向具体数据块的指针
  • 有关文件的其他数据

以指针大小为4字节,block块大小为4KB为前置条件

指针大小和block块大小跟操作系统平台,以及文件系统有关

  • 直接指针

    • 12个直接指针,直接指向具体数据块,如果block大小为4096(4K),则直接指针可以保存48KB的文件
  • 间接指针

    • 1个间接指针,指向一个数据块,只不过该block上保存的是指针,而不是具体数据
    • 如果block大小为4096(4K),一个指针占用4字节,所以此处可以存储4096/4=1024个block地址
    • 同理,其指向的1024个block上,也都是存储的指针地址
    • 则此处可以存储的数据大小为1024*4096=4MB
  • 双重间接指针

    • 1个双重间接指针,指向一个数据块,只不过该block上保存的是指针,而不是具体数据
    • 如果block大小为4096(4K),一个指针占用4字节,所以此处可以存储4096/4=1024个block地址
    • 同理,其指向的1024个block上,也都是存储的指针地址
    • 则此处可以存储的数据大小为102410244096=4GB
  • 三重间接指针

    • 1个双重间接指针,指向一个数据块,只不过该block上保存的是指针,而不是具体数据
    • 如果block大小为4096(4K),一个指针占用4字节,所以此处可以存储4096/4=1024个block地址
    • 同理,其指向的1024个block上,也都是存储的指针地址
    • 则此处可以存储的数据大小为102410241024*4096=4TB
  • 单文件最大容量

    • 12*直接指针+间接指针+双重间接指针+三重间接指针

目录

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系

  • 文件引用一个是inode号
  • 人是通过文件名来引用一个文件
  • 一个目录是目录下的文件名和文件inode号之间的映射

cp和inode

cp命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm和inode

rm命令:

  • 链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

3.2 硬链接

硬链接的作用是允许一个文件拥有多个有效的路径名

新增一个文件,指向某个文件的inode,这样,这两个文件就互为硬链接,也就是多个文件名,都是指向同一个inode,这时硬链接的本质。

硬链接的特性:

  • 创建硬链接会在对应的目录中增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个文件引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
  • 不支持对目录创建硬链接
ln filename linkname

3.3 符号or软链接

软链接也称为符号链接,类似于windows中的快捷方式

软链接是建立一个独立的文件,这个文件的指向的是目标的文件名

软链接特点:

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录后创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
  • 软链接如果使用相对路径,是相对于源文件的路径,而非相对于当前目录
  • 删除软连接本身,不会删除源目录内容
  • 删除源目录单文件,不会删除链接文件
ln -s filename linkname

3.4 硬链接和软链接区别总结

选项 硬链接 软链接
本质 本质是同一个文件 本质不是同一个文件
跨设备 不支持 支持
inode 相同 不同
链接数 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 创建或删除,链接数不会变化
文件夹 不支持 支持
相对路径 原始文件相对路径是相对于当前工作目录 原始文件相对路径是相对于链接文件的相对路径
删除源文件 是链接数减一,但链接文件的访问不受影响 链接文件将无法访问
文件类型 和源文件相同 链接文件,和源文件无关

4、IO重定向和管道

4.1 标准输入和输出

Linux系统中有三个最基本的IO设备:

  1. 标准输入设备(stdin):对应终端键盘
  2. 标准输出设备(stdout):对应终端显示器
  3. 标准错误输出设备(stderr):对应终端的显示器

4.2 I/O重定向redirect

I/O重定向:将默认的输入,输出错误对应的设备改变,指向新的目标

4.2.1 标准输出和错误重新定向

STDOUT和STDERR默认是使用当前终端,但也可以重定向到指定终端或指定文件

4.2.2 标准输入重定向

4.2.2.1 标准输入重定向

bc <a.txt >rs.txt
#将a.txt的内容重定向到bc,由bc输出到rs.txt

4.2.2.2 标准输入多行重定向

cat <<EOF
> 123
> 456
> EOF
123
456

4.2.2.3 高级重定向写法

cat <<< "abc"
bc <<< "1+2+3"

4.3 管道

4.3.1 管道

前一个命令的输出作为后一个命令的输入,就像拿水管将两个命令连起来

格式

COMMOND1|COMMAND2|COMMAND3|……#最明显的管道命令类型
ls --help | grep "size"#多重管道命令
echo $PATH | tr a-z A-Z | tr -s ":" "\n"

4.3.2 tee命令

将标准输入复制到每个指定文件,并显示到标准输出

tee [OPTION]... [FILE]...#常用选项
-a						#内容追加到给定的文件而非覆盖
-i						#忽然中断信号
-p						#对写入非管道的行为排查无错误,其使用的是warn-nopipe
--output-error			#设置写入出错时的行为cmd1 |tee [-a ] filename | cmd2

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询