欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 15_02 _bash脚本编程之十三(Linux系统裁减之三) 系统函数库 有大用

开机时显示登录之前的信息等会儿系统启动的时候,在终端启动之前就可以看到这几行信息,

它是在/etc/issue 里面定义的

image.png



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服务器

image.png

把它改为可执行 放在/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


image.png











        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

image.png


[root@localhost ~]# uname -m

x86_64

[root@localhost ~]# uname -r

2.6.18-398.el5

[root@localhost ~]#


image.png

[root@localhost ~]# man agetty

image.png


[root@localhost ~]# cp /etc/issue /mnt/sysroot/etc/

[root@localhost ~]# vim /mnt/sysroot/etc/issue

MageEdu Linux

Kernel \r on an \m

http://www.magedu.com


等会儿系统启动的时候,在终端启动之前就可以看到这几行信息,


硬件挂载后会出现在 /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\>" 

image.png


[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

image.png



[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模块就不能去了)

image.png

image.png

image.png


 

把好多模块删掉  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 里面东西少了很多

image.png

又报错

image.png

重新 mke2fs 或 e2fsck 一下 (先关闭小linux,恢复源linux)

继续 挂起源linux,打开小linux

(已经挂载过sysfs 重新挂载sysfs会报错的 在rc.sysinit 里面的mount -a)

image.png


image.png

image.png

ctrl+alt+f2 打开另一个终端, 也没有打印  /etc/issue的信息

(之所以没有打印,是因为没有要求用户登录,当要求用户登录的时候,它就会显示了,不然的话,它默认会清除这些信息的)

(或者使用agetty 让它明确读取 /etc/issue 这个配置文件也成,当然需要使用agetty的一些选项专门来进行指定)

image.png

image.png


关闭小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地址转换)

image.png

image.png






[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

image.png

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

image.png




[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*

image.png


我们只需要复制 /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*

image.png


cp  复制保留链接 -d -P 都可以

# man cp

image.png

image.png


下面# cp -d (复制链接)仍然指向了 文件本身  

image.png



[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

image.png



[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 现在变成链接了image.png



[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

原来的

image.png

改成

image.png


提供login程序

image.png

image.png

image.png

下载后可以看到 login程序

image.png

image.png

看看库文件 在小linux上有没有

image.png

sync 一下 chroot 测试一下 login程序

image.png

image.png


挂起源linux,打开小linux

马哥又出错了 (其实关掉源linux 应该不会有问题)

下面的图是马哥的

image.png

重新 mke2ts 一下    

现在好了

下面的图是马哥的

image.png

image.png

有 /root 目录 但是权限不对

缺少PS1这样一个环境变量

image.png

image.png

image.png

image.png

image.png


image.png


image.png

image.png

.家目录下的 .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

image.png


image.png

重新登录

image.png


.bash_profile 定义配置工作环境 配置文件


image.png


关机

image.png


假如密码忘了,怎么办 ,进入单用户模式


小linux关机的时候有sync操作,所有文件系统又会错乱

关闭小linux , 恢复源linux 

mke2fs 修复吧


下面的目的是为了小linux级别1,为了密码忘记的处理


# cd /mnt/sysroot

# zcat /root/sysroot.7.gz | cpio -id

# ls 

# ll 

image.png

# chmod -R og=--- root/  其它用户没有任何权限

image.png

# vim root/.bash_profile            ( /etc/skel 骨架文件(里面包含配置文件))

image.png

PS1='[\u@\h \W]\$'

export PS1


提供单用户模式

# vim etc/inittab

image.png

image.png

下面目的是关掉两个服务

# 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

image.png

# ll

# cd ..

# ls 

image.png

下面的目的是进入单用户模式


[root@minilinux ~]# man init

1 小s 大S  都表示等级1

-t 后面是 秒种,表示停顿几秒

image.png


红帽上是这样实现 切换到等级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 


image.png



[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

下面是马哥的图         先正常启动

image.png

重启后  敲e进入单用户模式 再敲e键

image.png

1 或 s 或 S 表示单用户模式


image.png

回车 敲b键 引导

image.png

此时进入了单用户模式

(我只使用了agetty 没有使用mingetty 不能进入bash 不懂)

image.png


passwd 使用PAM 改密码 但这里不行,这里马哥的 /bin/login 没有使用PAM的功能

image.png

image.png


切换到级别3,是需要输密码的

image.png

普通分类: