欢迎各位兄弟 发布技术文章
这里的技术是共享的
开机时显示登录之前的信息等会儿系统启动的时候,在终端启动之前就可以看到这几行信息,
它是在/etc/issue 里面定义的
1,关机和重启
2,终端
3,主机名
4,ip地址(模块的装载和服务的实现
5,functions
6,终端 /etc/issue文件的内容:
7,rc.sysinit:还要挂载额外的文件系统(/etc/fstab中定义的其它的文件系统)
8),设定内核参数
/etc/sysctl.conf 中
sysctl -p 使修改后的/etc/sysctl.conf生效
9,用户
PAM: Pluggable Authentication Module (可插入式的认证模块)
/etc/pam.d/*
绕过PAM,(不使用系统上login程序)
我们系统上开机时显示的login信息是通过
/bin/login 来打印的,在/etc/issue里面定义的,它还能实现用户认证,但是这个程序在编译时是依赖于PAM的
我们现在编译好了不依赖于PAM的,在ftp服务器
把它改为可执行 放在/bin目录下,它所依赖的库文件都已经被移植过了(所以不需要再移植库了)
除此之外,它不依赖于其它的功能
用户:GID
组:GID
login:验证
nsswitch:Network Service Switch 网络服务转换 网络服务切换 名称解析开关
框架:它能够完成配置到哪里去找用户的账号和密码 /etc/passwd , /etc/shadow ,/etc/group
库: libnss_file.so,libnss_nis.so,libnss_ldap.ko,
配置文件 /etc/nsswitch.conf
/etc/passwd , /etc/shadow
NIS,LDAP,MySQL 可能存用户名密码的地方,也可能存在文件里(/ect/passwd /etcshadow /etc/group)
/etc/passwd
/etc/group
名称解析开关: 名称解析是如何工作的
10,单用户模式
级别1
mingetty mgetty agetty 都可以实现打印信息
/etc/issue文件的内容:
关闭小linux,恢复源linux
\ 反斜线 逃逸符 转义符 ,并不表示这个字符的本身的意义,被终端程序解释为其它意义
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Kernel \r on an \m
[root@localhost ~]# man mingetty
[root@localhost ~]# uname -m
x86_64
[root@localhost ~]# uname -r
2.6.18-398.el5
[root@localhost ~]#
[root@localhost ~]# man agetty
[root@localhost ~]# cp /etc/issue /mnt/sysroot/etc/
[root@localhost ~]# vim /mnt/sysroot/etc/issue
MageEdu Linux
Kernel \r on an \m
等会儿系统启动的时候,在终端启动之前就可以看到这几行信息,
硬件挂载后会出现在 /proc/mounts 这个文件中
[root@localhost ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / ext3 rw,data=ordered 0 0
/dev /dev tmpfs rw 0 0
/proc /proc proc rw 0 0
/sys /sys sysfs rw 0 0
/proc/bus/usb /proc/bus/usb usbfs rw 0 0
devpts /dev/pts devpts rw 0 0
/dev/sda1 /boot ext3 rw,data=ordered 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
.host:/ /mnt/hgfs vmhgfs rw 0 0
none /proc/fs/vmblock/mountPoint vmblock rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
/etc/auto.misc /misc autofs rw,fd=7,pgrp=4620,timeout=300,minproto=5,maxproto=5,indirect 0 0
-hosts /net autofs rw,fd=13,pgrp=4620,timeout=300,minproto=5,maxproto=5,indirect 0 0
/dev/hda1 /mnt/boot ext3 rw,data=ordered 0 0
/dev/hda2 /mnt/sysroot ext3 rw,data=ordered 0 0
[root@localhost ~]#
[root@localhost ~]# awk '{print $1}' /proc/mounts | grep "/dev/hda2"
/dev/hda2
[root@localhost ~]#
rc.sysinit 应该挂载除了根,sys,proc之外的其它的文件系统
如果是swap 还不能使用mount挂载
取得/etc/fstab的设备
[root@localhost ~]# awk '{print $1}' /etc/fstab
/dev/VolGroup00/LogVol00
LABEL=/boot
tmpfs
devpts
sysfs
proc
/dev/VolGroup00/LogVol01
[root@localhost ~]#
grep -v "\<swap\>" (-v 表示 排除的意思 "\<swap\>" 表示锚定单词swap)
[root@localhost ~]# grep -v "\<swap\>" /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@localhost ~]#
[root@localhost ~]# grep -v "\<swap\>" /etc/fstab | awk '{print $1}'
/dev/VolGroup00/LogVol00
LABEL=/boot
tmpfs
devpts
sysfs
proc
[root@localhost ~]#
grep -E 表示扩展的正则表达式 因为 \<swap|proc|sysfs\> 使用了或者| 如果不使用 -E 就是 grep -v"<swap\|proc\|sysfs>" 这里或者使用了反斜线
[root@localhost ~]# grep -E -v "\<swap|proc|sysfs\>" /etc/fstab | awk '{print $1}'
/dev/VolGroup00/LogVol00
LABEL=/boot
tmpfs
devpts
[root@localhost ~]#
找哪里设备尚未挂载 (没有grep "^$LINE" 到的结果 给它mount就行了)
[root@localhost ~]# grep -E -v "\<swap|proc|sysfs\>" /etc/fstab | awk '{print $1}' | while read LINE; do awk '{print $1}' /proc/mounts | grep "^$LINE"; done
tmpfs
devpts
[root@localhost ~]#
mount -a (-a auto)可以挂载 /etc/fstab下面的所有,但是这个命令有时会出错
[root@localhost ~]# mount -a
[root@localhost ~]#
[root@localhost ~]# cd /mnt/sysroot/
[root@localhost sysroot]# ls
bin dev halt lib lost+found mnt proc sbin sysroot.gz usr varlock varrun
boot etc home lib64 media opt root sys tmp var varlog vartmp
[root@localhost sysroot]# vim etc/rc.d/rc.sysinit (我有一次因为这个文件没有执行权限,所以死活出问题,里面的东西打印不出来)
#!/bin/bash
#
. /etc/rc.d/init.d/functions
echo -e "\tWelcome to \033[31mMageEdu Team\033[0m Linux"
echo "Remount rootfs..."
mount -n -o remount,rw /
[ $? -eq 0 ] && success "Remount rootfs" || failure "Remount rootfs"
mount -a
[ $? -eq 0 ] && success "Mount others filesystem" || failure "Mount others filesystem"
echo "Set the hostname ..."
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z $HOSTNAME -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME
[ $? -eq 0 ] && success "Set the hostname" || failure "Set the hostname"
echo "Initializing network device ..."
/sbin/insmod /lib/modules/e1000.ko
[ $? -eq 0 ] && success "Initializing network device" || failure "Initializing network device"
ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failure "Activating loopback network device"
这里 mount -n -o 之后 再执行一次 mount -a
但是没法判断哪个挂载失败了,没法单独管理和输出,所以建议单独使用脚本
mount -a 会重新挂载 sysfs 文件系统,这时会报错的
所以我们应该使用 grep -E -v "\<swap|proc|sysfs\>" /etc/fstab | awk '{print $1}' | while read LINE; do awk '{print $1}' /proc/mounts | grep "^$LINE"; done
一个一个判断 一个一个挂载 grep -E -v "<proc>" 这里尖括号表示真实的意思 所以要加反斜线 即变成 grep -E -v "\<proc\>"
[root@localhost sysroot]# cat /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
修改内核后生效的功能 有关sysctl的功能
[root@localhost ~]# ./bincopy.sh
Your command:sysctl
/sbin/sysctl
copy /sbin/sysctl finished.
Continue:q
[root@localhost ~]# cd /mnt/sysroot/
[root@localhost sysroot]# vim etc/sysctl.conf
(网卡转发功能)
net.ipv4.ip_forward = 1
其它的功能可以参照 /etc/sysctl.conf
[root@localhost sysroot]# cat /etc/sysctl.conf
[root@localhost sysroot]# vim etc/rc.d/rc.sysinit
#!/bin/bash
#
. /etc/rc.d/init.d/functions
echo -e "\tWelcome to \033[31mMageEdu Team\033[0m Linux"
echo "Remount rootfs..."
mount -n -o remount,rw /
[ $? -eq 0 ] && success "Remount rootfs" || failure "Remount rootfs"
mount -a
[ $? -eq 0 ] && success "Mount others filesystem" || failure "Mount others filesystem"
echo "Set the hostname ..."
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -z $HOSTNAME -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost
/bin/hostname $HOSTNAME
[ $? -eq 0 ] && success "Set the hostname" || failure "Set the hostname"
echo "Initializing network device ..."
/sbin/insmod /lib/modules/e1000.ko
[ $? -eq 0 ] && success "Initializing network device" || failure "Initializing network device"
ifconfig lo 127.0.0.1/8
[ $? -eq 0 ] && success "Activating loopback network device" || failure "Activating loopback network device"
sysctl -p &>/dev/null
[ $? -eq 0 ] && success "Set kernel parameter" || failure "Set kernel parameter"
改下 grub.conf吧
# vim /mnt/sysroot/boot/grub/grub.conf
(ro 只读 root=/dev/hda2 告诉内核根文件系统在哪个设备上 quiet 静默方式,就不会输出BIOS初始化或内核初始化时的大多数信息)
default=0
timeout=1
title MageEdu Linux(2.6.18)
root (hd0,0)
kernel /vmlinuz ro root=/dev/hda2 quiet
initrd /initrd.gz
(initrd.gz做了简化) initrd.gz做了简化如下
[root@localhost ~]# mkdir iso
[root@localhost ~]# cd iso
[root@minilinux iso]# zcat /boot/initrd-2.6.18-398.el5.img | cpio -id
[root@localhost iso]# ls
bin dev etc init lib proc sbin sys sysroot
[root@localhost iso]# vim init
把 jbd.ko 和 /ext3.ko 之外的模块全都注释掉了 (如果是scsi硬盘的scsi模块就不能去了)
把好多模块删掉 lib 下面只剩下 ext3.ko firmware jbd.ko 这三个
[root@localhost lib]# pwd
/root/iso/lib
[root@localhost lib]# ls
ext3.ko firmware jbd.ko
[root@localhost lib]# cd ../
[root@localhost iso]# pwd
/root/iso
[root@localhost iso]#
[root@localhost iso]# find . | cpio -H newc --quiet -o | gzip -9 >/mnt/boot/initrd.gz
[root@localhost iso]# ls -lh /mnt/boot/ 总计 5.2M
drwxr-xr-x 2 root root 1.0K 11-15 10:41 grub
-rw-r--r-- 1 root root 3.1M 11-15 11:12 initrd.gz (马哥只有1.8M,我还有3.1M)
drwx------ 2 root root 12K 11-09 08:50 lost+found
-rw-r--r-- 1 root root 2.1M 11-09 09:58 vmlinuz
[root@localhost iso]#
挂起源linux ,开启小linux
加了quiet 里面东西少了很多
又报错
重新 mke2fs 或 e2fsck 一下 (先关闭小linux,恢复源linux)
继续 挂起源linux,打开小linux
(已经挂载过sysfs 重新挂载sysfs会报错的 在rc.sysinit 里面的mount -a)
ctrl+alt+f2 打开另一个终端, 也没有打印 /etc/issue的信息
(之所以没有打印,是因为没有要求用户登录,当要求用户登录的时候,它就会显示了,不然的话,它默认会清除这些信息的)
(或者使用agetty 让它明确读取 /etc/issue 这个配置文件也成,当然需要使用agetty的一些选项专门来进行指定)
关闭小linux(因为 init 0 已关闭) 恢复源linux
[root@localhost ~]# cat /etc/nsswitch.conf
表示文件 /etc/passwd /etc/shadow /etc/group /etc/gtitle(没听清) 这四个文件
passwd: files (可以在后面加 nis ldap 不过优先级不高,因为自左而右找)
shadow: files
group: files
/etc/hosts文件 如果没有在dns服务器查找 所以/etc/hosts优先级在前面,所以高
hosts: files dns (主机名与ip地址转换)
[root@localhost ~]# ping www.baidu.com
ping: unknown host www.baidu.com
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -P OUTPUT ACCEPT
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108: icmp_seq=1 ttl=56 time=6.54 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=56 time=6.99 ms
64 bytes from 180.97.33.108: icmp_seq=3 ttl=56 time=6.79 ms
64 bytes from 180.97.33.108: icmp_seq=4 ttl=56 time=6.91 ms
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 6.540/6.811/6.995/0.171 ms
[root@localhost ~]# cat /etc/resolv.conf (resolv解析器)
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 192.168.1.1
#search localdomain
search baidu.com
[root@localhost ~]#
[root@localhost ~]# vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.1.101 www
192.168.1.101 www.baidu.com
[root@localhost ~]# ping www.baidu.com
[root@localhost ~]# ls -l /lib/libnss*
-rwxr-xr-x 1 root root 36468 2014-08-27 /lib/libnss_compat-2.5.so
lrwxrwxrwx 1 root root 20 09-05 14:09 /lib/libnss_compat.so.2 -> libnss_compat-2.5.so
-rwxr-xr-x 1 root root 825028 2010-04-09 /lib/libnss_db-2.2.so
lrwxrwxrwx 1 root root 16 09-05 14:14 /lib/libnss_db.so.2 -> libnss_db-2.2.so
-rwxr-xr-x 1 root root 21948 2014-08-27 /lib/libnss_dns-2.5.so
lrwxrwxrwx 1 root root 17 09-05 14:09 /lib/libnss_dns.so.2 -> libnss_dns-2.5.so
-rwxr-xr-x 1 root root 50848 2014-08-27 /lib/libnss_files-2.5.so
lrwxrwxrwx 1 root root 19 09-05 14:09 /lib/libnss_files.so.2 -> libnss_files-2.5.so
-rwxr-xr-x 1 root root 22764 2014-08-27 /lib/libnss_hesiod-2.5.so
lrwxrwxrwx 1 root root 20 09-05 14:09 /lib/libnss_hesiod.so.2 -> libnss_hesiod-2.5.so
-rwxr-xr-x 1 root root 3208608 2013-01-30 /lib/libnss_ldap-2.5.so
lrwxrwxrwx 1 root root 18 09-05 14:14 /lib/libnss_ldap.so.2 -> libnss_ldap-2.5.so
-rwxr-xr-x 1 root root 46624 2014-08-27 /lib/libnss_nis-2.5.so
-rwxr-xr-x 1 root root 55804 2014-08-27 /lib/libnss_nisplus-2.5.so
lrwxrwxrwx 1 root root 21 09-05 14:09 /lib/libnss_nisplus.so.2 -> libnss_nisplus-2.5.so
lrwxrwxrwx 1 root root 17 09-05 14:09 /lib/libnss_nis.so.2 -> libnss_nis-2.5.so
[root@localhost ~]#
nsswitch的库文件,最关键的是files这一项
[root@localhost ~]# ls -l /lib/libnss*
我们只需要复制 /usr/lib/libnssutil3.so /usr/lib/libnss3.so /usr/lib/libnssckbi.so 以及上面的 /lib/libnss_files-2.5.so
并且 有关 files 的链接得保留(应该上面和下面各有一个关于files的链接)
[root@localhost ~]# ls -l /usr/lib/libnss*
cp 复制保留链接 -d -P 都可以
# man cp
下面# cp -d (复制链接)仍然指向了 文件本身
[root@localhost ~]# cp /lib/libns (Tab 或两次Tab)
libnsl-2.5.so libnss_dns-2.5.so libnss_ldap-2.5.so
libnsl.so.1 libnss_dns.so.2 libnss_ldap.so.2
libnss_compat-2.5.so libnss_files-2.5.so libnss_nis-2.5.so
libnss_compat.so.2 libnss_files.so.2 libnss_nisplus-2.5.so
libnss_db-2.2.so libnss_hesiod-2.5.so libnss_nisplus.so.2
libnss_db.so.2 libnss_hesiod.so.2 libnss_nis.so.2
[root@localhost ~]# cp /lib/libns
[root@localhost ~]# cp /lib/libnss_files (Tab 或两次Tab)
libnss_files-2.5.so libnss_files.so.2
[root@localhost ~]# cp /lib/libnss_files
[root@localhost ~]# cp /lib/libnss_files* /mnt/sysroot/lib (32位复制下)
[root@localhost ~]# cp /lib64/libnss_files* /mnt/sysroot/lib64/ (64位也复制下)
[root@localhost ~]#
[root@localhost ~]# ls /mnt/sysroot/lib -l
[root@localhost ~]# ls /mnt/sysroot/lib64 -l
[root@localhost ~]# rm -f /mnt/sysroot/lib/libnss_files*
[root@localhost ~]# rm -f /mnt/sysroot/lib64/libnss_files*
[root@localhost ~]# cp /lib/libnss_files* /mnt/sysroot/lib -d
[root@localhost ~]# cp /lib64/libnss_files* /mnt/sysroot/lib64 -d
[root@localhost ~]# ls /mnt/sysroot/lib -l
[root@localhost ~]# ls /mnt/sysroot/lib64 -l
cp 加上 -d 现在变成链接了
[root@localhost ~]# mkdir /mnt/sysroot/usr/lib
[root@localhost ~]# mkdir /mnt/sysroot/usr/lib64
mkdir: 无法创建目录 “/mnt/sysroot/usr/lib64”: 文件已存在
[root@localhost ~]#
32位的64位的库都复制一下
[root@localhost ~]# cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib
[root@localhost ~]# cp -d /usr/lib/libnss3.so /usr/lib/libnssutil3.so /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib
[root@localhost ~]# cp -d /usr/lib64/libnss_files.so /mnt/sysroot/usr/lib64/
[root@localhost ~]#
[root@localhost ~]# cp -d /usr/lib64/libnss3.so /usr/lib64/libnssckbi.so /usr/lib64/libnssutil3.so /mnt/sysroot/usr/lib64/
[root@localhost ~]#
[root@localhost ~]# ls -l /mnt/sysroot/usr/lib
总计 1816
-rwxr-xr-x 1 root root 1221988 11-15 14:32 libnss3.so
-rwxr-xr-x 1 root root 482404 11-15 14:32 libnssckbi.so
lrwxrwxrwx 1 root root 27 11-15 14:34 libnss_files.so -> ../../lib/libnss_files.so.2
-rwxr-xr-x 1 root root 142492 11-15 14:32 libnssutil3.so
[root@localhost ~]# ls -l /mnt/sysroot/usr/lib64
总计 2436
-rwxr-xr-x 1 root root 25984 11-15 10:49 libgpm.so.1
-rwxr-xr-x 1 root root 380464 11-15 10:49 libncurses.so.5
-rwxr-xr-x 1 root root 1251448 11-15 14:36 libnss3.so
-rwxr-xr-x 1 root root 644640 11-15 14:36 libnssckbi.so
lrwxrwxrwx 1 root root 29 11-15 14:35 libnss_files.so -> ../../lib64/libnss_files.so.2
-rwxr-xr-x 1 root root 172800 11-15 14:36 libnssutil3.so
drwxr-xr-x 3 root root 1024 11-15 10:49 perl5
[root@localhost ~]#
[root@localhost ~]# sync
[root@localhost ~]# sync
[root@localhost ~]# sync
复制一个nsswitch的配置文件,然后进行修改
[root@localhost ~]# cp /etc/nsswitch.conf /mnt/sysroot/etc/nsswtich.conf
[root@localhost ~]# vim /mnt/sysroot/etc/nsswtich.conf
:1,.d :.,$d hosts后面的全删掉 其实起作用的仅仅四行而已
passwd: files
shadow: files
group: files
hosts: files dns
grep -E 扩展 好用 或者 or (就是|) 如果不用-E (就是\|)
三个文件弄好 /etc/passwd /etc/shadow /etc/group
[root@localhost ~]# grep -E "root|hadoop" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
hadoop:x:500:500::/home/hadoop:/bin/bash
grep -E "^(root|hadoop)\>" /etc/passwd 表示root或hadoop 锚定开头,并且锚定词尾
[root@localhost ~]#
[root@localhost ~]# grep -E "^(root|hadoop)\>" /etc/passwd > /mnt/sysroot/etc/passwd
[root@localhost ~]#
[root@localhost ~]# grep -E "^(root|hadoop)\>" /etc/shadow
root:$1$UvW4fy1l$W9KzduPS8DMTJtX.t8t611:17779:0:99999:7:::
hadoop:$1$Utcm1EF7$gz7RBXh/uSj0stpMlRv.S.:17850:0:99999:7:::
[root@localhost ~]# grep -E "^(root|hadoop)\>" /etc/shadow > /mnt/sysroot/etc/shadow
[root@localhost ~]#
[root@localhost ~]# grep -E "^(root|hadoop)\>" /etc/group
root:x:0:root
hadoop:x:500:
[root@localhost ~]# grep -E "^(root|hadoop)\>" /etc/group >/mnt/sysroot/etc/group
[root@localhost ~]#
增加几个命令吧
passwd这个命令对我们没有,因为它依赖于PAM
[root@localhost ~]# ./bincopy.sh
Your command:mingetty
/sbin/mingetty
copy /sbin/mingetty finished.
Continue:useradd
/usr/sbin/useradd
copy lib /lib64/libaudit.so.0 finished.
copy /usr/sbin/useradd finished.
Continue:passwd
/usr/bin/passwd
copy lib /usr/lib64/libuser.so.1 finished.
copy lib /lib64/libgobject-2.0.so.0 finished.
copy lib /lib64/libgmodule-2.0.so.0 finished.
copy lib /lib64/libglib-2.0.so.0 finished.
copy lib /usr/lib64/libpopt.so.0 finished.
copy lib /lib64/libpam_misc.so.0 finished.
copy lib /lib64/libpam.so.0 finished.
copy /usr/bin/passwd finished.
Continue:userdel
which: no usedel in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin:/root/bin)
Wrong command
Input again:userdel
/usr/sbin/userdel
copy /usr/sbin/userdel finished.
Continue:usermod
/usr/sbin/usermod
copy /usr/sbin/usermod finished.
Continue:groupadd
/usr/sbin/groupadd
copy /usr/sbin/groupadd finished.
Continue:q
[root@localhost ~]#
修改 etc/inittab 此时我们要登录 ,所以把 agetty 改成 mingetty 吧
[root@localhost ~]# vim /mnt/sysroot/etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
原来的
改成
提供login程序
下载后可以看到 login程序
看看库文件 在小linux上有没有
sync 一下 chroot 测试一下 login程序
挂起源linux,打开小linux
马哥又出错了 (其实关掉源linux 应该不会有问题)
下面的图是马哥的
重新 mke2ts 一下
现在好了
下面的图是马哥的
有 /root 目录 但是权限不对
缺少PS1这样一个环境变量
.家目录下的 .bash_profile 定义配置工作环境 配置文件
PS1是环境变量 应该 export 一下
PS1是用来定义用户的命令提示符前面的那段相关的提示信息
\u表示替换为 用户名 (-u username)
\h表示主机名 (-u hostname)
\W表示工作目录的基名 最后的路径 基路径
\w 表示工作目录的全名 全路径 全部路径
\$表示管理员显示为# 井号, 普通用户显示为$美元符
PS1='[\u@\h \W]\$'
export PS1
把大写 \W 改成 小写\w 试试
PS1='[\u@\h \w]\$'
export PS1
重新登录
.bash_profile 定义配置工作环境 配置文件
关机
假如密码忘了,怎么办 ,进入单用户模式
小linux关机的时候有sync操作,所有文件系统又会错乱
关闭小linux , 恢复源linux
mke2fs 修复吧
下面的目的是为了小linux级别1,为了密码忘记的处理
# cd /mnt/sysroot
# zcat /root/sysroot.7.gz | cpio -id
# ls
# ll
# chmod -R og=--- root/ 其它用户没有任何权限
# vim root/.bash_profile ( /etc/skel 骨架文件(里面包含配置文件))
PS1='[\u@\h \W]\$'
export PS1
提供单用户模式
# vim etc/inittab
下面目的是关掉两个服务
# ls etc/rc.d/init.d
# cd etc/
# cd rc.d
# mkdir rc1.d
# cd rc1.d
# ln -sv ../init.d/network K90network
# ln -sv ../init.d/tserver K33network
# ll
# cd ..
# ls
下面的目的是进入单用户模式
[root@minilinux ~]# man init
1 小s 大S 都表示等级1
-t 后面是 秒种,表示停顿几秒
红帽上是这样实现 切换到等级1的
[root@minilinux ~]# less /etc/init.d/single
-t1 表示等待1秒,可以不用指定
"$1" != "start" 可以不用指定
-x /usr/bin/clear (-x execute)表示这个文件存在,且这个文件是可执行的
#
#
# rc.single This file is executed by init when it goes into runlevel
# 1, which is the administrative state. It kills all
# deamons and then puts the system into single user mode.
# Note that the file systems are kept mounted.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Damien Neil
#
. /etc/init.d/functions
if [ "$1" != "start" ]; then
exit 0
fi
# this looks nicer
[ -x /usr/bin/clear ] && /usr/bin/clear
# Now go to the single user level.
echo $"Telling INIT to go to single user mode."
exec init -t1 S
[root@minilinux sysroot]# vim etc/rc.d/init.d/single (/sbin/init S表示切换到级别1执行)
#!/bin/bash
#
# chkconfig: #没有任何意义
# description: #没有任何意义
#
case $1 in
start)
;;
*)
echo "Usage: single start"
;;
esac
exec /sbin/init S
[root@minilinux sysroot]# chmod +x etc/rc.d/init.d/single
[root@minilinux sysroot]#
[root@minilinux sysroot]# cd etc/rc.d/rc1.d/
[root@minilinux rc1.d]# ln -sv ../init.d/single S98single (对我们而言,只需要启动这一个服务,其它都不启动)
创建指向“../init.d/single”的符号链接“S98single”
[root@minilinux rc1.d]# ll
[root@minilinux sysroot]# find . | cpio -H newc --quiet -o | gzip > /root/sysroot.8.gz
[root@minilinux sysroot]#
[root@minilinux sysroot]# cd
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]# sync
[root@minilinux ~]#
挂起源linux ,打开小linux
下面是马哥的图 先正常启动
重启后 敲e进入单用户模式 再敲e键
1 或 s 或 S 表示单用户模式
回车 敲b键 引导
此时进入了单用户模式
(我只使用了agetty 没有使用mingetty 不能进入bash 不懂)
passwd 使用PAM 改密码 但这里不行,这里马哥的 /bin/login 没有使用PAM的功能
切换到级别3,是需要输密码的