之前ramdisk制作传送门Linux文件系统——ramdisk根文件系统制作
今天来讲一下/etc目录下文件系统配置文件
/etc/inittab
inittab是init进程初始化时需要读取的配置文件。
/etc/inittab
文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的4个字段.具体如下:
identifier : run_level : action : process
identifier
登记项标识符,最多为4个字符.用于惟一地标识/etc/inittab文件中的每一个登记项
run_level
系统运行级,即执行登记项的init级别.用于指定相应的登记项适用于哪一个运行级,即在哪一个运行级中被处理.如果该字段为空,那么相应的登记项将适用于所有的运行级.在该字段中,可以同时指定一个或多个运行级,其中各运行级分别以数字0.1.2.3.4.5.6或字母a、b、c表示,且无需对其进行分隔.
action
动作关键字.用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作.
如sysinit:
只有在启动或重新启动系统并首先进入单用户时,init才执行这些登记项.而在系统从运行级1-6进入单用户方式时,init并不执行这些登记项."action”字段为“sysinit”的登记项在“run_level”字段不指定任何运行级.
process
所要执行的shell命令.任何合法的shell语法均适用于该字段.
示例demo:
# 系统启动时
::sysinit:/etc/init.d/rcS (1)
# 系统启动按下Enter键时
::askfirst:-/bin/login (2)
//::askfirst:-/bin/sh #设置成login需要登录,设置成sh可以直接进入命令行
# 按下Ctrl+Alt+Del键时
::ctrlaltdel:/sbin/reboot
# 系统关机时
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
# 系统重启时
::restart:/sbin/init
以上内容定义了系统启动时,关机时,重启时,按下Ctrl+Alt+Del键时执行的进程
(1)系统启动时会调用init.d/rcS
脚本进行初始化
(2)这里我设置的是login
,即需要用户登录才能进入命令行,设置成sh
则直接进入命令行
/etc/init.d/rcS
rcS是inittab中配置的系统启动时会执行的脚本。
示例demo:
#!/bin/sh
# 挂载 /etc/fstab 中定义的所有文件系统
/bin/mount -a
# 挂载虚拟的devpts文件系统用于用于伪终端设备
/bin/mkdir -p /dev/pts
/bin/mount -t devpts devpts /dev/pts
# 使用mdev动态管理u盘和鼠标等热插拔设备
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
# 扫描并创建节点
/sbin/mdev -s
# 根据HOSTNAME文件中的名字创建主机名
/bin/hostname -F /etc/sysconfig/HOSTNAME
以上内容定义了系统初始化脚本中的内容,各个步骤注释中写的很明白了。也可以自行添加别的步骤,当成shell脚本写就可以了。
/etc/fstab
fstab文件在执行/bin/mount -a
时会挂载fstab中所有节点。
/etc/fstab
文件中每个登记项的结构都是一样的
示例:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0 (1)
sysfs /sys sysfs defaults 0 0 (2)
ramfs /home/ramfs ramfs defaults 0 0 (3)
tmpfs /tmp tmpfs defaults 0 0
/dev/mmcblk4p2 /boot ext4 defaults 0 0 (4)
/dev/mmcblk4p3 /home/config ext4 defaults 0 0
(1)挂载proc文件系统到/proc目录下
(2)挂载sysfs文件系统到/sys目录下
(3)挂载ramfs和tmpfs,这两个都是基于ram的文件系统类型,掉电不保存。区别是ramfs会一直增长直到内存用尽,tmpfs可在挂载时限定大小。ramfs不会用swap,tmpfs会使用swap。可根据实际需求挂载,或者不挂载。
(4)mmcblk节点是我flash mmc的设备节点,虽然用的是ramdisk,但是也是需要flash来存储固件等的。这里可根据实际flash内容挂载即可。
/etc/profile
/etc/profile文件作用是设置环境变量,每个用户登录时都会运行它。
示例:
echo
echo -n "Processing /etc/profile... "
# 主机名
export HOSTNAME=linux
# 用户名
export USER=root
# 终端默认提示符,这里设置了颜色
export PS1="[\033[32m$USER\033[33m@$HOSTNAME:\033[0m\$PWD]\# "
# 环境变量
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
# 动态库路径
export LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
# no-op
echo "Done"
echo
以上内容定义了用户登录时的一些设置,设置主机名,用户名,设置命令行前缀,设置环境变量,动态库路径等。
/etc/passwd和/etc/shadow
linux系统中用来描述用户名和密码的文件是passwd和shadow文件,这两个文件都在etc目录下。passwd文件中存储的是用户的密码设置,shadow文件中存储的是加密后的密码。如果不需要账户密码登录,则不需要设置这两个文件。
passwd文件示例:
root:x:0:0:root:/root:/bin/sh
如果做的是ramdisk文件系统,则需要事先在打包资源中设置好密码,不然用户登录的时候设置密码也会提示错误,因为没法把用户设置的密码保存到flash中。而因为shadow文件是加密的,也不能在配置资源时直接明文设置密码。
这里我推荐的做法是,如在linux虚拟机上设置好root密码,拷贝虚拟机中的/etc/shadow文件到ramdisk资源中,然后打包成ramdisk。这样ramdisk根文件系统起来,需要登录时的密码就和虚拟机设置的密码一样了。
实际整合效果
登录界面:
登录后打印:
查看挂载点: