乐趣区

关于c:Linux学习Linux基础简介

这一节,咱们将简略介绍一下 Linux。

1:Linux 同 windows 是一样的,都是操作系统的一种,都给咱们提供一个平台去开发或者执行某些程序。能够说 Linux 零碎也是软件的一种,不要将他想的太过于神秘。(
注:通常咱们所说的什么零碎都是内核 + 软件形成的)

2:接下来咱们简略介绍一下 Linux 的倒退历史

    
    Linux 是一套自在加凋谢源代码的类 Unix 操作系统,诞生于 1991 年 10 月 5 日(第一次正式向外颁布),由芬兰学生 Linus Torvalds 和起初陆续退出的泛滥爱好者共同开发实现。Linux 是一个基于 POSIX 和 Unix 的多用户、多任务、反对多线程和多 CPU 的操作系统。它能运行次要的 Unix 工具软件、应用程序和网络协议,可反对 32 位和 64 位硬件。Linux 继承了 Unix 以网络为外围的设计思维,是一个性能稳固的多用户网络操作系统。Linux 存在着许多不同的版本,但它们都应用了 Linux 内核。Linux 可装置在各种计算机硬件设施中,比方:手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。如果想理解具体的信息请本人查找一下

3:咱们在这里说一下 Linux 的系统结构,以便于从大方向理解 Linux 的零碎。

    
    a:之前说了,Linux 零碎能够作为一种软件,提供程序运行的化境,咱们将之成为内核。学过单片机的人都是到,咱们最底层是有很简略的各种小程序形成,例如咱们用汇编语言写一
    些小的程序去管制硬件的某些行为(也就是高下点平,这里不做过多介绍)。而咱们的 Linux 零碎就是管制咱们硬件所有的资源,对这些资源进行批准的调配性能,咱们的软件是可能
    通过一些调用去应用这些资源。b:在 Linux 中,咱们写一些函数须要调用内核来实现,这里咱们将调用内核实现这中操作叫做零碎调用。三种形式进行零碎调用:shell、库函数(全副建设在零碎给的接口上)、间接调用。(如下图所示)。

4:在这里咱们介绍一下对于登录 Linux 进行的操作。

    
    用户在登录的时候须要先后输出登录名和登录的用户明码,而这个用户名和用户明码通常是存在 /etc/passwd 文件下,这个文件每一行都是一个用户,其中登录项由 7 个冒号分隔开来。他们别离是登录名、加密口令、用户数值 ID、用户数值组 ID、正文字段、其实目录和用户应用的 SHELL 程序。后面咱们说 shell 能够用来和 Linux 进行交互,因而咱们能够配置本人的 shell
    程序,这样更改不便咱们的应用。通常默认的 shell 程序是 bash,我喜爱用 zsh 程序,无关 zsh 的配置请参考如下连贯 

https://blog.csdn.net/towedjfiowaj/article/details/112691257

5:接下来咱们简略介绍一下文件和目录

    
    在 Linux 中或者 unix 中能够成为所有皆文件,因而理解 Linux 中的文件和目录是非常有必要的。在 windows 中,咱们能够将磁盘划分为 c 盘、d 盘等。然而在 Linux 中、咱们只有一个磁盘,而这个磁盘是从 /(根)目录开始的,其余的都是以各种形式进行挂载。咱们这里说介绍文件和目录,其实每个目录能够了解为蕴含多个目录项的文件,如果不信的话能够应用 vim dirname 去关上一个目录,你就发下外面存储了许多目录项 / 文件。在 Linux 中文件中还蕴含文件的属性信息,文件属性有文件大小、文件类型、文件所有者、文件权限、文件的批改工夫等。这些属性咱们 stat 或者 fstat 进行获取。在这里我阐明一下文件类型(在执行 ls - l 时候如下图 1 就能够辨别文件各种信息了,其中文件类型前面九个字符别离是所有者:所属组:其他人对该文件的读写和执行权限):文件类型:一般文件(-)、目录(d)、管道(p)、链接文件(l)字符设施文件(c)、块设施文件(b)、套接字(s)。

    
    文件名:在 Linux 呈现文件名的字符除了 / 和 null,前者用于宰割目录、后者用于完结一个目录。当然在失常的状况下,尽量只应用印刷字符集,免得引起不必要的麻烦。同时咱们在创立目录的时候,会主动创立两个. 和.. 目录,这两个目录别离代表当前目录和上一级目录。路径名:门路分为绝对路径和相对路径。绝对路径是从根目录开始的,例子:/etc/passwd。绝对目录是从当前目录开始的目录./../passwd。在这里介绍一下如何失去路径名:如上面一个小程序就是读取指定目录下的所有内容。#include <dirent.h>
    #inlcude <stdio.h>
    
    int main(int argc, char* argv[])
    {
             DIR  *dp;
             struct dirent  *dirp;
             
             if(argc != 2)
             {return 0;}
             
             if((dp = opendir(argv[1])) == NULL)
             {return 0;}
             while((dirp = readdir(dp)) != NULL)
             {printf("%s\n", dirp->d_name);
             }
    }
    对于这个程序只有两点须要了解两个其中两个函数就能够。工作目录:每一个执行的过程都会一个工作目录。所说的相对路径都是绝对于当前工作目录而定的。起始目录:也就是当咱们登录到零碎是坐在的目录。

