LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

关于Linux操作系统的一些小知识点总结

2023年7月14日 174点热度

此篇文章主要会带你介绍Linux操作系统,包括Linux本身、Linux怎样使用、以及系统调用和Linux是怎样工作的。

Linux简介

UNIX是一个交互式系统,用于同时处理多进程和多用户同时在线。为何要说UNIX,那是由于Linux是由UNIX发展而至的,UNIX是由程序员设计,它的主要服务对象也是程序员。Linux承继了UNIX的设计目标。从智能手机到车辆,超级计算机和家用家电,从家用台式机到企业服务器,Linux操作系统无处不在。

大多数程序员都喜欢让系统尽量简单,典雅并具有一致性。举个反例,从最底层的角度来讲,一个文件应当只是一个字节集合。为了实现次序存取、随机存取、按键存取、远程存取只能是阻碍你的工作。相同的,假如命令

ls A*

意味着只列举以A为开头的所有文件,这么命令

rm A*

应当会移除所有以A为开头的文件而不是只删掉文件名是A*的文件。这个特点也是最小食惊原则(principleofleastsurprise)

最小食惊原则一半常用于用户界面和软件设计。它的原型是:该功能或则特点应当符合用户的预期,不应当使用户倍感震惊和惊讶。

一些有经验的程序员一般希望系统具有较强的功能性和灵活性。设计Linux的一个基本目标是每位应用程序只做一件事情并把他做好。所以编译器只负责编译的工作,编译器不会形成列表,由于有其他应用比编译器做的更好。

好多人都不喜欢冗余,为何在cp能够描述清楚你想干哪些时侯还使用copy?这完全是在浪费宝贵的hackingtime。为了从文件中提取所有包含字符串ard的行,Linux程序员应当输入

grep ard f

Linux插口

Linux系统是一种金字塔模型的系统,如下所示

中断应用程序的编程步骤_中断应用程序流程图_linux 应用程序 中断

应用程序发起系统调用把参数放到寄存器中(有时侯置于栈中),并发出trap系统深陷指令切换用户态至内核态。由于不能直接在C中编撰trap指令,因而C提供了一个库,库中的函数对应着系统调用。有些函数是使用汇编编撰的,而且还能从C中调用。每位函数首先把参数放到合适的位置之后执行系统调用指令。因而假如你想要执行read系统调用的话,C程序会调用read函数库来执行。这儿顺便提一下,是由POSIX指定的库插口而不是系统调用插口。也就是说,POSIX会告诉一个标准系统应当提供什么库过程,它们的参数是哪些,它们必须做哪些以及它们必须返回哪些结果。

不仅操作系统和系统调用库外,Linux操作系统还要提供一些标准程序,例如文本编辑器、编译器、文件操作工具等。直接和用户打交道的是里面那些应用程序。因而我们可以说Linux具有三种不同的插口:系统调用插口、库函数插口和应用程序插口

Linux中的GUI(GraphicalUserInterface)和UNIX中的特别相像,这些GUI创建一个桌面环境,包括窗口、目标和文件夹、工具栏和文件拖放功能。一个完整的GUI还包括窗口管理器以及各类应用程序。

linux 应用程序 中断_中断应用程序流程图_中断应用程序的编程步骤

Linux上的GUI由X窗口支持,主要组成部份是X服务器、控制按键、鼠标、显示器等。当在Linux上使用图形界面时,用户可以通过键盘点击运行程序或则打开文件,通过拖放将文件进行复制等。

Linux组成部份

事实上,Linux操作系统可以由下边这几部份构成

linux 应用程序 中断_中断应用程序的编程步骤_中断应用程序流程图

Shell

虽然Linux应用程序提供了GUI,而且大部份程序员仍偏好于使用命令行(command-lineinterface),称为shell。用户一般在GUI中启动一个shell窗口之后就在shell窗口下进行工作。

中断应用程序的编程步骤_中断应用程序流程图_linux 应用程序 中断

shell命令行使用速率快、功能更强悍、而且便于扩充、并且不会带来肢体重复性胃炎(RSI)。

