Linux文件系统阐述及相关命令操作

169 阅读23分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

这一章主要讲Linux的文件系统的相关介绍和命令操作。

Linux文件系统

先来看一下我们的Windows系统下的文件系统是怎么分布的; 假如我们现在有一块硬盘,如下图这么大: 在这里插入图片描述

然后我们就会对我们的磁盘进行划分,如分成一个C盘系统盘和D盘: 在这里插入图片描述 但是我们发现这种方式好不好呢? 好的点就在于我们找文件会非常快,直接通过盘符去找对应的文件就可以了。但是不好的点也是因为盘符,因为各个用户的习惯导致了盘符的分区也不一样(注意分盘不要等分,内行人看了会笑话),这就会导致比如我的代码在我的系统上能跑,但是一拿到别人的系统上跑就不行了,因为别人的系统上可能连盘符都没有。 所以有些公司就觉得,这盘符不能有,所以干脆就不要分盘了,于是就诞生了Linux的无盘符文件系统,Linux的文件系统没有盘符,只有一颗文档目录的树。 树在数据结构中我们都学过,会有一个叫根节点,而Linux文件系统中的根目录就是“/”,然后在这个节点的下面又分布了许多默认的节点。 在这里插入图片描述

从上图可以看到,根目录为“/”,为一级目录,第二层节点即为二级目录。 我们最好不要去随便更改Linux的二级目录,因为它的二级目录都是系统默认的,而且每个名字都有每个名字的含义。我们应该在以后的学习中做到看见文件的名字就知道它是什么意思。 因为Linux其独特的文件结构,所以查找文件的方式也有以下两种: 1、相对路径

以当前路径为基准点,查找其他资源 vi ../etc/sysconfig/network(“..”表示上一层目录)

2、绝对路径

以根目录为基准点,查找其他资源 vi /etc/sysconfig/network-scripts/ifcfg-ens33

日常使用中,只要找到路径即可,但是如果是一些配置文件,尽量写绝对路径。

Linux可以随意的挂载磁盘进行扩容,如以下命令:

mount /dev/disk1/usr/download disk 1T

意思就是给usr目录下的download文件挂载1T的磁盘。

二级目录结构

我们现在可以看一下Linux的二级目录: 输入命令:ll / 在这里插入图片描述 回车后可以看到 在这里插入图片描述 上面就是/根目录下的所有二级目录啦,我们下面来解释一下: /bin

bin是Binary(二进制)的缩写,这个目录存放着最经常使用的命令。

/boot

这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

boot的百度翻译: 在这里插入图片描述

/dev

dev是Device(设备)的缩写,该目录下存放的是Linux 的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的

/etc

这个目录用来存放所有的系统管理所需要的配置文件和子目录

/home

用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录是以用户的账号命名的

/lib

这个目录里存放着系统最基本的动态链接共享库,其作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库。

/media

linux系统会自动识别一些媒体设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下。

/mnt

系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了

/opt

这是给主机额外安装软件所摆放的目录。比如你安装一个oracle数据库则就可以放到这个目录下,默认是空的

/proc

这个目录是一个虚拟的目录,它是系统内存你的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/root

该目录为系统管理员,也称作超级权限者的用户主目录

/run

是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。 如果你的系统上有 /var/run 目录,应该让它指向 run。

/sbin

s就是super user的意思,这里存放的是系统管理员使用的系统管理程序

/srv

该目录存放一些服务启动之后需要提取的数据。

/sys

这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。 sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件 系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建

/tmp

这个目录是用来存放一些临时文件的

/usr

这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的 program files目录。

/usr/bin

系统用户使用的应用程序

/usr/sbin

超级用户使用的比较高级的管理程序和系统守护程序

/usr/src

内核源代码默认的放置目录。

/var

这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

文件夹(目录)命令

cd

作用:改变当前工作目录 mkdir -p a/b/c/d/e/f 会自动创建文件父目录 mkdir -p lucky/{1234}ls 一次可以创建多个子目录

