Linux的基础知识

硬件

冯·洛伊曼体系

  1. 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  2. 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
  3. 存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  4. 输入(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
  5. 输出(Output system):输出设备与输入设备同样是计算机的重要组成部分,它把外算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。

软件

低级语言:

汇编语言,汇编器;写驱动

高级语言:

系统级:C,C++,对性能要求较高的服务类程序
应用级:Java,Python,Ruby

Linux 发行版

RedHat Enterprise Linux

Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所谓的Redhat Advance Server,收费版本)、Fedora Core(由原来的Redhat桌面版本发展而来,免费版本)、CentOS(RHEL的社区 克隆版本,免费)。Redhat是在国内使用人群最多的Linux版本,甚至有人将Redhat等同于Linux。所以这个版本的特点就是使用人群数量大,资料非常多,言下之意就是如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。

CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本。每个版本的 CentOS都会获得十年的支持(通过安全更新方式)。新版本的 CentOS 大约每两年发行一次,而每个版本的 CentOS 会定期(大概每六个月)更新一次,以便支持新的硬件。这样,建立一个安全、低维护、稳定、高预测性、高重复性的 Linux 环境。CentOS是Community Enterprise Operating System的缩写。CentOS 是RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在RHEL的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖。

Debian:只有社区的发行版

Debian系列,包括Debian和Ubuntu等。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应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去。Debian是包括Ubuntu在内许多发行版的上游,而Ubuntu又是Linux Mint及其他发行版的上游。Debian在服务器和桌面电脑领域都有着广泛的应用。Debian是一个纯开源计划并着重在一个关键点上,稳定性。它同时也提供了最大的和完整的软件仓库给用户。

Ubuntu是基于Debian的unstable版本加强而来,可以这么说,Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的 Linux桌面系统。根据选择的桌面系统不同,有三个版本可供选择,基于Gnome的Ubuntu,基于KDE的Kubuntu以及基于Xfc的Xubuntu。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。

Slackware Linux

Slackware Linux是由Patrick Volkerding开发的GNU/Linux发行版。与很多其他的发行版不同,它坚持KISS(Keep It Simple Stupid)的原则。一开始,配置系统会有一些困难,但是更有经验的用户会喜欢这种方式的透明性和灵活性。 Slackware 很多特性体现出了KISS原则,最为有名的一些例子就是不依赖图形界面的文本化系统配置、传统的服务管理方式和不解决依赖的包管理方式。它的最大特点就是安装灵活,目录结构严谨,版本力求稳定而非追新。Slackware的软件包都是通常的tgz(tar/gzip) 或者txz(xz) 格式文件再加上安装脚本。Tgz/Txz 对于有经验的用户来说,比RPM更为灵活,并避免了APT 之类管理器可能带来的的依赖地狱。

作为开源软件,Slackware与商业版本的关系并不大,但与几家提供付费支持的厂商一直保持的合作关系。作为最早的可用版本之一,Slackware Linux是由Patrick Volkerding开发的GNU/Linux发行版。与很多其他的发行版不同,它坚持KISS(Keep It Simple Stupid)的原则,就是说尽量不依赖配置系统的图形界面工具。其安装程序也是一些Dialog界面的shell脚本写成,你可以在安装的任何时候跳到任何安装步骤,而且这些脚本在安装之后也可以很方便的使用

Slackware与其他的发行版本(Red Hat、Debian、Gentoo、SuSE、 Mandriva、Ubuntu等)不同的道路,它力图成为“UNIX风格”的Linux发行版本。只吸收稳定版本的应用程序,并且缺少其他linux版本中那些为发行版本定制的配置工具。在当今systemd大势所趋的情况下,Slackware仍然坚持BSD启动风格。

Slackware主要为x86 PC开发,从2005年起开始出现针对System/390架构的官方移植。同时ARM、DEC Alpha、SPARC和PowerPC也存在一些非官方的移植。Slackware官方维护着一个开发版本(Slackware Current),不断有新的软件被加入到这个源,用户可以实现类似Archlinux的滚动升级,等到一个开发版本足够稳定,便会发布一个稳定版。Slackware是支持x86、amd64(即x86_64)、ARM、Alpha、SPARC、PowerPC的一套GNU/Linux操作系统,其正式发布由PatrickVolkerding 负责。

Linux发行版汇总

Linux各发行版的联系与区别:

联系:

  1. 各发行版本均采用Linux的内核(kernel);
  2. 各发行版本均遵守GPL版权协定;
  3. 各发行版本均遵循 Linux Standard Base (LSB)等标准来开发;
  4. 各发行版本均遵循FHS(File system Hierarchy Standard)标准规范;

区别:

  1. 不同的发行版采用的软件包管理方式不同;最有名的是 debain 的 deb 包,redhat 的 rpm 包,slackware 等的 tgz 包。
  2. 发行初衷不同,导致特点也不同,见下图:

三、Linux的哲学思想

  1. 一切皆文件
  2. 由众多的单一的程序完成一件比较复杂的工作,一个程序只做一件事,并且做好他。
  3. 尽量避免与用户交互
  4. 使用文本文件保存配置信息
  5. 提供机制(可选的策略、是一种框架),而非策略,提供做大的灵活性。

四、Linux系统上常用命令的使用格式

命令的语法通用格式:

COMMAND OPTIONS ARGUMENTS

COMMAND说明

发起命令时将请求内核将某个二进制程序运行为一个进程,命令本身是一个可执行的程序文件,二进制格式的文件有可能会调用共享库文件。[遵循ELF格式规范]

多数系统命令程序文件都存放在:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin,它们又分为普通命令和管理命令。

普通命令:存放在/bin,/usr/bin,/usr/local/bin

管理命令:存放在/sbin,/usr/sbin,/usr/local/sbin

用到的库文件都存放在:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64,它们分为32位和64位的库文件,32位使用于32位的操作系统,64位使用于64位的操作系统,64位兼容32位,而32不兼容64

32位库:存放在/lib,/usr/lib,/usr/local/lib

64位库:存放在/lib64,/usr/lib64,/usr/local/lib64

命令分为两类:


由shell自带的命令,叫作内嵌命令(builtin)

独立的可执行程序文件,文件名即命令名,叫作外部命令

查看命令的内容的类型:

file命令:

例:~]# file /bin/ls

查看命令的类型:

type命令:

例:~]# type COMMAND

注意:并非所有的命令都有一个在某目录与之对应的可执行程序文件

OPTIONS说明:

指定命令的运行特性,有两种表现形式:

短选项:-C,例如 ls -l ,-d 注:有的命令选项没有 – ,同一命令同时使用多个短选项可合并:ls -ld

长选项:–word,例如 ls –help,有时候选项也带参数,例:du -h –max-depth=1 注:长选项不能合并

ARGUMENTS说明:

参数:命令的作用对象,命令对什么生效,例:ls /etc ,作用在/etc 。注:有些命令可以可同时带多个参数,以空白分隔

常用命令示例:

ifconfig

作用:显示和配置网络信息

语法:ifconfig [网络设备][参数]

示例:ifconfig -a

echo

作用:显示文本

语法:echo [-ne][字符串]或 echo [–help][–version]

示例:echo ‘Hello World’

tty

作用:显示终端机连接标准输入设备的文件名称

语法:tty [-s][–help][–version]

示例:tty

startx

作用:进入图形操作界面

示例:startx &

export

作用:设置或显示环境变量

语法:export [-fnp][变量名称]=[变量设置值]

示例:

1
2
3
export JAVA_HOME = /home/myuser/jdk1.7.0_03
export PATH = $JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

pwd

作用:显示当前工作目录

语法:pwd[–help][–version]

示例:pwd

history

作用:列出bash保存的所有历史命令

语法:history [选项]

示例1:history

示例2:使用HISTTIMEFORMAT环境变量在历史中显示TIMESTAMP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
命令:
export HISTTIMEFORMAT='%F %T '

$history

输出如下:
642 2016-10-25 17:05:46 ll
643 2016-10-25 17:05:46 rm 333
644 2016-10-25 17:05:46 ll /etc/fstab
645 2016-10-25 17:05:51 history --help
646 2016-10-25 17:05:59 history -h
647 2016-10-25 17:06:14 man history
648 2016-10-25 17:07:53 history
649 2016-10-25 17:07:57 export HISTTIMEFORMAT='%F %T '
650 2016-10-25 17:07:59 history

shutdown

作用:系统关机命令

语法:shutdown [-cfFhknr][-t 秒数][时间][警告信息]

示例:shuntdown -r +5

poweroff

作用:关机

语法:这个命令还说啥语法啊,生产环境上不要随便执行这个命令,否则会被捆绑、滴蜡、爆菊啊~

示例:poweroff

reboot

作用:重启

语法:运维常用作死命令之一,最好在头脑清醒的前提下执行。

示例:reboot

hwclock

作用:用来查询和设置硬件时钟

语法:

1
2
3
-r, --show        读取并打印硬件时钟(read hardware clock and print result )
-s, --hctosys 将硬件时钟同步到系统时钟(set the system time from the hardware clock )
-w, --systohc 将系统时钟同步到硬件时钟(set the hardware clock to the current system time )

示例:

1
2
[root@centos ~]# hwclock -r
2016年10月25日 星期二 17时32分28秒 -0.671802 seconds

date

作用:取一个特定时间的linux时间戳

语法:date [参数]… [+格式]

示例:

1
2
[root@centos ~]# date
2016年 10月 25日 星期二 17:33:17 CST

五、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节时如何划分的

获取命令的使用帮助:

1
2
3
4
5
6
7
8
内部命令:
help COMMAND
外部命令:
(1) 命令自带简要格式的使用帮助
# COMMAND –help
(2) 使用手册:manual
位置:/usr/share/man
# man COMMAND

先执行type COMMNAD 识别是内部命令还是外部命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(3) info COMMAND
获取命令的在线文档;

(4) 很多应用程序会自带帮助文档:/usr/share/doc/APP-VERSION
README:程序的相关的信息;
INSTALL: 安装帮助;
CHANGES:版本迭代时的改动信息;

(5) 主流发行版官方文档
http://www.redhat.com/doc

(6) 程序官方的文档:
官方站点上的“Document”

(7) 搜索引擎
google、baidu

keyword filetype:pdf (输入文章类型更有针对性)
keyword site:domain.tld

man 文档章节如何划分

使用手册:压缩格式的文件,有章节之分;
/usr/share/man
man1, man2, …

1
2
3
4
5
6
7
8
1:用户命令;  (普通用户和管理员)
2:系统调用;
3:C库调用;
4:设备文件及特殊文件;
5:文件格式;(配置文件格式)
6:游戏使用帮助;
7:杂项;
8:管理工具及守护进行;

Linux发行版的基础目录名称命名法则及其功用规定

FHS:

1
FHS:全称Filesystem Hierarchy Standard,其定义了两层规范,

/下面的各个目录应该要放什么数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/bin:所有用户可用的基本命令程序文件;

/sbin:供系统管理使用的工具程序;

/boot:引导加载器必须用到的各静态文件:kernel,initramfs(initrd),grub等;

/dev:存储特殊文件或设备文件;设备有两种类型:字符设备(线性设备)例如:键盘、显示器;块设备(随机设备)例如:硬盘、内存;

/etc:系统程序的配置文件,只能为静态

/home:普通用户的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME;

/root:管理员的家目录;可选

/lib:为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供的内核参数模块; libc.so.:动态链接的C库; ld:运行时链接器/加载器; modules:用于存储内核模块的目录;

/lib64:64位系统特有的存放64位共享库的路径;

/media:便携式设备挂载点,cdrom,floppy等;

/mnt:其它文件系统的临时挂载点;

/opt:附加应用程序的安装位置;可选路径;

/srv:当前主机为服务提供的数据;

/tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所有用户执行写入操作;有特殊权限;

/usr:usr Hierarchy,全局共享的只读数据路径;

/var:/var Hierarchy,存储经常发生变化的数据的目录;
0%