登陆 

     1.登录名 
          系统在其 口令文件(通常是/etc/passwd文件) 中查看用户名,口令文件中包含了有关用户的信息。 
     2.shell 
          shell是一个命令解析器,读取用户输入的内容,然后执行命令。
 
文件和目录
     1.文件系统 
          UNIX文件系统是 目录 和 文件 的一种层次结构。 所有 的起点成为(root)目录, 根目录的名称是一个” / ” 
          目录 是一个包含目录项的文件。 可以认为每个目录项都包含一个文件名,同时还包含文件属性的信息(stat和fstat函数返回包含所有文件属性的一个结构)。 
     2.文件名 
          目录中的各个名字称为文件名(filename)。 创建目录时会自动创建两个文件名: . 和 .. 分别指向当前目录和父目录。 
     3.路径名 
          ” / ” 开头称为绝对路径名, 否则都成为相对路径名。 
          相对路径名指向相对于当前目录的文件。
 
    实例
           列出一个目录中所有文件的名字。
               
           #include "apue.h"
           #include <dirent.h>
 
           int main(int argc, char *argv[])
           {
                  DIR *dp;
                  struct dirent *dirp;
 
                  if (argc != 2)
                      err_quit("usage: ls directory_name");
 
                  if ((dp = opendir(argv[1])) == NULL)
                      err_sys("can't open %s", argv[1]);
 
                  while ((dirp = readdir(dp)) != NULL)
                       printf("%s\n", dirp -> d_name);
 
                  closedir(dp);
                  exit(0);
              }
        • 包含 系统头文件 dirent.h 以便使用 opendir 和 readdir 的函数原型。
        • opendir 函数返回 指向 DIR 结构的指针。 再将指针传给readdir函数。readdir函数返回一个指向dirent结构的指针。
 
     4.工作目录
          每个进程都有一个工作目录(working directory),或成为当前工作目录。所有相对路径名都从工作目录开始解释。
          进程可以用 chdir 函数更改其工作目录。
 
     5.起始目录
           登陆时, 工作目录设置为起始目录(home directory) , 起始目录 从 口令文件 中 相应用户的 登陆项 中取得。
 
