Files & Folders
Agenda
概述
• 操作系统本质上是由文件和目录组成的, 如何
  对这些文件和目录进行组织, 以及如何对它们
  进行权限控制是一个系统首先需要考虑的问题.
  本章节依次介绍了如下内容:
  - 磁盘分区管理(Disk Partition Management)
  - 文件系统(File System)
  - 文件和目录权限控制
  - 文件与目录的管理
• linux系统的一个特点是一切都被抽象为文件,
  包括普通文件, 目录, 设备, 网络套接字(socket),
  进程, 管道(pipe)等.
磁盘分区
           - 磁盘设备文件
• 磁盘在被操作系统识别并使用之前必须先
  进行分区操作, 可以根据系统的需要将磁盘
  划分为若干个分区. linux下面可以通过如下
  方式查看磁盘设备, 比如:
 ls /dev/sda # 系统第一块SATA硬盘设备
• 关于hda 和 sda
  常用的硬盘接口类型有IDE, SATA, SCSI, SAS等, 其
  中IDE硬盘在系统中的设备文件是/dev/hd[a-d], 比
  如第一块硬盘/dev/hda, 第二块/dev/hdb; SATA和
  其它的硬盘在系统中的设备文件则是/dev/sd[a-p];
磁盘分区
       - 分区设备文件 & 分区表
• 对磁盘进行分区之后, 在/dev目录下面会出现命名为
  hda1, sda1的文件, 这些文件表示磁盘的分区, 以SATA
  硬盘为例:
 /dev/sda1 表示第一个SATA分区
 /dev/sda2 表示第二个SATA分区
 ......
• /etc/fstab
此系统文件用于记录系统的分区信息, 示例:
 /dev/sda1   /           ext3 defaults   11
文件中的每一行遵循如下格式:
 分区     挂载点    文件系统 ......
最好不要手动去修改此文件, 有可能会导致系统无法
正常启动.
分区管理
                    - fdisk
• fdisk
fdisk是linux下面用于管理磁盘分区的命令, 格式:
fdisk ${diskfile}. 示例:
 fdisk /dev/sda   #对第一块SATA磁盘进行分区管理
执行该命令后会进入一个交互式的命令行界面, 通过
 输入
相关的指令执行对应的操作:
 d 删除磁盘分区
 l 列出所有的磁盘分区
 n 添加一个新的分区
注意: 在使用fdisk进行分区管理时需要谨慎, 因为该命
令会导致磁盘分区数据的丢失.
创建文件系统
• 对磁盘进行分区之后, 该分区不能使用, 需要在
  该分区上建立文件系统(File System). linux提供
  了多种文件系统供选择: ext3, ext4, reiserFS等.
• 使用mkfs命令创建文件系统, 常用选项:
  -t     指定文件系统类型, ext3/ext4等
示例:
 mkfs -t ext3 /dev/sda2 # 创建ext3文件系统
• 使用各个文件系统专有的命令创建文件系统,
  比如mkfs.ext3创建ext3文件系统, 这些命令相比
  mkfs提供了更多的选项, 比如:
  -b     指定文件块的大小
  -U     指定UUID
SWAP分区
• SWAP分区类似于windows下面的虚拟内存,
  即在内存空间不足的情况下, 将硬盘空间作
  为内存使用. 在进行系统安装时, 通常要指
  定swap分区, 该分区大小的设置一般为内存
  大小的两倍.
• 可以使用磁盘文件充当swap空间, 如下:
 dd if=/dev/zero of=/swapfile bs=1024 count=1048576
 mkswap /swapfile
编辑/etc/fstab文件自动挂载该swap分区:
 /swapfile   none swap sw       0    0
挂载
• 分区在创建文件系统之后必须挂载到指定的目录进行访问, linux
  下面使用mount命令进行挂载, 命令基本格式:
  mount -options device dir
其中device指定分区的名称, dir指定某个目录; 常用的选项有:
  -t          指定文件系统类型
  -o          添加某些选项, 比如只读等
示例:
  mount -t ext3 /dev/sda1 /mnt/root
将文件系统为ext3的/dev/sda1分区挂载到/mnt/root目录, 挂载后可
  以通过
/mnt/root目录访问该分区的内容.
  其他:
  mount           显示所有的分区挂载
  mount -a    重新挂载/etc/fstab中所有的分区
• 根分区
linux系统必须创建一个根分区并且挂载到根目录/下面, 在安装系统
时被要求指定.
示例
• 示例中使用了基于文件的虚拟文件系统做为演
  示, 重在展示文件系统的相关命令与操作:
 # 使用dd命令创建大文件, 这里50m
 dd if=/dev/zero of=tmp/vfs bs=1024 count=50000
 # 基于该文件创建文件系统, ext3
 mkfs -t ext3 tmp/vfs
 # 在/mnt目录下面创建一个挂载点
 mkdir /mnt/vfs
 # 挂载虚拟文件系统
 mount -t ext3 -o loop tmp/vfs /mnt/vfs
 # 进入挂载点, 作一些操作, 比如创建文件或者目录
 cd /mnt/vfs
 # 查看当前分区的使用情况
 df -h .

 # 卸载该文件系统
 umount /mnt/vfs
