文件系统基础知识

文件系统的最顶层是由根目录开始的,系统使用“/”来表示根目录,在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件。如此反复就可以构成一个庞大的文件系统。

为了避免诸多Linux发行版使用各部相同的文件系统结构,Linux基金会发布了FHS标准,多数Linux发行版系统都遵循这一标准。

**说明:**FHS(Filesystem Hierarchy Standard),文件系统层次化标准,该标准规定了 Linux 系统中所有一级目录以及部分二级目录(/usr 和 /var)的用途。发布此标准的主要目的就是为了让用户清楚地了解每个目录应该存放什么类型的文件。

注意,目录名或文件名都是区分大小写的。比如Abc和abc是不同的目录或文件。完整的目录或文件路径是由一连串的目录名所组成的,其中每一个目录由“/”来分隔。如bin的完整路径是 /home/bin。

在文件系统中,有两个比较特殊的目录,一个是用户所在的工作目录,即当前目录,可用一个点“.”表示;另一个是当前目录的上一层目录,也叫父目录,用两个点“..”表示。

如果一个目录或文件名是以一个点开始(比如.local),就表示这个目录或文件是一个隐藏目录或文件。即以默认方式査找时,不显示该目录或文件。

文件系统树形图

不同的Linux发行版可能文件系统树形图稍有不同,但大同小异,如下图所示。

img

/usr:系统级目录。可理解为C:/Windows/,/usr/lib: 可理解为 C:/Windows/System32。

/usr/local:用户级的程序目录。可理解为 C:/Progrem Files/。用户自己编译的软件默认安装到这里。

/opt:用户级的程序目录,可理解为 D:/Software,opt用于放置第三方大型软件,当不需要时,直接 rm-rf即可。当硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。

源码:

/usr/src:系统级源码目录。

/usr/local/src:用户级源码目录。

常用目录及用途:

/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。

/etc 存放系统管理和配置文件

/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录

/usr/bin 众多的应用程序

/usr/sbin 超级用户的一些管理程序

/usr/doc linux文档

/usr/include linux下开发和编译应用程序所需要的头文件

/usr/lib 常用的动态链接库和软件包的配置文件

/usr/man 帮助文档

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里

/usr/local/bin 本地增加的命令

/usr/local/lib 本地增加的库

/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。

/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/root 超级用户(系统管理员)的主目录(特权阶级o)

/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。

/dev 用于存放设备文件。

/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。

/boot 存放用于系统引导时使用的各种文件

/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。

/tmp 用于存放各种临时文件,是公用的临时文件存储点。

/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

一级目录详细说明

一级目录 功能(作用)
/bin/ 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行
/boot/ 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/ 设备文件保存位置
/etc/ 配置文件保存位置。系统内所有采用默认安装方式的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等
/home/ 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。
/lib/ 系统调用的函数库保存位置
/media/ 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/mnt/ 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
/misc/ 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。
/opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。
/root/ root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下
/sbin/ 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看
/srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/lost+found/ 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录
/proc/ 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/net 是保存网络协议信息的
/sys/ 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

二级目录说明

还有一些比较重要的二级目录我们也是需要去了解的,具体的说明如下:

/usr子目录 功能(作用)
/usr/bin/ 存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/ 存放根文件系统不必要的系统管理命令,如多数服务程序,只有 root 可以使用。
/usr/lib/ 应用程序调用的函数库保存位置
/usr/XllR6/ 图形界面系统保存位置
/usr/local/ 手工安装的软件保存位置。我们一般建议源码包软件安装在这个位置
/usr/share/ 应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/ 源码包保存位置。我们手工下载的源码包和内核源码包都可以保存到这里。
/usr/include C/C++ 等编程语言头文件的放置目录
/var子目录 功能(作用)
/var/lib/ 程序运行中需要调用或改变的数据保存位置。如 MySQL 的数据库保存在 /var/lib/mysql/ 目录中
/var/log/ 登陆文件放置的目录,其中所包含比较重要的文件如 /var/log/messages, /var/log/wtmp 等。
/var/run/ 一些服务和程序运行后,它们的 PID(进程 ID)保存位置
/var/spool/ 里面主要都是一些临时存放,随时会被用户所调用的数据,例如 /var/spool/mail/ 存放新收到的邮件,/var/spool/cron/ 存放系统定时任务。
/var/www/ RPM 包安装的 Apache 的网页主目录
/var/nis和/var/yp NIS 服务机制所使用的目录,nis 主要记录所有网络中每一个 client 的连接信息;yp 是 linux 的 nis 服务的日志文件存放的目录
/var/tmp 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再行删除

