1 Unix基础知识

news/2024/11/29 22:44:57/

1.1 登录

1.1 登录名

        登录Unix系统时,要先输入登录名,然后再输入口令。系统再其口令文件(/etc/password文件)查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成:登录名,加密口令,数字用户ID(224),注释字段,起始目录(/home/username),以及shell程序(/bin/ksh)。

1.1.1 shell

        shell是一个命令行解析器,它用于读取用户输入,然后执行命令,用户通常用终端,有时则通过文件(shell脚本)向shell进行输入。常用的shell有:

(1)Bourne shell, /bin/sh

(2)C shell, /bin/csh

(3)KornShell, /bin/ksh

1.2 文件和目录

1.2.1 文件系统

        Unix文件系统是目录和文件的一种层次安排,目录的起点称为根(root),其名字是一个字符/。目录(directory)是一个包含目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性是:文件类型,文件长度,文件所有这,文件的许可权。

1.2.2 文件名

        目录中的各个名字成为文件名(filename)。文件名不能出现斜线(/)和空操作符(null)。斜线分隔构成路径名,空操作符则终止一个路径名。

        当创建一个新目录时,自动创建了2个文件:.和..  。点表示引用当前目录,点点表示引用父目录,在最高层次的根目录中,点和点点相同。

1.2.3 路径名

        0个或多个以斜线分隔的文件名序列构成路径名(pathname),以斜线开头的路径名称称为绝对路径名(absolute pathname),否则称为相对路径名(relative pathname)。

1.2.4 工作目录

        每个进程都有一个工作目录(working directory)。所有相对路径都从工作目录开始解释。进程可以有chdir更改其工作目录。

1.2.5 起始目录

        登录时,工作目录设置为起始目录(home directory),该起始目录从口令文件的登录项中获取。

1.3 输入和输出

1.3.1 文件描述符

        文件描述符是一个小的非负整数,内核用以标识一个特定进程正在访存的文件。当内核打开一个现存文件或创建一个新文件时,它就返回一个文件描述符。

1.3.2 标准输入、标准输出和标准出错

        每当运行一个新程序时,所有的shell都为它打开三个文件描述符:标准输入、标准输出及标准出错。如果像简单ls那样没有做什么特殊处理,则这三个描述符都连向终端。大多数shell都提供一种方法,使任何一个或所有这三个描述符都能重新定向到某个文件,如:

ls > file.list 

执行ls命令,其标准输出重新定向到file.list文件中 

1.3.3 不用缓存的I/O

        函数open、read、write、lseek以及close提供了不用缓存的I / O。这些函数都用文件描述符 进行工作。

1.3.4 标准I/O

        标准I/O函数提供一种对不用缓存的I/O函数的带缓存的界面。使用标准I/ O可无需担心如何 选取最佳的缓存长度。另一个使用标准 I/O函数的优点与处 理输入行有关。例如,fgets函数读一完整的行,而另一方面,read函数读指定字节数。我们最熟悉的标准I/O函数是printf。

1.4 程序与进程

1.4.1 程序

        程序(program)是存放在磁盘文件中的可执行文件。使用 6个exec函数中的一个由内核将 程序读入存储器,并使其执行。

1.4.2 进程与进程ID

        程序的执行实例被称为进程(process)。每个进程都一定有一个唯一的数字标识符,称为进程 ID(process ID)。进程ID总是 一非负整数。

1.4.3 进程控制

        有三个用于进程控制的主要函数: fork、exec和waitpid(exec函数有六种变体,但经常把 它们统称为exec函数)。

1.5 出错管理

        当函数出错时,往常返回一个负值,而且整型变量errno通常设置为具有特定信息的一个值。

        C标准定义了两个函数,它们帮助打印出错信息。

//此函数将errnum(它通常就是errno值) 映射为一个出错信息字符串,并且返回此字符串的指针。
#include <string.h>
char *strerror(int errnum) ;//perror函数在标准出错上产生一条出错消息(基于errno的当前值),然后返回。
#include <stdio.h>
//它首先输出由msg指向的字符串,然后是一个冒号,一个空格,然后是对应于 errno值的出
//错信息,然后是一个新行符。
void perror(const char * msg)  

两个出错函数的使用方法:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>int main(int argc, char* argv)
{fprintf(stderr, "EACESS:%s\n", strerror(EACESS));errno = ENOENT;perror(argv[0]);exit(0);
}

如果此程序经编译,结果送入文件a.out,则有:

$ a.out

EACCES: Permission denied

a.out: No such file or directory

1.6 用户标识

1.6.1 用户ID

        口令文件登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户。系统管理员 在确定一个用户的登录名的同时,确定其用户ID。用户不能更改其用户ID。通常每个用户有一个唯一的用户ID。

        用户ID为0的用户为根( root )或超级用户( superuser )。在口令文件中,通常有一个登录项, 其登录名为root,我们称这种用户的特权为超级用户特权。如果一个 进程具有超级用户特权,则大多数文件许可权检查都不再进行。某些操作系统功能只限于向超级用户提供,超级用户对系统有自由的支配权。

