Unix/Linux入门篇


前言

这篇文章能够让你对Linux有一个基础的认识

一、Unix/Linux操作系统介绍

1.1 操作系统的作用

1.1.1 操作系统的目标

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

  • 有效:以更有效的方式使用计算机系统资源

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

1.1.2 操作系统的地位

  操作系统在计算机系统中承上启下的地位:向下封装硬件,向上提供操作接口。
在这里插入图片描述

1.2 Unix/Linux操作系统介绍

1.2.1 Unix家族

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

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

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

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

  • 1980:有两个最主要的Unix的版本线,一个是Berkeley的BSD UNIX,另一个是AT&T的Unix,两者的竞争最终引发了Unix的战争,最终导致Unix出现各种各样的变种。

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

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

1.2.2 Linux家族

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

  • 1990年,Linus Torvalds决定编写一个自己的Minix内核,初名为Linus’ Minix,意为Linus的Minix内核,后来改名为Linux,此内核于1991年正式发布,并逐渐引起人们的注意。

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

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

  • 1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。

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

1.2.3 Linux的两类用户

在这里插入图片描述

1.2.4 Linux的远亲

在这里插入图片描述

1.2.5 Linux和Unix的联系

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

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

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

  • Linux在x86架构上实现了UNIX系统的全部特性,具有多用户多任务的能力,同时保持了高效性和稳定性,Linux具有如下的优秀的特点:
    1)开放性;
    2)完全免费;
    3)多用户;
    4)多任务;
    5)良好的用户界面;
    6)设备独立性;
    7)提供了丰富的网络功能;
    8)可靠的系统安全性;
    9)良好的可移植性。

1.2.6 Linux内核及发行版介绍

1) Linux内核版本

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

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

  • 稳定版:具有工业级强度,可以广泛地应用和部署。新的稳定版相对于较旧的只是修正一些bug或加入一些新的驱动程序。
  • 开发版:由于要试验各种解决方案,所以变化很快。

内核源码网址:http://www.kernel.org,所有来自全世界的对Linux源码的修改最终都会汇总到这个网站,由Linus领导的开源社区对其进行甄别和修改最终决定是否进入到Linux主线内核源码中。

2) Linux发行版本

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

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

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

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

  • X Window系统是客户机/服务器结构的。X Window的实现是与操作系统内核分开的,其主要由X Server和X Client两部分组成。
  • X Window系统不是Unix/Linux操作系统的必须的构成部分,而只是一个可选的应用程序组件。
    在这里插入图片描述
    在这里插入图片描述

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

  • Unix/Linux服务器

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

  • 嵌入式Linux系统

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

  • 桌面应用

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

  • 电子政务

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

二、文件系统

2.1 目录和路径

2.1.1 目录

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

  • 一个目录下面除了可以存放文件之外还可以存放其他目录,即可包含子目录。

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

2.1.2 路径

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

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

  • 绝对路径
    1)绝对路径是从目录树的树根“/”目录开始往下直至到达文件所经过的所有节点目录。
    2)下级目录接在上级目录后面用“/”隔开。
    3)注意:绝对路径都是从“/”开始的,所以第一个字符一定是“/”。

  • 相对路径
    1)相对路径是指目标目录相对于当前目录的位置。
    2)如果不在当前目录下,则需要使用两个特殊目录“.”和“”了。目录“.”指向当前目录,而目录“…”。

2.2 文件系统

2.2.1 Windows和Linux文件系统区别

  在 windows 平台下,打开“计算机”,我们看到的是一个个的驱动器盘符:
在这里插入图片描述
  每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形,如图所示:
在这里插入图片描述
在 Linux 下,我们是看不到这些驱动器盘符,我们看到的是文件夹(目录):
在这里插入图片描述

  在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱。Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 文件系统层次结构标准。FHS 标准规定了 Linux 根目录各文件夹的名称及作用,统一了Linux界命名混乱的局面。和Windows操作系统类似,所有Unix/Linux的数据都是由文件系统按照树型目录结构管理的。而且Unix/Linux操作系统同样要区分文件的类型,判断文件的存取属性和可执行属性。

  Unix/Linux也采用了树状结构的文件系统,它由目录和目录下的文件一起构成。但Unix/Linux文件系统不使用驱动器这个概念,而是使用单一的根目录结构,所有的分区都挂载到单一的“/”目录上,其结构示意图如图所示:
