在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如何在不重装系统的情况下解决这些问题。
centos7重置密码
单用户模式重置密码
单用户模式:单用户模式是一个运行级别,在系统中可以运行一个命令来查看系统的运行级别有哪些: ls -l /usr/lib/systemd/system/runlevel.target*
[root@localhost ~]# ls -l /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 Jan 21 05:36 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Jan 21 05:36 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Jan 21 05:36 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jan 21 05:36 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jan 21 05:36 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Jan 21 05:36 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Jan 21 05:36 /usr/lib/systemd/system/runlevel6.target -> reboot.target
可以看到centos7有0-6,7个运行级别
- 0表示关机。
- 1表示单用户模式(字面意思是救援模式,我们习惯称之为单用户)
- 2-4三个运行级别均表示多用户模式
- 5表示图形界面
- 6重启
如何进入单用户模式
- 要进入单用户模式,需要重启机器,可以使用init 6 或reboot命令来重启。在机器启动到grub界面时按上下箭头(只有几秒的时间,需要快速按下,否则系统会正常启动)
- 选中第一条,按下“e”键来编辑grub,然后利用箭头将光标定位到下图所示的ro处。
- 然后将ro修改为rw init=/sysroot/bin/sh 。按ctrl+x来启动。
- 接下来机器会启动到一个内存系统下(类似于Windows的winpe一样),也会有一个文本的交互界面
重置root密码
- 运行chroot /sysroot/ 命令来进入我们真正的系统。然后就可以使用passwd root命令来重置密码了
- 如果原来的系统装的是中文版的,需要敲LANG=en ,防止因为在这个界面不能正常显示中文而出现乱码。
- 运行touch /.autorelabel ,再运行exit退出当前shell 。最后一步 reboot 重启。
救援模式
我们一般说的救援模式是需要借助系统盘(光盘或者u盘)这种工具来进入的。
- 如果是物理机,我们首先需要将光盘插入光驱,然后重启机器。(虚拟机一样的步骤)
- 在机器启动的时候按下F2(不同品牌的服务器按键不一样,可以根据提示操作)进入BIOS
- 选中boot选项卡,将CD-ROM Drive选项调整到第一项(按+、— 按键调整)
- 按下F10保存退出,选择yes。
- 在下面这个界面中选中Troubleshooting ,敲回车
- 接下来的界面,选择rescue a centos system,敲回车。然后再敲回车。
- 然后出现一个交互界面,输入1,回车
- 在这个界面敲回车获得一个shell,真正的系统却是在/mnt/sysimage/下
- 运行chroot /mnt/sysimage
- 正常修密码就可以了,修改完之后,退出当前shell ,重启系统就可以了。
ls 命令
在centos中有一个man命令,这个man是用来查看其它命令的文档的,比如要查看ls命令的文档: man ls ls 命令常常搭配一些参数来使用,以达到我们想要的输出结果。
- ls -a 查看文件的隐藏权限
- ls -l 查看文件的详细信息(时间,大小,权限,属主属组,文件的属性)
- ls -d 只查看命令后面跟的目录的信息,而不查看该目录下其他文件的信息。
- ls -lt 按时间排序时间越早的排的越下面
- ls -i 查看文件的Inode号
[root@localhost ~]# ls -l /tmp
total 4
-rwx------. 1 root root 836 Jan 21 05:45 ks-script-ob6xOy
drwx------. 3 root root 17 Jan 22 12:35 systemd-private-5f7ab756ffe94541891075d943c5de58-chronyd.service-eOAzQl
-rw-------. 1 root root 0 Jan 21 05:34 yum.log
chmod命令。
文件权限
如上面所示,当使用ll列出一个文件的信息时,最前面有10个字符。
- 第一个字符表示的是文件的类型
- d表示目录,
- -表示普通文件,
- s表示套接口文件
- b表示块设备文件
- c表示字符设备文件
- 后面9位表示权限,前3位表示属主对该文件的权限,中间3位表示属组对该文件的权限,后3位表示其他用户对该文件的权限。
- 权限的表示rwxrwxrwx ,r=读权限,用数字表示为4,w=写权限,数字表示为2,x=执行权限,数字表示为1。所以一个文件的权限如果是644表示属主对该文件有读写权限,属组和其他用户对该文件只有读的权限。
chmod命令是用来更改文件权限的
[root@localhost tmp]# ls -la test.txt
-rw-r--r--. 1 root root 846 Jan 22 12:57 test.txt
[root@localhost tmp]# chmod 666 test.txt
[root@localhost tmp]# ls -la test.txt
-rw-rw-rw-. 1 root root 846 Jan 22 12:57 test.txt
这是一个比较简单的用法,直接更改文件的权限。 还可以这样使用chmod u=rwx,g=r,o=r filname。这条命令当中,u 表示所有者,g 表示所属组,o表示其他用户。
[root@localhost tmp]# chmod u=rw,g=r,o-rw test.txt
[root@localhost tmp]# ls -la test.txt
-rw-r-----. 1 root root 846 Jan 22 12:57 test.txt