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、   库函数(全部建立在系统给的接口上)、  直接调用。(如下图所示)。
图1

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)。
file
    文件名:在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是将进程中的数据输出到内核的缓冲
    区中,然后在满足一定的条件下输出到终端设备上(这个条件可以是遇到换行符、缓冲区满、直接输出(和不带缓冲区行为基本一样))。
file
    在之后的内容中,我们将详细介绍缓冲区对读写文件的影响。

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);
    }
    其中打印内容如下图所示
file
当然了,错误也是分种类的。可以将错误分为致命性错误和非致命性的错误。对于非致命性的错误、我们可以妥善的处理,对于致命性错误、也许只能打印出一条内容之后就退出程序了吧。

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函数似的。
    库函数:库函数是在系统调用之上封装用于提供各种功能的一个库。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容