下边会介绍一些最简单的bashshell。当shell启动时,它首先进行初始化,在屏幕上输出一个提示符(prompt),一般是一个百分号或则欧元符号,等待用户输入

中断应用程序的编程步骤_中断应用程序流程图_linux 应用程序 中断

等用户输入一个命令后,shell提取其中的第一个词,这儿的词指的是被空格或制表符分隔开的一连串字符。假设这个词是即将运行程序的程序名,这么都会搜索这个程序,假若找到了这个程序都会运行它。之后shell会将自己挂起直至程序运行完毕,然后再尝试读入下一条指令。shell也是一个普通的用户程序。它的主要功能就是读取用户的输入和显示估算的输出。shell命令中可以包含参数,它们作为字符串传递给所调用的程序。诸如

cp src dest

会调用cp应用程序并包含两个参数src和dest。这个程序会解释第一个参数是一个早已存在的文件名,之后创建一个该文件的副本,名称为dest。

并不是所有的参数都是文件名,例如下边

head -20 file

第一个参数-20linux操作系统教程,会告诉head应用程序复印文件的前20行,而不是默认的10行。控制命令操作或则指定可选值的参数称为标志(flag),依照惯例标志应当使用-来表示。这个符号是必要的,例如

head 20 file

是一个完全合法的命令,它会告诉head程序输出文件名为20的文件的前10行,之后输出文件名为file文件的前10行。Linux操作系统可以接受一个或多个参数。

为了更容易的指定多个文件名,shell支持魔法字符(magiccharacter),也被称为键值(wildcards)。例如,*可以匹配一个或则多个可能的字符串

ls *.c

告诉ls列列举所有文件名以.c结束的文件。若果同时存在多个文件,则会在旁边进行并列。

另一个键值是问号,负责匹配任意一个字符。一组在中括弧中的字符可以表示其中任意一个,为此

ls [abc]*

会列列举所有以a、b或则c开头的文件。

shell应用程序不一定通过终端进行输入和输出。shell启动时,才会获取标准输入、标准输出、标准错误文件进行访问的能力。

标准输出是从鼠标输入的,标准输出或则标准错误是输出到显示器的。许多Linux程序默认是从标准输入进行输入并从标准输出进行输出。诸如

sort 

会调用sort程序,会从终端读取数据(直至用户输入ctrl-d结束),按照字母次序进行排序,之后将结果输出到屏幕上。

一般还可以重定向标准输入和标准输出,重定向标准输入使用进行重定向。容许一个命令中重定向标准输入和输出。诸如命令

sort out

会使sort从文件in中得到输入,并把结果输出到out文件中。因为标准错误没有重定向,所以错误信息会直接复印到屏幕上。从标准输入读入,对其进行处理并将其写入到标准输出的程序称为过滤器。

考虑下边由三个分开的命令组成的指令

sort temp;head -30 <temp;rm temp

首先会调用sort应用程序,从标准输入in中进行读取,并通过标准输出到temp。当程序运行完毕后,shell会运行head,告诉它复印前30行,并在标准输出(默认为终端)上复印。最后,temp临时文件被删掉。轻轻的,你走了,你挥一挥袖子,不带走一片云彩。

命令行中的第一个程序一般会形成输出,在前面的事例中,形成的输出都不temp文件接收。但是,Linux还提供了一个简单的命令来做这件事,比如下边

sort <in | head -30

里面|称为竖线符号,它的意思是从sort应用程序形成的排序输出会直接作为输入显示,无需创建、使用和移除临时文件。由管线符号联接的命令集合称为管线(pipeline)。诸如如下

grep cxuan *.c | sort | head -30 | tail -5 >f00

对任意以.t结尾的文件中包含cxuan的行被讲到标准输出中,之后进行排序。那些内容中的前30行被head下来并传给tail,它又将最后5行传递给foo。这个事例提供了一个管线将多个命令联接上去。

可以把一系列shell命令放到一个文件中,之后将此文件作为输入来运行。shell会依照次序对她们进行处理,如同在按键上键入命令一样。包含shell命令的文件被称为shell脚本(shellscripts)。