输入和输出
     
     1. 文件描述符
          文件描述符(file descripyor) 通常是一个 小的 非负整数 。
          内核用以标识特定进程正在访问的文件。
          当内核 打开 一个现有文件 或者 创建 一个新文件时, 都返回一个文件描述符。
          在  或  文件的时候,可以使用文件描述符。
 
     2. 标准输入,标准输出或标准错误
          每当运行一个新程序时,所有的 shell 都为其打开 3个 文件描述符。标准输入(standard input),标准输出(standard output),标准错误(standard error)。
          大多数 shell 都提供一种方法,使其中任何一个或所有描述符都能 重定向 到某个文件,例如:
               ls > file.list
               执行 ls 命令, 其 标准输出 重定向 到名为file.list 的文件中。
 
     3. 不带缓冲的 I/O
          函数 open, read, write, lseek, close 提供了不带缓冲的I/O。 都使用文件描述符。
 
               实例
                    #include "apue.h"
                    
                    #define BUFFSIZE 4096
               
                    int main(void)
                    {
                         int n;
                         char buf[BUFFSIZE];
          
                         while (( n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
                              if( write(STOUT_FILENO, buf, n) != n)
                                   err_sys("write error);
 
                         if(n<0)
                              err_sys("read error");
 
                         exit(0);
                    }
 
      • 头文件<unistd.h> 包含 STDIN_FILENO 和 STDOUT_FILENO 常量。
      • read函数返回读取的字节数,当达到输入文件的尾端时,read返回0,如果发生错误返回-1。
 
      4. 标准I/O
           标准I/O函数 为不带缓冲的I/O函数提供了一个带缓冲的接口。使用标准I/O函数不用考虑如何选最佳的缓冲区大小。
 
                     实例
                          使用标准输入和输出
                         
                      #include "apue.h"
                     
                     int main(void)
                     {
                         int c;
                         
                         while (( c = getc(stdin)) != EOF)
                              if( putc(c,stdout) == EOF)
                                   err_sys("output error");
 
                         if (ferror(stdin))
                              err_sys("input error");
 
                         exit(0); 
                     }     
                         函数getc一次读取一个字符,然后putc将此字符写到标准输出。
 
 
程序和进程
     1. 程序
          程序是一个存储在磁盘的可执行文件。 内核 使用 exec函数 将程序读入内存并执行。
     2. 进程和进程ID
          程序执行的实例被称之为进程(process)。
          
          UNIX系统确保每个进程都有独立的 进程ID(非负整数)
 
          getpid() 可以获取进程ID。
 
     3. 进程控制
          3个主要的进程控制函数 : fork , exec , waitpid 。 (exec函数有7个变体, 统称为exec函数)
 
     4. 线程和线程ID
          一个进程中的所有线程共享同一地址空间 , 文件描述符 , 栈 , 进程相关属性。
 
          
出错处理
     <errno.h> 中定义了 errno 以及可以赋予它的各种常量。
     这些常量都以字符E开头。
 
     
     strerror( int errnum ) 函数将 errnum 映射为一个出错消息字符串,返回此字符串的指针。
 
     perror( const char *msg ) 函数 在标准错误上产生错误信息。
 
 
用户标识
     1. 用户ID
          口令文件中, 每个用户有一个唯一的用户ID, root用户ID 为 0。
     2. 组ID
          口令文件中, 组文件 将 组名 映射为 数值的组ID。 组文件同常是 /etc/group
          口令文件 包含了 登录名和用户ID之间的映射关系, 组文件包含了组名和组ID之间的映射关系。
          getuid 和 getgid 分别返回 用户ID 和 组ID。
     3. 附属组ID
          一个用户属于最多16个其他的组。
          登陆时, 读文件/etc/group 寻找列有该用户作为其他成员的前16个记录就可以得到该用户的附属组ID。
 
 
信号(signal)
     信号用于通知进程发生了某种情况。
     
     进程有3种处理信号的方式:
          1.忽略信号
          2.按系统默认方式处理(比如系统自动终止程序)
          3.提供一个函数,信号发生时调用此函数。如: signal( ) 函数
 
 
时间值
     1. 日历时间
          指 自 1970年1月1日 00:00:00 这个时间开始缩经过的 秒数 累计值。
          系统基本数据类型 time_t 用于保存这种时间值。
     2. 进程时间
          CPU时间  用来度量进程使用的CPU资源。
          系统基本数据类型 clock_t 用于保存这种时间值。
 
系统调用和库函数
     概括的来说,库函数就是对系统调用的进一步封装。

UNIX 基础知识的更多相关文章

  1. UNIX环境高级编程--第一章 UNIX基础知识

    第一章 UNIX基础知识 1.2 UNIX体系结构   从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.我们将这种软件称为内核(kernel),因为 它相对较小,且 ...

  2. 《UNIX环境高级编程》(APUE) 笔记第一章 - UNIX基础知识

    1 - UNIX基础知识 Github 地址 1. 操作系统 可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境.通常将这种软件称为 内核 (kernel) .( Linux 是 GN ...

  3. 《UNIX环境高级编程》笔记——1.UNIX基础知识

    这一章节侧重一些基本概念和书中用到的一些名词. 一.引言 所有的操作都提供服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储区以及获得当前时间等. 二.UNIX体系结构 其实linux常见 ...

  4. 第一章:UNIX基础知识

    本章内容主要是为了学习UNIX的基本知识和一些最基本的系统函数. 学习的关键就是跟随者书本敲代码.本节遇到的第一个问题就死本书的apue.h这个文件:一开始没有注意这个文件,盲目的去百度,一番百度之后 ...

  5. UNIX基础知识之程序和进程

    一.程序 程序(program)是存放在磁盘上.处于某个目录中的一个可执行文件.使用6个exec函数中的一个由内核将程序读入存储器,并使其执行. 二.进程和进程ID 程序的执行实例被称为进程(proc ...

  6. UNIX环境高级编程 第1章 UNIX基础知识

    所有操作系统都为运行在它之上的程序提供各种服务,典型的服务包括:执行新程序.打开文件.读写文件.分配存储空间.提供时间等. UNIX体系结构 严格来说,操作系统是一种软件,它控制计算机硬件资源,提供程 ...

  7. UNIX,基础知识,文件IO,文件和目录

    2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...

  8. UNIX基础知识之时间值

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 长期以来,UNIX系统一直使用两种不同的时间值 ...

  9. UNIX基础知识之信号

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 信号(signal)是通知进程已发生某种情况的 ...

  10. UNIX基础知识之用户标识

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

随机推荐

  1. pt-table-checksum校验mysql主从数据一致性

    主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...

  2. LeetCode——Longest Palindromic Subsequence

    1. Question Given a string s, find the longest palindromic subsequence's length in s. You may assume ...

  3. JDK 中的监控与故障处理工具-01

    当给系统定位问题的时候, 我们经常需要了解并分析 JVM 的运行时状态 . 那应该从哪些方面入手呢? 答案就是从数据入手 . 这里的数据包括: GC日志,异常堆栈, 线程快照(threaddump) ...

  4. jQuery loop over JSON字符串 – $.each实例

    先来一段简单的javascript对象的遍历: var json = [ {"id":"1","tagName":"apple&q ...

  5. [小问题笔记(十一)] SQL SERVER 将可空字段改为 NOT NULL不可为空的两个方法

    一个字段里面有一些数据是NULL是很讨厌的,写查询麻烦不说,最重要的is null  或者is not null都是不能命中索引的,会导致全表扫描啊. 所以对于一个已经存在NULL的字段,有时间的话最 ...

  6. POJ 1985 Cow Marathon(树的直径模板)

    http://poj.org/problem?id=1985 题意:给出树,求最远距离. 题意: 树的直径. 树的直径是指树的最长简单路. 求法: 两遍BFS :先任选一个起点BFS找到最长路的终点, ...

  7. Linux 本地调试Hadoop

    将Hadoop部署后,可以使用java api进行访问,但是并不能像安装完mysql后用python自带的mysql api连接那么简单. Hadoop/share目录下有Hadoop所有的jar包, ...

  8. 查看linux 之mysql 是否安装的几种方法

    转自:https://jingyan.baidu.com/album/86112f1378bf282737978730.html?picindex=2 linux下怎么启动mysql服务 https: ...

  9. ”由于没有远程桌面授权服务器可以提供许可证,远程会话被中断“的解决方案

    由于windows server 2012 R2 Datacenter 安装了 远程桌面角色,但是这个角色是120天免费的,需要购买授权的. 解决方案: 删除这个角色,就可以正常进行远程桌面连接了.但 ...

  10. Oracle 冷备份详解【实战案例】

    Oracle 冷备份详解 --准备工作 select * from v$database; select file_name from dba_data_files; create tablespac ...