Linux 基础入门
=====================================================================
概述:
=====================================================================
操作系统
1.简介
★OS: Operating System,通用目的的软件程序
★操作系统的内核(kernel):
操作系统其实也是一组程序。这组程序的重点在于管理计算机的所有活动及驱动系统中的所有硬件;
总之硬件的所有操作都必须要通过这个操作系统来完成;
内核主要在于管理硬件与提供相关的能力。非常重要,因此,内核程序所放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。
☉内核的功能:
系统调用接口;
程序管理;
内存管理;
文件系统管理;
设备驱动
★操作系统(OS)分类:
服务器OS:RHEL, CentOS,WindowsServer,AIX
桌面OS:windows 10,windows 7,Mac OS,fedora
移动设备OS:Andriod,IOS,YunOS
★开发接口标准
☉ABI:Application Binary Interface(应用程序二进制接口)
ABI描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
即:软件要想在操作系统上运行,必须要符合此操作系统兼容的ABI接口;
ABI接口由操作系统决定,不同的操作系统ABI接口是不相同的;
☉API:Application Programming Interface(应用程序编程接口)
API定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译。
☉POSIX: Portable Operating System Interface(可移植操作系统接口)
IEEE在操作系统上定义的一系列API标准
POSIX兼容的程序可在其它POSIX操作系统编译执行
☉运行程序格式:
Windows: EXE,dll(dynamic link library),lib
Linux: ELF,so(shared object),.a
注意:
Unix-like:Unix类的操作系统
Linux,BSD,AIX...Unix类的操作系统ABI和API是兼容的
2.库、系统调用、操作系统和硬件之间的关系
★硬件设备与操作系统(OS)
操作系统的一部分功能就是管理硬件设备,它拥有硬件设备的所有权限, 并且把硬件设备包装隐藏起来。完成所有硬件设备的资源管理和驱动;
资源切割,为每个程序提供一个虚拟的,独有访问的一块硬件资源,如: 内存块,CPU的时间片和磁盘空间等;
而运行在这块资源上的程序除了知道监控它的操作系统外,不会知道其实还有其它的程序在运行,这就是多任务操作系统。
运行在操作系统上面的程序,不用管硬件是怎么驱动和管理的;
如果每写一个程序都要把驱动硬件的功能写上会是一种什么概念,所以,为了使人们能够以更方便、更容易理解的方式提供给程序使用硬件的目的,出现了系统调用。
★操作系统与系统调用接口
操作系统会把一些内核指令 通过一些 函数(接口) 分享出来, 而这个接口就叫作系统调用。 程序只要调用这个接口就可以执行某些硬件动作;
操作系统掩盖了硬件特性,而以更简便的方式把使用硬件的方式向上提供给程序, 怎么向上提供呢, 就是用系统调用接口;
但是这些接口功能简单,很底层,还需要程序员来为这些功能简单的接口通过编程来组合出来复杂的功能,而这个很难,很复杂,而且程序每个都必须要这样作,那就更难了。关键是这些程序可能需要实现的调用接口的功能都是一样的。 所以就引出来了库。
★系统调用接口与库
这个库就是系统调用接口之上的再次封装来实现某些特殊的复杂的功能的接口。
简单的说:库就是把各个系统调用的接口的单一的功能,组合起来,来实现一些复杂的,有趣的功能。而它还制作了一个接口,可以被其它程序调用。 库就是一个程序。
库接口也被称为API(Application Programming Interface,应用程序编程接口)
总结:
因为不能每一个程序都要来驱动硬件设备,所以有了操作系统这个中间层;操作系统提供系统调用接口供程序员编程。而程序也是通过这个接口来达到使用硬件的目地,而不用管操作系统是怎么操作硬件的。
因为系统调用接口提供的的功能单一,数量少,需要程序员繁杂的操纵和组合这些接口来实现功能。而且要实现的这个功能,不止就一个程序要用,所以就有了库, 库就是实现了这个功能的程序,而这个库提供了一个接入点,接口, 这个接入点就是API。程序员要想使用这个库的功能,只要按照库的说明来接入就可以了。程序通过库来达到目的, 而不用管库是怎么工作的。
一个模块一个模块的对接,复杂功能分层化
附图:
2.分层结构图:
3.编程语言
☉低级语言:
机器语言:0和1
汇编语言:和机器语言一一对应,与硬件相关的特有代码、驱动程序开发
☉中级语言:C
系统级应用、驱动程序
☉高级应用:java, Objective-C,C#,python, php
应用级程序开发
Linux起源及哲学思想
1.服务器操作系统
☉Windows
☉Linux:GNU/Linux
☉Unix
附图:
2.Linux起源及发行版本
★Linux起源
☉1984年:Richard Stallman发起GNU项目和自由软件基金会
创建开源的UNIX实用工具版本
创建通用公共许可证(GPL)
开源软件许可实施原则
☉1991年:Linus Torvalds发布Linux
创建开放源码,类Unix的内核,在GPL下发布
☉Linux操作系统:
Linux内核+ GNU工具=完整的类UNIX操作系统
如:CentOS,Ubuntu,Android
★Linux发行版本
☉Slackware:SUSE Linux Enterprise Server (SLES)
OpenSUSE桌面
☉Debian
ubuntu,mint
☉RedHat
rhel: redhatenterprise linux 每18个月发行一个新版本
CentOS:兼容rhel的格式
中标麒麟:中标软件
Fedora:每6个月发行一个新版本
☉ArchLinux:轻量简洁
☉Gentoo:极致性能,不提供传统意义的安装程序
☉LFS: Linux From scratch 自制Linux
☉Android: kernel+busybox(工具集)+java虚拟机
★软件程序:版本号
格式:major.minor.release (主版本号,次版本号,发型号或者修正号)
如:Linux:0.99,2.4,2.6,3.0,4.0等
发行版本也有自己的版本号:
如:RHEL:5.x,6.x,7.x
★开源open source
☉开源:软件和源代码提供给所有人
自由分发软件和源代码
能够修改和创建衍生作品
作者的代码完善
☉开源协定:
GPL协定:LGPL,GPLv2,GPLv3
BSD协定:
Apache协定:
☉软件分类:商业,共享,自由
Community:社区版,遵循开源协定
Enterprise:商业版
2.Linux哲学思想
一切都是一个文件(包括硬件)
小型,单一用途的程序
链接程序,共同完成复杂的任务
避免令人困惑的用户界面
配置数据存储在文本中
3.Linux获取发行版(镜像站点)
http://mirrors.163.com
Linux基础入门
1.操作系统与硬件
★无论Linux、OSX、Windows操作系统,他们都是有以下部分组成(分层结构):
最底层:硬件;
底层之上:将硬件接口抽象成系统调用(kernel)
再之上:库;
再此之上:应用程序
★程序的运行有两种方式
开机自动运行;
用户通过交互式接口登录或者连接系统上去,来手动运行程序。
用户可以通过交互式接口对系统及程序进行操作、配置管理。
注意:
系统的运行独立与用户的交互式接口,接口有无,都不影响系统及程序的运行,所以交互式接口不是必需的。但是有些程序是建立在交互式接口之上的。
2.终端(terminal)
★定义:
终端:用户与主机交互,是必然用到的设备,但是对于服务器来说,非必要不见;
★分类:
☉物理终端:
是直接在主机之上,是本机自带的,直接连入的,也称之为物理控制台(console)
表示:/dev/console
只有在特殊情况下才会用到,如:单用户模式;
☉虚拟终端:
Linux提供给我们6个虚拟终端,这些虚拟终端是附加在物理终端之上的,用软件方式虚拟实现的终端,CentOS默认启用6个虚拟终端,可以通过快捷键来切换。
表示:/dev/tty# [1,6]
切换方式:Ctrl+Alt+F[1-6]
☉图形终端
也是附加在物理终端之上,用软件方式虚拟实现的终端,但额外会提供桌面环境,也是虚拟终端的一种切换方式。
切换方式:CentOS 6 :Ctrl+Ait+F7
CentOS 7:在哪个虚拟终端启动,即位于哪个虚拟终端
命令切换方式:~]# chvt 1...
启动GUI:在某一虚拟终端接口运行命令:startx &
☉伪终端(模拟终端):
图形界面下打开的命令行接口,还有基于ssh协议和telent协议等远程打开的命令行界面。
表示:/dev/pts/#
★查看当前的终端设备命令:
~]# tty
[root@CentOS6 ~]# tty /dev/pts/0注意:
在启动设备之后,在其上关联一个用户接口程序,即可实现与用户交互;
终端实际上是一个设备,一个设备要想与系统进行交互,必须有交互接口,当我们开启一个终端时,系统会自动的在终端上运行(附加)一个交互式程序
3.交互式程序的接口
★交互式程序有两类:GUI和CLI
☉GUI:图形化界面,是基于X协议实现的窗口管理器(桌面、按钮的作用等)
Linux桌面系统有:
GNOME(C程序开发,gtk 开发库)
KDE (C++程序开发,qt开发库)
XFCE (轻量级桌面)
☉CLI:命令行界面:
对应的叫做shell程序,用户要想与系统交互,必须通过shell,不同的程序员开发的程序不一样但是都可以实现同样的功能(就是交互式功能),所以说shell程序也有很多种,如:Sh,csh,Ksh,Bash,zsh;
Shell又被称为Linux的命令解释器;
获取当前环境使用的shell是那种shell
# echo $SHELL
显示当前环境所使用的所有的shell
# cat /etc/shells
演示:
# 获取当前环境使用的shell [root@CentOS6 ~]# echo $SHELL /bin/bash #显示所有的shell [root@CentOS6 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh