rootfs,linux目录结构,(第3天)

1:Linux根文件系统(root filesystem)的概念
linux内核启动的时候,会创建根文件系统(root filesystem 简称rootfs),根文件系统(rootfs)是被包含在根目录所在的分区下的文件系统,并且当系统启动的时候,所有其他的文件系统会被挂载到该根文件系统下。

分区是硬盘上逻辑独立的部分。文件系统是用于在计算机系统上组织文件的目录(也称为目录树)的层次结构。在Linux和其他类似Unix的操作系统上,目录以根目录开头,其中包含一系列子目录,每个子目录又包含进一步的子目录等。这个定义的一个变体是位于单个分区或磁盘上的目录(即,目录树)的整个层次结构的部分。

根文件系统(rootfs)的确切内容将根据计算机而有所不同,但是它们将包括引导系统所必需的文件,并使其达到可以安装其他文件系统的状态以及用于修复系统损坏的工具和从备份中恢复丢失的文件的状态。根文件系统(rootfs)的内容包括根目录以及包含/boot,/dev, /etc,/bin,/sbin和/tmp(用于临时文件)的子目录和文件的最小集合。

当系统以单用户模式启动时,只有根文件系统(rootfs)可用。单用户模式是引导受损系统的一种方法,该模式功能非常有限,可以进行维修。修复完成后,位于不同分区或不同介质上的其他文件系统可以挂载到(即附加到)根文件系统上,以恢复完整的系统功能。其中挂载其他文件系统的目录称为挂载点。

根文件系统通常应该很小,因为它包含关键文件和一个小的,不频繁修改的文件系统有更好的机会不会被破坏。损坏的根文件系统通常意味着系统从HDD不能引导(即不可启动),并且必须通过特殊方式(例如,从启动软盘)引导。

文件系统可以挂载在目录树中的任意位置;它不一定需要挂载在根文件系统上。例如,将A文件系统挂载在根文件系统上的挂载点是可能的(而且很常见),并且另外一个文件系统B挂载在A文件系统上的某个挂载点上。

2:FHS
LSB, FHS: (FileSystem Heirache Standard):定义了Linux操作系统中的主要目录及目录内容。在大多数情况下,它是一个传统BSD文件系统层次结构的形式化与扩充。
FHS由Linux基金会维护,这是一个由主要软件或硬件供应商组成的非营利组织,例如HP、Red Hat、IBM、和Dell。

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, 比如grub)都存放于此目录;一般关联到独立分区中
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序;
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序;
/lib:基本共享库文件,以及内核模块文件(/lib/modules);
/lib64:专用于x86_64系统上的辅助共享库文件存放位置;
/etc:配置文件目录(纯文本文件);
/home/USERNAME:普通用户家目录;
/root:管理员的家目录;
/media:便携式移动设备挂载点;
cdrom
usb
/mnt:临时文件系统挂载点;
/dev:设备文件及特殊文件存储位置;
b: block device,随机访问
c: character device,线性访问
/opt:第三方应用程序的安装位置;
/srv:系统上运行的服务用到的数据;
/tmp:临时文件存储位置;
/usr: universal shared, read-only data;(全局共享的,只读的数据)
bin: 保证系统拥有完整功能而提供的应用程序;
sbin:
lib:
lib64:
include: C程序的头文件(header files);
share:结构化独立的数据,例如doc, man等;
local:第三方应用程序的安装位置;
bin, sbin, lib, lib64, etc, share,include

/var: variable data files
cache: 应用程序缓存数据目录;
lib: 应用程序状态信息数据;
local:专用于为/usr/local下的应用程序存储可变数据;
lock: 锁文件
log: 日志目录及文件;
opt: 专用于为/opt下的应用程序存储可变数据;
run: 运行中的进程相关的数据;通常用于存储进程的pid文件;
spool: 应用程序数据池;
tmp: 保存系统两次重启之间产生的临时数据;

/proc: 用于输出内核与进程信息相关的虚拟文件系统;
/sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统;
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置;

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/etc
帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

4:Linux的文件类型:
- (f):普通文件;
d: 目录文件;
b: 块设备;
c: 字符设备;
l: 符号链接文件;
p: 管道文件;
s: 套接字文件;socket;