番外篇

你可以用以下命令来查看你的Linux系统的文件系统树形图。

1
tree

常见:

**/:**是所有文件的根目录;
**/bin:**存放二进制可执行命令目录;
**/home:**用户主目录的基点目录,默认情况每个用户主目录都设在该目录下,如默认:用户user01的主目录是/home/user01,可用~user01表示
**/lib:**存放标准程序设计库目录,又叫动态链接共享库目录,目录中文件类似windows里的后缀名为dll的文件;
**/etc:**存放系统管理和配置文件目录;
**/dev:**存放设备特殊文件目录,如声卡文件,磁盘文件等;
**/usr:**最庞大的目录,存放应用程序和文件目录;
**/proc:**虚拟目录,是系统内存的映射,可直接访问这个目录来获取系统信息;
**/root:**系统管理员的主目录(特权阶级)
**/var:**存放系统产生的经常变化文件的目录,例如打印机、邮件等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等;
**/tmp:**存放公用临时文件目录。

补充:

/etc/rc.d 启动的配置文件和脚本
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,用于存放系统非正常关机而留下未保存的文件

/usr其中包含:
/usr/X11R6 存放X window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库

二、Linux文件系统介绍

文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。

linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。

一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。

1. 索引介绍:

Llinux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。

索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。

一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。

系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。

linux文件系统将文件索引节点号和文件名同时保存在目录中。

所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。

对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。

因此,在磁盘上的同一个文件可以通过不同的路径去访问它。

2. Linux链接介绍

可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。

1. 硬链接:

原文件名和链接文件名都指向相同的物理地址。

目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)

文件在磁盘中只有一个拷贝,节省硬盘空间;

由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。

2. 软连接(符号链接):

符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。

可以删除原有的文件而保存连接文件,没有防止误删除功能。

三、linux文件系统操作

1. 文件的基本概念

在linux中,一切皆文件。文件是由创建者定义的,具有文件名的一组相关元素的集合,文件可以是文本文档、图片、程序等。

Linux系统下文件名长度根据不同类型文件系统有所不同。

文件取名必须遵守以下规则:

  1. 除“/”外,所有字符都可使用;
  2. 转义字符最好不用,如“ ? ”,” * “(星号),” “(空格),“ $ ”,“ & ”等;
  3. 避免使用“ + ”,“ - ”或“ . ”作为普通文件名的第一个字符(在Linux下以“ . ”开头的文件都是隐藏文件);
  4. Linux系统的文件名大小写敏感。

2. Linux系统下的通配符(20个)

*** :**通配符,代表任意字符(0到多个)
**?:**通配符,代表一个字符
**# :**注释
**\ :**转义符号,将特殊字符或通配符还原成一般符号
**| :**分割两个管线命令的界定

**; :**连续性命令的界定
**~ :**用户的根目录
**$ :**变量前需要加的变量值
**! :**逻辑运算中的“非”
**/ :**路径分割符号

**> :**输出导向,分别为“取代”和“累加”
**>>:**输出导向,分别为“取代”和“累加”
**’ :**不具有变量置换功能
**” :**具有变量置换功能
** :**quote符号,两个中间为可以先执行的指令

**() :**中间为子shell的起始与结束
**[] :**中间为字符组合
**{} :**中间为命令区块组合
**&&:**当该符号前一个指令执行成功时,执行后一个指令
**|| :**当该符号前一个指令执行失败时,执行后一个指令

3. Linux系统下的常用快捷操作(七个)

**Ctrl+C:**终止当前命令
**Ctrl+D:**输入结束
**Ctrl+M:**相当于Enter
**Ctrl+S:**暂停屏幕的输出
**Ctrl+Q:**恢复屏幕的输出
**Ctrl+U:**在提示符下,将整行命令删除
**Ctrl+Z:**暂停当前命令

四、linux 文件操作详解

  1. 显示文件内容(6个):cat、more、less、head、tail
  2. 搜索、排序、去重(三个):grep、sort、uniq
  3. 比较(两个):comm、diff
  4. 复制、删除、移动(三个):cp、rm、mv
  5. 统计(一个):wc
  6. 查找(一个):find
  7. 压缩解压缩(三个):bzip2、gzip、tar

五、linux 文件操作命令