示例: 首先使用之前说过的pwd命令查看当前我们所处的文件位置: 在这里插入图片描述 可以看到我们在/root目录下,这个时候我们要进etc文件,就可以使用cd命令来改变当前所在的目录: 在这里插入图片描述 可以看到我们进入了etc文件夹,再比如我们现在想进opt文件夹了,一样: 在这里插入图片描述 可以看到我们现在已经在opt目录了,回退到上一步的目录呢?不要忘记我们之前用的“..”啊,使用它可以回退到上一步我们所在的目录: 在这里插入图片描述 “../etc”的意思是从上一级目录中查找etc文件,找到之后我们就会在那里了。

ll 和 ls

两个差不太多,都是显示出指定目录下所有的文件 我们试一下ll: 在这里插入图片描述 可以看到使用ll是这种从上往下一条一条展示文件信息的,而ls呢是下面这样的: 在这里插入图片描述 就是不同呈现状态而已,同时用ll可以看到下面红框中的内容: 在这里插入图片描述 在这里插入图片描述

"-"表示的是普通文件 "d"表示的是文件夹 "l"表示的是软连接(就是windows上的快捷方式)

mkdir

mkdir:创建文件目录 在这里插入图片描述 回到/root目录我们可以看到现在这个文件目录下有的文件就是下面这一个: 在这里插入图片描述 现在我们使用mkdir创建一个新的aaa文件目录: 在这里插入图片描述 可以看见现在多了一个新的文件目录。 如果要连续创建有父子关系的文件目录,则不能像下面这样直接创建,比如我们现在要创建a/b/c,意思是在当前目录下创建a文件夹再在a文件瞎创建b文件再在b文件下创建c文件,记住不能像下面这样创建: 在这里插入图片描述 像上面这样会报错。 而应该像下面这样: 在这里插入图片描述 现在我们还可以进去看一下我们创建的这三个文件目录: 在这里插入图片描述 可以看见三层目录都在。 而如果像下面这样写: 在这里插入图片描述 则表示的就是在“/”根目录下创建对应的文件目录。 在这里插入图片描述 我们也可以用以下命令在一个目录中同时创建多个文件夹: 在这里插入图片描述 访问这个当前文件夹: 在这里插入图片描述 可以看见创建了三个以shiren为前缀的文件目录。 如果我们按照下面的命令写,则是在shiren这个文件夹下新建三个文件夹: 在这里插入图片描述 访问则可以看到我们创建的shiren文件下的三个文件夹,分别叫baijuyi,lqz,dufu: 在这里插入图片描述

rmdir

rmdir:删除空文件夹

rmdir: failed to remove ‘a1’: Directory not empty rmdir: failed to remove ‘baidu’: Not a directory

使用rmdir可以安全的删除文件目录。 比如我们现在要删除当前文件目录中的aaa文件: 在这里插入图片描述 现在我们删除它: 在这里插入图片描述 可以看到当前目录中已经没有了aaa文件。 但是当我们使用rmdir删除不为空的文件目录时,就会报错,如我们删除当前文件目录中的a文件,它是不为空的,内部还包含了b/c文件: 在这里插入图片描述 可以看到报错了,而且我们如果用这个命令来删除非文件夹的文件时也会报错: 在这里插入图片描述 所以这里还提供了一种比较强有力的删除方式,rm -rf命令: 在这里插入图片描述 可以看到a文件夹已经被删除了。 注意:

rm -rf *: 这个命令的意思是:删除当前目录下的所有文件. 一般情况下用不到这个命令,而且这个命令很危险,如果一旦执行,会删除当前目录下所有的文件,而且不能够恢复.因此,应避免使用。

文件命令

CP(复制)

cp(copy)的作用是拷贝文件或者文件目录 格式:

cp 源文件 目标目录

比如我们现在查看/opt下的文件目录为: 在这里插入图片描述

此时我们想复制anaconda-ks.cfg文件到/opt目录下,那么我们就可以像下面这样写: 在这里插入图片描述 即cp的左边部分写的是要复制的文件,而右边写的就是要复制到的目标文件目录。 但这只是复制单个的文件,如果是复制多重文件目录的,比如下面的shiren目录中还有其他的文件目录,这个时候我们就要用下面的命令来进行一个级联复制: 在这里插入图片描述 可以看到shiren文件目录包括其中的三个目录全部都被复制到了/opt目录下。 还有一种用法,就是可以复制所有以目标字符串开头的文件,如下面我们想复制所有以shiren字符串开头的文件到/opt文件目录中: 在这里插入图片描述 可以看到所有以shiren开头的文件全部被复制了进来。

mv(剪切)

mv:移动文件或者文件夹(剪切) 格式:

mv a1 /opt mv abc /opt

也可以修改文件名称

mv a abcd

比如我们现在先查看我们现在所在的/root目录下的文件: 在这里插入图片描述

然后我们清空/opt文件下的目录: 在这里插入图片描述 现在我们就可以通过mv命令剪切一个文件到我们的/opt里面,比如我们现在想剪切/root目录下的anaconda-ks.cfg到/opt目录中去: 在这里插入图片描述 现在可以在opt中看到这个文件了: 在这里插入图片描述 并且源头文件/root中也没有了这个anaconda文件: 在这里插入图片描述 同样地,mv命令也可以使用和cp相同的*的作用: 在这里插入图片描述 即实现将所有以shiren开头的文件全部剪切到另一个文件中。 同时mv也可以进行文件名的更改,比如现在我们想将下面的shirenbaijuyi文件给改名成shirenwhy: 在这里插入图片描述 那么我们可以像下面这样命令: 在这里插入图片描述 可以看到shirenbaijuyi已经被更改了: 在这里插入图片描述 这就是mv命令的两个作用,剪切和重命名。

rm (删除)

rm:删除文件

rm install.log rm -f install.log

删除文件夹

rm -r abcd rm -rf abcd 谨慎使用,从删库到跑路

比如我们现在想删除xshell.zip这个文件,那么我们就可以使用rm来删除,但是在删除之前,系统会询问你是否确定要删除该文件,填y则删除,填n则不会删除: 在这里插入图片描述 而用rm -f则就是直接删除,也就是不会弹出要你确认的提醒,直接就删除了,比如我们想删除anaconda文件: 在这里插入图片描述 但是这个命令对于删除文件目录就不好使,会报错,如果想用其删除文件目录的话可以使用rm -r来删除,但它依然会弹出让你确认删除的消息,如果想直接删除,则可以使用rm -rf: 在这里插入图片描述

touch 和 stat(创建文件以及查看文件)

touch:

如果没有就创建一个文件 如果该文件已经存在,修改文件的三个时间,将三个时间改为当前时间

stat:查看文件的状态

Inode 当前文件在文件系统的唯一标识,类似于ID

时间

access 访问时间 modify 修改文件内容时间 change 修改文件元数据信息时间 - -文件大小 ,文件所有者 ,文件权限 - - 对于文件的描述信息

比如我们现在要创建一个文件,叫jingyesi,我们就可以用这个命令: 在这里插入图片描述 可以看见jingyesi的前面是“-”,说明这是个文件而非文件夹。 然后一般这个命令可以和stat命令结合起来用,stat表示这个文件的信息、属性,如我们现在查看一下jingyesi这个文件的属性: 在这里插入图片描述 展示的信息中: File:文件名字 Size:文件大小 Blocks:文件的块儿 IO Block:一般分配4k字节,即4096 Device:在哪个硬盘和驱动下面 Inode:是一个文件的绝对定位

什么意思呢,就是比如我们这个文件的名字叫jingyesi,那很有可能另外一个文件也叫jingyesi,那么Inode就是标志它俩身份的唯一凭证。

Links:硬连接的数量 Access:改文件的权限 Uid:所属用户 Gid:所属组 然后下面还有三个时间: Access:表示谁什么时候访问过我 Modify:文件内容发生变化时则这个Modify会发生改变 Change:表示的是当这个文件的权限、元数据信息发生改变时则这个Change时间会发生改变

