linux系统中的文件管理

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中文件目录有了一些变化;分别是:

  1. /bin---->/usr/bin
  2. /sbin--->/user/sbin
  3. /lib----->/usr/lib
  4. /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

感谢你的阅读!!

时间: 2024-10-07 05:26:58

linux系统中的文件管理的相关文章

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

LINUX系统中动态链接库的创建与使用{补充}

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资

Linux系统中安装MySQL数据库操作手册

Linux系统中MySQL数据库安装手册 一.安装概述: 在Linux操作系统中安装MySQL数据库是一个我们必须要掌握的一门技术,也决定了你以后找工作的薪资待遇,所以你知道它的厉害了吧!学会安装只是第一步,你还得学好数据库的基本操作,以及搭建一个数据库的主从配置等等.这些我都会在后面的博文中说到.下面我就简单的写一些安装MySQL数据库的一些步骤,仅供参考,如有什么不妥的地方,还请见谅! 二.安装步骤: (一)基本准备工作 1.打开虚拟机,在虚拟机中下载好最新版的MySQL数据库的压缩包.在M

学习Linux系统中命令的简单方法

如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中"一切皆文件"概念虽然说是没有错,是对的.但是个人认为去学习这些"高大上"的东西不是一时半会的事儿,它需要一定的时间和经验去沉淀才能掌握.那么如何最快速了解Linux并使用呢?我依然觉得学命令.背命令,掌握命令是比较笨但却是比较快的方式. 我开始学习Linux的时候,问了前辈:我入门Linux需要掌握哪些命令呢?前

LINUX系统中LV动态扩容

LINUX系统中LV扩容 服务器:192.168.26.209 扩容数据盘:原来服务器存储配置信息 df -h df –h 增加一个硬盘,扩容20G 启动服务器,系统已经识别新硬盘设备. 创建PV: [[email protected] ~]# pvcreate /dev/sdc [[email protected] ~]# pvs 先扩展VG: [[email protected] ~]# vgextend vg_centos /dev/sdc [[email protected] ~]# p

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格

Linux系统中DHCP服务实战

Linux系统中DHCP服务实战部署 一.实验要求 1.将系统的主机名改成s01.benet.com 2.搭建一台dhcp服务器为局域网分配IP地址,要求分配192.168.40.0/24 3.为boss保留192.168.40.188地址 二.实验环境 虚拟机VMware Workstation11.0 RED HET 6.5 三.实验步骤 1.将系统的主机名改成s01.benet.com 2.搭建dhcp服务.为局域网分配IP地址 3.测试主机分配地址效果 4.给boss分配192.168.

LINUX系统中动态链接库的创建与使用

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这