前言
最近要开始学习linux相关的知识,学习之前应该需要搞懂什么是linux,又是基于怎么实现的。
linux是基于计算机上的一种类Unix操作系统,支持多用户多任务多cpu,这里就需要解释一下计算机的组成以及功能。
## 计算机的组成及其功能 ##
计算机的组成基本都遵循着冯诺依曼的基本思想:
1:必须有一个存储器;2:必须有一个控制器;3:必须有一个运算器,用于完成算术运算和逻辑运算;4:必须有输入设备和输出设备,用于进行人机通信。:另外,程序和数据统一存储并在程序控制下自动工作。
各个部分的功能:
1.运算器或称算术逻辑单元(Arithmetical and Logical Unit) 运算器的主要功能是对数据进行各种运算。这些运算除了常规的加、减、乘、除等基本的算术运算之外,还包括能进行“逻辑判断”的逻辑处理能力,即“与”、“或”、“非”这样的基本逻辑运算以及数据的比较、移位等操作。
2.存储器(Memory unit) 存储器的主要功能是存储程序和各种数据信息,并能在计算机运行过程中高速、自动地完成程序或数据的存取。存储器是具有“记忆”功能的设备,它用具有两种稳定状态的物理器件来存储信息。这些器件也称为记忆元件。由于记忆元件只有两种稳定状态,因此在计算机中采用只有两个数码“0”和“1”的二进制来表示数据。记忆元件的两种稳定状态分别表示为“0”和“1”。日常使用的十进制数必须转换成等值的二进制数才能存入存储器中。计算机中处理的各种字符,例如英文字母、运算符号等,也要转换成二进制代码才能存储和操作。 存储器是由成千上万个“存储单元”构成的,每个存储单元存放一定位数(微机上为8位)的二进制数,每个存储单元都有唯一的编号,称为存储单元的地址。“存储单元”是基本的存储单位,不同的存储单元是用不同的地址来区分的,就好像居民区的一条街道上的住户是用不同的门牌号码来区分一样。 计算机采用按地址访问的方式到存储器中存数据和取数据,即在计算机程序中,每当需要访问数据时,要向存储器送去一个地址指出数据的位置,同时发出一个“存放”命令(伴以待存放的数据),或者发出一个“取出”命令。这种按地址存储方式的特点是,只要知道了数据的地址就能直接存取。但也有缺点,即一个数据往往要占用多个存储单元,必须连续存取有关的存储单元才是一个完整的数据。 计算机在计算之前,程序和数据通过输入设备送入存储器,计算机开始工作之后,存储器还要为其它部件提供信息,也要保存中间结果和最终结果。因此,存储器的存数和取数的速度是计算机系统的一个非常重要的性能指标。
3.控制器(Control Unit) 控制器是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 控制器从存储器中逐条取出指令,分析每条指令规定的是什么操作以及所需数据的存放位置等,然后根据分析的结果向计算机其它部分发出控制信号,统一指挥整个计算机完成指令所规定的操作。因此,计算机自动工作的过程,实际上是自动执行程序的过程,而程序中的每条指令都是由控制器来分析执行的,它是计算机实现“程序控制”的主要部件。 通常把控制器与运算器合称为中央处理器(Central Processing Unit-CPU)。工业生产中总是采用最先进的超大规模集成电路技术来制造中央处理器,即 CPU 芯片。它是计算机的核心部件。它的性能,主要是工作速度和计算精度,对机器的整体性能有全面的影响。
4.输入设备(Input device) 用来向计算机输入各种原始数据和程序的设备叫输入设备。输入设备把各种形式的信息,如数字、文字、图像等转换为数字形式的“编码”,即计算机能够识别的用1和0表示的二进制代码(实际上是电信号),并把它们“输入”(INPUT)到计算机内存储起来。键盘是必备的输入设备、常用的输入设备还有鼠标器、图形输入板、视频摄像机等。
5.输出设备(Output device) 从计算机输出各类数据的设备叫做输出设备。输出设备把计算机加工处理的结果(仍然是数字形式的编码)变换为人或其它设备所能接收和识别的信息形式如文字、数字、图形、声音、电压等。常用的输出设备有显示器、打印机、绘图仪等。
Linux的发行版
光是有计算机是远远不够的,还需要用户对其进行操作。但是计算机只认识机器码“0”和“1”,我们如果单纯使用二进制来操作计算机资源则显得麻烦,这时候需要一个中间层来替我们进行转换—-操作系统。
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。操作系统的功能包括管理计算机系统的硬件、软件及数据资源,控制程序运行,改善人机界面,为其它应用软件提供支持,让计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口等。实际上,用户是不用接触操作系统的,操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如:划分CPU时间,内存空间的开辟,调用打印机等。
而我们常说的linux指的是GNU/linux,即是采用linux内核的GNU操作系统,而Linux只是一个内核。是的,Linux只是一个操作系统中的内核。内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O等。操作系统的实际名称是GNU。什么是GNU?GNU代表GNU’s Not Unix。可以说是一个操作系统又可以说是一种规范。
Linux系统内核指的是一个由Linus Torvalds负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。而Linux发行套件系统才是我们常说的Linux操作系统,也即是由Linux内核与各种常用软件的集合产品,发行版为许多不同的目的而制作, 包括对不同计算机结构的支持, 对一个具体区域或语言的本地化,实时应用,和嵌入式系统,甚至许多版本故意地只加入免费软件。已经有超过三百个发行版被积极的开发,最普遍被使用的发行版有大约十二个。
Linux发行版(Linux distribution)是一种为一般用户预先集成好的Linux操作系统及各种应用软件。一般不需要用户重新编译,在直接安装之后,只需要作出小幅度的更改设置即可。Linux发行版通常包含了桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常使用Linux、以及来自GNU计划的软件、和基于X Window的图形界面组成。
Linux发行版通常分为商业发行版和社区发行版。也有少部分既不属于发行版又不属于社区发行版,Linux的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Red Hat(RHEL红帽)为代表,后者以Debian为代表。下面我来总结和对比一下几个Linux的发行版本。
1.RHEL红帽
Redhat,应该称为Redhat系列,包括
(1)RHEL (Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本,稳定性非常好,适合服务器使用)
(2)Fedora Core (由原来的Redhat桌面版本发展而来,免费版本,稳定性较差,最好只用于桌面应用)
(3)CentOS (RHEL的社区克隆版本,免费版本,稳定性非常好,适合服务器使用)
Redhat是国内使用人群最多的Linux版本,以至于有的人将Redhat等同于Linux,而有些老手更是只用这一个版本的Linux。所以有什么不明白的地方,很容易找到人来问,而且网上的Linux教程基本都是以Redhat为例来讲解。Redhat系列的包管理方式采用的是基于RPM包和YUM包的管理方式,包分发方式是编译好的二进制文件。
2. CentOS
社区企业操作系统(Community Enterprise Operating System,Centos)
来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。
CentOS 是RHEL源代码再编译的产物,而且在RHEL的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖。
3.Fedora
用户可免费体验到最新的技术或工具,而功能成熟后会被加入到RHEL系统中。因此也被称为RHEL系统的“试验田”,如果感兴趣的话,可以多关注此类系统的发展变化及新特性。
由全球社区爱好者构建的面向日常应用的快速且强大的操作系统。它允许任何人自由地使用、修改和重发布,无论现在还是将来。它由一个强大的社群开发,这个社群的成员以自己的不懈努力,提供并维护自由、开源代码的软件和开放的标准。Fedora 项目由 Fedora 基金会管理和控制,得到了 Red Hat 的支持。Fedora (第七版以前为Fedora Core)是一款基于 Linux 的操作系统,也是一组维持计算机正常运行的软件集合。其目标是创建一套新颖、多功能并且自由和开源的操作系统。
4.OpenSUSE
德国著名的Linux系统,全球范围内有着不错的声誉及市场占有率,发行量在欧洲占第一位。。OpenSUSE对个人来说是完全免费的,包括使用和在线更新。OpenSUSE被评价为最华丽的Linux桌面发行版,甚至超越win7,但它的优势绝不仅仅局限于win7还要绚丽的用户交互界面,其性能也绝不亚于其他Linux桌面发行版!
5.Gentoo
具有极高的自定制性,操作复杂,因此适合有经验的人员使用。
它能为几乎任何应用程序或需求自动地作出优化和定制。追求极限的配置、性能,以及顶尖的用户和开发者社区,都是Gentoo体验的标志特点。 Gentoo的哲学是自由和选择。得益于一种称为Portage的技术,Gentoo能成为理想的安全服务器、开发工作站、专业桌面、游戏系统、嵌入式解决方案或者别的东西——你想让它成为什么,它就可以成为什么。
6.Debian
应该称为Debian 系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。提供了接近十万种不同的开源软件支持,在国外用于很高的认可度和使用率。对于各类内核架构支持性良好,稳定性、安全性强更有免费的技术支持。
Debian最具特色的是apt-get / dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去。
分为三个版本分支(branch):
(1)unstable,为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。
(2)testing,经过unstable中的测试,相对较为稳定,也支持了不少新技术。
(3)stable,一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。
7.Ubuntu
Ubuntu是一款基于Debian派生的操作系统(严格来说不能算一个独立的发行版本),对新款硬件具有极强的兼容能力。 特点是界面非常友好,容易上手,对硬件支持非常全面,是最适合做桌面系统的Linux发行版本,同时Ubuntu也可用于服务器领域。
Ubuntu的目标在于为一般用户提供一个最新的,同时又相对稳定的主要自由软件构建而成的操作系统。Ubuntu具有强大的社区力量,用户可以方便地从社区获取帮助。
Linux的哲学思想
一切皆文件。几乎把所有的资源系统抽象为文件形式:包括硬件设备,甚至通信接口等。作用:提高资源管理效率。例如:
物理终端:/dev/console
虚拟终端:/dev/tty#(#为1~6)
串行终端:/dev/ttyS#
伪终端:/dev/pts/#
由众多功能单一的程序组成:一个程序只做一件事,并且做好;组合小程序完成复杂任务。作用:程序分工明确,运行后方便进程管理。程序代码也轻量化,高效,容易修复错误。
小程序易于理解,维护,消耗系统资源较少,易于与其他工具结合实现更多的功能
尽量避免跟用户交互。使用命令行接口执行效率更高,易于以编程的方式实现自动化任务
使用文本文件保存配置信息。文本文件易于阅读和编辑。
提供机制而非策略。
机制,是实现某个功能需要的原语操作和结构
策略,是某功能的具体实现
提供机制,而非策略,指的就是要给用户充分的自主可调配性
Linux系统命令介绍
(1)ifconfig:查看网卡信息并对其进行修改配置
格式:ifconfig [-v] [-a] [-s] [interface]
ifconfig [-v] interface [aftype] options | address …
示例:ifconfig –查看所有网卡信息
ifconfig InterfaceName up/down –启用网卡/关闭网卡
ifconfig [-]arp –启用ARP协议/(加横杠)关闭ARP协议
(2)echo:回显文本信息
格式:echo [SHORT-OPTION]... [STRING]...
option 可选选项
-n 禁止自动添加换行符
-e 允许使用转义符 \n 换行 \t 制表符
示例:echo -n "hello world." --显示hello world.并且不换行
echo -e “hello\t world.” –转义符生效,输出hello world.
也可以用作输出变量
(3)tty:查看当前的终端设备
格式:tty [OPTION]…
tty显示当前所在终端设备名称
(4) startx :启用X Window,即是开启一个图形界面会话
(5)export 设置(增加、修改、删除)或显示环境变量
export [-fn] [name[=value] …] or export -p
Linux下调用动态库和windows不一样.linux 可执行程序是靠配置文件去读取路径的,因此有些时候需要设置路径功能说明:设置或显示环境变量。(比如我们要用一个命令,但这个命令的执行文件不在当前目录,这样我们每次用的时候必须指定执行文件的目录,麻烦,在代码中先执行export,这个相当于告诉程序,执行某某东西时,需要的文件或什么东东在这些目录里)
-f 指定shell函数
-n删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中
-p 列出所有的shell赋予程序的环境变量
例:export -p
(6)pwd显示出当前工作目录
pwd [OPTION]…
-P 显示真实路径而不是符号连接
(7)history 记录已经执行的命令
history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg…]
-c 清除历史命令列表
-a 增加命令历史
-n 从命令历史中读取n条显示出来
例:history 10 history -c
(8)shutdown 正常关闭/重启计算机
shutdown [OPTION]… TIME [MESSAGE]
-r 重启
-h 关机
-c 取消已经计划了的shutdown活动
-k 仅输出警告信息,并不真的执行关机/重启动作
例 shutdown -h now
shutdown -k 1:00 “Please save you data files”
(10)poweroff 重启或者关闭系统
poweroff [OPTION]…
-f 强制关机
-p 调用halt来取代poweroff
-w 并不真的关机 只是将动作写入/var/log/wtmp中
例:poweroff -f
(11)reboot 重启系统
reboot [OPTION]..
(12)hwclock 显示硬件时间
hwclock [functions] [options]
-r 显示硬件时间
–set 设置硬件时间
(13)date 可显示日期和时间
date [OPTION]… [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
例 date +%A date +%MM-%DD-%YY
如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的 ##
若是bash外部命令,可使用 man COMMAND或COMMAND –help来获取。亦可通过info COMMAND, 程序自身的帮助文档、长须官方文档或发行版的官方文档等渠道来获取帮助信息。
man 共有八个章节,分别为:
man1:用户命令
man2:系统调用
man3:C库调用
man4:设备文件及特殊文件
man5:配置文件格式
man6:游戏
man7:杂项
man8:管理类的命令
man命令的配置文件:/etc/man.config
使用man,例如我们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,同样,我们输入“man ifconfig”它会在最左上角显示“IFCONFIG(8)”。也可以这样输入命令:“man [章节号] 手册名称”。
man是按照手册的章节号的顺序进行搜索的,比如:
man sleep
只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:
man 3 sleep
退出直接按q即可。
还有,如果想显示1-9所有选项章节,我们可以这样做:
man -a 查找的关键字
每显示完一个选项目录按q键进入下一个选项目录 如想直接跳出,按: ctrl + z。
Linux发行版的基础目录名称命名法则及功用规定
在LINUX系统中有一个重要的概念:一切都是文件。 其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。这样带来优势也是显而易见的
目录描述
/主层次 的根,也是整个文件系统层次结构的根目录
/bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat、ls、cp等等
/boot存放引导加载程序文件,例如kernels、initrd等
/dev存放必要的设备文件,例如/dev/null
/etc存放主机特定的系统级配置文件。其实这里有个关于它名字本身意义上的的争议。在贝尔实验室的UNIX实施文档的早期版本中,/etc表示是“其他(etcetera)目录”,因为从历史上看,这个目录是存放各种不属于其他目录的文件(然而,文件系统目录标准 FSH 限定 /etc 用于存放静态配置文件,这里不该存有二进制文件)。早期文档出版后,这个目录名又重新定义成不同的形式。近期的解释中包含着诸如“可编辑文本配置”或者“额外的工具箱”这样的重定义
/etc/opt存储着新增包的配置文件 /opt/.
/etc/sgml存放配置文件,比如 catalogs,用于那些处理SGML(译者注:标准通用标记语言)的软件的配置文件
/etc/X11X Window 系统11版本的的配置文件
/etc/xml配置文件,比如catalogs,用于那些处理XML(译者注:可扩展标记语言)的软件的配置文件
/home用户的主目录,包括保存的文件,个人配置,等等
/lib/bin/ 和 /sbin/中的二进制文件的必需的库文件
/lib<架构位数>备用格式的必要的库文件。 这样的目录是可选的,但如果他们存在的话肯定是有需要用到它们的程序
/media可移动的多媒体(如CD-ROMs)的挂载点。(出现于 FHS-2.3)
/mnt临时挂载的文件系统
/opt可选的应用程序软件包
/proc以文件形式提供进程以及内核信息的虚拟文件系统,在Linux中,对应进程文件系统(procfs )的挂载点
/root根用户的主目录
/sbin必要的系统级二进制文件,比如, init, ip, mount
/srv系统提供的站点特定数据
/tmp临时文件 (另见 /var/tmp). 通常在系统重启后删除
/usr二级层级存储用户的只读数据; 包含(多)用户主要的公共文件以及应用程序
/usr/bin非必要的命令二进制文件 (在单用户模式中不需要用到的);用于所有用户
/usr/include标准的包含文件
/usr/lib库文件,用于/usr/bin/ 和 /usr/sbin/中的二进制文件
/usr/lib<架构位数>备用格式库(可选的)
/usr/local三级层次 用于本地数据,具体到该主机上的。通常会有下一个子目录, 比如, bin/, lib/,share/.
/usr/local/sbin非必要系统的二进制文件,比如用于不同网络服务的守护进程
/usr/share架构无关的 (共享) 数据.
/usr/src源代码,比如内核源文件以及与它相关的头文件
/usr/X11R6X Window系统,版本号:11,发行版本:6
/var各式各样的变量(Variable)文件,一些随着系统常规操作而持续改变的文件就放在这里,比如日志文件,脱机文件,还有临时的电子邮件文件
/var/cache应用程序缓存数据. 这些数据是由耗时的I/O(输入/输出)的或者是运算本地生成的结果。这些应用程序是可以重新生成或者恢复数据的。当没有数据丢失的时候,可以删除缓存文件
/var/lib状态信息。这些信息随着程序的运行而不停地改变,比如,数据库,软件包系统的元数据等等
/var/lock锁文件。这些文件用于跟踪正在使用的资源
/var/log日志文件。包含各种日志。
/var/mail内含用户邮箱的相关文件
/var/opt来自附加包的各种数据都会存储在 /var/opt/.
/var/run存放当前系统上次启动以来的相关信息,例如当前登入的用户以及当前运行的daemons(守护进程).
/var/spool该spool主要用于存放将要被处理的任务,比如打印队列以及邮件外发队列
/var/mail过时的位置,用于放置用户邮箱文件
/var/tmp存放重启后保留的临时文件