1.6.2 组ID

        口令文件登录项也包括用户的组ID(group ID),它也是一个数值。组ID也是由系统管理员在确定用户登录名时分配的。一般来说,在口令文件中有多个记录项具有相同的组ID。在 U N I X下,组被用于将若干用户集合到课题或部门中去。这种机制允许同组的各个成员之间共享资源(例如文件)。可以设置文件的许可权使组内所有成员都能存取该文件,而组外用户则不能。

        组文件将组名映射为数字组ID,它通常是/etc/group。

        系统中每个文件的目录项包含该文件所有者的用户ID和组ID。在目录项中存放这两个值只需4个字节(假定每个都以双字节的整型值存放)。如果使用8字节的登录名和8字节的组名,则需较多的磁盘空间。但是对于用户而言,使用名字比使用数值方便,所以口令文件包含了登录名和用户ID之间的映射关系,而组文件则包含了组名和组ID之间的映射关系。

1.7 信号

        信息是通知进程已发生某种条件的一种技术。例如,若某一进程执行除法操作,其除数为 0,则将名为SIGFPE的信号发送给该进程。进程如何处理信号有三种选择:

(1) 忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种处理方式。

(2) 按系统默认方式处理。对于0除,系统默认方式是终止该进程。

(3) 提供一个函数,信号发生时则调用该函数。使用这种方式,我们将能知道什么时候产生了信号,并按所希望的方式处理它。

        很多条件会产生信号。有两种键盘方式,分别称为中断键 (interrupt key,通常是Delete键或Ctrl - C)和退出键(quit key,通常是Ctrl - \ ),它们被用于中断当前运行进程。另一种产生信号的方法是调用名为kill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。这样做也有些限制:当向一个进程发送信号时,我们必需是该进程的所有者。


http://www.ppmy.cn/news/55222.html

相关文章

B端产品如何搭建用户帮助体系

用户帮助体系可以提升用户的使用体验&#xff0c;引导用户正确的使用产品&#xff0c;并且体验产品的各个功能&#xff0c;B端产品因为其特殊的业务属性和复杂度&#xff0c;通常其学习成本不低。这些成本不仅仅体现在对于复杂业务概念及流程的认知方面&#xff0c;同时体现在整…

STM32物联网实战开发(1)——全新的程序框架

现在STM32公司主推的是HAL库的开发&#xff0c;标准库已经不再更新。通过STM32cubeMX的图形界面生成代码非常的方便。 一、程序框架的构想 1、STM32cubeMX 生成的代码与添加的应用代码分离&#xff1b; 2、利用 STM32cubeMX 重新生成代码&#xff0c;不影响应用代码&#xf…

03 【Sass语法介绍-嵌套】

1.前言 在企业的实际项目开发中&#xff0c;Sass 的嵌套可以说是非常非常有用的&#xff0c;它可以让你的 CSS 代码易于管理和维护&#xff0c;看起来也比较清晰&#xff0c;这也是 Sass 中很基础的一个知识点&#xff0c;首先掌握这个至关重要&#xff01;在此章节我们将学习…

tensorflow中Keras ---图像预处理----tf.keras.preprocessing.image.ImageDataGenerator 类

1.源代码&#xff1a; tf.keras.preprocessing.image.ImageDataGenerator(featurewise_centerFalse,samplewise_centerFalse,featurewise_std_normalizationFalse,samplewise_std_normalizationFalse,zca_whiteningFalse,zca_epsilon1e-06,rotation_range0,width_shift_range0…

GT928 TP驱动跟读及虚拟按键上报解析

目前公司TP常用一套代码。MTK 平台使用.ko形式加载&#xff0c;所以跟读一下加深理解。 static struct i2c_driver tpd_i2c_driver {.driver {.of_match_table of_match_ptr(gt9xx_dt_match),},.probe tpd_i2c_probe,.remove tpd_i2c_remove,.detect tpd_i2c_detect,.dr…

leetcode-328 奇偶链表

题目如下&#xff1a; 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0c;…

聚观早报|特斯拉向第三方电动车开放充电桩;Epic 诉苹果垄断败诉

今日要闻&#xff1a;特斯拉向第三方电动车开放充电桩&#xff1b;我国全面实现不动产统一登记&#xff1b;Epic 诉苹果垄断败诉&#xff1b;腾讯大股东Naspers再减持近79万股&#xff1b;星巴克中国门店将超过万家 特斯拉向第三方电动车开放充电桩 近日&#xff0c;特斯拉官方…

OpenJudge - 39:多项式输出

目录 一、题目描述 二、代码实现 一、题目描述 一元 n 次多项式可用如下的表达式表示&#xff1a; ​ 其中&#xff0c;​ 称为 i 次项&#xff0c;​ 称为 i 次项的系数。给出一个一元多项式各项的次数和系数&#xff0c;请按照如下规定的格式要求输出该多项式&#xff…