系统编程第二次实验

重要的事情说三遍!!

答案不一定对! 
答案不一定对!

答案不一定对!

答案仅代表个人想法,仅供参考,有不对的地方请指出!!!

系统编程第二次实验指导

实验目的

认识linux 中的权限问题,理解用户和用户组

认识unix 中的文本,理解UNIX 为什么要使用文本

认识linux 中的文件,学习你的linux系统中文件的基本情况,认识到linux中任何东西都是文件

学习和使用管道指令、重定位指令;

进程查看以及创建链接文件的方法;

实验指导

参考资料:原老师提供了一份其他UNIX环境编程的课件,讲解十分详细

 一些可供选择的资源: https://billie66.github.io/TLCL/book/ 可能不稳定

经过上一次实验,同学应该已经掌握了基本的linux下的命令和工具。命令非常多,请经常使用,多用终端,多用man和百度 

进程摘要

程序运行时是作为一个进程运行,进程可以粗略的认为是一个在程序运行,并且受到操作系统调度,也就是分为正在运行、就绪、结束等状态。

认识管道

管道是Linux环境中用来实现进程间通信的一种方式,进程间通信就是2个程序运行时交换数据。

管道通讯是单向的,先进先出,有固定的读端和写端。
数据被进程从管道读出后,在管道中该数据就不存在了。
当进程去读取空管道的时候,进程会阻塞,也就是这个程序会等待直到管道被写入新数据
当进程往满管道写数据时,进程会阻塞。
管道容量定义64KB
---------------------
作者:惜暮
来源:CSDN
原文:https://blog.csdn.net/u010853261/article/details/53464053

认识权限

当你使用ls -l命令的时候, 会发现列出了目录的很多信息,并且以行为单位,下来就认识一下这些文件的基本含义 首先 -l 选项代表ls (- long) 就是展示目录下的详细信息。 比如如下例子


[me@linuxbox ~]$ ls -l

total 56

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Desktop

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Documents

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Music

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Pictures

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Public

drwxrwxr-x 2  me  me  4096  2007-10-26  17:20  Templates

