第三章文件管理学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章文件管理学习笔记相关的知识,希望对你有一定的参考价值。

笔记整理起始时间:2018年3月31日16:16:55

本章内容
文件系统结构元素
创建和查看文佳
复制、转移和删除文件
使用Nautilus来管理文件
软和硬链接

文件系统
文件和目录被组织成一个单根倒置树结构
文件系统从根木兰路下开始,用"/"表示
根文件系统:rootfs,root filesystem
文件名称,默认ext4,xfs下区分大小写
以.开头的文件为隐藏文件
路径分隔的/
文件有两类数据
元数据:metadata
数据:data
文件系统分层结构:LSB,Linux Standard Base
FHS:(Filesystem Hierarchy Standard)

文件名规则
文件名最长255个字节
包括路径在内文件名最长4095个字节
蓝色-->目录
绿色-->可执行文件
红色-->压缩文件
浅蓝色-->链接文件
灰色-->其他文件
除了/和NUL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用
有些字符需要用引号来引用它们。
标准Linux文件系统ext4,xfs下区分大小写,如mail,Mail等

文件系统结构
/boot:引导文件存放目录,内核文件(vmlinuz),引到加载器(bootloader)
/bin:供所有用户使用的基本命令;不能关联至独立分区,os启动即会用到程序
/sbin:管理类的基本命令,不能关联至独立分区,os启动即会用到的程序
/lib:启动时程序依赖的基本共享库文件以及内核模块文件/lib/modules
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc:配置文件目录
/home/houstname:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点
/mnt:临时文件系统挂载点
/dev:设备文件及特殊文件存储位置
b:block device,随即访问
c:character device,线性访问
/opt:第三方应用程序的安装位置
/srv:系统上运行的服务用到的数据
/tmp:临时文件存储位置
/usr:universal shared,read-only data
/usr/bin:保证系统拥有完整功能而提供的应用程序
/usr/sbin:
/usr/lib:32位使用
/usr/lib64:只存在64位系统
/usr/include:C程序的头文件(header files)
/usr/share:结构化独立的数据,例如doc,man等
/local:第三方应用程序的安装位置
bin,sbin,lib,lib64,etc,share
/var:variable data filesystem
cache:应用程序缓存数据目录
lib:应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock:锁文件
log:日志目录及文件
opt:专用于为/opt下的应用程序存储可变数据
run:运行中的进程相关数据,通常用于存储进程pid文件
spool:应用程序数据池
tmp:保存系统两次重启只见产生的临时数据
/proc:用于输出内核与进程信息相关的虚拟文件系统
/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux:security enhanced Linux,selinux相关的安全策略等信息的
存储位置

Linux上的应用程序的组成部分
二进制程序:/bin,/sbin,/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

CentOS 7目录变化
/bin 和/usr/bin
/sbin 和/usr/sbin
/lib 和/usr/lib
/lib64 和/usr/lib64

显示当前工作目录
每个shell和系统进程都有一个当前的工作目录
CWD:current work directory
显示当前shell CWD的绝对路径
pwd:printing working directory
-P 显示真实物理路径
-L 显示链接路径(默认)
如:cd /bin,
pwd,输出结果为:/bin,
pwd -P ,输出结果为:/usr/bin

绝对和相对路径
绝对路径
以/开始
完整的文件的位置路径
可用于任何想指定一个文件名的时候
例如:cd /root/Downloads
相对路径名
不以斜线开始
指定相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名
例如:cd ../Downloads/
基名:basename
目录名:dirname
如:
basename /root/Music/file1 输出结果为:file1
dirname /root/Music/file1 输出结果为:/root/Music

cd 更改目录
cd 更改目录,可使用相对或绝对路径
cd /home/wang
cd home/wang
cd .. 切换至父目录
cd 切换至当前用户家目录
cd - 切换至上一个工作目录
cd ~wang 切换至wang用户家目录
cd -P /bin 进入绝对路径
相关变量
PWD:当前目录路径
OLDPWD:上一次目录路径

