• 系统编程第二次实验


    重要的事情说三遍!!

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

    答案不一定对!

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

    系统编程第二次实验指导

    实验目的

    认识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、将历史命令缓冲区中的目录写入命令文件。

  • 相关阅读:
    git 备忘录
    模拟HTTP协议接收请求并返回信息
    微信公众号支付回调页面处理asp.net
    WinForm下判断文件和文件夹是否存在
    C# 如何判断ie版本号和获取注册表中的信息
    【转】GDI+中发生一般性错误的解决办法
    c# winform 获取当前程序运行根目录
    模拟按下某快捷键:keybd_event使用方法
    如何使用存储过程来实现分页功能
    用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法
  • 原文地址:https://www.cnblogs.com/PineZhuo/p/10529033.html
Copyright © 2020-2023  润新知