Linux 基础知识

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 基础知识相关的知识,希望对你有一定的参考价值。

一、计算机的组成及其功能

硬件

运算器的功能:实现算术运算和逻辑运算(与控制器组成CPU)。

存储器的功能:将输入设备接收到的信息以二进制的数据形式存到存储器中。

控制器的功能:将指令逐条从存储器中取出,经译码分析后向全机发出相应的操作控 制信号作用于其他部件,使各部件有条不紊地协调工作(与运算器组成CPU)。

输入设备的功能 :将数据、程序、文字符号、图象、声音等信息输送到计算机中。

输出设备的功能 :将计算机的运算结果或者中间结果打印或显示出来。

软件

操作系统

应用系统

二、内核功能以及作用

一种开源的类Unix操作系统宏内核。
技术分享图片

基本系结构
技术分享图片

  • 系统调用接口:提供了某些机制执行从用户空间到内核的函数调用。
  • 进程管理:重点是进程的执行,还包括处理活动进程之间共享 CPU 的需求。
  • 内存管理:管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
  • 虚拟文件系统:为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。
  • 网络堆栈:IP)是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。
  • 设备驱动程序:能够运转特定的硬件设备。
  • 依赖体系结构的代码:包含了各种特定于体系结构的子目录(共同组成了 BSP)

三、常见Linux的发行版,不同发行版之间的联系与区别

  • Redhat系列:RHEL、Fedora CentOS
  • Debian系列:Debian和Ubuntu
  • Gentoo
  • SuSE
  • android

四、常见的开源协议(GPL,LGPL, BSD,Apache等)以及开源协议的区别

GPL(GNU General Public License):
GPL协议的主要内容是只要在一个软件中使用("使用"指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的"传染性"。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

LGPL(GNU Lesser General Public License):
LGPL 是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品

BSD(Berkeley Software Distribution)协议:

1、如果二次发布的产品中包含源代码,则在源代码中必须带有原来的代码中的BSD协定;

2、如果二次发布产品是二进制格式的库或程序,则需要在发布的文档或版权声明中说明包含原来的代码中的BSD协定;

3、不可以用开源代码的作者或组织,以及原来的产品的名字做市场推广;

Apache Licence:

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

1、需要给代码的用户一份Apache Licence

2、如果你修改了代码,需要在被修改的文件中说明。

3、在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

4、如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

五、Linux的哲学思想

  • 一切皆文件
  • 单一小程序
  • 避免与用户交互
  • 提供机制,而非策略

六、linux目录结构以及目录结构命名规定

Linux目录结构(倒置树状结构):

文件系统的层次结构标准FHS(Filesystem Hierarchy Standard)

/bin:所有用户可用的基本命令程序文件;

         /sbin:供系统管理使用的工具程序;

         /boot:引导加载器必须用到的各静态文件:kernel, initramfs(initrd), grub等;

         /dev:存储特殊文件或设备文件;

              设备有两种类型:字符设备(线性设备)、块设备(随机设备);

         /etc:系统程序的配置文件,只能为静态;

         /home:普通的家目录的集中位置;一般每个普通用户的家目录默认为此目录下与用户名同名的子目录,/home/USERNAME;

         /root:管理员的家目录;可选;

         /lib:为系统启动或根文件系统上的应用程序(/bin, /sbin等)提供共享库,以及为内核提供内核模块

              libc.so.*:动态链接的C库;

              ld*:运行时链接器/加载器;

              modules:用于存储内核模块的目录;

         /lib64:64位系统特有的存放64位共享库的路径;

         /media:便携式设备挂载点,cdrom, floppy等;

         /mnt:其它文件系统的临时挂载点;

         /opt:附加应用程序的安装位置;可选路径;

         /srv:当前主机为服务提供的数据;

         /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限;

         /usr:usr Hierarchy,全局共享的只读数据路径;

              bin, sbin

              lib, lib64

              include:C程序头文件;

              share:命令手册页和自带文档等架构特有的文件的存储位置

              local:另一个层级目录;

              X11R6:X-Window程序的安装位置

              src:程序源码文件的存储位置

         /usr/local:Local hierarchy,让系统管理员安装本地应用程序;也通常用于安装第三方程序;

         /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

         /proc:基于内存的虚拟文件系统,用于为内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward, 虚拟为net/ipv4/ip_forward, 存储于/proc/sys/, 因此其完整路径为/proc/sys/net/ipv4/ip_forward;

         /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径;其主要作用在于为管理Linux设备提供一种统一模型的的接口;

Linux目录命令规定:

严格区分字符大小写:file1, File1, FILE1

目录也是文件,在同一路径下,两个文件不能同名;

支持使用除/以外的任意字符;

最长不能超过255个字符;

以上是关于Linux 基础知识的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段01

20155307刘浩《网络对抗》逆向及Bof基础

[linux][c/c++]代码片段02

20155311高梓云《网络对抗》逆向及Bof基础

20145301赵嘉鑫《网络对抗》逆向及Bof基础

android小知识点代码片段