1. 显示文件命令

1. cat命令

**格式:**cat [参数] …[文件]…
**说明:**把多个文件连接后输出到屏幕显示,若加“>文件名”则输出到另一个文件中。

常用参数:

**-b:**从1开始对所有非空输出行进行编号

**-n:**从1开始对所有输出行编号

**-s:**将连续两行以上的空白行合并成一行空白行

2. more命令

**格式:**more [参数] [文件]
**说明:**该命令显示文本文件的内容,一次显示一屏,满屏后停下来,可按如下键继续:
**1. Space键:**默认显示文本的下一屏内容
**2. Enter键:**默认显示文本的下一行内容
**3. d键或CTRL+D:**向下显示文本半屏,默认为11行
**4. b键或CTRL+B:**默认显示文本的上一屏内容
**5. q或INTERRUPT键:**退出more命令

常用参数:
**-num:**指定一个整数,表示一屏显示多少行
**-d:**在每屏底部显示提示信息,包括当前显示的百分比,按键提示等
**-c或-p:**不滚屏,在显示下一屏之前先清屏
**+num:**从行号num开始显示
**+/pattern:**定义一字符串,在文件中查找该字符串,从该字符串后显示(如要在a.txt中查找字符串“abc”并从该字符串处显示,则命令为:more +/abc a.txt)

3. less命令

**格式:**less [参数] [文件]
**说明:**与more命令相似,分屏显示文件内容,less命令允许用户向前或向后浏览文件,按q键退出。

常用参数:
**-i:**搜索时忽略大小写,除非搜索串中包含大写字母
**-I:**搜索时忽略大小写
**-m:**显示读取文件的百分比
**-M:**显示读取文件的百分比、行号及总行数
**-N:**在每行前输出行号
**-p pattern:**定义一字符串,在文件中查找该字符串,从该字符串后开始显示(如要在a.txt中查找字符串“abc”并从该字符串处显示,则命令为:less -p abc a.txt)

4. head命令

**格式:**head [参数] [文件]
**说明:**用于查看一个文本文件的开头部分,行数由参数值决定,默认是10

常用参数:
**-c:**显示文件前面num个字节(如显示a.txt前面5个字节内容,命令为:head -c5 a.txt)
**-n:**显示文件前面num行,不指定此参数显示前10行(如显示a.txt前面5行内容,命令为:head -n5 a.txt)

5. tail命令

**格式:**tail [参数] [文件]
**说明:**用于查看一文本文件末尾若干行,行数由参数值决定,默认为10。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。

常用参数:
**-c:**显示文件最后面num个字节
如:显示a.txt后5个字节内容,命令为:tail -c5 a.txt
**-n:**显示文件最后面的num行,不指定此参数显示10行
如显示a.txt后5行内容,命令为:tail -n5 a.txt

2. 搜索、排序及去掉重复行命令

1. grep命令

**格式:**grep [参数] 查找模式 [文件]
**说明:**grep家族包括grep、egrep和fgrep。egrep是grep的扩展,可使用扩展的字符串模式进行搜索,fgrep则是把所有字母看作单词,不识别正则表达式。如果没有指定文件名,grep命令会搜索标准输入

常用参数:
**-b:**在显示符合匹配字符串行前,标识该行第一个字符的位编号
**-c:**计算符合匹配字符串的行数
**-E:**将查找模式解释成扩展的正则表达式,相当于egrep
**-F:**将查找模式解释称单纯的字符串,相当于fgrep
**-i:**忽略字符大小写
**-n:**在现实包含匹配字符串的行之前,标示处该行的行号
**-v:**反转查找,显示不包含匹配字符串的文本行
**-V:**显示版本信息
**-x:**只显示全行都严格匹配的行

2. sort命令

**格式:**sort [参数] …[文件]…
**说明:**sort命令对指定文件中所有的行排序,将结果显示在标准输出上,如不指定输入文件或使用“-”,表示排序内容来自标准输入
缺省情况下以行为关键字按ASCII字符顺序进行排序

常用参数:
**-m:**若给定文件已排好序,合并文件
**-c:**检查给定文件是否排序,未排序打印出错信息,以状态值1退出
**-u:**对排序前后相同的行只留其中一行
**-o:**文件名:将排序输出写到输出文件中而不是标准输出
改变缺省排序规则的选项主要有:
**-d:**按字典顺序排序
**-f:**忽略字母大小写
**-r:**按逆序输出排序结果(默认排序输出是按升序的)
**+pos1 - pos2:**指定一个或几个字段作为排序关键字,字段位置从pos1开始到pos2为止(包括pos1,不包括pos2)。
如不指定pos2,则关键字为从pos1到行尾,字段和字符的位置从0开始

