Linux 系统启动过程
linux启动时我们会看到许多启动信息。
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:
- 内核的引导。
- 运行 init。
- 系统初始化。
- 建立终端 。
- 用户登录系统。
内核引导:
当计算机打开电源后,首先是BIOS
开机自检,按照BIOS
中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot
目录下的内核文件。
运行init:
init
进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init
程序首先是需要读取配置文件 /etc/inittab
。
运行级别:
许多程序需要开机启动。它们在Windows
叫做"服务"(service
),在Linux就叫做"守护进程"(daemon
)。
init
进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache
,用作桌面就不需要。
Linux
允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel
)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7
个运行级别(runlevel
):
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
- 运行级别2:多用户状态(没有NFS)
- 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登陆后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
系统初始化
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit
它调用执行了/etc/rc.d/rc.sysinit
,而rc.sysinit
是一个bash shell
的脚本,它主要是完成一些系统初始化的工作,rc.sysinit
是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
建立终端:
rc
执行完毕后,返回init
。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
用户登录系统:
一般来说,用户的登录方式有三种:
(1)命令行登录
(2)ssh登录
(3)图形界面登录
图形模式与文字模式的切换方式:
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1
,这个六个窗口分别为tty1,tty2 … tty6
,你可以按下Ctrl + Alt + F1 ~ F6
来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6
来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7
就回来了。
如果你用的vmware
虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6
. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6
切换至命令窗口。
Linux 远程登录
Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器。
这时我们就需要远程登录到Linux
服务器来管理维护系统。
Linux
系统中是通过ssh
服务实现的远程登录功能,默认ssh
服务端口号为 22
。
终端利用ssh登录远程服务器
安装ssh:
yum install ssh
启动ssh:
service sshd start
登陆远程服务器:
ssh -p 50022 [email protected]
输入密码:
[email protected]:
-p
后面是端口
my
是服务器用户名
127.0.0.1
是服务器 ip
回车输入密码即可登录
Linux 文件基本属性
Linux
系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux
系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux
中我们可以使用ll或者ls –l
命令来显示一个文件的属性以及文件所属的用户和组。
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
chgrp:更改文件属组
chown:更改文件属主,也可以同时更改文件属组
我们就可以使用 u, g, o 来代表三种身份的权限!u是user,g是group , o是other.
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
文件目录类命令
tac命令
# 为cat命令倒着写
# 当然作用和cat也是相反的,是从最后一行开始显示
newgrp命令
# 用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
newgrp root # 将本用户切换到root用户组
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。
Linux 磁盘管理
Linux磁盘管理好坏直接关系到整个系统的性能问题。
Linux磁盘管理常用三个命令为df
、du
和fdisk
。
- df:列出文件系统的整体磁盘使用量
- du:检查磁盘空间使用量
- fdisk:用于磁盘分区
df:
df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
- -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
- -k :以 KBytes 的容量显示各文件系统;
- -m :以 MBytes 的容量显示各文件系统;
- -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
- -H :以 M=1000K 取代 M=1024K 的进位方式;
- -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
- -i :不用硬盘容量,而以 inode 的数量来显示
du:
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍Linux du命令。
- -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
- -h :以人们较易读的容量格式 (G/M) 显示;
- -s :列出总量而已,而不列出每个各别的目录占用容量;
- -S :不包括子目录下的总计,与 -s 有点差别。
- -k :以 KBytes 列出容量显示;
- -m :以 MBytes 列出容量显示;
与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。
fdisk:
- -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
剩余的可以查表。
let命令
let
命令是 BASH
中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $
来表示变量。如果表达式中包含了空格或其他特殊字符,则必须用""
引起来。
语法:
let arg [arg ...]
参数说明:
arg:要执行的表达式
举例:
自加操作:let no++
自减操作:let no–
简写形式 let no+=10,let no-=20,分别等同于 let no=no+10,let no=no-20。
实例:
a=1
let a++
let a++
echo $a
b=2
let "b + 2" # 由于有空格的存在,不加双引号就报错
echo $b
输出:
3
2
nohup命令
nohup
命令运行由 Command
参数和任何相关的 Arg
参数指定的命令,忽略所有挂断(SIGHUP
)信号。在注销后使用 nohup
命令运行后台中的程序。要运行后台中的 nohup
命令,添加 &
( 表示“and
”的符号)到命令的尾部。
总之就是,nohup
运行的时候忽略所有的错误之类的,一直运行完。
nohup
命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup
命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup
就是不挂断的意思( no hang up
)。
该命令的一般形式为:nohup command &
使用nohup
命令提交作业
如果使用nohup
命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out
的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 & # 指定输出到myout.file
在上面的例子中,0 – stdin (standard input)
,1 – stdout (standard output)
,2 – stderr (standard error)
;
2>&1
是将标准错误(2)
重定向到标准输出(&1)
,标准输出(&1)
再被重定向输入到myout.file
文件中。