# 05-Linux 文件系统及操作

# 简介

# 概述

Linux 文件系统中的文件不仅包含文件系统的结构,还有数据。所有 Linux 用户和程序看到的文件、目录等都存储在其中。

# 目录结构

Linux 文件系统的目录结构,如图所示:

在这里插入图片描述

  • /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

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

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

  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

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

  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

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

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

  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

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

  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin: 系统用户使用的应用程序。

  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src: 内核源代码默认的放置目录。

  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run:

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

# 基本操作

# cd 操作

cd命令是linux中最基本的命令语句,必须熟练掌握。

cd / 返回根目录
cd ~ 用户主目录   cd /root  与 cd 的效果一致.
cd . 当前目录
cd ..返回到上一级目录
cd /usr/ 进入到usr目录
cd – 返回上一个目录
cd 直接回家

# ls目录显示

ls –l 详细格式,文件权限,时间
ll 和ls –l作用相同
ls *.txt 查看所有的txt类型文档

# 创建和删除目录

mkdir 创建目录

mkdir a 创建 a目录
mkdir -p a/b 创建 a目录,并在a目录里创建b目录
mkdir -m 777 c 创建一个权限为777的C目录

rmdir 删除目录(如果目录里有文件,则不能用此命令)

# 创建和删除文件

touch 创建文件

touch f1.txt
touch f2.txt f3.txt
touch -a aa.txt   #-a 参数更改最后访问的时间

rm 删除文件

rm n.txt 提示y删除n放弃
rm –f n.txt 不提示
rm –rf dirname 不提示递归删除目录下所以内容
rm –rf * 删除所有文件
rm –rf /abc/* 删除所有abc的子目录和文件

# 浏览文件内容

cat 查看文件所有的内容(缺陷是文件比较长是也是直接到到文件尾),例如:

cat -n /etc/profile  #-n 表示行号

more通常会结合cat使用输出文档所有的内容,分页输出,空格浏览下一屏,enter表示一行一行看,按q退出,ctrl+b 向上看一屏,ctrl+f表示向下看一屏。

more /etc/profile #这里表示将cat的内容交给more进行分页显示

less 用法和more类似,用来分屏查看文件内容,它的功能与more指令类似,但是比more更加强大,此指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于大型文件会有较高的性能。通过PgUp、PgOn,空格等键来控制文件内容的显示,按q则退出。

less /etc/profile

echo 用于输出文件环境信息,当然也可以输出文本信息,例如

echo $PATH

echo ‘hello’ #输出普通串

head指令一般用于显示文件的头几行,默认显示文件的前10行

head /etc/profile

head -n 5 /etc/profile

tail 用于显示文件后几行,默认显示后10行,例如:

tail -5 nginx.conf 查看nginx.conf的最后5行
tail –f nginx.conf 动态查看日志,方便查看日志新增的信息,使用频繁(例如在一个窗口增加内容,一个窗口查看内容,检测文件内容的变化。

ctrl+c 结束查看

# 打包和压缩命令

tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成name.tar.gz的文件。

-c 创建一个新的tar文件 -v 显示运行过程的信息 -f 指定文件名 -z 调用gzip压缩命令进行压缩 -t 查看压缩文件的内容 -x 解开tar文件

tar –cvf n.tar ./* 压缩当前目录下的所有文件和目录,文件名为n.tar
tar –xvf n.tar 解压压缩包中的文件到当前目录(如果长时间未解压成功 Ctrl+C推出)
tar –cvzf m.tar ./* 解压m.tar.gz文件到当前目录

# Find 查找文件

语法:

find [PATH] [option] [action]

与时间有关的参数:

-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件; -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名; -mtime -n : 列出在n天之内(含n天本身)被更改过的文件名; -newer file : 列出比file还要新的文件名

例如:

find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件

与用户或用户组名有关的参数:

-user name : 列出文件所有者为name的文件 -group name : 列出文件所属用户组为name的文件 -uid n : 列出文件所有者为用户ID为n的文件 -gid n : 列出文件所属用户组为用户组ID为n的文件 例如:

find /home/hadoop -user hadoop # 在目录/home/hadoop中找出所有者为hadoop的文件

与文件权限及名称有关的参数:

-name filename :找出文件名为filename的文件 -size [±]SIZE :找出比SIZE还要大(+)或小(-)的文件 -type TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p); -perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755; -perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示 -perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

例如:

find / -name passwd # 查找文件名为passwd的文件
find . -perm 0755 # 查找当前目录中文件权限的0755的文件
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte

# 总结(Summary)

Linux文件系统是linux系统的核心,所有linux数据和操作都是基于文件系统展开,要强化理解和实践

参考资料:

05-Linux文件系统及操作 (opens new window)