在Linux 中 一切皆文件
文件系统
无疑是最要的组件,用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口
。Linux同样具备完善的文件系统。 图形文件管理器 Nautilus 、功能强大的Shell文件系统管理工具
文件系统类型
Linux是一种兼容性很高的操作系统,支持的文件系统格式很多 ,大体分为几类:
磁盘文件
系统 : 指本地主机中实际可以访问到的文件系统,包括硬盘、CD-ROM、DVD
、USB存储器、磁盘阵列等 ;常见文件系统格式;autofs、coda、Ext(Extended File System,扩展文件系统)、Ext3、Ext4、VFAT、ISO9660(通常是CD-ROM)、UFS(Unix File System,Unix文件系统)、ReiserFS、XFS、JFS、FAT(File Allocation Table,文件分配表)、FAT16、FAT32、NTFS(Techonology File System)等- *
网络文件
系统 :可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。文件系统格式有:NFS(Network File System,网络文件系统)、Samba(SMB/CIFS)(常用服务器)
、AFP(Apple Filing Protocol,Apple文件归档协议)和WebDAV等; 专有/虚拟文件系统
:不驻留在磁盘上的文件系统,常见格式有:TMPFS(临时文件系统)、PROCFS(Process File System,进程文件系统)和LOOPBACKFS(Loopback File System,回送文件系统)
- 目前
Ext4
是Linux系统广泛使用
的一种文件格式
。在Ext3基础上,对有效性保护
、数据完整性
、数据访问速度
、向下兼容
等方面做了改进 - 最大特点是
日志文件系统
: 可将整个磁盘的写入动作完整地记录在磁盘的某个区域上,以便在必要时回溯追踪
。 - FAT16、FAT32、NTFS是Microsoft Windows系统的
主要的文件系统格式
。 - Linux 系统同样可以很好的支持这些文件格式。不过以往版本的Linux系统需要单独挂载Windows文件系统,目前很多Linux可以自动识别这些文件格式,以制度方式访问计算机磁盘上Windows系统上的文件。
SCSI与IDE设备命名
dev
为设备文件目录
sata硬盘
的设备名称是 “/dev/sda
”
- /dev/sda1含义?
- /dev/sda3含义?
IDE硬盘
设备名称是 “/dev/hda
”
- /dev/hdc2 含义?
如果很在意系统的高性能
和稳定性
,应该使用SCSI硬盘
cat /proc/partitions
Linux分区的命名方式
字母
和数字
结合
前两个字母
表示设备类型
- hd 代表IDE硬盘
- sd 表示SCSI或SATA硬盘
第三个字母说明具体的设备
- /dev/hda 表示第
一
个IDE硬盘 - /dev/hdb 表示第
二
个IDE硬盘
交换分区
- 将内存中的内容写入硬盘或硬盘中读出,称为
内存交换(swapping)
- 交换分区
最小
*必须
等于计算机内存
- 可以创建多于一个的交换分区
- 尽量把交互分区放在
硬盘驱动器
的起始位置
文件系统结构
文件系统逻辑结构
- Windows 将磁盘分区 A、B、C、D…
- Linux 的文件
组织模式犹如一颗倒置的树
。所有存储设备作为这棵树的一个子目录。存取文件只需要确定目录就可以了 ,无需考虑物理存储位置 。
分区与目录的关系
- Windows下,目录结构属于分区 ; Linux下,分区属于目录结构
如何知道文件存储的具体硬盘位置?
Linux中将所有硬件都视为文件来处理
。包括硬盘分区、CD-ROM、软盘以及其他USB移动设备等。为了能够统一的方式和方法访问文件资源,Linux中提供了对每种硬件设备相应的设备文件。一旦Linux系统可以访问到硬件,就将其上的文件系统挂载
到目录树中的一个子目录中- 例如: 用户插入USB移动存储器 , Ubuntu Linux 自动识别后 ,将其
挂载
到/media/disk
目录下
目录说明
目录 | 说明 |
---|---|
* /bin (/usr/bin 、 /usr/local/bin) | 是Binary的缩写, 存放最经常使用的命令 (可执行文件 -二进制) |
* /boot | 存放Linux内核 和启动 文件,包括一些连接文件以及镜像文件、Grub、lilo启动器程序 |
/dev | 类似于windows的设备管理器 ,把所有的硬件用文件的形式存储。包括硬盘、分区、键盘、鼠标、USB、tty等 |
* /etc | 所有的系统管理 所需要的配置文件 和子目录 ,例如 passwd-用户账号 信息、hostname -主机名 |
* /home | 存放用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 |
/initrd | 存放启动时挂载initrd.img 映像文件目录 , 以及载入所需设备模块目录 |
/lib | 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件 ,存放fsck放置的零散文件 |
* /media | linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 |
* /mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了. 临时挂载点 |
/opt | 这是给主机额外安装软件所摆放的目录 , 作为可选文件 和程序的存放目录 , 主要 被第三方开发者用来简易的安装和卸载它们的软件包 。如安装ORACLE数据库就可放到该目录下。 |
/proc | 这个目录是一个虚拟的 目录,它是系统内存的映射,访问这个目录来获取系统信息。存放所有标志位文件的进程,他们通过进程号或其他系统动态信息进行标识,例如:puinfo文件存放CPU当前动作状态的数据 |
* /root | 该目录为系统管理员 ,也称作超级权限者的用户主目录 |
*/sbin (/usr/sbin 、 /usr/local/sbin) | s就是Super User的意思,这里存放的是系统管理员 使用的系统管理程序 。包括系统管理 、目录查询 等关键命令文件 |
/srv | service缩写,该目录存放一些服务启动之后 需要提取的数据 。 |
/tmp | 这个目录是用来存放一些临时文件的 ,所有 用户对该目录都有读写权限 |
/sys | 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs |
* /usr/local | 这是另一个给主机额外安装软件所安装的目录 。一般是通过编译源码方式安装的程序。 |
*/var | 这个目录中存放着在不断扩充着的东西 ,习惯将经常被修改的目录放在这个目录下。包括各种日志文件 。 |
/selinux [security-enhanced linux] 360 | SELinux是一种安全子系统 ,它能控制程序只能访问特定文件。 |
常见目录
, 结合了centos
与Ubuntu
子目录解释
一级目录 | 子目录 | 描述 |
---|---|---|
/usr | 用于存放用户直接有关的文件和目录,例如应用程序及支持它们的库文件。一般为重要目录 | |
/usr/X11R6t | XWindow系统 | |
/usr/bin | 用户和管理员的标准命令 | |
/usr/include | c/c++等各种开发编译环境的标准include文件 | |
/usr/lib | 应用程序已程序包的连接库 | |
/usr/local | 系统管理员安装的应用程序目录 | |
/usr/local/share | 系统管理员安装的共享文件 | |
/usr/sbin | 用户和管理员标准命令 | |
/usr/share | 存放使用手册等共享文件的目录 | |
/usr/share/dict | 存放码表的目录 | |
/usr/share/man | 系统使用手册 | |
/usr/share/misc | 一般数据 | |
/share/sgml | SGML数据 | |
/usr/share/xml | xmls数据 | |
/var | 通常由于存放长度可变的文件,例如日志文件和打印机文件 | |
/var/cache | 应用程序缓存目录 | |
/var/crash | 系统错误信息 | |
/var/games | 游戏数据 | |
/var/lib | 各种状态数据 | |
/var/lock | 文件锁定记录 | |
/var/log | 日志记录 | |
/var/mail | 电子邮件 | |
/var/opt | /opt目录的变量数据 | |
/var/num | 进程标识数据 | |
/var/spool | 存放电子邮件、答应任务等的队列目录 | |
/var/tmp | 临时文件目录 |
路径
绝对路径
和相对路径
, 两者关系是相对的
文件系统导航
目录导航
-
pwd
: 显示绝对路径名 ~ 表示用户主目录 -
ls
: 列出用户有权访问的任何目录 -
语法格式:
ls [-a |-A|-c|-F|-l|-L|-o|-r|-R|-t|-u] [filename|directory]
选项 描述 -a 包括隐藏文件 -A 包括隐藏文件 但不列出 . … -c 按修改时间排序 -F 目录 后面标记
/
,可执行文件*
,符号链接@
,管道后面|
,socket文件=
-l 以列表格式来显示文件的 详细
信息-L 若指定文件为一个符号链接文件 则 显示链接
所指向的文件-o 与-l相同,只是 不
显示拥有者信息-r 按 字母逆序
或最早优先
的顺序显示输出结果-R 递归的形式
显示目录的各个子目录中的文件-t 按修改的时间心事输出结果 -u 按文件上次存取的时间心事输出结果 -h 文件大小按 K、M、G
为单位显示,与-l一起使用 , 例:ls -hl
-
第一项由
10
个字符组成,例如 drwxr-xr-x说明了该文件目录的文件类型
和访问权限
-
第一个字符表示文件类型
-
从左起第二个字符到第10个字符表示文件访问权限,以3个字符为一组,分为三组,组中每个位置对应一个指定的权限,其顺序为读写执行
-
三组字符又分别代表
文件所有者权限
、文件从属组权限
以及其他用户权限
。三个字符组成一个2进制数
#最高权限 777
文件类型
文件类型 | 类型符 | 描述 |
---|---|---|
普通 文件 | - | 值ASCII文本文件、二进制可执行文件、以及硬件链接 |
块设备 文件 | b | 块输入/输出设备文件 |
字符设备 文件 | c | 演示输入/输出设备文件,每次I/O操作仅传送一个字符 |
目录 文件 | d | 包含若干文件或子目录 |
符号链接 文件 | l | 只保留了文件地址,而不是文件本身 |
命令管道 | p | 一种进程间通信的机制,用于进程间通讯的暂时文件 |
套接字 | s | 用于进程间通信,两台计算机间通讯的应用程序接口(API) |
文件和目录权限
权限类型 | 应用于目录 | 应用于任何其他类型的文件 |
---|---|---|
读(r) | 授权读取目录或子目录内容的权限 | 授予查看文件的权限 |
写(w) | 授予创建、修改或删除文件或子目录的权限 | 授予写入权限,允许修改文件 |
执行(x) | 授予进入目录的权限 | 允许用户运行程序 |
- | 无权限 | 无权限 |
cd
cd ../..
返回
生产
文件(目录)
- 创建、复制、移动与删除文件
touch file cp mv rm
cp
- 拷贝文件或目录
- 语法格式:
cp [-a|-d|-f|-i|-p|-r|-l|-v] [SOURCE] [DEST]
支持多文件操作 , 最少有对源文件的读取权限 读目标文件或目录有写入权限
选项 | 描述 |
---|---|
-a | 通常在拷贝目录时使用 ,保留连接、文件属性、并递归拷贝目录,其作用等于dpr选项组合 |
-d | 拷贝时保留连接 |
-f | 非交互模式的复制操作,覆盖已存在的目标文件而不提示 |
-i | 交互模式的复制操作,与-f相反,在覆盖目标文件之前将给出提示 |
-p | 除复制源文件内容外,还将其修改时间 和访问权限 也同时复制 |
-r | 若源文件是目录,cp命令将递归的复制该目录下的所有子目录和文件 |
-l | 不做拷贝,只是连接文件 |
-v | 显示详细 的复制过程 |
mv
- 移动文件或目录改名
- 语法:
mv [-i|-f|-v] [SOURCE] [DEST]
选项 | 描述 |
---|---|
-f | 非交互模式的移动操作,覆盖已经存在的目标文件而不提示 |
-i | 交互模式的移动操作 , 覆盖前会给出提示 |
-v | 显示详细的移动过程 |
rm
- 授权下 删除一个或多个文件/目录 , 对于链接紫杉醇链接,原文件保存不变
- 语法:
rm [-i|-f|-r|-v] [DEST]
选项 | 描述 |
---|---|
-f | 非交互模式的删除操作,忽略不存在的文件 |
-i | 交互模式的删除操作 , 覆盖前会给出提示 |
-r | 若源文件是目录,将递归的删除该目录下的所有子目录和文件 |
-v | 显示详细的删除过程 |
rm命令执行
物理删除
,一旦一个文件被删除,就不能恢复
mkdir
- 语法格式:
mkdir [-p] directory_name
-p
: 表示 级联创建
rmdir
- 语法格式:
rmdir [-p] directory_name
-p
: 表示 级联删除
查看
文件(内容)
cat
- 语法格式:
cat [-v|-T|-E|-u] filename
选项 | 描述 |
---|---|
-v | 用一种特殊形式显示控制字符 ,LFD与TAB除外 |
-T | 将TAB显示为^l ,只与 -v 选项同时使用 |
-E | 每行的末尾显示一个 $ 符 , 只与 -v 选项同时使用 |
-u | 输出不经过缓冲区 |
echo
head
- 用于显示文件或标准输入的
前几行
- 语法 :
head [-num] filename
tail
- 用于显示文件或标准输入的
后几行
- 语法 :
head [+/-num] filename
+
num:表示从第num行
以后开始显示
-
num:表示距
文件尾 num行处开始显示,默认末尾10行
连接文件
- 类型 :
-
硬链接
是利用Linux中为每个文件分配物理
编号——inode建立连接,因此硬链接不能跨文件系统
-
软链接
(符号链接
)是利用文件的路径名
建立链接。通常建立软连接使用绝对路径而不是相对路径,以最大限度增加可移植性
in
- 创建文件的
链接
文件 ,类似于 快捷方式 - 语法格式:
in [-s] target link_name
-s
表示为创建软
链接,缺省时 ,创建硬链接 , 链接可以是目录也可以是文件
压缩
文件
压缩工具 | 解压工具 | 文件扩展名 |
---|---|---|
gzip | gunzip | .gz |
bzip2 | bunzip2 | .bz2 |
zip | unzip | .zip |
gzip与gunzip
- 语法格式:
gzip [-l | -d| -num] filename
选项 | 描述 |
---|---|
-l | 查看 压缩文件内的信息,包括文件数、大小、压缩比等参数,并不是进行文件压缩 |
-d | 将文件解压 ,功能与gunzip相同 |
-num | 指定压缩比率 , num为1~9个等级 |
在执行gzip命令后 , 它将
删除的未压缩
的文件并只保留已压缩的版本
- 语法格式:
gunzip [-f] file.gz
-f
| 用于解压文件是,对同名文件不做提示
gunzip 与gzip相反
* tar
- tar命令
主要
用于将若干文件或目录合并
为一个文件,以便备份和压缩。当然,之后出现tar程序的改进版,可实现合并归档
的同时
进行压缩
- 语法格式 :
tar [-t|-x|-c|-v|-f|-j|-z] tarfile filelist
选项 | 描述 |
---|---|
-t | 显示 归档文件中的内容 |
-x | 释放 归档文件 |
-u | 更新 归档文件 |
-c | 创建 一个新的归档文件 |
-v | 显示归档 和释放 的过程信息 |
-f | 用户指定 归档文件的文件名,否则使用默认名称 |
-j | 由tar生成归档 然后又bzip2压缩 |
-z | 由tar生成归档 然后又gzip压缩 |
常用
tar -zxvf
- 示例:
// 压缩
tar -cf XXX // 归档
tar -cjf XXX.tar // bzip2压缩
tar -czf XXX.tar // gzip压缩
ls -lh // 查看
// 解压
tar -xvf XXX.tar // 查看归档文件中的详细内容
tar -zvjf XXX.tar.bz //
tar -zvxf XXX.tar.gz //
编辑
文件
查看vi