9 文件系统

通过阅读本章,你将会了解到以下几项内容。

  • 了解文件系统
  • 查看文件(夹)及属性
  • 创建文件(夹)
  • 查看设置文件(夹)权限和归属
  • 文件(夹)的剪切复制粘贴删除和重命名

9.1 树形结构

参考网页:

Linux系统目录结构图

常用文件夹说明。

  • / —— 根目录,一般根目录下只存放目录,不要存放文件。/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
  • /bin —— 存放系统中最常用的二进制可执行文件(二进制文件)。基础系统所需要的那些命令位于此目录,也是最小系统所需要的命令;例如ls、cp、mkdir等命令。功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用命令
  • /boot —— 存放Linux内核和系统启动文件,包括Grub、lilo启动程序
  • /dev —— 存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB等
  • /etc —— 存放系统所有配置文件,例如passwd存放用户账户信息,hostname存放主机名等。/etc/fstab是开机自动挂载一些分区的,在里面写入一些分区信息,就能实现开机挂载分区
  • /home —— 用户目录的默认位置
  • /initrd —— 存放启动时挂载initrd.img映像文件的目录,以及载入所需设备模块的目录
  • /lib —— 存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件
  • /lost+found —— 在ext2或者ext3文件系统中,当系统意外崩溃或者计算机意外关机,而产生一些文件碎片存放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移动到这个目录中,可能会用手工的方式来修复或移动到文件的原位置上
  • /media —— 即插即用型设备的挂载点自动在这个目录下创建。例如USB自动挂载后会在这个目录下产生一个目录;CDROM/DVD自动挂载后,也会在这个目录中创建一个目录,存放临时读入的文件
  • /mnt —— 此目录通常用于作为被挂载的文件系统的挂载点
  • /proc —— 存放所有标志为文件的进程,它们是通过进程号或其他的系统动态信息进行标识。例如CPU、硬盘分区、内存信息等存放在这里
  • /opt —— 作为可选文件和程序的存放目录。有些软件包也会被安装在这里,也就是自定义软件包;有些用户自己编译的软件包,就可以安装在这个目录中
  • /root —— 根用户(超级用户)的主目录
  • /sbin —— 大多是涉及系统管理的命令的存放地,也是超级权限用户root的可执行命令存放地。普通用户无权限执行这个目录下的命令,这个目录和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin目录是相似的。注意,凡是目录sbin中包含的都是root权限才能执行的
  • /srv —— 存放系统所提供的服务数据
  • /sys —— 该目录用于将系统设备组织或层次结构,并向用户提供详细的内核数据信息
  • /tmp —— 临时文件目录,有时用户运行程序的时候,会产生临时文件。/var/tmp目录和这个目录相似
  • /usr —— 用于存放与系统用户直接有关的文件和目录,如应用程序及支出系统的库文件
    • /usr/X11R6 —— X Window系统
    • /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 —— 一般数据
    • /usr/share/sgml —— SGML数据
    • /usr/share/xml —— XML数据
  • /var —— 通常用于存放长度可变的文件,例如日志文件和打印机文件
    • /var/cache —— 应用程序缓存目录
    • /var/crash —— 系统错误信息
    • /var/games —— 游戏数据
    • /var/lib —— 各种状态数据
    • /var/lock —— 文件锁定记录
    • /var/log —— 日志记录
    • /var/mail —— 电子邮件
    • /var/opt —— /opt目录的变量数据
    • /var/run —— 进程的标示数据
    • /var/spool —— 存放电子邮件,打印任务等的队列目录
    • /var/tmp —— 临时文件目录

9.2 文件系统常用命令

文件系统常用命令
命令 解释
cd 改变目录
pwd 显示当前目录
mkdir 创建文件夹
chmod 修改文件(夹)权限
ls 列出文件夹内容

下面给出几个简单例子。

$ cd
$ cd ~
$ cd /usr/local/bin
$ cd -
$ cd ..
$ pwd

解释

  1. cd 输入不带参数,默认是回到自己的主目录,也即~目录,第一行第二行效果是一样的。
  2. cd 输入带一个目录,则跳转到该目录,如果你没有权限,则跳转失败。
  3. -短横线表示上一个目录,也就是旧目录,方便你在两个目录之间切换。
  4. cd 输入的目录支持相对路径和绝对路径。..表示上级目录或者叫父目录,.表示当前目录,对于/根目录,其父目录就是他本身。
  5. pwd打印当前目录。
$ cd
$ mkdir dir1
$ mkdir -p dir2/dir22
$ ls -ld dir1
drwxr-xr-x 2 litianci litianci 4096 10月 31 22:24 dir1
$ chmod o-rx dir1
$ touch dir1
$ ls -ld dir1
drwxr-x--- 2 litianci litianci 4096 10月 31 23:22 dir1

解释

  1. cd 到主目录。使用mkdir新建一个文件夹。如果你想创建嵌套的文件夹,或者多层文件夹,可以使用mkdir -p选项,这样就可以建立多层文件夹。
  2. ls -ld dir1-d选项,表示只显示文件夹本身,-l是列出详细信息。drwxr-xr-x表示:d该文件是个文件夹,rwxr-xr-x是该文件夹的权限。见后面详述。2表示其内部有2个子文件(夹),从上面的命令可以知道其实dir1是一个空文件夹,怎么会有两个子文件(夹)呢,其实是隐藏的...文件夹。你可以使用 ls -la dir1看到这连个文件夹。后面依次为本文件(夹)的用户、用户组、文件大小,修改日期和时间。最后是本文件名称。
  3. 使用chmod命令,去除其他用户的读和执行权限(-rx
  4. 使用touch命令,修改dir1修改日期
  5. 再次使用ls -ld dir1命令,会发现相关的数值发生了变化。

9.3 元字符和操作符

古人云“ 物以类聚,人以群分” 。我们操作文件(夹)的时候,可能就需要批量操作。这个时候我们就可以这些文件(夹)“ 归类” ,其实就是使用元字符表示某一类文件(夹)。这样操作起来更方便。

如果说元字符是对文件夹“ 分类” ,那么操作符就是对“ 操作” 按照一定的规则拼接。

9.3.1 元字符

常用的元字符有如下三种方式。

  • * 匹配任意数目的字符,跟正则表达式的*有所区别。
  • ? 匹配一个字符,一个汉字也是作为一个字符。
  • [...] 匹配[]内的任意一个字符,支持短横线-表示连续的字符。一个汉字也是作为一个字符。

看下面例子,

$ mkdir test
$ cd test
$ touch huawei huashuo 华为 华硕 深度 深不可测
$ ls h*
huashuo  huawei
$ ls 华*
华硕  华为
$ ls 深*测
深不可测

解释

  1. 第1-3行,创建空的文件夹test,并转到该文件夹,创建了huawei等六个文件。
  2. 第4、6、8行,使用元字符*表示任意数目的字符,分别显示了匹配相关”分类“的文件。

下面紧接着上面的shell环境,继续例子,

$ ls h?????
huawei
$ ls 华?
华硕  华为
$ ls 深?
深度

解释

  1. 第1行,可以看出每个?代表一个字符。
  2. 第3、5行,可以看出一个汉字算作一个字符。

下面我们看看[...]相关的例子,

$ touch auawei buawei cuawei duawei
$ ls [ah]uawei
auawei  huawei
$ ls [a-dh]uawei
auawei  buawei  cuawei  duawei  huawei
$ ls [a-dh]u*
auawei  buawei  cuawei  duawei  huashuo  huawei