/etc/fstab
                           - 概述
• 此文件描述了系统磁盘分区, 光驱, 以及其他虚拟文件系统的挂载情况,
  文件中典型的一行如下:
 /dev/sda1           /       ext2    defaults 1 1
 各列的含义说明如下:
 1, /dev/sda1 磁盘分区. 还可以是光驱设备, 比如/dev/cdrom, 虚拟文
              件系统, 比如proc
 2, /         挂载点
 3, ext2      文件系统类型除了基本的文件系统之外还可以是虚拟文
              件系统如proc, 或者swap
 4, defaults 此列表示分区挂载选项, defaults表示全部默认. 选项说明如下:
      auto/noauto    是否在启动时自动挂载, auto为默认;
      user/nouser    是否只允许root用户mount该分区(nouser), nouser为默认;
      exec/noexec    是否允许执行该分区上的二进制文件, exec为默认;
      ro/rw          只读或者可读写, rw为默认;
      sync/async         同步/异步读写, 默认为async
      deafults表示的是rw, auto, nouser, async, exec.
/etc/fstab
              - 概述 & procfs
  5, 第五列是分区备份选项, 0表示不备份, 1表示进行备份;
  6, 第六列是分区检查(fsck)选项, 0表示不进行检查, 非0表示对该分区执行fsck
     的顺序, 由小到大.
 说明: 通常情况下不要去手动修改fstab文件, 因为该文件的错误会导致系统无
 法正常启动. 在必要时, 修改该文件之后使用mount -fav命令进行检查.
• 进程文件系统procfs
  linux系统会将运行时的一些信息比如进程/内存使用/IO等挂载到一个虚拟
  的进程文件系统中, 该挂载点通常为/proc目录, 这里列举该目录下一些比
  较有用的文件:
      /proc/cpuinfo     系统cpu信息
      /proc/meminfo     系统内存使用情况, free命令会读取此文件
      /proc/version     OS version
      /proc/partitions
      /proc/filesystems
      /proc/mounts      系统分区, 文件系统及挂载信息
      /proc/stat        系统运行的统计数据
      /proc/swaps       系统交换分区使用情况
      /proc/uptime      系统自上次启动到当前的运行时间
文件
                    - 文件类型
• linux有以下几种常见的文件类型:
普通文件
 比如新建的文本文件, 压缩文件等; 使用ls –l命令查看时
 出现-rw-r--r--字样的第一个-字符表示该文件是一个普通
 文件;
目录文件
 目录下面可以包含其他的文件或者目录, 使用ls命令查看
 时第一个字符为d的文件是目录文件;
字符设备或者块设备文件
 进入到/dev目录, 执行ls –l命令可以看到类似如下内容:
   crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty
   brw-r----- 1 root disk 3, 1 2006-04-19 /dev/sda1
 以c开头的表示字符设备文件, 比如猫等串口设备; 以b开
 头的表示磁盘, 光驱等设备;
文件
                       - 文件类型
套接口文件(socket文件)
 最常见的是在启动mysql服务器时会产生一
 个mysql.sock文件, 使用ls –l命令查看该文件:
  srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock

 以s字符开头, 这种文件类型了解即可;
符号链接文件(软链接文件)
 这种文件在使用ls -l进行查看时, 会以字符l
开头, 它相当于windows系统下面的快捷方式.
使用”ln -s 源文件 新文件”命令创建符号链接.
inode
• inode 是 ‘index node’的简称, 中文”索引节点”,
  inode用于存储文件的元信息, 比如文件字节数,
  文件数据块的位置, 拥有者, 所属组,
  ctime(inode上一次更改时间), mtime(文件上一
  次修改时间), atime(文件上一次访问时间), 指向
  该inode的文件数等, inode不包含文件的名称;
• 每个文件都必须对应一个inode, 文件与inode之间是多对一
  的关系, 即有可能多个文件的inode相同; 如果分区inode数
  量已经用完, 则无法在该分区上创建文件, 使用”df -i 分区”
  命令查看分区的inode使用情况, 示例:

• 每个inode都对应一个编号, 使用”ls -i 文件名”命令查看文件
  的inode编号;
inode
           & 目录
• 在linux下面, 目录实际上也是一种文件, 目录
  文件的内容是该目录包含的子文件/目录与
  inode的映射关系, 使用ls -l命令则会访问子
  文件/目录的inode信息, 并列举出来:
文件链接
               硬链接 & 软链接
• 在创建一个文件时, 会分配一个对应的inode; 在通常情况下
  inode与文件是一对一的关系, 但是也可以创建多个文件使之指
  向同一个inode; 创建文件硬链接就会出现这种情况, 使用如下命
  令创建硬链接:
  ln 源文件名 目标文件名
 示例:


  可以看到给文件file1创建硬链接file2之后, 两者指向了同一个inode节点, 之后
  在修改文件file1或者file2时实际上修改的都是同一份拷贝.
