Linux系统中文件管理
一、文件系统与目录结构
1.1文件系统概念
文件系统是操作系统最重要的一部分,它定义了磁盘上储存文件的方法及数据结构。文件系统是操作系统组织、存取和保存信息的重要手段,每种操作系统都有自己的文件系统,如Windows所用的文件系统主要有FAT16、FAT32和NTFS,Linux所用的文件系统主要有ext2、ext3、ext4、xfs和btrfs等。
1.2Linux文件系统的特点
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示根文件系统(rootfs):root filesystem
- 文件名称区分大小写
- 以"."开头的文件为隐藏文件
- 路径分隔符 /
- 数据=metadata+data
-
- 元数据:metadata-->存储基本信息,可用stat filename来查看filename的元数据
- 数据:data-->真正存储在磁盘上的数据
1.3Linux系统中文件命名规则
- 文件最长255个字节
- 包括路径在内文件名称最长4095个字节
- 标准linux文件系统,文件名大小写敏感(ext4)
- Linux中定义了不同文件对应的颜色
蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 黄色-->设备文件 粉色-->套接字文件 灰色-->其他文件
1.4Linux中文件系统目录结构
文件系统的是用来组织和排列文件存取的,所以它是可见的,在Linux中,我们可以通过ls和tree等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,他表现为由根“/”起始的树形结构。
- /boot:系统引导程序目录,包含在启动时加载的静态文件、内核、ramdisk和grub等
- /bin: 系统自身启动和运行时可能会用到的核心二进制程序,不能关联至独立分区
- /sbin: 管理类基本命令,不能关联至独立分区,系统启动时便会用到的程序
- /lib:系统基本共享库文件,以及内核模块文件
- /lib64:专用x86_64系统上的辅助共享库文件存放位置
- /etc:大多数应用程序的配置文件存放的位置
- /home:普通用户家目录的同意存放位置,每个用户的家目录通常默认为 /home/USERNAME
- /root:管理员root用户的主目录
- /media:便携式移动设备挂载点
- /mnt:临时文件挂载点
- /dev:(devices)所有设备文件及特殊文件存储位置
- /opt:第三方应用程序安装目录
- /srv:(service简写)服务类程序用到的中间数据
- /tmp:临时文件存放位置
- /usr:UNIX Software Resoure UNIX操作系统软件资源存放位置
- /var:经常发生变化的文件存储位置,像日志文件等
- /proc:用于输入内核于进程相关的数据,通常用于存储进程的pid好
- /sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统,内核中硬件设备相关的信息映射
- /selinux:selinux相关的安全策略等信息的存储位置
在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
上述的分类针对CentOS 7之前的系统;在CentOS 7中文件目录有了一些变化;分别是:
- /bin---->/usr/bin
- /sbin--->/user/sbin
- /lib----->/usr/lib
- /lib64--->/usr/lib64
二、文件操作
2.1查看文件【ls】
ls命令能够显示出指定目录下的文件(目录和文件);ls是一个二进制可执行程序,使用“which ls”能够查找到ls的位置“/usr/bin/ls”,使用ls和直接输入"/usr/bin/ls"是等价的;原因是/usr/bin/在PATH路径中。ls的用法如下:
-----------------ls的用法----------- -S 从大到小排序 -d 列出目录本身,而不是目录内容 -1 一行一个列出来 -lt mtime 按修改时间排序显示 -R 递归 -r 反向排序,默认数字->字母 -U 按目录中放置顺序排序 -X 按后缀排 -----------------ls实例------------- [ [email protected] ~ ]#ls # 直接使用ls表示查看当前目录下的文件,默认以数字到字母的顺序排序 14yn.sh a.out choice.sh man_db.conf test_var.sh 3sum.sh a.sh compare.sh nsum.sh trianger.sh [ [email protected] ~ ]#ls -ld /etc # ls -ld /etc 只显示关于/etc这个信息 drwxr-xr-x. 96 root root 8192 Aug 26 08:00 /etc [ [email protected] ~ ]#ls -r # 反向排序,默认数字->字母 www skip5.sh for.sh check_mem.sh adduser.sh user.sh reset.sh disk.sh check_disk.sh 9X9.sh
2.2文件复制【cp】
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
-------------cp的用法----------- -a:此参数的效果和同时指定"-dpR"参数相同 -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 -f:强行复制文件或目录,不论目标文件或目录是否已存在 -i:覆盖既有文件之前先询问用户 -l:对源文件建立硬连接,而非复制文件 -p:保留源文件或目录的属性 -R/r:递归处理,将指定目录下的所有文件与子目录一并处理 -s:对源文件建立符号连接,而非复制文件 -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件 -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀 -b:覆盖已存在的文件目标前将目标文件备份 -v:详细显示命令执行的操作 --------------实例---------------- [ [email protected] ~ ]#stat 99.sh # 先查看99.sh文件的元数据 File: ‘99.sh’ Size: 139 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 101316174 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2017-08-26 10:32:23.251408696 +0800 Modify: 2017-08-26 10:32:21.698408629 +0800 Change: 2017-08-26 10:32:21.706408630 +0800 Birth: - [ [email protected] ~ ]#cp -a 99.sh /app/ # 复制原文件的所有属性,如果不写新文件名,默认为原文件名 [ [email protected] ~ ]#cd /app/ && stat 99.sh # 查看复制出来文件的元数据信息,发现 File: ‘99.sh’ Size: 139 Blocks: 8 IO Block: 4096 regular file Device: 805h/2053d Inode: 73 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2017-08-26 10:32:23.251408696 +0800 # 元数据信息一样,时间信息都是一样的 Modify: 2017-08-26 10:32:21.698408629 +0800 Change: 2017-08-26 10:47:49.316448114 +0800 Birth: - [ [email protected] app ]# [ [email protected] app ]#cp -s /root/china.txt . # 复制成软连接 [ [email protected] app ]#ll china.txt # 查看文件,确实为软连接文件 lrwxrwxrwx. 1 root root 15 Aug 26 11:09 china.txt -> /root/china.txt [ [email protected] app ]#cp -l pw.log pwbak.log # 复制pw.log成硬链接 [ [email protected] app ]#ll pw.log -rw-r--r--. 2 root root 151 Aug 24 16:22 pw.log # 文件的节点数增加1,说明硬链接创建成功 [ [email protected] app ]#ll pwbak.log -rw-r--r--. 2 root root 151 Aug 24 16:22 pwbak.log
NOTE:
目标文件:不存在 | 目标文件:存在且为文件 | 目标文件:存在且为目录 | |
原文件:一个文件 | 新建目标文件并将内容填充至其中 | 覆盖目标文件中的内容 | 创建一个与原文件同名的文件并写入原文件的内容 |
原文件:多个文件 | 报错 | 报错 | 创建一个与原文件同名的文件并写入原文件的内容 |
原文件:目录文件 | 创建与原目录文件同名的目录文件并复制源目录下的所有文件至新目录下 | 报错 | 在目标目录下创建与源目录名相同的目录;并复制原目录下的所有文件到新目录中 |
2.3文件移动和改名【mv】
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
根据mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
相关参数:
- -b :若需覆盖文件,则覆盖前先行备份
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;慎用
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖
- -u :若目标文件已经存在,且 source 比较新,才会更新(update)
- -t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
实例:
[ [email protected] app ]#ls # 查看源目录下的文件 99.sh china.txt hello.py if.py man_db.conf mingpian.py price.py pwbak.log pw.log [ [email protected] app ]#mv man_db.conf man_db.cfg # mv实现改名 [ [email protected] app ]#ls # 查看发现man_db.conf更名为了man_db.cfg 99.sh china.txt hello.py if.py man_db.cfg mingpian.py price.py pwbak.log pw.log [ [email protected] app ]#cp man_db.cfg /root/ # 先将man_db.cfg复制到/root目录下 [ [email protected] app ]#mv /root/man_db.cfg . # 复制/root/man_db.cfg 到当前目录下 mv: overwrite ‘./man_db.cfg’? y # 因为当前目录下有man_db.cfg文件,会询问是否覆盖 [ [email protected] app ]#ls 99.sh china.txt hello.py if.py man_db.cfg mingpian.py price.py pwbak.log pw.log [ [email protected] app ]#ll china.txt # 查看文件china.txt是链接文件 lrwxrwxrwx. 1 root root 15 Aug 26 11:09 china.txt -> /root/china.txt [ [email protected] app ]#mv china.txt china_bak.txt # 将china.txt改名为china_bak.txt [ [email protected] app ]#ll china_bak.txt # 改名之后链接属性依然存在,说明mv不会破坏软链接 lrwxrwxrwx. 1 root root 15 Aug 26 11:09 china_bak.txt -> /root/china.txt
感谢你的阅读!!