计算机基础及Linux基础概述

马哥教育网络班23期+第1周课程练习

计算机基础及Linux基础概述

一、计算机组成及其功能

1.1、概述

    计算机,computer 我们在中国都称它为电脑,其实我们个人使用的计算机只是计算机家族的一部分,计算机分很多种,小型机,中型机,大型机,工作站,还有PC机,等等,其实我们家庭中使用的只能算是PC机,其实应该是速度最慢的计算机,而且我们使用的计算机,应该叫做电子计算机,现在人类又要发明量子计算机,量子比电子还要小,量子计算机运行的速度更快。

1.2、 计算机的组成

    我们知道,计算机分为最基本的5大部件,其实一开始的计算机有3个部件就可以工作,分别是运算器,控制器,存储器。我们一般把运算器和控制器合二为一,而叫做CPU 也就是 Central Processing Unit 的简称,CPU中集成了运算器和控制器,但是只有这3个设备,无法和人类进行交互,所以我们开发出了另外2个部件,就是输入和输出设备,一开始我们的输入和输出设备很简单,输入设备就是穿孔纸带,而输出设备就是发光二极管。但是这样的话人们很难和计算机进行交互,所以后来人们发明了键盘作为输入设备,显示器作为输出设备,最开始的时候还没有磁盘这个物理设备,人们就使用磁带来存储,就像我们小时候用的录音带一样,这种介质第一存储的数据量很小,第二很难就行重复使用,所以后来发明了硬盘,硬盘实际上应该是一个I/O 设备,也就是既可以输出又可以输入。这些组件之间的工作和执行的功能我用下图来说明:

123.jpg

二、操作系统的发展和Linux 操作系统的出现

2.1 操作系统概述

    操作系统,Operating System ,操作系统到底是什么,顾名思义,我的理解是操作系统其实就是一种软件,如果说没有操作操作系统,我们想象一下会是什么样子,就像过去我们使用计算器一样,它只是接收一些很简单的命令和数据,完成一些操作,然后给我们返回一些我们想要的结果,像 + – * / % … 这当然不是计算机,但无疑我们在操作这些数字的时候我们只是按下了几个数字键而已,至于操作符 + – * / 这些在计算机中是怎样翻译过来的我们不清楚,而且我们用户也不用知道,往往对于人类来说,字符或者数字符串是很容易识别的,但是对于计算机来说,数字是很容易识别的,所以计算机把一切数据都看成是数字,其实在电子计算机中是没有10进制这个概念的,计算机只能识别二进制,因为发明计算机的先驱们觉得二进制最能代表一类事物的2个状态,也就是非黑即白,就像灯泡,只有2中状态,不是亮就是灭,让计算机来表示灯泡的亮和灭也就是2个数字1 代表亮 0代表灭,所以计算机都是以二进制来存储事物的状态,好像有点跑题,所以我们说,如果让人类去把55+ 53 先把55 转换成二进制,然后把53转换成二进制 然后再找到+ 加法这个操作对应的二进制 然后执行相加操作,大家可想而知是多么的复杂,所以说机器语言对于程序员来说代码量太大了,根本无法进行机器语言的开发和编写,所以在这种条件下,诞生了汇编语言。

    汇编语言一开始就是每个硬件厂商为了容易编写底层执行硬件的代码,把那些二进制的文件封装编码成了汇编语言,其实就是硬件的微码,但是这种微码不具备通用性,比如说,你在华硕买的显卡有一个微码,你在金士顿买的内存有一个微码,你想让2个硬件为你工作,你必须把这2种微码同一起来,互相都可以认识,这样才能通信或者兼容,所以说微码的编写量还是很大,但是怎样才能将这些硬件设备统一起来管理,让他们可以协调并行运行,比如说网卡现在需要和CPU通信,需要占用CPU ,但是硬盘也需要让CPU进行”读“的操作,我们知道在某一时刻CPU 是不能在让2个设备占用的,所以这样就产生了操作系统。 

    一开始,计算机的5大部件运行还是单任务的系统,这还不能叫做操作系统,就是一个接一个执行指令,但是人们发现,这种单任务的系统CPU的大量时间都浪费了,CPU其实一直在空转,只是执行了一点代码,就休息去了,等着下一个任务,所以人们发明了批处理系统,把一段代码写成一段让CPU执行,在每一段中加入相应的识别码,让CPU 知道这个识别码其实就是指令的结尾,但是这样CPU还是在空转,所以后来又有了多批处理,也就是专门准备一台电脑把指令传送给速度快的这台电脑,让速度快的这台电脑执行时CPU尽量不空转,但是这样CPU还是有空转,所以最后就有了多任务的操作系统。 

    其实发明多任务的操作系统也就是不想让CPU空转,也就是想压榨 CPU更多的时钟周期,让CPU在一个时钟周期内执行更多的代码而已,人们有时候就是这么贪婪,呵呵。第一个多任务操作系统诞生了,它叫做multics,multics(英文全称:MULTiplexed Information and Computing System)是一个全面的,通用编程系统,作为一个研究项目正在开发。最初的Multics系统基于对GE 645电脑,整体设计目标之一是要创建一个计算系统,它是能够满足几乎所有大的要求,这些系统必须连续运行,并且可靠,类似电话或电力系统每周7天,每天24小时工作,而且必须是能够满足广泛的服务需求。从多个人机交互用户缺席的顺序处理从系统的使用与专用系统本身的编程语言和子系统,和集中批量卡,磁带,打印机设施位于远程终端的工作,这样的信息处理和通信系统被认为是必不可少的,使用电脑在未来业务增长,在行业,在政府和科学实验室,以及刺激,否则将撤销申请,随着multics的发展,后来贝尔实验室退出了multics的研发,简短来说(限于篇幅),Ken Thompson 是贝尔实验室的一员,他想开发Space Travel 这样一个游戏,但是又不能使用multics ,所以他就和领导申请给他一台计算机开发他的游戏,但是领导没有理他,他沮丧至于就发现有一个谁也不用的电脑,于是他就那这个电脑自己写了一个操作系统,来运行它的游戏,没想到这个操作系统真的写成了,当时人们叫他 Unics,前面说到汇编语言对硬件要求很多,其实属于和硬件耦合度很高,所以Ken Thompson就和另外一个神人开发了一门语言,可以凌驾于硬件之上,就叫做C语言,他们用C语言重写了Unics 后来Unics 就叫做Unix了。Unix出现以后很受欢迎,但是中间出了很多事故,我就不详细说了,总之Unix 中的2个发明商 BSD 和 贝尔实验室 一直再打官司,最后成就了比尔盖茨,比尔盖茨钻了他们的空子,拿着蹩脚的DOS 操作系统赚了第一桶金,最后一发不可收拾,至于windows 其实也是Unix ,只不过是凑出来的Unix 而且微软又加了很多蹩脚的东西,成了今天这个鸟样子。对了,乔布斯的苹果的系统原始也是Unix 是 Unix 下的freeBSD 而且没有改,所以说苹果电脑对硬件要求很高,性能很好,2005年之前苹果电脑的CPU架构都是 powerPC 而不是Intel 和 AMD 的Cpu 。但是我们知道无论是UNIX 还是微软的windows 还是苹果系统,他们都是闭源的,也就是不会公开源代码的,在当时的情况下,有人提出了程序应该是全世界人类智慧的结晶,而不是被某一个流氓公司所垄断。在这种环境下,Linux诞生了,Linux天生就是为了全世界的黑客而生的。

    如果想进一步Linux的发展史可以google一下,我这里就不详细描述了。接下来我介绍一下Linux的各个发行版。

    大家需要明白,Linux 只是内核,没有应用程序,如果想有应用程序就需要GNU 组织来提供应用程序,GNU其实就是一个开源组织,这就要说GNU 和GPL 的概念了,其实GNU可以看作就是软件行业的共产党组织 而GPL 就是共产党宣言 为全人类服务。所以说GNU 和 LINUX 是相辅相成的,我们应该把Linux 叫做 GNU/Linux ,Linix内核发行以来,也为内核是源码公开的,开源的嘛,遵循GPL 协定的应用程序也是源代码公开的,所以都不能使用,有些公司就把这些不能使用的给我们编译成了二进制格式,也就是可以使用的,直接可以运行的,也就是这些组织商家给你一个安装包,下一步 的去安装,这种版本叫做发行版。我介绍一些常见的发行版,具体的Linux发行版有上百种之多,我这里就不一一介绍了。

2.2 各个主要发行版简要图

Debian: 
    Ubuntu–Mint,Knopix 
Slickware: 
    S.u.S.e 
SLES 
    OpenSUSE 
RedHat : 
    RedHat 9.0: 
    分裂成 RedHat Enterprice Linux :RHEL 7.0到今天的版本 
    CentOS Community Enterprice OS 社区版红帽 为了让红帽可以一直打补丁,但是不负责维护 
    Fedora Core :每6个月更新一次 
Gentoo 
ArchLinux

三、Linux哲学思想

1、一切皆文件 
    把几乎所有的资源统统抽象为文件形式,包括硬件设备,甚至通信接口等 
    open(),read(),write(),close(),delete(),create(),也就是所谓的crud 增删查改 再加上open close打开 关闭 
2、有众多单一的程序组成,一个程序只能做一件事,组合小程序完成复杂任务 
    也就是每一个程序都是单一的操作,就像程序中的方法(函数)一样,一个方法就是为了完成某种操作而生的 
3、 尽量避免和用户交互 
    目标:易于以编程的方式实现自动化任务,这和程序中的方法不谋而合,程序中的方法也是尽量的不和用户交互,而是做为 一个调用接口出现,完成自动化操作,返回给用户结果。 
4、使用文本文件保存配置信息 
    这样做的意义就是为了简单的使用一个文本文件或者xml文件来保存一些程序的配置,方便管理

四、Linux系统命令使用格式及常见简单命令介绍

4.1 Linux系统命令使用格式

     blob.png

    上图就是我们安装好操作系统之后,出现的命令提示符,也就是CLI 接口的界面,这里需要强调一点的是,Linux 用户接口界面分为2种,一种是 
GUI 也就是图形界面接口模式,一种是CLI 也就是命令行接口模式,我们主要使用命令行接口模式。

    [root@localhost ~]# COMMAND 
    命令提示符详解: 
    root :当前登录的用户名 
    localhost: 简写的主机名称 完整的主机名称需要带域名。 
    ~:用户当前的所在目录,current directory 或者也可以说是用户的工作目录 working directory 
    #:命令提示符 
    #:管理员账号的命令提示符 linux 中管理员账号统一为 root 拥有最高权限 
    $:普通用户,非管理员用户,不具有管理员权限,不能执行系统管理类操作 
    注意:建议使用非管理员账号登录,执行管理操作的时候临时切换至管理员,操作完成即退回

4.2常用命令介绍

    1、ifconfig 
    ifconfig 类似于 windows 下的ipconfig 是一个查看ip 地址和mac 地址的命令

     blob.png    

    命令的介绍和简单用法同上 
    2、echo 
    echo 是回显命令,这个命令可以显示输入的字符串,也可以显示变量的值,介绍如下:

 
    blob.png

    这里需要注意的是 echo 命令有一个 -e 选项,加上这个选项的意义在于,可以转义那些转义符,也就是本身就有特殊意义的字符,例如:

    blob.png

     \n 的意义在于要换行 
    3、tty 
    tty 是查看当前终端是哪种类型的终端,所谓终端的概念简单理解终端机就是把一个主机分成多个用户同时使用的设备,可以把一个主机分出来让1-50个人同时使用这台主机,其余的每个分机用一台显示器,一套鼠标键盘,一个终端机组成一套独立的电脑。,linux是多终端,多用户的,而且终端也分为很多种,比如 
terminal 终端 键盘+显示器的组合 叫做终端设备

    终端分以下几类: 
    物理终端:通常叫做控制台 console 直接装到实际主机上的终端 /dev/console 
    虚拟终端:tty 有6个 ctrl+alt+F[1-6] 可以切换终端 /dev/tty#[1-6] 图形终端也属于虚拟终端 ctrl + alt +F7 
    串行终端(com)ttyS /dev/ttyS#[1-…] 
    伪终端 远程的,模拟的 pty /dev/pts/#1…

    4、export 
    export 命令 设置或显示环境变量。 
    语  法: export [-fnp][变量名称]=[变量设置值] 
    补充说明: 在shell中执行程序时,shell会提供一组环境变量。 export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。 
    参  数: 
    -f  代表[变量名称]中为函数名称。 
    -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 
    -p  列出所有的shell赋予程序的环境变量。 
    注意:一 个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到 任何后继脚本。

    export 命令显示环境变量截图如下:

    blob.png

    5、pwd 
    pwd 命令,显示当前的用户的工作目录 也就是 
    print working directory

    blob.png

 
    6、history 
    history 命令,简单的说就是查看命令历史 命令, 
    我们可以直接输入history 来查看一下:

    blob.png

 
    这些事最后的几项,我们可以看到有942条历史纪录,我们使用 echo $HISTSIZE 可以查看存储历史纪录大小 

    blob.png 
    我们还可以通过 echo $HISTFILE 来显示这些命令纪录都存在了哪里, blob.png

    可以看出都存到了/ root/.bash_history 我们可以查看一下这个隐藏文件中是什么信息,用cat 或者vim 都可以查看 cat /root/.bash_history  
    可以发现,就是history 的历史纪录保存

    blob.png 
    命令用法: 
    history [-c] [-d 偏移量] [n] 
    或 history -anrw [文件名] 
    或 history -ps 参数 [参数…]

    -c: 清空命令历史; 
    -d offset:删除指定命令历史 
    -r: 从文件读取命令历史至历史列表中; 
    -w:把历史列表中的命令追加至历史文件中; 
    history #:显示最近的#条命令;

    调用命令历史列表中的命令: 
    !#:再一次执行历史列表中的第#条命令; 
    !!:再一次执行上一条命令; 
    !STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;

    注意:命令的重复执行有时候需要依赖于幂等性;

    调用上一条命令的最后一个参数: 
    快捷键:ESC, . 
    字符串:!$

    控制命令历史记录的方式: 
    环境变量:HISTCONTROL 
    ignoredups:忽略重复的命令; 
    ignorespace:忽略以空白字符开头的命令; 
    ignoreboth:以上两者同时生效; 
    7、shutdown poweroff reboot 
    这三个命令其实就是关机 重启 的命令,用法很简单 可以加一个参数 +TIME 时间也就是过多长时间后关机或重启 
    8、date hwclock 
    date 命令可以查看和修改日期,修改的是系统日期 
    hwclock 命令也可以查看和修改日期,修改的是硬件时钟日期 
    系统日期的意义是安装好操作系统后,登录到shell里面的日期,就像是windows 里面的日期时间,而硬件时钟的日期其实是纪录在硬件的bios中的日期,这个日期是由主板上的电池来持续供电而保存的,可以进入bios查看硬件时钟 
    注意的是 hwclock 有2个选项 可以用 
    hwclock -s 以硬件时钟日期为准,修改系统日期 
    hwclock -w 以系统日期为准,修改硬件时钟日期

五、Linux 下获取帮助命令使用用法

    Linux 下命令获取帮助的方法很多,如果命令是内部命令可以使用help + COMMAND 
    如果命令是外部命令,可以使用长选项 COMMAND + –help 
    但是他们都有一个很权威的查看帮助的命令,那就是被人誉为 “男人”的 man 命令

5.1man 命令的章节介绍

    使用man 命令手册分章节 是压缩格式的文件 有章节之分 所有的man 的章节文件都在 /usr/share/man 目录下 
    man 1 是用户命令 就是 普通用户和管理都可以执行的命令 
    2 系统调用 
    3 C库调用 
    4 设备文件及特殊文件 
    5 文件格式(配置文件格式) 
    6 游戏,使用帮助 
    7 杂项 
    8 管理工具及守护进程 

    man #数字 COMMAND 执行查看 
    注意:并非每个命令在所有的章节下都有手册 
    查看某个命令在某章节上是否有 用 whatis +COMMAND 注意这个命令的执行过程式查询数据库进行的

5.2man 的基本用法:

    man命令打开手册以后的操作方法: 
    翻屏 :空格键 想文件尾部翻屏 b键 向文件首部翻屏 
    Ctrl + d:向文件尾部翻半屏 
    Ctrl + u:向文件首部翻半屏 
    回车键:一次向文件尾部翻一行 
    K键 想文件首部翻一行 
    G:跳转至最后一行 #G 跳转至指定的行 1G 跳转至首行 
    文件搜索: 
    /keyword 从文件的首部向尾部移动 
    ?keyword 从文件的尾部向文件的首部移动 
    n 与查找的方向相同 
    N与查找的方向相反 
    退出: q 
    选项: -M /PATH/TO/SOMEWHERE 到指定的目录下查找命令手册,并打开之