• 使用如下命令创建软链接
 ln -s源文件名 目标文件名
与硬链接不同的是, 软链接会分配另外的inode节点, 软链接文件包
含的是源文件的路径信息, 对软链接进行读写执行等操作实际上操
作的是源文件.
inode的回收
• 对于磁盘的每一个分区, inode的数量都是有
  限的, 另外inode存储了文件的元信息本身也
  会占用一定的存储空间, 因此有必要对不再
  被使用的inode节点进行回收;
• 在指向inode节点的链接数归零之后inode会
  被回收, 指向某个inode的链接数有可能大于
  一, 每删除一个链接文件, 链接数减一.
隐藏文件/目录
• 与windows不同的是, linux通过在文件名称
  前面添加字符”.”来表示隐藏文件. 隐藏文件
  通常被用于存储程序的配置信息, 用户登录
  脚本等, 比如用户HOME目录下的.bash_profile
  文件;
• ls命令不会列出目录下面的隐藏文件或目录,
  需要加上-a选项, 如图:
当前目录
         & 上级目录
• 通常linux文件系统上的每一个目录下面都有.
  目录 和 ..目录, 其中前者表示当前目录, 后者
  表示上级目录. 实际上这两者均是指向对应
  目录的硬链接, 如下:




• 经常使用”cd ..” 命令进入上一级目录.
所有者
                  owner
• 文件或者目录都有一个所有者(owner), 最开始
  owner是创建者, 也可以通过chown命令更改所
  有者. 使用ls -l命令查看所有者:

  上图中红色区域的列表示文件的所有者, 这里
  是root.
• 可以使用chown命令更改文件/目录的所有者,
  命令格式: chown 选项 用户名 文件/目录, 常用的选项:
  -R 递归更改目录下所有子目录/文件的所有者
 chown -R demo tmp/
所属组
               owner group
• 文件或者目录有对应的所属组, 最初的所属组
  被设置为创建者的所属组, 可以通过chgrp命令
  更改文件的所属组.使用ls -l命令查看所属组:

  上图中红色区域的列表示文件的所属组, 这里
  是root.
• 可以使用chgrp命令更改文件/目录的所有者, 命
  令格式: chgrp 选项 用户名 文件/目录, 常用的选项:
  -R 递归更改目录下所有子目录/文件的所有者
 chgrp -R demo tmp/
权限控制
                  - 概述
• 文件与目录的访问权限分读(r)/写(w)/执行(x), 另外针对不同的用户访
  问权限会有不同, 比如某个文件对A用户是可写的, 但是对B用户却是只
  读的. 使用ls -l命令查看文件的权限:


 图中的红色框区域-rw-r--r--是文件的权限位, 下面按照顺序对该权限位
 进行说明:
 -     表示文件的类型, -表示普通文件;
 rw-   所有者(u)权限, 这里的所有者是root用户, 权限是可
          读写, 不能执行; 如果需要配置为可执行则应该是rwx;
 r--         所属组(g)权限, 对于该组内用户的权限, 这里是只读;
 r--         其他用户(o), 此用户既不是文件的所有者也不属于
             文件的所属组.
• 权限位可以使用数字表示, 以所有者权限为例, 权限的每一位如果不是-
  则将该位置1, 否则置0; 比如rwx则对应111, 相应的10进制为7, rw-则是
  6; 其他的权限位以此类推, 权限位rwxrwxrwx对应的是777;
• linux通常将文件的权限设置为644 即rw-r--r--, 目录的权限则设置为755
  即rwxr-xr-x
权限控制
                       - chmod
• 使用chmod命令修改文件/目录的权限, 该命令的格
  式: chmod 选项 权限 文件/目录, 常用的选项有:
  -R        递归修改子文件/目录的权限
  该命令可以采用如下形式:
  1, 使用数字, eg:
  chmod 755 tmp/
  2, 修改指定用户或者组的权限, eg:
 chmod u+x test.sh    # 修改用户权限为可执行
 chmod g+w file.txt   # 修改组权限为可写
 chmod o-r file.txt   # 修改其他用户权限 不可读
 chmod +x file.sh     # 所有的用户都将获得文件的可执行权限
 chmod a+x file.sh    # 与上相同
权限控制
          - 删除文件
• 用户对于文件的删除权限并不由文件本身
  决定而是由文件所在目录的权限决定, 删除
  文件的动作实际上修改的是所在目录的内
  容, 因此用户需要对该文件所在目录有写权
  限. 示例, 注意file.txt文件的权限位, 红色部
  分修改所在目录其他用户的权限位可写:


 切换为demo用户, 删除file.txt文件成功:
权限控制
      - 目录的可执行权限
