操作系统:Linux基本系统命令的使用
SHANGHAI UNIVERSITY
操作系统(一)实验报告
一、 实验目的与要求
实验目的:
1. 了解Linux运行环境,熟悉交互式分时系统、多用户环境的的运行机制。
2. 练习Linux系统命令接口的使用,学会Linux基本命令、后台命令、管道命令等命令 的操作要点。
实验要求:
1.复习操作系统中相关的用户接口概念。 查阅Linux中Shell的资料, 熟悉本《实验指导》第二部分,学习Shell的一般命令。
2. 通过终端或虚拟终端,在基于字符的交互界面中进行Shell的基本命令的操作。
二、实验环境
VMware+Linux发行版 Ubuntu 20.04版
三、实验内容及其设计与实现
3.1 实验一:思考题与讨论题
3.1.1 思考:你的用户名、用户标识、组名、组标识是什么?当前你处在系统的哪个位置中?现在有哪些用户和你一块儿共享系统?
答:用户id=1000(czy) 组id=1000(czy) 组=1000(czy);当前处在系统的/home/czy位置;现在没有用户与我共享系统(czy :0 2022-09-10 09:33 (:0))
3.1.2 思考:文件链接是什么意思?有什么作用?
答:文件链接是一种文件的虚拟副本。链接是目录中指向文件真实位置的占位符,通过链接可以定位文件的位置,打开文件链接可以看到和文件相同的内容。文件链接的作用是可以在不移动文件本体的情况下在多个位置访问、修改文件。
3.1.4 思考:Linux文件类型有哪几种?文件的存取控制模式如何描述?
答: 普通文件(-)、目录文件(d)、字符设备文件(c)、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。文件的存取控制模式使用八进制数4、2、1来在计算机中表示:4表示读取,2表示写入,1表示执行。所以一个可以对文件读写和执行的用户权限就为:4+2+1=7.其他用户也使用该方法计算即可。
3.1.5 思考:执行了上述操作后,若想再修该文件,看能不能执行。为什么?
答: (1)普通用户模式下:不可以继续执行修改。原因是指令chown stud090 mytext.txt使文件所有者变更为了stud090,但是之前的指令chmod 751 mytext.txt使得非所有者且非同组用户只有执行权限,故无法修改。
(2)root用户模式下:可以修改。因为root用户一定拥有所有权限,包括读写和执行。
3.1.6 思考:系统如何管理系统中的多个进程?进程的家族关系是怎样体现的?有什么用?
答: 系统通过配置的进程控制块PCB来描述进程的基本情况和活动过程,进而控制和管理进程。进程的家族关系体现在创建进程的进程作为父进程,而被创建的进程则作为子进程。这种关系的用处在于可以使子进程继承父进程的资源,且父进程撤销时可以将所有子进程一并撤销。
3.1.7 讨论:Linux系统命令很多,在手头资料不全时,如何查看命令格式?
答: (1)使用man+命令名查看完整命令的解释。(2)使用command+命令名可以查看简略的命令格式。
3.1.8 讨论:Linux系统用什么方式管理多个用户操作?如何管理用户文件,隔离用户空间?用命令及结果举例说明。
答:首先, Linux 系统会根据角色不同、所完成的任务的不同给予多个用户不同的权限,保证多用户系统的安全和各个用户的隐私。其次,在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。使用者2个方法就实现了管理用户文件、隔离用户空间。
举例:
➜ czy chown stu090 mytext.txt 更改用户所属文件
➜ czy ls -l 显示文件与权限
-rw-rw-r-- 1 stu090 czy 26 9月 10 11:34 mytext.txt
➜ czy chmod 751 mytext.txt 更改文件权限
chmod: 正在更改'mytext.txt' 的权限: 不允许的操作
由上述指令及其执行结果可知,当操作不属于自己的文件并再次尝试修改所属用户时,系统就拒绝了用户的命令,体现了用户空间被隔离开来,用户访问文件的权限也有区别。
3.1.9讨论:什么方式查看你的进程的管理参数?这些参数怎样体现父子关系?当结束一个父进程后其子进程如何处理?用命令及结果举例说明。
答:使用指令ps -ef查看全格式的全部进程:
其中“PPID”一栏就对应了当前进程的父进程的pid号。现在我们尝试打开firefox浏览器,再次输入命令“ps -ef”,可以查看与firefox有关的进程(见下图):
可以看到其余进程的父进程均是pid=4231的进程,接下来我们结束pid=4231 的进程并再次查看所有进程:
可以看到结束掉4231进程时,其子进程也全部结束了。
3.1.10讨论:Linux 系统“文件”的含义是什么?它的文件有几种类型?如何标识的?
答:文件时指由创建者所定义的、具有文件名的一组相关元素的集合,可以分为有结构、无结构两种。
文件的类型有多种分类方法:
其中按照组织形式和处理方式分类时,可以通过字母标识:普通文件(-)、目录文件(d)、字符设备文件(c)、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。
3.1.11讨论:Linux 系统的可执行命令主要放在什么地方?找出你的计算机中所有存放系统的可执行命令的目录位置。
答:/bin目录为普通用户可以使用的命令的存放目录, /sbin超级用户可以使用的命令的存放目录。
在我的计算机中,使用ls -F|grep "*"指令可以查询可执行命令的目录。
3.1.12讨论:Linux 系统得设备是如何管理的?在什么地方可以找到描述设备的信息?
答:(1)缓冲管理:在IO设备和CPU之间引入缓冲,可以有效缓和CPU和IO设备之间速度不匹配问题,提高CPU利用率,提高系统吞吐量。
(2)设备分配:系统中会设置设备控制表、控制器控制表等数据结构,用于记录设备与控制器等的标识符和状态,根据这些表格可以知道设备是可用/忙碌等。还需考虑设备的回收等问题。
(3)设备处理:即设备驱动程序,用于实现CPU和设备控制器之间的通信问题,即由CPU向设备控制器发出IO指令,要求其完成IO操作;CPU接受从控制器发出的中断请求,并响应和处理。
使用下面指令可以查询设备信息:
查看CPU信息:cat /proc/cpuinfo
查看板卡信息:cat /proc/pci
查看PCI信息:lspci (相比cat /proc/pci更直观)
查看内存信息:cat /proc/meminfo
查看USB设备:cat /proc/bus/usb/devices
查看键盘和鼠标:cat /proc/bus/input/devices
查看系统硬盘信息和使用情况:fdisk & disk - l & df
3.1.12讨论:画出Linux 根文件系统的框架结构。描述各目录的主要作用。你的用户主目录在哪里?
根文件系统框架结构:
目录主要作用:
/bin
|
二进制可执行命令。该目录下存放着普通用户的命令 |
/dev
|
系统的设备文件,即设备的驱动程序 |
/home |
用户主目录的基点 |
/lost-found
|
目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里 |
/misc
|
储存着一些特殊的字符的定义 |
/net
|
存放着和网络相关的一些文件 |
/proc
|
存放着用户与内核的交互信息 |
/sbin
|
系统的管理命令,这里存放的是系统管理员使用的程序 |
/srv
|
系统启动服务时可以访问的数据库目录 |
/tmp |
临时文件,重启后自动清空 |
/var
|
某些大文件的溢出区,比如各种服务的日志文件 |
/boot
|
启动linux的核心文件 |
/etc
|
系统所有的配置文件都在这个目录中 |
/lib
|
存放着和系统运行相关的库文件 |
/media
|
存放着可移除的设备,比如软盘,光盘 |
/mnt |
挂载目录,是系统管理员临时安装文件的系统安装点 |
/opt (option : 自由选择)
|
主要给源码安装软件时选择的安装目录位置 |
/root
|
超级用户的目录 |
/selinux
|
主要用来加固操作系统,提高系统的安全性 |
/sys
|
管理设备文件 |
/usr
|
最大的目录,存放着应用程序和文件 |
我的主目录:
3.1.13讨论:Linux 系统的Shell是什么?请查找这方面的资料,说明不同版本的Shell的特点。
答:shell是命令语言、命令解释程序及程序设计语言的统称,是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell也是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
不同版本shell的特点:流行的shell有bash、ksh、csh、zsh等。Bash是大多数Linux系统默认使用的shell,bash shell是Bourne shell 的一个免费版本,它是最早的Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径;C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell;Korn shell 的语法与Bourne shell相同,同时具备了C shell的易用特点。Zsh是目前Linux里最庞大的一种shell,它有84个内部命令,使用起来也比较复杂。
3.1.14讨论:下面每一项说明的是哪类文件?
答: (1)这是一个普通文件,其所有者拥有读、写以及执行的权限;所在组成员拥有读、写的权限;其他用户只有读的权限。
(2)这是根目录下的bin文件夹,其中包含可执行命令。
(3)tty是Teletype的缩写。Teletype是最早出现的一种终端 设备,很象电传打字机。设备名放在特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:ttySn: 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备; 伪终端 (Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统中分别是/dev/pty/m3和 /dev/pty/s3)。它们与实际物理设备并不直接相关。如果一个程序把ttyp3看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑 终端设备对的另一个上面(ttyp3)。
故ttyx3指的是ttys3(COM3的串行端口终端)或ttyp3(COM3的伪终端)
(4)目录文件,其所有者拥有读、写的权限;所在组成员拥有读、写的权限;其他用户拥有读、写的权限。
(5)文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义为:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell。
(6)字符设备文件,其所有者拥有读、写的权限;所在组成员拥有读、写的权限;其他用户拥有读、写的权限。
(7)首先认识lib目录的含义:/lib/ 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件。而目录 /usr/lib/ 中含有更多用于用户程序的库文件。
(8)ubuntu中没有此类文件或目录,可能是系统文件。
3.2 实验二:OS 平台截图和说明
3.2.1 图形化用户界面下的 Shell 命令操作
【操作要求 1】显示系统时间,并将系统时间修改为 2011 年 9 月 17 日零点。
【操作步骤】
(1)进入root用户
(2)使用date命令查询当前时间
(3)使用命令date 091700002011修改时间
【操作要求 2】切换为普通用户,查看 2011 年 9 月 17 日是星期几。
【操作步骤】
(1)退出root,成为普通用户
(2)使用call命令查询2011年9.17
【操作要求 3】查看 ls 命令的-s 选项的帮助
【操作步骤】
(1) 输入 “man ls” 命令,得到技术文档:
(2) 找到-s,可知 ls 命令的-s 选项等同于—size,是打印每个文件被分配的大小
(3)按q退出技术文档
【操作要求 4】查看/etc 目录下所有文件和子目录的详细信息
【操作步骤】
(1) 输入命令“cd /etc”,切换到/etc 目录。
(2) 输入命令“ls -al”,显示/etc 目录下详细信息。
3.2.2 字符界面下的 Shell 命令操作
【操作要求 1】查看当前目录。
【操作步骤】
(1) 启动计算机后默认会启动图形化用户界面,按下 CTRL+ALT+F1 键切换到第 1 个虚拟终端。
(2) 以普通用户czy登录系统。
(3) 输入命令“pwd”,显示当前目录。
【操作要求 2】用 cat 命令在用户主目录下创建一名为 f1 的文本文件,内容为: Linux is useful for us all. You can never imgaine how great it is.
【操作步骤】
(1) 输入命令“cat >f1”,屏幕上输入点光标闪烁,依次输入上述内容。 使用 cat 命令进行输入时,不能使用左右上下方向键,只能用退格键(Backspace)来删除光标前一位置的字符。并且一旦按下回车键,该行输入的字符就不可修改。
(2) 上述内容输入后,按 Enter 键,让光标处于输入内容的下一行,按 CTRL+D 键结束 输入。
(3) 要查看文件是否生成,输入命令“ls”即可。
(4) 输入命令“cat f1”,查 看 f1 文件的内容,相关操作参见如下内容。
【操作要求 3】向 f1 文件增加以下内容:Why not have a try?
【操作步骤】 (1) 输入命令“cat >>f1”,屏幕上输入点光标闪烁。
(2) 输入上述内容后,按 Enter 键,让光标处于输入内容的下一行,按 CTRL+D 键结束 输入。
(3) 输入“cat f1”命令,查看 f1 文件的内容,会发现 f1 文件增加了一行,相关操作参 见如下内容。
【操作要求 4】统计 f1 文件的行数,单词数和字符数,并将统计结果存放在 countf1 文件。
【操作步骤】
(1) 输入命令“wc <f1>countf1”,屏幕上不显示任何信息。
(2) 输入命令“cat countf1”,查看 countf1 文件的内容,其内容是 f1 文件的行数、单词 数和字符数信息,即 f1 文件共有 2行,18 个词和 87 个字符
之所以是18个词而不是19个,是因为在第一局结束时我没有按下回车而是直接输入第二句,因此系统将all.You识别为同一个词。尝试修改后重新计数,成功:
【操作要求 5】将 f1 和 countf1 文件的合并为 f 文件
【操作步骤】
(1) 输入命令“cat f1 countf1 >f”,将两个文件合并为一个文件。
(2) 输入命令“cat f”,查看 f 文件的内容,如下所示。
【操作要求 6】分页显示/etc 目录中所有文件和子目录的信息
【操作步骤】
(1) 输入命令“ls /etc|more”,屏幕显示出“ls /etc”命令输出结果的第一页,屏幕的最后一行上还出现“--More--”字样,按空格键可查看下一页信息,按 Enter 键可查看下 一行信息。
(2) 浏览过程中按“q”键,可结束分页显示。
【操作要求 7】仅显示/etc 目录中前 5 个文件和子目录。
【操作步骤】 输入命令“ls /etc |head -n 5”, 屏幕显示出“ls /etc”命令输出结果的前面 5 行.
【操作要求 7】清除屏幕内容
【操作步骤】 输入命令“clear”,则屏幕内容完全被清除,命令提示符定位在屏幕左上角。
3.2.3 通配符的使用
【操作要求 1】显示/bin/目录中所有以 c 为首字母的文件和目录
【操作步骤】 输入命令“ls /bin/c*”,屏幕将显示/bin 目录中以 c 开头的所有文件和目录
【操作要求 2】显示/bin/目录中所有以 c 为首字母,文件名只有 3 个字符的文件和目录
【操作步骤】
(1) 按向上方向键,Shell 命令提示符后出现上一步操作时输入的命令“ls /bin/c*”。
(2) 将其修改为“ls /bin/c??”,按 下 Enter 键,屏幕显示/bin 目录中以 c 为首字母,文件名只有 3 个字符的文件和目录.
【操作要求 3】显示/bin 目录中所有的首字母为 c 或 s 或 h 的文件和目录。
【操作步骤】 输入命令“ls /bin/[csh]*”,屏幕显示/bin 目录中首字母为 c 或 s 或 h 的文件和目录.
【操作要求 4】显示/bin/目录中所有的首字母是 v、w、x、y、z 的文件和目录。
【操作步骤】 输入命令“ls /bin/[!a-u]*”,屏幕显示/bin 目录中首字母是 v~z 的文件和目录
【操作要求 5】重复上一步操作
【操作步骤】 输入命令“!!”自动执行上一步操作。
【操作要求 6】查看刚执行过的 5 个命令
【操作步骤】 输入命令“history 5”,显示最近执行过的 5 个命令,相关操作参见如下内容。
3.2.4设置手工启动图形化用户界面
【操作要求 1】设置开机不启动图形化用户界面
【操作步骤】
(1) 以超级用户身份登录。
(2)使用vim 修改配置文件: vim /etc/default/grub
将此行用“#”注释:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash";
将GRUB_CMDLINE_LINUX="" 修改为:GRUB_CMDLINE_LINUX="text";
将#GRUB_TERMINAL=console前的“#”号去除,即反注释该行。
(3)esc退出编辑,然后输入:wq!进行保存,退出vim。
(4) 依次输入命令:
update-grub 保存修改
systemctl set-default multi-user.target
(5) 重启系统,可以看到默认进入了虚拟终端之中:
【操作要求 2】手工启动图形化用户界面。
【操作步骤】
(1) 计算机重启后只有字符界面可用,输入用户名和相应的口令后,登录 Linux 系统。
(2) 输入命令“startx”,启动图形化用户界面。
(3) 单击「系统」菜单=>「注销」,点击log out,返回到字符界面
四、收获与体会
说明:撰写完成该实验后的收获和体会。
在本次实验中我了解和实践到了多种类型、功能各异的指令,其中一些指令,例如cal +时间 让我理解了为什么课本上说shell终端可以做图形化界面做不了的事。学习linux之前虽然也有在windows的cmd和powershell使用指令的经历,但都是为了解决某个具体问题而使用的,没有理解指令的用处。比如查找2011年的日历,固然可以在图形化界面的“日期”app查询,但是需要依次回溯至2011年,具有不便之处,不如直接使用指令查询来的方便快捷。此外,掌握了man+指令调出说明文档的方法实在是令人振奋,因为记住指令名本身就比较难,更不要说繁多的参数,有了技术文档就可以方便查阅和使用。
在之后,希望可以了解更多指令的用法,探索更多可以在shell下完成的操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示