在博文开始,先放出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.文件系统结构:
根文件结构:
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命令使用的详解,还有一些细节没有表达清楚,以后会在逐渐补充。