5:系统管理类命令
hat,poweroff,reboot
-f:强制关机
-p:切断电源

shutdown命令
shutdown [OPTIONS...] [TIME] [WALL...]
-r:reboot表示重启
-h:halt表示关机
TIME:
now: 立刻
+m: 相对时间表示法,从命令提交开始多久之后;例如 +3;
hh:mm: 绝对时间表示,指明具体时间;

6:用户登录信息查看命令
whoami: 显示当前登录有效用户;
who: 系统当前所有的登录会话;
w: 系统当前所有的登录会话及所做的操作;

7:bash的基础特性
(1):命令历史
history
    环境变量
    HISTSIZE:命令历史记录的条数;
    HISTFILE:~/.bash_history;
    HISTFILESIZE:命令历史文件记录历史的条数;

    history -d OFFSET    删除OFFSET条历史记录
    history -c    清空命令历史
    history 10   显示最近10条命令历史
    history -a    手动追加当前会话缓冲区的命令历史至历史文件中;

调用历史中的命令:
    !#: 重复执行第#条指令;
    !!:
    !string

调用上一条命令的最后一个参数:
    !$:
    ESC, .
    Alt+.

控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令;连续且相同方为“重复”;
ignorespace:忽略所有以空白开头的命令;
ignoreboth:ignoredups, ignorespace;

修改环境变量值的方式:export 变量名="值"
变量赋值:把赋值符号后面的数据存储于变量名指向的内存空间;

(2):命令补全
bash执行命令:
内部命令:
外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到即为要执行的命令;

直接补全:Tab,用户给定的字符串只有一条惟一对应的命令;
以用户给定的字符串为开头对应的命令不惟一,则再次Tab会给出列表;

(3)路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名;如果惟一:则直接补全;否则:再次Tab,给出列表;

(4)命令行展开
~: 展开为用户的主目录
~USERNAME:展开为指定用户的主目录
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b} 相当于 /tmp/a, /tmp/b
/tmp/{tom,jerry}/hi 相当于 /tmp/tom/hi, /tmp/jerry/hi

(5)命令的执行结果状态
成功
失败

bash使用特殊变量$?保存最近一条命令的执行状态结果:
0:成功
1-255:失败

bash程序的执行有两类结果:
程序的返回值;
程序的执行状态结果;

8:目录管理类命令:
cd, pwd, ls

mkdir, rmdir, tree

mkdir命令详解:
mkdir [OPTION]... DIRECTORY...
-p: 文件或目录存在时候不报错,且可自动创建所需的各目录;
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限;

tree命令详解:
-d: 只显示目录
-L level:指定显示的层级数目
-P pattern: 只显示由指定pattern匹配到的路径;

rmdir命令详解:
该命令只能删除空目录
rmdir [OPTION]... DIRECTORY...
-v: 显示过程;

练习:
(1) 如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a, /tmp/x/y2/b
mkdir /tmp/x/{y1,y2}/{a,b}
(2) 如何创建x_m, y_m, x_n, y_n
mkdir {x,y}_{m,n}
(3) 如何创建/tmp/bin, /tmp/sbin, /tmp/usr, /tmp/usr/bin, /tmp/usr/sbin
mkdir -p /tmp/{bin,sbin,usr/{bin,sbin}}

9:文本文件查看类命令
cat和tac

more  less  tail  head

more命令详解:
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示

less命令详解:
less [OPTIONS...] FILE...
操作方法同man命令一样

head命令详解:
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#:指定获取前#行

tail命令详解:
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:指定获取后#行
-f: 跟踪显示文件新追加的内容;

10:文件的时间戳管理工具
每个文件都会有metadata(元数据)和data
查看文件状态的命令:stat
文件的三个时间戳分别为:
        access time:访问时间,简写为atime,读取文件内容
        modify time: 修改时间, mtime,改变文件内容(数据)
        change time: 改变时间, ctime,元数据发生改变

touch命令:
touch [OPTION]... FILE...
-a: only atime     例如touch -a  log.txt
-m: only mtime
-t STAMP:  改变文件的时间
[[CC]YY]MMDDhhmm[.ss]   例如  touch -m -t 201406091323.59 log.txt
-c: 如果文件不存在,则不予创建


评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用