操作系统

了解Linux

  GNU

  即GNU's not Unix的缩写,一个类Unix操作系统,希望开发出一套自由软件环境的来取代Unix系统。操作系统包括:内核、shell、编辑器、编译器。当时唯独缺少内核,后来自由软件基金会FSF开始发展内核,命名为Hurd。林纳斯开发出了Linux,Linux并不是GNU项目的一部分,但是使用了许多GNU中的软件,Linux和GNU软件的结合,形成了完全自由的操作系统,该系统称为"GNU/Linux"或Linux。GNU依然在研发自己的Hurd,但是依然没有稳定的版本。

  GNU计划开发了很多厉害的软件,这些软件也被一直到了其他操作系统(win,mac,unix)上,其中最出名的软件就是GCC。

  自由软件

  表示你可以直接获取源码,毕竟只有获取了源码才可能自由使用。但是免费软件你不一定获取到源码。

  GCC

  GNU compiler collection(GNU编译器套装),由GNU按照GPL规则开发的编译器(自由软件),亦是其他操作系统的标准编译器(特别是C语言)。GCC原本只能处理C,后来经过扩展可以处理Fortran,Pascal,Java,ada,Go以及其他语言。android的系统层也是属于Linux,故使用的是GCC,但是android的app运行在Dalvik虚拟机上,所以用的不是GCC。windows的应用大部分是自家vs编译器。mac和ios默认使用的也是GCC,后来变为clang和llvm。GCC(跨平台首选)在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。

  Clang & LLVM

  Apple对GCC编译器提出新增的要求,但是是被拒绝,于是LLVM诞生了。GCC代码耦合度太高,越是后期,质量越差。由于GCC是一个纯粹的编译系统,对IDE(xcode)配合很差,Apple无法使用LLVM 继续改进GCC的代码质量,便从零开始编写编译器前端,于是Clang诞生了。Apple的Clang是对C,C++,Objective-C的编译器前端,采用底层虚拟机LLVM作为编译器后端。Clang的目的是代替GCC,包括Clang前端和静态分析器。Clang输出代码对应的抽象语法树(AST),并将代码编译成LLVM bitcode,接着在后端用LLVM编译成平台相关的机器语言。Clang的编译速度和性能大幅高于GCC。GCC的兼容性是以牺牲性能得到的。

  C++与Objective-C

  二者都从C演化过来。Objective-C提供了运行期动态绑定。而C++ 是编译时静态绑定, 并通过嵌入类(多重继承)和虚函数(虚表)来模拟实现。Objective-C++即允许使用C++也可使用Objective-C。

  编译器的前后端

  编译器前端Parse,编译器后端Generator。词法分析、语法分析、语义分析被称为前端处理,生成AST,后面优化和目标代码生成称之为后端处理。想一下是否可以为不同的高级语言单独一个前端,不同的处理器架构写一个后端GCC + 不同的configuration可以实现。GCC真正的强大在于它是自由的,如果你的硬件添加新的功能,你可以在GCC编译器后端添加相应的指令。

  MinGW-w64

  Minimalist GNU for Windows:让GCC在windows上运行。下载x86_64-8.1.0-release-win32-seh:在windows上开发选择win32,在Linux,mac,unix选择posix;异常处理模式为seh。然后把其bin复制到环境变量中。cmd中gcc -v查看是否成功。MinGW包括最基本的gcc-core、gcc-g++、binutils 和 MinGW runtime。gcc (gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是"预处理"和"编译",以及提供了与编译器紧密相关的运行库的支持。binutils 提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编(objdump)、elf结构分析工具(readelf)、无效调试信息和符号的工具(strip)等。通常,binutils与gcc是紧密相集成的,没有binutils的话,gcc是不能正常工作的。glibc是gnu发布的libc库,也即c运行库。glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,

  gdb

  gdb表示GNU symbolic debugger来调试源码,查找bug。如果没有bug,可以选择在生成版本时,选择-00到-03表示编译优化。

  C语言来历

  C语言由B语言演化而来,丹尼斯里奇最初为了开发Unix而制作,可以用于编写系统级软件,Unix/Linux/RDBMS(比如MySQL)

  令牌Token

  令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。Token 是程序中对编译器有意义的最小元素,注意区别于字符集。关键字,标识符,常量,字符串,运算符,特殊符号;

  Linux基础

  什么是Linux?

  Linux是一套类Unix的OS,继承了Unix以网络为核心。Linux是多用户多任务,DOS是单用户单任务(windows模拟DOS)。

  Linux区别Unix

  开源、GUI+CLI、硬件要求低、跨平台、易学习、安全低。Unix相反

  Linux内核(大部分操作系统内核的作用相似)

  内核控制着系统中所有的硬件和软件,执行软件、分配硬件。包括:系统内存管理、应用程序管理、硬件设备管理、文件系统管理。

  Linux应用领域

  网站:LAMP=Linux+Apache+MySQL+PHP。LNMP=Linux+Nginx+MySQL+PHP

  体系结构

  用户空间:应用程序、C库

  内核空间 :系统调用接口、内核、平台架构相关的代码

  用户→内核:1.系统调用、2.硬件中断

  Bash区别cmd区别bat

  shell:壳。连接用户与内核,命令解释器

  bash(Bourne Again SHell):Linux的shell。区分大小写,/目录分割符,\转移字符。

  cmd:windows的shell。

  bat:DOS下的命令,bat文件表示批处理。\目录分割符,/参数分割符。

  开机启动过程

  POST(加电自检)→加载BIOS→确定启动设备并加载boot loader→加载kernel初始化initrd→运行/sbin/init初始化系统→打印用户登陆提示符

  Linux系统缺省:

  缺省即默认。

  日志文件

  /var/log/message

  桌面环境

  KDE和GNOME

  交换空间

  swap space磁盘上临时保存内存中多余的程序和数据。

  LILO

  Linux loader将Linux操作系统加载到内存中

  发行版本

  三剑客

  echo $?

  grep

  命令成功后返回0,没结果返回1,出现错误返回2

  grep(global regular express print)查找

  grep [options] pattern [file]

  --color=auto

  -v 显示未匹配到的行

  -f 从文件中获取pattern

  -i 忽略大小写

  -n 第几行

  -c 行数

  -o 只显示匹配到的

  -q 静默模式,不显示任何信息

  -A 表示After

  -B 表示Before

  -C 表示Context

  -e 表示多个逻辑关系or grep -e 'cat' -e 'dog' file

  -w 匹配单词

  -F 相当于fgrep,将pattern视为固定字符串

  不懂的

  -s

  -E 相当于egrep

  #例子

  grep -n dog file

  grep -nv dog file

  grep ^d file

  grep g$ file

  grep 'do*' file区别grep -F 'do*' file

  sed

  stream editor:编辑到匹配的文本。需要学习正则表达式regex

  sed [-hnV][-e  




免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:bkook@qq.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
上一篇:Linux介绍及常见基础指令
下一篇:Cloudflare申请成为公共证书颁发机构,向用户免费提供 ACME 等自动化 TLS 证书

在线
客服

在线客服服务时间:9:00-22:00

客服
热线

19899115815
7*24小时客服服务热线

关注
微信

关注官方微信
顶部