推荐一个shell命令的学习网站:

shell脚本当然也是一段程序,shell脚本中可以对变量进行形参,也包含循环控制句子诸如if、for、while等,shell的设计目标是让其看上去和C相像(ThereisnodoubtthatCisfather)。因为shell也是一个用户程序,所以用户可以选择不同的shell。

Linux应用程序

Linux的命令行也就是shell,它由大量标准应用程序组成。那些应用程序主要有下边六种

不仅这种标准应用程序外,还有其他应用程序例如Web浏览器、多媒体播放器、图片浏览器、办公软件和游戏程序等。

我们在前面的事例中早已见过了几个Linux的应用程序,例如sort、cp、ls、head,下边我们再来认识一下其他Linux的应用程序。

中断应用程序的编程步骤_中断应用程序流程图_linux 应用程序 中断

我们先从几个事例开始讲起,例如

cp a b

是将a复制一个副本为b,而

mv a b

是将a联通到b,并且删掉原文件。

前面这两个命令有一些区别,cp是将文件进行复制,复制完成后会有两个文件a和b;而mv相当于是文件的联通,联通完成后就不再有a文件。cat命令可以把多个文件内容进行联接。使用rm可以删掉文件;使用chmod可以容许所有者改变访问权限;文件目录的的创建和删掉可以使用mkdir和rmdir命令;使用ls可以查看目录文件,ls可以显示好多属性,例如大小、用户、创建日期等;sort决定文件的显示次序

Linux应用程序还包括过滤器grep,grep从标准输入或则一个或多个输入文件中提取特定模式的行;sort将输入进行排序并输出到标准输出;head提取输入的前几行;tail提取输入的前面几行;除此之外的过滤器还有cut和paste,容许对文本行的剪切和复制;od将输入转换为ASCII;tr实现字符大小写转换;pr为低格复印输出等。

程序编译工具使用gcc;

make命令用于手动编译,这是一个很强悍的命令linux 应用程序 中断,它用于维护一个大的程序,常常这类程序的源码由许多文件构成。典型的,有一些是headerfiles头文件,源文件一般使用include指令包含那些文件,make的作用就是跟踪什么文件属于头文件,之后安排手动编译的过程。

下边列举了POSIX的标准应用程序

程序应用

ls

列举目录

cp

复制文件

head

显示文件的前几行

make

编译文件生成二补码文件

cd

切换目录

mkdir

创建目录

chmod

更改文件访问权限

ps

列举文件进程

pr

低格复印

rm

删掉一个文件

rmdir

删掉文件目录

tail

提取文件最后几行

tr

字符集转换

grep

分组

cat

将多个文件连续标准输出

od

以八补码显示文件

cut

从文件中剪切

paste

从文件中粘贴

Linux内核结构

在前面我们看见了Linux的整体结构,下边我们从整体的角度来看一下Linux的内核结构

linux 应用程序 中断_中断应用程序的编程步骤_中断应用程序流程图

内核直接位于在硬件上,内核的主要作用就是I/O交互、内存管理和控制CPU访问。上图中还包括了中断和调度器,中断是与设备交互的主要方法。中断出现时调度器都会发挥作用。这儿的低级代码停止正在运行的进程,将其状态保存在内核进程结构中,并启动驱动程序。进程调度也会发生在内核完成一些操作而且启动用户进程的时侯。图中的调度器是dispatcher。

注意这儿的调度器是dispatcher而不是scheduler,这三者是有区别的

scheduler和dispatcher都是和进程调度相关的概念,不同的是scheduler会从几个进程中随便选定一个进程;而dispatcher会给scheduler选择的进程分配CPU。

之后,我们把内核系统分为三部份。

从图中可以看出I/O层次的关系,最高层是一个虚拟文件系统,也就是说不管文件是来自显存还是c盘中,都是经过虚拟文件系统中的。从底层看,所有的驱动都是字符驱动或则块设备驱动。两者的主要区别就是是否容许随机访问。网路驱动设备并不是一种独立的驱动设备,它实际上是一种字符设备,不过网络设备的处理方法和字符设备不同。

