1、修改Linux系统的启动菜单的背景图片

默认情况下,Linux系统启动时,grub菜单的背景图片为/boot/grub/splash.xpm.gz,启动时如图1所示,我们可以修改linux系统的grub菜单背景图片,此处我们修改为windos系统图片(具体可以根据自己的喜好修改)。

wKiom1kW9fOzvY_9AACCafR_Fx0788.jpg-wh_50

 图一

  在使用前需要将图片转化为Linux系统支持的图片格式.xpm,需要使用convert命令转化,如果系统没有convert命令则需要安装软件包ImageMagick。转化过程如下:

[root@dayi123 grub]# cd /boot/grub/

[root@dayi123 grub]# convert -resize 640x480 -colors 14 1.jpgwin.xpm

[root@dayi123 grub]# gzip win.xpm

[root@dayi123 grub]# grep -i "s#splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz#splashp_w_picpath=

(hd0,0)/grub/win.xpm.gz#g"  /boot/grub/grub.conf

改变后的grub引导菜单如图二所示:

wKioL1kW-HKiix46AAF3TtyVEEE848.png-wh_50

图二

2、将Linux系统的运行级别改为6,然后恢复

   Linux系统运行级别6级别为重启,如果将系统运行级别改为6,则系统无法正常启动,开机后一直处于重启的死循环中(如果同学或者朋友的系统Linux系统,可以恶搞一下,然后帮忙回复)。

   更改系统运行级别为6(修改/etc/inittab文件最后一行数字为6,如图三所示):

wKiom1kW-IzjJZcZAAAxJjdhExo082.jpg-wh_50

图三

  修改完成后下一次启动系统时系统会时,系统会一直处于重启的死循环中,无法正常启动起来。既然,能让系统启动不起来,那自然有办法让系统正常启动起来。那下面我们就来修复。

  由于系统无法启动起来,所以我们不能通过正常的流程来修复;在系统启动的过程总,我们进入grub引导界面(在系统刚启动时的等待界面,我们按下任意键进入会进入grub菜单界面)如图四所示;此时,我们根据提示按下‘e’键,编辑grub,我们选择第二项内核,再次按下“e”进行编辑。在最后输入single或者1(如图五所示)意思为此次进入系统的1级别;修改完成后我们按下回车返回到上一级,在上一级我们按下“b”键让从当前的设置引导启动系统。由于我们设置系统的运行级别为1,所有在进入系统时不需要密码,系统启动完成后会直接进入系统,如图6所示。

wKioL1kW-J6zzsdTAACOBPp3Iwg969.jpg-wh_50

图四

wKiom1kW-LWhndEuAAB5CSAhX04699.jpg-wh_50

图五

wKioL1kW-MKw4Px4AAAmvjOH8Uc138.jpg-wh_50

图六

  进入系统后,我们继续修改/etc/inittab将运行级别改回来(改为3或5),既然系统可以正常启动了,此时进入系统没有要求输入密码,我们是不是又可以搞点别的破坏了,比如,偷偷给root用户设置一个别的密码呢?

3、对grub加密

  既然Linux系统这么不安全,别人在不知道我们系统密码的情况下,随便进入我们的修通,修改我们系统的密码。我们是不是应该做点防护措施了。既然,他们是通过修改编辑grub进入我们的系统,那我们干脆就将grub加密。

  对grub加密,也就是设置密码文件,在/boot/grub/grub.conf配置文件的第三行设置密码,如图七所示。

wKiom1kW-PqxSW0iAADnDRYwsZo567.jpg-wh_50

图七

  但是,按上面方法设置的密码是明文的,让别人随便瞄一眼就知道你的grub密码了,既然这样,那我们就给密码加密。我们使用md5加密,先生成加密字符串:

[root@dayi123 ~]# grub-md5-crypt          

Password:

Retype password:

$1$35.oF/$UVcZ.CXw0MPuie76eaJw5/

  加密字符串生成后,那我们就将grub密码设置为加密的密码,如图8所示。

