系统编程第二次实验
重要的事情说三遍!!!
答案不一定对!
答案不一定对!
答案不一定对!
答案仅代表个人想法,仅供参考,有不对的地方请指出!!!
系统编程第二次实验指导
实验目的
认识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],其中:
r(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限;
w(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限;
x(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。
第二个字段表示该文件硬连接的数目,这个问题以后再说
第三个&第四个字段 分别表示所有人和所有组,这里表示拥有人和拥有组都是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的缩写,表示“设备”。包含外设。我们之后会仔细研究这个目录,因为它里面的子目录,每一个对应一个外设。比如代表我们的光盘驱动器的文件就会出现在这个目录下面。
- etc:etc有点不能顾名思义了。因为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:\Windows和C:\Program Files这两个文件夹的集合。在这里面安装了大部分用户要调用的程序。
- var:是英语variable的缩写,表示“动态的,可变的”。通常包含程序的数据,比如一些log(日志)文件,记录电脑中发生了什么事。
/proc 下的文件表示进程,这里的文件实际存在位置是内存中,并不是硬盘, 对应的数字则是一个进程的进程号。 /dev 下的文件被称作设备文件,是一种特殊的文件,甚至可以根据这些文件的名字推测出设备是什么。
十分推荐大家自己看一看这两个文件夹的内容,理解linux对于文件这一级别的抽象,更推荐大家看看其他的目录下都有什么,推测一下实际的用途,通常不会相差太多
关于文本
linux 下对于文本由广泛的利用,下面是一些解释
开机启动配置
关于开机启动,先行的linux发行版具有不同的开机启动顺序,这里根据centos介绍一下开机的启动,
shell脚本
在命令行环境下,也有类似于windos下批处理文件的脚本,叫做shell脚本,shell脚本的编写将是这门课后续的内容,这里简单介绍一下基本的规则
shell基本语法
字符串
"zifuchuan"
输入重定向
command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command >> file 将输出以追加的方式重定向到 file。 n > file 将文件描述符为 n 的文件重定向到 file。 n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。 n >& 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)此时终端后台进程数
(4)shell环境变量
(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、通过more和less将ls -l /etc中的结果展示出来;
more:
less:
3、有个指令名称为/usr/bin/mount,请使用绝对路径和相对路径来执行该命令;
由于我的/usr/bin里没有mount ,所以用chrt替代
如果你有,请把chrt替换成mount
相对路径:
绝对路径:
4、系统中有两个用户,分别是 A 与 B ,这两个人共同支持一个名为 project 的用户组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅,请问该目录的权限配置应如何配置,写出配置所需的指令。提示:请在/srv下创建/ahome目录,并创建用户A,B,用户组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、将历史命令缓冲区中的目录写入命令文件。