Let's go!!!!!
分类: LINUX
2013-05-31 19:54:24
linux根文件系统中一般有下面的几个目录:
/bin
该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
/bin目录下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、[、test等。其中“[”命令就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。
/sbin 目录
该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
/sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck、init等,自己安装的系统命令放在/usr/local/sbin目录下。
/dev目录
该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*等。
/etc目录
该目录下存放着系统主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在中,这些内容可以大为精减。
/lib目录
该目录下存放共享库和可加载(),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。
/home目录
系统默认的用户文件夹,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件
/root目录
系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。
/usr目录
/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在中可以精减。
/var目录
与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
/proc目录
这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由
临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
/mnt目录
用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、移动存储设备等。
/tmp目录
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。
内核分区表:
0x000000000000-0x000000100000 : "mtdblock0 u-boot 1MB"
0x000000100000-0x000001000000 : "mtdblock1 kernel 15MB"
0x000001000000-0x000002400000 : "mtdblock2 ramdisk 20MB"
0x000002400000-0x000003800000 : "mtdblock3 cramfs 20MB"
0x000003800000-0x000006000000 : "mtdblock4 jffs2 20MB"
0x000006000000-0x000008800000 : "mtdblock5 yaffs2 40MB"
0x000008800000-0x00000b000000 : "mtdblock6 ubifs 40MB"
0x00000b000000-0x00000e200000 : "mtdblock7 apps 50MB"
0x00000e200000-0x000011400000 : "mtdblock8 data 50MB"
1.首先创建目录树框架
[lingyun@localhost rootfs]$ tree
.
|-- apps
|-- bin
|-- data
|-- dev
|-- etc
| `-- init.d
|-- lib
|-- mnt
| |-- dev
| |-- nfs
| |-- sdc
| `-- usb
|-- proc
|-- root
|-- sbin
|-- sys
|-- tmp
|-- usr
| |-- bin
| |-- lib
| |-- sbin
| `-- share
`-- var
2.在/dev目录下创建设备节点:
[lingyun@localhost dev]$ sudo mknod -m 755 console c 5 1
[lingyun@localhost dev]$ sudo mknod -m 755 null c 1 3
[lingyun@localhost dev]$ sudo mknod -m 755 ttyS0 c 4 64
[lingyun@localhost dev]$ sudo mknod mtdblock0 b 31 0
[lingyun@localhost dev]$ sudo mknod mtdblock1 b 31 1
[lingyun@localhost dev]$ sudo mknod mtdblock2 b 31 2
[lingyun@localhost dev]$ sudo mknod mtdblock3 b 31 3
[lingyun@localhost dev]$ sudo mknod mtdblock4 b 31 4
[lingyun@localhost dev]$ sudo mknod mtdblock5 b 31 5
[lingyun@localhost dev]$ sudo mknod mtdblock6 b 31 6
[lingyun@localhost dev]$ sudo mknod mtdblock7 b 31 7
[lingyun@localhost dev]$ sudo mknod mtdblock8 b 31 8
3.在var 目录下创建符号链接文件:
[lingyun@localhost var]$ ln -s ../tmp lock
[lingyun@localhost var]$ ln -s ../tmp log
[lingyun@localhost var]$ ln -s ../tmp run
[lingyun@localhost var]$ ln -s ../tmp tmp
[lingyun@localhost var]$ ls -l
total 0
lrwxrwxrwx 1 lingyun trainning 6 May 27 13:39 lock -> ../tmp
lrwxrwxrwx 1 lingyun trainning 6 May 27 13:39 log -> ../tmp
lrwxrwxrwx 1 lingyun trainning 6 May 27 13:39 run -> ../tmp
lrwxrwxrwx 1 lingyun trainning 6 May 27 13:39 tmp -> ../tmp
/var/tmp
比/tmp大或需要存较长时间的临时文件.
/var/lock
锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.
/var/log
各种程序的log文件,特别是login
(/var/log/wtmp log所有到系统的登录和注销) 和syslog
(/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除
/var/run
保存到下次引导前有效的关于系统的信息文件.例如,/var/run/utmp 包含当前登录的用户的信息.
4.在/etc目录下增加fstab,hostname,inittab,mdev.conf,passwd,protocols,resolv.conf,services,
group,hosts,issue,mtab,profile,shadow文件
inittab文件:
# /etc/inittab
# mount all the file systems specified in /etc/fstab
::sysinit:/bin/mount –a //系统启动后自动挂载fstab文件中指定的虚拟文件系统
#Use mdev as hotplug to auto mount USB storage or SD card //系统使能hotplug功能,当然还需要一些挂载脚本文件
::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
::sysinit:/sbin/mdev -s
#make shm, pts support
::sysinit:/bin/mkdir -p /dev/pts
::sysinit:/bin/mkdir -p /dev/shm
::sysinit:/bin/mount -t devpts devpts /dev/pts
#Mount our apps/info partition //挂载nand flash 分区
null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock7 /apps
null::wait:/bin/mount -o sync,noatime,ro -t jffs2 /dev/mtdblock8 /data
#Set hostname
null::sysinit:/bin/hostname -F /etc/hostname
#Initialize the user account files
#null::wait:/usr/sbin/initpwd
#Enable console logon
null::respawn:/sbin/getty -L ttyS0 115200 vt100
null::sysinit:/bin/mkdir -p /tmp/logs
null::sysinit:/bin/mkdir -p /tmp/stat
# now run any rc scripts
null::wait:/etc/init.d/rcS
# system daemon
null::respawn:/sbin/syslogd -n
null::respawn:/sbin/klogd -n
# Stuff to do before rebooting
null::shutdown:/bin/umount /apps
null::shutdown:/bin/umount /data
null::shutdown:/bin/killall klogd
null::shutdown:/bin/killall syslogd
null::shutdown:/bin/umount -a -r
fstab文件:
/etc/fstab: static file system information.
#
/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
tmpfs /dev tmpfs defaults 0 0
ramfs /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
hostname文件:
MINI2440
shadow文件:
修改虚拟机root用户的密码:
[lingyun@localhost etc]$ sudo passwd root
Changing password for user root.
New password:
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[lingyun@localhost etc]$ sudo head -n 2 /etc/shadow
root:$6$4o1aUL4K$fexvf1D74DjTIAfXZkEyrPuQWu38iPx2CrfC91Sx09331RBDDV0iEZ/GIX9vWMaIRij6VSaHbhuEM98X6ag9B.:15852:0:99999:7:::
bin:*:15513:0:99999:7:::
将以上两行内容拷贝到制作的根文件系统/etc/shadow中。注意:我现在是在虚拟机上做文件系统。
group文件:
root:x:0: //为root用户创建一个分组
passwd文件:
root:x:0:0:root:/root:/bin/sh //每个系统都必需有个root用户
hosts文件:
127.0.0.1 localhost //ping localhost就相当于ping 127.0.0.1
issue文件: //文件中的内容为系统登录时的提示信息
Welcome to Linux World!!!
mdev.conf文件: //系统自动挂载文件,比如我们插上U盘后,自动挂载
sd[a-h]*[0-9] 0:0 0660 *(/usr/sbin/hotplug /media/usb)
sd[a-h] 0:0 0660 *(/usr/sbin/hotplug /media/usb)
ub[a-h]*[0-9] 0:0 0660 *(/usr/sbin/hotplug /media/usb)
ub[a-h] 0:0 0660 *(/usr/sbin/hotplug /media/usb)
mmcblk[0-9]p[0-9] 0:0 0660 @(/bin/mount /dev/$MDEV /media/mmc)
mmcblk[0-9] 0:0 0660 $(/bin/umount /media/mmc)
profile文件:
export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/apps/tools:\
/apps/bin:\
export PS1='\w >: '
export USER=`id -un`
export LOGNAME=$USER
export HOSTNAME=`/bin/hostname`
export HISTSIZE=500
export HISTFILESIZE=500
export PAGER='/bin/more '
export EDITOR='/bin/vi'
export INPUTRC=/etc/inputrc
export network_cfg_dir=/apps/etc/network
export LD_LIBRARY_PATH=/lib:/usr/lib:/apps/lib:/apps/libs
### Some aliases
alias vim='vi'
alias ll='ls -l'
alias l.='ls -d .*'
alias df='df -h'
protocols文件: //指定协议端口号
# /etc/protocols:
ip 0 IP
icmp 1 ICMP
igmp 2 IGMP
ggp 3 GGP
ipencap 4 IP-ENCAP
st 5 ST
tcp 6 TCP
egp 8 EGP
pup 12 PUP
udp 17 UDP
hmp 20 HMP
xns-idp 22 XNS-IDP
rdp 27 RDP
iso-tp4 29 ISO-TP4
xtp 36 XTP
ddp 37 DDP
idpr-cmtp 39 IDPR-CMTP
rspf 73 RSPF
vmtp 81 VMTP
ospf 89 OSPFIGP
ipip 94 IPIP
encap 98 ENCAP
resolv.conf文件:
nameserver 4.2.2.2
nameserver 8.8.8.8
servers文件:
这个文件我们直接用虚拟机中/etc/servers文件,主要是提供的相关服务,比如ftp
mtab文件:
不需要加任何内容,它记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等;而/etc/fstab是系统准备装载的。直接使用mount就是通过查询它而来的。
4.在init.d目录下增加文件rcS S01_network S99_rcsApp
[lingyun@localhost init.d]$ cat rcS
#!/bin/sh
for i in /etc/init.d/S??* ;do
$i
done
[lingyun@localhost init.d]$ cat S99_rcsApp
#!/bin/sh
if (test -d /apps/etc/init.d)
then
for i in /apps/etc/init.d/S??* ;do
$i
done
fi
5.编译busybox,根文件系统的命令都来自busybox
指定命令的安装路径
注意:busybox-1.20.2目录和rootfs目录在同一个目录下!
在make ,make install之后,,rootfs中的bin,sbin 目录,就有了文件系统需要的命令!
Init进程
以上已经成功的创建了一个根文件系统目录树。