六、Linux基础目录名称及命名法则

    Linux的文件系统组成,Linux与Windows不同,Windows的文件系统和分区是倒置的,Windows系统需要先进行分区,然后把文件系统加载到分区上,比如说C:\Program….这些路径,都是先分好区,然后把分区格式化,最后才能分配文件系统,比如说像我们常说的FAT32 NTFS 这样的文件系统,但是Linux 和Unix 则不同,Linux是先把文件系统设置好,然后再分区,分区格式化完毕后,在把相应的分区挂载到文件系统的层级结构上,就好比是一个国家开疆裂土一样,先把领土(土地)攻克,其实就是分区,占领地盘,然后在攻克的土地上建立一个一个的机构,找人专门去管理一样,所以说Linux的文件系统更接近于人类社会。简单来说,Linux文件系统就像一颗倒置的树一样,树的顶端就是/ 也就是国王,他拥有最高的权利,所以和建立国家一样,建立Linux文件系统的时候必须要先建立根分区,确定国王的最高权限,然后把国王下面的组织机构建立起来,也就是建立相应的子目录,国王下面的子目录是不允许用户私自建立的,因为每个国家的制度都差不多,所以需要一个统一的标准来建立国王下面的分支的一级组织结构,所以Linux 也有一个标准,这个标准是每个发行版都遵循的标准,就是很重要的一级组织结构。我们简称为FHS 也就是Filesystem Hirerarchy Standard 文件系统层级目录结构,下面要详细的说明一下每一个目录的职责。 
    1、/bin 目录:所有用户可用的基本命令和程序文件 
    2、/sbin目录:供系统管理使用的工具程序 
    3、/boot目录:引导加载器必须用到的静态文件 Kenrel initramfs(initrd),grub等 
    4、/dev目录:存储特殊文件或设备文件,设备有2种类型字符设备(线性设备有时序例如键盘)块设备(随机设备,随机存取例如硬盘) 
    5、/etc目录:系统程序的静态配置文件 
    6、/home目录:普通用户家目录的几种位置,一般每个普通用户的家目录默认为此目录下与用户同名的目录:/home/USERNAME 
    7、/lib目录:为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块 
        libc.so.* 动态链接的C库 
        ld*:运行时链接器/加载器 
        modules:用于存储内核模块的目录 
    8、/lib64目录 64位系统特有的存放64位共享库的路径 
    9、/media目录:便携式设备挂载点 cdrom flopy等 
    10、/mnt目录:其他文件系统的临时挂载点 
    11、/opt目录:附加应用程序的安装位置 可选路径 
    12、/root目录:管理员的家目录 可选 
    13、/srv目录:当前主机为服务提供的数据 
    14、/tmp目录:为那些会产生临时文件的程序提供的用于存储临时文件的目录,可供所有用户执行写入操作,有特殊权限 
    15、/usr目录 usr Hierarchy 全局共享的只读数据路径 
        bin,sbin 
        lib,lib64 
        include C程序头文件 
        share 命令手册页和自带文档等架构特有的文件的存放位置 
        local 另一个层级目录 
        X1186 X-window 
        src 程序源码的存放位置 
        /usr/local local Hierarchy 让系统管理员安装本地应用程序,也通常用于安装第三方应用程序 
    16、/var目录 var Hierarchy 存储经常发生变化的文件

        cache Application cache data 
        lib Variable state information 
        local Variable data for /usr/local 
        lock Lock files 
        log Log files and directories 
        opt Variable data for /opt 
        run Data relevant to running processes 
        spool Application spool data 
        tmp Temporary files preserved between system reboots

    17、 /proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward; 
    18、/sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的的接口;

以上就是我第一周的博客作业,有不足之处还请大家说明,也可以通过QQ 279823566 或者emial 提醒我,谢谢大家。

原创文章,作者:luobo3692003,如若转载,请注明出处:http://www.178linux.com/45967

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 10:29

    有没有发现黑屏其实特别丑,还是要多注意一下格式