1.Linux系统目录结构
目录树(directory tree), 这个目录树的启始点为根目录 (/, root);linux文件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/
路径名 说 明
/bin 最核心的操作系统命令所在位置
/boot 内核和内核加载所需要的文件位置
/dev 硬盘、伪终端、打印机等设备文件的位置
/etc 关键的启动文件和配置文件的位置
/home 普通用户默认的主目录(家目录)位置
/lib 库、共享库、部分C编译器的位置
/media 可移动设备文件系统的挂在点位置,例如:U盘、移动硬盘等
/mnt 可移动设备文件系统的临时挂在点位置,例如:U盘、移动硬盘等
/opt 可选的应用软件包位置,一般情况下,自己安装的软件可以考虑放在此位置
/proc 虚拟文件系统位置,所有正在运行进程的信息所在位置
/root 根用户(root用户)的主目录位置
/sbin 系统最小规模运行所需命令的位置
/tmp 临时目录,每次重启其中的文件就会消失
/usr 次要文件和命令所在位置
/usr/bin 大多数命令和可执行程序文件的位置
/usr/include 编译C程序时头文件的位置
/usr/lib 库,标准程序运行所需的支持库位置
/usr/lib64 库,64位标准程序运行所需的支持库位置
/usr/local 用户编写或安装的软件的位置,第三方安装包大部分安装到此位置
/usr/sbin 不太关键的系统运维管理命令的位置
/usr/share 多种系统共用内容的位置
/usr/share/man Man命令使用时的联机手册的位置
/usr/src 非本地软件包的源代码位置
/usr/tmp 更多的临时空间位置,重启后其中的文件依然存在
/var 系统专用的数据和配置文件的位置,例如:默认MySQL数据的位置为/var/lib/mysql
/var/adm 日志、系统设置记录、奇怪的管理信息的位置
/var/log 各种系统服务对应的日志文件的位置
/var/spool 邮件、打印机等使用的假脱机目录位置
/var/tmp 更多的临时空间位置,重启后其中的文件依然存在
ls /
列出当前目录
yum install -y tree 安装tree
tree /
列出所有根目录
FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态
|
因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分区则是在开机完成之后才会持续的进行挂载的行为。就是因为如此,因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分区去。那哪些目录不可与根目录分开呢?有底下这些:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分区。请背下来啊。
/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。
因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。 一般来说,/usr的次目录建议有底下这些:
目录 |
应放置文件内容 |
/usr/X11R6/ |
为X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。 |
/usr/bin/ |
绝大部分的用户可使用指令都放在这里。请注意到他与/bin的不同之处。(是否与开机过程有关) |
/usr/include/ |
c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档。 |
/usr/lib/ |
包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来进行服务器的设定,这些指令也不会经常被系统管理员操作, 那就会被摆放到这个目录下啦。要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生 |
/usr/local/ |
系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦。 你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib...的次目录 |
/usr/sbin/ |
非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon) |
/usr/share/ |
放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛。在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文件 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时区有关的时区文件 |
/usr/src/ |
一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。 |
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:
目录 |
应放置文件内容 |
/var/cache/ |
应用程序本身运作过程中会产生的一些暂存档 |
/var/lib/ |
程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去 |
/var/lock/ |
某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。 举例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片? 如果两个人同时刻录,那片子写入的是谁的数据?所以当第一个人在刻录时该刻录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用 |
/var/log/ |
非常重要。这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。 |
/var/mail/ |
放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。 |
/var/run/ |
某些程序或者是服务启动后,会将他们的PID放置在这个目录下 |
/var/spool/ |
这个目录通常放置一些队列数据,所谓的“队列”就是排队等待其他程序使用的数据。 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中。 |
由于FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。
2.ls命令
which ls
alias ls="ls --color"
其中颜色的含义如下:
1. 蓝色-->目录
2. 绿色-->可执行文件
3. 红色-->压缩文件
4. 浅蓝色-->链接文件
5. 灰色-->其他文件
-a 列出目录下的所有文件,包含以.开头的隐藏文件。
-A 显示出.和..以外的所有文件。
-d 显示目录的自身属性,而不显示目录下的文件。
-l 列出目录或者文件的详细信息
-h 与-l参数合用,以人可读取的方式显示文件大小,如1K,2M,3G
-i 显示文件或者目录的inode信息,即索引信息
-t 按修改时间排序显示文件或者目录(时间由近及远排序)
-r 与其他参数一起使用,使之反向排序
--color=auto 让输出的内容按照类别显示颜色(grep中也有改参数)
第一列:1 第一个字母为d时意味着该内容是目录,如上图中的linux目录;第一个字母为-时意味着该内容为文件;第一个字母为l时意味着该内容是个链接文件。
2 后面的9个字符代表文件或者目录的权限,字母r w x分别代表读,写,执行权限,其对应的权限数字分别为4 2 1.前3个代表文件或者目录的拥有这的权限,中间的3个代表文件或者目录的所有组的权限,最后的3个代表其他人访问文件的权限。
第二列:代表文件或者目录的链接数,即目录或者文件下还包含几个目录或者文件数。
第三列:代表文件或者目录的所有者。
第四列:代表文件或者目录的所有组。
第五列:代表文件或者目录的大小,单位为字节(byte)
第六列:代表文件或者目录的最后修改时间(使用[stat 文件名或者目录名] 用以查看文件或者目录的访问时间access,文件或者目录的修改时间modify,文件或者目录的状态改变时间change)
第七咧:代表文件名或者目录名
列出当前目录下的目录详细信息,而不显示文件,可通过ls -ld */命令
ls -il 文件或者目录的inode(索引)信息
ls -lt 以修改时间排序显示
ls -ltr 以修改时间反向排序
命令:ls -l t* 列出当前目录中所有以“t”开头的目录的详细内容,可以使用如下命令:
命令:ls -ltr s*列出目前工作目录下所有名称是s 开头的档案,愈新的排愈后面
计算当前目录下的文件数和目录数
命令:
ls -l * |grep "^-"|wc -l ---文件个数
ls -l * |grep "^d"|wc -l ---目录个数
3.文件类型
-:一般文件
d:目录文件
b:块设备文件
c:字符设备文件
l:链接文件
p:人工管道
s:套接口文件[如我们开启MySQL服务后,在/var/lib/mysql/下生成的mysql.sock文件,关闭MySQL服务后,这个文件就消失了]
我们用ls-al 可以查看当前目录下的所有文件,这是我们可以看到"."和".."这两个文件
其实"."就是代表当前目录
".."就是代表上级目录,因为Linux把任何东西都看成文件,所以就有"."和".."这两个文件了
chmod [-R] 权限 文件名