在这里插入图片描述
  无论何种版本的 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/X11、/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对数据文件(* .mp3、* .bmp),程序文件(* .c、* .h、* .o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

2.3.2 文件分类

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

  • 普通文件

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

  在Unix/Linux中可以通过file命令来查看文件的类型。如果file文件后面携带文件名,则查看指定文件的类型,如果携带通配符“*”,则可以查看当前目录下的所有文件的类型。

  • 目录文件

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

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

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

  • 设备文件

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

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

  • 管道文件

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

  • 链接文件

  似于 windows 下的快捷方式,链接又可以分为软链接(符号链接)和硬链接。

2.4 文件权限

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

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

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

2.4.1 访问用户

  通过设定权限可以从以下三种访问方式限制访问权限:

  • 只允许用户自己访问(所有者)

  所有者就是创建文件的用户,用户是所有用户所创建文件的所有者,用户可以允许所在的用户组能访问用户的文件。

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

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

  • 允许系统中的任何用户访问(其他用户)

  用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是 other 用户类

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

  • 这个 QQ 空间是属于我的,我相当于管理者(也就是“所有者”),我想怎么访问就怎么访问。

  • 同时,我可以设置允许 QQ 好友访问,而这些 QQ 好友则类似于“用户组”。
    当然,我可以允许所有人访问,这里的所有人则类似于“其他用户”。

2.4.2 访问权限

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

  • 读权限(r)

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

  • 写权限(w)

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

  • 可执行权限(x)

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

注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

2.4.3 示例说明

在这里插入图片描述
在这里插入图片描述

  • ① 第1个字母代表文件的类型
    “d” 代表文件夹
    “-” 代表普通文件
    “c” 代表硬件字符设备
    “b” 代表硬件块设备
    “s”表示管道文件
    “l” 代表软链接文件

  • ② 后 9 个字母分别代表三组权限:文件所有者、用户者、其他用户拥有的权限。
    每一个用户都有它自身的读、写和执行权限。
    第一组权限控制访问自己的文件权限,即所有者权限。
    第二组权限控制用户组访问其中一个用户的文件的权限。
    第三组权限控制其他所有用户访问一个用户的文件的权限。

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

总结

下一节为Linux的常用命令,期待大家和我交流,留言或者私信,一起学习,一起进步!

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Unix/Linux系统编程是指使用C语言编写程序,能够调用操作系统提供的系统调用和库函数来完成系统级任务的程序设计过程。Unix/Linux系统编程的目的是编写高效、可靠、安全、移植性好的应用程序或系统程序。 Unix/Linux系统编程的核心代码包括使用系统调用,文件操作(读写文件、目录操作等),进程控制(fork、exec等),信号处理,网络编程等。 在Unix/Linux中,系统调用是与内核进行通讯的标准方式。程序中使用系统调用来请求内核完成某个任务。例如,open()系统调用用于打开一个文件,并返回文件描述符。read()和write()系统调用用于读写文件。 文件操作是Unix/Linux系统编程中的一个重要部分。文件操作包括打开文件、读写文件、删除文件、重命名文件等操作。另外还有目录操作,如创建目录、删除目录、遍历目录等。 进程控制是Unix/Linux系统编程中最为复杂的部分之一。进程控制包括创建新进程、执行新进程、等待进程结束、发送信号给进程等等。其中最常见的系统调用是fork()和exec()。fork()用于创建新进程,而在创建新进程之后,exec()则用于在新进程中执行新的程序。 信号处理是Unix/Linux系统编程中的一个重要概念。信号是由系统发出的一个异步事件,可以从进程内部或外部发出。进程可以对信号进行相应操作。常见的信号包括SIGINT(Ctrl+C中断信号)、SIGTERM(终止进程信号)和SIGKILL(强制终止进程信号)。 网络编程是Unix/Linux系统编程中的另一个重要部分。Unix/Linux提供了许多网络编程API,例如socket()、bind()、listen()和accept()等。使用这些API可以编写服务器端和客户端程序,进行网络通信。 总之,Unix/Linux系统编程涉及到许多重要的概念和操作,涉及到操作系统底层的各种操作。因此,需要开发人员有扎实的C编程能力、熟悉Unix/Linux系统调用和库函数、了解进程控制和信号处理的概念、熟悉网络编程API以及充分了解操作系统内部的机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写Bug那些事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值