2020年度钻石C++C学习笔记(3)--《博学谷》

1.Unix/Linux操做系统介绍

2020年度钻石C++C学习笔记linux

1.1 操做系统的做用

1.1.1 操做系统的目标

l 方便:使计算机系统易于使用shell

l 有效:以更有效的方式使用计算机系统资源数据库

l 扩展:方便用户有效开发、测试和引进新功能编程

 

1.1.2 操做系统的地位

操做系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操做接口。windows

 

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

1.2 Unix/Linux操做系统介绍

1.2.1 Unix家族

V(cmL46679910)

l 1965:贝尔实验室(Bell Labs)加入一项由通用电气和麻省理工学院合做的计划,该计划要创建一套多使用者、多任务、多层次的MULTICS操做系统。后来由于项目太为复杂失败。安全

l 1969:其主要开发者Thompson(后被称为UNIX之父)和Ritchie领导一组开发者,开发了一个新的多任务操做系统—UNICS,后来被更名为Unix,最初的Unix是用B语言和汇编语言混合编写而成。服务器

l 1971:两人在贝尔实验室共同发明了C语言,并于1973用C语言重写了Unix。网络

l 1974:UNIX第一次出如今贝尔实验室之外。此后UNIX被政府机关,研究机构,企业和大学注意到,并逐渐流行开来。架构

l 1980:有两个最主要的Unix的版本线,一个是Berkeley的BSD UNIX,另外一个是AT&T的Unix,二者的竞争最终引起了Unix的战争,最终致使Unix出现各类各样的变种。socket

l 1982:AT&T基于版本7开发了UNIX System Ⅲ的第一个商业版本,并再也不开源。

l 1992~2001:因为版权问题,AT&T公司与BSD开发组开始了一场将近10年的版权官司。UNIX因为其昂贵的费用,仅局限于大型机的应用;BSD由于版权问题,失去了宝贵的发展时期。

 

1.2.2 Linux家族

l Minix(mini-UNIX)最初是由Andrew Tanenbaum教授,仿照4.3BSD的源代码,白手起家完成了12000行C语言的编写工做这个系统只是一个教学工具,没有什么实际应用价值。

l 1990年,Linus Torvalds决定编写一个本身的Minix内核,初名为Linus' Minix,意为Linus的Minix内核,后来更名为Linux,此内核于1991年正式发布,并逐渐引发人们的注意。

l Linux操做系统的诞生、发展、和成长过程依赖于五个重要支柱:unix操做系统、minix操做系统、GNU计划、POSIX标准和互联网。

l GNU计划:GNU是“GNU is Not Unix”的递归缩写,由Richard M.Stallman于1984年创办,旨在开发一个免费、类unix的操做系统-GNU系统及其开发工具;Emacs编辑系统、BASH shell程序、GCC、GDB等开发工具都是GNU组织的产品。

l 1992年Linux与其余GNU软件结合,彻底自由的操做系统正式诞生。该操做系统每每被称为“GNU/Linux”或简称Linux。

l POSIX标准:POSIX标准定义了操做系统应该为应用程序提供的接口标准,POSIX标准用来统一Unix、Linux各分支编程接口,以提升其通用型和可移植性。

 

1.2.3 Linux的两类用户

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

1.2.4 Linux的远亲

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

1.2.5 Linux和Unix的联系

l UNIX系统是工做站上最经常使用的操做系统,它是一个多用户、多任务的实时操做系统,容许多人同时访问计算机, 并同时运行多个任务。UNIX系统具备稳定、高效、安全、方便、功能强大等诸多优势,自20世纪70年代开始便运行在许多大型和小型计算机上。

l UNIX虽然是一个安全、稳定且功能强大的操做系统,但它也一直是一种大型的并且对运行平台要求很高的操做系统,只能在工做站或小型机上才能发挥所有功能,而且价格昂贵,对普通用户来讲是可望而不可及的,这为后来Linux的崛起提供了机会,Linux是一个类UNIX操做系统。

l Linux是免费的、不受版权制约、与UNIX兼容的操做系统。

l Linux在x86架构上实现了UNIX系统的所有特性,具备多用户多任务的能力,同时保持了高效性和稳定性,Linux具备以下的优秀的特色:

1) 开放性;

2) 彻底免费;

3) 多用户;

4) 多任务;

5) 良好的用户界面;

6) 设备独立性;

7) 提供了丰富的网络功能;

8) 可靠的系统安全性;

9) 良好的可移植性。

1.2.6 Linux内核及发行版介绍

1) Linux内核版本

内核(kernel)是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层。

 

Linux内核版本又分为稳定版和开发版,两种版本是相互关联,相互循环:

稳定版:具备工业级强度,能够普遍地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。

l 开发版:因为要试验各类解决方案,因此变化很快。

 

2) Linux发行版本

Linux发行版 (也被叫作 GNU/Linux 发行版) 一般包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。

 

这些操做系统一般由Linux内核、以及来自GNU计划的大量的函式库,和基于X Window的图形界面,在X Window中用户一样能够经过使用鼠标对窗口、菜单等进行操做来完成相应的工做。

 

X Window系统是一个很是出色的图形窗口系统,是类UNIX系统的图形用户界面的工业标准。X Window系统最重要的特征之一就是它的结构与设备无关。

 

X Window系统的主要特色有以下几点:

l X Window系统是客户机/服务器结构的。X Window的实现是与操做系统内核分开的,其主要由X Server和X Client两部分组成。

l X Window系统不是Unix/Linux操做系统的必须的构成部分,而只是一个可选的应用程序组件。

 

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

POSITION

2015

2014

1

Linux Mint

Linux Mint

2

Debian

Ubuntu

3

Ubuntu

Debian

4

openSUSE

openSUSE

5

Fedora

Fedora

6

Mageia

Mageia

7

Manjaro

Arch

8

CentOS

Elementary

9

Arch

CentOS

10

Elementary

Zorin

 

 

1.2.7 Unix/Linux开发应用领域介绍

l Unix/Linux服务器

是目前Unix/Linux应用最多的一个领域,能够提供Web、FTP、Gopher、SMTP/POP三、Proxy/Cache、DNS等服务器,支持服务器集群,支持虚拟主机、虚拟服务、***等。

 

嵌入式Linux系统

嵌入式Linux是将流行的Linux操做系统进行剪裁修改,可以在嵌入式计算机系统上运行的一种操做系统。Linux嵌入式系统可以支持多种CPU和硬件平台,性能稳定,剪裁性好,开发和使用容易。其中包括Embedix、uCLinux、muLinux等。

 

l 桌面应用

近年来,Linux系统特别强调在桌面应用方面的改进,而且已达到至关的水平,彻底能够做为一种集办公应用、多媒体应用、网络应用等多方面功能于一体的图形界面操做系统,在办公应用方面,Unix/Linux集成了openOffice、SUN公司的StarOffice以及KOffice等工具。

 

l 电子政务

V(cmL46679910)

随着Linux的快速发展,Linux已逐渐成为Windows系统重要的竞争力量。尤为是Linux在安全性方面的独特优点,又使得Linux在政府应用领域获得很大的发展。目前一些国家正将其电子政务系统向Linux平台迁移。中国政府也对Linux给予极大的支持。

 

2.  文件系统

2.1 目录和路径

2.1.1 目录

 

l 目录是一组相关文件的集合。

l 一个目录下面除了能够存放文件以外还能够存放其余目录,便可包含子目录。

在肯定文件、目录位置时,DOS和Unix/Linux都采用“路径名+文件名”的方式。路径反映的是目录与目录之间的关系。

 

2.1.2 路径

Unix/Linux路径由到达定位文件的目录组成。在Unix/Linux系统中组成路径的目录分割符为斜杠“/”,而DOS则用反斜杠“\”来分割各个目录。

 

路径分为绝对路径和相对路径:

l 绝对路径

1) 绝对路径是从目录树的树根“/”目录开始往下直至到达文件所通过的全部节点目录。

2) 下级目录接在上级目录后面用“/”隔开。

3) 注意:绝对路径都是从“/”开始的,因此第一个字符必定是“/”。

 

l 相对路径

1) 相对路径是指目标目录相对于当前目录的位置。

2) 若是不在当前目录下,则须要使用两个特殊目录“.”和“..”了。目录“.”指向当前目录,而目录“..”。

 

2.2 文件系统

2.2.1 Windows和Linux文件系统区别

 windows 平台下,打开“计算机”,咱们看到的是一个个的驱动器盘符:

 

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

 

每一个驱动器都有本身的根目录结构,这样造成了多个树并列的情形,如图所示:

 

 

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

 Linux 下,咱们是看不到这些驱动器盘符,咱们看到的是文件夹(目录):

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

RedHat

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

Ubuntu

 

在早期的 UNIX 系统中,各个厂家各自定义了本身的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录作了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及做用,统一了Linux界命名混乱的局面。

 

Windows操做系统相似,全部Unix/Linux的数据都是由文件系统按照树型目录结构管理的。并且Unix/Linux操做系统一样要区分文件的类型,判断文件的存取属性和可执行属性。

 

Unix/Linux也采用了树状结构的文件系统,它由目录和目录下的文件一块儿构成。但Unix/Linux文件系统不使用驱动器这个概念,而是使用单一的根目录结构,全部的分区都挂载到单一的“/”目录上,其结构示意图如图所示:

 

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

 

不管何种版本的 Linux 发行版,桌面、应用是 Linux 的外衣,文件组织、目录结构才是Linux的心里。

 

2.2.2 Linux目录结构

/根目录,通常根目录下只存放目录,在Linux下有且只有一个根目录。全部的东西都是从这里开始。当你在终端里输入“/home”,你实际上是在告诉电脑,先从/(根目录)开始,再进入到home目录。

/bin: /usr/bin可执行二进制文件的目录,如经常使用的命令ls、tar、mv、cat等。

/boot放置linux系统启动时用到的一些文件,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。

/dev存放linux系统下的设备文件,访问该目录下某个文件,至关于访问某个设备,经常使用的是挂载光驱 mount /dev/cdrom /mnt。

/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X十一、/etc/sysconfig、/etc/xinetd.d。

/home系统默认的用户家目录,新增用户帐号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~edu 表示用户 edu 的家目录。

/lib: /usr/lib/usr/local/lib系统使用的函数库的目录,程序在执行过程当中,须要调用一些额外的参数时须要函数库的协助。

/lost+fount系统异常产生错误时,会将一些遗失的片断放置于此目录下。

/mnt/media光盘默认挂载点,一般光盘挂载于 /mnt/cdrom 下,也不必定,能够选择任意位置进行挂载。

/opt给主机额外安装软件所摆放的目录。

/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,因为数据都存放于内存中,因此不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。

/root系统管理员root的家目录。

/sbin/usr/sbin/usr/local/sbin放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不一样的是,这几个目录是给系统管理员 root使用的命令,通常用户只能"查看"而不能设置和使用。

/tmp通常用户或正在执行的程序临时存放文件的目录,任何人均可以访问,重要数据不可放置在此目录下。

/srv服务启动以后须要访问的数据目录,如 www 服务须要访问的网页数据存放在 /srv/www 内。

/usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,倒是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man:  程序说明文件存放目录。

/var放置系统执行过程当中常常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:全部的登陆文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

 

2.3 一切皆文件

2.3.1 一切皆文件

