(一) 文件和目录操作
目的
- 熟悉Linux文件目录结构
- 掌握Linux在线帮助
- 掌握文本操作命令
- 掌握文件、目录操作命令
内容
- 在线帮助使用
- 显示、改变文件目录
- 显示文本文件
- 匹配文本文件
- 文本文件排序
- 复制、删除、移动文件
- 复制、删除、移动目录文件
准备
教学服务器中,目录/var/materials下保存了本实验用到文件
步骤和要求
- 登录主机教学服务器
用户名:学号
口令:123456(登录后用passwd命令修改口令)
passwd默认改变当前用户口令,只有root可以指定用户名,为指定用户设置口令。
- 练习cd、ls、pwd等命令,理解每个命令功能和显示信息的意义
pwd :显示当前工作目录; “/home/2018013270”表示显示该普通用户这一工作目录。
cd /:切换当前工作目录;从当前目录切换至根目录下。
pwd:显示当前工作目录;当前工作目录根目录下“/”。
cd /home:切换当前工作目录;从当前根目录切换至home下。
pwd:显示当前工作目录;当前工作目录是用户主目录“/home”。
cd 个人学号 :切换当前工作目录;从当前根目录切换至用户主目录下。
pwd:显示当前工作目录;当前工作目录是用户主目录“/home/2018013270”。
cd ..:返回上一级目录;即返回至home目录下。
cd /etc:切换当前工作目录;从当前根目录切换至/etc目录下。
cd:返回用户主目录;从/etc切换至/home/2018013270下。
cd /var/materials:切换当前工作目录;从当前用户主目录切换至materials目录下。
pwd:显示当前工作目录;当前工作目录是用户主目录“/var/materials”。
cd ..:返回上一级目录;即返回至var目录下。
pwd: 显示当前工作目录;当前工作目录是用户主目录“/var”。
cd: 返回用户主目录;从/var切换至/home/20181013270下。
ls –l:列目录并以长格式显示文件信息;第一个字母d意味着内容是目录或者文件。如果是‘-’,这意味着它的内容是文件。前3个rwx字符是文件的拥有者的权限,第二组3rwx是文件的所有组的权限,最后的rwx是对其他人访问文件的权限。第2列这行告诉我们有多少链接指向这个文件。第3列这行告诉我们谁是这个文件/文件夹的所有者。第4列这行告诉我们谁是这个文件/文件夹的所有组。第5列这行告诉我们这个文件/文件夹的以字节为单位的大小。 目录的大小总是4096字节。第6列这告诉我们文件最后的修改时间。第7列这告诉我们文件名或者目录名。
ls –l .:列出当前目录下的文件并以长格式显示信息。
ls -al:列目录并以长格式显示文件信息,-a表示显示所有文件,其中,包括以’.’开头的隐藏文件。
ls –ld .:-d表示只列出目录,-l表示以长格式显示文件信息;该命令表示列出当前目录下的目录并以长格式显示信息。
ls –ld /home:该命令表示列出/home目录下的目录并以长格式显示文件信息。
ls –ld ~:该命令表示列出/home/2018013270用户主目录下的目录并以长格式显示文件信息。
- 练习显示文本文件命令,理解每个命令功能和显示信息的意义
cd :返回用户主目录。
cp /var/materials/stu.txt ./:文件复制;将/var/materials/stu.txt文件复制到当前目录下。
cp /var/materials/he* ./:文件复制;将“/var/materials/he*.txt“ he开头的所有文件复制到当前目录下。
cp /var/materials/lastlogs ./:文件复制;将/var/materials/lastlogs文件复制到当前目录下。
cat hello.c:文件内容显示;显示hello.c文件内容。
cat hello.c hello.c.bak:文件内容显示;显示hello.c和hello.c.bak文件内容。
cat he*:文件内容显示;显示以he开头的所有文件内容。
cat *.sh:文件内容显示;显示以.sh结尾的所有文件内容。
more ex.sh:more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。查看ex.sh的文件内容。
more stu.txt:more命令和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。查看stu.txt的文件内容。
more stu*:查看以stu开头的所有文件内容;分屏显示。
head -n 5 stu.txt:查看文件内容的开头,-n表示开头行数;该命令表示查看stu.txt文件内容的头五行。
tail -n 3 stu.txt:查看文件内容的结尾,-n表示行数;该命令表示查看stu.txt文件内容的最后三行。
- 练习建立、删除、移动目录文件命令,理解每个命令功能和显示信息的意义
cd :返回用户主目录。
mkdir dir1:创建目录;在用户主目录下创建dir1的目录。
mkdir dir2:创建目录;在用户主目录下创建dir2的目录。
mkdir dir2/dir21:创建目录;在dir2下创建dir21的目录。
mkdir dir2/dir22:创建目录;在dir2下创建dir22的目录。
mkdir /dir2/dir23:创建目录;在dir2下创建dir23的目录。
mkdir ./dir2/dir24:创建目录;在dir2下创建dir24的目录。
mkdir –p dir3/dir31/dir311/dir3111:-p表示创建多级目录;即在用户主目录下创建dir3目录,在它下创建dir31目录,在它下创建dir311目录,在它下创建dir3111目录。
rmdir –p dir3:删除空目录;由于dir3下还有目录,所以不能直接删除dir3目录。
rmdir –p d2:删除空目录;由于没有创建d2目录,所以无法删除。
mv stu.txt ex.sh dir1:移动或文件更名;将stu.txt和ex.sh源文件移动到dir1中。
rm dir1:删除文件或目录;删除dir1目录,由于dir1中还有stu.txt文件,所以不能删除。
rm dir1 –r:-r 表示递归删除所有的子目录及文件;删除dir1目录即所有子目录及文件。
rm dir2:删除文件或目录;删除dir2目录,由于dir2中还有其他子目录及文件,所以不能删除。
rmdir dir3:删除空目录;由于dir3下还有目录,所以不能直接删除dir3目录。
- 练习ln命令,理解每个命令功能和显示信息的意义
cd:返回用户主目录。
ln –s /var/materials ma:创建符号链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接它就可以,不必重复的占用磁盘空间。目标文件ma的内容分指向源文件。
ln -s /etc/passwd pw:创建符号链接;pw的内容指向/etc/passwd中的内容。
ls –la .:列当前工作目录并以长格式显示文件信息,-a表示显示所有文件,其中,包括以’.’开头的隐藏文件。这里就包括了ma->/var/materials和pw->/etc/passwd。
cat pw:文件内容显示;查看/etc/passwd的文件内容。
cd ma:文件内容显示;查看/var/materials的文件内容。
ls –ld .:-d表示只列出目录,-l表示以长格式显示文件信息;该命令表示列出当前目录下的目录并以长格式显示信息。
ls –ld ..:该命令表示列出父级目录下的目录并以长格式显示信息。
cd:返回用户主目录。
ls –ld ../其他同学学号:列出../其他同学学号的目录并以长格式显示信息。
ls –ld /home/其他同学学号:列出home/其他同学学号的目录并以长格式显示信息。
- 练习管道及输出重定向
cd:返回用户主目录。
ls | wc -l:将前一个命令的输出作为后一个命令的输入,wc表示统计,-l表示统计行数;列出当前目录下的所有文件及目录并统计行数。
ls -l | grep ^- > txt:grep表示文件内容筛选,^表示与‘-’开头的行匹配,>表示输入重定向,其功能是将命令的输出结果保存到指定文件中;即该命令表示列出的所有文件信息通过管道并筛选然后将输出结果保存到txt中。
ls -l | grep -v ^d | grep -v ^l | wc -l > cnt :grep表示文件内容筛选,v表示显示不匹配的行,^d表示与‘d’开头的行匹配,wc表示统计,-l表示统计行数, >表示输入重定向,其功能是将命令的输出结果保存到指定文件中;该命令表示列出用户主目录下的文件信息通过管道输出显示不匹配以d开头的行,再通过管道输出显示不匹配以l开头的行,再通过管道统计行数,在将其保存到cnt文件中。
- 进程管理
ps:查看进程。
ps -aux:查看进程,-a表示显示所有用户进程,-u表示按用户名和启动时间的顺序显示进程,-x表示显示无控制台进程。
ps -u root:显示root用户进程信息。
top:与ps命令功能相同,可以查看进程。
kill -9 2018:kill的功能是向指定进程发送信号,-9表示强行杀死指定进程,2018是PID值。
(二)文本处理
目的
- 掌握vi操作
- 掌握grep命令应用
内容
- 新建文本文件
- 编辑文本文件
- 文本查找、替换操作
准备
复制目录/var/materials下文件stu.txt到用户主目录,复制目录/etc下passwd文件到用户主目录
步骤和要求
- 新建c源程序文件feb.c,编译执行,显示费波纳奇数列:
1 1 2 3 5 8 13 21 ...
vi feb.c
gcc feb.c -o feb
./feb
启动vi编辑器,并输入i输入代码,
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i;
- int a[20];
- a[0]=1;a[1]=1;
- for(i=2;i<20;i++)
- {
- a[i]=a[i-1]+a[i-2];
- }
- for(i=0;i<20;i++)
- {
- printf("%d ",a[i]);
- }
- return 0;
- }
复制代码
然后通过Esc返回至命令模式中,在输入:wq退出;
输入gcc feb.c -o feb编译
./feb执行,然后会显示斐波那契数列。
- 分别打开stu.txt文件,练习vi命令模式命令:
- 移动光标
Ctrl – a :移到行首 ;Ctrl – e :移到行尾;Ctrl – b :往回(左)移动一个字符
Ctrl – f :往后(右)移动一个字符;Alt – b :往回(左)移动一个单词;Alt – f :往后(右)移动一个单词
Ctrl – xx :在命令行尾和光标之间移动;M-b :往回(左)移动一个单词;M-f :往后(右)移动一个单词
- 查找、删除、修改字符
查找 :/内容
删除 [n] x 从光标当前字符开始的n个字符
修改 r将当前光标处的字符替换为r后键入的字符;
R s用字符串的内容替换从当前光标开始的相应字符,直到Esc
- 删除、粘贴行
删除行:[n]dd 从当前行向后的n行 粘贴行:[n] p
- 复制、粘贴行
复制行:[n]yy 复制当前行/当前行开始的n 粘贴行:[n] p
(5)恢复编辑
u表示取消上一次编辑的操作; .表示恢复上一次的操作。
- 打开passwd文件,练习vi末行命令:
- 删除、复制、移动多行
:1,5d 删除第1-5行;
:10,20 co 5 复制第10-20行到第5行;
:5,8 m 15 移动第5-8行到第15行。
- 写文件、读文件,指定文件路径(另存)
:5,50 w doc 把第5-50行内容写到doc中
- 打开文件stu.txt,练习vi末行替换命令
- 将文件中每行“软件工程”替换为“软工”
:1,$ s/软件工程/软工
5. 练习匹配文本文件命令,理解每个命令功能和显示信息的意义
grep ^2018 stu.txt
在stu.txt中搜索以2018开始的行并输出。
grep 3$ stu.txt
在stu.txt中搜索以3结束的行并输出。
grep -n ‘2018013[0-9][0-9][13579]’ stu.txt
在stu.txt中搜素以2018013开头剩余三位数在[0-9][0-9][13579]的集合中的行,并显示行号。
grep 软工1081 stu.txt > rg181.txt
在stu.txt中搜索软工1081并将其内容保存至rg181.txt中。
grep软工1082 stu.txt > rg182.txt
在stu.txt中搜索软工1082并将其内容保存至rg182.txt中。
grep软工1083 stu.txt > rg183.txt
在stu.txt中搜索软工1083并将其内容保存至rg183.txt中。
lastlog | grep Never | wc -l
统计从未登录过的用户信息的总行数。
lastlog | grep -v 从未登录 | wc -l
统计最近一次登陆过的用户信息的总行数。
wc rg182.txt统计rg182.txt文件中的行数,字节数和单词数。
wc -l rg182.txt统计rg182.txt文件中的行数。
(三)用户和文件安全
目的
- 理解用户、组、文件安全概念
- 练习useradd、chmod等命令
内容
- 添加用户
- 查看文件、目录的安全许可
- 改变文件、目录的安全许可
- 理解文件和目录的权限、文件所有者、属组的概念
准备
虚拟机中的Linux
步骤和要求
- 使用ls -l命令,浏览目录 ./、/、/etc、/home、/sbin、/bin及其下文件的权限,理解显示信息的意义
ls -l是以长格式列出指定目录下的所有文件信息,在目录/home下只有文件所有者有读写执行权限,所属组和其他用户任何权限也没有;在目录/sbin /bin /etc下只有文件所有者有读写执行权限,所属组和其他用户有可读和可执行的权限;在目录/下只有文件所有者有读写执行权限,所属组和其他用户有可读的权限。
- 新建用户user1、user2,并设置口令
useradd user1
passwd user1
useradd user2
passwd user2
useradd有增添用户的功能,passwd可以改变用户口令默认改变当前用户口令,只有root可以指定用户名,为指定用户设置口令。
- 切换到不同的虚拟控制台终端,使用分别用user1、user2身份用户登录系统,使用ls –l或ls -al命令查看文件的权限,理解显示信息的意义
使用user1,user2身份登录系统,查询文件权限时:文件所有者有读写执行的权限,所属组和其他用户有可读和可执行的权限。
- 建立c源程序文件、编译产生可执行文件,查看、改变这些文件的权限,显示、打开或执行文件,理解显示信息的意义
vi/vim 建立c源程序文件;编译gcc 源文件名 -o 目标文件名;执行./文件名。
通过ls -l可以查看文件权限;
通过chmod可以改变文件权限,chmod[augo][+-=][rux]文件列表,该命令可以增加或删除读,写,执行权限。
cat 文件内容显示。
- 建立目录、在目录下建立c源程序文件、编译产生可执行文件,查看、改变目录的权限,查看、打开或执行文件,理解显示信息的意义
通过mkdir创建目录
vi/vim 建立c源程序文件;编译gcc 源文件名 -o 目标文件名;执行./文件名。
通过ls -l可以查看文件权限;
通过chmod可以改变文件权限,chmod[augo][+-=][rux]文件列表,该命令可以增加或删除读,写,执行权限。
cat 文件内容显示。
思考题
- 如何将一个已经登录的用户踢出Linux系统,写出思路、步骤及相关命令
输入w命令查看已登录用户信息 # w
使用命令pkill -kill -t 用户tty # pkill -kill -t pts/2
验证操作是否成功 # w
- 如何统计当前系统的用户数,写出思路及相关命令
who/w命令是显示目前登陆系统的用户信息,执行who命令可以得知目前哪些用户登入系统,#who
统计用户个数可以利用wc –l ,算出行数;
然后利用管道实现 who|wc -l
- 了解passed,group的文件内容。
/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式:
name:password:uid:gid:comment:home:shell
name 用户登录名
password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。
uid 指定用户的 UID。用户登录进系统后,系统通过该值,而不是用户名来识别用户。
gid GID。如果系统要对相同的一群人赋予相同的权利,则使用该值。
comment 用来保存用户的真实姓名和个人细节,或者全名。
home 指定用户的主目录的绝对路径。
shell 如果用户登录成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。
如果/etc/passwd文件存放的是用户的信息,由6个分号组成的7个信息,解释如下
(1):用户名。
(2):密码(已经加密)
(3):UID(用户标识),操作系统自己用的
(4):GID组标识。
(5):用户全名或本地帐号
(6):开始目录
(7):登录使用的Shell,就是对登录命令进行解析的工具。
例如:abc:x:501:501::/home/abc:/bin/bash
/ect/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
此文件是记录组 ID(GID)和组名相对应的文件。可以看到,此文件中每一行各代表一个用户组。在前面章节中,我们曾创建 lamp 用户,系统默认生成一个 lamp 用户组,各用户组中,还是以 ":" 作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:也就是是用户组的名称,有字母或数字构成。同 /etc/passwd 中的用户名一样,组名也不能重复。
密码:和 /etc/passwd 文件一样,这里的 "x" 仅仅是密码标识,真正加密后的组密码默认保存在 /etc/gshadow 文件中。
GID:是群组的 ID 号,Linux 系统就是通过 GID 来区分用户组的,同用户名一样,组名也只是为了便于管理员记忆。
该用户组中的用户列表:此字段列出每个群组包含的所有用户。如果该用户组是这个用户的初始组,则该用户不会写入这个字段,可以这么理解,该字段显示的用户都是这个用户组的附加用户。