在博文开始,先放出centos6.8和centos7.2的根目录结构,大家可先做对比,看有哪些不同。有个直观的印象,下面我们来详细的讲解linux系统的文件结构。

查看centos6.8和centos7.2 的根文件列表:

[root@wen-7 /]# ls

bin   dev  home  lib64  mnt  proc  run   srv  tmp  var

boot  etc  lib   media  opt  root  sbin  sys  usr

[root@wen-6 /]# ls

bin   cgroup  etc   lib    lost+found  misc  net  proc  sbin     srv  tmp  var

boot  dev     home  lib64  media       mnt   opt  root  selinux  sys  usr

不一样的目录不是标准目录,不符合FHS(文件系统分层标准


一、文件系统

1.概论

文件和目录被组织成一个单根倒置数结构

文件系统从根目录开始,用“/”表示

根文件系统(rootfs):root filesystem

文件系统大小写不敏感,linux本身操作系统大小写敏感

以 。开头的文件为隐藏文件

路径分隔符为 “/”

文件有两类数据:

 元数据:metadate

 数据:date

存放数据内容的地方,叫数据块(date block) 是 linux 的最小的基本数据单位 4096字节为1单位

文件系统分层结构:LSB Linux Standard Base

文件名规则:

包括路径在内文件名称最长4095字节,用/分隔的路径不能超过255个字节

文件颜色:

   蓝色-->目录            文件格式以d打头 

   绿色--->可执行文件   文件格式以p打头 

   红色--->压缩文件     文件格式以p打头 

   浅蓝色-->链接文件   文件格式以 "l"打头 

   灰色--->普通文件     文件格式以p打头 

   粉色--->套接字   文件格式以s打头   进程间通信使用

   浅×××---> 管道文件    文件格式以p打头 

   ×××黑底-->设备文件   文件格式为C大头

标准文件系统(ext4),文件名称大小写敏感,如:MAIL Mail mail mAil

     

2.文件系统结构

  1. 根文件结构

    系统基础之文件结构及is cd详解_is

2.目录结构:

/bin:供所有用户使用的基本命令程序文件;

/sbin:供系统管理使用的工具程序;

/boot:引导文件(initramfs,iniitrd)存放目录  内核文件(Vmlinuz),引导加载器(bootloader,grub)都存放在此处

/dev:存储特殊文件或设备文件

    b:块设备文件     block device 随机访问,块设备有缓存,物理设备

    c:字符设备文件character device  顺序访问,没有缓存

    空设备:/dev/null /dev/zero

    hexdump 命令:查看二进制文件,把二进制转化为十六进制

    xxd:   

    $RANDOM  :   环境变量     随机整数  0-32767  echo ¥RANDOM

/etc:系统程序的配置文件目录 只能为静态;

/home:普通用户家目录的集中位置 ;一般每个普通到的家目录默认为此目录下雨用户名同名的子目录:/home/USERNAME ;

/root:管理员用户家目录; 建议不用管理员登录

/run:系统运行合法信息;

/proc:用于输出内核与进程信息相关的虚拟文件系统,他们多为内核参数;

/lib:为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库文件以及为内核提供内核模块(/lib/modules)  ;

     libc.so:动态链接c库;

     ld*:运行时链接器/加载器;

      modules:用于存储内核模块的目录;

/lib64:专用于x86_64系统上的共享库文件存放位置   有一些文件仍放在/lib下

media:便携式移动设备挂载点  centos6默认  ;

/mnt:临时文件系统挂载点;

/opt:第三方非关键性应用程序的安装位置;

/srv:当前主机为运行的服务提供的数据‘;  

/tmp:临时文件存储位置    所有用户可执行写入操作,有特殊权限     30天清理;

/sys:用于输出当前系统上硬件设备相关信息虚拟文件系统;/proc的分支,能提供更为丰富的接口

    其主要作用: 为linux统一设备模型提供管理接口

    https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/ 参考文档 

   例:

     添加硬盘后,不同重启设备识别,扫描硬盘即可:

      echo "- - - " >  /sys/class/scai_host/host2/scan     扫描硬件

      ls  /dev/sd*             

/selinux:security enhanced Linux,selinux相关的安全策略等信息的存储位置

/usr: universal shared read-only date       不允许普通用户有写权限

  bin:保证系统拥有的完整功能而提供的应用程序

  sbin:

  lib    32位使用    为/bin /sbin提供库文件

  lib64:只存在64位系统   为/bin /sbin提供库文件

  include:C程序的头文件(header files)

  share:结构化独立的数据,例如:doc。

  src:程序源码文件的存储位置

  local: 第三方应用程序的安装位置   另一个层级目录

      让系统管理员安装本地应用程序,也通常用于安装第三方程序

       bin,sbin,lib,lib64,etc,share

       /usr/bin存放应用程序,/usr/share存放共享数据,/usr/lib存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。

        usr/local:存放软件升级包。/usr/share/doc:系统说明文件存放目录

        /usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间

        /usr/share/dict/words linux 字典文件

/var:variables date files 存储经常发生变化的数据的目录

   cache:应用程序缓存数据目录

    lib:库文件

    local:应用程序文件

    run: 程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间

    log:日志文件


3.linux上的应用程序的组成部分

二进制程序: /bin,/sbin,/usr/bin,/usr/sbin,/usr.local/bin,/usr/local/sbin

库文件:    /lib,/lib64,/usr/lib,/usr/lib64 /usr/local/lib,/usr/local/lib64

配置文件:/etc/,/etc/DIRECTORY,/usr/local/rtc

帮助文件: /usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc

4.RHEL7 目录变化

/bin/和/usr/bin 

/sbin和/usr/sbin

/lib和/usr/lib

/lib64和/usr/lib64                   

5.显示当前工作目录

每个shell和系统进程都有一个当前的工作目录

CWD:current work directory

显示当前shell CWD的绝对路径

#pwd:printing workingdirectory

显示上一次shell CWD的绝对路径

#OLDPWD       

6.绝对路径和相对路径

绝对:

以正斜号开始

完整的文件的位置路径

可用于任何想指定一个文件名的时候

例:  /etc/sysconfig/network-scripts/ifcfg-eth0

相对:

不以斜线开始

指定相对当前的工作目录位置  以当前位置为参照 

可以作为一个简短的形式指定一个文件名 

例: [root@wen-6 network-scripts]# cd  /etc/sysconfig/

  [root@wen-6 sysconfig]# cd network-scripts/


3.更改目录;

1.cd:改变目录

为绝对火相对路径:

cd /home/joshua/work

cd  project/docs

到上一级目录

cd  ..

到用户主目录

cd

到以前的工作目录;

cd - 

特殊选项:

 -p:到真实物理路径

例: cd  -p bin     对链接目录使用

[root@wen-7 bin]# ll -d /bin

lrwxrwxrwx. 1 root root 7 7月  19 19:00 /bin -> usr/bin

[root@wen-7 bin]# cd -p  /bin

-bash: cd: -p: 无效选项

cd: 用法:cd [-L|[-P [-e]]] [dir]

[root@wen-7 bin]# cd -P  /bin

[root@wen-7 bin]# pwd

/usr/bin

相关的环境变量:

PWD:当前目录

OLDPWD:上一次所在目录路径          

2.ls:列出目录内容:

文件和目录名称可以是绝对的(表示它们以 / 开头),也可以是与当前工作目录相对的(表示它们不是以 / 开头)。文件或目录的绝对路径包含一个 /,后跟 0 或多个目录名称,每个名称后跟另一个 /,然后是最终的名称。

给定一个与当前工作目录相对的文件或目录名称,简单地串联工作目录的绝对名称、/ 和相对名称。例如,创建的目录 lpi103-2 是在我的主目录 /home/ian 中创建的,所以它的完整或绝对路径是 /home/ian/lpi103-2。

您可以使用 pwd 命令显示当前工作目录的名称。它通常还可用在 PWD 环境变量中。清单 1 展示了 pwd 命令的使用,以及使用 ls 命令列出此目录中的文件的 3 种不同方式。

[root@wen-7 ~]# echo "$PWD"
/root
[root@wen-7 ~]# ls
passwd.bak  shell
[root@wen-7 ~]# ls `$PWD`
-bash: /root: 是一个目录
passwd.bak  shell
[root@wen-7 ~]# ls "$PWD"
passwd.bak  shell
[root@wen-7 ~]# ls /root
passwd.bak  shell
[root@wen-7 ~]#

您可以看到,可以提供相对或绝对目录名称作为 ls 命令的参数,该命令将列出此目录的内容,下面是ls命令的详细用法。

ls:列出当前目录的内容或指定目录

用法:

  ls [options] [file_or_dirs]

Example:

  ls -a:包含隐藏文件

  ls -l:显示额外信息

  ls -R:目录地递归显示

  ls -ld:目录和符号链接信息

  ls -1(数字):分行显示

  ls -S:从大到小排序

  ls -h:以易读的方式显示文件大小

  ls -i: 显示 indoe号 

  ls -d:只显示当前目录                   

清单 2 .使用 ls -l 和 -a 选项显示所有文件的常用的格式化清单,包括 . 和 .. 目录条目。

[root@wen-7 ~]# ls -l
总用量 8
-rwSr--r-- 1 root root 2620 7月  24 10:10 passwd.bak
drwxr-xr-x 2 root root 4096 7月  23 14:57 shell
[root@wen-7 ~]# ls -la
总用量 96
dr-xr-x---. 11 root root  4096 7月  26 23:35 .
dr-xr-xr-x. 17 root root  4096 7月  19 23:05 ..
-rw-------.  1 root root 26888 7月  26 09:47 .bash_history
-rw-r--r--.  1 root root    18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root   176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root   176 12月 29 2013 .bashrc
drwx------. 17 root root  4096 7月  26 09:49 .cache
drwxr-xr-x. 17 root root  4096 7月  26 09:49 .config
-rw-r--r--.  1 root root   100 12月 29 2013 .cshrc
drwx------.  3 root root    24 7月  19 11:40 .dbus
-rw-------.  1 root root    16 7月  19 12:45 .esd_auth
drwx------   2 root root     6 7月  24 22:21 .gvfs
-rw-------.  1 root root  3120 7月  26 09:49 .ICEauthority
drwx------   3 root root    38 7月  20 17:53 .kde
-rw-------   1 root root    56 7月  25 18:55 .lesshst
drwx------.  3 root root    18 7月  19 12:45 .local
drwxr-xr-x   4 root root    37 7月  19 16:09 .mozilla
-rwSr--r--   1 root root  2620 7月  24 10:10 passwd.bak
drwxr-xr-x   2 root root  4096 7月  23 14:57 shell
-rw-r--r--.  1 root root   129 12月 29 2013 .tcshrc
-rw-------   1 root root  6501 7月  26 23:35 .viminfo
drwxr-xr-x   2 root root    74 7月  26 09:48 .vnc
-rw-------   1 root root    52 7月  26 09:48 .Xauthority

在 清单 2 中,第一行显示了列出的文件所使用的磁盘块总数 (96)。剩余行显示目录条目的信息。

*第一个字段(在本例中为 drwxrwxr-x 或 -rw-rw-r--)告诉我们,该文件是目录 (d) 还是常规文件 (-)。您还能够看到一些特殊文件(比如 /dev 文件系统中的文件)的符号链接 (l) 或其他值。可以在教程创建和更改硬链接和符号链接 中了解符号链接的更多信息(参见 系列路线图)。类型的后面是所有者、所有者所在组的成员和每个人的 3 组权限(比如 rwx 或 r--)。这 3 个值分别表示用户、组或每个人拥有读 (r)、写 (w) 或执行 (x) 权限。其他用法(比如 setuid)已在教程 管理文件权限和所有权 中介绍。

*下一个字段是一个数字,它会告诉您该文件的硬链接 数量。我说过 inode 包含文件的信息。该文件的目录条目包含文件的 inode 硬链接(或指针),所以列出的每个条目都至少应该拥有一个硬链接。目录条目中有一个 . 条目和针对每个子目录条目的一个条目。所以我们可以从 清单 2 看到,我的主目录(表示为 ..)包含许多子目录,因为它有 15 个硬链接。

*接下来的两个字段是文件的所有者和所有者的主要组。一些系统(比如 Red Hat 或 Fedora 系统)默认情况下为每个用户提供了不同的组。在其他系统上,所有用户都可以位于一个或一些组中。

*下一个字段包含文件的长度(以字节为单位)。

*倒数第二个字段包含最后修改的时间戳。时间戳格式取决于您的语言环境和日期本身。在我的语言环境中,从今年开始到现在的天数的时间戳显示为 3 个字符的月份缩写、一月中的第几天和 HH:MM 格式的时间。更老的文件或具有未来的日期的文件会使用年份取代 HH:MM 组件。您可以在下面的 接触文件 下看到更多示例。

*最后一个字段包含文件或目录的名称。

清单3,使用ls 命令的 -i 选项将显示您的 inode 数量 文件名前面的数字就是inode。配合数字1选项,可以让信息分行显示,

[root@wen-7 ~]# ls -i1
72259313 passwd.bak
73593312 shell

清单4,列出文件的访问时间和修改时间

[root@wen-7 ~]# ll --time=atime passwd.bak 
-rwSr--r-- 1 root root 2620 7月  25 16:41 passwd.bak
[root@wen-7 ~]# ll --time=ctime passwd.bak 
-rwSr--r-- 1 root root 2620 7月  25 16:41 passwd.bak

当读取文件后,atime不会轻易改变,只有当atime时间大于24小时没有发生改变或者atime比mtime时间要旧,两个条件满足之一,atime时间才会改变,也可以配置atime永不改变 使用命令chattr +A file来锁定文件的Atime时间,使用命令stat+file_name可以查看文件的详细信息,包括文件的时间戳   

                

3.centos 6 的神奇目录       

[root@wen-6 ~]# cd /misc/

[root@wen-6 misc]# cd cd

[root@wen-6 cd]# ls

CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6

EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6

EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6

GPL              repodata                  TRANS.TBL

p_w_picpaths           RPM-GPG-KEY-CentOS-6

[root@wen-6 cd]# mount 

/dev/mapper/vg_wen6-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/sr0 on /mnt type iso9660 (ro)

/dev/sr0 on /misc/cd type iso9660 (ro,nosuid,nodev)  自动挂载光盘

            

                        

作业:

1.博客

2.课堂练习 命令操作

3.

显示隐藏文件 只显示隐藏 

root@wen-7 ~]# ls -d .*
.              .bash_logout   .cache   .dbus      .ICEauthority  .local    .viminfo
..             .bash_profile  .config  .esd_auth  .kde           .mozilla  .vnc
.bash_history  .bashrc        .cshrc   .gvfs      .lesshst       .tcshrc   .Xauthority

只显示某目录下的目录列表                    

[root@wen-7 ~]# ls
passwd.bak  shell
[root@wen-7 ~]# ls -F| ls -d */
shell/


以上是我个人对文件结构的理解和对ls,cd命令使用的详解,还有一些细节没有表达清楚,以后会在逐渐补充。