ls 列出当前目录的内容或指定目录
用法:ls [options] [files or dirs]
ls -a 显示所有文件或目录,含隐藏
ls -l 显示文件详细信息,==ll
ls -R 递归,显示目录里面的内容
ls -ld 目录和符号链接信息
ll -d 目录/ 对于普通目录,加和不加/都会显示目录信息,但是对于链接
目录,比如/bin,加/会显示链接目的目录信息,不加/会显示链接
文件本身的信息。
ls -1 单列显示
ls -S 按大小从大到小排序
ls -t 按mtime排序
ls -u 需配合-t使用,显示并按atime从新到旧排序
ls -U 按目录存放顺序显示
ls -X 按文件后缀排序
ls -r 倒序排列

stat 查看文件状态
三个时间戳
access time, atime,表示文件的最后读取时间
modify time, mtime,表示文件的最后修改时间
change time, ctime,表示元数据发生改变的时间

文件通配符

  • 匹配零个或多个字符
    ? 匹配任何单个字符
    ~ 当前用户家目录
    ~mage 用户mage家目录
    ~+ 当前工作目录
    ~- 前一个工作目录
    [0-9] 匹配列表中的任何一个字符
    [a-Z] 匹配任意字母
    [wang] 匹配列表中的任何一个字符
    [^wang] 匹配列表中的所有字符意外的字符
    预定义的字符类:man 7 glob
    [:digit:] 任意数字,相当于0-9
    [:lower:] 任意小写字母
    [:upper:] 任意大写字母
    [:alpha:] 任意大小写字母
    [:lanum:] 任意数字或字母
    [:blank:] 水平空白字符
    [:space:] 水平或垂直空白字符
    [:punct:] 标点符号
    [:print:] 可打印字符
    [:graph:] 图形字符
    [:cntrl:] 控制(非打印)字符
    [:xdigit:] 十六进制字符

小练习:
1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数
字的文件或目录
ls -d /var/l[0-9][[:lower:]]
? 2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9][^[:digit:]]
? 3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符
的文件或目录
ls -d /etc/[^[:alpha:]][a-Z]

? 4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符
的文件或目录
ls -d /etc/rc[0-6]
? 5、显示/etc目录下,所有以.d结尾的文件或目录
ls -d /etc/
.d
? 6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls -d /etc/[mnrp].conf
? 7、只显示/root下的隐藏文件和目录
ls -d /root/.

? 8、只显示/etc下的非隐藏目录

ls -d /etc/[^.]*/

touch命令 创建空文件和刷新时间戳
touch [OPTION]...FILE...
-a 仅改变atime和ctime
-m 仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
用法:文件存在,刷新时间戳,文件不存在,则创建文件
touch file{1..5} 创建file1..file5

cp复制文件和目录
用法使用规则
cp SRC DEST
复制单个文件到单个文件
如文件名不存在,则创建
cp Music/file3 f3
如文件名已存在,则覆盖,root账号默认使用别名-i,会询问是否覆盖
cp Music/file3 f3 此时f3已存在
复制单个文件到目录
在目标DEST下新建与源SRC同名的文件,并将SRC内容填充到新文件
复制多个文件到单个文件
不管文件名是否存在,均会报错
cp: target ‘f3’ is not a directory
复制多个文件到目录
在目标DEST下新建与源SRC同名的文件,并将SRC内容填充到新文件
cp Music/file1 Music/file2 Videos/
如目标文件名已存在,则覆盖,默认root账号会询问
复制目录到单个文件
如DEST已存在,直接报错
cp: cannot overwrite non-directory ‘f3’ with directory ‘Music/’
如DEST不存在
创建指定的DEST同名目录,复制SRC目录中所有内容至新目录
复制目录到目录
在DEST中新建与SRC同名目录,且复制SRC中内容到新目录
如目录已存在,默认root账号会提示覆盖
PS:如复制目录,必须加-r选项

   cp -i       覆盖前提示
   cp -n      不覆盖,必须在-i后面才有效
   cp -a      归档,相当于-dR --preserv=all
   cp -d      --no-dereference --preserv=links 不复制源文件,只复制链接
   --preserv[=ATTR_LIST]
          mode:权限
          ownership:属主属组
          timestamp:
          links
          xattr
          context
          all
   cp -p     等同于--preserv=mode,ownership,timestamp
   cp -v      --verbose过程可视
   cp -f      --force   强制
   cp -u      --update 只复制源比目标更新文件或目标不存在的文件
   cp -=backup=numberd      如目标存在,覆盖前先备份加且加数字后缀

