Linux文件管理
1.文件管理概述
1.Bash Shell对文件进行管理
谈到Linux文件管理,首先我们需要了解的就是,我们要对文件做些什么事情?
其实无非就是对一个文件进行、创建、复制、移动、查看、编辑、压缩、查找、删除、等等
例如 : 当我们想修改系统的主机名称,是否应该知道文件在哪,才能去做对应的修改?
2.内容摘要
系统目录结构
文件路径定位
文件管理命令
文件类型file
链接文件ln
文件编辑vim
2.系统目录结构
几乎所有的计算机操作系统都是使用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件,以此类推形成一个树状的文件结构,由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。
Windows: 以多根的方式组织文件 C: D:
Linux:以单根的方式组织文件 /
如下图为Centos7的目录结构
1.存放命令相关的目录
/bin, 普通用户使用的命令 /bin/ls, /bin/date
/sbin,管理员使用的命令 /sbin/service,poweroff,useradd…
只要看到bin路径,就应该意识到放的是可执行文件
2.存放用户相关数据的家目录,比如:windows不同的用户登陆系统显示的桌面背景不一样
/home,普通用户的家目录, 默认为/home/username
环境变量的东西不要删,删掉试一下
/root,超级管理员root的家目录, 普通用户无权操作
3.系统文件目录
/usr,相当于C:Windows
/usr/local,软件安装的目录,相当于C:Program
/usr/bin/,普通用户使用的应用程序(重要)
/usr/sbin,管理员使用的应用程序(重要)
/usr/lib,库文件Glibc 32bit
/usr/lib64,库文件Glibc 64bit
|
|
4.启动目录
/boot 存放的系统启动相关的文件,例如:kernel,grub(引导装载程序)
|
|
5.配置文件目录
/etc,极其重要,后续所有服务的配置都在这个目录中
/etc/sysconfig/network-script/ifcfg-,网络配置文件
/etc/hostname,系统主机名配置文件,主机名很重要,有些特殊服务要依赖主机名,没有主机名会报错起不来;修改了要重启:reboot
/etc/resolv.conf,dns客户端配置文件,域名解析服务器,一般我们不配置,因为网卡的配置好了,会覆盖掉它,网卡的优先级高
/etc/hosts,本地域名解析配置文件,域名解析,先找自己的hosts,再去域名解析
|
|
6.可变的目录与临时目录
/var,存放一些变化文件,比如/var/log/下的日志文件,登陆日志
/var/tmp,进程产生的临时文件
/tmp,系统临时目录(类似于公共厕所),谁都可以使用
|
|
7.设备目录文件
/dev,存放设备文件,比如硬盘,硬盘分区,光驱,等等
/dev/sd 硬盘设备
/dev/null,黑洞设备,只进不出。类似于垃圾回收站
/dev/random,生成随机数的设备
/dev/zero,能远远不断的产生数据,类似于取款机,随时随地取钱
|
|
8.虚拟的文件系统(如对应的进程停止则/proc下对应目录则会被删除)
/proc,反映系统当前进程的实时状态 :process
PS:类似于小汽车的仪表板,能够看到汽车是否有故障,或者是否缺油了。
|
|
9 其他
|
|
10.PS: 在Linux7系统中,
/bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下
/bin –> /usr/bin
/sbin –> /usr/sbin
lib -> usr/lib
lib64 -> usr/lib64
3.文件路径定位
在我们开始操作文件前,首先需要对文件进行定位,比如:
你要在哪创建什么文件? 你要将文件复制到什么地方? 或者你要删除的文件在什么地方?
那什么是定位: 比如/etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,那么路径就是对文件进行定位的一种方式。例:如下图的message所在的路径是?
提问FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一个文件?
1.每个目录下都有一个.和..的目录是干啥的?
一个点代表当的是当前目录, 两个点代表的是当前目录的上层目录。
假设当前目录在/usr/
下, 那么它的上层(/)目录用../
表示, 而/usr/
的下层(local)目录则用./local
表示。
2.那什么是绝对路径,什么又是相对路径呢?
绝对路径: 只要从/开始的路径,比如/home/alice/file
相对路径: 相对于当前目录来说,比如 a.txt ./a.txt ../bob/a.mp3 [加入: 此时在目录/home/alice]
小结: 所谓的(.)和(..)目录实际上属于相对路径的一种表示形式。
3.绝对路径与相对路径示例
|
|
cd改变目录,常见的使用方法
|
|
4.系统文件管理
1.文件管理之: 创建/复制/移动/删除
创建
1.文件创建命令touch
|
|
2.目录创建命令mkdir
|
|
3.以树状显示目录结构命令tree
|
|
cp复制
|
|
mv移动
|
|
rm删除
|
|
2.文件管理之:查看文件内容(cat tac less more head tail tailf grep …)
|
|
3.文件管理之:联网下载文件(wget、curl)、文件上传与下载(rz、sz)
wget、curl联网下载文件
|
|
rzsz上传下载文件
|
|
4.文件管理之:文件或命令查找(locate、which、whereis、find)
文件查找
|
|
命令查找
|
|
5.文件管理之:字符处理命令(sort、uniq、cut、sed、awk、wc、)
sort排序
在有些情况下,需要对应一个无序的文本文件进行数据的排序,这时就需要使用sort进行排序了。
|
|
uniq去重
如果文件中有多行完全相同的内容,当前是希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数, 那么就可以使用uniq
命令解决这个问题(但是必须配合sort
使用,相邻的才能去重,所以要配合sort)。
|
|
cut截取字段
|
|
wc统计行号
|
|
习题: 分析如下日志,统计每个域名被访问的次数。
|
|
习题: 使用awk取出系统的IP地址图解
5.系统文件属性
当我们使用ls -l列目录下所有文件时,通常会以长格式的方式显示,其实长格式显示就是我们Windows下看到的文件详细信息,我们也将其称为文件属性,那整个文件的属性分为十列。
|
|
6.系统文件类型
1.通常我们使用颜色或者后缀名称来区分文件类型,但很多时候不是很准确,所以我们可以通过ls -l以长格式显示一个文件的属性,通过第一列的第一个字符来近一步的判断文件具体的类型。
|
|
2.但有些情况下,我们无法通过ls -l文件的类型,比如: 一个文件,它可能是普通文件、也可能是压缩文件、或者是命令文件等,那么此时就需要使用file来更加精准的判断这个文件的类型。
|
|
PS: Linux文件扩展名不代表任何含义,仅为了我们能更好的识别该文件是什么类型。
7.系统链接文件
文件有文件名与数据,在Linux上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。
用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方,我们将其称为Block
元数据,即文件的附加属性,如文件大小、创建时间、所有者等信息。我们称其为Inode
在Linux中,inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)
文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。图1.展示了程序通过文件名获取文件内容的过程。
Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)
ll -i 查看inode
1.什么是软链接
软链接相当于Windows的快捷方式,软链接文件会将inode指向源文件的block,当我们访问这个软链接文件时,其实访问的是源文件本身。那么当我们对一个文件创建多个软链接,其实就是多个inode指向同一个block。当我们删除软链接文件时,其实只是删除了一个inode指向,并不会对源文件源文件造成影响,但如果删除的是源文件则会造成所有软链接文件失效。
2.什么是硬链接
若一个inode号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,如下图hard link 就是 file 的一个别名,他们有共同的 inode。
3.软链接实践
|
|
4.硬链接实践
|
|
5.硬链接与软链接区别
1)ln命令创建硬链接,ln -s命令创建软链接。
2)目录不能创建硬链接,并且硬链接不可以跨越分区系统。
3)目录软链接特别常用,并且软链接支持跨越分区系统。
4)硬链接文件与源文件的inode相同,软链接文件与源文件inode不同。
5)删除软链接文件,对源文件及硬链接文件无任何影响。
6)删除文件的硬链接文件,对源文件及链接文件无任何影响。
7)删除链接文件的源文件,对硬链接无影响,会导致软链接失效。
8)删除源文件及其硬链接文件,整个文件会被真正的删除。
1.find查找概述
为什么要有文件查找,因为很多时候我们可能会忘了某个文件所在的位置,此时就需要通过find来查找。
find命令可以根据不同的条件来进行查找文件,例如:文件名称、文件大小、文件修改时间、属主属组、权限、等等方式。同时find命令是Linux下必须掌握的。
find 命令的基本语法如下\
命令 | 路径 | 选项 | 表达式 | 动作 |
---|---|---|---|---|
find | [path…] | [options] | [expression] | [action] |
查找 | 地区 | 妹纸 | 18-25岁 | 约? |
2.find查找示例
以下列出所有find常用的选项\
1.find名称查找
|
|
2.find大小查找
|
|
3.find类型查找
|
|
4.find时间查找
|
|
5.find用户查找
|
|
6.find权限查找
|
|
2.find动作处理,比如查找到一个文件后,需要对文件进行如何处理, find的默认动作是 -print\
动作 | 含义 |
---|---|
打印查找到的内容(默认) | |
-ls | 以长格式显示的方式打印查找到的内容 |
-delete | 删除查找到的文件(仅能删除空目录) |
-ok | 后面跟自定义 shell 命令(会提示是否操作) |
-exec | 后面跟自定义 shell 命令(标准写法 -exec ;) |
1.find查找后的动作命令示例
|
|
2.使用find命令结合xargs
|
|
3.find逻辑运算符
符号 | 作用 |
---|---|
-a | 与 |
-o | 或 |
-not|! | 非 |
|
|