Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458681
  • 博文数量: 113
  • 博客积分: 446
  • 博客等级: 下士
  • 技术积分: 1229
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-09 16:01
个人简介

Let's go!!!!!

文章分类

全部博文(113)

文章存档

2019年(5)

2018年(4)

2017年(9)

2016年(5)

2015年(39)

2014年(6)

2013年(28)

2012年(17)

分类: LINUX

2013-05-31 19:54:24

linux根文件系统中一般有下面的几个目录:

/bin

该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。

/bin目录下常用的命令有:catchgrpchmodcplsshkillmountumountmkdir[test等。其中“[”命令就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。

 /sbin 目录

该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。

/sbin目录下常用的命令有:shutdownrebootfdiskfsckinit等,自己安装的系统命令放在/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目录下增加fstabhostnameinittabmdev.confpasswdprotocolsresolv.confservices

grouphostsissuemtabprofileshadow文件

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进程


以上已经成功的创建了一个根文件系统目录树。




阅读(3297) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~