**每打开一个文件都会消耗一个fd(文件描述符)**
## 1、Linux目录
简介:Linux目录结构是一个单根倒置的树结构,文件系统从根目录开始,用"/"表示,文件名最长255字节,包括路径在内文件名称最长4095字节。
##### 1.1 绝对路径和相对路径
绝对路径:你家通过卫星定位是xx东经xx北纬,体现在linux上就是开头是根目录
相对路径:你家在小明家旁边,对应linux 就是当前目录的哪里

##### 1.2 文件目录大全

- /:根目录
- /boot:引导文件、内核文件(vmlinuz)、引导加载grup都存放此目录中
- /bin:所有用户使用的基本命令,必须存放到系统盘下,OS启动的时候会用到的程序
- /sbin:管理类的基本命令,OS启动时会用到里面的命令
- /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
- /lib64:专用于x86_64系统上的辅助共享库文件存放位置
- /etc:配置文件目录
- /home/USERNAME:普通用户家目录
- /root:管理员家目录
- /media:便携式移动设备挂载点
- /mnt:临时文件系统挂载点
- /dev:设备文件及特殊文件存储位置
- /opt:第三方应用程序的安装位置
- /srv:系统上运行的服务用到的数据
- /tmp:临时文件存储位置
- /usr:universal shared,read-only data 通用的共享的只读数据
- /usr/bin:保证系统拥有完整功能提供的应用程序
- /usr/lib:库文件
- /usr/include:C程序的头文件
- /usr/share:结构化独立的数据
- /usr/share/local:第三方程序的安装目录
- /var:variable data file,变化数据
- /var/cache:应用程序缓存的数据目录
- /var/lib:应用程序状态信息数据
- /var/local:专用于为/usr/local下的应用程序存放可变数据
- /var/lock:锁文件
- /var/log:日志文件
- /var/run:存放运行中的进程相关数据,常用于存储进程的PID文件
- /var/spool:应用程序数据池
- /var/tmp:存放系统两次重启之间产生的临时数据
- /proc:内核与进程信息相关
- /selinux:selinux相关的安全策略等信息的存储位置

## 2、目录常用操作命令
##### 2.1 显示当前工作目录
pwd
```shell
root@lzc:~# pwd
/root

pwd是使用PWD环境变量获取当前目录路径
```

##### 2.2 切换到其他目录
cd

- -:上一次所在的目录,cd使用OLDPWD变量获取上一次目录路径
- ..:父目录
- .:当前目录
- -P:跳转到链接至的目录
- -S:从大到小排序

##### 2.3 列出目录内容
ls

- -a:包含隐藏文件
- -l:显示大小,权限等信息
- -R:目录递归
- -X:按文件后缀排序

##### 2.4 显示目录树
tree

- -d:只显示目录
- -L:指定显示的层级数目

##### 2.5 创建目录
mkdir

- -p:递归创建
- -m:创建时直接指定权限

##### 2.6 删除目录
rmdir

- -p:递归删除


## 3、Linux文件
##### 3.1 文件类型

- -:普通文件
- d:目录文件
- l:符号链接文件
- b:块设备
- c:字符设备
- p:管道文件
- s:套接字文件

##### 3.2 文件数据
metadata:源数据,属性信息,比如文件的大小,相关时间,类型,此类数据是存放在inode表中
inode(index node)保存的信息如下:

- inode number:节点号
- 文件类型
- 权限
- UID
- GID
- 链接数
- 指向磁盘上文件的数据块指针

**相关命令和inode的关系:**
当执行cp时,底层发生以下变化,分配一个空闲的inode号,在inode表中生成新条目,在目标目录中创建一个目录项,将新文件名称与inode编号关联,拷贝数据生成新的文件

当执行rm 时,底层发生以下变化
释放对应文件占用的inode号,把数据块放到空闲列表中,删除目录项

目录是一个特殊的文件,目录文件保存了此目录中的文件列表以及inode number对应关系,一个目录是目录下文件名和文件inode号之间的映射

##### 3.3 文件颜色

- 蓝色:目录
- 绿色:可执行文件
- 红色:压缩文件
- 浅蓝色:链接文件
- 灰色:其他文件

##### 3.4 文件状态
stat命令
```shell
root@lzc:~# stat 1.txt 
  File: 1.txt
  Size: 210             Blocks: 8          IO Block: 4096   regular file
Device: fc02h/64514d    Inode: 556125      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-12-05 23:55:07.813678618 +0800     #访问时间,atime,读取文件内容时会更新
Modify: 2023-12-05 23:55:07.005686767 +0800     #修改时间,mtine,改变文件内容时会更新
Change: 2023-12-05 23:55:07.005686767 +0800     #改变时间,ctime,元数据发生改变时更新,例如权限、所有者、大小等改变才会更新,仅更新文件内容,此值不会更新
 Birth: 2023-12-04 23:44:39.861025975 +0800
```

##### 3.5 文件通配符

- *:匹配0个或多个字符,但不匹配.开头的文件 ,即不匹配隐藏文件
- ?:匹配任何单个字符,一个汉字也算一个字符
- ~:当前用户家目录
- [0-9]:匹配单个数字范围
- [a-z]:匹配一个小写字母
- [A-Z]:匹配一个大写字母
- [zhengchi]:匹配列表中任何一个字符
- [^zhengchi]:匹配列表中所有字符以外的字符
- ~-:前一个工作目录
- [:digit:]:任意数字
- [:lower:]:任意小写字母
- [:upper:]:任意大写字母

##### 3.6 创建文件
touch
-a:仅改变atime和ctime
-m:仅改变mtime和ctime

##### 3.7 复制文件和目录
cp

- -i:如果目标已经存在,覆盖前提示是否覆盖
- -n:不覆盖
- -r,R:递归复制目录及内部所有内容
- -a:递归复制,且复制权限
- cp -b:目标存在的话,覆盖前先备份,源文件名结尾会被加上~只保留最近一个备份

##### 3.8 移动和重命名文件
mv
-b:目标存在,覆盖前先备份,备份文件以~结尾

rename
rename '原名字'  '目标名字'  文件


##### 3.9 删除文件
rm

- -i:交互式
- -f:强制删除
- -r:递归

##### 3.10 链接文件
ln
**硬链接**
简介:硬链接就是新建一个文件和源文件数据绑定,当源文件被删除时,文件独立,否则数据持续同步,无法对目录创建硬链接,硬链接inode号相同

**软连接**
简介:类似于windows 的快捷方式,源文件被删除,软链接文件也去殉情
-s
# 注意:当软件链接目录时,要注意删除命令
rm -rf /data:# 只删除/data这个软连接
rm -rf  /data/ # 删除软连接下所有文件

#####