里面的设备驱动程序中,每位设备类型的内核代码都不同。字符设备有两种使用方法,有一键式的诸如vi或则emacslinux安装教程,须要每一个按键输入。其他的例如shell,是须要输入一行按回车键将字符串发送给程序进行编辑。

网路软件一般是模块化的,由不同的设备和合同来支持。大多数Linux系统在内核中包含一个完整的硬件路由器的功能,而且这个不能和外部路由器相比,路由器里面是合同栈,包括TCP/IP合同,合同栈里面是socket插口,socket负责与外部进行通讯,充当了门的作用。

c盘驱动里面是I/O调度器,它负责排序和分配c盘读写操作,以尽可能降低盘片的无用联通。

在内核最顶楼的是系统调用插口,所有的系统调用都是经过这儿,系统调用会触发一个trap,将系统从用户态转换为内核态,之后将控制权移交给前面的内核部件。

良许个人陌陌

添加良许个人陌陌即送3套程序员必看资料

→精选技术资料共享

→高手如云交流社群

本公众号全部博文已整理成一个目录linux 应用程序 中断,请在公众号里回复「m」获取!

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 字符 应用 操作 程序
最后更新:2023年7月14日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
ARM-Linux应用开发和单片机开发的不同ARM的应用 Linux下如何查看内核信息、发行版信息的信息? 《Linux内核编程》入门篇:降维为繁 Linux网卡驱动安装及配置指南 大专计算机有哪些课程,专业的1对1答疑! SamsungNote2Verizoni605onAndroid在Android系统上安装linux发行版 MPV的高级应用——Ubuntu最佳应用列表里的应用 手机上可以安装一套完整的Linux系统吗? Ubuntu上安装SMplayer.6.10-PPA源在CentOS5.5下安装使用 centos启动图形界面的方法.x1,关闭界面 Linux下进程与线程概念重构 Linux中的十大开源播放器C编写 多进程和多线程的区别,你知道几个? Linux发行版中可用的7款最佳开源视频播放器 Linux系统安装网卡驱动的具体操作流程进行说明 如何在Linux上安装视频播放器installvlc 晚上暴露于蓝光,睡眠质量大打折扣 如何安装便携式WiFi驱动程序?360wifi驱动的教程 CentOS云服务器搭建网站和CentOS搭建DNS解析服务 如何在linux上创建一个用户,减少不必要的沟通成本
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
【每日一题】Linux链接文件- 关于LinuxQt安装教程及配置的回答及解决办法的 Linux在内核中是如何记录进程资源的?你能从C语言源代码层面分析下吗? SSH安全加固的文字,网友点评通过密钥登录更加安全 Linux里并没有安装rsync的安装过程及安装 Linux下,我们新增一块硬盘或分区“”到这个目录 云海天教程:Ubuntu修改密码及密码复杂度策略设置 Linux的多用户多任务的运行机制-Linux用户管理 服务器上安装linux系统的具体操作过程-如何选择系统? 公司用一般不会给你最高权限的root账户管理功能 文件类型扩展名及打开方式文档文件文件 RedHatLinux中自动运行程序中的应用 samba主机名称解析服务//samba/smb.conf 如何在Linux使用unzip命令合并解压分卷文件文件? 不懂这些硬盘分区的知识,怎么能够安装操作系统 修改软件源文件、UI界面设置换源操作|Ubuntu vmwareworkstation7.1,虚拟机中的系统怎么访问本机数据库? 如何用非重命名的方法在文件管理器中隐藏文件和文件夹 使用方式命令输出Linux系统中的网络应用调试分析器 Linux云主机无法SSH远程登录,上午还用得挺好
标签聚合
linux系统 操作 虚拟机 文件目录 应用 命令 文件 软件 linux服务器 内核
书籍
课程
技术群
技术干货大合集↓
  • 2023年10月 / 8篇
  • 2023年9月 / 90篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.