ln(创建快捷方式)

ln:创建文件的链接,其实就是windows上的快捷方式 创建文件的链接 软(符号)链接

ln -s lucky01 sl 注意:软连接和原始文件不是同一个文件 lucky1 131085 sl 131074 rm -rf lucky1

硬链接

ln lucky02 hl 硬链接和原始文件使用文件系统中的同一个文件 如果你害怕一个文件被别人误删,你可以使用硬链接保护这个文件 软硬链接在链接文件的时候,推荐使用文件的绝对路径,否则有可能会出现问题

比如我们现在创建一个文件,叫qiangjinjiu: 在这里插入图片描述 然后我们改变一下里面的内容(vi命令进入文件,i命令进行信息插入,写完信息之后按esc输入:wq保存退出): 在这里插入图片描述

我们插入了一句tian sheng wo cai bi you yong,使用cat查看命令可以查看里面的信息: 在这里插入图片描述 现在我们给这个qiangjinjiu文件写一个软链接,链接名字就叫slink,-s就是soft的意思: 在这里插入图片描述

然后ll检查当前文件目录下可以看见出现了一个链接文件: 在这里插入图片描述 然后cat查看一下这个链接文件,我们可以看到一样显示的是tian sheng wo cai bi you yong: 在这里插入图片描述 这软链接就相当于是快捷方式,虽然我们的文件并不是这个slink,但是我们打开slink依然可以访问到qiangjinjiu这个真实文件的内容。 硬链接的创建方式差不多,就是没有那个-s,比如我们现在要创建一个叫hlink的关于qiangjinjiu的硬链接如下: 在这里插入图片描述 查看一下: 在这里插入图片描述 可以看到并不是像软链接那样那么直观的能够看到其是一个链接。 现在我们再在qiangjinjiu里面写一个信息叫qian jin san jin huan fu lai: 在这里插入图片描述 可以看见已经写入: 在这里插入图片描述 那么现在我们删除qiangjinjiu,则软链接就将爆红失效: 在这里插入图片描述 而硬链接不会,同时现在我们访问slink会发现已经找不到文件了: 在这里插入图片描述 而访问hlink则可以: 在这里插入图片描述 现在我们继续写一个关于jingyesi文件的硬链接叫hjys和一个软链接叫sjys,查看它们的文件详情,我们发现,硬链接和源文件其实Inode是一样的,意味着它们是一个文件,而软链接的Inode和源文件是不一样,它们并非一个文件: 在这里插入图片描述

cat、tac以及more 、less、head、tail(读取文件信息)

cat

将整个文档加载到内存中,并进行一次性显示 除非后面使用管道,传递数据

tac

将整个文档加载到内存中,并进行一次性按行逆序显示

more less

分页查看文档内容 快捷键 回车 下一行 空格 下一页 b 回退 q 退出

我们也可以演示一下: cat就不用说了,前面用过,可以看文件的内容。 tac命令就是倒着cat查看的顺序显示的,也不用咋解释叭。 但是如果查看的文件内容过大,tac和cat都会把整个文件给我们展示出来,这样就会比较占用内存。所以我们一般会分页来查看这些内容,这个命令是more+文件名: 在这里插入图片描述 在这里插入图片描述 当我们敲回车键的时候,它就会一行一行的向我们展示这个文件的内容。我们还可以按b键进行回退,按空格键则是一页一页的给我们翻,当我们不知道某些命令的时候,可以按h,它会给我们相关的提示信息,最后我们要退出的话按q就可以了。 最后less命令和more是差不多的,只不过多了一些命令。

head:从文章开始读取N行

默认如果超过10行读取10行,否则读取现在行数 如:head -5 profile 则意思是读取profile文件的前5行信息

tail:从文章末尾读取N行

