实验一 掌握基本SHELL命令
【实验要求】
- 所有练习题保留题目要求,在题目要求后面直接贴上在虚拟机执行的命令及输出结果(可从虚拟机拷贝过来),或者是屏幕截图。
- 请保持排版整齐。
提示:可在练习开始前在虚拟机中新建一个当前系统的快照---“命令练习”,以备以后恢复快照。
【实验练习题】
1.完成下列文件和目录的基本操作:
(1)查看当前工作目录为用户的主目录。
直接ls即可显示当前目录
deepin@deepin-MJG:~/Desktop$ ls
'eclipse 快捷方式' mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz test
deepin@deepin-MJG:~/Desktop$ cd #退回到主目录
deepin@deepin-MJG:~$ ls
Bookmarks.html Documents eclipse epidemic_management-0.0.1-SNAPSHOT.jar Pictures
Desktop Downloads eclipse-workspace Music
(2)提示:mkdir
在当前家目录下创建一个新目录,目录名用自己名字的全拼,以下用yournamedir指代。另外,下面出现的yourname指代你的姓名全拼定义的文件。
mkdir MJG
(3)提示:touch、cp
创建两个文件:yourname.my(编辑yourname.my文件,内容为自己的班级学号姓名等信息)、空文件yourname-2.my,
将创建的文件拷贝到新目录yournamedir中,再将yourname-2.my更名为yourname-file.my。
deepin@deepin-MJG:~/Desktop$ mkdir MJG
deepin@deepin-MJG:~/Desktop$ touch mjg.file
deepin@deepin-MJG:~/Desktop$ touch mjg.file2
deepin@deepin-MJG:~/Desktop$ cp mjg.file MJG #复制文件
deepin@deepin-MJG:~/Desktop$ mv mjg.file2 MJG #剪切(移动)文件
deepin@deepin-MJG:~/Desktop$ cd MJG
deepin@deepin-MJG:~/Desktop/MJG$ ls
mjg.file mjg.file2
deepin@deepin-MJG:~/Desktop/MJG$ mv mjg.file2 mjg.filerename
deepin@deepin-MJG:~/Desktop/MJG$ ls
mjg.file mjg.filerename
Test建立文件链接:
deepin@deepin-MJG:~/Desktop/MJG$ ls
mjg.file mjg.filerename test
deepin@deepin-MJG:~/Desktop/MJG$ ln mjg.file ~/test
deepin@deepin-MJG:~/Desktop/MJG$ ls -l mjg.file ~/test
-rw-r--r-- 2 deepin deepin 0 11月 26 08:27 /home/deepin/test
-rw-r--r-- 2 deepin deepin 0 11月 26 08:27 mjg.file
deepin@deepin-MJG:~/Desktop/MJG$ stat mjg.file
文件:mjg.file
大小:0 块:0 IO 块:4096 普通空文件
设备:806h/2054d Inode:659366 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 08:47:49.252928014 +0800
最近更改:2020-11-26 08:27:56.634175265 +0800
最近改动:2020-11-26 08:47:49.248928122 +0800
创建时间:-
deepin@deepin-MJG:~/Desktop/MJG$ stat ~/test
文件:/home/deepin/test
大小:0 块:0 IO 块:4096 普通空文件
设备:806h/2054d Inode:659366 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 08:47:49.252928014 +0800
最近更改:2020-11-26 08:27:56.634175265 +0800
最近改动:2020-11-26 08:47:49.248928122 +0800
创建时间:-
#修改mjg.file文件后:
deepin@deepin-MJG:~/Desktop/MJG$ stat ~/test
文件:/home/deepin/test
大小:6 块:8 IO 块:4096 普通文件
设备:806h/2054d Inode:659366 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 08:51:45.332715173 +0800
最近更改:2020-11-26 08:51:45.328715216 +0800
最近改动:2020-11-26 08:51:45.328715216 +0800
创建时间:-
deepin@deepin-MJG:~/Desktop/MJG$ stat mjg.file
文件:mjg.file
大小:6 块:8 IO 块:4096 普通文件
设备:806h/2054d Inode:659366 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 08:51:45.332715173 +0800
最近更改:2020-11-26 08:51:45.328715216 +0800
最近改动:2020-11-26 08:51:45.328715216 +0800
创建时间:-
deepin@deepin-MJG:~/Desktop/MJG$ ls -l mjg.file ~/test
-rw-r--r-- 2 deepin deepin 6 11月 26 08:51 /home/deepin/test
-rw-r--r-- 2 deepin deepin 6 11月 26 08:51 mjg.file
deepin@deepin-MJG:~/Desktop/MJG$ rm -f mjg.file
deepin@deepin-MJG:~/Desktop/MJG$ ls -l mjg.file ~/test
ls: 无法访问'mjg.file': 没有那个文件或目录
-rw-r--r-- 1 deepin deepin 6 11月 26 08:51 /home/deepin/test
deepin@deepin-MJG:~/Desktop/MJG$ cat /home/deepin/test
hello
(4)提示:ln建软链接
创建yourname.my的软链接yourname-soft.my。
使用软链接文件yourname-soft.my显示yourname.my文件的内容,
如何能查看到文件yourname-soft.my 和yourname.my文件类型的区别?
deepin@deepin-MJG:~/Desktop/MJG$ cd test
deepin@deepin-MJG:~/Desktop/MJG/test$ ls
mjg.filerename
deepin@deepin-MJG:~/Desktop/MJG/test$ touch mjg.file
#当文件存在时无法建立软链接或者硬链接(不可用一个已知文件当做另一个已知文件的链接):
deepin@deepin-MJG:~/Desktop/MJG/test$ ln -s mjg.file mjg.filerename
ln: 无法创建符号链接'mjg.filerename': 文件已存在
deepin@deepin-MJG:~/Desktop/MJG/test$ ln -s mjg.filerename mjg.file
ln: 无法创建符号链接'mjg.file': 文件已存在
deepin@deepin-MJG:~/Desktop/MJG/test$ ln mjg.file mjg.filerename
ln: 无法创建硬链接'mjg.filerename': 文件已存在
#创建mjg.softfile的本地链接(快捷方式):
deepin@deepin-MJG:~/Desktop/MJG/test$ ln -s mjg.file mjg.softfile
deepin@deepin-MJG:~/Desktop/MJG/test$ ls -l mjg.file ~/mjg.softfile
ls: 无法访问'/home/deepin/mjg.softfile': 没有那个文件或目录
-rw-r--r-- 1 deepin deepin 0 11月 26 09:09 mjg.file
#创建mjg.softfile的软链接:
deepin@deepin-MJG:~/Desktop/MJG/test$ ln -s mjg.file ~/mjg.softfile
deepin@deepin-MJG:~/Desktop/MJG/test$ ls -l mjg.file ~/mjg.softfile
lrwxrwxrwx 1 deepin deepin 8 11月 26 09:14 /home/deepin/mjg.softfile -> mjg.file
-rw-r--r-- 1 deepin deepin 7 11月 26 09:13 mjg.file
deepin@deepin-MJG:~/Desktop/MJG/test$ ls -a
. .. mjg.file mjg.filerename mjg.softfile
#软链接Inode不一样:
deepin@deepin-MJG:~/Desktop/MJG/test$ stat mjg.file
文件:mjg.file
大小:7 块:8 IO 块:4096 普通文件
设备:806h/2054d Inode:787774 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 09:13:53.491020046 +0800
最近更改:2020-11-26 09:13:53.475020165 +0800
最近改动:2020-11-26 09:13:53.475020165 +0800
创建时间:-
deepin@deepin-MJG:~/Desktop/MJG/test$ stat /home/deepin/mjg.softfile
文件:/home/deepin/mjg.softfile -> mjg.file
大小:8 块:0 IO 块:4096 符号链接
设备:806h/2054d Inode:659384 硬链接:1
权限:(0777/lrwxrwxrwx) Uid:( 1000/ deepin) Gid:( 1000/ deepin)
最近访问:2020-11-26 09:15:11.250467485 +0800
最近更改:2020-11-26 09:14:24.418795154 +0800
最近改动:2020-11-26 09:14:24.418795154 +0800
创建时间:-
#ls -la查看文件详细信息
deepin@deepin-MJG:~/Desktop/MJG/test$ ls -la
总用量 16
drwxr-xr-x 2 deepin deepin 4096 11月 26 09:12 .
drwxr-xr-x 3 deepin deepin 4096 11月 26 08:56 ..
-rw-r--r-- 1 deepin deepin 7 11月 26 09:13 mjg.file
-rw-r--r-- 1 deepin deepin 21 11月 26 08:53 mjg.filerename
lrwxrwxrwx 1 deepin deepin 8 11月 26 09:12 mjg.softfile -> mjg.file
(5)提示:ln建硬链接
建立一个yourname.my文件的链接文件yourname-hard.my。
删除yourname.my后能浏览输出yourname-hard.my的内容吗?
deepin@deepin-MJG:~/Desktop/MJG/test$ ln mjg.filerename mjg.test
deepin@deepin-MJG:~/Desktop/MJG/test$ ls
mjg.file mjg.filerename mjg.softfile mjg.test
删除后依然能浏览内容。
(6)提示:cat,head,tail,more,less
显示文件/etc/passwd内容的命令,体会各有什么不同。
cat 显示本文文件、连接文件内容
命令格式:cat [选项] [文件]
【例】 假设有file1、file2、file3三个文本文件,
将这三个文本文件连接起来输出到文本文件file4中。
[user@localhost ~]$ cat file1 file2 file3>file4
2.more 分页显示文本文件
命令格式:more [选项] [文件]
3.head 显示指定文件的前若干行
命令格式:head -n 行数值 [文件]
默认缺省显示文件的前10行内容。
head -5 /etc/passwd表示显示/etc/passwd文件的前5行。
4.tail 查看文件末尾数据
命令格式:tail -n 行数值 [文件]
默认缺省显示文件的后10行内容
tail -5 /etc/passwd表示显示/etc/passwd文件的后5行。
- grep [选项] 查找条件 源文件
-i 查找时忽略大小写
-v 反转查找,输出与查找条件不相符的行
要查找的字符串以双引号括起来
“^……”表示以……开头,“……$”表示以……结尾
“^$”表示空行
deepin@deepin-MJG:~/Desktop/MJG/test$ ls
mjg.file mjg.softfile mjg.test
deepin@deepin-MJG:~/Desktop/MJG/test$ cat mjg.test
hello
my name is MJG
lalala
deepin@deepin-MJG:~/Desktop/MJG/test$ more mjg.test
hello
my name is MJG
lalala
deepin@deepin-MJG:~/Desktop/MJG/test$ head -1 mjg.test
hello
deepin@deepin-MJG:~/Desktop/MJG/test$ tail -2 mjg.test
lalala
deepin@deepin-MJG:~/Desktop/MJG/test$ tail mjg.test
hello
my name is MJG
lalala
deepin@deepin-MJG:~/Desktop/MJG/test$ grep 'hell' mjg.test
hello
deepin@deepin-MJG:~/Desktop/MJG/test$ grep 'my name' mjg.test
my name is MJG
deepin@deepin-MJG:~/Desktop/MJG/test$ grep 'llo$' mjg.test
hello
deepin@deepin-MJG:~/Desktop/MJG/test$ less mjg.test
deepin@deepin-MJG:~/Desktop/MJG/test$ grep -v "hell" mjg.test
my name is MJG
lalala
(7)提示:find,输出重定向>
查找/etc目录下以名字中包含“conf”的文件,保存查到的结果信息到/tmp/yourname-find中。
root@deepin-MJG:/home/deepin/Desktop/MJG/test# find /etc -name "*conf*" -type f >/home/deepin/Desktop/MJG/test/test.file
find输出重定向可以实现上述操作将内容保存到文件,也可以通过文件复制方式将查询到的文件复制到指定文件夹。
文件复制方式:
当权限不够时:
deepin@deepin-MJG:~/Desktop/MJG/test$ find /etc -name "*conf*" -type f
find: ‘/etc/vpnc’: 权限不够
find: ‘/etc/polkit-1/localauthority’: 权限不够
find: ‘/etc/chatscripts’: 权限不够
find: ‘/etc/ppp/peers’: 权限不够
find: ‘/etc/ipsec.d/private’: 权限不够
find: ‘/etc/cups/ssl’: 权限不够
find: ‘/etc/ssl/private’: 权限不够
deepin@deepin-MJG:~/Desktop/MJG/test$ su root
密码:
root@deepin-MJG:/home/deepin/Desktop/MJG/test# find /etc -name "*conf*" -type f
/etc/gtk-3.0/im-multipress.conf
/etc/ca-certificates.conf
/etc/libaudit.conf
/etc/resolv.conf
/etc/ucf.conf
...
将查询结果保存到指定位置:
root@deepin-MJG:/home/deepin/Desktop/MJG/test# find /etc -name "*conf*" -type f -exec cp '{}' /tmp/myfind \;
deepin@deepin-MJG:/tmp$ mkdir myfind
deepin@deepin-MJG:/tmp$ cd myfind
deepin@deepin-MJG:/tmp/myfind$ ls
000-default.conf fonts.conf php7.3.conf
00-disable-autospawn.conf fprintd.conf pie.conf
...
(8)提示:grep
在文件/etc/passwd中查找到所有包含字符串nologin的行,将找出的行内容保存到一个名为yourname-grep的文件。
deepin@deepin-MJG:~/Desktop/MJG/test$ grep /sbin/nologin /etc/passwd>/home/deepin/Desktop/MJG/test/test.file
2.完成下列文件打包(带压缩)
(1)打包归档当前家目录下的~/yournamedir,生成~/yournamedir.tar。
命令格式:tar [参数] 打包文件名 文件
选项 说明
-c 产生.tar打包文件
-v 列出打包解包的详细过程
-f 指定打包文件的名称
-z 以.gz的格式压缩或解压打包文件
-j 以.bz2的格式压缩或解压打包文件
-x 从打包文件中还原文件
-C 解压到指定目录
-r 将文件追加到打包文档末尾
打包:
tar -czvf [存放路径]打包文件名.tar.gz 源文件或目录
tar -cjvf [存放路径]打包文件名.tar.bz2 源文件或目录
tar cJvf [存放路径]打包文件名.tar.xz 源文件或目录
解包:
tar -xzvf [存放路径]打包文件名.tar.gz [-C 解压目录]
tar -xjvf [存放路径]打包文件名.tar.bz2 [-C 解压目录]
tar xJvf [存放路径]打包文件名.tar.xz [-C 解压目录]
【 例】将当前目录下的file.c文件添加到文件myfile.tar中。
[user@localhost ~]$ tar rvf myfile.tar file.c
【 例 】将当前用户目录下的目录文件myfile包括的所有文件用tar命令打包,然后用gzip命令压缩,打包压缩后的文件名为myfile.tar.gz。
[user@localhost ~]$ tar -zcvf myfile.tar.gz myfile/
【 例】查看myfile.tar.gz压缩文件的内容。
[user@localhost ~]$ tar -ztvf myfile.tar.gz
【 例】将文件打包然后用bzip2命令压缩。将当前用户目录/home/user下的目录文件myfile包括的所有文件用tar命令打包,并且用bzip2命令压缩,打包压缩后的文件名为myfile.tar.bz2。
[user@localhost ~]$tar -jcvf myfile.tar.bz2 myfile/
【 例】用tar命令解压经过bzip2压缩的tar文件。由于使用bzip2压缩,所以要加上j这个参数。将压缩文件myfile.tar.bz2解压到当前目录下。
[user@localhost ~]$tar -jxvf myfile.tar.bz2
Test打包(带压缩):root@deepin-MJG:/home/deepin/Desktop/MJG/test# tar czvf mjg.file.tar.gz mjg.file
mjg.file
root@deepin-MJG:/home/deepin/Desktop/MJG/test# ls
mjg.file mjg.file.tar.gz mjg.softfile mjg.test test.file
Test解包:
root@deepin-MJG:/home/deepin/Desktop/MJG/test# tar -xzvf mjg.file.tar.gz mjg.file
mjg.file
打包当前test目录:
deepin@deepin-MJG:~/Desktop/MJG$ tar -zcvf test.tar.gz test/
test/
test/mjg.test
test/mjg.file.tar.gz
test/mjg.softfile
test/test.file
test/mjg.file
test/mjg/
- 查看~/yournamedir.tar归档文件包里的内容。
查看test.tar.gz内的内容:
deepin@deepin-MJG:~/Desktop/MJG$ tar -ztvf test.tar.gz
drwxr-xr-x deepin/deepin 0 2020-11-26 19:44 test/
-rw-r--r-- deepin/deepin 29 2020-11-26 12:24 test/mjg.test
-rw-r--r-- root/root 139 2020-11-26 19:34 test/mjg.file.tar.gz
lrwxrwxrwx deepin/deepin 0 2020-11-26 09:12 test/mjg.softfile -> mjg.file
-rw-r--r-- deepin/deepin 31 2020-11-26 18:39 test/test.file
-rw-r--r-- deepin/deepin 7 2020-11-26 09:13 test/mjg.file
drwxr-xr-x root/root 0 2020-11-26 19:37 test/mjg/
(3)将归档文件~/yournamedir .tar解包出来,到指定文件夹yourname-extract。
解包:
deepin@deepin-MJG:~/Desktop/MJG$ tar -xzvf test.tar.gz
test/
test/mjg.test
test/mjg.file.tar.gz
test/mjg.softfile
test/test.file
test/mjg.file
test/mjg/
3.权限相关操作
(1)修改你的用户的密码。
passwd [选项] 用户名
deepin@deepin-MJG:~/Desktop/MJG$ passwd deepin
为 deepin 更改 STRESS 密码。
Current password:
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
(2)从你的普通用户切换到root用户。
deepin@deepin-MJG:~/Desktop/MJG$ su root
密码:
root@deepin-MJG:/home/deepin/Desktop/MJG#
(3)新建目录/home/yourname,并设置权限,提示:chown,chmod
1)将此目录的所有者设置为root,并设置所有者具有读写执行权限。
deepin@deepin-MJG:/home$ su root
密码:
root@deepin-MJG:/home# mkdir MJG
root@deepin-MJG:/home# chmod u+rwx MJG
root@deepin-MJG:/home# chmod goa-rwx MJG
2)除了所有者,任何用户对改文件只能只读。
root@deepin-MJG:/home# chmod goa+r MJG
4.建一个文件/root/ab,使用文字设定法对文件设置权限,用户所有者为读取、写入和执行权限,同组用户为读取和写入权限,而其他用户没有任何权限。
deepin@deepin-MJG:~/Desktop$ su root
密码:
root@deepin-MJG:/home/deepin/Desktop# mkdir ab
root@deepin-MJG:/home/deepin/Desktop# chmod u+rwx ab
root@deepin-MJG:/home/deepin/Desktop# chmod g+rw-x ab
root@deepin-MJG:/home/deepin/Desktop# chmod oa-rwx ab
- cat带行号浏览/etc/passwd的内容,并利用重定向将内容写入yourname.txt文件,执行vi,编辑该文件,保留行号为10到20行的内容,其他删除,然后保存该文件。
root@deepin-MJG:/home/deepin/Desktop# cat /etc/passwd>test.txt
root@deepin-MJG:/home/deepin/Desktop# vim test.txt
使用vi 命令也可以:
root@deepin-MJG:/home/deepin/Desktop# vi test.txt
Vim中要保留10-20行数据首先将光标定位到第一行1G,然后删除1-9行9dd,然后定位到12G(10-20行数据实际为11行,删除要从第12行开始删除),然后dg删除后面所有数据,最后:wq!保存退出。
【恢复】体验快照功能,通过把虚拟机恢复到之前的 “命令练习”快照,可重新再练习一遍。