FHS
Linux 目录配置的依据--FHS(Filesystem Hierarchy Standard)
利用 Linux 来开发产品戒 distributions 的社群/公司个人实在太多了, 如果每个人都用自己的想法来配置档案放置的目彔,那举将可能造成徆多管理上的困扰。所以就有了FHS。
FHS 依据文件系统使用的频繁与否与是否允讲使用者随意更改, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录
- 不可分享的:自己机器上面运作的装置档案或者是与程序有关的 socket 档案等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了
- 不变的:有些数据是不会经常变动的,跟随着 distribution 而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机朋务配置文件等等
- 可变动的:经常改变的数据,例如登陆文件、一般用户可自行收受的新闻组等
事实上,FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
- / (root, 根目录):与开机系统有关;
- /usr (unix software resource):与软件安装/执行有关;
- /var (variable):与系统运作过程有关
这个 root 在 Linux 里面的意义真的很多~ 如果以『账号』的角度来看,所谓的 root 指的是『系统管理员!』的身份, 如果以『目录』的角度来看,所谓的 root 意是根目录,就是 /
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等操作有关。 由于系统开机时需要特定的开机软件、核心档案、开机所需程序、函式库等等档案数据,若系统出现错误时,根目录也必项要包含有能够修复文件系统的程序才行。所以在 FHS 的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
因此 FHS 标准建议:根目录(/)所在分割槽应该越小越好, 而应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成乀后才会持续的进行挂载的行为。那哪些目录不可以与根目录分开呢?有底下这些: 挂载
- /etc:配置文件
- /bin:重要执行档
- /dev:所需要的装置档案
- /lib:执行档所需的函式库与核心所需的模块
- /sbin:重要的系统执行文件
针对 FHS,各家 distributions 的异同
由于 FHS 仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件数据, 因此,在其他次目录层级内,就可以随开发者自行来配置了。举例来说,CentOS 的网络设定数据放在/etc/sysconfig/network-scripts/ 目录下,但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目录下,目录名称可是不同的呢!不过只要记住大致的 FHS 标准,差异性其实有限!
文件目录
Linux的文件系统是采用层级式的树状目录结构(是没有像window下的C,D盘之分的)。结构的最上层是根目录/,然后在此目录下再创建其他目录
根目录下面有以下子目录
- /root 主要存放root用户的相关文件,也就是root登陆进去后的默认目录
- /boot 放置开机会使用到的目录,包括 Linux 核心档案以及开机选单与开机所需配置文件等等。 Linux kernel 常用的文件名为:vmlinuz,如果使用的是 grub 这个开机管理程序, 则还会存在/boot/grub/这个目录!(非常重要,破坏之后,系统无法进入)
- /home 主要用来存放普通用户的相关文件。新增一个一般使用者账号时, 默讣的用户家目彔都会到这里来。
- /bin 存放普通命令(常用命令)的目录。可以被 root 和一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash 等等。
- /sbin 用来存放具有一定权限才可以使用的命令
- /lib 系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的指令会呼叫的函式库而已。 尤其重要的是/lib/modules/这个目录, 因为该目录会放置核心相关的模块(驱动程序)!
- /mnt 默认用来挂载光驱和软驱的文件夹(也可以放在其他地方)
- /etc 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启动文件,环境变量,mysql等。一般来说,这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有 root 有权力修改。FHS 建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。
- /dev 在 Linux 系统上,任何装置与接口设备都是以文件的型态存在二这个目录当中的。 你只要透过存取这个目录底下的某个文件,就等于存取某个装置~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等
- media media 是『媒体』的英文,这个/media 底下放置的就是可移除的装置! 包括软盘、光盘、DVD 等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom 等等
- /mnt 如果想要暂时挂载某些额外的装置,一般建议可以放置到这个目录中。 在早时候,这个目录的用途与/media 相同!只是有了/media 之后,这个目录就用来暂时挂载用了
- /srv srv 可以规为『service』的缩写,是一些网络服务启动后,这些服务所需要取用的数据目彔。 常见的服务例如 WWW, FTP 等等。举例来说,WWW 朋务器需要的网页资料就可以放置在/srv/www/里面。
- /tmp 这是让一般用户或者是正在执行的程序暂时放置档案的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目彔啊! 因为FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除!
- /opt 这个是给第三方协力软件放置的目录。什么是第三方协力软件啊? 举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到 Linux 系统中,因此 KDE的软件就建议放置到此目录下了。
- /lost+found 这个是使用标准的 ext2/ext3 文件系统格式才会产生的一个目彔,目的在于文件系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘二/disk 中,那在这个系统下就会自动产生一个这样的目录 /disk/lost+found
- /proc 这个目录本身是一个『虚拟文件系统(virtual filesystem)』!他放置的数据都是在内存中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等。因为这个目彔下的数据都是在内存当中, 所以本身不占任何硬盘空间
- /sys 这个其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记彔不核心相关的信息。 包括目前已加载的核心模块不核心侦测到的硬件装置信息等等。这
个同样不占硬盘容量!
- /usr 安装一个软件的默认文件夹
很对人都会认为/usr 为 user 的缩写,其实 usr 是 Unix Software Resource 的缩写, 也就是『Unix 操作系统软件资源』所放置的目录,而不是用户的数据啦!这点要注意。 FHS 建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目彔,而不要自行建立该软件自己独立的目彔。
- /var 存放经常变化的数据 (比如socket)
ls
使用命令ls 或者 dir查看
Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容;
查看详细信息
ls -l 或者 ls -lih
解释:
第一字段:inode
第二字段:文件种类和权限
第三字段: 包含的文件个数
第四字段: 属主;
第五字段:所归属的组;
第六字段:文件或目录的大小;
第七字段和第八字段:最后访问或修改时间;
第九字段:文件名或目录名
比如第一个bin文件夹
inode 的值是:524293
文件类型:
- 普通文件(regular file)
d 目录(directory)
l 连接文件(link)
文件权限: Linux用户权限
硬链接个数: 文件是1,文件夹就是它所包含的文件个数
文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root;
文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;
文件大小:4K
访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的;
文件权限说明
文件的权限有r,w,x三种,w就不说了,就是更改的意思,那么r和x哟时候就傻傻分不清了
其实r就是读的意思,就是说可不可以读里面的内容,x就是执行的意思,也就是能不能打开它。
对于文件file.doc,如果有 x ,不管有没有r的权限, vi file.doc都可以打开这个文件,都可以通过 ls file.doc -l 查看详情。只不过如果r权限没有的话,打开之后是空的,看不到任何东西。
对于目录 mydir ,如果有x,不管有没有r权限,都可以使用 cd mydir 进入这个目录,只不过如果没有r 权限 不能通过 ls 查看目录下的详情
比如用户xiaoming 有一个文件夹mingdir ,对于other的权限是 --x ,里面有一个文件 file.txt 对于other的权限是 --x
如果xiaoli进入了xiaoming的目录,使用cd mingdir是可以进入mingdir里面的(因为有权限x)
但是在目录mingdir使用 ls 是不行的,因为没有权限r
但是在目录里面使用 ls file.txt -l 是可以的
使用vi file.txt 也是可以的,但是打开之后看不到任何东西
但是,如果对于文件file.txt只有r权限没有x权限,vi file.txt 是可以打开文件并读到内容的。
而对于目录mydir,只有r权限没有x权限 cd mydir 是进不去的,但是ls mydir 可以看到子目录
所以说,对文件和目录的执行权限都是打开
对文件的查看是指查看内容,对目录的查看是指查看子目录
文件扩展名
基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与x有关, 与文件名根本一点关系也没有。这个观念跟Windows 的情况不相同!在Windows 底下, 能被执行的档案扩展名通常是 .com .exe .bat 等,而在Linux底下,只要你的权限当中具有 x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行!但是能执行与能执行成功是不同的。虽然扩展名不起作用但是我们还是希望可以由扩展名了解此文件是什么东西。所以。。。
.sh : 脚本或者批处理文件(scripts)
.Z .tar .tar.gz .zip .tgz : 经过打包的压缩文件。
.html .php :网页相关文件。
文件相关命令
pwd 查看位置
例如:当用户登录时,就出在home文件夹的自己目录下面
当登录进去后的是桌面模式:
当登录进去后是控制台模式:
当使用root登录时
ls 列出文件和目录
ls -a显示隐藏文件
ls -l 显示长列表格式
ls -al 显示隐藏文件,同时以长列表显示
ln 建立符号连接
ln -s 源 目标
ln -s /etc/inittab inittab inittab指向实际文件/etc/inittab
more 显示文件内容,带分页
less 显示文件内容带分页
比如查看install.log非常长,可以分页显示查看的话
可以分页查看
点击 q 退出查看模式
grep 在文本中查询内容
加上属性 -n 可以显示关键字在哪一行。
l 管道命令
在Linux 和UNIX系统中 l 就是管道命令。就是把上一个命令的结果交给 l 的后面的命令处理。在有些情况下还可能不止一个
比如etc文件夹下文件非常之多。想分页查看包含的所有文件
find 查找文件内容
根据文件名称查找
find / -name java,java
一段时间内被存取或者变更的文件或目录
find / -amin -10 十分钟内存取的文件后者目录
find / -atime -10 十小时内存储的文件或目录
find / -cmin +10 十分钟前更改过的文件或者目录
搜索指定大小的文件
fimd / -size +10K
重定向命令
ls -l > a.txt 列表的内容写入到文件a.txt中(如果没有这个文件就创建,如果有就覆盖写)
ls -al >> aa.txt 列表的内容追加到文件aa.txt末尾
创建和删除文件夹
mkdir /home/u1 创建文件夹/home/u1 (即在/home目录下创建了文件夹u1)
mkdir -p dir/dir0/dir1/dir2,只需加上-p参数,就可以去递归创建所需目录,即创建目录及其子目录。
rmdir /home/u1 表示删除/home/u1目录(即删除u1文件夹,这里文件夹即目录),这里一个目录被删除前必须是空的,可以用 rm -r 替代。
mv移动文件和改文件名
rm删除文件和目录(注意是文件和目录都有)
rm -rf * 删除所有内容(包括目录和文件)r递归 f强制
ls -lrt ls是显示命令,-l表示显示详细属性,-t表示按时间排序,-r反向排序
创建和删除文件
vi
vi Filename
如果file已存在,则打开源文件,如果不存在,新建,并进入编辑界面
进入vi以后,输入内容,最后按一下esc,再按冒号,输入wq就保存退出了。
Linux不区分文本和二进制的,也不需要 .txt
touch
touch fileName
如果file不存在,则新建一个空文件,且在目录下可以看到,如果存在,就会只修改文件的时间戳
如图新建一个mytest.txt文件
touch创建多个文件,用空格分开
Touch 命令主要就是用来修改文件的访问时间和修改时间。
为什么我们需要去改变时间戳呢?如果是一个全球范围的开源项目,那么时间戳可能变得很重要。编译源代码文件可能需要同一地区的时间戳。如果未统一,程序可能会编译失败。
最简单的使用 touch 命令。只需键入:
touch mytest.txt
就改变了文件的时间戳
查看一个文件的详细信息
stat
如果现在我们要只改变访问时间,我们需要使用-a选项。
只修改修改时间我们可以使用-m选项来实现
自定义时间戳,使用-t选项实现
rm(remove) 删除文件或目录。
语 法:rm [-dfirv][--help][--version][文件或目录...]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。
参 数:
-d或–directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或–force 强制删除文件或目录。
-i或–interactive 删除既有文件或目录之前先询问用户。
-r或-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
移动,复制文件和文件夹
cp 复制命令
cp -r dir1 dir2 递归复制命令(复制子目录信息)
mv 移动文件和改文件名
比如说把root目录下的一个文件移动和复制到mytest用户下,其实就是把文件移动到目录home/mytest下面。
但是在用户MyTest中查看文件,文件的属主和权限是没有变的。
也就是说mytest用户依然不能编辑此文件。
绝对路径与相对路径
根据文件名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法依据是这样的:
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 戒 ../../home/dmtsai/ 等等。
. :代表当前的目录,也可以使用 ./ 来表示;
.. :代表上一层目录,也可以 ../ 来代表。
这个 . 不 .. 目彔概念是重要的,常常会看到 cd .. 或者 ./command 之类的指令下达方式, 就是代表上一层不目前所在目录的工作状态
特殊目录
简单说明一下这几个特殊目录意义是
其实 cd mytest 和cd ./mytest是一样的
几个问题
1. /bin 与/usr/bin 目彔所放置的执行文件有何不同处?
/bin 主要放置在开机时,以及进入单人维护模式后还能够被使用的指令,而/usr/bin 则是大部分软件提供的指令放置处。
2 请说明/bin 与/sbin 目录所放置的执行文件有何不同处?
/bin 放置的是一般用户惯用的指令,而/sbin 则是系统管理员才会使用到的指令。不过/bin 与/sbin 都与开机、单人维护模式有关。 更多的执行文件会被放置到/usr/bin 及/usr/sbin 底下。
3. 早期的 Unix 系统文件名最多允讲 14 个字符,而新的 Unix 与Linux 系统中,文件名最多可以容讲几个字符?
由于使用 Ext2/Ext3 文件系统,单一文件名可达 255 字符,完整文件名 (包括路径) 可达 4096 个字符
4 当一个一般档案权限为 -rwxrwxrwx 则表示这个档案的意义为?
任何人皆可读取、修改与编辑、可以执行,但不一定能删除。
5 Linux 传统的文件系统为何?此外,常用的 Journaling 文件格式有哪些?
传统文件格式为:ext2,
Journaling 有 ext3 及 Reiserfs 等
6. /var/log:摆放系统注册表档案的地方
7. var主要存放动态文件,temp存放临时文件