文件系统结构元素
创建和查看文件
复制、转移和删除文件
使用Nautilus来管理文件
软和硬链接
文件系统与目录结构
文件系统
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):rootfilesystem
- 文件名称区分大小写
- 以.开头的文件为隐藏文件
- 路径分隔的 /
- 文件有两类数据:
元数据:metadata
数据:data
- 文件系统分层结构:LSB Linux StandardBase
- FHS: (Filesystem HierarchyStandard) http://www.pathname.com/fhs/
文件名规则
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色–>目录 绿色–>可执行文件 红色–>压缩文件 浅蓝色–>链接文件 灰色–>其他文件
- 除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,
- 有些字符需要用引号来引用它们。
- 标准Linux文件系统(如ext4),文件名称大小写敏感。例如: MAIL, Mail, mail,mAiL
文件系统结构
- /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
- /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
- /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
- /lib64:专用于x86_64系统上的辅助共享库文件存放位置
- /etc:配置文件目录
- /home/USERNAME:普通用户家目录
- /root:管理员的家目录
- /media:便携式移动设备挂载点
- /mnt:临时文件系统挂载点
- /dev:设备文件及特殊文件存储位置
- b: block device,随机访问
- c: character device,线性访问
- /opt:第三方应用程序的安装位置
- /srv:系统上运行的服务用到的数据
- /tmp:临时文件存储位置
- /usr: universal shared, read-onlydata
- bin: 保证系统拥有完整功能而提供的应用程序
- sbin:
- lib:32 位 使 用 lib64:只存在64位系统
- include: C 程 序 的 头 文 件 (header files) share:结构化独立的数据,例如doc, man等
- local:第三方应用程序的安装位置
- bin, sbin, lib, lib64, etc, share
- /var: variable datafiles
- cache: 应用程序缓存数据目录
- lib: 应用程序状态信息数据
- local:专用于为/usr/local下的应用程序存储可变数据; lock: 锁文件
- log: 日志目录及文件
- opt: 专用于为/opt下的应用程序存储可变数据;
- run: 运行中的进程相关数据,通常用于存储进程pid文件
- spool: 应用程序数据池
- tmp: 保存系统两次重启之间产生的临时数据
- /proc:用于输出内核与进程信息相关的虚拟文件系统
- /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
- /selinux: securityenhanced Linux,selinux相关的安全策略等信息的存储位置
- 二进制程序:/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
Linux下的文件类型
- -:普通文件
- d:目录文件
- b:块设备
- c: 字符设备
- l: 符号链接文件
- p:管道文件pipe
- s:套接字文件socket
centos7的目录变化
- /bin和 /usr/bin
- /sbin和 /usr/sbin
- /lib和/usr/lib
- /lib64 和 /usr/lib64
显示当前工作目录
- 每个shell和系统进程都有一个当前的工作目录
- CWD:current workdirectory
- 显示当前shellCWD的绝对路径pwd: printing working directory
- -P 显示真实物理路径
- -L 显示链接路径(默认)
绝对和相对路径
- 绝对路径
- 以正斜杠开始
- 完整的文件的位置路径
- 可用于任何想指定一个文件名的时候
- 相对路径名
- 不以斜线开始
- 指定相对于当前工作目录或某目录的位置可以作为一个简短的形式指定一个文件名
- 基名:basename
- 目录名:dirname
更改目录
- cd 改变目录
使用绝对或相对路径:
cd /home/wang/
cd home/wang
- 切换至父目录: cd ..
- 切换至当前用户主目录: cd
- 切换至以前的工作目录: cd –
- 选项:-P
- 相关的环境变量:
- PWD:当前目录路径
- OLDPWD:上一次目录路径
列出目录内容
- 列出当前目录的内容或指定目录
- 用法:ls[options] [files_or_dirs]
- 示例:
- ls -a 包含隐藏文件ls -l 显示额外的信息ls -R 目录递归通过
- ls -ld 目录和符号链接信息
- ls -1 文件分行显示
- ls –S 按从大到小排序
- ls –t 按mtime排序
- ls –u 配合-t选项,显示并按atime从新到旧排序
- ls –U 按目录存放顺序显示
- ls –X 按文件后缀排序
查看文件状态
- stat
- 文件:metadata, data
- 三个时间戳:
- access time:访问时间,atime,读取文件内容
- modify time: 修改时间, mtime,改变文件内容(数据)
- change time: 改变时间, ctime,元数据发生改变
文件通配符
- *匹配零个或多个字符
- ? 匹配任何单个字符
- ~当前用户家目录
- ~mage用户mage家目录
- ~+ 当前工作目录
- ~- 前一个工作目录
- [0-9] 匹配数字范围
- [a-z]:字母
- [A-Z]:字母
- [wang] 匹配列表中的任何的一个字符
- [^wang]匹配列表中的所有字符以外的字符
- 预 定 义 的 字 符 类 :man 7 glob [:digit:]:任意数字,相当于0-9 [:lower:]:任意小写字母[:upper:]: 任意大写字母[:alpha:]: 任意大小写字母[:alnum:]:任意数字或字母[:blank:]:水平空白字符[:space:]:水平或垂直空白字符[:punct:]: 标 点 符 号 [:print:]: 可 打 印 字 符 [:cntrl:]:控制(非打印)字符[:graph:]: 图 形 字 符 [:xdigit:]:十六进制字符
练习
- 1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
- 2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
- 3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
- 4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
- 5、显示/etc目录下,所有以.d结尾的文件或目录
- 6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
- 7、只显示/root下的隐藏文件和目录
- 8、只显示/etc下的非隐藏目录
创建空文件和刷新时间
- touch命令:
touch [OPTION]… FILE…
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
复制文件和目录cp
- cp [OPTION]… [-T] SOURCEDEST
- cp [OPTION]… SOURCE…DIRECTORY
- cp [OPTION]… -t DIRECTORY..
- cp SRC DEST
- SRC是文件
- 如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
- 如果目标存在
-
- 如果DEST是文件:将SRC中的内容覆盖至DEST中
- 基于安全,建议为cp命令使用-i选项
- 如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
- 如果DEST是文件:将SRC中的内容覆盖至DEST中
- cp SRC… DEST ..:多个文件
- DEST必须存在,且为目录,其它情形均会出错;
- cp SRC DEST
- SRC是目录:此时使用选项:-r
- 如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;
- 如果DEST存在:
- 如果DEST是文件:报错
- 如果DEST是目录:
cp常用选项:
- -i:覆盖前提示 –n:不覆盖,注意两者顺序
- -r, -R:递归复制目录及内部的所有内容
- -a:归档,相当于-dR –preserv=all
- -d:–no-dereference–preserv=links 不复制原文件,只复制链接名
- –preserv[=ATTR_LIST]
- mode:权限
- ownership: 属主属组
- timestamp:
- links
- xattr
- context
- all
cp选项
- -p:等同–preserv=mode,ownership,timestamp
- -v:–verbose
- -f:–force
- -u:–update只复制源比目标更新文件或目标不存在的文件
- –backup=numbered目标存在,覆盖前先备份加数字后缀
练习
- 1、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/app独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd, 备份过程可见
- 2、创建/app/rootdir目录,并复制/root下所有文件到该目录内, 要求保留原有权限
移动和重命名文件
- mv [OPTION]… [-T] SOURCEDEST
- mv [OPTION]… SOURCE…DIRECTORY
- mv [OPTION]… -t DIRECTORY..
- 常用选项:
- -i: 交互式
- -f: 强制
- 常用选项:
删除
- rm [OPTION]…..
- 常用选项:
- -i 交互式
- -f 强制删除
- -r 递归
- –no-preserve-root 删除/
- 示例:
- rm -rf /
目录操作
- tree显示目录树
- -d: 只显示目录
- -L level:指定显示的层级数目
- -P pattern: 只显示由指定pattern匹配到的路径
- mkdir创建目录
- -p: 存在于不报错,且可自动创建所需的各目录
- -v: 显示详细信息
- -m MODE: 创建目录时直接指定权限
- rmdir删除空目录
- -p: 递归删除父空目录
- -v: 显示详细信息
- rm-r 递归删除目录树
练习
- (1)如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a,/testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
- (2)如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b
- (3)如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6,/testdir/dir5/dir7
索引节点
- inode(indexnode)表中包含文件系统所有文件列表
- 一个节点 (索引节点)是在一个表项,包含有关文件的信息(元数据 ),包括:
- 文件类型,权限,UID,GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳指向磁盘上文件的数据块指针有关文件的其他数据
iNode结构
目录
- 文件引用一个是 inode号
- 人是通过文件名来引用一个文件
- 一个目录是目录下的文件名和文件inode号之间的映射
inode表
cp和inode
- 在 CP的 命令:
- 分配一个空闲的inode号,在inode表中生成新条目在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件
- rm命令:
- 链接数递减,从而释放的inode号可以被重用
- 把数据块放在空闲列表中删除目录项
- 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
mv和inode
- 如果mv命令的目标和源在相同的文件系统,作为mv命令用新的文件名创建对应新的目录项
- 删除旧目录条目对应的旧的文件名
- 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
- 如果目标和源在一个不同的文件系统, mv相当于cp和rm
- 如果mv命令的目标和源在相同的文件系统,作为mv命令用新的文件名创建对应新的目录项
- 删除旧目录条目对应的旧的文件名
- 不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
- 如果目标和源在一个不同的文件系统, mv相当于cp和rm
硬链接
- 创建硬链接会增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:
- rm命令递减计数的链接
- 文件要存在,至少有一个链接数
- 当链接数为零时,该文件被删除
- 不能跨越驱动器或分区
- 语法:
- ln filename [linkname ]
软链接
- 一个符号链接指向另一个文件
- ls- l的 显示链接的名称和引用的文件
- 一个符号链接的内容是它引用文件的名称
- 可以对目录进行
- 可以跨分区
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;
- 语法:
- ln -s filename [linkname]
确定文件内容
- 文件可以包含多种类型的数据
- 检查文件的类型,然后确定适当的打开命令或应用程序使用
- file [options]<filename>…
- 常用选项:
- -b 列出文件辨识结果时,不显示文件名称
- -f filelist 列出文件filelist中文件名的文件类型
- -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
- -L 查看对应软链接对应文件的文件类型
- –help 显示命令在线帮助