head -3 profile | tail -1 利用管道只读取第N行 管道的作用就相当于把前面的结果以参数的方式传递给后面的命令 比如上面的head -3 profile | tail -1命令意思就是: 我读取的是从头开始读取的三行数据中的倒数第一行

读取新增数据

ping www.baidu.com >>baidu tail -F baidu

tail -f 和tail -F 的区别

如果f:

它会监听指定inode的文件数据变化,但是当文件被删除后 即使创新创建,inode也会发生变化,于是监听失败

如果F

他会监听指定名字的文件,如果文件被删除后,重新创建 他会重新监听新文件的数据变化,监听不受影响

find(文件查找)

find

查找指定的文件 find 要查找的范围 -name 名字 比如:find /etc -name profile 这句命令的意思就是搜索在整个/etc目录下的所有名字叫profile的文件

比如我们在/根目录下全局搜索文件名叫profile的: 在这里插入图片描述

可以看到在/opt/sjys目录下。

vi/vim编辑器

不是专业个干这个的,我们就是了解了解就好啦。 在这里插入图片描述 打开文件: 正常打开

vi profile

打开文件,并将光标置于第8行

vi +8 profile

打开最后一行

vi + profile 按n查找下一个,按N查找上一个

打开指定搜索单词的位置

vi +/if profile

其中vi命令我们之前已经使用过,就是正常打开文件的样子。 但是现在我们如果要打开一个文件的第八行,则可以像下面这样: 在这里插入图片描述 可以看见下面红色圈起来的位置有个绿色光标,这就意味着这是这个文件的第八行: 在这里插入图片描述 如下命令可以让我们直接定位到该文件信息的最后一行: 在这里插入图片描述 在这里插入图片描述 打开指定搜索单词的位置和上面的使用方法差不多,就不写了。

vi/vim的三种模式

编辑模式

编辑模式中,每一个按键都有其他的功能

输入模式

每一个按键按下什么,就像文本中数据输入什么

末行(命令行)模式

我们可以直接在VI中输入特定的命令

在这里插入图片描述 编辑模式-->输入模式

i在当前位置插入数据 a追加数据 o在当前行后面开启一个新的输入行 I 行首 A 行尾 O 上一行

输入模式-->编辑模式

按下ESC

编辑模式-->末行模式

按下:

末行模式-->编辑模式

按下ESC

编辑模式(常用命令)

这些命令就是键盘上的键,敲了就有对应效果,我就不一一写示例了。 G最后一行 gg 跳转到第一行 数字gg 跳转到第数字行 w 下个单词 数字w dw 删除一个单词 3dw 删除三个单词 dd 删除一行 3dd 删除三行 u回退到前面的操作 .回退u执行的操作 yw 复制一个单词 3yw 复制三个单词 yy 复制一行 3yy复制三行 p粘贴 6p 粘贴6次 x 剪切 3x 剪切三个字符 r 替换,然后输入一个字符替换 3r 替换三个 hjkl 方向键 ZZ 保存并退出 ctrl+s 锁屏 ctrl+q 解锁

输入模式

没啥讲的,按啥是啥

命令行模式(末行模式)

set nu 设置行号 set nonu 取消行号 w 保存 q 退出 wq 保存并退出 q!强制退出,但是不保存 如果上次异常退出会保留同名隐藏文件,每次启动会给与提示

如果确定当前文件没问题,请删除隐藏文件

/pattern

搜索指定的字符串 /usr n向下查找 N逆向查找

s/p1/p2/g

替换字符串 g 替换当前行所有 否则只替换当前行第一个 ----s/abc/lucky/g 查找指定行 ----3,8s/abc/lucky/g 替换全文 ----g/abc/s//lucky/g

