在Linux存在文字界面与图形界面,文字界面(终端)就是一个类似与Windows下的DOS命令窗口,而图形界面就是使用最多的windows系统,在Linux中的图形界面称为:X Window(不是Windows),Linux默认的情况会提供六个终端来让用户登陆,切换的方式为使用【Ctrl】+【Alt】+【F1】~【F6】,如果想切换到X windows(图形界面),可以使用【Ctrl】+【Alt】+【F1】。(如果以上无效,按【Ctrl】+【Alt】+【F6】进入终端界面,安【Ctrl】+【Alt】+【F1】切换到字符界面),下面讲进行演示:
首先进入的是在X Window中打开终端,按下【Ctrl】+【Alt】+【F6】切换到字符界面,如下图:
出现以上格式表示切换正确,接下来输入用户名和密码:
现在我们想切换到X Window,按下【Ctrl】+【Alt】+【F1】进行切换,如下图:
Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而Linux启动时我们会看到许多启动信息,例如某个服务是否启动。Linux系统的启动过程大体上可分为五部分:内核的引导、运行init、系统初始化、建立终端、用户登录系统。
内核引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导Linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是Linux内核做了一系列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。交给了下一个主角init.
运行init
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。 而所有的动作都会通过 init的配置文件/etc/inittab来规划,而inittab 内还有一个很重要的设定内容,那就是默认的 runlevel (开机运行级别)。先来看看运行级别Run level,Linux就是通过设定run level来规定系统使用不同的服务来启动,让Linux的使用环境不同。我们来看看这个inittab文件里面的支持级别。
inittab:
# inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # 服务器默认为3,一般我们安装的时候默认为5。 id:5:initdefault:
inittab配置文件格式和之前老版本CentOS5或者更老版本比有很大改动。Runlevels共七个级别,0表示关机,1表示单用户,2表示没有网络的命令行级别,3命令行级别(大多服务器都用这个级别),4为保留级别,5为图形化级别,6为重启。这个文件中除了最后一行外,其他都为注释行,也就是说最后一行才是关键,它用来指定服务器跑哪个级别,这里除了可以设置2,3,5外其他级别都不能设置。在该文件的前面部分,可以看到很多行都提及到某个配置文件,而所有配置文件都是在/etc/init/目录下。
系统初始化
系统初始化,就是去执行/etc/init/下的各个配置文件。inittab配置文件中有这么一行 “System initialization is started by /etc/init/rcS.conf” 也就是说系统初始化会先执行/etc/init/rcS.conf 而该配置文件中又有一行 “exec /etc/rc.d/rc.sysinit” 所以,重心又转移到了这个rc.sysinit文件上,它会做如下工作:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。当rc.sysinit程序执行完毕后,将返回init继续下一步,又到了/etc/init/rc.conf, 在这个配置文件里,最关键的一行为 “exec /etc/rc.d/rc $RUNLEVEL” 而$RUNLEVEL是在/etc/inittab中定义的(最下面的那一行),以阿铭的/etc/inittab为例,表示$RUNLEVE=3, 所以此时会执行 “/etc/rc.d/rc 3” 此时实际上是把/etc/rc.d/rc3.d/ 下的脚本都给执行了,随后/etc/rc.d/rc.local也会被执行,通常我们会把开机启动执行的命令放到这个脚本下。服务执行完,系统初始化也就完成了。接下来该建立终端了。
建立终端
建立终端是由配置文件/etc/init/tty.conf, /etc/init/serial.conf和/etc/sysconfig/init等配置文件来完成的。在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户身份。
用户登陆系统
对 于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入KDE、Gnome等窗口管理器。而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
Linux的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。然后login会对用户名进行分析:如果用户名不是root,且存在 “/etc/nologin” 文件,login将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。只有 “/etc/securetty” 中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。”/etc/usertty” 文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。
在分析完用户名后,login将搜索 “/etc/passwd” 以及 “/etc/shadow” 来验证密码以及设置账户的其它信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,将默认为根目录;如果没有指定shell,将默认为 “/bin/bash”。
login程序成功后,会向对应的终端在输出最近一次登录的信息(在 “/var/log/lastlog” 中有记录),并检查用户是否有新邮件(在 “/usr/spool/mail/” 的对应用户名目录下)。然后开始设置各种环境变量:对于bash来说,系统首先寻找 “/etc/profile” 脚本文件,并执行它;然后如果用户的主目录中存在 .bash_profile
文件,就执行它,在这些文件中又可能调用了其它配置文件,所有的配置文件执行后后,各种环境变量也设好了,这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了。
date:显示系统时间
cal:显示日历
bc:计算器
格式:date [参数] [格式化]
范例:显示系统当前时间,在终端输入:date
# 显示系统当前 [root@www ~]# date Fri Sep 18 12:43:26 CST 2015
如果以上显示的风格看不懂,可以对日期进行格式化,格式为:date + 格式,例如我想显示日期为:2015-09-18。
范例:格式化日期,在终端输入:date +%Y-%m-%d(没有空格)
[root@www /]# date +%Y-%m-%d 2015-09-18
参数说明:
1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下: % : 打印出 % %n : 下一行 %t : 跳格 %H : 小时(00..23) (常用) %I : 小时(01..12) %k : 小时(0..23) %l : 小时(1..12) %M : 分钟(00..59) (常用) %p : 显示本地 AM 或 PM %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00..61) (常用) %T : 直接显示时间 (24 小时制) (常用) %X : 相当于 %H:%M:%S %Z : 显示时区 %a : 星期几 (Sun..Sat) %A : 星期几 (Sunday..Saturday) %b : 月份 (Jan..Dec) %B : 月份 (January..December) %c : 直接显示日期与时间 %d : 日 (01..31) (常用) %D : 直接显示日期 (mm/dd/yy) %h : 同 %b %j : 一年中的第几天 (001..366) %m : 月份 (01..12) (常用) %U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形) %w : 一周中的第几天 (0..6) %W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形) %x : 直接显示日期 (mm/dd/yy) %y : 年份的最后两位数字 (00.99) (常用) %Y : 完整年份 (0000..9999) 2.在设定时间方面 date -s //设置当前时间,只有root权限才能设置,其他只能查看。 date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00 date -s 01:01:01 //设置具体时间,不会对日期做更改 date -s “01:01:01 2008-05-23″ //这样可以设置全部时间 date -s “01:01:01 20080523″ //这样可以设置全部时间 date -s “2008-05-23 01:01:01″ //这样可以设置全部时间 date -s “20080523 01:01:01″ //这样可以设置全部时间 3.加减 date +%Y%m%d //显示现在天年月日 date +%Y%m%d --date="+1 day" //显示后一天的日期 date +%Y%m%d --date="-1 day" //显示前一天的日期 date +%Y%m%d --date="-1 month" //显示上一月的日期 date +%Y%m%d --date="+1 month" //显示下一月的日期 date +%Y%m%d --date="-1 year" //显示前一年的日期 date +%Y%m%d --date="+1 year" //显示下一年的日期
对于这么多参数没必要刻意去背,知道如何使用即可,特殊情况百度一下就可以了。
范例:格式化日期,显示的格式为:年月日 时分秒,在终端输入:date +'%Y-%m-%d %H:%M:%S'
[root@www /]# date +'%Y-%m-%d %H:%M:%S' 2015-09-18 12:53:21
范例:显示当前时间,在终端输入:date +%T
[root@www /]# date +%T 12:55:10
范例:显示后一天的时间,在终端输入:date +%Y-%m-%d --date="+1 day"
# 当前时间 [root@www /]# date +%Y-%m-%d 2015-09-18 # 加一天后的时间 [root@www /]# date +%Y-%m-%d --date="+1 day" 2015-09-19
其它的参数读者可以自行测试。
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
格式:cal 参数1 参数2
参数说明:
-1 显示一个月的月历
-3 列出三个月份,第一个为当前月的前一个月,中间为当前月,最后为当前月的后有一个月。
-s 显示星期天为一个星期的第一天,默认的格式
-m 显示当前月份
-j 显示儒略日(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y 显示当前年份的日历
范例:显示本月的日历,在终端输入:cal或cal -m(-m表示当前月份)
[root@www /]# cal September 2015 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [root@www /]# cal -m September 2015 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
范例:显示日历属于一年中的第几天,在终端输入:cal -j
[root@www /]# cal -j September 2015 Sun Mon Tue Wed Thu Fri Sat 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
范例:显示本年份的所有日历,在终端输入:cal -y
[root@www /]# cal -y 2015 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7 4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 25 26 27 28 29 30 31 29 30 31 April May June Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 3 4 1 2 1 2 3 4 5 6 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 ........(后面省略)
范例:显示当前日历以及前后的日历,在终端输入:cal -3
[root@www /]# cal -3 August 2015 September 2015 October 2015 Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 1 2 3 4 5 1 2 3 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17 16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 30 31
其它的参数读者自行实验。
bc 命令是用于命令行计算器。 它类似基本的计算器。 使用这个计算器可以做基本的数学运算,在终端直接输入:bc,即可开始使用一些基本的数学运算符。
范例:+、-、*、/、%
[root@www /]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 10+2 12 10-2 8 10*2 20 10/2 5 10%3 1
从文件中读取,文件内容如下:
1+2 2-1 3*2 3/2
范例:从文件中读取
# touch 用于创建一个文件 [root@www /]# touch 1.txt # 使用vim编辑器进行编辑,进入vim后按下“I”键,然后输入内容 [root@www /]# vim 1.txt [root@www /]# bc 1.txt bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 3 1 6 1 #如果不想计算,可以按下【Ctrl】+【d】退出
在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都 可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各种关机命令。以下是Linux惯技
shutdown(常用)
halt(实际上就是调用shutdown)
reboot(重启)
init(所有进程的祖先)
shutdown命令安全地将系统关机,有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失;使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备。
而在系统关机前使用shutdown命令,系统管理员会通知所有登录的用户系统将要关闭。 shutdown执行它的工作是送信号给init程序,要求它改变runlevel(运行级别)。
参数说明:
-t:设定一个时间关机
-r:重启计算机(常用)
-k:并不是真正关机,只是送警告信号给每位登录者
-h:关机后关闭电源(常用 )
-n:自己来关机。不鼓励使用这个选项,因为该选项所产生的后果往往不总是你所预期得到的。
-c:取消关机,加入你使用了shutdown -t在某一个时间内关机,但是中途又不想关机,就可以使用此命令取消。
范例:立即关机,终端输入:shutdown -h now
# 由于我的Linux是在真机上运行的,就不方便关机了,读者可以自己测试 # now:表示立即关机 [root@www /]# shutdown -h now
范例:重启计算机,在终端输入:shutdown -r now
[root@www /]# shutdown -r now
范例:在60秒后关机,终端输入:shutdown -h -t 60
[root@www /]# shutdown -h -time 60 Broadcast message from [email protected] (/dev/pts/2) at 14:25 ... The system is going down for halt in 60 minutes!
此时想取消关机可以按下【Ctrl】+【c】。
其实halt就是调用shutdown -h。halt执行时,会杀死应用进程,执行sync系统调用文件系统写操作完成后就会停止内核。
参数说明:
-n:防止sync系统调用,它用在用fsck修补根分区之后,以防止内核用老版本的超级块。
-w:并不是真正的重启或关机,只是写wtmp〔/var/log/wtmp〕纪录。
-d:不写wtmp纪录〔已包含在选项[-n]中〕。
-f:没有调用shutdown而强制关机或重启。
-i:关机〔或重启〕前,关掉所有的网络接口。
-p:该选项为缺省选项。就是关机时调用poweroff。
输入格式:halt -参数
reboot的工作过程差不多跟halt一样,不过它是引发主机重启,而halt是关机。它的参数与halt相差不多。
参数说明:
-n:防止sync系统调用,它用在用fsck修补根分区之后,以防止内核用老版本的超级块。
-w:并不是真正的重启或关机,只是写wtmp〔/var/log/wtmp〕纪录。
-d:不写wtmp纪录〔已包含在选项[-n]中〕。
-f:没有调用shutdown而强制关机或重启。
-i:关机〔或重启〕前,关掉所有的网络接口。
-p:该选项为缺省选项。就是关机时调用poweroff。
输入格式:reboot -参数
init是所有进程的祖先,他是Linux系统操作中不可缺少的程序之一。它的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机,init 1为重启。
输入格式:init 0(运行级别)
Linux系统会遇到忘记root密码的情况,如果遇到这样的情况怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可。如何进入呢。
重启系统
3秒钟内,按一下回车键。此时你会看到类似如下提示信息:
GNU GRUB version 0.97 ....... CentOS (2.6.32-358.el6.i686).... #省略
此时CentOS (2.6.32-358.el6.i686) 这一行是高亮的,即我们选中的就是这一行,这行的意思是Linux版本为CentOS,后面小括号内是内核版本信息。 另外在这个界面里,我们还可以获取一些信息,输入 ‘e’ 会在启动前编辑命令行; 输入 ‘a’ 会在启动前更改内核的一些参数; 输入 ‘c’ 则会进入命令行。而我们要做的是输入 ‘e’.
进入单用户模式
输入 ‘e’ 后,界面变了,显示如下信息
root (hd0,0) kernel /vmlinuxz-2.6.32-358.el6.i686 ro root=UUID=......(此处省略) initrd /initramfs-2.6.32-358.el6.i686.img
暂时你不用管这些都代表什么意思,你只要跟着阿铭做即可。按一下向下的箭头键,选中第二行,输入 ‘e’,出现如下提示:
<_NO_DM rhgh quiet
只需要在后面加一个 “single” 或者 “1” 或者 “s”
<_NO_DM rhgh quiet single
然后先按回车然后按 ‘b’,启动后就进入单用户模式。
修改root密码
输入修改root密码的命令 ‘passwd’:
[root@localhost /]# passwd Changeing password for user root. #提示你输入新的密码 New password: Retry new password: passwd: all authentication tokens updated successfully.
修改后,重启系统
#shutdown -r now 表示立马重启 [root@localhost /]# shutdown -r now