文件管理
一:文件系统结构
文件目录
Linux文件目录结构是一个倒树状结构,从根(/)开始依次往下,根文件系统为rootfs:root filesystem;
文件名称区分大小写是由文件系统决定的,CentOS6.x默认文件系统为ext4,CentOS7.x上默认文件系统是xfs;
以点(.)开头的文件为隐藏文件,文件路径以(/)分割;
文件有俩类数据:元数据和数据;
文件系统分层结构:LSB Linux Standard Base
FHS:(Filesystem Hierarchy Standard)文件系统层次结构标准,想了解更多请访问:http://www.pathname.com/fhs/
[root@centos6 /]# tree -L 1 . ├── bin 二进制程序 ├── boot 启动相关,grub,kernel,initrafs等 ├── data 自己创建的数据目录 ├── dev 设备文件 ├── etc 系统程序配置文件 ├── home 普通用户家目录 ├── lib 库文件 ├── lib64 64库文件 ├── lost+found ext4文件系统生成,用于存放无家可归的文件,比如断电造成文件系统错乱 ├── media 通常用于光盘挂载 ├── misc 杂项,用户在此文件夹下执行 cd cd/ 可自动挂载光盘 ├── mnt 挂载点 ├── net 伪文件系统 ├── opt 第三方软件目录,已弃用 ├── proc 伪文件系统 ├── root root用户的家目录 ├── sbin 只有管理员可以执行的程序 ├── selinux 和SELinux相关 ├── srv 一些服务启动后所需要的文件 ├── sys 伪文件系统 ├── tmp 临时文件夹,其权限为777,内容定期清理 ├── usr 第二层根,非系统应用存放于此 └── var 软件产生的文件,列如/var/ftp/pub存放于此 23 directories, 0 files
文件命名规则
- 文件名最长255个字节
- 包括路径在内文件名最长4095个字节
- Linux中文件所对应的颜色:蓝色-->目录;绿色-->可执行文件;红色-->压缩文件;浅蓝色-->链接文件;灰色-->其他文件
- 文件名不能包含“/”,其他字符都合法
- 文件名称区分大小写(ext4)
Linux上的应用程序的组成部分
- 二进制程序:/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
ps:CentOS6.x和CenOS7.x 目录区别
[root@centos7 /]# ls -l lrwxrwxrwx. 1 root root 7 Mar 28 01:54 bin -> usr/bin lrwxrwxrwx. 1 root root 7 Mar 28 01:54 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Mar 28 01:54 lib64 -> usr/lib64 lrwxrwxrwx. 1 root root 8 Mar 28 01:54 sbin -> usr/sbin [root@centos6 /]# ls -l dr-xr-xr-x. 2 root root 4096 Mar 28 11:15 bin dr-xr-xr-x. 11 root root 4096 Mar 27 17:08 lib dr-xr-xr-x. 9 root root 12288 Mar 28 11:14 lib64 dr-xr-xr-x. 2 root root 12288 Mar 28 11:15 sbin drwx------. 2 root root 16384 Mar 27 16:56 lost+found drwxr-xr-x. 2 root root 0 Mar 31 14:56 misc drwxr-xr-x. 2 root root 0 Mar 31 14:56 net drwxr-xr-x. 7 root root 0 Mar 31 2018 selinux
绝对路径和相对路径
绝对路径
- 以正斜杠开始
- 完整的文件的位置路径
- 可用于任何想指定一个文件名的时候
相对路径
- 不以斜线开始
- 指定相对于当前工作目录或某目录的位置
- 可以作为一个简短的形式指定一个文件名
pwd 显示当前shell CWD的绝对路径
-P 显示真实的物理路径
-L 显示链接路径
[root@centos6 ~]# ll lrwxrwxrwx. 1 root root 8 Mar 31 00:24 data -> ../data/ [root@centos6 data]# cd /root/data/ [root@centos6 data]# pwd /root/data [root@centos6 data]# pwd -L /root/data [root@centos6 data]# pwd -P /data
basename 取文件路径基名
dirname 取文件路径目录名
[root@centos6 ~]# basename /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-eth0 [root@centos6 ~]# dirname /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts
cd 切换文件目录
cd 切换到家目录
.. 父目录
- 上一目录
$PWD 当前目录路径变量
$OLDPWD 上一次目录路径变量
二:创建、查看、复制、移动、删除文件
查看文件
ls 列出当前目录的内容或指定目录内容
用法:ls [options] [files_or_dirs]
选项:
-a 列出隐藏文件
-A 不显示.和..
-R 递归
-l 以长格式列出
-d 显示文件夹属性
-1 文件分行显示
-S 按文件大小排序
-t 按mtime排序
-u 按atime排序
-c 按ctime排序
-U 按目录顺序,按创建时间
-X 按文件后缀排序
-i 显示inode
--time=
atime 访问时间,读文件
ctime 状态时间,修改元数据会修改状态时间
mtime 修改时间,修改文件数据
stat 查看文件时间戳
[root@centos6 ~]# stat anaconda-ks.cfg File: `anaconda-ks.cfg' Size: 1478 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 1972445 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-03-30 20:31:01.333443435 +0800 Modify: 2018-03-30 20:31:01.333443435 +0800 Change: 2018-03-30 20:31:01.333443435 +0800
access time:访问时间,atime,读取文件内容
modify time: 修改时间, mtime,改变文件内容(数据)
change time: 改变时间, ctime,元数据发生改变
file 查看文件的类型
-b 列出文件辨识结果时不显示文件名称
-f FILELIST 列出文件列表文件中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
-L 查看对应软链接对应文件的文件类型
文件通配符
- * 匹配零个或多个字符
- ? 匹配任何单个字符
- ~ 当前用户家目录
- ~root 用户root家目录
- ~+ 当前工作目录
- ~- 前一个工作目录
- [0-9] 匹配数字范围
- [a-z] 小写字母
- [A-Z] 大写字母
- [string] 匹配列表中的任何的一个字符
- [^string] 匹配列表中的所有字符以外的字符
- [:digit:]:任意数字,相当于0-9
- [:lower:]:任意小写字母
- [:upper:]: 任意大写字母
- [:alpha:]: 任意大小写字母
- [:alnum:]:任意数字或字母
- [:blank:]:水平空白字符
- [:space:]:水平或垂直空白字符
- [:punct:]:标点符号
- [:print:]:可打印字符
- [:cntrl:]:控制(非打印)字符
- [:graph:]:图形字符
- [:xdigit:]:十六进制字符
创建空文件和刷新文件访问、修改和改变时间
touch 创建空文件,刷新文件时间
用法:touch [OPTION]... FILE...
-a 刷新访问时间和改变时间
-m 刷新修改时间和改变时间
-t [[CC]YY]MMDDhhmm[.ss]
--time=atime|mtime (ctime不可指定时间刷新)
-c 如果文件不存在,则不予创建
ps:atime不一定在访问文件之后被修改,因为:使用ext系列文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。而这是加了noatime取消了,不代表真实情況,反正, 这三个 time stamp 都放在 inode 中,若mtime, atime 修改, inode 就一定会改, 既然 inode 改了, 那 ctime 也就跟着要改了,之所以在mount option 中使用 noatime, 就是不想 file system 做太多的修改,而改善服务器性能。
复制文件
cp 复制copy
用法:
- cp[OPTION]... [-T] SOURCE DEST
- cp[OPTION]... SOURCE... DIRECTORY
- cp[OPTION]... -t DIRECTORY SOURCE...
- cpSRC DEST
复制规则:
选项:
-i 覆盖文件时提示
-n 复制时不覆盖文件
-R, -r 递归复制
-a == -dR --preserve=all 保留链接,保留文件元数据,并且以递归方式复制,常用于归档备份
-d 复制链接时不复制原文件,只复制链接文件
--preserve[=ATTR_LIST]
默认保留mode,ownership,timestamps
也可选:context(上下文),links(链接),xattr(扩展文件属性),all(全部)
-p == --preserve=mode,ownership,timestamps
-v 显示详细信息
-f 不提示强制执行,危险!
-u 只复制源比目标更新文件或目标不存在的文件
--backup=numbered 如果目标存在,覆盖前先备份加数字后缀,建议加入alias
-t DIR 目标指定文件夹
install 复制、创建文件或文件夹并指定权限
-t DIR:指定目标文件夹
-d DIR:创建空文件夹
-m MODE:指定权限,默认为755
-o OWNER:指定所属者
-g:GROUP指定所属组
移动文件和重命名
mv 移动和重命名文件
用法:
- [OPTION]... [-T] SOURCE DEST
- [OPTION]... SOURCE... DIRECTORY
- [OPTION]... -t DIRECTORY SOURCE...
选项:同cp : -i|n|u|f|-t DIR...
rename from to file... 批量修改文件名
[root@centos6 data]# touch file{1..10}.conf [root@centos6 data]# ls file10.conf file2.conf file4.conf file6.conf file8.conf file1.conf file3.conf file5.conf file7.conf file9.conf [root@centos6 data]# rename "conf" "conf.bak" file* [root@centos6 data]# ls file10.conf.bak file2.conf.bak file4.conf.bak file6.conf.bak file8.conf.bak file1.conf.bak file3.conf.bak file5.conf.bak file7.conf.bak file9.conf.bak
删除文件:慎用!
rm 删除文件和文件夹
用法:
- rm[OPTION]... FILE...
选项:同cp:-i|-f|-r|--no-preserve-root(强行删除根,自杀) ,常用-rf搭配,建议设置alias:alias rm='mv -i -t /Trash'
shred 安全删除文件,从数据块级别删除,销毁数据块
-z 填充0
-v 显示详细信息
-u 执行填充后删除文件
-n # 指定要覆盖几次数据块操作
>BIGFILE 删除大文件,立即释放硬盘空间
目录操作
tree 显示目录树
-d 只显示目录
-L # 指定显示的层级数目
-P pattern 只显示由指定模式匹配到的路径
mkdir 创建目录
-p 自动创建上一层没有的目录
-v 显示创建详细信息
-m MODE 创建目录是指定文件夹权限
rmdir 删除空目录
-p 递归删除父空目录
-v 显示详细信息
ps:rm -r 递归删除目录树,慎用!
mktemp:创建临时文件
-d:创建临时目录
-p DIR:指明临时文件所存放目录位置
[root@rhel6 ~]# mktemp /tmp/fXXXXX #X至少要出现三个 /tmp/fmhbRn
三:inode(index node)
inode是指在许多“类Unix文件系统”中的一种数据结构。每个inode保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、socket、管道, 等等)的元信息数据,但不包括数据内容或者文件名。
元数据:
- 文件类型,权限,UID,GID
- 链接数(指向这个文件名路径名称个数)
- 该文件的大小和不同的时间戳
- 指向磁盘上文件的数据块指针
- 有关文件的其他数据
四:符号(软)、硬链接
链接
硬链接
在计算,一个硬链接是一个目录条目,一个名字与一个关联文件一上文件系统。所有基于目录的文件系统都必须至少有一个硬链接,为每个文件提供原始名称。
- 创建硬链接会增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:
- rm命令递减计数的链接
- 文件要存在,至少有一个链接数
- 当链接数为零时,该文件被删除
- 不能跨越驱动器或分区
符号链接(软链接)
符号链接(软链接)是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。
- 一个符号链接指向另一个文件
- ls -l的显示链接的名称和引用的文件
- 一个符号链接的内容是它引用文件的名称
- 可以对目录进行
- 可以跨分区
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
符号(软)、硬链接的区别
本质:
- 硬链接相当于一个文件、多个名字
- 软链接相当于一个文件的快捷方式,是不同文件
表象:
- 链接数不同,硬链接会增加文件的链接数,软链接不会增加被链接文件的链接数
- 硬链接不能跨分区创建,软链接则可以跨分区创建
- 目录只能创建软链接,不能创建硬链接
- 链接文件和原始文件的关系:当把原文件删除硬链接不受影响,但是软链接会无法访问
- 软链接的文件大小为被链接文件字符长度所占字节,但是硬链接则是文件实际大小
常用创建、查看链接的命令
ln 创建文件链接
ln 原始文件 链接文件 创建硬链接
ln -s 原始文件 链接文件 创建符号(软)链接
readlink 查看软链接的原文件路径
感谢阅读,欢迎大家共同交流学习!