Linux系统编程::马鞍山大学期末考试知识点总结

28分填空题
常见shell命令
最重要的几个系统调用比如fork返回值_文件-进程 网络编程 套接字
填图题14分(课设图)
简答题 6题: 和文件相关的基础概念 文件目录 硬软链接 管道 各自概念 本身特点 memorymapp
线程 互斥锁
两个代码题
一个读代码 一个写代码 都是和进程相关 进程的创建 运行进程上文件的函数族 回收子进程
信号和屏蔽信号
在这里插入图片描述

填空题:

常见shell命令:

查看(文件、目录)
1.ls(显示目录文件)
2.cat(显示文件内容)
3.tac(显示文件内容(反向列示))
4.more(分页显示文件内容)
5.less(分页显示文件内容(可向上翻页))
6.head(显示文件前面几行 -n 指定行数)
7.tail(显示文件后面几行 -n 指定行数 -f 动态显示文件末尾内容)
8.pwd(显示当前目录)

创建(目录、文件)
9.mkdir(创建新目录 -p 递归创建)
10.touch(创建空文件)

复制、剪切(目录、文件)
11.mv(也可以改名)
12.cp(复制文件或目录)

删除(目录文件)
13.rmdir(删除空目录)
14.rm(删除文件)

目录的切换
15.cd(切换目录)
文件的链接
(生成链接文件)16.ln
命令格式

命令格式:命令 [-选项] [参数] 例: ls -la /etc
说明:1)个别命令使用不遵循此格式
2)当有多个选项时,可以写在一起
3)简化选项与完整选项 -a 等于 --all

1.目录处理命令:ls
命令名称:ls
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls 选项[-ald] [文件或目录] -a 显示所有文件,包括隐藏文件 -l 详细信息显示 -d 查看目录属性
-rw-r–r–
-文件类型(- 文件 d 目录 l 软链接文件)
rw-(u) r–(g) r–(o)
rw代表u权限 r代表所属组权限 r 代表其他人权限
u所有者 g所属组 o其他人 r读 w写 x执行

2.文件处理命令:cat
命令名称:cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
功能描述:显示文件内容 -n 显示行号
范例: $ cat /etc/issue $ cat -n /etc/services

3.文件处理命令:tac
命令名称:tac
命令所在路径:/usr/bin/tac
执行权限:所有用户
语法:tac [文件名]
功能描述:显示文件内容(反向列示)
范例: $ tac /etc/issue

4.文件处理命令:more
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
语法:more [文件名] (空格) 或f 翻页 (Enter) q或Q
换行 退出
功能描述:分页显示文件内容
范例: $ more /etc/services

5.文件处理命令:less
命令名称:less
命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less [文件名],可使用搜索功能(/内容),按n跳转到下一个搜索结果,可以使用翻页按键。
功能描述:分页显示文件内容(可向上翻页)
范例: $ less /etc/services

6.文件处理命令:head
命令名称:head 命令
所在路径:/usr/bin/head
执行权限:所有用户 语法:head [文件名]
功能描述:显示文件前面几行 -n 指定行数
范例: $ head -n 20 /etc/services

7.文件处理命令:tail
命令名称:tail
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
功能描述:显示文件后面几行 -n 指定行数 -f 动态显示文件末尾内容
范例: $ tail -n 18 /etc/services

8.目录处理命令:pwd
命令名称:pwd
命令英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录
范例:$ pwd /tmp/Japan

9.目录处理命令:mkdir
命令名称:mkdir
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p [目录名]
功能描述:创建新目录 -p 递归创建
范例:$ mkdir -p /tmp/Japan/boduo
$ mkdir /tmp/Japan/longze /tmp/Japan/cangjing

10.文件处理命令:touch
命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:创建空文件
范例: $ touch Japanlovestory.list

11.目录处理命令:mv
命令名称:mv
命令英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
语法:mv [原文件或目录] [目标目录]
功能描述:剪切文件、改名

