linux基础part3
linux基础
一、linux基本命令归档命令。
1.归档的定义:归档就是把许多文件或目录打包成一个文件。
2.tar命令格式:tar [参数-cxtzjvfpPN] 打包文件名 文件或目录路径
参数:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为
不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!例如使用『 tar -zcvfP tfile sfile』
就是错误的写法,要写成『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
二、vi编辑器的使用
1.vi的定义:vi是一个UNIX和Linux系统内嵌的标准正文(文字)编辑器,它是一种交互类型的正文编辑器,它可以用来创建和修改正文文件。
2.vi编辑器的三种基本模式:
a) 命令行模式:vi的默认模式。在这一模式中,所有的输入被解释成vi命令,可以执行修改、复制、移动、粘贴和删除正文等命令,也可以进行移动光标、搜索字符串和退出vi的操作等。
b) 编辑模式:在编辑模式中,可以往一个文件中输入正文。在这一模式下,输入的每一个字符都被vi编辑器解释为输入的正文。使用ESC键返回命令行模式。
c) 扩展模式:在一些UNIX系统上也叫最后一行模式。在这一模式下,可以使用一些高级编辑命令,如搜寻和替代字符串、存盘或退出vi编辑器等。要进入最后一行模式,需要在命令行模式中输入冒号(:),冒号这一操作将把光标移到屏幕的最后一行。
3.vi编辑器在不同模式下的不同命令
a、模式命令:
x,X :x为向后删除一个字符,X为先前删除一个字符
nx(n代表数字) :向后删除n个字符
dd: 删除当前行 ,D :删除当前行所有字符,试成为空行, ndd(n代表数字) :删除光标所在行的向下n列 ,d1G: 删除光标所在
行到第一行的所有数据,dG :删除光标所在行到最后一行的所有数据
yy :复制光标所在行 ,y1G :复制光标所在行到第一行的所有数据, yG :复制光标所在行到最后一行的所有数据
ynj(n代表数字): 复制光标所在行向下n+1行,dnj(n代表数字): 删除光标所在行向下n+1行
p,P: p为复制的数据粘贴在光标的下一行,P为复制的数据粘贴在光标的上一行, J :将光标所在行与下一行的数据结合成一行,
u :恢复前一个动作(undo)
ctrl+r:重做上一次操作
/关键字:向光标之后查找关键字,?关键字:向光标之前查找关键字
n:重复前一个查找;N:反向重复前一个查找;
b、从命令模式进入插入(编辑)模式命令:
a:进入插入模式并在光标之后进行添加。 A:进入插入模式并在本行末尾添加。
i:进入插入模式并在光标之前进行插入。 I:进入插入模式并在本行开头添加。
o:进入插入模式并在当前(光标所在)行之下开启新的一行。 O:进入插入模式并在当前光标之上开启新一行。
c、进入编辑模式就可以直接编辑,按esc从编辑模式退出到命令模式
d、进入扩展模式命令:
:s/word1/word2/g 在光标当前行查找word1,并替换成word2
:n1,n2s/word1/word2/g 在第n1行与第n2行之间查找word1,并替换成word2
:%s/word1/word2/g 整个文章查找word1,并替换成word2
:w 将编辑的数据保存到硬盘文件中
:w [filename] 将编辑后的数据保存到硬盘的另一个文件中
:r [filename] 在编辑数据时,读入另一个文件中的数据,即将filename文件中的内容加到光标所在行下一行
:wq或:x 保存并退出 :q 退出,适用于未修改的文件
:q! 强制退出,适用于修改文件后不保存退出
:set nu 显示行号 :set nonu 取消行号
:n1,n2 w [filename] 将n1到n2行的内容保存到名为filename的文件中
:set ic:查找时忽略大小写;
:set nioc:查找时不忽略大小写;
三、linux系统的初始化
1.linux系统启动顺序:
启动第一步--加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
启动第二步--读取MBR(主引导程序)
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader(次引导程序),而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见Loader。我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
补充一:用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。
补充二:linux内核获得控制权之后开始干自己的事有检测硬件、解压缩自己并安装必要驱动、初始化与文件系统相关的虚拟设备,LVM或RAID、装载根文件系统,挂在根目录下面、完成之后,linux在进程空间里面加载init程序,下面轮到init干活
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上.
启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等.
启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local.rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态.此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
四、单用户模式下修改root用户密码。
1.centos6系列下单用户模式修改root密码:
首先我们重启我们的系统(我这里是CentOS),然后在界面启动时让它停留一下,随便按一下键盘上的一个键,此时就会进入到操作系统配置引导界面
通过下面的英文提示我们发现按下键盘上的 e 键就可以进入到编辑界面
这时我们需要将光标移动到第二个选项,也就是Linux内核那里,同样按下键盘上的 e 键进入到编辑界面,此时我们在后面追加参数 1 或者参数 single就可以告诉Linux系统的内核,我需要以单用户的模式登陆该系统。
然后我们回车,进入到上层的界面,此时按下键盘上的 b 键就是启动操作系统,此时我们的Linux操作系统就是以单用户的模式登陆了。我们发现系统非常快速的就进入到了命令行模式下的界面,因为单用户模式是不会启动任何服务的,同时也不需要输入root密码,就能直接进入到root用户下,此时我们就可以通过passwd 命令来重置我们的root用户的密码
然后我们通过exit命令就可以退出单用户模式,此时操作系统内核就会根据我们之前看到的 /etc/inittab 配置文件中设置的默认启动级别来启动。
这样我们就可以通过在进入GRUB引导时在内核参数里面追加参数 1 或者 single 来进入单用户模式来修改我们的root用户密码。
但是,请注意,因为上面的操作只需要通过单用户模式就可以修改我们的root用户密码,所以说一旦别人有机会接触到我们的服务器主机,那么root用户的密码就很容易被别人修改了,这样当然是非常的不安全的,所以我们还是需要通过GRUB加密来对开启一层密码防护。
通过在 /boot/grub/grub.conf 启动配置中加入以下类似的代码来对grub进行加密:
password --md5 $1$6H92B1$PzoPV63kTMk4uEhZQTAZ//
其中后面那一串是MD5加密算法,这个我们可以通过 grub-md5-crypt 这个命令来生成加密后的算法
[root@xiaoluo ~]# grub-md5-crypt
Password:
Retype password:
$1$UGA2B1$DriIdrVTEgVg95fHHX4H./
[root@xiaoluo ~]#
在上面的Password、Retype password那里输入我们需要设置的密码,然后就能生成MD5算法加密后的密码,我们将这个加密后的密码添加到
/boot/grub/grub.conf 这个配置文件里即可,例如:
[root@xiaoluo ~]# vi /boot/grub/grub.conf
password --md5 $1$UGA2B1$DriIdrVTEgVg95fHHX4H./
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,1)
# kernel /boot/vmlinuz-version ro root=/dev/sda2
# initrd /boot/initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
root (hd0,1)
kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=6e24ec7a-2d19-466e-bacc-92750b1f4bef rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-358.el6.x86_64.img
这个时候我们再次重启一下系统,试着进入到GRUB里面来看看,
我们发现下面的英文提示已经变了,之前可以按键盘上的 e 键进入到GRUB里面,现在按 e 键已经没用了,此时提示我们按 p 键来输入GRUB的密码才能进入到GRUB里面
此时我们输入之前设置的GRUB密码即可,然后界面就会进入到我们熟悉的修改GRUB那里了。
所以说通过GRUB的加密算法我们可以对进入GRUB进行加密,这样就能防止别人恶意进入单用户模式,从而修改root密码了!!
当然,如果我们连这个GRUB的秘密都忘记的话,并且又忘记了root密码,那就真的不能登陆到root用户了。。。。
2.centos7系列下单用户模式修改root密码:
重启服务器,在选择内核界面使用上下箭头移动
选择内核并按“e”
找到下面这行
修改然后这里要删除掉rhgb quiet,如下图
使用“ctrl + x” 来重启服务器就可以了,重启后就会进入到单用户
退出单用户命令exec:/sbin/init
方法二:
1、启动的时候,在启动界面,相应启动项,内核名称上按“e”;
2、进入后,找到linux16开头的地方,按“end”键到最后,输入console=tty0 rd.break,按ctrl+x进入;
3、进去后输入命令mount,发现根为/sysroot/,并且不能写,只有ro=readonly权限;
4、mount -o remount,rw /sysroot/,重新挂载,之后mount,发现有了r,w权限;
5、chroot /sysroot/ 改变根;
(1)echo RedHat|passwd –stdin root 修改root密码为redhat,或者输入passwd,交互修改;
(2)还有就是先cp一份,然后修改/etc/shadow文件
6、touch /.autorelabel 这句是为了selinux生效
7、ctrl+d 退出
8、然后reboot
五 centos6系列救援模式
1。用安装光盘或者硬盘安装的方式进入安装界面,在shell 中输入 linux rescue
2。然后根据提示选择语言和键盘格式
3。选择是否配置网卡
一般系统到了要rescue了,网络也就不需要了,所以可以选择否跳过网卡配置,当然你如果需要也可以选择是,具体设置过程和安装时一样。
4。选择是否然让系统查找硬盘上的RHEL 系统,选择继续。
5。硬盘上的系统已经被找到并挂载在/mnt/sysimage 下
6。按提示chroot /mnt/sysimage
chroot 之后你就可以已经在你的要被拯救的系统下了。 grub挂了的,grub-install /dev/hdxx 配置文件改错的,vi /etc/fstab vi /etc/inittab .................. 软件包被毁的 rpm -F xxx.rpm
完成修复工作后,exit命令退出chroot,exit退出rescue shell 系统重启。
备注:
如果你硬盘上的系统是非rhel系统如debian的,那么在第4步时,rescue
程序会找步不到硬盘上的系统,所以我们这是选择"跳过",直接进入shell。假设现在硬盘上的有一个debian 系统 /dev/hda1
为/boot 分区 /dev/hda5 为 / 分区 /dev/hda6 为swap。那么我们现在这么做。
代码:
# fdisk -l (查看分区情况)
# mkdir /mnt/linux
# mkdir /mnt/linux/boot (根据fdisk -l 得到的信息创建目录)
# mount -t ext3 /dev/hda5 /mnt/linux
# mount -t ext3 /dev/hda1 /mnt/linux/boot (挂载硬盘上的文件系统)
# chroot /mnt/linux (chroot 改变工作系统)
#
自此我们顺利进入硬盘上的debian系统,剩下来到就和先前一样了,有冤的报冤有仇的报仇。
另: 如果你的系统是文件系统损坏那么就不用挂载,chroot 系统了。 直接 fsck /dev/hdxx 即可。
其实我们仔细想想这个rescue会发现,所谓rescue 模式只是一个带shell 的linux 运行环境而已,然后通过mount 和 chroot进入要修复的系统的。
所以在没有rescue 盘的情况下我可以利用 Linux livecd 或 软盘版的linux 进入shell 环境然后重做
代码:
# fdisk -l (查看分区情况)
# mkdir /mnt/linux
# mkdir /mnt/linux/boot (根据fdisk -l 得到的信息创建目录)
# mount -t ext3 /dev/hda5 /mnt/linux
# mount -t ext3 /dev/hda1 /mnt/linux/boot (挂载硬盘上的文件系统)
# chroot /mnt/linux (chroot 改变工作系统)
就可以简单的进入一个rescue 环境了.
2、centos7系列救援模式
一、修复MBR:
MBR(Master Boot Record主引导记录):硬盘的0柱面、0磁头、1扇区称为主引导扇区。其中446Byte是bootloader,64Byte为Partition table,剩下的2Byte为magic number。
备份MBR:
#dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
破坏bootloader:
#dd if=/dev/zero of=/dev/sda count=1 bs=200
这里边block size只要小于等于446即可。
修复方式:
1、借助其他系统挂载磁盘修复。
修复方式同光盘修复类似,也是使用grub2-install命令。
2、借助安装光盘修复。
1.装入光盘,在光盘引导界面选择troubleshooting:
2.选择进入救援模式:
3.按回车键继续:
4.进入磁盘挂载选择模式:
磁盘将会被挂载至/mnt/sysimage/下
continue 以rw方式挂载分区。
read only 以ro方式挂载分区。
skip 跳过,将来自己手工挂载磁盘。
5.选择continue,稍等片刻,提示已经挂载完成。
6.此时进入救援模式的命令行:
7.使用grub2-install命令重建bootloader:
#grub2-install root-directory=/mnt/sysimage /dev/sda
显示无错误,使用sync写入硬盘,reboot重启系统。
8.重启后无错误,grub正常运行:
至此,MBR修复完成。
二、修复grub
grub配置文件丢失:
开机后会直接进入grub界面,显示为grub>:
修复步骤如下:
grub>insmod xfs
grub>set root=(hd0,1)
grub>linux16 /vmlinuz-xxxxx root=/dev/mapper/centos-root
grub>initrd16 /initramfs-.xxxxx.img
修复完成后即可进入系统,重建配置文件。
注意:CentOS7因为使用的是grub2,配置文件同grub有不少变化,一定要切记备份grub.cfg以便恢复。
补充一:systemctl set-default multi-user.target //设置成命令模式
systemctl set-default graphical.target //设置成图形模式
补充二:配置文件/etc/grub.conf
default
这个参数决定了GRUB引导时光标默认停留的引导标签。
timeout
这个参数设置的是GRUB的等待时间。
title
其实title就是一个引导标签,可以对title后的文字部分进行修改,使它更加符合我们的使用习惯。
Password
设置密码,提高grub的安全性