Linux学习----基础篇(简介、安装、文件系统、目录、运行级及服务管理)
1、什么是Linux
1.1、Linux简介
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
在Linux下,一切都是文件。不管是硬件设备还是其他,都体现为一个文件。
1.2、常见Linux发行版
Red Hat
Red Hat Linux,Red Hat最早发行的个人版本的Linux,其1.0版本于1994年11月3日发行。自从Red Hat 9.0版本发布后,Red Hat公司就不再开发桌面版的Linux发行套件,而将全部力量集中在服务器版的开发上,也就是Red Hat Enterprise Linux。2004年4月30日,Red Hat公司正式停止对Red Hat 9.0版本的支持,标志着Red Hat Linux的正式完结。
Red Hat Enterprise Linux(RHEL),Red Hat的企业版Linux。Red Hat现在主要做服务器版的Linux开发,在版本上注重了性能和稳定性,以及对硬件的支持。由于企业版操作系统的开发周期较长,注重性能、稳定性和服务端软件支持,因此版本更新相对较缓慢。RHEL大约1年发布一个新版本。RHEL可以免费使用,但需要付费以得到Red Hat公司提供的服务支持及更新服务。
Fedora ,在Red Hat公司停止对Red Hat 9.0版本的支持后,原本的桌面版Red Hat Linux发行套件与来自开源社区的Fedora进行合并,成为Fedora发行版本。该版本被Red Hat公司定位为新技术的测试平台,许多新的技术都会在Fedora中检验。如果稳定的话Red Hat公司则会考虑加入到Red Hat Enterprise Linux中。Fedora对于用户而言,是一套功能完备、更新迅速的免费操作系统。
CentOS
CentOS,全名为“社区企业操作系统”(Community Enterprise Operating System)。它是来自于RHEL依照开放源代码规定发布的源代码所编译而成,两者的不同在于,CentOS并不包含封闭源代码软件。因此,CentOS不但可以自由使用,而且还能享受CentOS提供的免费长期升级和更新服务。这是CentOS的一个很大优势。CentOS采取从RHEL的源代码包来构建,它的版本号有两个部分:一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,例如CentOS6.5构建在RHEL6.0更新的第5版。但是从RHEL7.0版本以后,CentOS版本命名格式又稍有变化:主要版本仍然对应于RHEL的主要版本,次要版本以RHEL更新包发布日期为准,例如RHEL7.4对应的CentOS版本为CentOS 7.4.1708,这表示RHEL7.4版本是2017年8月份发布的。
Debian
Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing和unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术(比如SMP等)。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。Debian最具特色的是apt-get /dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。
Ubuntu
Ubuntu,是一个以桌面应用为主的Linux操作系统,基于Debian Linux,可以说Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux桌面系统。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,活跃度很高,用户可以方便地从社区获得帮助。
2、安装Linux
2.1、磁盘RAID技术
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,它是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。
RAID的分类
软RAID,由操作系统或软件提供的RAID功能,没有独立的RAID控制器和IO处理芯片,成本低性能低。
硬RAID,由集成在主板上或者是独立的RAID卡提供RAID功能,配备了专门的RAID控制器、IO处理芯片及阵列缓存,提供高性能的RAID,但是成本也相对较高。
RAID基本技术
RAID 中主要有三个关键概念和技术:镜像( Mirroring )、数据条带( Data Stripping )和数据校验( Data parity )
- 镜像,将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。显而易见,镜像的写性能要稍低,确保数据正确地写到多个磁盘需要更多的时间消耗。
- 数据条带,将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本,这与镜像的多个副本是不同的,它通常用于性能考虑。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作,从而获得非常可观的 I/O 性能提升.
- 数据校验,利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以很大程度上提高磁盘阵列的可靠性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。
常用RAID等级
RAID 0
条带模式,即把连续的数据分散到多个磁盘上存取。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行RAID0的主要原因。但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。通常应用于需要高性能存储但对于数据安全性要求不高的环境。
RAID 1
镜像(Mirroring),一个具有全冗余的模式。RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。通常应用于关键性数据的存储,对于数据安全性要求非常高的环境。
RAID 5
分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。RAID 5最少需要3块磁盘,数据条带形式分布。是性能与数据冗余最佳的折中方案,兼顾了存储性能、数据冗余和存储成本的一种方案。
RAID 10
RAID 1+0,该模式最少需要4块磁盘,先按RAID1分成两组,再分别对两组按RAID 0方式条带化 (先做镜象,然后再做条带),兼顾冗余(提供镜像存储)和性能(数据条带形分布)。在实际应用中较为常用,集合了RAID0和RAID1的优点。
RAID 01
RAID 0+1,该模式最少需要4块磁盘,先按RAID 0分成两组,再分别对两组按RAID 1方式镜像(先做条带,然后再做镜象),兼顾冗余(提供镜像存储)和性能(数据条带形分布)。
各等级RAID的比较总结
2.2、磁盘分区
主分区和逻辑分区
Linux下磁盘分区主要分为主分区(Primary Partion)和扩展分区(Extension Partion)两种,且主分区和扩展分区数目之和不能大于四个。主分区一经创建,格式化后可立即使用。扩展分区创建之后,无法直接格式化使用,必须再进行二次逻辑分区(Logical Partion)划分且格式化后才能使用。逻辑分区划分没有数量上的限制。
Linux的磁盘分区命名
Linux下是通过字母和数字的组合方式来标识硬盘的分区的,这点不同于Windows系统下使用类似“C盘”或者“C:”来标识硬盘分区。Linux的这种命名方案比起Windows更加灵活,表达的含义也更加清晰,完全可以通过分区标识来详细了解硬盘分区情况。同时Linux的这种硬盘命名方案是基于文件的,一般有如下文件名方式:/dev/hdxn、/dev/sdxn。
其中:
/dev是所有设备文件存放的目录。
hd、sd代表设备的类型,hd为IDE硬盘,sd为SATA、SCSI、SAS硬盘。
x为一个字母,表示分区在哪个设备上。如/dev/hda表示第一块IDE硬盘,/dev/sdc表示第三块SATA/SCSI/SAS硬盘。
n为数字,1到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition)。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的。如/dev/sda1表示第一块硬盘上的第一个主分区,/dev/sdd6表示第四块硬盘上的第二个逻辑分区。
2.3、Linux目录分区方案
/(根分区),这个分区是安装Linux时必须创建的分区,是所有目录的根源,根据整个可用空间的容量来规划它的大小。
swap(交换空间),这个分区也是安装Linux时必须创建的分区,类似Windows中虚拟内存的概念,该分区无挂载点,大小根据物理内存的大小分配:当物理内存小于4G时,分配物理内存2倍大小的空间;当物理内存大于4G小于16G时,分配等于物理内存大小的空间;当物理内存大于16G时,分配物理内存一半大小的空间。
/boot,存储启动Linux时必须的一些核心文件,建议单独为其创建一个分区,只要该分区不受到破坏,系统就可以进行引导启动,该分区建议500MB大小。
/usr,大部分软件的安装目录,建议单独分区,分区大小按照可用空间规划。
/var,系统及软件日志存放目录,建议单独分区,分区大小按照可用空间规划。
在Linux下可以自定义分区挂载点,建议将数据存储目录单独创建一个挂载点并分区。
2.4、CentOS安装中的软件包选择
在线上服务器的生产环境中,只安装需要的软件包,以最大程度减小安全风险。
3、Linux系统的基本结构
3.1、Linux控制台
默认Linux下有6个字符控制台,每个控制台可以独立作业,互不影响,真正体现了Linux系统的“多用户、多任务”的特性。在图形界面下要转入字符界面时,只需按下“Ctrl+Alt+F1”到“F6”组合键中的任何一个,即可进入字符界面。相反,如果要从字符界面切换到X-window下,可以在字符界面命令行输入“startx”或者按下“Ctrl+Alt+F7”组合键即可。
终端登录标识
ttyn:控制台终端,即本地用户使用的控制台。
pts/n:虚拟终端,远程连接到Linux或在X-Windows下打开的终端。
3.2、硬件设备文件
在Linux系统下,硬件设备都是以文件的形式存在,因而不同硬件设备有不同的文件类型,我们把硬件与系统下相对应的文件称作设备文件。设备文件在外部设备与操作系统之间提供了一个接口,这样,用户使用外部设备就相当于使用普通文件一样。设备文件在Linux系统下存放在/dev下面,设备文件的命名方式是主设备号加次设备号,主设备号说明设备类型,次设备号说明具体指哪一个设备。
hd:代表IDE硬盘或者IDE光驱。
sd:代表SATA/SCSI/SAS硬盘或U盘。
sr:代表SATA/SCSI/SAS光驱。
如/dev/hda1,表示第一块IDE硬盘上的第一个主分区;/dev/sdd6,表示第四块SATA/SCSI/SAS硬盘上的第二个逻辑分区;/dev/sr0,表示第一个SATA/SCSI/SAS光驱。
3.3、Linux下硬件设备的挂载
在Linux下使用mount命令挂载设备,/mnt用做设备的临时挂载点目录,系统管理员可以临时手动挂载一些媒体设备到该目录下;/media用于自动挂载设备的挂载点,主要用于U盘等设备的自动挂载。
mount命令格式如下:
mount –t 文件系统类型 设备名 挂载点
其中-t参数可以省略,系统将自动识别设备所使用的文件系统类型。注意:挂载点必须为一个已经存在的目录,如果挂载目录不存在,则需要使用mkdir命令创建后再挂载。
一个例子,在Linux下挂载光盘:
mount /dev/cdrom /mnt/cdrom
使用umount命令来卸载设备,格式如下:
umount 挂载点
一个例子,卸载光盘:
umount /mnt/cdrom
注意:在Linux下,更换光盘时,必须先卸载原来的光盘,否则在光盘卸载前光驱上的弹出键将不起作用。
3.4、Linux下常见的文件系统类型
文件系统类型就是分区的格式,对于不同的外设,Linux也提供了不同的文件类型。
- msdos:DOS文件系统类型
- vfat:支持长文件名的DOS分区文件系统类型,也可理解为Windows文件系统类型
- iso9660:光盘格式文件系统类型
- ext2/ext3/ext4:Linux下的主流文件系统类型
- xfs:Linux下一种高性能的日志文件系统,在CentOS 7版本中成为默认文件系统
注意:Linux下不支持NTFS文件系统,在Linux下挂载NTFS文件系统后只能读取设备中的数据,不能向设备写入数据。
3.5、Linux目录结构与目录功能
经典的树形目录结构:Linux系统设计中最优秀的特性之一就是将所有内容都以文件的形式展现出来,通过一个树形结构统一管理和组织这些文件。
/bin:存放可执行的二进制文件,bin是binary的缩写,/bin目录下存放的是普通用户经常使用的Linux命令。
/boot:存放启动Linux时的一些核心文件,具体包含一些镜像文件和链接文件,因此这个目录非常重要,如果遭到破坏,系统将无法启动。
/dev:包含了系统所有的设备文件。
/etc:存放系统管理相关的配置文件以及子目录,其中比较重要的有系统初始化文件/etc/rc、用户信息文件/etc/passwd、用户密码文件/etc/shadow、配置开机自动挂载/etc/fstab、用于本地解析的/etc/hosts、DNS配置文件/etc/resolv.conf、网卡配置文件/etc/sysconfig/network-script/ifcfg-网卡名、计划任务配置文件/etc/crontab、系统环境变量设置/etc/profile、日志输出配置文件/etc/rsyslog.conf等。
/home:该目录是系统中每个用户的工作目录,在Linux系统中,每个用户都有自己的一个目录,而该目录一般是由用户的账号命名的,例如有一个用户xxx,那么它的默认目录就是/home/xxx。
/root:该目录是root用户默认的工作目录,普通用户无进入该目录的权限。
/run:保存系统运行时需要的信息文件,重启或关机后消失,下次系统运行时重新生成。
/sbin: /sbin中的s是Spuer User的意思,也就是说只有超级用户才能执行这些命令,常见的如磁盘检查修复命令fcsk、磁盘分区命令fdisk、创建文件系统命令mkfs、关机命令shutdown和初始化系统命令init等。
/tmp:该目录为临时文件目录,主要用于存放临时文件,这些临时文件可能会随时被删除,也可以随时删除。
/usr:此目录主要用于存放应用程序和文件。如果在系统安装的时候,选择了很多软件包,那么这些软件包默认会安装到此目录下,我们平时安装的一些软件,默认情况下也会安装到此目录内,因此这个目录一般比较大。 /usr/src目录用于存放系统及程序的源码。
/var:此目录主要用于存放系统运行以及软件运行时的信息。 /var/log用于存储系统及软件的日志文件、 /var/lock存放程序锁文件。
/proc:此目录是一个虚拟目录,目录所有信息都是内存的映射,通过这个虚拟的内存映射目录,可以和内核内部数据结构进行交互,获取有关进程的有用信息,同时也可以在系统运行中修改内核参数。与其他目录不同,/proc存在于内存中,而不是硬盘上。
/lib和/lib64:该目录中存放的是共享程序库和映像文件,可供很多程序使用。通过这些共享映射文件,每个程序就不必分别保存自己的库文件,Linux提供了一组可供所有程序使用的文件。在该目录中,还包含引导进程所需的静态库文件。
3.6、Linux系统初始化----init机制
Linux操作系统的启动首先从BIOS开始,接下来Linux引导程序将内核映像加载到内存,进行内核初始化,内核初始化的最后一步就是启动PID为1的init进程。这个进程是系统的第一个进程,它负责产生其它所有用户进程。
大多数Linux发行版的init系统是和System V相兼容的,因此被称为sysvinit,这是最早也是最流行的init系统,在RHEL7.x/Centos7.x发行版本之前的系统中都采用sysvinit。
sysvinit概念简单清晰,主要依赖于Shell脚本,一次一个串行的启动服务。所有的服务启动脚本都放置于/etc/init.d/目录,基本上都是使用bash shell所写成的脚本程序。
可以通过以下命令来启动、关闭、重启及查看服务运行状态:
启动: /etc/init.d/daemon start or service daemon start
关闭: /etc/init.d/daemon stop or service daemon stop
重启: /etc/init.d/daemon restart or service daemon restart
查看状态: /etc/init.d/daemon status or service daemon status
重新载入配置信息而不中断服务: /etc/init.d/daemon reload or service daemon reload
通过以下命令设置服务的自启动(各运行级下均生效):
自启动:chkconfig daemon on
取消自启动:chkconfig daemon off
查看服务是否自启动:chkconfig --list daemon
将自定义服务加入系统服务:chkconfig --add daemon
从系统服务中删除自定义服务:chkconfig --del daemon
init机制中的系统运行级
init可以根据使用者自订的执行等级(runlevel)来唤醒不同的服务,以进入不同的操作模式。基本上 Linux 提供7个执行等级,分别是0, 1, 2,3,4,5,6,使用init x命令即可进入相应的运行级。
init 0:关机模式
init 1: 单用户援救模式
init 2:纯字符多用户模式,无网络支持
init 3:纯字符多用户模式,完整系统运行
init 4:保留未使用
init 5:图形界面模式
init 6:重启模式
/etc/inittab文件用于配置操作系统启动后默认进入的运行级。
各个运行级的启动脚本是通过 /etc/rc.d/rc[0-6]/SXXdaemon 链接到 /etc/init.d/daemon 。链接文件名 (SXXdaemon) 的功能为: S 为启动该服务,XX是数字,表示启动的顺序。由于有SXX的设定,因此在开机时可以依序执行所有需要的服务。该目录下还存在KXXdaemon文件,K为关闭服务。
通过以下命令配置服务在指定运行级启动或关闭:
chkconfig --level 运行级 daemon on/off
3.7、Linux系统初始化----systemd
sysvinit概念简单清晰,主要依赖于Shell脚本,但它一次一个串行地启动进程,决定了它的最大弱点:启动太慢。虽然在服务器上这个缺点不算什么,但是当Linux被应用到移动终端设备上时,这个缺点就变成了大问题。所以在RHEL7/CentOS7中开始使用systemd来管理系统,systemd并发处理所有服务,加速开机速度。
从运行级(runlevel)到运行目标(target)
在systemd管理体系中,以前的运行级别(runlevel)的概念被新的运行目标(target)所取代,tartget的命名类似于“multi-user.target”这种形式,比如原来的运行级别3(runlevel3)对应于新的多用户目标“multi-user.target”,运行级别5(runlevel5)就对应于“graphical.target”。由于systemd机制中不再使用runlevle的概念,所以/etc/inittab也不再被系统使用。
在新的systemd管理体系里,默认的target是通过软链接来实现的。在/etc/systemd/system下的default.target即为默认target,是一个到/lib/systemd/system/xxx.target的软链接。如果要修改默认的target,则先删除default.target,然后通过ln –sf命令建立一个新的软链接。 另外可以使用systemctl工具来查看和修改默认target,命令如下:
# 查看默认target sytemctl get-default # 修改默认target systemctl set-default 新的target
systemd下的系统管理
systemd提供了一个非常强大的命令行工具systemctl,可以把systemctl看作是service和chkconfig的组合体。要查看、启动、停止、重启、启用或者禁用系统服务,都可以通过systemctl命令来实现 。
查看/启动/停止/重启服务:systemctl status/start/stop/restart daemon.service
设置自启动:systemctl enable/disable daemon.service
重新载入配置信息而不中断服务:systemctl reload daemon.service