12.目录处理命令:cp
命令名称:cp
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp -rp [原文件或目录] [目标目录] -r 复制目录 -p 保留文件属性
功能描述:复制文件或目录
范例: $ cp -r /tmp/Japan/cangjing /root
将目录/tmp/Japan/cangjing复制到目录/root下
$ cp -rp /tmp/Japan/boduo /tmp/Japan/longze /root
将/tmp/Japan目录下的boduo和longze目录复制到 /root下,保持目录属性

13.文件处理命令:rmdir
命令名称:rmdir
命令英文原意:remove empty directories
命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir [目录名]
功能描述:删除空目录
范例: $ rmdir /tmp/Japan/boduo

14.目录处理命令:rm
命令名称:rm
命令英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户
语法:rm -rf [文件或目录] -r 删除目录 -f 强制执行
功能描述:删除文件
范例:
$ rm /tmp/yum.log
删除文件/tmp/yum.log
$ rm -rf /tmp/Japan/longze
删除目录/tmp/Japan/longze

15.目录处理命令:cd
命令名称:cd
命令英文原意:change directory
命令所在路径:shell内置命令
执行权限:所有用户
语法:cd [目录]
功能描述:切换目录
范例: $ cd /tmp/Japan/boduo 切换到指定目录
$ cd … 回到上一级目录

16.文件处理命令:ln
命令名称:ln
命令英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [原文件] [目标文件] -s 创建软链接
功能描述:生成链接文件
范例: $ ln -s /etc/issue /tmp/issue.soft 创建文件/etc/issue的软链接/tmp/issue.soft
$ ln /etc/issue /tmp/issue.hard 创建文件/etc/issue的硬链接/tmp/issue.hard
软链接特征:类似Windows快捷方式
1、lrwxrwxrwx l 软链接 软链接文件权限都为rwxrwxrwx
2、文件大小-只是符号链接
3、/tmp/issue.soft -> /etc/issue 箭头指向原文件
硬链接特征:
1、拷贝cp -p + 同步更新 echo “this is a test” >> /etc/motd
2、可通过i节点识别
3、不能跨分区
4、不能针对目录使用
————————————————

详细地址:
[Linux基础—兄弟连]常用命令-文件处理命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原文地址:
[Linux基础—兄弟连]常用命令-权限管理命令

基本工具:vim 、vi、emacs
开发工具:vscode、visual stdio

代码题

代码解释:
1、什么是进程
  
   当运行任何一个UNIX命令时,shell至少会建立一个进程来运行这个命令,所以可以把任何在UNIX系统中运行的程序叫做进程;但是进程并不是程序,进程是动态的,而程序是静态的,并且多个进程可以并发的调用同一个程序。
  
  系统中每一个进程都包含一个task_struct数据结构,所有指向这些数据结构的指针组成一个进程向量数组,系统缺省的进程向量数据大小是512,表示系统中可同时容纳512个进程。进程的task_struct数据结构包括了进程的状态、调度信息、进程标识符等信息。
  
  由于UNIX系统是一个多进程的操作系统,所以每一个进程都是独立的,都有自己的权限及任务,所以当某一进程失败时并不会导致别的进程失败。系统通过进程标识符来区分不同的进程,进程标识符是一个非负正数,他在任何时刻都是唯一的,当某个进程结束时,他的进程标识符可以分配给另外一个新进程。系统将标识符 0分配给调度进程,标识符1分配给初始化进程。
  
   进程在运行期间,会用到很多资源,包括最宝贵的CPU资源,当某一个进程占用CPU资源时,别的进程必须等待正在运行的进程空闲CPU后才能运行,由于存在很多进程在等待,所以内核通过调度算法来决定将CPU分配给哪个进程。
  
   系统在刚刚启动时,运行于内核方式,这时候只有一个初始化进程在运行,他首先做系统的初始化,然后执行初始化程序(一般是/sbin/init)。初始化进程是系统的第一个进程,以后所有的进程都是初始化进程的子进程。

如何区分父子进程:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

/*
* @brief main For the understanding of the fork()
*
* @param argc
* @param argv[]
*
* @return 在父进程中返回子进程的进程号;在子进程中返回0。
*/
int main(int argc, char *argv[])
{
    pid_t pid; 
    int cnt = 0;

    pid = fork();

    if (pid == -1) {
        perror("fork error");
        exit(1);
    } else if (pid == 0) {
        printf("The returned value is %d\nIn child process!!\nMy PID is %d\n",
        pid, getpid());
        cnt++;
    } else {
        printf("The returned value is %d\nIn father process!!\nMy PID is %d\n",
        pid, getpid());
        cnt++;
    }
    printf("cnt = %d\n", cnt);

    return 0;
}
————————————————

运行结果是:
The returned value is 20473
In father process!!
My PID is 20472
cnt = 1
The returned value is 0
In child process!!
My PID is 20473
cnt = 1

在语句pid=fork()之前,只有一个进程在执行这段代码,但在这条语句之后,就变成两个进程在执行了,这两个进程的几乎完全相同,将要执行的下一条语句都是if(pid == -1)……
为什么两个进程的pid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回-1;

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
pid的值为什么在父子进程中不同。“其实就相当于链表,进程形成了链表,父进程的pid(p 意味point)指向子进程的进程id, 因为子进程没有子进程,所以其pid为0.

调用fork创建子进程

//用fork创建五个进程,
for (int i = 0; i < 5; i++)
{
       int pid=fork();
       if(pid>0)
       {
           printf("this is main prgress%d\n",getpid());
       }
       else if(pid == 0)
       {
           printf("%d\n",getpid());
           printf("this is fork%d\n",i);
           sleep(10);
           exit(0);
       }
       
            
       while(waitpid(-1,0,WNOHANG)>0){};
}   

结果
在这里插入图片描述

详解wait和waitpid函数

linux下signal()函数超详细介绍

简答题:

文件存储结构
大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:

目录项:包括文件名和inode节点号。
Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。
数据块:包含文件的具体内容。

先说inode

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

inode包含文件的元信息,具体来说有以下内容:
文件的字节数。
文件拥有者的User ID。
文件的Group ID。
文件的读、写、执行权限。
文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
链接数,即有多少文件名指向这个inode。
文件数据block的位置。
可以用stat命令,查看某个文件的inode信息:

stat demo.txt

在这里插入图片描述
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。

当查看某个文件时,会先从inode表中查出文件属性及数据存放点,再从数据块中读取数据。

请看文件存储结构示意图:在这里插入图片描述
在这里插入图片描述

inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df -i 命令。

查看每个inode节点的大小,可以用如下命令:

sudo dumpe2fs -h /dev/hda | grep "Inode size"

由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

使用ls -i命令,可以看到文件名对应的inode号码,例如:

ls -i demo.txt

目录项
Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

ls命令只列出目录文件中的所有文件名:

ls /etc

ls -i命令列出整个目录文件,即文件名和inode号码:

ls -i /etc

如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。

ls -l /etc

硬链接和软链接(相当于创建快捷方式,图标不能先存在)
硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接,语法为:

ln source_file target_file

运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:".“和”…"。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。
软链接
除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

ln -s命令可以创建软链接,语法为:

ln -s source_file target_file

有名管道和无名管道的区别:

管道是进程间通信的方式之一

管道的分类:

       1:无名管道 :可用于血缘进程间通信 (比如 父子进程)。

       2:有名管道:可用于任意两个进程间通信。

有名管道:
以文件为载体的通信机制。。。。。。。。。。。。。

创建本地磁盘文件为两个进程提供通信桥梁
可以当成队列
一方写一方读管道传输单位字节
共享存储区通过memory map
消息队列的单位是消息,大小可以自定义

有名管道是单向的 所以如果想在客户端和服务器通信,
需要两个有名管道,
client通过fifos向sever传输pid和servicenum
sever通过pid创建临时管道返回信息给client
每个客户端创建属于自己的临时主管道,

原文链接:https://blog.csdn.net/u014082714/article/details/45031771

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值