第一个字段是这个文件的权限,第一个d表示这是一个目录,其余九个字段表示这个文件的详细权限,一个rwx为一组 表示一个读(r) (w) 执行(x) 的权限,总共有三组,分别代表了拥有者,拥有组,所有人 对这个文件的权限,对应的字段为-表示没有该权限 ` “-”表示普通文件;

 “d”表示目录;

 “l”表示链接文件;

 “p”表示管理文件;

 “b”表示块设备文件;

 “c”表示设备文件;

 “s”表示套接字文件;

2)文件属性,其属性可分为三段:[rwx][rwx][r-x],其中:

  rRead,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限;

  wWrite,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限;

  xeXecute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。

第二个字段表示该文件硬连接的数目,这个问题以后再说

第三个&第四个字段 分别表示所有人和所有组,这里表示拥有人和拥有组都是me

第五个字段表示以字节数表示的文件大小。

最后修改时间

文件名

  • 用户及用户组

Linux用户分为管理员和普通用户,普通用户又分为系统用户和自定义用户。

可以查看/etc/passwd来查看;

  1)系统管理员:即root帐户,拥有所有系统权限,是整个系统的所有者。

  2)系统用户:linux为满足自身系统管理所内建的账号,通常在安装过程中自动创建,不能用于登录操作系统。

  3)自定义用户:由root管理员创建供用户登录系统进行操作使用的账号。

 linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。同样用户组的信息我们可以在/etc/group中查看。

  • 用户管理命令(详情请使用man指令)
  • 添加用户命令:useradd

- 修改用户密码:passwd

- 修改用户信息:usermod

- 修改用户密码状态:chage

- 删除用户命令:userdel

- 查看用户:id

  • 切换用户身份:su

- 修改用户组:groupmod

- 添加用户组:groupadd

- 删除用户组:groupdel

认识文件

file 命令可以帮助你认识文件,file <文件名> 会输出这个文件的类型  linux 中的任何都是由文件组成的,下面的指引会给出一些相关的概念,/ 也就是根目录下时,你可以看到下列的文件夹

  • bin:是英语binary的缩写,表示二进制文件(我们知道可执行文件是二进制的)。包含了会被所有用户使用的可执行程序。
  • boot:英语boot表示启动。包含与Linux启动密切相关的文件。
  • dev:是英语device的缩写,表示设备。包含外设。我们之后会仔细研究这个目录,因为它里面的子目录,每一个对应一个外设。比如代表我们的光盘驱动器的文件就会出现在这个目录下面。
  • etcetc有点不能顾名思义了。因为etc是法语etcetera的缩写,翻成英语就是and so on,表示等等。包含系统的配置文件。至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(Linux文件结构参考UNIX的教学实现MINIX) ,这下面放的都是一堆零零碎碎的东西, 就叫etc好了。哈哈 ,这其实是个历史遗留。
  • home:英语home表示用户的私人目录。之前我们提过一些,在这个目录中,我们放置私人的文件,有点类似Windows中的Documents这个文件夹,也叫我的文档Linux中的每个用户(除了大管家用户,也就是超级用户root外,root因为太厉害,拥有所有权限,所以比较任性,跟普通用户不住在一起)都在home目录下有自己的一个私人目录。比如我的用户名是oscar,那么我的私人目录就是/home/oscar;如果另一个用户叫jean,那么他的私人目录就是/home/jean
  • lib:是英语library的缩写,表示。包含被程序所调用的库文件,例如.so结尾的文件,在Windows下这样的库文件是以.dll结尾的。
  • media:英语media表示媒体。当一个可移动的外设(比如USB盘,SD卡,DVD,光盘等等)插入电脑时,Linux就可以让我们通过media的子目录来访问这些外设中的内容。
  • mnt:是英语mount的缩写,表示挂载。有点类似media,但一般用于临时挂载一些装置。
  • opt:是英语optional application software package的缩写,表示可选的应用软件包。用于安装多数第三方软件和插件。
  • root:是英语的意思。超级用户root的家目录/主目录。一般的用户的家目录是位于/home下,不过root用户是个例外。之前的课程我们也提到过,root是整个系统的超级用户,拥有一切权限,初学者请慎用此用户模式。
  • sbin:是英语system binary的缩写,表示系统二进制文件。比起bin目录多了一个前缀system,所以包含的是系统级的重要可执行程序。
  • srv:是英语service的缩写,表示服务。包含一些网络服务启动之后所需要取用的数据。
  • tmp:是英语temporary的缩写,表示临时的。普通用户和程序存放临时文件的地方。
  • usr:是英语Unix Software Resource的缩写,表示“Unix操作系统软件资源(也是个历史遗留的命名)。这个目录是最庞大的目录之一。有点类似Windows中的C:\WindowsC:\Program Files这两个文件夹的集合。在这里面安装了大部分用户要调用的程序。
  • var:是英语variable的缩写,表示动态的,可变的。通常包含程序的数据,比如一些log(日志)文件,记录电脑中发生了什么事。

/proc 下的文件表示进程,这里的文件实际存在位置是内存中,并不是硬盘, 对应的数字则是一个进程的进程号。 /dev 下的文件被称作设备文件,是一种特殊的文件,甚至可以根据这些文件的名字推测出设备是什么。

十分推荐大家自己看一看这两个文件夹的内容,理解linux对于文件这一级别的抽象,更推荐大家看看其他的目录下都有什么,推测一下实际的用途,通常不会相差太多

关于文本

linux 下对于文本由广泛的利用,下面是一些解释

开机启动配置

关于开机启动,先行的linux发行版具有不同的开机启动顺序,这里根据centos介绍一下开机的启动,

shell脚本

在命令行环境下,也有类似于windos下批处理文件的脚本,叫做shell脚本,shell脚本的编写将是这门课后续的内容,这里简单介绍一下基本的规则

shell基本语法

字符串

"zifuchuan"

输入重定向

command > file 输出重定向到 filecommand < file 输入重定向到 filecommand >> file 将输出以追加的方式重定向到 filen > file 将文件描述符为 n 的文件重定向到 filen >> file 将文件描述符为 n 的文件以追加的方式重定向到 filen >& m 将输出文件 m n 合并。 n <& m 将输入文件 m n 合并。 << tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

####参数通配符  1,*:匹配任意字符串 2,?:匹配单一字符  3[…][!…] :匹配/不匹配括号中的字符  4[n1-n2]:匹配所定义范围中的任意字符

bash 启动脚本

正如你所见,进入命令行后实际上是打开了一个名叫bash 的程序,bash也有自己的脚本, 在每一个人的目录中有一个 .bashrc 文本文件,这个文件就是bash的启动脚本之一,打开看一下启动脚本中完成了那些内容

关于unix 下为什么使用文本《UNIX编程艺术》第5章中给了详细的说明,相信通过长时间的使用,你也能感受到其中的优越之处 这里仅仅给出两个截图,感兴趣的同学可以自行查阅(这本书很有趣的)   

 

实验任务

实验任务

1新建一个文件/home/学号,将以下内容输出其中:

1当前登陆用户数

2当前目录下的文件数量

3此时终端后台进程数

4shell环境变量

5以上使用的所有命令行

touch /home/学号

创建新文件

(1)who | wc -l > 学号

who命令显示当前系统登录的用户数,一个用户一行

wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出

-l 统计行数

所以 who | wc -l可以统计用户个数

(2)ls -l | grep "^-" | wc -l > 学号

grep "^-"用于匹配目录

(3)jobs > 学号

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。

(4)echo $PATH > 学号

这道题我不确定。。。QAQ

(5)history 6 > 学号

以上5条命令行再加上history这一行,共6行

2、通过morelessls -l /etc中的结果展示出来;

more:

 

less:

3、有个指令名称为/usr/bin/mount,请使用绝对路径相对路径来执行该命令;

由于我的/usr/bin里没有mount ,所以用chrt替代

如果你有,请把chrt替换成mount

 相对路径:

绝对路径:

 

4、系统中有两个用户,分别是 A B ,这两个人共同支持一个名为 project 的用户组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅,请问该目录的权限配置应如何配置,写出配置所需的指令。提示:请在/srv下创建/ahome目录,并创建用户AB,用户组project,并给/ahome赋予合理的访问权限。

先创建用户组project,再创建用户A和B,指定用户组

groupadd  project

useradd -g project A

useradd -g project B

接下来根据题目要求操作就行

 

5、使用cat查看/etc/passwd中的内容,并输出含有root 字符串的行;

cat 命令用于连接文件并打印到标准输出设备上。

 

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

 

6   查阅并说明history命令的大概原理。

 

history 命令被用于列出以前输入的命令和 Bash 日志。这个日志被称为history” ,它能够使我们快速查看以前在系统上执行的内容。BASH 将关闭终端会话时所运行的所有命令写入历史记录文件。总的来说就是以下两个步骤:

 

1、读取历史命令文件中的目录到历史命令缓冲区;

 

2、将历史命令缓冲区中的目录写入命令文件。

 

posted @ 2019-03-14 11:16  不吃香菜的豆芽君  阅读(299)  评论(0编辑  收藏  举报