mv 移动和重命名文件
mv,用法规则和cp类似
mv -i 覆盖前提示
mv -f 强制

rm 删除
rm file1 删除file1
rm -i file1 删除前询问
rm -f 强制删除,不再询问
rm --no-preserve-root 删除/
如:
rm -rf / --no-preserve-root
自杀,删除根目录下-所有文件,史上最危险命令

tree 显示目录树
tree /etc 显示指定目录树
tree -d 只显示目录
tree -L level, 指定显示的层级数
tree -P pattern 只显示由指定pattern匹配到的路径
tree -p 显示tree的时候显示文件类型(-,d,b..)

mkdir 创建目录
mkdir /root/f1 在root下创空目录f1
mkdir -p /root/go1/go2/go3/go 递归创建,即父目录不存在则自动创建
mkdir -v 是过程可视
mkdir -m MODE 创建目录时直接指定权限

rmdir 删除空目录
rmdir /root/f1 删除root下空目录f1
rmdir -p /root/go1/go1/go2/go3/go
递归删除,如删除目标之后父目录空,则一起删除
rmdir -v 显示详细信息,是过程可见

索引节点:
一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组
中的唯一一个元素对应,系统给每个索引节点分配了一个号码,也就是该节点
在数组中的索引号,索引节点号。

   Linux为每个文件分配一个inode(索引节点编号),可以将inode简单理解成
   一个指针,它永远指向本文件的具体存储位置,系统是通过inode来定位每一
   个文件。
   inode(index node)表中包含文件系统所有文件列表
   一个节点(索引节点)是在一个表项,包含有关文件的信息(元数据),包括
          文件类型,权限,uid,gid
          链接数(指向这个文件名路径名称个数)
          该文件的大小和不同的时间戳
          指向磁盘上文件的数据块指针
          有关文件的其他数据
   文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在

目录:
文件系统引用一个文件是用inode号
人是通过文件名来引用一个文件
一个目录的数据部分记录的信息为:
目录下文件名和文件inode号之间的映射

cp和inode:
在cp的命令执行时:
分配一个空闲的inode号,在inode表中生成新条目(inode编号)
在目录中创建一个目录项(新映射),将名称与inode编号关联
拷贝数据生成新的文件

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

mv和inode
如果mv命令的目标和源在相同的文件系统,作为mv命令
用新的文件名创建对应新的目录项(映射)
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动。
如果目标和源在一个不同的文件系统,mv相当于cp和rm

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

符号(软)链接
一个符号链接指向另一个文件
ls -l 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少
目标文件inode的引用计数
语法:
ln -s filename [linkname]
ln -s /data/f5 /root/f5_link
PS:如使用删除命令rm删除软链接
rm -rf /root/f5_link
此命令如最后不加/,会删除软链接本身,
如使用tab键补全命令,后面默认会带/,此时删除的将会是目f5下所有文件

   readlink /root/f5_link          显示软链接指向的源文件

确认文件内容
file f1 显示f1的文件类型
file -b f1 累出文件辨识结果时,不显示文件名称
file -f filelist 列出文件filelist中所有文件名的文件类型
file -F , 34 使用指定分隔符号(,)替换输出结果文件名后默认
的:分隔符
flie -L 查看对应软链接对应文件的文件类型

笔记整理完成时间:2018年4月1日15:24:49

以上是关于第三章文件管理学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记

学习笔记

操作系统学习笔记 第五章:文件管理(王道考研)

操作系统学习笔记 第五章:文件管理(王道考研)

课本学习笔记4:第三章 20135115臧文君

学习笔记:python3,代码片段(2017)