Unix/Linux对数据文件(*.mp三、*.bmp),程序文件(*.c、*.h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

 

Unix/Linux操做系统中也必须区分文件类型,经过文件类型能够判断文件属于可执行文件、文本文件仍是数据文件。在Unix/Linux系统中文件能够没有扩展名。

2.3.2 文件分类

一般,Unix/Linux系统中经常使用的文件类型有5种:普通文件、目录文件、设备文件、管道文件和连接文件。

 

l 普通文件

普通文件是计算机操做系统用于存放数据、程序等信息的文件,通常都长期存放于外存储器(磁盘、磁带等)中。普通文件通常包括文本文件、数据文件、可执行的二进制程序文件等。

 

Unix/Linux中能够经过file命令来查看文件的类型。若是file文件后面携带文件名,则查看指定文件的类型,若是携带通配符“*”,则能够查看当前目录下的全部文件的类型。

 

l 目录文件

Unix/Linux系统把目录当作是一种特殊的文件,利用它构成文件系统的树型结构。

 

目录文件只容许系统管理员对其进行修改,用户进程能够读取目录文件,但不能对它们进行修改。

 

每一个目录文件至少包括两个条目,“..”表示上一级目录,“.”表示该目录自己。

 

l 设备文件

Unix/Linux系统把每一个设备都映射成一个文件,这就是设备文件。它是用于向I/O设备提供链接的一种文件,分为字符设备和块设备文件。

 

字符设备的存取以一个字符为单位,块设备的存取以字符块为单位。每一种I/O设备对应一个设备文件,存放在/dev目录中,如行式打印机对应/dev/lp,第一个软盘驱动器对应/dev/fd0。

 

l 管道文件

管道文件也是Unix/Linux中较特殊的文件类型,这类文件多用于进程间的通讯。

 

l 连接文件

似于 windows 下的快捷方式,连接又能够分为软连接(符号连接)和硬连接。

 

2.4 文件权限

文件权限就是文件的访问控制权限,即哪些用户和组群能够访问文件以及能够执行什么样的操做。

 

Unix/Linux系统是一个典型的多用户系统,不一样的用户处于不一样的地位,对文件和目录有不一样的访问权限。为了保护系统的安全性,Unix/Linux系统除了对用户权限做了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面做了周密的控制。

 

 Unix/Linux中的每个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

2.4.1 访问用户

经过设定权限能够从如下三种访问方式限制访问权限:

l 只容许用户本身访问(全部者)

全部者就是建立文件的用户,用户是全部用户所建立文件的全部者,用户能够容许所在的用户组能访问用户的文件。

 

l 容许一个预先指定的用户组中的用户访问(用户组)

用户都组合成用户组,例如,某一类或某一项目中的全部用户都可以被系统管理员归为一个用户组,一个用户可以授予所在用户组的其余成员的文件访问权限。

 

l 容许系统中的任何用户访问(其余用户)

用户也将本身的文件向系统内的全部用户开放,在这种状况下,系统内的全部用户都可以访问用户的目录或文件。在这种意义上,系统内的其余全部用户就是 other 用户类

 

这有点相似于 QQ 空间的访问权限:

这个 QQ 空间是属于个人,我至关于管理者(也就是“全部者”),我想怎么访问就怎么访问。

同时,我能够设置容许 QQ 好友访问,而这些 QQ 好友则相似于“用户组”。

固然,我能够容许全部人访问,这里的全部人则相似于“其余用户”。

 

2.4.2 访问权限

用户可以控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

读权限(r)

对文件而言,具备读取文件内容的权限;对目录来讲,具备浏览目录的权限。

写权限(w)

对文件而言,具备新增、修改文件内容的权限;对目录来讲,具备删除、移动目录内文件的权限。

可执行权限(x)

对文件而言,具备执行文件的权限;对目录了来讲该用户具备进入目录的权限。

 

注意:一般,Unix/Linux系统只容许文件的属主(全部者)或超级用户改变文件的读写权限。

 

2.4.3 示例说明

 

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

1) 1个字母表明文件的类型:“d” 表明文件夹、“-” 表明普通文件、“c” 表明硬件字符设备、“b” 表明硬件块设备、“s”表示管道文件、“l” 表明软连接文件。

2)  9 个字母分别表明三组权限:文件全部者、用户者、其余用户拥有的权限。

 

每个用户都有它自身的读、写和执行权限。

n 第一组权限控制访问本身的文件权限,即全部者权限。

n 第二组权限控制用户组访问其中一个用户的文件的权限。

n 第三组权限控制其余全部用户访问一个用户的文件的权限。

 

这三组权限赋予用户不一样类型(即全部者、用户组和其余用户)的读、写及执行权限就构成了一个有9种类型的权限组。

 

3.  经常使用命令

3.1 概述

l 不少人可能在电视或电影中看到过相似的场景,***面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务。

l Linux 刚出世时没有什么图形界面,全部的操做全靠命令完成,就如同电视里的***那样,充满了神秘与晦涩。

近几年来,尽管 Linux 发展得很是迅速,图形界面愈来愈友好,可是在真正的开发过程当中,Linux 命令行的应用仍是占有很是重要的席位,并且许多Linux功能在命令行界面要比图形化界面下运行的快。能够说不会命令行,就不算会 Linux。

l Linux 提供了大量的命令,利用它能够有效地完成大量的工做,如磁盘操做、文件存取、目录操做、进程管理、文件权限设定等。Linux 发行版本最少的命令也有 200 多个,这里只介绍比较重要和使用频率最多的命令。

 

3.2 命令使用方法

3.2.1 Linux 命令格式

command  [-options]  [parameter1]  …

V(cmL46679910)

说明:

l command:命令名,相应功能的英文单词或单词的缩写

l [-options]:选项,可用来对命令进行控制,也能够省略,[]表明可选

l parameter1 …:传给命令的参数,能够是零个一个或多个

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

3.2.2 查看帮助文档

1) --help

通常是 Linux 命令自带的帮助信息,并非全部命令都自带这个选项。

 

如咱们想查看命令 ls 的用法:ls --help

 

 

2) man(有问题找男人)

man 是 Linux 提供的一个手册,包含了绝大部分的命令、函数使用说明。

 

该手册分红不少章节(section),使用 man 时能够指定不一样的章节来浏览不一样的内容。

man 中各个 section 意义以下:

1.Standard commands(标准命令)

2.System calls(系统调用,如open,write)

3.Library functions(库函数,如printf,fopen)

4.Special devices(设备文件的说明,/dev下各类设备)

5.File formats(文件格式,如passwd)

6.Games and toys(游戏和娱乐)

7.Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)

8.Administrative Commands(管理员命令,如ifconfig)

 

 

 

man使用格式以下:

man [选项]  命令名

 

man设置了以下的功能键:

功能键

功能

空格键

显示手册页的下一屏

Enter键

一次滚动手册页的一行

b

回滚一屏

f

前滚一屏

q

退出man命令

h

列出全部功能键

/word

搜索word字符串

 

如,咱们想查看 ls 的用法:man 1 ls ( 1:为数字“1”,表明第 1 个 section,标准命令 )

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

实际上,咱们不用指定第几个章节也用查看,如,man ls。可是,有这个一种状况,假如,命令的名字和函数的名字恰好重名(如:printf),它既是命令,也能够是库函数,若是,咱们不指定章节号,man printf,它只查看命令的用法,不会查询函数的用法,由于 man 是按照手册的章节号的顺序进行搜索的。

 

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

因此,使用 man 手册时,最好指定章节号:

 watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 

 

 

3.2.3 使用技巧V(cmL46679910)

1) 自动补全

在敲出命令的前几个字母的同时,按下tab键,系统会自动帮咱们补全命令。

 

2) 历史命令

当系统执行过一些命令后,可按上下键翻看之前的命令,history将执行过的命令列举出来。

相关文章
相关标签/搜索