• 目录的可执行权限决定了用户是否可以进
  入到该目录及其子目录, 如果用户对指定目
  录没有可执行权限则不能cd到该目录及其子
  目录中, 示例, /root目录对其他用户不可执
  行:

 切换为demo用户, 执行cd /root
权限控制
             - 掩码
• 在创建文件或者目录时, 会分配一个默认的权
  限位, 这是由当前进程的掩码决定的. 比如掩码
  是000, 则目录的权限是777(rwxrwxrwx), 文件的
  权限是666(rw-rw-rw-). 大多数情况下掩码设置
  为022;
• 使用umask命令查看或设置当前的掩码, 比如:


• 在/etc/bashrc文件会使用umask命令对掩码进
  行初始化设置, 用户在登录过程中, 该脚本文件
  会被执行.
常用命令
• pwd
shell内置命令, 查看当前目录, 示例:

• cd
shell内置命令, 切换目录, 常用用法:
   cd/cd ~ 切换至用户HOME目录 cd -      切换到前一个目录$OLDPWD
   cd ..   切换至上级目录     cd /path/to 切换到指定的路径
• ls
列举当前文件/目录的内容, 常用选项:
    -l 查看文件/目录的详细信息
    -d 查看当前目录, 而不是目录下面的内容
    -a 列出隐藏的文件或者目录
•   touch
    touch用于创建一个普通文件, 文件被创建后字节数为0;
•   mkdir
    mkdir则用于创建一个空目录. 常用的选项:
    -p    如果需要创建的目录父目录不存在则自动创建; 示例:
常用命令
• cp
复制文件或者目录, 命令格式:
 cp 源文件 目标文件
如果需要赋值目录, 则需要制定-r选项赋值目录以及下面的子文件/
目录, 示例:



• mv
移动文件或者目录到另一个位置或者对文件目录重命名. 命令格式:
 mv 源文件/目录 目标位置
 mv 源文件/目录名 更改后的文件/目录名
示例: mv filename1 filename2
如果目的位置与源文件/目录在同一个文件系统上, 那么只
需要对父目录的内容进行更改即可(速度很快); 如果处在不
同的文件系统, 那么则会发生实质的文件拷贝操作.
常用命令
• rm
删除文件或者目录, 如果删除的目录. 命令格式: rm 文件/目录
常用选项:
   -f 强制删除force
   -r 递归删除子文件和目录recursively
如果需要删除的目录非空通常使用-rf选项;
• rmdir
仅用于删除空目录, 如果目录非空则无法删除, 使用rm -rf进行删除.
• cat
查看文件的内容, 命令格式:
   cat 文件名
• more
与cat类似用于查看文件的内容, 如果文件内容超过了一定的行数,
则按顺序一次只显示一屏, 此时终端的底部会出现”--More--”的字样,
使用空格键查看接下来的内容, q键退出.

Note: less 命令与more类似.
常用命令
                       stat
• stat命令用于查看文件或者目录的inode信息, 该命令常用的选项
  有:
  -c 指定输出的格式, 比如输出访问权限, 拥有者等
  -t 简洁模式打印信息
  与-c选项相应的常用格式有:
  %a 访问权限(八进制)                       %A 访问权限(rwx)
  %F      文件类型                          %i  inode标志
  %h 文件的硬链接个数                        %n 文件名
  %s 文件字节数                           %U 文件所有者名称
  %x      文件的最后访问时间 %y                  最后修改时间
  %z 文件的最后改变时间
  示例:
  stat -c %a file          # 查看文件的访问权限, 输出644
  stat -c %y file          # 查看文件的最后修改时间
  # 输出类似file’s size is 123 bytes
  stat -c "%n's size is %s bytes" file
系统安装目录
• linux系统在安装时会在根目录/下面创建很多的系统子目录, 这
    些子目录的组织与命名都是很规范的:
/      根目录, 必须有一个根分区挂载在此目录下面;
/bin   常用的可执行命令被放在此目录下面 , 比如ls, grep, awk等;
/boot 此目录包含了与系统启动相关的文件, 比如GRUB, 系统核心等;
/dev 设备文件目录, 前面介绍的磁盘/分区等设备文件放在此目录;
/etc   系统配置文件目录, 比如分区表, 系统启动脚本, yum配置等;
/lib   系统库文件目录;
/mnt mount目录, 通常用于挂载其他的文件系统, 比如将vbox共
       享目录挂载到此目录下面;
/proc 挂载虚拟进程文件系统到此目录, 用于查看一些系统运行时
       信息;
/sbin 此目录用于存放可执行文件, 与/bin不同的是, 它通常用于
       存放一些系统维护和管理的可执行文件, 比如关机重启等命
       令.
系统安装目录
/tmp 临时文件目录, 专用于存放某些临时文件
/usr 用户目录, 用于存放各种用户程序, 比如apache, php
      等通常会安装到此目录下面;
/var 存放一些经常发生变化的文件, 比如系统日志, 邮件等;
/root root用户的主目录;
/home 系统除root外其他用户的HOME目录均创建在此目录下面.

