Linux笔记原创
Linux应用实践上机报告
# 上机一 Linux基本命令及其使用
实验目的:
理解Shell命令的运行;
掌握Linux基本命令的使用;
通过对现象的观察、总结与思考,理解linux命令的学习方法; 实验步骤:
进入~目录,然后显示当前目录全路径。
在当前目录下建立lab1子目录,进入lab1。
执行echo “hello world”>my.txt,使用ls -l查看当前目录下的文件信息。再执行echo “hello world” my.txt。对照这些结果,说明>的作用与功能。
【说明】> 是重定向符,用于将命令的输出重定向到文件。 4. 再次执行echo “hello world”>my2.txt,使用cat命令查看my2.txt文件内容。又执行echo “hello world”>>my2.txt,再次使用cat命令查看my2.txt文件内容。对比分析两次cat内容的差别,回答>>的功能与作用。
【答】>> 将命令的输出追加到文件,而不是覆盖。 5. 使用ls显示当前目录下的文件名,比较ls -a以及ls -A结果的区别。比较ls -l 与ls -li的区别
- 输入who,执行,根据显示信息分析who命令的(可能)功能。
【分析】执行who命令,将输出登录用户与登录时间。 7. 在当前目录下建立mydir目录,将以上的my2.txt拷贝到mydir目录下。在当前目录下查看mydir目录下的文件详细信息(长格式)。这过程中你遇到了什么问题,后来如何解决的。
无问题 8. 使用rm命令删除mydir目录。写出完整的命令格式是.这过程中,你遇到了什么问题,后来如何解决的。 $ rm -r mydir 无问题
- 执行date命令。对照输出结果,说明该命令的功能。
输出当前时间 10. 执行cal命令。对照输出结果,说明该命令的功能。
输出当前日期、该月日历 11. 执行ls -Rl /usr/include命令的结果是什么。根据该结果分析一下R在ls命令中作用。
该命令会列出 /usr/include 目录及其所有子目录的详细信息,包括文件权限、大小、修改时间等。 -R选项在 ls 命令中:-R(Recursive,递归)选项表示 递归列出所有子目录及其中的文件。在 /usr/include 目录中,通常会有许多子目录,如 linux/、asm/ 等,ls -Rl /usr/include 会逐层展开目录,显示其中所有文件及其详细信息。 12.(学习find)find是在目录结构中按条件搜索文件,并可以执行指定的操作。 命令格式: find [起始目录] [option] [tests] [操作] [起始目录]:在什么目录及其子目录下查找 [option]:选项 [tests]:查找条件
13.-name 表达按名字查找.使用文件名匹配模式表达条件,如”*.txt”(注意引号去掉,有的系统会出错);
该命令查找实验平台,根目录/下文件名以.txt结尾的文件,有很多结果
14.-user 按照文件属主来查找文件;
该命令查找实验平台,根目录/下属于root的文件(属主),有很多结果
15.这些测试条件可以按照与、或非进行组合的: !或-not:表示逻辑取反,测试为真时,取反后为假,测试为假时,取反后为真,
在/目录下查找文件名不以.txt结尾的文件,该命令结果很多,
-a或-and:表示与,该符号前后的两个测试都必须为真,结果才为真 该命令查找根目录下属于root用户(属主)以及文件名以.log结尾的文件名 -o或or:表示或,该符号前后的两个测试只有有一个为真,结果为真 16.[起始目录]:在什么目录及其子目录下查找 进入终端后,
再运行
比较这些命令结果,也就是起始目录如果不写,即表示为当前目录“.”
17.-maxdepths :最多搜索目录层次
-maxdepths N:最多搜索N层目录,仅仅在起始目录下按条件查找这样表达:-maxdepths 1
这是仅仅在根目录下(但不在其子目录下)查找root用户所有(属主)并且文件名以.log结尾的文件 18.准备: 进入终端后,cd ~,接如下:
这样就生成了一个my.txt文件以备后面使用。使用cat命令查看该文件内容:
19.(学习grep)grep是UNIX和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件内容进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。 基本格式:grep [option] [PATTERN] [FILES] [PATTERN]: ^:行首 $:行尾 .:任意单个字符 [ ]:表示一个字符匹配的范围,如[a-e];或者如[^a-e],^表示取反,也就是不匹配的意思 [option]:选项 -c 只输出匹配行的计数; -i 不区分大小写(只适用于单字符); -n 显示(在原文件中的)行号; -s 不显示不存在或无匹配文本的错误信息; -v 显示不包含匹配文本的所有行; 20.这是在my.txt文件中查找以l开始的行,查找结果中显示其在原文件中的行号。 这是在my.txt文件中查找不以l开始的行,查找结果中显示其在原文件中的行号。
21这是在my.txt文件中查找以r结尾的行,查找结果中显示其在原文件中的行号。
22.(学习tar)格式:tar [选项] 文件或者目录 将多个文件或目录打包,也可以进行压缩。tar命令同样也可以还原打包文件。 使用该命令时。 常用选项有: -c :创建新的包文件(打包) -x :从包文件中释放文件(解包) -f:使用打包文件或设备,这个选项通常是必选的 -z:用gzip来压缩/解压缩文件。 23.准备,进入终端后,cd ~,进入~目录,再进入mytest。
24打包
25解包一 在/tmp目录下建立backup子目录,将刚才创建的mybackup.tar包文件拷入该backup目录下,进入该backup目录。
再用tar解包。用ls命令查看当前目录下的文件,正是我们刚才打包的那两个文件子目录及其包含的文件。
26.进入mybackup.tar所在目录。
建立解包后,文件放在的目录/tmp/mybackup。使用tar命令解包。
27打开终端,进入cd ~进入~目录。找一个打包目录,如mytest,打包并压缩。使用z选项压缩包,包文件名字后面有.gz后缀。
28.建立/tmp/backup3目录,将mytest.tar.gz解包并加压缩到该目录下。
- 在能够用浏览器打开www.sohu.com网页时,在Ubuntu的终端里,输入: ping www.sohu.com,运行结果是什么?通过查资料,ping命令有什么作用?
ping(Packet Internet Groper)是 网络连通性测试工具,用于检测主机是否可达,并测量往返时间(RTT, Round Trip Time)。 29. 29.在Ubuntu的终端里,输入ifconfig命令 ,运行结果是什么?通过查资料,ifconfig命令有什么作用? ifconfig(interface configuration)用于 查看和配置网络接口,但在现代 Linux 发行版中,它已被 ip 命令替代(仍可通过 net-tools 包安装)。
# 上机二 Linux Shell基本程序设计
实验目的: 4. 理解Shell程序的分支、循环结构,能进行基本分支、循环程序设计; 5. 通过对现象的观察、总结与思考,理解linux命令的学习方法; 6. 学习VI的复制黏贴等基本使用方法。 实验步骤: 一、VI的使用 Vi是Unix平台下元老级的文本编辑器,也是linux常用的一个编辑软件。有三种工作模式: normal模式:这是当进入Vim时,默认的模式。在此模式下,无法输入任何文字,不过可以利用按键命令来执行许多操作命令,例如复制、粘贴以及删除等。 insert模式:进入vim后,按a,i或者o键,即可进入该模式。该模式下才可以输入文字内容。按Esc键进入normal模式。 command-line模式:normal模式下按”:”键即进入的模式。该模式下,可以做一些和输入文字无关的事。比如搜索字符串,保存文件或者结束编辑。
- 用cd ~, 进入~目录,用mkdir lab2 在~目录下建立上机2的目录,cd lab2进入该目录。
2.用vi myvi.sh命令对开始对myvi.sh文件的编辑。进入后,默认是normal模式,按i键进入插入insert编辑模式,将下列程序输入myvi.sh文件中。 #!/bin/sh echo "Original parameters are $*" if [ -z "$1" ] then echo "Hi $1, nice name" else echo "Never mind" fi exit 0 输入过程中,可以通过command-line模式下的w命令保存:在编辑模式下按Esc切换到normal模式,再按:切换到在command-line模式,再按w,再按回车即可保存。保存后,再按a键回到insert插入编辑模式继续后续输入(比较按a键与按i键回到插入编辑模式的异同)。
3.输入结束后,可以通过command-line模式下的wq命令保存并退出vi:在编辑模式下按Esc切换到normal模式,再按:切换到在command-line模式,再按wq,再按回车即可保存并退出。退出后,通过vi myvi.sh命令可以再次用vi打开myvi.sh文件,打开后也可再按o键回到insert插入编辑模式继续后续修改与输入(比较按a、i、o键切换到插入编辑模式的异同)。
4.常用的Vi复制命令如下:
yy:复制光标所在行,但不反显;
nyy:包括光标所在行开始的向下n行;
yw:复制光标所在位置到整个单词结束的字符;
nyw:复制从光标所在位置到单词结束(算一个单词)开始的n个单词;
p:将复制内容粘贴在光标所在位置;
np:将复制内容粘贴在光标所在位置,重复n次。
这些命令是在normal模式下工作的,因此使用这些命令前,需要确保Vi是在该normal模式。如当前在插入编辑模式,可以按Esc键,切换到normal模式。
vi 打开一个文件后,默认是在normal模式,这时候可以使用这些命令。
(1) 用vi myvi.sh打开myvi.sh,(或切换到该normal模式)将光标移到echo "Never mind"行,按下yy,再将光标移到需要复制所在行位置,如exit 0前面行,再按下p.
(2)再次将光标移到else行,再依次(依次)按下3 yy,再将光标移到需要复制所在行,如exit 0前面一行,按下p。再次按下5p,是什么效果(下图中没有体现该效果)。
(3)在command-line模式下(不在该模式时,需要切换到该模式,如在normal模式时,按:可以切换到command-line模式),输入wq保存(刚才打开的myvi.sh)并退出vi.
5.Vi的删除功能也很强大,除了(插入编辑模式下)支持del、Backspace向前向后删除外,常用的删除命令(normal模式下)如下: dd:连按两次d删除光标所在行; ndd:删除包含光标所在行开始的后续n行; x:删除光标所在位置字符; X:删除光标所在位置前一个字符; Nx:删除包含光标所在位置开始的后续n字符 NX:删除不包含光标所在位置之前的n字符 这些命令也是在normal模式下工作,如果不是在normal模式的时候,需要切换到该模式。 vi中dd删除时,其实就是剪切,可以用p命令粘贴的。 (1)用vi myvi.sh 打开myvi.sh文件,进入vi。(如果不在normal模式,需要切换到normal模式,如按Esc键切换到normal模式),将光标移到倒数第二个else行,按下dd,删除一行。再将光标移到else行,按下p键。
(2)此时再将光标移到倒数第三个echo "Never mind"行,依次按下4 dd,如下图。最后(切换到command-line模式,用wq命令)保存退出。
6.行定位。用vi myvi.sh打开进入vi后,在command-line模式下,输入set number,按回车后可以设置并显示打开文件的行号,如下图。在normal模式下,按下行号,再按下G,光标可以定位到行号所在行,如按下3G,如下图。
7.VI的有全局替换命令。在command-line模式下(在插入模式时,按Esc,再按:,可以切换到该模式),如下命令将文中的全部Mind替换为mind。需要替换时,可按照这个命令格式,更换Mind以及mind字符串即可。 g/Mind/s//mind/g
- VI使用练习 (1)将以下三行内容输入到lab2目录下的myh.sh文件; I am a student from anhui university of technology. I major in computer science. I am a freshman. 截图如下:
(2)将以上全部内容复制粘贴20遍后,保存退出。内容如下: I am a student from anhui university of technology. I major in computer science. I am a freshman. I am a student from anhui university of technology. I major in computer science. I am a freshman. .........截图如下:
(3)删除第20、35行,保存。注意,(一)由于用Vi编号后,(用dd)删除一行后,行号会依序变换,因此,先删除第35行,再删除第20行;(二)删除一行后,不要留下空行。截图如下:
二、Shell-if分支
Shell的if完整结构如下:
if 条件1 #如果条件1为真
then #那么
命令1 #执行命令1
elif 条件2 #如果条件1不成立,条件2成立
then #那么
命令2 #执行命令2
else #如果条件1,2均不成立
命令3 #那么执行命令3
fi #完成
其中elif以及else分支可以没有。if以及fi是必须的。if结构也可以嵌套,if结构里面包含内层if结构。
用vi打开myif.sh输入以下程序,并保存退出。
: 符号在Shell中表示真(true)。
Vi 创建的文件默认没有执行权限,可以这样执行Shell程序:/bin/sh myif.sh
•
也可以给(文件创建者既文件拥有者)加上执行权限,再执行。
1.常用Shell的数学测试条件如下:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
条件测试命令是test,或[ ].
调试以下mymath.sh程序,是当由Shell传送的位置参数$1大于50,就输出$1+$2,否者输出$1-
2.Shell常用的文件测试如下: -d:目录为真 -f:普通文件为真 -r:可读为真 -s:长度不为0为真 -w :可写为真 -x:可执行为真 调试以下myfile.sh程序,(给文件创建者既文件拥有者添加执行权限后)输入 ./myfile.sh /usr/bin运行,它的运行结果是什么?
3.Shell中的常用字符串测试条件如下: = 两个字符串相等。 != 两个字符串不等。 -z 空串。 -n 非空串。 以下mystr.sh程序是比较两个字符串是否相等,改正其中的错误,使得它的输出结果正确。
4.if分支练习。在lab2目录下编写一个Shell程序,文件名为myifhomework.sh。该程序实现将当前目录下的myif.sh拷贝到(当前子目录)mytest目录下。请不要在mytest目录放其它任何内容。具体要求如下: (1)判断当前目录下是否有mytest目录,可能需要用到-d条件测试; (2)如果没有mytest则建立该目录,可能要用到mkdir命令; (3)将当前目录下的myif.sh(本次实验创建的myif.sh)拷贝到mytest目录下,文件名仍然叫做myif.sh; 程序截图,运行结果截图。
三、While 进入实验平台,打开终端后,cd ~进入~目录,cd lab3目录进入lab3目录(如果没有lab3目录,需要使用mkdir lab3建立lab3目录后,再进入)。
1.Shell中的while结构如下: while 命令 do 命令1 命令2 . . . done 其中: do以及done之间叫做循环体; while后面的命令执行为真后,执行一次循环体,循环体执行完后,再次执行while后面的命令,如果while后面的命令执行为真,再次执行循环体,如此循环往复。直到执行while后面的命令为假时,退出while循环。 while后面可以是一般命令,也可以数学、字符串以及文件等的test命令,也可以一般命令。 执行为真的意思是指该命令执行没有问题,得到了正确执行,有了符合系统预定的输出结果,一般不是指在屏幕(标准输出设备的)的打印输出。 执行为假的意思是指该命令执行过程中出现了问题(与系统原来的设计不符合),这时一般会向屏幕(标准输出设备的)的打印有关错误输出。 Linux系统中,命令执行时的真,是该命令执行后给Linux系统返回的退出码,"0"表示没有问题,正确,为真;反之,其它情况,其它值为假。 (1)在lab3目录下,编写以下mywhile.sh程序。编写完后,使用命令chmod u+x mywhile.sh修改执行权限,运行后,它的输出是什么?
(2)在lab3目录下使用while循环编写mywhilehomework.sh的程序,将mystu.db文件内容读出来显示在屏幕(显示器)上。mystu.db文件内容(有三行内容)如下: Zhangsan m 19 Lisi f 20 Wangwu m 19 程序截图,运行结果截图如下。
四、For 进入实验平台,打开终端后,cd ~进入~目录,mkdir lab3建立lab3目录后,cd lab3目录进入lab3目录。
Shell的for结构如下: for 循环变量 in 值列表 do 命令1 命令2⋯ done 其中: do与done之间是循环体; 列表中的值按照从左向右的次序,依次赋给循环变量,每赋值一次,执行一次循环体; 变量可以在循环体使用; (1)在lab3目录下,编写以下myfor.sh程序。编写完后,使用命令chmod u+x myfor.sh修改执行权限,运行后,它的输出是什么?注意:值列表部分中没有引号
2.Shell的值列表除了可以直接列出值之外,还可以将命令的结果作为值列表。如,在for的值列表部分使用``反引号(一般与~是一个按键)执行命令字符串,(向标准输出设备输出)结果就成为了for循环的值列表部分。
for 循环变量 in 命令字符串
#注意这是反引号
do
命令1
命令2⋯
done
(1)在lab3目录下,编写以下myfor2.sh程序。编写完后,使用命令chmod u+x myfor2.sh修改执行权限,它的输出是什么?
3.for练习。在lab3目录下使用for循环编写myforhomework.sh的程序,打印九九乘法表。程序截图,运行结果截图。
4.Linux Shell中,for与while有和异同。 • for:通常用于已知迭代次数或遍历固定范围的情况。 • while:通常用于条件判断为真的情况下,直到条件不再成立为止。