关于vi编辑器还有一点要提醒,直接使用vim是没有用的: 在这里插入图片描述 我们要先安装: 在这里插入图片描述 至于软件的安装方式后面会讲。 然后会有一个可能会经常遇到的问题,就是比如我们要修改某个文件,但是我们改完之后改崩了,结果退出都退出不了,然后我们一般都会直接关机重启。但是重启之后再进入之前的页面则会出现下面的页面: 在这里插入图片描述 那上面有个".profile.swp"的交换文件,它就是Linux会给我们保存一个我们没有修改过的副本,现在我们就有两个选择,第一种是继续使用原来的文件,第二种的话就是进行一个替换。那我们怎么办呢,最好就是直接敲回车,文件就变成原来我们没有修改过的文件了。但是这样不方便,以后每次访问这个文件时都会让你选择一次敲一次回车,解决办法也很简单,删除掉那个副本: 在这里插入图片描述 把这个隐藏文件删了就行。

计算机(操作系统)之间的数据传输

1、 Window系统---Linux系统 两种方式: lrzsz

需要手动安装 -----yum install lrzsz -y rz -----将文件从window上传到Linux sz 文件 -----将文件从Linux传输到Window

xftp

较为通用的文件传输方式

比如我们现在要传送一个文件过去: 在这里插入图片描述 用常用的xftp方式就很快,我们只要在xshell上点击下图中中的按钮: 在这里插入图片描述 然后就会弹出一个框框如下,左边是我们的windows,右边则是我们的linux: 在这里插入图片描述 在右边的linux系统中我们可以选择从windows传过来的文件路径,比如我们保存在/root下面: 在这里插入图片描述 然后在左边的windows操作系统中选择我们要传输的文件双击点击传输即可,很快的: 在这里插入图片描述 然后我们就可以在linux中查看已经传输过来的文件了: 在这里插入图片描述 查看: 在这里插入图片描述 可以看见已经成功。 那linux传输文件到windows也是同理,就不再演示了。 然后另外一种方式如下,我们需要先安装一个东西叫lrzsz: 在这里插入图片描述 安装完如下: 在这里插入图片描述 安装完成之后,rz命令就是上传的意思,rz回车之后就会弹出一个windows上面的文件系统让你选择要传到linux上面的文件: 在这里插入图片描述 比如我们上传这个。点击要上传的文件双击就能完成上传,不要点击那个“打开”朋友们,会失败的: 在这里插入图片描述 然后就可以看到当前的/root目录下以及有了这个文件: 在这里插入图片描述 sz就是下载了,比如我们从linux上下载hlink文件到windows上: 在这里插入图片描述 sz后面跟上文件名之后,它会让你选择要传入到哪个windows的文件目录下,这里我们选择桌面,传输完成之后可以看到已经可以在桌面上看到了: 在这里插入图片描述

2、Linux系统---Linux系统 格式:

scp 源数据地址(source) 目标数据地址(target) 比如: scp apache-tomcat-7.0.61.tar.gz root@192.168.31.44:/opt scp root@192.168.31.44:/opt/apache-tomcat-7.0.61.tar.gz ./ scp -r apache-tomcat-7.0.61 root@192.168.31.44:/opt

应该比较简单,就不演示了(因为要再开一台虚拟机,很麻烦)。

df分区du大小

查看分区信息

df -h

指定文件目录大小

du -h --max-depth=1 apache-tomcat-7.0.61

swap

一个特殊分区,以硬盘代替内存 当内存使用满的时候,可以将一部分数据写出到swap分区

文件压缩与解压缩

1、tar类型压缩包 主要针对的文件是 lucky.tar.gz 解压缩

tar -zx(解压)v(过程)f(文件) lucky.tar.gz(需要被解压缩的文件名)

压缩

tar -zc(压缩)f(文件) tomcat.tar.gz(压缩后的名字) apache-tomcat-7.0.61(源文件) tar -zxf tomcat.tar.gz -C /opt/ ------ -C 指定解压缩的文件目录

2、zip和unzip 要使用这两个命令要先安装才行:

yum install zip unzip -y

压缩

zip -r tomcat.zip(压缩后的名字) apache-tomcat-7.0.61(需要被打包的文件名字)

解压缩

unzip tomcat.zip(需要被解压缩的文件名)

到这差不多Linux的文件系统就解析完啦!