当前位置: 首页 > news >正文

1 Unix基础知识

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的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。这样做也有些限制:当向一个进程发送信号时,我们必需是该进程的所有者。

相关文章:

1 Unix基础知识

1.1 登录 1.1 登录名 登录Unix系统时&#xff0c;要先输入登录名&#xff0c;然后再输入口令。系统再其口令文件&#xff08;/etc/password文件&#xff09;查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成&#xff1a;登录名&#xff0c;加密口令&#xff0c;数字用…...

【翻译一下官方文档】认识uniCloud云数据库(基础篇)

我将用图文的形式&#xff0c;把市面上优质的课程加以自己的理解&#xff0c;详细的把&#xff1a;创建一个uniCloud的应用&#xff0c;其中的每一步记录出来&#xff0c;方便大家写项目中&#xff0c;做到哪一步不会了&#xff0c;可以轻松翻看文章进行查阅。&#xff08;此文…...

全局解释器锁 GIL

问题 你已经听说过全局解释器锁 GIL&#xff0c;担心它会影响到多线程程序的执行性能。 解决方案 尽管 Python 完全支持多线程编程&#xff0c;但是解释器的 C 语言实现部分在完全并行执行时并不是线程安全的。 实际上&#xff0c;解释器被一个全局解释器锁保护着&#xff…...

github 下载文件加速 https://moeyy.cn/gh-proxy/

GitHub文件链接带不带协议头都可以&#xff0c;支持release、archive以及文件&#xff0c;右键复制出来的链接都是符合标准的。 注意&#xff0c;不支持项目文件夹&#xff0c;请使用Git。 分支源码&#xff1a;https://github.moeyy.xyz/https://github.com/moeyy/project/arc…...

第五章 资源包使用

游戏开发中会大量使用模型文件&#xff0c;图片文件&#xff0c;这些资源都需要事先导入到项目中去。导入的方式非常简单&#xff0c;将这些文件直接复制到项目中的Assets目录下即可。Unity 会在文件添加到 Assets 文件夹时自动检测到这些文件并同步显示在Project视图中。 Uni…...

Linux od命令

Linux od命令用于输出文件内容。 od指令会读取所给予的文件的内容&#xff0c;并将其内容以八进制字码呈现出来。 语法 od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符…...

【15】SCI易中期刊推荐——电子电气 | 仪器仪表(中科院4区)

💖💖>>>加勒比海带<<<💖💖 🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉 | 深度学习Tr…...

基于PaddleServing的串联部署 ocr 识别模型

要点&#xff1a; 使用paddleserving服务 1 首先需要安装PaddleServing部署相关的环境 PaddleServing是PaddlePaddle推出的一种高性能、易扩展、高可用的机器学习服务框架。PaddleOCR中使用PaddleServing主要是为了将训练好的OCR模型部署到线上环境&#xff0c;提供API服务&a…...

java OutputStream学习

1.概要 OutputStream位于java.io&#xff0c;它在Java 实现的IO类库中是一个很基础的抽象类。在层级上&#xff0c;是所有字节输出流类的父类&#xff0c;在功能上&#xff0c;表示接受字节并把它们输出。 2.实现类及子类简介 OutputStream有诸多子类&#xff1a; ByteAr…...

java 上传文件生成二进制流文件

最近在项目中遇到一个问题&#xff1a;需要将上传的文件生成输出流&#xff0c;然后将输出流转换为输入流上传到oss。 -------------------------------------------导出代码实现---------------------------------------------------------- ByteArrayOutputStream baos nu…...

质量小议22 -- 多少分合适

60分万岁~&#xff1f;&#xff1f;&#xff1f;&#xff01;&#xff01;&#xff01; 如果用分数评价质量&#xff0c;多少分合适&#xff1f;60&#xff0c;70&#xff0c;80...还是100&#xff0c;或者 120 对于质量的提升&#xff0c;是雪中送炭&#xff0c;还是锦上添…...

变频器参数设定说明

使用默贝克MT110-0R4-S2B实现下面的练习题&#xff1a; 1、先恢复出厂设置&#xff0c;再输入电机参数&#xff0c;选择静态调谐 2、两种运行模式&#xff1a;多段速&#xff08;8段&#xff09;和简易PLC&#xff08;4段&#xff09; 3、面板启停&#xff0c;运行模式通过外部…...

实用调试技巧

目录&#xff1a; 1.什么是bug&#xff1f; 2.调试是什么&#xff1f;有多重要&#xff1f; 3.debug和release的介绍 4.Windows环境调试介绍 5.一些调试的实例 6.如何写出好(易于调试)的代码 7.编程常见的错误 1.什么是bug&#xff1f; bug--->臭虫、虫子。 为什么含…...

谁是液冷行业真龙头?疯狂的液冷技术!

“人工智能领域AIGC”、“ChatGPT”、“数据特区”、“东数西算”、“数据中心”&#xff0c;可以说是2023年最热的概念&#xff0c;算力提升的背后&#xff0c;处理器的功耗越来越高&#xff0c;想发挥出处理器的最高性能&#xff0c;需要更高的散热效率。 算力井喷之下&…...

自动化运维工具之Ansible

目录 一、自动化运维 1、通过xshell自动化运维 2、Ansible简介 3、Ansible特点及优势 4、Ansible核心程序 5、Ansible工作原理及流程 6、部署Ansible自动化运维工具 7、Ansible常用模块 (1) ansible命令行模块 (2) command模块 (3) shell模块 (4) cron模块 (5) us…...

霍兰德人格分析雷达图

雷达图 Radar Chart 雷达图是多特性直观展示的重要方式 问题分析 霍兰德认为&#xff1a;人格兴趣与职业之间应有一种内在的对应关系 人格分类&#xff1a;研究型、艺术型、社会型、企业型、传统型、现实性 职业&#xff1a;工程师、实验员、艺术家、推销员、记事员、社会工…...

《Odoo开发者模式必知必会》—— 缘起

Odoo作为业界优秀的开源商务软件&#xff0c;在全球范围内拥有广泛的使用者。在领英国际&#xff0c;可以搜索到全球很多国家都有大量odoo人才需求的招聘信息。在国内&#xff0c;虽然已经有为数不少的企业&#xff0c;他们或者已经使用odoo&#xff0c;或者正在了解odoo&#…...

Java8的Options介绍

Java8引入了一个名为 Options 的新类&#xff0c;它是一个容器&#xff0c;可以保存单个值或根本不保存任何值。Optional目的是提供一种更优雅的方式来处理 null 值&#xff0c;这通常会导致NullPointerException。在这篇博客文章中&#xff0c;我们将探索如何在 Java8中使用 O…...

SpringBoot 多数据源及事务解决方案

1. 背景 一个主库和N个应用库的数据源&#xff0c;并且会同时操作主库和应用库的数据&#xff0c;需要解决以下两个问题&#xff1a; 如何动态管理多个数据源以及切换&#xff1f; 如何保证多数据源场景下的数据一致性(事务)&#xff1f; 本文主要探讨这两个问题的解决方案…...

tcpdump使用教程

一、概述 tcpdump是一个功能强大的&#xff0c;用于抓取网络数据包的命令行工具&#xff0c;与带界面的Wireshark一样&#xff0c;基于libpcap库构建。这篇文章主要介绍tcpdump的使用。关于如何使用tcpdump的资料中&#xff0c;最有用的就是tcpdump的两个手册。 tcpdump使用手…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...