3. uniq命令

**格式:**uniq [参数]… [输入文件[输出文件]]
**说明:**检查及删除文本文件中重复出现的行

常用参数:
**-c:**显示输出中,在每行行首加上本行在文件中出现的次数
**-d:**只显示文件中的各重复行
**-u:**只显示文件中不重复的各行

3. 比较文件内容命令

1. comm命令

**格式:**comm [选项]… 文件1 文件2
**说明:**comm命令对两个已经排好序的文件进行比较,comm从文件1和文件2中读取正文行进行比较,生成3行输出:在两个文件中都出现的行,仅在文件1中出现的行,仅在文件2中出现的行

常用参数:
-123:选项1,2和3分别表示不显示comm输出的第一列、第二列和第三列

2. diff命令

**格式:**diff [参数]… 文件列表
**说明:**diff 命令比较文本文件,并找出它们的不同

常用参数:
-b:忽略空格造成的不同
-B:忽略空行造成的不同
-i:忽略大小写的不同
-r:当比较的文件都是目录时,递归比较子目录中的文件

4. 复制、删除和移动文件的命令

1. cp命令

**格式:**cp [选项] 源文件或目录 目标文件或目录
**说明:**cp命令完成文件的复制。
如果源是普通文件,该命令把源文件复制成指定的目标文件或复制到指定的目标目录中;
如果源是目录,目标是一已经存在的目录,该命令把源目录下的所有文件和子目录都复制到目标目录中;
如果源是目录,目标不是一已存在的目录,命令出现错误信息。

常用参数:
**-a:**等同于-dpR
**-d:**复制符号链接(即快捷方式文件)时,把目标文件或目录也建立为符号链接,并指向与源文件或目录链接的原始文件或目录
**-f:**强行复制文件或目录
**-i:**覆盖目标文件前需要确认
**-n:**不覆盖已存在的目标文件
**-p:**复制源文件或目录内容的同时也复制文件属性
**-R或-r:**递归复制目录,将源目录下所有文件及子目录都复制到目标位置

2. rm命令

**格式:**rm [参数] …文件或目录…
**说明:**rm命令可以删除文件或目录,删除目录必须要加“-r”选项

常用参数:

**-f:**强制删除文件或目录
**-i:**删除文件或目录前提示要用户确认
**-r或-R:**递归删除目录及其下属各级子目录和相应的文件

3. mv命令

**格式:**mv [参数] 源文件或目录 目标文件或目录
**说明:**mv命令可移动文件或目录;更改文件或目录的名称

常用参数:
**-i:**覆盖文件前需要确认
**-f:**若目标文件或目录已存在,直接覆盖
**-n:**不覆盖已存在的文件
-u: 移动或更改文件名时,若目标文件已存在,且文件日期比源文件新,则不覆盖目标文件

5. 文件内容统计命令

wc命令

**格式:**wc [选项] …[文件]…
**说明:**wc命令统计给定文件中的字节数、字数、行数

常用选项:
**-c或–bytes:**统计字节数
**-m或–chars:**统计字符数
**-l或–lines:**统计行数
**-w或–words:**统计字数

6. 查找文件和目录命令

1. find命令

**格式:**find [路径名…] [表达式]
**说明:**find命令用于查找符合条件的文件和目录,路径名是用空各隔开的要搜索文件的目录名清单,表达式包含要寻找的文件的匹配规范或说明。
表达式是从左向右求值的,只要表达式中的测试结果为真,则进行下一个测试

常用表达式:(24个)
**-amin n:**查找系统中最后n分钟曾被访问过的文件或目录
**-anewer<参考文件或目录>:**查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录
**-atime n:**查找系统中最后n24小时被访问过的文件或目录
**-cmin n:**找系统中最后n分钟被更改的文件或目录
-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录

**-ctime n:**查找系统中最后n24小时被改变状态的文件
**-depth:**从指定目录下最深层的子目录开始查找
**-daystart:**从本日开始计算时间
**-exec<执行指令>:**假设find指令的回传值为True,就执行该指令
**-fstype<文件系统类型>:**只寻找该文件系统类型下的文件或目录

