Linux文件系统目录结构
根目录:“/”,文件系统开始
一级目录:
/boot:存放系统相关的内容,如内核文件(Vmlinuz),引导加载器(grub)等
/dev:存放设备相关内容
/dev/sda(/dev/sr0):硬盘光盘等块设备(b,block)
/dev/zero:字符设备(c,character),是一个逻辑概念
/dev/null:空值,“黑洞”
/dev/random:生成随机数
/etc:存放linux相关设置,等同于windows注册表,系统配置文件
/home:存放用户数据,各用户的家目录
/root:系统管理员root家目录
/run:存放系统运行中产生的相关数据
/bin:二进制binary,存放用户可执行的二进制程序
/sbin:s代表系统管理,存放系统管理员root可执行的二进制程序
/tmp:存放临时数据
/usr:操作系统中的绝大部分数据
/var:可变内容,如日志、缓存数据等
/proc:进程(不存放在硬盘上),存放于内存中
Linux文件系统特点:
大小写敏感是针对于文件系统(ext4,xfs敏感;fat,ntfs不敏感)而非操作系统
*例如Linux系统使用fat文件系统时大小写不敏感
文件数据:包括元数据metadata(文件属性)和数据data(文件内容)
Linux文件系统分层结构基于LSB(Linux Standard Base),官方规范标准FHS(FilesystemHierarchy Standard)
文件名最长255个字节,包括路径在内文件名称最长4095个字节
颜色:蓝色->目录,绿色->可执行程序,红色->压缩文件,浅蓝色->软连接(类似于windows中快捷方式),灰色->其他文件(颜色可通过/etc/DIR_COLORS文件进行配置)
类型:- 普通文件,d 目录文件,b 块设备,c 字符设备,l 符号链接文件,p 管道文件pipe,s 套接字文件socket
Linux文件系统相关命令
*绝对路径:完整的文件为路径
*相对路径:相对于当前工作目录或某目录的位置
basename:显示路径基名
dirname:显示路径目录名
pwd:显示当前工作目录(CWD:Current Working Directory)的绝对路径
-L显示链接路径(默认)
-P显示真实物理路径
[cf]进入/bin路径下分别输入pwd –L和pwd–P
ls:列出目录内容
-a包含隐藏文件
-l显示额外信息
-R目录递归通过
-ld目录和符号链接信息
-1文件分行显示
-S按从大到小排序
-t按mtime排序(--time=ctime|atime)
-X按文件后缀排序
cd:进入文件目录(changedirectory)
文件时间:
mtime:文件修改时间(modify)
atime:文件访问时间(access)
ctime:文件属性变更时间(change)
*可用stat命令查看,touch命令可用来更新文件时间
cp:复制文件和目录
cp[OPTION] [-T] SOURCE DEST
cp[OPTION] SOURCE… DIRECTORY
cp[OPTION] -t DIRECTORY SOURCE…
*root用户cp命令使用了重命名alias cp=‘cp -i’
*cp-a:归档,常用于备份 (等同于-dR)
mv:移动和重命名文件
mv [OPTION] [-T]SOURCE DEST
mv[OPTION] SOURCE… DIRECTORY
mv[OPTION] -t DIRECTORY SOURCE…
常用选项:
-i:交互式
-f:强制
-b:目标存在,覆盖前先备份
重命名可以使用rename命令(rename STD1 STD2 file:将file中的STD1修改为STD2)
rm:删除文件或目录
*生产中建议禁用,或者使用alias重命名为mv
rm[OPTION]… FILE…
常用选项:
-i:交互式
-f:强制删除
-r:递归
--no-preserve-root:删除根目录(也可以用rm -rf /*)
*centos6之后rm -rf /命令无法执行
文件通配符:
*:匹配零或多个字符
?:匹配任何单个字符
~:用户家目录
~name:用户name的家目录
~+:当前工作目录
~-:前一个工作目录
[0-9]:匹配0-9之间的数字
[a-z]:匹配aAbBcC…yYz之间的数字
[A-Z]:匹配AbBcC…yYzZ之间的数字
[abc]:匹配a,b,c之间的任一字符
[^abc]:匹配a,b,c之外的字符
预定义字符:可通过man 7 glob查看
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]: 任意大小写字母
[:alnum:]:任意字母或数字
Linux目录操作
tree:显示目录树
-d只显示目录
-Llevel:制定显示的层级数(tree –L 2 /etc:表示显示/etc目录下两层的树结构)
-Ppattern:只显示由指定pattern匹配到的路径(tree–P /etc/rc*)
mkdir:创建目录
-p 自动创建所需的各目录
-v显示详细信息
-mMODE创建目录时直接指定权限
rmdir:删除空目录
-p递归删除父空目录
-v 显示详细信息
rm –r:递归删除目录树
Linux索引节点
file = file name + file data + filemetadata + inode number
filename存放在目录的数据内容中
filemetada和inode number存放在文件的inode table节点表中
inode:index node表中包含文件系统所有文件列表
一个节点(索引节点)是一个表项,包含相关文件的属性信息(元数据),包括:
文件类型,权限,UID,GID
链接数(指向这个文件名的路径名称个数)
该文件大小和不同时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据
inode表结构
数据块指针(以ext4为例)
直接指针:直接指向存储的数据区域,前12个
间接指针:一级指针,二级指针,三级指针等
Linux链接
硬链接
格式:link filename [linkname]
本质:针对一个文件,起多个文件名
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上的一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
[eg]执行ln /data/f1
*/data/f1-link后尽管删除/data/f1文件,还能访问/data/f1-link
不能跨驱动器或跨分区链接,不能对目录进行链接
软链接
格式:ln -s filename [linkname]
本质:指向软连接所引用文件的名称,又称符号链接,
原始文件一般路径用相对路径,相对路径是相对于软链接文件的路径,非当前工作路径。
ls-l显示链接的名称和引用的文件
可以对目录进行,可以跨分区进行
符号链接指向引用文件的路径;其大小为指向路径字符串的长度;不增加或减少目标文件的inode计数
区别:
同一个文件?
跨分区?
链接数增长?
inodeNumber相同?
删除原始文件,链接文件可否访问?
链接大小
支持目录?
相对路径写法?
标准I/O和管道
三种I/O设备:
0:标准输入(STDIN),默认接受来自键盘的输入
1:标准输出(STDOUT),默认输出到终端窗口
2:标准输出(STDERR),默认输出到终端窗口
*每打开一个文件linux系统都会生成一个文件描述符fd(file decriptor)
I/O重定向:
本质:改变默认的输入输出位置
>:将STDOUT重定向到文件
2>:将STDERR重定向到文件
&>:将所有输出重定向到文件
>>:在原有内容基础上,追加内容
( ):合并多个命令进行重定向,例如(cal 2007;cal 2008) &> file
*在使用>命令时文件内容会被覆盖:
set –C:禁止将内容覆盖至已有文件,但可以追加
set +C:允许覆盖
>| file强制覆盖
tr:转换和删除字符
格式:tr [OPTION]SET1 [SET2]
-c –C --complement:去字符集补集(取反)
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:将连续重复的字符单独以一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应字符(默认)
管道:
本质:用于连接命令,将一个命令的标准输出做为另一个命令的标准输入
格式:cmd1 | cmd2 | cmd3…
[eg]ls | tr ‘a-z’ ‘A-Z’
注意:
cmd1和cmd2一定是STDOUT
STDERR默认无法通过管道转发,但可以通过2>&1或|&实现
最后一个命令会在当前shell进程的子进程中进行
-符号:例如tar –cvf - /home | tar –xvf –
将/home内的文件打包,但打包的数据不记录到文件而是传到STDOUT,经过管道后传给后面的tar –xvf,-代表前一个命令的STDOUT,因此不需要临时文件file了
tee:重定向到多个目标(可既在终端输出,又重定向到文件,同时查看和记录输出)
cmd1| tee [-a] file | cmd2
将cmd1的STDOUT保存在file中,作为cmd2的输入-a追加
相关练习
1.显示/etc目录下,所有以.d结尾的文件或目录
2.显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
3.创建/app/rootdir目录,并复制/root下所有文件到该目录内, 要求保留原有权限
4.使用命令行展开功能,创建/tmp/a1, /tmp/a2, /tmp/a1/a, /tmp/a1/b,在/tmp目录下创建目录:x_y, x_z, q_y, q_z