在这篇文章中你讲看到如下内容:
- 计算机的组成及功能;
- Linux发行版之间的区别和联系;
- Linux发行版的基础目录及功用规定;
- Linux系统设计的哲学思想;
- Linux系统上获取命令帮助,及man手册的章节;
- 命令的使用格式及一些命令的使用。
一、计算机的组成及功能
当今社会,没有用过计算机的朋友应该算很少吧?就算没经常接触计算机,但是智能手机大概会人手一个或者多个吧。智能手机其实就可以算作是一个微小的计算机了。但是,你了解计算机是什么吗?计算机都有哪些部件组成吗?接下来我们就谈谈计算机由哪些部件组成,各部件有什么作用。
首先,我们来看一下什么是计算机:『能够接收和存储信息、按程序快速计算和判断并输出处理结果的现代化智能电子设备』。通过以上的定义,我们可以总结一下:计算机是由硬件和软件组成的。其中硬件就是可以接收用户的输入、存储信息、处理结果的输出、计算和判断部件;而软件就是程序。
专业一点的讲,计算机的硬件由五大部件组成:运算器、控制器、存储器和输入输出设备组成。
运算器:主要负责程序运算与逻辑判断;
控制器:主要在协调各周边组件与各单元间的工作;
存储器:为CPU进行运算和判断提供数据,并且CPU处理完毕的数据也要先写到存储器中;
输入设备:存储器上的数据就是从输入设备传输进来的,如键盘、鼠标、扫描仪等等;
输出设备:输出经过CPU处理后的数据,如屏幕、打印机等等。
有了上面的这些硬件,计算机还不能够工作,必须要有特定的程序,才能完成相应的工作,而计算机上的程序又分为系统程序和应用程序。
系统程序:能够与硬件进行打交道,屏蔽掉硬件的复杂性,为其他应用程序提供接口,从而使计算机能够完成各种各样的任务。如操作系统,它就是一组程序,用于管理计算机的所有活动以及驱动系统中的所有硬件。
应用程序:是用户按其需要自行编写的专用程序,它借助系统软件来运行。如我们常用的word字处理软件、QQ即时聊天软件等等。
二、Linux发行版
2.1.Linux的内核版本
Linux内核版本的编号是这个样子的:
Major.minor.release 主版本.次版本.发布版本[-修改版本]
如:2.6.18
由于开发Linux内核的人很多,以致于造成Linux内核经常性的变动。而对于非开发人员或企业来说,他们需要的是一个稳定的版本,常变动的核心并不适合他们。因此托瓦兹便将内核的版本分为两股,给予不同的编号:
主、次版本为奇数:发展中的版本
这种内核版本主要用在测试与发展新功能,所以通常这种版本仅有内核开发工程师才会使用。如果新增的功能测试完没问题后,才会加入到下一版的稳定版本中。
主、次版本为偶数:稳定版本
等内核功能发展成熟后会加到这类的版本中,主要用于一般家庭计算机和企业中。
2.2.什么是发行版
虽然由Torvalds负责开发的Linux仅具有Kernel与kernel提供的工具,但是很多软件都可以在Linux上运行了,因此,这已经算是一个相对完整的操作系统了。但是,Liunx给用户提供的是源代码,这些源代码想要运行,就必须先编译成一个可执行程序。因此,想要使用Linux就必须先编译Linux内核。但是,这个编译过程相当复杂,并且耗时,就算是专业的计算机人员也未必可以编译一套Linux系统。
为了让更多让使用者能够接触到Linux,于是很多的商业公司或非盈利团体,就将Linux Kernel 和一些工具软件整合起来,编译后再加上自己的一些工具软件,这样用户就能用光盘或者通过网络直接安装Linux系统。我们把这个『Kernel + Software + tools』可完全安装的系统称为Linux发行版(Linux distribution)。
在这各发行版中,每个不同的发行版又有自己的版本号。如RHEL 7.X、Debian 8.X、
Fedora 23、OpenSuSE 13.X 等等。
2.3.主流发行版
如图 2-3所示
在Linux的发展过程中,出现的发行版有几百种,各发行版之间主打的功用也不尽相同,有是安全稳定的系统,有的则是绚丽多彩,或是对于不同计算机结构的支持,对一个具体区域或语言的本地化,实时应用和嵌入式系统。下面简要介绍几种主流的发行版:
Debian:它以稳定性著称。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最具特色的是apt-get /dpkg包管理方式。
Ubuntu:它是基于Debian的二次发行版,特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由*软件构建而成的操作系统。
S.u.S.E:它一直致力于创建一个连接数据库的最佳Linux版本。在SuSE 操作系统下,可以非常方便地访问Windows磁盘,这使得两种平台之间的切换,以及使用双系统启动变得更容易。
RedHat:应该称为Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server收费版本)、FedoraCore(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区克隆版本,免费)。是在国内使用人群最多的Linux版本,包管理方式采用的是基于RPM包的YUM包管理方式。
Gentoo:是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在它之前的所有发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一。
Arch Linux:最主要的特点之一就是,它是一个独立的开放源代码的发行版(这意味着它不基于任何其他的东西),Arch遵循滚动发布模式,因此你只要使用pacman执行定期的系统更新,就可以获得最新的软件。
2.4.发行版的基础目录及功用规定
Linux有众多的发行版,这样一些每一个发行版是否都不相同呢?这就不需要担心,因为每个发行版都使用的Kernel都是http://www.kernel.org而来的。此外,为了让所有的发行版开发差异不至于太大,且让这些开发商有所依据,还有Linux Standard Base(LSB)等标准来规范开发者,同时,所有的发行版还必须遵循File system Hierarchy Standard(FHS)标准规范。
我们重点来看一下FHS,FHS实际上只规范了在根(/)目录下各主目录应该放什么样的文件。FHS定义了两层规范,第一层是,/目录下各个目录应该放什么文件数据。第二层则是针对/usr和/var这两个子目录来定义的。
在Linux中,所有的文件与目录都是从根(/)目录开始的,它是所有目录与文件的源头,然后再一个一个的分支下来,是一个树状结构。
如图 2-4所示
/:根目录root(/),一般建议在根目录下只有目录,不要直接有文件。它是系统启动时第一个载入的分区,所有启动过程会用到的文件都应该放在这个分区中;
/bin,/usr/bin,/usr/local/bin:放置用户可执行的二进制文件的目录,如常用的命令ls,mv,mkdir,rm,cp等等都放置在这里;
/boot:放置Linux系统启动时用到的文件,boot loader 必须用到的个静态文件,kernel,grub,initramfs(initrd)等;
/dev:在Linux中,任何设备都以文件类型存放在这个目录中。设备又分为字符设备(character device),如键盘、鼠标等;块设备(block device),如硬盘、光盘等。重要的文件有/dev/null,/dev/tty[1-6],/dev/ttyS*,/dev/hd*,/dev/sd*等。
/etc:系统的主要配置文件几乎都存放在这个目录中,/etc/init.d/目录存放了所有服务的默认启动脚本;
/home:系统默认的普通用户的家目录;
/lib,/usr/lib,/usr/local/lib:存放基础共享库和内核模块。为系统启动或根文件系统上的应用程序提供共享库,以及为内核提供内核模块;
/lost+found:系统出现异常,产生错误是,会将一些遗失的片段放在这个目录中,通常这个目录会自动出现在某个分区最顶层的目录下;
/mnt,/media:软盘和光盘或移动便携设备的默认挂载点;
/opt:附加应用程序安装位置;
/srv:一些服务启动之后,这些服务所需要访问的数据目录;如WWW服务器需要的网页数据就在/srv/www中;
/root:系统管理员的家目录;
/tmp:一般用户或者正在执行的程序临时放置文件的地方,可供所有用户写入;
/sbin,/usr/sbin,/usr/local/sbin:放置系统管理员用到的命令;
/proc:这个目录是一个“虚拟文件系统”,它放置的数据都在内存中,如内核参数、外部设备的状态、网络状态等。因为这个目录在内存中,所有本身不占用任何硬盘空间;
/usr:包含系统的主要程序、图形界面所需要的文件、额外的函数库、本机自行安装的软件,以及共享的目录与文件,重要的子目录有:
/usr/bin,/usr/sbin:普通用户与管路员可执行文件放置的目录;
/usr/include:C/C++等程序语言的头文件;
/usr/lib:各应用软件的函数库文件放置的地方;
/usr/local:本机自行安装的软件默认放置目录;
/usr/share:共享文件放置的目录;
/usr/src:Linux系统相关程序源码放置的目录
/usr/X11R6:系统内X Window System所需要的执行文件几乎都放在这里;
/var:主要放置系统执行过程中经常变化的文件,如缓存(cache)或日志文件;
/var/cache:程序文件在运行过程中的一些暂存盘;
/var/log:登录文件放置的目录;
/var/spool:队列数据存放的地方。
2.5. Linux系统设计的哲学思想
1. 一切皆文件,在Linux系统中把所有的资源都抽象成文件形式,包括硬件设备,甚至是通信;
2. 单一目的的小程序,组合小程序完成复杂任务;
3. 文本文件保存配置信息;
4. 避免强制性的用户界面。
三、Linux系统上获取命令帮助,及man手册的章节
首先,使用type命令,查看所使用的命令是内部命令(shell builtin),还是外部命令。
使用格式 ~]#type COMMAND
注:~]#表示命令提示符
如果要使用的命令是内部命令,则可以使用help命令还查看该命令的使用方法。
使用格式 ~]#help COMMAND
如果是外部命令,则可以使用下面的方法:
- 命令自带的简要格式的使用帮助
~]# COMMAND --help
- 手册页的使用
~]#man COMMAND
手册有文件放置在/usr/share/man,并且手册页有章节之分。
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
使用whatis命令可以查看一个命令有哪些章节,每个命令不一定每一个章节都有;
~]#whatis COMMAND
如果想要查看命令的特定章节帮助文档,可以使用:
~]#man
CHAPTER COMMAND
- 获取命令的在线文档
~]#info
COMMAND
除此之外,很多应用程序会自带帮助文档,他们通常放置在/usr/share/doc/目录下,另外,我们还可以在主流发行版的官方文档上获取帮助,如http://www.redhat.com/doc,或程序的官方文档中获取帮助。还有,别忘了我们还有Google神奇,也可以获取帮助。
四、Linux中命令的使用格式
1.
命令的分类
由shell程序自带的命令:内置命令(builtin);
独立的可执行文件,文件名即为命令名:外部命令。
其中,shell程序是一个独特的程序,它负责解析用户提供的各种命令。它是根据一个环境变量PATH的值来判断从哪些路径中去查找用户输入的命令字符串所对应的文件。
2. 命令的语法通用格式
~]#COMMAND [OPTIONS…]
[ARGUMENTS…]
它表示将一个二进制文件运行为一个进程。这些文件多数都存放在/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin目录下。
3. 命令的选项OPTIONS
它的作用是可以指定命令的运行特性。有两种表现形式:
短选项:如-a,-C,-d等等,不同的命令支持的选项也不相同;
长选项:--help,--color等等。
如果一个命令同时使用多个短选项,多数情况下这些短选项是可以合并的,如ls -ld。长选项一般不能合并。另外,有写选项也可以带参数,称为选项参数,长选项的参数一般用“=”,短选项的参数用空格分隔。
4. 命令的参数ARGUMENTS
命令的参数指明了命令作用的对象,不同的命令参数和参数个数也不一样,有些命令可以带多个参数,参数之间以空格分隔。
五、 一些命令的示例
hwclock命令:查询或设置硬件时钟(RTC)
语法格式:hwclock [function] [options...]
说明:
方法:
-r |
--show 读取并打印硬件时钟
-s
| --hctosys 将硬件时钟同步到系统时钟
-w | --systohc 将系统时钟同步到硬件时钟
--set
--date=<时间日期> 使用给定的--date来设置RTC时间
常用选项:
-u
| --utc 使用utc时间
--localtime 使用本地时间
用法:
date命令:显示当前时间或设置系统时间
语法格式:
date
[OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
用法:
1.显示当前时间:
格式符:
%Y%m%d%k%M%S表示年月日时分秒;
%D,日期,%m/%d/%y;
%F,日期,%Y-%m-%d;
%T,时间,%H:%M:%S;
如果想显示未来或过期的时间,可以加上-d选项:
2.设置系统时间
-s选项:设置系统时间,方式多种多样,任你选
-u选项:设置utc时间,时间格式[MMDDhhmm[[CC]YY][.ss]]:
pwd命令:是print working directory的缩写,用于显示当前所在的目录,它是一个shell内嵌的命令(builtin)。命令提示符只提示当前所在目录的basename,并不提示完整的目录名。如果切换目录太多,我们可能不知道当前所在的目录,这时候就需要用到pwd命令。
语法格式:pwd [OPTION]…
常用选项: –P,用来显示实际的工作目录,而不是链接文件的目录。
用法:
echo命令:将SRTING回显至标准输出,它也是shell的内嵌命令。
语法格式: echo [SHORT-OPTION]...
[STRING]...
常用选项: -n,命令执行完后不进行换行;
-e,让转义字符生效;
用法:
常用的转义字符:
\\ 反斜杠
\b 空格
\n 换行
\r 回车
shutdown命令:关机或重启系统
语法格式:shutdown
[OPTIONS...] [TIME] [WALL...]
常用选项:-H,--halt,让机器停止工作
-P,--poweroff,把机器断电
-r,--reboot,重启
-c,取消关机操作
说明:TIME后面可以跟一个WALL,它可以在关机之前给所有用户发一条消息。时间的格式可以是”HH:MM”,表示几时几分关机;也可以是”+m”,表示几分钟后关机;也可以是”now”,它和”+0”表示一个意思,立即关机。若不指定时间,则默认为”+1”。
注:shutdown实际上是调用init 0, init 0会cleanup一些工作然后调用halt或者poweroff。
poweroff和halt命令:关机
语法格式:poweroff
[OPTION]...
halt
[OPTION]…
halt就是调用shutdown
-h。halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操作完成后就会停止内核。poweroff在关闭计算机操作系统之后,最后还会发送ACPI指令,通知电源,最后切断电源供应。
ifconfig命令:是一个用来查看、配置、启用或禁用网络接口的工具,利用它配置的网络信息会立即生效,但重启网络服务或系统后就会失效;若想要永久有效,则需修复系统内的网络配置文件。这是一个老式的命令,现在替代它的是ip addr 和 ip link。
语法格式: ifconfig
[interface]
Ifconfig interface [AFtype] options | address
说明:AF(address
families),目前所支持的地址家族包括inet(TCP/IP, 默认), unix (UNIX Domain), inet6 (IPv6) ,ax25 (AMPR AX.25), netrom (AMPR
NET/ROM), rose (AMPR ROSE) ,ipx (Novell IPX), ddp (Appletalk DDP), ec (Econet) ,ash
(Ash) ,x25 (CCITT X.25) .
ifconfig 如果不接任何参数,输出的是活动的网卡信息;如果接一个-a参数,则显示的是所有网卡的信息,包括非活动网卡信息。
Ifconfig常用选项:
interface:网卡的名字,用于显示指定网卡的信息,网卡的名字通常是eth#,其中#是一个数字,代表第几块网卡。如:
up|down:激活或关闭指定的网卡
netmask ADDR:设置指定网卡的子网掩码
broadcast ADDR:设置指定网卡的广播地址
[-]arp:开启或关闭指定网卡的arp协议
mtu NUM:设置指定网卡的最大传输单元
hw HWTYPE ADDR:设置指定网卡的MAC地址,HWTYPE一般为ether,以太网。
如设置eth0的IP地址,MAC地址,子网掩码和广播地址并启动该网卡:
tty命令:用于显示终端机连接标准输入设备的文件名称
语法格式: tty [OPTION]…
常用选项:-s ,--silent, --quiet:静默模式,不打印,只返回命令的执行状态结果
startx命令:启动X
window服务
补充说明:startx为启动X
Window的script文件,实际上启动X Window的程序为xinit。
export命令:它是shell的一个内嵌命令,用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。Export仅对该次登陆操作有效。
语法格式:export
[-fn] [name[=value] ...] or export
-p
常用选项:-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
列出当前的环境变量:
定义一个环境变量并赋值:
history命令:它是shell的内嵌命令,是用来显示和操作命令历史列表的。Shell进程会在其会话中保存我们运行过的每一个命令。
Shell环境中有一些环境变量可以指定history命令的工作特性,可以通过改变这些环境变量的值来定制history的功能:
HISTSIZE:shell进程可保存的命令历史的条数,默认为1000;
HISTFILE:保存命令历史的文件,如果不指定,默认为~/.bash_histroy;当前执行的命令不会立即保存至命令历史文件,而是先缓存起来;
HISTFILESIZE:命令历史文件的大小;
HISTCONTORL:控制命令历史记录的方式,取值有三种:
ignoredups:忽略重复的命令,(默认值);
ignorespace:忽略以空白字符开头的命令;
ignoreboth:以上两者同时生效。
注意:在shell中修改这些环境变量的值后,只对当前进程有效,如果想永久有效,则需要修改配置文件~/.bash_profile。
另外,我们还可以调用命令历史列表中运行过的命令。
!N:表示再执行一次历史列表中的第N条命令;
!!:再执行一次上一次执行的命令;
!STRING:再执行一次命令历史列表中最近一次执行的以STRING开头的命令。
除此之外,我们还可以调用上一次执行的命令的最后一个参数,这对于我们想要使用上一次命令中最后一个参数特别长时就非常有效。
先按ESC键,在按.号或使用!$都可以引用上一次命令的最后一个参数。
history命令的使用:
history [-c] [-d
offset] [n]
history -anrw [filename]
常用选项:
n:列出最近使用的n条命令;
-c:清除命令历史,它只是清除了当前shell中的命令历史,并没有清除命令历史文件中的记录;
-d OFFSET:删除命令历史中的第OFFSET条记录;
-a:将当前会话中新增的命令历史追加到文件中,如果没指定文件,则写到默认文件~/.bash-history中去;
-n:显示还没有从历史文件中读取的历史记录;
-r:将历史记录文件中的内容读到当前shell的history中去;
-w:将当前history中的内容写入命令历史文件中。