5:接下来介绍一下 Linux 中无关的输出和输入。

    
    文件描述符,在 Linux 中当咱们关上一个文件的时候,都会返回一个非负的整数,咱们读写文件都会用到这个非负的整数(注:文件描述符是无限资源)。规范输出和输入:通常状况下,咱们在启动一个程序的时候会主动关上三个文件描述符,这三个文件描述符别离是规范输出(从终端读取数据)、规范输入(能够将一些信息显示到终端上)、规范谬误(将错误信息显示到终端上)。带缓冲去 IO 和不带缓冲区 IO:带缓冲区 IO 和不带缓冲区 IO 能够简略看下图。不带缓冲区的 IO 是间接将过程中的数据输入到终端设备上。带缓冲区的 IO 是将过程中的数据输入到内核的缓冲
    区中,而后在满足肯定的条件下输入到终端设备上(这个条件能够是遇到换行符、缓冲区满、间接输入(和不带缓冲区行为根本一样))。

    
    在之后的内容中,咱们将具体介绍缓冲区对读写文件的影响。

6:程序和过程:

    
    程序就是存储在磁盘上,处于某个目录中的可执行文件。过程就是执行中的程序。

7:出错解决。

    
    当 Linux 中一些函数出错时,经常会返回一个负值,而且将整形变量 error 复制为一个信息,咱们能够应用 perror/strerror 函数将一些错误信息返回 / 打印进去。当然,咱们绝对程序出错进行一些解决的时候,咱们须要蕴含 error.h 头文件。实例:#include <stdio.h>
    #include <errno.h>
    #include <string.h>
    
    int main()
    {fprintf(stderr, "EACCES  %s\n", strerror(EIO));
            
            errno = ENOENT;
            perror(NULL);
    }
    其中打印内容如下图所示


当然了,谬误也是分品种的。能够将谬误分为致命性谬误和非致命性的谬误。对于非致命性的谬误、咱们能够妥善的解决,对于致命性谬误、兴许只能打印出一条内容之后就退出程序了吧。

8:用户标识

    
    后面所说的组 ID 和用户 ID 就是用户示意,利用这两个 ID 将用户进行划分。因为 Linux 能够说是所有接文件,因而对文件的操作是至关重要的,咱们能够利用组 ID 和用户 ID 还有其他人别离赋予
    对应的文件权限,这样咱们就能防止一些文件被误操作。用户 ID:口令文件中标识着用户 ID 的数值,用来辨别各个不同的登录用户。其中有一个非凡的用户,是 root 用户。root 用户有计算机各种权限,并且某些操作系统的性能只有 root 用户有,例如
    更改用户 ID/ 组 ID。组 ID:是为了不便工作治理的,例如一个组就能够分成一个组 ID,那么在肯定水平上、这个组中的成员领有更多的权限。同时为了不便看 ls - l 命令将 ID 映射成用户名,因而、ls- l 命令显示的
    是名字。实例:程序取得用户 ID 和组 ID。#include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    
    int main()
    {printf("uid = %d, gid = %d", getuid(), getgid());
                
                return 0;
    }
    附加组 ID:能够查看 /etc/group 文件寻找附加组 ID,其意思就是用户不仅能够属于一个组,还能够属于其余的组。

9:信号

    
    信号是告诉过程已产生某种状况的一种技术。例如,某一个程序将 0 作为除数,那么将会收到 SIGFPE 信号。同时、对于接管到的信号,过程有三种解决形式:疏忽该信号、依照零碎默认的形式解决(能够查看(man 7 signal)手册)、提供一个函数进行解决。对于信号详情会在后续的章节中提出。

10:工夫:

    
    对于 Linux 中各种工夫对于咱们开发程序是非常重要的。例如,咱们须要依据以后执行的工夫设置随机种子(srand((unsigned int)time(0))。日历工夫:所谓的日历工夫就是 1970 年 1 月 1 日零点整开始到当初精力的秒数,这个工夫能够用来记录文件最近一次改变的记录。理解 makefile 的会晓得 makefile 会依据
    文件最初批改的工夫进行编译。通常这类工夫都是 time_t 类型存储的
    过程工夫:成为 CPU 工夫,用以度量过程应用中央处理器的资源。这类工夫个别用 clock_t 类型存储。一个过程有三种工夫:时钟工夫(过程运行工夫的总量),用户 cpu 工夫(执行用户指令所用的工夫),零碎 cpu 工夫(在内核中执行工作所破费的工夫)。

11:零碎调用和库函数

        
    在最开始就介绍了 Linux 系统结构,其中就有几种和内核交互的形式。如 shell、库函数。还介绍了零碎调用的概念。零碎调用:我的了解就是 Linux 内核提供出各种性能的入口,咱们称为零碎调用,就像 open 函数似的。库函数:库函数是在零碎调用之上封装用于提供各种性能的一个库。

本文由博客群发一文多发等经营工具平台 OpenWrite 公布

退出移动版