wKiom1kW-RChsznLAAEEW3CLvwM562.jpg-wh_50

图八

  听说md5加密算法已经被人破解了,感觉有点不安全,我么我们干脆用SHA512加密,同时再设置一个进入系统的密码,同样,我们先生成加密字符串:

[root@dayi123 ~]# grub-crypt

Password:

Retype password:

$6$aaX9ZQMAZZrbDwiZ$nhx6gc1s9ICXeKtBMM41d3LtDTyY4Jnbg2Gp2JXALATFl.25DSuAEsYplSvQwBpayc6j0QUs17VhSkRiXNRkB0

  生成完成后我们就设置密码,如图9所示:

wKiom1kW-SDx4mvyAAEuXwzxBRM675.jpg-wh_50

图九

  当设置密码后,我们编辑grub时需要密码,选择grub菜单进入系统是提示也要输入密码。这下,我们的系统密码不会轻易被人修改了。

4、删除/boot下所有及/etc/fstab

  上面的几种玩法,感觉不好玩,不够刺激,那我们现在来点更刺激的,那我们进入系统后,执行下rm –rf /* ,这万万可使不得,如果真的这么做了,真的该跑路了。既然不能那样,那我们就这样,我们把执行如下命令:rm –rf /boot/* /etc/fstab,我们这样做相当于把硬盘的挂载文件,所有的与系统相关的引导文件都删除了。这样做后想让系统启动起来真的难啊!如果真的这么做了就要想办法恢复了......

(1)首先要修复fstab文件

  我们先通过光盘修复模式进入一个bash,通过“fdisk -l”命令查看磁盘分区信息,然后建立挂载点,将分区挂载到挂载点(如果是逻辑卷,先要使用命令” vgchange -ay”激活逻辑卷),分别查看是分区分别属于哪个挂载点。然后挂载到系统根目录下,如图10所示,挂载后通过ls命令可以判断/dev/sda1为根目录(目录下的内容已被删除),/dev/sda3为根目录。

wKioL1kW-T-yGgpgAAC_cD0hnu4569.jpg-wh_50

图10

  挂载完成后我们需要在/mnt/sda3/etc/下新建fstab文件,将磁盘挂载信息写入其中,配置文件内容如图11所示,并重启,重新进入光盘修复模式。

wKiom1kW-U3SfBQmAABewKXBpmQ150.jpg-wh_50

11

(2)修复引导文件

  重新进入光盘修复模式后,确保分区已经正确挂载,此时,我们开始修复系统引导文件。修复过程如图12所示:

wKioL1kW-VqT8PFqAACvoSqES28721.jpg-wh_50

图十二

  引导文件修复后我们需要生成内核文件vmlinuz和虚拟文件系统initramfs。我们可以通过安装内核来生成,安装内核前需要挂载光盘。具体安装过程如图十三所示。

wKioL1kW-WiTwWDhAAB-84BQLi0225.jpg-wh_50

图十三

  安装完成户我们要新建/boot/grub/grub.conf文件,/boot/grub/grub.conf文件的配置如图十四所示,grub.conf文件生成后我们重新系统,如果不出意外,系统就可以正常启动了。

wKioL1kW-XOBGuW1AAAQvRy7HSk968.png-wh_50

图十四

5、我们自制一个Linux系统,安装在自己的U盘中

(1)准备工作:找一个U盘,分两个区,文件系统格式化为ext4。分别用于挂载/boot和根/。格式化完成后创建根挂载点”/mnt/sysroot”,挂载根目录并在根目录下创建其他必须的目录,并挂载/boot。操作如下

[root@dayi123 ~]# mount /dev/sdb2 /mnt/sysroot/

[root@dayi123 ~]# mkdir -p/mnt/sysroot/{bin,boot,dev,etc,home,lib,lib64,media,mnt,opt,proc,root,ssbin,srv,sys,tmp,usr,var}    

[root@dayi123 ~]# mount /dev/sdb1 /mnt/sysroot/boot/

(2)安装grub及相关的内核文件

[root@dayi123 ~]# grub-install --root-directory=/mnt/sysroot/dev/sdb

[root@dayi123 ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64/mnt/sysroot/boot/vmlinuz

[root@dayi123 ~]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img/mnt/sysroot/boot/initramfs

[root@dayi123 ~]# ls /mnt/sysroot/boot/

grub  initramfs  lost+found vmlinuz

[root@dayi123 ~]# ls /mnt/sysroot/boot/grub/

device.map    iso9660_stage1_5   stage1           xfs_stage1_5

e2fs_stage1_5 jfs_stage1_5       stage2

fat_stage1_5  minix_stage1_5     ufs2_stage1_5

ffs_stage1_5  reiserfs_stage1_5  vstafs_stage1_5

(3)创建/mnt/sysroot/boot/grub下的grub.conf文件

[root@dayi123 ~]# vim /mnt/sysroot/boot/grub/grub.conf

default 0

timeout 3

title dayi123linux

kernel /vmlinuz root=/dev/sda2

initrd /initramfs.img                     

(4)创建/etc/fstab文件

[root@dayi123 ~]# cat /mnt/sysroot/etc/fstab

UUID=605ccf9b-725b-4383-a0ac-a145072b3a80       /boot  ext4    defaults        0 0

UUID=d8ebedaa-e6e8-4f90-8c70-cda8c5e122a0       /      ext4    defaults        0 0

(5)copy所需要的命令及相关的库文件(我们通过脚本实现,在copy命令的,但是一定要记得不要忘了copy最重要的bash),copy完成后我们可以将根切换过去,使用我们copy过去的命令。

[root@dayi123 ~]# sh copycmd.sh

Please input a command: bash

Please input a command or quit: ip

Please input a command or quit: mv

Please input a command or quit: cp

Please input a command or quit: rm

Please input a command or quit: vi 

[root@dayi123 ~]# chroot /mnt/sysroot/

bash-4.1# ls

bin   dev  home lib64       media  opt  root  srv    sys usr

boot  etc  lib  lost+found  mnt    proc sbin  ssbin  tmp var

copy命令时我们通过脚本实现,脚本内容如下:

#!/bin/bash

ch_root="/mnt/sysroot"
[ ! -d $ch_root ] && mkdir $ch_root
 
bincopy() {
    if which $1 &>/dev/null; then

        local cmd_path=`which --skip-alias $1`
        local bin_dir=`dirname $cmd_path`
        [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
        [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
        return 0
    else
        echo "Command not found."
        return 1
    fi
}
 
libcopy() {
    local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
    for loop in $lib_list;do
        local lib_dir=`dirname $loop`
        [ -d ${ch_root}${lib_dir} ] || mkdir -p  ${ch_root}${lib_dir}
        [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
    done
}
 
 
read -p "Please input a command: " command
 
while [ "$command" != "quit" ];do
    if bincopy $command ;then
        libcopy $command
    fi
    read -p "Please input a command or quit: " command
done

(6)为我们定制的Linux系统创建init文件,并加入执行权限,这样我们就可以以我们定制的系统单独启动了!!!,启动后如图十五所示。

[root@dayi123 ~]# vim /mnt/sysroot/sbin/init

#!/bin/sh

echo "welcome dayiliunx"

[root@dayi123 ~]# chmod +x /mnt/sysroot/sbin/init

wKiom1kW-lSjpHXwAAC8PD5IGGY110.jpg-wh_50

图十五

6、编译安装内核

(1)编译安装前准备工作:

  编译安装前先安装下开发包组“DevelopmentTools”,这样可以避免在编译安装的时候出现很多问题,安装前要确保你编译安装的目录至少有10G的空闲空间,。同时需要到Linux内核官网(https://www.kernel.org/)下载内核并解压,我的系统为centos7.3,我下载了最新的内核4.11,具体操作如下:

[root@localhost data]# yum groupinstall "DevelopmentTools" -y

[root@localhost data]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.11.tar.xz

[root@localhost data]# tar -xf linux-4.11.tar.xz

[root@localhost data]# du -sh linux-4.11

780M    linux-4.11

(2)设置编译安装

  基本准备工作完成后,我们就开始编译安装,首先我们先准备文本的配置文件,文本配置文件内容包括各种模块的安装,设置太多了,所以我们就干脆将/boot目录下的文本配置文件拷贝过来。其此,我们安装一些基本的依赖包,以免在安装时报错,配置文件都是老司机安装时总结出得,但未必适合你的系统,我们先安装下。在安装的过程中,还有依赖错误,我们再去安装,具体操作如下:

[root@localhost data]#cd linux-4.11

[root@localhost linux-4.11]# cp /boot/config-3.10.0-514.el7.x86_64.config

[root@localhost linux-4.11]# yum install ncurses-devel -y

[root@localhost linux-4.11]#yum install openssl-devel

[root@localhost linux-4.11]#yum install bc –y

  基本设置完成后,我们配置内核选项,根据我们的需求选择需要的模块及安装方式(以模块的方式安装还是打入到内核中)。我们通过make menuconfig配置内核选项

[root@localhost linux-4.11]# make menuconfig  

    首先,我们选择我们编译安装的版本号,在页面中我们先选择“General setup”菜单,按下回车,然后选择第三行“local version– append to kernel release”回车,输入编译安装版本号信息,然后退出保存,操作如图十六所示。

wKiom1kW-naRZ_uFAADKUV2Xr6o518.png-wh_50

图十六

    其次,我们既然编译安装,那我们不妨在操作的时候选择一些其他功能,Linux默认不支持ntfs格式的文件系统,ext4文件系统驱动是以模块的方式安装到“/lib/modules/3.10.0-514.el7.x86_64/kernel/fs/ext4/ext4.ko”,我们不放在编译的时候设置ext4驱动直接打到内核中,并设置以模块的方式安装ntfs文件系统驱动。

    我们首先设置将ext4文件系统驱动打到内核中,我们在图十六出现的第一个菜单中,找到“File systems”菜单,按下回车。如图十七所示,我们找到“TheExtended 4 (ext4)filesystem”按下空格,前面的“M”会变为“*”,如图十八所示。也就意味着编译安装时,ext4驱动会被打到内核中。

wKiom1kW-reiKMpqAACJBuuESrA118.jpg-wh_50

图十七

wKiom1kW-sTxI2uKAACkzT90l4k315.jpg-wh_50

图十八

    我们继续在图十七所示的界面中找到“NTFS file system support”,按下空格,前面会出现“M”号,如图十九所示。也就意味着在安装系统时以模块的方式安装NTFS文件系统的驱动,同时在选中下面出现的两项,也就是选中按下空格,前面出现“*”即可。设置完成后我们保存退出

wKioL1kW-tSCcmwmAACLdJdQz7Y800.jpg-wh_50

十九

  设置完成后我们可以检查下是不是选择了所需要的模块,可以在.config文件中搜索查看。如下所示:

[root@localhost linux-4.11]# grep -i ntfs .config

CONFIG_NTFS_FS=m

CONFIG_NTFS_DEBUG=y

CONFIG_NTFS_RW=y

(3)设置完成后我们就开始编译安装内核,需要在解压目录下

  先执行命令” make –j 2”进行编译,编译非常耗时,编译时我们先查看下cpu,根据cpu性能开启多个进程,这样会快些。

[root@localhost data]#cd /data/linux-4.11     #进到解压目录

[root@localhost linux-4.11]#make –j 2   #编译以2个进程进行

编译完成后,我们执行命令“make modules install”安装模块

 [root@localhost linux-4.11]#make modules_install    #安装模块

模块安装完成后,我们执行命令”make install”安装内核相关的模块:

[root@localhost linux-4.11]#make install

  安装内核后会在boot目录下生成相关的内核文件,同时也会生成相关的模块文件,如下所示:

[root@localhost boot]# ls /lib/modules/4.11.0-1.0dayilinux123/kernel/fs/nfs/

blocklayout  filelayout  flexfilelayout  nfs.ko nfsv3.ko  nfsv4.ko  objlayout

config-3.10.0-514.el7.x86_64

grub

grub2

initramfs-0-rescue-24a2cfa5360f487e87dfb1ed47f3d34f.img

initramfs-3.10.0-514.el7.x86_64.img

initramfs-3.10.0-514.el7.x86_64kdump.img

initramfs-4.11.0-1.0dayilinux123.img

initrd-plymouth.img

symvers-3.10.0-514.el7.x86_64.gz

System.map

System.map-3.10.0-514.el7.x86_64

System.map-4.11.0-1.0dayilinux123

vmlinuz

vmlinuz-0-rescue-24a2cfa5360f487e87dfb1ed47f3d34f

vmlinuz-3.10.0-514.el7.x86_64

vmlinuz-4.11.0-1.0dayilinux123

    至此我们的内核也就编译安装完成了,我们重新启动系统,在进入系统的时候,我门在grub菜单除选择我们自己编译安装的内核进入系统,进入系统后我们查看我们当前系统内核为我们编译安装的内核,如图20所示:

wKiom1kW-u_j1kaxAABXgUSVNpI710.jpg-wh_50

20

(4)卸载编译安装的内核:

  在编译安装内核之前,感觉编译安装内核很高大上;但是,在安装完成后,感觉也没什么卵用,况且我们系统自带的内核都是经过操作系统发行的官方测试过的,稳定性,兼容性都是不错的,既然没什么卵用,那我们干脆卸了吧!

清理操作(根据自己的需求选择清理):

    make clean:清理大多数编译生成的文件,但会保留config文件等

    make mrproper: 清理所有编译生成的文件、config及某些备份文件

    make distclean:mrproper、patches以及编辑器备份文件

卸载操作:

   1)删除/lib/modules/目录下不需要的内核库文件

   2)删除/usr/src/linux/目录下不需要的内核源码

   3)删除/boot目录下启动的内核和内核映像文件

   4)更改grub的配置文件,删除不需要的内核启动列表

7、Linux系统的神奇目录/proc目录

(1)/proc目录:

   1)作用:内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

   2)查看常用的信息

    /proc/sys/fs/file-max该文件指定了可以分配的文件句柄的最大数目

    /proc/cpuinfocpu 存放cpu信息 

    /proc/filesystems 内核当前支持的文件系统类型

    /proc/mdstat多硬盘,RAID配置信息(md=multiple disks)

    /proc/meminfoRAM使用的相关信息

    /proc/modules所有加载到内核的模块列表

    /proc/mounts系统中使用的所有挂载

    /proc/stat所有的CPU活动信息

    /proc/uptime系统已经运行了多久

    /proc/swaps交换空间的使用情况

    /proc/versionLinux内核版本和gcc版本

    /proc/net网卡设备信息

    /proc/ttytty设备信息

    /proc/net/dev显示网络适配器及统计信息

    /proc/vmstat虚拟内存统计信息

    /proc/zoneinfo显示内存空间的统计信息 

    3)通过修改/proc来临时启用关闭系统某功能

    修改主机名:echo "dayi123" > /proc/sys/kernel/hostname

    禁ping(不允许别人ping你的主机):echo1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

(2)跟/proc目录相关的sysctl命令:

   1)作用:sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中

   2)配置文件:/etc/sysctl.conf

   3)用法:

    设置某参数  sysctl-w parameter=VALUE

    通过读取配置文件设置参数  sysctl-p[/path/to/conf_file]

    查看所有生效参数  sysctl  -a

设置禁止别人ping你的电脑(也可以用下面的方法来实现):

#将配置写入配置文件

[root@localhost ~]# echo "net.ipv4.icmp_echo_ignore_all =1" >>/etc/sysctl.conf

#使配置立即生效

[root@localhost ~]# /sbin/sysctl -p

net.ipv4.icmp_echo_ignore_all = 1

[root@localhost ~]# sysctl -w net.ipv4.route.flush=1

net.ipv4.route.flush = 1