**-gid<群组识别码>:**查找符合指定群组识别码的文件或目录
**-group<群组名称>:**查找符合指定之群组名称的文件或目录
**-inum<inode 编号>:**查找符合指定的inode编号的文件或目录
**-mmin n:**查找在n分钟内曾被更改过的文件或目录
**-mtime n:**查找在n天内曾被更改过的文件或目录

**-name<范本样式>:**指定字符串作为寻找文件或目录的范本样式
**-path<范本样式>:**指定字符串作为寻找目录的范本样式
**-perm<权限数值>:**查找符合指定的权限数值的文件或目录
**-print:**假设find指令的回传值为True,就将文件或目录名称列出到标准输出,格式为每列一个名称。
**-prune:**不寻找字符串作为寻找文件或目录的范本样式

**-size<文件大小>:**查找符合指定的文件大小的文件
**-type<文件类型>:**只寻找符合指定的文件类型的文件(b-块设备文件;d-目录;c-字符设备文件;p-管道文件;l-符号链接文件;f-普通文件)
**-uid<用户识别码>:**查找符合指定的用户识别码的文件或目录
**-user<拥有者名称>:**查找符合指定的拥有者名称的文件或目录

7. 文件的压缩和备份

1. bzip2命令

**格式:**bzip2 [选项] [要压缩的文件]
说明:.bz2文件的压缩程序,并删除原始的文件

**常用选项:
**-c:将压缩或解压缩的结果送到标准输出
-d:执行解压缩
-f:压缩或解压缩时,若输出文件与现有文件同名,覆盖现有文件
-k:bzip2在压缩或解压缩后,保留原始文件

2. gzip命令

**格式:**gzip [选项] [文件…]
**说明:**gzip压缩会产生后缀为“.gz”的压缩文件,并删除原始文件

**常用选项:
**-c:压缩后文件输出到标准输出设备,不改变原始文件
-d:解开压缩文件
-f:强行压缩文件
-n:压缩文件时,不保存原来的文件名称及时间戳记
-N:压缩文件时,保存原来的文件名称及时间戳记
-r:递归处理,将指定目录下的所有文件及子目录一并处理

3. tar(tape archive)命令

**格式:**tar [选项…] [文件或目录]…
**说明:**tar是用来建立、还原文件的工具程序,它可以加入、解开备份文件内的文件

**常用选项:
-A:**新增tar文件到已存在的备份文件
**-c:**建立新的备份文件
**-f<备份文件>:**列出备份文件的内容
**-v:**显示指令执行过程
**-x:**从备份文件中还原文件
**–delete:**从备份文件中删除指定的文件

**例如:
**1. 将当前目录下的文件1.txt、2.txt、3.txt备份到文件123.tar中,并显示备份指令执行过程
**命令为:**tar -cvf 123.tar 1.txt 2.txt 3.txt
用命令 ls -l 查看执行结果如,可看到生成了备份文件123.tar

  1. 将123.tar备份文件进行还原,先删除1.txt、2.txt、3.txt

然后使用命令tar -xvf 123.tar进行还原
用ls -l的命令查看结果,123.tar被还原成了1.txt、2.txt、3.txt

五、linux 目录操作详解

  1. 切换工作目录和显示当前目录(3个):cd、pwd、ls
  2. 创建和新建目录(2个):mkdir、rmdir
  3. 改变文件或目录存取权限命令(1个):权限概念、文件长格式解读、chmod
  4. 改变用户组和文件组(2个):chgrp、chown
  5. 链接文件(1个):ln

一、目录操作命令

1. 切换工作目录和显示目录内容的命令

1. cd命令

**格式:**cd [目的目录]
**说明:**切换目录至目的目录,前提是用户必须拥有进入目的目录的权限。
其中目的目录可为绝对路径或相对路径,若目录名称省略,则切换至使用者的主目录

2. pwd命令

**格式:**pwd
**说明:**pwd命令不带任何选项或参数
Linux系统用pwd命令来查看“当前所在目录”的完整路径

3. ls命令

**格式:**ls [参数]… [文件或目录]…
**说明:**ls命令可列出目录的内容,包括文件和子目录的名称

常用参数:

**-a:**列出目录下的所有文件和目录,包括以“.”开头的隐藏文件
**-A:**列出除了“.”(当前目录)及“…”(当前目录的上级目录外的任何文件和目录)
-b:把文件名中不可输出的字符用反斜杠加字符编号的形式列出
-c:输出文件的最后更改时间,并根据这个时间排序
-C:分成多列显示文件和目录
-F:加上文件类型的指示符号:
***** 表示可执行的普通文件;
/
表示目录;
@
表示符号链接;
|
表示管道文件;
=
表示套接字
**-d:**将目录像文件一样显示,而不是显示其下的文件
**-l:**列出文件详细信息

文件详细信息解读:

详细信息分成7个字段列表,具体含义如下所示:
R-rw-r–r– 1 root root 34942 Jan 19 2018 bootstrap.jar
文件类型 文件权限 链接数 所属用户 所属组 文件大小 最后修改日期 文件名
当前用户对文件权限:可以读/可以写/不能执行
当前组的其他用户对当前文件的操作权限:可以读/不能写/不能执行
其他用户对当前文件权限:可以读/不能写/不能执行

2. 创建和删除目录命令

2. mkdir命令

**格式:**mkdir [参数]… 目录名…
**说明:**该命令创建由目录名命名的目录,同时设置该目录的权限。要求创建目录的用户在当前目录具有写权限,并且目录名不能是当前目录中已有的目录或文件名称

常用参数:
-m:对新建目录设置存取权限
-p:若所建目录的上层目录不存在,会一并建立

2. rmdir命令

**格式:**rmdir [选项]… 目录名…
**说明:**该命令从一个目录中删除一个或多个目录。
删除目录时,必须对该目录的父目录具有写权限,目录被删除前应该是空目录

常用选项:
-p:删除指定目录后,若该目录的上层目录已变成空目录,则其一并删除

3. 改变文件或目录存取权限命令

**1. 补充:**Linux系统中的用户和用户组以及存取权限的概念。

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号身份进入系统。
Linux内部用UID标识各用户。
用户组(group)就是具有相同特征的用户的集合体,Linux系统中每个用户都属于一个用户组,系统能对一个用户组中所有用户进行集中管理。
在Linux内部用户组用GID标识。
Linux系统规定4中不同类型用户,分别是文件主、同组用户、其他用户、超级用户。
Linux规定了3种存取权限:读(r)、写(w)、执行(x)。
用ls -l命令可以显示文件或目录的详细信息。

2. chmod命令

**格式:**chmod [对象] [操作] [权限] 文件或目录名…
**说明:**用于改变文件或目录的访问权限。
**对象:**u(表示文件所有者)、g(表示同组用户)、o(表示其他用户)、a(表示所有用户)这几个字母中的一个或多个。
操作:+(添加某个权限)、-(取消某个权限)、=(赋予给定权限并取消原有权限)。
**权限:**是r(可读)、w(可写)、x(可执行)中的一个或多个的组合。

也可用数字设定法改变文件或目录的访问权限,依然是chmod命令
**格式:**chmod [mode] 文件或目录命…
**说明:**将rwx看成二进制数,如果该位有权限,用1表示,该位没有权限用0表示
**举例:**rwx r-x r–就可以表示为111 101 100,再将其每三位转换成为一位八进制数,即754。

举例:
将当前目录下文件test.txt和test1.txt的权限改变为文件主可以读和写,同组用户可以执行,其他用户无权访问。

  1. chmod u=rw,g=x test.txt
  2. chmod 610 test1.txt

4. 改变用户组和文件组的命令

1. chgrp命令

**格式:**chgrp [选项]… 所属组 文件或目录…
**说明:**chgrp命令改变指定文件所属的用户组,其中所属组可以是用户组的ID,也可以是用户组的组名。
文件是以空格分开的要改变属组的文件列表,支持通配符。在Linux下一般只有超级用户才能改变该文件的属组。

常用选项:
**-R:**递归式地改变指定目录及其下的所有子目录和文件的属组

2. chown命令

**格式:**chown [选项]… [用户][:[组]] 文件…
**说明:**chown命令将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。
文件是以空格分开的要改变权限的文件列表,支持通配符。
在Linux下一般只有超级用户才可以使用该命令

常用选项:
-R:递归式改变指定目录及其下的所有子目录和文件的拥有者
例如:将目录/home/user/dest及其下所有文件和目录所有者改为root,命令为:chown -R root /home/user/dest

5. 链接文件的命令

ln命令

**格式:**ln [选项]… 源文件或目录 目标文件或目录
**说明:**ln命令用来链接文件或目录

常用选项:
-s:对源文件建立软链接(符号链接),而非硬链接。(上面讲了软链接,硬链接)