Linux
Linux系统目录结构
在Linux或者Unix系统中,所有文件和目录都被组织成以一个根节点开始的树状结构,文件系统的最顶层是由根目录开始\
,根目录下既可以是文件。如果一个目录或者文件是以.
开头的,则表示这个文件或目录是隐藏的。系统目录结构如下所示:
目录具体含义:
- /bin Binaries(二进制文件)的缩写,存放着最经常使用的命令
- /boot 用于存放启动Linux时所需要的一些核心文件,包括一些链接文件以及镜像文件
- /dev Devices的缩写,用于存放Linux的外部设备,在Linux中设备也是以文件的形式进行表示的,访问设备的方式与访问文件的方式类似。
- /etc Etcetera(等等)的缩写,用来存放所有系统管理所需要的配置文件和子目录
- /home 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般是以用户的账号进行命名的,如上途中的alice,bob等
- /lib Library(库)的缩写,这个目录存放着系统最基本的动态链接共享库,几乎所有的应用程序都会用到这些共享库
- /lost+found 这个目录一般是空的,当系统非法关闭后,会暂时保存一些文件
- /media Linux系统会自动识别一些设备(u盘,光驱),识别到后会将这些设备自动挂载此目录下
- /mnt 系统提供该目录是为了让用户临时挂载别的文件系统,例如光驱或者u盘
- /opt 存放其他需要额外安装的软件
- /proc Process(进程)的缩写,/proc是一种伪文件系统(即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟目录,可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上,而是在内存里面。可以通过直接修改里面的某些文件,来实现对系统的设置,例如,可以向特定的文件写入内容,来实现屏蔽主机的ping命令:
echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all
,向这个文件写入1,就可实现屏蔽ping命令,使得其他主机无法ping到当前主机。 - /root 为系统管理员的用户目录
- /selinux 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,这个目录存放selinux相关的文件。
- /sys 这是Linux2.6内核的一个重大变化,该目录下安装了2.6内核中新出现的一个文件系统sysfs,sysfs文件系统集成了以下三种文件系统的信息:
- 针对进程信息的proc文件系统
- 针对设备的devfs文件系统
- 针对伪终端的devpts文件系统
- /tmp Temporary的所缩写,用来存放一些临时文件
- /usr Unix Shared Resources, 共享资源目录,用户的很多应用程序和文件都存放在这个目录下,相当于Windows的Program Files目录
- /usr/bin 系统用户使用的应用程序
- /usr/src 内核源代码默认的放置目录
- /var Variable缩写,这个目录存放着不断扩充的东西,通常会将经常被修改的目录或者文件存在这里,例如日至文件
- /run 是一个临时文件系统,存储系统启动以来的信息,当系统重启的时候,这个目录下的文件应该被删掉或清除。
软链接与硬链接
Linux文件系统中,数据分为元数据和用户数据,用户数据,即文件数据块(data block)是记录文件真实内容的地方。元数据是文件的附加属性,记录了如文件大小,创建时间,属主,inode(索引节点,为一个结构体)等信息。在Linux文件系统中,文件名并不是文件的唯一标识,元数据中的inode号才是文件的唯一标识。为解决文件的共享使用问题,Linux引入了应链接和软链接的概念,通过链接,隐藏了源文件的路径,提升了权限安全以及节省了内存。
文件名只是为了方便区分和记忆,在Linux文件系统中,系统和程序是通过inode号来寻找正确的文件数据块,通过文件名获取文件内容的过程如下:
filename-->inode-->data block
在Linux中,可通过ls -i filename
来查看文件的inode号,可以通过stat filename
查看文件的inode信息
硬链接
若一个inode号对应多个文件名,则城这些文件为硬链接,硬链接是指一个文件使用了多个别名,但是这些文件都具有相同的inode号。
特点:
- 所有文件具有相同的inode号以及data block
- 只能对已经存在的文件创建硬链接
- 不能对目录创建硬链接
- 不能交叉文件系统创建硬链接(因为inode号只在各文件系统下是唯一的,当Linux系统下挂载了多个文件系统后,可能出现inode号重复)
- 删除一个硬链接并不影响其他的硬链接
可以使用命令df -i --print-type
来查看当前系统中挂载的文件系统类型,各文件系统使用情况以及文件系统挂载点等信息。
软链接
若文件的用户数据快中存放的是另一个文件的路径指向,则该文件就称为软链接,因此软链接本质上就是一个文件,只是文件的内容比较特殊,软链接有自己的inode号以及用户数据,因此软链接的创建和锁定和使用限制较少。
特点:
- 软链接有自己的文件权限及属性
- 可对不存在的文件或者目录创建软链接
- 软链接可交叉文件系统进行创建
- 删除软链接并不影响被指向的文件。若被指向的文件被删除,则相关的软链接称为死链接(dangling link),若被指向的文件被重建,则死链接可恢复为正常的链接
链接的创建
ln -s filename softlink # 建立软链接
ln filename hadrlink # 建立硬链接
cp -s filename softlink # 建立软链接
cp -l filename hardlink # 建立硬链接
文件存储-关于inode补充
文件存储在硬盘上,硬盘的最小存储单位叫做扇区(sector),每个扇区存储512个字节,操作系统在读取硬盘的时候,不会一个扇区一个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(Block),这种由多个扇区组成的块,是文件存取的最小单位,块的大小,最常见的是4kB,即8个连续的扇区组成一个快。文件数据都存储在块中,那么,还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
inode包含文件的元信息,具体来说有如下内容:
- 文件的字节数
- 文件拥有者的user id
- 文件的group id
- 文件的 r w x 权限
- 文件的时间戳,ctime表示inode上一次变动的时间,mtime表示文件内容上一次的变动时间,atime表示文件上一次打开的时间
- 文件数据Block的位置
inode也会占用硬盘的空间,因此在硬盘格式化的时候,操作系统会自动将硬盘分为两个区域,一个是数据区,用于存放所有的文件数据;另一个是inode区(inode table),用于存放inode所包含的信息。每个inode的大小为128或者256个字节,inode节点的总数,在格式化的时候就已经给定,一般是1kB或者2kB就设置一个inode。假定在一块1G的硬盘中,每个inode节点的大小为128字节,每1KB设置一个inode,那么inode table的大小就会达到128M,占据整块硬盘容量的12.8%,可以使用df -i
查看每个硬盘下的inode总数以及使用情况(可以看到每个硬盘下的inode总数,以使用的inode数量,未使用的inode数量等信息)
每个文家都必须有一个inode,因此可能会发生inode已经用光,但是硬盘还未满的情况,此时也是无法进行文件创建的
目录文件:
在Linux系统中,目录也是一种文件,打开目录,实际上就是打开目录文件,目录文件的结构较为简单,其内容是由一些列目录项构成的目录列表,每个目录项由两部分构成,该目录下文件的文件名,以及文件名所对应的inode号。由ls -i dir
可查看特定目录下的所有目录项。
目录文件的链接数:
创建文件的时候,默认生成两个目录项.
和..
,.
相当于当前目录文件的硬链接,而..
相当于当前目录父目录的硬链接,因此,任何一个目录的硬链接总数,等于2加上它的子目录总数,这里的2是父目录对其的“硬链接”和当前目录下.
对其的硬链接
Linux文件类型
Linux常见的文件类型有七种:
表示符号 | 文件类型 | 补充 |
---|---|---|
- | 常规文件 | 即file |
d | 目录文件 | 目录 |
b | 块设备文件 | Block Device 文件,如硬盘,支持以Block为单位进行随机访问 |
c | 字符设备文件 | Character Device 文件,如键盘支持以字符为单位进行线性访问 |
l | 符号链接文件 | Symbol Link 软链接文件 |
p | 管道文件 | pipe文件 |
s | 套接字文件 | socket文件 |
对于普通文件,ls -l
会显示文件的大小,但是在设备类文件中,会显示两个用逗号隔开的数字,这两个数字不表示文件的大小。第一个数字表示主设备号,第二个数字表示次设备号,主设备号用于区分设备类型,用于决定加载设备的驱动程序。次设备号用于区分同一类型的不同设备,如硬盘1,硬盘2
文件基本属性
Linux 环境变量配置方法记录
Linux读取配置的环境变量的方法:
export # 显示当前系统定义的所有环境变量
echo $PATH # 输出当前的PATH环境变量值
Linux下环境变量可分为用户自定义的环境变量以及系统级别的环境变量:
- 用户自定义环境变量: 所在文件
~/.bashrc
或者~/.profile
,部分系统~/.bash_profile
- 系统级别的环境变量: 所在文件
/etc/bashrc
或者/etc/profile
或者/etc/bash_profile
,部分系统为/etc/environment
环境变量配置方法:
- 直接使用
export
命令在终端修改
export /home/mysql/bin:$PATH
export $PATH:/home/mysql/bin
生效时间 :立即生效
生效期限 : 仅在当前终端内有效,关闭当前终端后自动失效
生效范围 : 仅限于当前用户有效
- 修改文件
~/.bashrc
或者~/.profile
,部分系统~/.bash_profile
vim ~/.bashrc
# 设置环境变量
export /home/mysql/bin:$PATH
生效时间 :在相同用户下打开新终端的时候生效,或者执行source ~/.bashrc
时生效
生效期限 : 永久生效
生效范围 : 仅限于当前用户有效
- 修改文件
/etc/bashrc
或者/etc/profile
或者/etc/bash_profile
,部分系统为/etc/environment
vim /etc/bashrc
# 设置环境变量
export /home/mysql/bin:$PATH
生效时间 :打开新终端的时候生效,或者执行source /etc/bashrc
时生效
生效期限 : 永久生效
生效范围 : 对所有用户有效
Tips
可在在自己的项目中自定义需要的环境变量文件,例如myProject.profile,在此文件中可以使用export定义一系列环境变量,然后在 ~/.profile文件中加入source myProject.profile
,即可将项目中自定义的环境变量引入当前用户终端下使用。
还可以通过alias定义一些命令的别名,例如alias cdpro="cd /home/test/project"
xcs
标签:文件,链接,文件系统,基础知识,Linux,inode,目录 From: https://www.cnblogs.com/ncepubye/p/17036844.html