• 其他一些 比较常见的目录
/exports NFS输出文件系统目录;
/opt     此目录通常用于软件安装, 比如安装oracle数
         据库等;
END

4, files & folders

  • 1.
  • 2.
  • 3.
    概述 • 操作系统本质上是由文件和目录组成的, 如何 对这些文件和目录进行组织, 以及如何对它们 进行权限控制是一个系统首先需要考虑的问题. 本章节依次介绍了如下内容: - 磁盘分区管理(Disk Partition Management) - 文件系统(File System) - 文件和目录权限控制 - 文件与目录的管理 • linux系统的一个特点是一切都被抽象为文件, 包括普通文件, 目录, 设备, 网络套接字(socket), 进程, 管道(pipe)等.
  • 4.
    磁盘分区 - 磁盘设备文件 • 磁盘在被操作系统识别并使用之前必须先 进行分区操作, 可以根据系统的需要将磁盘 划分为若干个分区. linux下面可以通过如下 方式查看磁盘设备, 比如: ls /dev/sda # 系统第一块SATA硬盘设备 • 关于hda 和 sda 常用的硬盘接口类型有IDE, SATA, SCSI, SAS等, 其 中IDE硬盘在系统中的设备文件是/dev/hd[a-d], 比 如第一块硬盘/dev/hda, 第二块/dev/hdb; SATA和 其它的硬盘在系统中的设备文件则是/dev/sd[a-p];
  • 5.
    磁盘分区 - 分区设备文件 & 分区表 • 对磁盘进行分区之后, 在/dev目录下面会出现命名为 hda1, sda1的文件, 这些文件表示磁盘的分区, 以SATA 硬盘为例: /dev/sda1 表示第一个SATA分区 /dev/sda2 表示第二个SATA分区 ...... • /etc/fstab 此系统文件用于记录系统的分区信息, 示例: /dev/sda1 / ext3 defaults 11 文件中的每一行遵循如下格式: 分区 挂载点 文件系统 ...... 最好不要手动去修改此文件, 有可能会导致系统无法 正常启动.
  • 6.
    分区管理 - fdisk • fdisk fdisk是linux下面用于管理磁盘分区的命令, 格式: fdisk ${diskfile}. 示例: fdisk /dev/sda #对第一块SATA磁盘进行分区管理 执行该命令后会进入一个交互式的命令行界面, 通过 输入 相关的指令执行对应的操作: d 删除磁盘分区 l 列出所有的磁盘分区 n 添加一个新的分区 注意: 在使用fdisk进行分区管理时需要谨慎, 因为该命 令会导致磁盘分区数据的丢失.
  • 7.
    创建文件系统 • 对磁盘进行分区之后, 该分区不能使用,需要在 该分区上建立文件系统(File System). linux提供 了多种文件系统供选择: ext3, ext4, reiserFS等. • 使用mkfs命令创建文件系统, 常用选项: -t 指定文件系统类型, ext3/ext4等 示例: mkfs -t ext3 /dev/sda2 # 创建ext3文件系统 • 使用各个文件系统专有的命令创建文件系统, 比如mkfs.ext3创建ext3文件系统, 这些命令相比 mkfs提供了更多的选项, 比如: -b 指定文件块的大小 -U 指定UUID
  • 8.
    SWAP分区 • SWAP分区类似于windows下面的虚拟内存, 即在内存空间不足的情况下, 将硬盘空间作 为内存使用. 在进行系统安装时, 通常要指 定swap分区, 该分区大小的设置一般为内存 大小的两倍. • 可以使用磁盘文件充当swap空间, 如下: dd if=/dev/zero of=/swapfile bs=1024 count=1048576 mkswap /swapfile 编辑/etc/fstab文件自动挂载该swap分区: /swapfile none swap sw 0 0
  • 9.
    挂载 • 分区在创建文件系统之后必须挂载到指定的目录进行访问, linux 下面使用mount命令进行挂载, 命令基本格式: mount -options device dir 其中device指定分区的名称, dir指定某个目录; 常用的选项有: -t 指定文件系统类型 -o 添加某些选项, 比如只读等 示例: mount -t ext3 /dev/sda1 /mnt/root 将文件系统为ext3的/dev/sda1分区挂载到/mnt/root目录, 挂载后可 以通过 /mnt/root目录访问该分区的内容. 其他: mount 显示所有的分区挂载 mount -a 重新挂载/etc/fstab中所有的分区 • 根分区 linux系统必须创建一个根分区并且挂载到根目录/下面, 在安装系统 时被要求指定.
  • 10.
    示例 • 示例中使用了基于文件的虚拟文件系统做为演 示, 重在展示文件系统的相关命令与操作: # 使用dd命令创建大文件, 这里50m dd if=/dev/zero of=tmp/vfs bs=1024 count=50000 # 基于该文件创建文件系统, ext3 mkfs -t ext3 tmp/vfs # 在/mnt目录下面创建一个挂载点 mkdir /mnt/vfs # 挂载虚拟文件系统 mount -t ext3 -o loop tmp/vfs /mnt/vfs # 进入挂载点, 作一些操作, 比如创建文件或者目录 cd /mnt/vfs # 查看当前分区的使用情况 df -h . # 卸载该文件系统 umount /mnt/vfs
  • 11.
    /etc/fstab - 概述 • 此文件描述了系统磁盘分区, 光驱, 以及其他虚拟文件系统的挂载情况, 文件中典型的一行如下: /dev/sda1 / ext2 defaults 1 1 各列的含义说明如下: 1, /dev/sda1 磁盘分区. 还可以是光驱设备, 比如/dev/cdrom, 虚拟文 件系统, 比如proc 2, / 挂载点 3, ext2 文件系统类型除了基本的文件系统之外还可以是虚拟文 件系统如proc, 或者swap 4, defaults 此列表示分区挂载选项, defaults表示全部默认. 选项说明如下: auto/noauto 是否在启动时自动挂载, auto为默认; user/nouser 是否只允许root用户mount该分区(nouser), nouser为默认; exec/noexec 是否允许执行该分区上的二进制文件, exec为默认; ro/rw 只读或者可读写, rw为默认; sync/async 同步/异步读写, 默认为async deafults表示的是rw, auto, nouser, async, exec.
  • 12.
    /etc/fstab - 概述 & procfs 5, 第五列是分区备份选项, 0表示不备份, 1表示进行备份; 6, 第六列是分区检查(fsck)选项, 0表示不进行检查, 非0表示对该分区执行fsck 的顺序, 由小到大. 说明: 通常情况下不要去手动修改fstab文件, 因为该文件的错误会导致系统无 法正常启动. 在必要时, 修改该文件之后使用mount -fav命令进行检查. • 进程文件系统procfs linux系统会将运行时的一些信息比如进程/内存使用/IO等挂载到一个虚拟 的进程文件系统中, 该挂载点通常为/proc目录, 这里列举该目录下一些比 较有用的文件: /proc/cpuinfo 系统cpu信息 /proc/meminfo 系统内存使用情况, free命令会读取此文件 /proc/version OS version /proc/partitions /proc/filesystems /proc/mounts 系统分区, 文件系统及挂载信息 /proc/stat 系统运行的统计数据 /proc/swaps 系统交换分区使用情况 /proc/uptime 系统自上次启动到当前的运行时间
  • 13.
    文件 - 文件类型 • linux有以下几种常见的文件类型: 普通文件 比如新建的文本文件, 压缩文件等; 使用ls –l命令查看时 出现-rw-r--r--字样的第一个-字符表示该文件是一个普通 文件; 目录文件 目录下面可以包含其他的文件或者目录, 使用ls命令查看 时第一个字符为d的文件是目录文件; 字符设备或者块设备文件 进入到/dev目录, 执行ls –l命令可以看到类似如下内容: crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty brw-r----- 1 root disk 3, 1 2006-04-19 /dev/sda1 以c开头的表示字符设备文件, 比如猫等串口设备; 以b开 头的表示磁盘, 光驱等设备;
  • 14.
    文件 - 文件类型 套接口文件(socket文件) 最常见的是在启动mysql服务器时会产生一 个mysql.sock文件, 使用ls –l命令查看该文件: srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock 以s字符开头, 这种文件类型了解即可; 符号链接文件(软链接文件) 这种文件在使用ls -l进行查看时, 会以字符l 开头, 它相当于windows系统下面的快捷方式. 使用”ln -s 源文件 新文件”命令创建符号链接.
  • 15.
    inode • inode 是‘index node’的简称, 中文”索引节点”, inode用于存储文件的元信息, 比如文件字节数, 文件数据块的位置, 拥有者, 所属组, ctime(inode上一次更改时间), mtime(文件上一 次修改时间), atime(文件上一次访问时间), 指向 该inode的文件数等, inode不包含文件的名称; • 每个文件都必须对应一个inode, 文件与inode之间是多对一 的关系, 即有可能多个文件的inode相同; 如果分区inode数 量已经用完, 则无法在该分区上创建文件, 使用”df -i 分区” 命令查看分区的inode使用情况, 示例: • 每个inode都对应一个编号, 使用”ls -i 文件名”命令查看文件 的inode编号;
  • 16.
    inode & 目录 • 在linux下面, 目录实际上也是一种文件, 目录 文件的内容是该目录包含的子文件/目录与 inode的映射关系, 使用ls -l命令则会访问子 文件/目录的inode信息, 并列举出来:
  • 17.
    文件链接 硬链接 & 软链接 • 在创建一个文件时, 会分配一个对应的inode; 在通常情况下 inode与文件是一对一的关系, 但是也可以创建多个文件使之指 向同一个inode; 创建文件硬链接就会出现这种情况, 使用如下命 令创建硬链接: ln 源文件名 目标文件名 示例: 可以看到给文件file1创建硬链接file2之后, 两者指向了同一个inode节点, 之后 在修改文件file1或者file2时实际上修改的都是同一份拷贝. • 使用如下命令创建软链接 ln -s源文件名 目标文件名 与硬链接不同的是, 软链接会分配另外的inode节点, 软链接文件包 含的是源文件的路径信息, 对软链接进行读写执行等操作实际上操 作的是源文件.
  • 18.
    inode的回收 • 对于磁盘的每一个分区, inode的数量都是有 限的, 另外inode存储了文件的元信息本身也 会占用一定的存储空间, 因此有必要对不再 被使用的inode节点进行回收; • 在指向inode节点的链接数归零之后inode会 被回收, 指向某个inode的链接数有可能大于 一, 每删除一个链接文件, 链接数减一.
  • 19.
    隐藏文件/目录 • 与windows不同的是, linux通过在文件名称 前面添加字符”.”来表示隐藏文件. 隐藏文件 通常被用于存储程序的配置信息, 用户登录 脚本等, 比如用户HOME目录下的.bash_profile 文件; • ls命令不会列出目录下面的隐藏文件或目录, 需要加上-a选项, 如图:
  • 20.
    当前目录 & 上级目录 • 通常linux文件系统上的每一个目录下面都有. 目录 和 ..目录, 其中前者表示当前目录, 后者 表示上级目录. 实际上这两者均是指向对应 目录的硬链接, 如下: • 经常使用”cd ..” 命令进入上一级目录.
  • 21.
    所有者 owner • 文件或者目录都有一个所有者(owner), 最开始 owner是创建者, 也可以通过chown命令更改所 有者. 使用ls -l命令查看所有者: 上图中红色区域的列表示文件的所有者, 这里 是root. • 可以使用chown命令更改文件/目录的所有者, 命令格式: chown 选项 用户名 文件/目录, 常用的选项: -R 递归更改目录下所有子目录/文件的所有者 chown -R demo tmp/
  • 22.
    所属组 owner group • 文件或者目录有对应的所属组, 最初的所属组 被设置为创建者的所属组, 可以通过chgrp命令 更改文件的所属组.使用ls -l命令查看所属组: 上图中红色区域的列表示文件的所属组, 这里 是root. • 可以使用chgrp命令更改文件/目录的所有者, 命 令格式: chgrp 选项 用户名 文件/目录, 常用的选项: -R 递归更改目录下所有子目录/文件的所有者 chgrp -R demo tmp/
  • 23.
    权限控制 - 概述 • 文件与目录的访问权限分读(r)/写(w)/执行(x), 另外针对不同的用户访 问权限会有不同, 比如某个文件对A用户是可写的, 但是对B用户却是只 读的. 使用ls -l命令查看文件的权限: 图中的红色框区域-rw-r--r--是文件的权限位, 下面按照顺序对该权限位 进行说明: - 表示文件的类型, -表示普通文件; rw- 所有者(u)权限, 这里的所有者是root用户, 权限是可 读写, 不能执行; 如果需要配置为可执行则应该是rwx; r-- 所属组(g)权限, 对于该组内用户的权限, 这里是只读; r-- 其他用户(o), 此用户既不是文件的所有者也不属于 文件的所属组. • 权限位可以使用数字表示, 以所有者权限为例, 权限的每一位如果不是- 则将该位置1, 否则置0; 比如rwx则对应111, 相应的10进制为7, rw-则是 6; 其他的权限位以此类推, 权限位rwxrwxrwx对应的是777; • linux通常将文件的权限设置为644 即rw-r--r--, 目录的权限则设置为755 即rwxr-xr-x
  • 24.
    权限控制 - chmod • 使用chmod命令修改文件/目录的权限, 该命令的格 式: chmod 选项 权限 文件/目录, 常用的选项有: -R 递归修改子文件/目录的权限 该命令可以采用如下形式: 1, 使用数字, eg: chmod 755 tmp/ 2, 修改指定用户或者组的权限, eg: chmod u+x test.sh # 修改用户权限为可执行 chmod g+w file.txt # 修改组权限为可写 chmod o-r file.txt # 修改其他用户权限 不可读 chmod +x file.sh # 所有的用户都将获得文件的可执行权限 chmod a+x file.sh # 与上相同
  • 25.
    权限控制 - 删除文件 • 用户对于文件的删除权限并不由文件本身 决定而是由文件所在目录的权限决定, 删除 文件的动作实际上修改的是所在目录的内 容, 因此用户需要对该文件所在目录有写权 限. 示例, 注意file.txt文件的权限位, 红色部 分修改所在目录其他用户的权限位可写: 切换为demo用户, 删除file.txt文件成功:
  • 26.
    权限控制 - 目录的可执行权限 • 目录的可执行权限决定了用户是否可以进 入到该目录及其子目录, 如果用户对指定目 录没有可执行权限则不能cd到该目录及其子 目录中, 示例, /root目录对其他用户不可执 行: 切换为demo用户, 执行cd /root
  • 27.
    权限控制 - 掩码 • 在创建文件或者目录时, 会分配一个默认的权 限位, 这是由当前进程的掩码决定的. 比如掩码 是000, 则目录的权限是777(rwxrwxrwx), 文件的 权限是666(rw-rw-rw-). 大多数情况下掩码设置 为022; • 使用umask命令查看或设置当前的掩码, 比如: • 在/etc/bashrc文件会使用umask命令对掩码进 行初始化设置, 用户在登录过程中, 该脚本文件 会被执行.
  • 28.
    常用命令 • pwd shell内置命令, 查看当前目录,示例: • cd shell内置命令, 切换目录, 常用用法: cd/cd ~ 切换至用户HOME目录 cd - 切换到前一个目录$OLDPWD cd .. 切换至上级目录 cd /path/to 切换到指定的路径 • ls 列举当前文件/目录的内容, 常用选项: -l 查看文件/目录的详细信息 -d 查看当前目录, 而不是目录下面的内容 -a 列出隐藏的文件或者目录 • touch touch用于创建一个普通文件, 文件被创建后字节数为0; • mkdir mkdir则用于创建一个空目录. 常用的选项: -p 如果需要创建的目录父目录不存在则自动创建; 示例:
  • 29.
    常用命令 • cp 复制文件或者目录, 命令格式: cp 源文件 目标文件 如果需要赋值目录, 则需要制定-r选项赋值目录以及下面的子文件/ 目录, 示例: • mv 移动文件或者目录到另一个位置或者对文件目录重命名. 命令格式: mv 源文件/目录 目标位置 mv 源文件/目录名 更改后的文件/目录名 示例: mv filename1 filename2 如果目的位置与源文件/目录在同一个文件系统上, 那么只 需要对父目录的内容进行更改即可(速度很快); 如果处在不 同的文件系统, 那么则会发生实质的文件拷贝操作.
  • 30.
    常用命令 • rm 删除文件或者目录, 如果删除的目录.命令格式: rm 文件/目录 常用选项: -f 强制删除force -r 递归删除子文件和目录recursively 如果需要删除的目录非空通常使用-rf选项; • rmdir 仅用于删除空目录, 如果目录非空则无法删除, 使用rm -rf进行删除. • cat 查看文件的内容, 命令格式: cat 文件名 • more 与cat类似用于查看文件的内容, 如果文件内容超过了一定的行数, 则按顺序一次只显示一屏, 此时终端的底部会出现”--More--”的字样, 使用空格键查看接下来的内容, q键退出. Note: less 命令与more类似.
  • 31.
    常用命令 stat • stat命令用于查看文件或者目录的inode信息, 该命令常用的选项 有: -c 指定输出的格式, 比如输出访问权限, 拥有者等 -t 简洁模式打印信息 与-c选项相应的常用格式有: %a 访问权限(八进制) %A 访问权限(rwx) %F 文件类型 %i inode标志 %h 文件的硬链接个数 %n 文件名 %s 文件字节数 %U 文件所有者名称 %x 文件的最后访问时间 %y 最后修改时间 %z 文件的最后改变时间 示例: stat -c %a file # 查看文件的访问权限, 输出644 stat -c %y file # 查看文件的最后修改时间 # 输出类似file’s size is 123 bytes stat -c "%n's size is %s bytes" file
  • 32.
    系统安装目录 • linux系统在安装时会在根目录/下面创建很多的系统子目录, 这 些子目录的组织与命名都是很规范的: / 根目录, 必须有一个根分区挂载在此目录下面; /bin 常用的可执行命令被放在此目录下面 , 比如ls, grep, awk等; /boot 此目录包含了与系统启动相关的文件, 比如GRUB, 系统核心等; /dev 设备文件目录, 前面介绍的磁盘/分区等设备文件放在此目录; /etc 系统配置文件目录, 比如分区表, 系统启动脚本, yum配置等; /lib 系统库文件目录; /mnt mount目录, 通常用于挂载其他的文件系统, 比如将vbox共 享目录挂载到此目录下面; /proc 挂载虚拟进程文件系统到此目录, 用于查看一些系统运行时 信息; /sbin 此目录用于存放可执行文件, 与/bin不同的是, 它通常用于 存放一些系统维护和管理的可执行文件, 比如关机重启等命 令.
  • 33.
    系统安装目录 /tmp 临时文件目录, 专用于存放某些临时文件 /usr用户目录, 用于存放各种用户程序, 比如apache, php 等通常会安装到此目录下面; /var 存放一些经常发生变化的文件, 比如系统日志, 邮件等; /root root用户的主目录; /home 系统除root外其他用户的HOME目录均创建在此目录下面. • 其他一些 比较常见的目录 /exports NFS输出文件系统目录; /opt 此目录通常用于软件安装, 比如安装oracle数 据库等;
  • 34.