目录
1.练习cd、ls、pwd等命令,理解每个命令功能和显示信息的意义
3.练习建立、删除、移动目录文件命令,理解每个命令功能和显示信息的意义
1.新建c源程序文件feb.c,编译执行,显示费波纳奇数列:
1.使用ls -l命令,浏览目录 ./、/、/etc、/home、/sbin、/bin及其下文件的权限,理解显示信息的意义
3.切换到不同的虚拟控制台终端,使用分别用user1、user2身份用户登录系统,使用ls –l或ls -al命令查看文件的权限,理解显示信息的意义
4.建立c源程序文件、编译产生可执行文件,查看、改变这些文件的权限,显示、打开或执行文件,理解显示信息的意义
5.建立目录、在目录下建立c源程序文件、编译产生可执行文件,查看、改变目录的权限,查看、打开或执行文件,理解显示信息的意义
1.如何将一个已经登录的用户踢出Linux系统,写出思路、步骤及相关命令
(一) 文件和目录操作
目录/var/materials下保存了本实验用到文件
步骤和要求
登录主机教学服务器
1.练习cd、ls、pwd等命令,理解每个命令功能和显示信息的意义
pwd --查询当前目录,初始状态在当前用户的主目录(显示在home下的xxx用户中)
cd / --切换目录(切换到根目录下)
pwd --显示当前目录(当前目录为根目录”/”)
cd /home --切换目录(切换到根目录下的home目录)
pwd --显示当前目录(当前目录为根目录下的home目录)
cd s个人学号 --切换目录(切换到/home目录下的本用户目录sxxxxx用户名)
pwd --显示当前目录(当前目录在/home目录下的本用户目录sxxxx用户名)
cd .. --返回上一级目录(当前目录在/home目录下)
cd /etc --切换目录(切换到根目录下的etc目录)
cd --切换目录(当前目录在家目录~用户主目录)
cd /var/materials --切换目录(当前目录在/var/materials下)
pwd --显示当前目录(当前目录在/var/materials下) -- 显示路径
cd .. --切换到上一级目录
pwd --显示当前目录(当前目录在/var下)
cd --切换目录(当前目录在家目录~用户主目录)
ls –l --列出当前目录(用户主目录下)的详细信息
ls –l . --列出当前目录(用户主目录下)的详细信息
ls -al --列出当前目录下的所有文件(包括隐藏文件)的详细信息
ls –ld . --列出当前用户主目录下的目录的详细信息
ls –ld /home --列出根目录下home目录下的目录的详细信息
ls –ld ~ --列出当前用户主目录下的目录的详细信息
ls -s --每个文件后边打印出大小;
ls -S --文件按照大小排序;
ls -F --每个文件后边打印出类型 @->符号链接 | -> FIFOS / -> 目录 = ->套接字 * ->可执行
ls -R --递归显示所有文件夹中的文件
2.练习显示文本文件命令,理解每个命令功能和显示信息的意义
cd --切换到当前用户主目录(/home/xxxx用户名)
cp /var/materials/stu.txt ./ --将/var/materials/stu.txt复制到当前用户主目录
cp /var/materials/he* ./ --将/var/materials下以he开头的文件复制到当前用户主目录
cp /var/materials/lastlogs ./ --将/var/materials/lastlogs的文件复制到当前用户主目录
cat hello.c --将hello.c的内容呈现出来
cat hello.c hello.c.bak 【失败】
cat he* --将以he开头的文件的内容呈现出来
cat *.sh --”*”表示通配符,显示目录中可用的所有“sh”文件的内容
more ex.sh --将ex.sh的内容呈现出来
more stu.txt --将stu.txt的内容呈现出来
more stu* --将所有以stu开头的文件内容呈现出来
head -n 5 stu.txt --显示在stu.txt文件中的前5行内容
tail -n 3 stu.txt --显示在stu.txt文件中的后3行内容
3.练习建立、删除、移动目录文件命令,理解每个命令功能和显示信息的意义
cd --切换到当前用户主目录(~)
mkdir dir1 --在当前用户的主目录创建目录dir1
mkdir dir2 --在当前用户的主目录创建目录dir2
mkdir dir2/dir21 --创建目录dir2下的目录dir21
mkdir dir2/dir22 --创建目录dir2下的目录dir22
mkdir /dir2/dir23 --创建根目录dir2下的目录dir23【失败:mkdir无法实现连环创建,因为在根目录下没有dir2,即无法创建dir2下的dir23】
mkdir ./dir2/dir24 --在当前用户主目录下已创建的dir2中创建dir24
【‘ ./ ’代表当前用户目录 ‘ / ’代表根目录】
mkdir –p dir3/dir31/dir311/dir3111 --在当前用户主目录下连环创建dir3-dir31-dir311-dir3111
rmdir –p dir3 --【失败:rmdir只删除空目录,递归删除目录的参数是-r而不是-p】
rmdir –p d2 --【失败:不存在d2这个目录】
mv stu.txt ex.sh dir1 --将stu.txt和ex.sh移到dir1中
rm dir1 --【失败:rm默认删除文件,而dir1是目录】
rm dir1 –r --递归删除dir1下所有的子目录
rm dir2 --【失败:rm默认删除文件,而dir2是目录】
rmdir dir3 --【失败:rmdir只删除空目录,dir3非空】
rmdir 删除非空文件夹,递归删除 -r ;
rm 默认只删除文件 -r 递归删除目录,包括其内容(子目录) - 目录和文件 ;-f 不提示;
mkdir -m 777 aaa 创建拥有(rwx权限)的文件夹aaa ;
mkdir -p aaa/bbb/ccc 递归创建目录 ;
mkdir -v aaa 创建时返回创建信息 “mkdir:已创建目录 aaa ” ;
touch aaa.txt 创建aaa.txt文件;
4.练习ln命令,理解每个命令功能和显示信息的意义
cd --切换到当前用户的主目录
ln –s /var/materials ma --为/var/materials创建软链接ma
ln -s /etc/passwd pw --为/etc/passwd创建软链接pw
ls –la . --显示主目录下所有的文件(包括隐藏文件)的详细信息
cat pw --显示pw(链接文件的内容)
cd ma --返回到主目录下ma
ls –ld . --显示/ma下所有的目录的详细信息
ls –ld .. --显示父目录(上一级目录即当前用户主目录)下所有的目录详细信息
cd --返回到主目录
ls –ld ../其他同学学号--显示/home下其中一个用户的所有目录的详细信息
ls –ld /home/其他同学学号 --显示/home/下其中一个用户的所有的目录详细信息
ln //创建硬连接
ln -s //创建软连接,符号链接
硬链接:与原文件共享同一个 i 节点,相当于原文件的一个别名;硬链接 不可以跨越文件系统 ,创建时原文件必须存在,不能给目录创建目录链接。符号链接是一个独立的文件,有自己的 i 节点,内容保存的是指向真实文件的路径。可以跨越文件系统,创建时原文件可以不存在 。
5.练习管道及输出重定向
cd --切换到当前用户主目录
ls | wc -l --统计当前目录下目录/文件的总数
ls -l | grep ^- > txt --将当前目录下所有文件的详细信息中以‘-’(普通文件)开头的文件写到txt中
ls -l | grep -v ^d | grep -v ^l | wc -l > cnt --将当前目录下所有文件的详细信息中除了以’d’和’l’开头的文件传给wc,wc统计数量写到cnth中
6.进程管理
ps --显示当前进程
ps -aux --aux 显示所有包含其他使用者的进程详细信息
ps -u root --将root用户的进程信息过滤出来
top --实时显示系统中各个进程的资源占用情况
kill -9 201 --结束pid为1234的进程
grep -v 显示不包含匹配文本的所有行;
grep -n 显示匹配行及行号; grep -n int *average.c* -- 从average.c文件中找出 'int' 字符并显示;
find 【路径】-name 【文件名】 输出搜索结果,并且打印;
find 【路径】-user 【文件名】显示搜索文件的属性;
head -n 3 aaa.txt 输出aaa文件的前三行;
head +3 aaa.txt 输出aaa文件从第三行开始的行;
tail -3 aaa.txt 输出aaa文件倒数三行;
wc -c 统计字节数
wc -l 统计行数
wc -w 统计单词数
gzip test1.c //压缩test1.c 只能压缩文件;--压缩后源文件消失;
gzip -d test1.c.gz //解压缩;
bzip2 test1.c // 后缀test1.c.bz2
bzip2 -d test1.c.bz2; //解压缩;
tar -cvf home.tar ./home //打包压缩/home文件夹
gzip home.tar ; //后缀名home.zip.gz;
tar -zxvf home.tar.gz;
tar -cvf home.tar ./home ;
bzip2 home.tar ; //后缀名home.zip.bz2;
tar -jxvf home.tar.bz2;
(二)文本处理
1.新建c源程序文件feb.c,编译执行,显示费波纳奇数列:
vi feb.c --进入编辑
gcc feb.c -o feb --编译
./feb --运行
2.分别打开stu.txt文件,练习vi命令模式命令:
①移动光标
[快捷键]
光标移动至当前行的行首:0 或 ^
光标移动至当前行的行尾:$
光标移动至当前行只有 n 行的行尾,n为数字:n$
:set nu 显示行号
:set nonu 取消设置行号
定位光标到行尾:G
光标移动到文件开头:gg
光标移动至文件末尾:G
光标移动到第 n 行,n 为数字:nG--定位光标到第8行:8G
编辑模式下使用的快捷键,可以将光标快速定义到指定行的行首::n
②查找、删除、修改字符
查找:/字符串,若查找下一个按‘n’
删除:x,3x删除光标后3个字符//dw,删除一个词
修改(替换):
把2-5行的每一行的第一个:改成?
:2,5 s/:/?
把2-5行的每行的:全部改成?
:2,5 s/:/?/g
③删除、粘贴行
删除行:dd,5dd删除5行
粘贴行:p
④复制、粘贴行
复制单个词:yw
yw之后p复制到光标后的位置
复制光标所在行:yy
复制光标所在接下来的5行:5yy
粘贴在光标下一行:p
撤销最近一次修改前的状态:u
⑤恢复编辑
恢复到文档的初始状态::e!
3.打开passwd文件,练习vi末行命令
①删除、复制、移动多行
复制光标所在接下来的5行:5yy
删除光标所在接下来的5行:5dd
②写文件、读文件,指定文件路径(另存)
文件另存:
首先需要按ESC键回到命令模式;
然后输入命令:w fileName,文件不存在会自动新建文件。
用法示例:
另存为文件为Feb.cpp
:w /home/s2022013428/Feb.cpp
4.替换--将文件中每行“软件工程”替换为“软工”
替换--将文件中每行“软件工程”替换为“软件”
:%s/old/new/g
%代表全局 s表示替换操作
:%s/软件/软工
5.练习匹配文本文件命令,理解每个命令功能和显示信息的意义
grep ^2019 stu.txt --显示出在stu.txt中以2019开始的所有学生信息
grep 3$ stu.txt --显示出在stu.txt中以3结尾的所有学生信息
grep -n 2019013[0-9][0-9][13579] stu.txt --显示在stu.txt中学号信息符合'2019013xxy'(x为任意数字,y是奇数)的所有学生信息(显示每个学生所在行数) //注意 搜索的内容不需要加引号
grep 软件1901 stu.txt > rg191.txt --将stu.txt中软件1901的学生信息重新写到rg191.txt中
grep 软件1902 stu.txt > rg192.txt --将stu.txt中软件1902的学生信息重新写到rg192.txt中
grep 软件1903 stu.txt > rg193.txt --将stu.txt中软件1903的学生信息重新写到rg193.txt中
lastlog | grep Never | wc -l --统计上次从未登录的用户数量
lastlog | grep -v 从未登录 | wc -l --统计上次登录过的用户数量
wc rg192.txt --统计在rg192.txt中的行数和字节数
wc -l rg192.txt --统计在rg192.txt中的行数
(三)用户和文件安全
1.使用ls -l命令,浏览目录 ./、/、/etc、/home、/sbin、/bin及其下文件的权限,理解显示信息的意义
ls -l ./ --将当前用户主目录下的详细信息显示出来
ls -l / --将根目录下【root】的详细信息显示出来
ls -l /etc --将根目录下etc目录中的详细信息显示出来
ls -l /home --将根目录下所有用户目录的详细信息显示出来
ls -l /sbin --将根目录下sbin目录下的详细信息显示出来
ls -l /bin --将根目录下bin目录的详细信息显示出来
ls -l:
第一个字段的第一个字母表示文件类型,其他九个字母表示所有者、组、其他用户的权限,第二个字段表示文件的连接数,第三个字段文件所有者的登录名,第四个字段是所有者的组的名字,第五个字段是文件的大小(字节单位),第6-8字段表示最近修改的日期时间,第九个字段表示文件名;
2.新建用户user1、user2,并设置口令
useradd user1
passwd user1
useradd user2
passwd user2
//useradd -m -s /bin/bash user1 --添加用户
//su - --切换到root用户
3.切换到不同的虚拟控制台终端,使用分别用user1、user2身份用户登录系统,使用ls –l或ls -al命令查看文件的权限,理解显示信息的意义
adduser:会自动为创建的用户指定主目录、系统shell版本,会在创建时输入用户密码。
useradd:需要使用参数选项指定上述基本设置,如果不使用任何参数,则创建的用户无密码、无主目录、没有指定shell版本。
4.建立c源程序文件、编译产生可执行文件,查看、改变这些文件的权限,显示、打开或执行文件,理解显示信息的意义
//建立两个整数相加的c源程序文件
//源文件:
#include <stdio.h>
int main(){
int m,n;
printf(“请输入两个数字:”);
scanf(“%d%d”,&m,&n);
printf(“两个数的和是:%d\n”,m+n);
return 0;
}
使用gcc把C文件编译成可执行文件可分为四步:预编译、编译、汇编、连接。
1、预编译(生成.i文件)
预编译器cpp把源文件和相关的头文件(如实例代码中的头文件stdio.h)预编译成一个.i的文件。
执行的命令:gcc -E sum.c -o sum.i
预编译的作用:
a、处理所有的“#include”预编译指令
b、处理所有的"#define"指令,将代码中所有的"#define"删除,并展开所有的宏定义
c、处理所有的条件预编译指令,如#if #elif #else #ifdef #ifnodef #endif等
d、删除所有的注释
e、添加行号和文件名标识,以便产生错误时给出提示信息
2、编译(生成.s文件)
编译器gcc把预处理后的文件进行语法分析、语义分析以及优化后生成汇编代码文件。
执行的命令:gcc -S sum.i -o sum.s
3、汇编(生成.o文件)
汇编器把汇编代码文件转换成中间目标文件
执行的命令:gcc -c sum.s -o sum.o
4、链接(生成可执行文件)
链接器ld把目标文件与所需要的所有的附加的目标文件(如静态链接库、动态链接库)链接起来成为可执行的文件
执行的命令:gcc sum.o -o sum
//vim sum.c即进入vim编辑环节,将原代码编辑,保存代码之后键入命令ls就可以显示sum.c文件,之后键入“gcc sum.c -o sum”和“./ sum”,然后ls命令就可以得到sum文件(可执行文件),用ls -l命令就可以得到源文件sum.c和可执行程序文件sum的详细信息(读写权限等)
5.建立目录、在目录下建立c源程序文件、编译产生可执行文件,查看、改变目录的权限,查看、打开或执行文件,理解显示信息的意义
键入命令mkdir Sum,在当前用户主目录下创建Sum目录,用来存放两数相加的源程序,ls查看当前用户根目录下已成功创建Sum目录,cd Sum切换到Sum目录下,vi sum.c进入源程序的命令模式,之后i进入编辑当前中,将3中的代码编辑后保存,按照gcc sum.c -o sum和。/ sum的命令编译并运行源文件,在当前Sum目录下ls -l,可得到sum.c和sum的详细信息(包括读写权限)
思考题
1.如何将一个已经登录的用户踢出Linux系统,写出思路、步骤及相关命令
①用 w 命令查看信息
②找到想踢出的用户对应的tty
命令1:pkill -kill -t pts/1
命令2:fuser -k /dev/pts/1
③再次查看w命令是否已经踢出用户
2.如何统计当前系统的用户数,写出思路及相关命令
方法1:who|wc -l --呈现当前登录系统的用户数
思路:who命令列出当前登录的用户信息,wc命令来统计用户数量
方法2:cat /etc/passwd|wc -l --呈现当前系统中的用户数量
思路:将/etc/passwd文件中的内容输出给wc命令,wc命令来统计文件中的行数,行数即用户数,可以得到当前系统中的用户数