文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux基础实验

2023-12-22 17:18

关注

Linux基础实验

引用希翼平台Linux基础实验

目录

一、Linux文件和目录

mkdir(创建目录)

语法:
mkdir [-mp] 目录名称

选项和参数:

示例:

root@cg:~/base/dirandfile# mkdir testroot@cg:~/base/dirandfile# mkdir test1/test2/test3/test4mkdir: cannot create directory 'test1/test2/test3/test4': No such file or directoryroot@cg:~/base/dirandfile# mkdir -p test1/test2/test3/test4root@cg:~/base/dirandfile#

可以看到有了-p选项之后,可以递归地创建出所需要目录的上层目录。

root@cg:~/base/dirandfile# ls -ltotal 8drwxr-xr-x 2 root root 4096 Feb 16 14:42 testdrwxr-xr-x 3 root root 4096 Feb 16 14:43 test1root@cg:~/base/dirandfile# mkdir -m 711 test2root@cg:~/base/dirandfile# ls -ltotal 12drwxr-xr-x 2 root root 4096 Feb 16 14:42 testdrwxr-xr-x 3 root root 4096 Feb 16 14:43 test1drwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

如果没有设置-m选项,那么该目录将被设置为默认权限,在上例中该目录通过-m 711设置为了drwxr-sr-x权限。

ls(列出目录)

语法:
ls [-aAdfFhilnrRSt] 目录名称
ls [–color={never,auto,always}] 目录名称
ls [–full-time] 目录名称

选项和参数:

示例:

root@cg:~/base/dirandfile# ls -ltotal 12drwxr-xr-x 2 root root 4096 Feb 16 14:42 testdrwxr-xr-x 3 root root 4096 Feb 16 14:43 test1drwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

pwd (显示目前所在的目录)

pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。

语法:
pwd

示例:
显示出当前目录的绝对路径:

root@cg:~/base/dirandfile# pwd/headless/base/dirandfileroot@cg:~/base/dirandfile#

cd (切换目录)

cd是Change Directory的缩写,这是用来变换工作目录的命令。

语法:
cd [相对路径或绝对路径]

示例:

使用绝对路径切换到 test2 目录

root@cg:~/base/dirandfile# cd /headless/base/dirandfile/test2

…表示回到当前目录的上一级目录

root@cg:~/base/dirandfile/test2# cd ..

使用相对路径切换到 test2 目录

root@cg:~/base/dirandfile# cd ./test2

~表示自己的家目录,cd ~表示回到家目录,亦即是 /headless 这个目录

root@cg:~/base/dirandfile# cd /headless/base/dirandfile/test2root@cg:~/base/dirandfile/test2# cd ..root@cg:~/base/dirandfile# cd ./test2root@cg:~/base/dirandfile/test2# cd ~root@cg:~# pwd/headless

-表示切换到当前目录之前的目录

root@cg:~# cd -/headless/base/dirandfile/test2root@cg:~/base/dirandfile/test2# pwd/headless/base/dirandfile/test2root@cg:~/base/dirandfile/test2#

rmdir (删除空的目录)

语法:
rmdir [-p] 目录名称

选项与参数:

-p :连同上一级『空的』目录也一起删除

示例:

可直接删除空目录

root@cg:~/base/dirandfile# ls -ltotal 12drwxr-xr-x 2 root root 4096 Feb 16 14:51 testdrwxr-xr-x 3 root root 4096 Feb 16 14:56 test1drwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile# rmdir testroot@cg:~/base/dirandfile# ls -ltotal 8drwxr-xr-x 3 root root 4096 Feb 16 14:56 test1drwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

非空目录无法删除

root@cg:~/base/dirandfile# rmdir test1rmdir: failed to remove 'test1': Directory not empty

递归地删除test1/test2/test3/test4

root@cg:~/base/dirandfile# rmdir -p test1/test2/test3/test4root@cg:~/base/dirandfile# ls -ltotal 4drwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

touch (创建新文件)

一是创建新的空文件
二是修改已存在文件的时间戳

语法:
touch [-acdfmrt] 文件名称

选项与参数:

示例:

创建新文件

root@cg:~/base/dirandfile# touch file1.txtroot@cg:~/base/dirandfile# ls -ltotal 4-rw-r--r-- 1 root root    0 Feb 16 15:00 file1.txtdrwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile# touch file2.txtroot@cg:~/base/dirandfile# ls -ltotal 4-rw-r--r-- 1 root root    0 Feb 16 15:00 file1.txt-rw-r--r-- 1 root root    0 Feb 16 15:04 file2.txtdrwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

修改文件的时间戳

root@cg:~/base/dirandfile# ls -ltotal 4-rw-r--r-- 1 root root    0 Feb 16 15:00 file1.txt-rw-r--r-- 1 root root    0 Feb 16 15:04 file2.txtdrwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile# touch -t 202002161300 file1.txtroot@cg:~/base/dirandfile# ls -ltotal 4-rw-r--r-- 1 root root    0 Feb 16 13:00 file1.txt-rw-r--r-- 1 root root    0 Feb 16 15:04 file2.txtdrwx--x--x 2 root root 4096 Feb 16 14:44 test2root@cg:~/base/dirandfile#

cp (复制文件或目录)

cp 即拷贝文件和目录

语法:
cp [-adfilprsu] source destination
cp [options] source1 source2 source3 … directory

选项与参数:

示例:

root@cg:~/base/dirandfile# cp file1.txt test2/root@cg:~/base/dirandfile# cp -i file1.txt test2/cp: overwrite 'test2/file1.txt'? nroot@cg:~/base/dirandfile#

rm (移除文件或目录)

语法:
rm [-fir] 文件或目录
选项与参数:

示例:

root@cg:~/base/dirandfile# rm -i file1.txt rm: remove regular empty file 'file1.txt'? yroot@cg:~/base/dirandfile# ls -ltotal 4-rw-r--r-- 1 root root    0 Feb 16 15:04 file2.txtdrwx--x--x 2 root root 4096 Feb 16 15:06 test2root@cg:~/base/dirandfile#

mv (移动文件与目录,或修改名称)

语法:
mv [-fiu] 源 目标
mv [options] 源1 源2 源3 … 目标

选项与参数:

示例:

root@cg:~/base/dirandfile# mkdir testroot@cg:~/base/dirandfile# mv file2.txt testroot@cg:~/base/dirandfile# ls -ltotal 8drwxr-xr-x 2 root root 4096 Feb 16 15:09 testdrwx--x--x 2 root root 4096 Feb 16 15:06 test2root@cg:~/base/dirandfile# mv test test1root@cg:~/base/dirandfile# ls -ltotal 8drwxr-xr-x 2 root root 4096 Feb 16 15:09 test1drwx--x--x 2 root root 4096 Feb 16 15:06 test2root@cg:~/base/dirandfile# mv test2 test1root@cg:~/base/dirandfile# ls -ltotal 4drwxr-xr-x 3 root root 4096 Feb 16 15:10 test1root@cg:~/base/dirandfile# ls -l test1total 4-rw-r--r-- 1 root root    0 Feb 16 15:04 file2.txtdrwx--x--x 2 root root 4096 Feb 16 15:06 test2root@cg:~/base/dirandfile#

二、Linux文本文件

将文件file.txt和longfile.txt复制到本实验工作目录中:

$ cp file.txt longfile.txt text

Linux系统中使用以下命令来查看文件的内容:

cat

由第一行开始显示文件内容

语法:
cat [-AbEnTv]

选项与参数:

tac

与cat命令正好相反,从最后一行开始打印

more

在 more 这个程序的运行过程中,你有几个按键可以按的:

head

打印出文件的前几行,默认是前10行

语法:
head [-n number] 文件

选项和参数:

tail

取出文件后面几行

语法:
tail [-n number] 文件

选项与参数:

nl

输出内容时顺便打印行号

语法:
nl [-bn] 文件

选项与参数:

实验

请在本实验工作目录下完成。在命令后添加"> 文件名"将内容输出到文件中。

cd ~/basemkdir textcp file.txt longfile.txt textcd text

任务一:

从最后一行开始显示longfile.txt内容并输出到文件text_1.txt中(25分)。

tac longfile.txt > text_1.txt

任务二:

使用more查看文件longfile.txt内容并输出到文件text_2.txt中(25分)。

more longfile.txt > text_2.txt

任务三:

查看longfile.txt的后30行内容,并输出到文件text_3.txt中(25分)。

tail -n 30 longfile.txt > text_3.txt

任务四:

输出longfile.txt的内容并显示行号,行号在栏位的最右方显示且补0,将结果输出到文件text_4.txt中(25分)。

nl -n rz longfile.txt > text_4.txt

三、用户与群组管理

Linux用户管理–用户的添加

语法:
useradd [-cdgGsu] 用户名

选项与参数:

示例:

添加用户sam,并指定家目录为/home/sam

root@db2e7b5ec045:~/Desktop# useradd -d /home/sam -m samroot@db2e7b5ec045:~/Desktop# su samsam@db2e7b5ec045:/headless/Desktop$ cd ~sam@db2e7b5ec045:~$ pwd/home/samsam@cg:~$ exitexitroot@cg:~/Desktop#

useradd添加用户时,默认会为用户创建一个与用户同名的用户组。

-g 选项表示不为用户创建新组, 而使用 -g 后的指定用户组。

-G 后面跟一个用户组列表,使用户属于指定的多个用户组。

root@cg:~/Desktop# groupadd hadoop1root@cg:~/Desktop# groupadd hadoop2root@cg:~/Desktop# groupadd hadoop3root@cg:~/Desktop# useradd -s /bin/bash -g hadoop1 -G hadoop2,hadoop3 tomroot@cg:~/Desktop# groups tomtom : hadoop1 hadoop2 hadoop3

首先使用groupadd 创建了hadoop1、hadoop2、hadoop3三个组。然后,添加tom用户,将tom添加到这三个组中。

groups命令可查看某个用户属于哪些组。

Linux用户管理–用户的删除

语法:
userdel -r 用户名

选项与参数:

示例:

root@cg:~/Desktop# useradd -s /bin/bash -d /home/lucy -m lucyroot@cg:~/Desktop# ls -l /hometotal 8drwxr-xr-x 2 lucy lucy 4096 Feb 17 12:17 lucydrwxr-xr-x 2 sam  sam  4096 Feb 17 12:10 samroot@cg:~/Desktop# userdel lucyroot@cg:~/Desktop# userdel -r samuserdel: sam mail spool (/var/mail/sam) not foundroot@cg:~/Desktop# ls -l /hometotal 4drwxr-xr-x 2 1002 1004 4096 Feb 17 12:17 lucyroot@cg:~/Desktop#

此命令将删除该用户在系统文件中的记录,同时删除用户主目录。

Linux用户管理–用户的修改

修改用户的一些属性,如用户号、主目录、用户组、登录Shell等。

语法:
usermod [-cdgGsu] 用户名

选项与参数:

示例:

root@cg:~/Desktop# useradd -s /bin/bash -d /home/test -g hadoop1 testroot@cg:~/Desktop# id testuid=1002(test) gid=1001(hadoop1) groups=1001(hadoop1)root@cg:~/Desktop# cat /etc/passwd | grep testtest:x:1002:1001::/home/test:/bin/bashroot@cg:~/Desktop# mkdir /home/test_newroot@cg:~/Desktop# usermod -s /bin/ksh -d /home/test_new -g hadoop2 testroot@cg:~/Desktop# id testuid=1002(test) gid=1002(hadoop2) groups=1002(hadoop2)root@cg:~/Desktop# cat /etc/passwd | grep testtest:x:1002:1002::/home/test_new:/bin/kshroot@cg:~/Desktop#

可以看到,使用usermod对test用户的默认shell、家目录、所归属的组都做了修改。

注意:/etc/passwd文件中存储了每个用户的基本信息。

Linux用户管理–用户密码的设置和修改

新用户被创建时没有密码,但是被系统锁定,不能使用,必须设置口令才能使用。

语法:
passwd [-ludf] 用户名

选项与参数:

示例:

创建新用户sam

root@cg:~/Desktop# useradd -d /home/sam -m samroot@cg:~/Desktop#

在root用户下可以设置其他用户的密码,如给sam用户设置为sam123456

root@cg:~/Desktop# passwd samEnter new UNIX password: Retype new UNIX password: passwd: password updated successfullyroot@cg:~/Desktop#

切换到tom用户,使用tom切换到sam账户,输入密码:sam123456登录。

root@cg:~/Desktop# su tomtom@cg:/headless/Desktop$ su samPassword: sam@cg:/headless/Desktop$

sam用户可修改自己的密码,将密码修改为helloworld。

用户修改自己的密码前需要先输入当前的密码:

sam@cg:/headless/Desktop$ passwd Changing password for sam.(current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfullysam@cg:/headless/Desktop$

连续输入两次exit命令切换回root用户,再将sam用户密码置为空, 置空后,无法登录。

sam@cg:/headless/Desktop$ exitexittom@cg:/headless/Desktop$ exitexitroot@cg:~/Desktop# passwd -d sampasswd: password expiry information changed.root@cg:~/Desktop# su tomtom@cg:/headless/Desktop$ su samPassword: su: Authentication failuretom@cg:/headless/Desktop$

重新为sam设置密码为:sam123456

root@cg:~/Desktop# passwd -u sampasswd: unlocking the password would result in a passwordless account.You should set a password with usermod -p to unlock the password of this account.root@cg:~/Desktop# passwd samEnter new UNIX password: Retype new UNIX password: passwd: password updated successfullyroot@cg:~/Desktop# su tomtom@cg:/headless/Desktop$ su samPassword: sam@cg:/headless/Desktop$

加 -l 可锁定某一用户,使其无法登录,使用 -l 锁定 sam

sam@cg:/headless/Desktop$ exitexittom@cg:/headless/Desktop$ exitexitroot@cg:~/Desktop# passwd -l sampasswd: password expiry information changed.root@cg:~/Desktop# su tomtom@cg:/headless/Desktop$ su samPassword: su: Authentication failuretom@cg:/headless/Desktop$

使用 -u 可对用户解锁,

tom@cg:/headless/Desktop$ exitexitroot@cg:~/Desktop# passwd -u sampasswd: password expiry information changed.root@cg:~/Desktop# su tomtom@cg:/headless/Desktop$ su samPassword: sam@cg:/headless/Desktop$

Linux用户组管理–用户组的添加

语法:
groupadd [-go] 用户组名

选项与参数:

示例:

groupadd group1  groupadd -g 101 group2

Linux用户组管理–用户组的删除

cd是Change Directory的缩写,这是用来变换工作目录的命令。

语法:
groupdel 用户组名

示例:

groupdel group1

Linux用户组管理–用户组的修改

语法:
groupmod [-gon] 目录名称

选项与参数:

示例:

groupmod -g 102 group2groupmod -g 10000 -n group3 group2

Linux用户组管理–用户在所属的用户组之间切换

用户在登录之后,如果其他用户组中包含该用户,可使用newgrp命令切换到其他用户组,以获得其他用户组的权限语法:
newgrp 其他用户组

实验

创建用户组homeworkgroup,并创建用户homeworkuser,使得该用户属于这个用户组(30分)。

groupadd homeworkgroupuseradd -g homeworkgroup homeworkuser

分别修改homeworkuser的用户名为newuser,主目录为/home/anotherhome,用户组为developer(先创建);并修改用户组homeworkgroup标示号为9000(50分)。

groupadd developerusermod -d /home/anotherhome -g developer -l newuser homeworkusergroupmod -g 9000 homeworkgroup

删除任务一中创建的用户和用户组(20分)。

groupdel homeworkgroupuserdel -r newuser

四、文件目录权限管理

Linux用户分类

在Linux系统中,对于文件和目录而言,用户可以分为以下三类:

root用户(超级管理员)

root用户是Linux系统中的超级管理员,拥有最大的权限,拥有对文件和目录的全部权限。

权限分类

在Linux系统中,对于文件和目录而言,用户权限分为了以下三类:

权限查看

ls -l可查看当前目录下文件和目录的权限。

文件的属性由最左边的10个连续字符确定,具体划分如下图所示:

在这里插入图片描述

其中的第一个字符代表的是文件类型,有以下几种:

2~4位字符依次代表文件属主的读权、写权、执行权,分别用rwx表示,若没有该权限则用-填充。
5~7位字符依次代表文件属组的读权、写权、执行权。
8~10位字符一次代表其他用户的读权、写权、执行权。

权限更改

语法:
chmod [-R] 权限修改 文件或目录

选项与参数:

命令的施加对象:

权限的改变:

示例:

chmod u+x,g=rw,o-r file.txt

数字形式

权限的分数对照:

在设置某种用户的权限时,直接将其权限的分数相加即可。

语法:
chmod [-R] xyz 文件或目录

选项与参数:

示例:

chmod 777 longfile.txt

属主和属组更改

该命令仅由root用户使用!

语法:
chown [–R] 属主名 文件或目录 chown [-R] 属主名:属组名 文件或目录

选项与参数:

示例:

chown root:root longfile.txt

实验

清空本实验工作目录,重新复制文件file.txt和longfile.txt到本实验工作目录(20分)

cd ~cd basemkdir privilegecp file.txt longfile.txt privilegecd privilege

任务一:

对于文件longfile.txt,采用字母形式赋予属主和属组全部权限,取消其他用户全部权限(40分)。

ls -lchmod u=rwx,g=rwx,o--- longfile.txt

任务二:

对于文件file.txt,采用数字形式赋予属主和属组全部权限,取消其他用户全部权限(40分)。

chmod 770 file.txt

五、文件的打包与压缩

文件的打包

文件的打包是指将多个文件打包成一个文件,由于Linux的很多压缩程序只能对一个文件进行压缩,因此首先要将多个文件打包成一个文件,这个过程并不会减小文件占用的磁盘空间,常用的打包命令为tar。

文件的打包–打包

语法:
tar [-cvf] 生成tar包名 将要打包的文件和目录

选项与参数:

示例:

tar -cvf tar1.tar dir file.txt longfile.txt

文件的打包–解包

语法:
tar [-xvf] 解压的包名 [-C] 解压到的文件夹

选项与参数:

示例:

rm -rf file.txt longfile.txt dir

解压到默认的当前文件夹

tar -xvf tar1.tar

解压到指定文件夹

tar -xvf tar1.tar -C dir

.gz格式的压缩

gzip只能压缩文件,不能压缩目录。

语法:
gzip [-cdrvlf] 要压缩的文件名

选项与参数:

示例:

gzip -v longfile.txt

longfile.txt: 46.7% – replaced with longfile.txt.gz

gzip -l longfile.txt.gz

compressed uncompressed ratio uncompressed_name
10930 20435 46.7% longfile.txt

.gz格式的解压

语法:
gunzip [-crvlf] 要解压的.gz文件

选项与参数:

示例:

gunzip -v longfile.txt.gz

longfile.txt.gz: 46.7% – replaced with longfile.txt

.zip格式的压缩

语法:
zip [-drqvx] 压缩包名 将要打包的文件和目录

选项与参数:

示例:

zip -r dir.zip dir

adding: dir/ (stored 0%)
adding: dir/file.txt (stored 0%)
adding: dir/dir/ (stored 0%)
adding: dir/longfile.txt (deflated 47%)

.zip格式的解压

语法:
unzip [-fndqv] 要解压的.zip文件

选项与参数:

示例:

unzip -f dir.zip

Archive: dir.zip

.bz2格式的压缩

bzip2只能压缩文件,不能压缩目录。

语法:
bzip2 [-zdfv] 要压缩的文件名

选项与参数:

示例:

bzip2 -v tar1.tar

tar1.tar: 3.188:1, 2.509 bits/byte, 68.63% saved, 30720 in, 9636 out.

.bz2格式的解压

语法:
bunzip2 [-fkLsvV] 要解压的.bz2文件

选项与参数:

示例:

bunzip2 -kv tar1.tar.bz2

tar1.tar.bz2: done

tar命令的压缩

采用gzip进行压缩:
tar -zcvf .tar.gz 压缩包名 一系列文件或目录
示例:

tar -zcvf compress1.tar.gz dir longfile.txt

dir/
dir/file.txt
dir/dir/
dir/longfile.txt
longfile.txt

采用bzip2进行压缩:
tar -jcvf .tar.bz2 压缩包名 一系列文件或目录
示例:

tar -jcvf compress2.tar.bz2 dir longfile.txt`

dir/
dir/file.txt
dir/dir/
dir/longfile.txt
longfile.txt

tar命令的解压

选项与参数:

解压.tar.gz压缩包:
tar -zxvf .tar.gz压缩包名
示例:

tar -zxvf compress1.tar.gz

解压.tar.bz2压缩包:
tar -jxvf .tar.bz2压缩包名
示例:

tar -jxvf compress2.tar.bz2

实验

只保留本实验工作目录下的dir、file.txt和longfile.txt,删除其他内容。

任务一

将dir压缩为compress1.zip(10分),将file.txt压缩为compress2.tar.gz(20分),将longfile.txt压缩为compress3.tar.bz2(20分)。

zip compress1.zip dirtar -zcvf compress2.tar.gz file.txttar -jcvf compress3.tar.bz2 longfile.txt

任务二

新建文件夹decompress,依次将任务一中的compress1.zip(10分)、compress2.tar.gz(20分)、compress3.tar.bz2(20分)解压到该文件夹下。

mkdir decompressunzip -d decompress/ compress1.ziptar -zxvf compress2.tar.gz -C decompress/tar -jxvf compress3.tar.bz2 -C decompress/

六、文本编辑神器vi

vi介绍

vi是一种工作在Linux上的文本编辑器,全称是Visual Interface。它在字符模式下工作,不需要图形界面。它有三种基本的工作模式:

命令模式

用户再启动vi后,直接进入了命令模式。在此模式下可以输入各种命令。以下是几种常用的命令:

输入模式

在命令模式下输入i进入输入模式。在输入模式中,可以使用以下按键完成想要的输入:

底线命令模式

在命令模式下输入:进入底线命令模式,底线命令模式相比普通的命令模式,增加了许多可用的命令,最基本的命令如下:

vi工作模式图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRGVM608-1678439687108)(E:\Typora_md\学习文档\课程\大数据课程\assets\158133032811208243846.png)]

实验

在工作目录下创建文件num.txt,在第n行写数量为n的字母依次写完26个字母,如:第一行写a,第二行写b、c,第三行写d、e、f…,每行的字母之间空一格,行末写完后保存离开(100分)。

cd ~/base/text-vivi num.txtab c……v w x y z:wq

七、文本处理神器sed

sed介绍

sed利用脚本来对文件进行处理,是一种非交互的流编辑器,按照脚本的指令来编辑、处理文本文件。其使用场景主要包括以下几种:

sed语法

sed [-hnV][-e script][-f script文件] 文本文件

选项与参数

操作说明

示例

在file.txt文件的第三行后添加一行“newLine”,并将结果输出:

sed -e 3a\newLine file.txt

在第二行后多输出一行“newLine”

nl file.txt | sed '2a newLine'

在输出中删除第二行

nl file.txt | sed '2d'

在输出中替换第二行

nl file.txt | sed '2c newLine'

在输出中搜索含有关键字的行,加-n后只显示匹配到的行

nl file.txt | sed '/dow/p'nl file.txt | sed -n '/dow/p'

在输出中删除含有关键字的行

nl file.txt | sed '/dow/d'

实验

请在本实验工作目录下完成,在命令后追加"> 文件名"将内容输出到文件中。

任务一:

将file2.txt显示行号输出,并在第一行后添加一行“Unix is also an os”,并输出到文件sed_1.txt(50分)。

nl file2.txt | sed "1a Unix is also an os" > sed_1.txt

任务二:

将file2.txt显示行号输出,并搜索含有关键字’Mac‘的行重复输出,全部内容输出到文件sed_2.txt(50分)。

nl file2.txt | sed '/Mac/p' > sed_2.txt

八、文本搜索神器grep

grep介绍

Linux中的grep命令是强大的文本搜索工具,使用正则表达式搜索文本,并将匹配到的行打印出来。

grep语法

grep [-acinv] [–color=auto] 搜寻内容 目标文本文件

选项与参数

示例

在longfile.txt搜索含有“梦”的句子并输出行号:

grep -n 梦 longfile.txt

1:——此开卷第一回也。作者自云:曾历过一番梦幻之后,故将真事隐去,而借
11:中间用“梦”“幻”等字,却是此书本旨,兼寓提醒阅者之意。
91:定睛看时,只见烈日炎炎,芭蕉冉冉,梦中之事便忘了一半。又见奶母抱了英莲

反向查找,在longfile.txt中搜索不含"日"的句子并输出行号:

grep -nv 日 longfile.txt

1:——此开卷第一回也。作者自云:曾历过一番梦幻之后,故将真事隐去,而借
2:通灵说此《石头记》一书也,故曰“甄士隐”云云。但书中所记何事何人?自己又
4:见识皆出我之上。我堂堂须眉诚不若彼裙钗,我实愧则有馀,悔又无益,大无可如
7:告天下;知我之负罪固多,然闺阁中历历有人,万不可因我之不肖,自护己短,一
........................省略.................................

正则匹配

正则匹配规则

示例:

grep -n [a-g] file.txt

实验

在命令后添加"> 文件名"将内容输出到文件中。

任务一:

输出longfile.txt所有包含"石头"的行并输出行号,输出到文件grep_1.txt(40分)。

grep -n 石头 longfile.txt > grep_1.txt

任务二:

统计longfile.txt中"作者"出现的次数,输出到文件grep_2.txt(30分)。

grep -c 作者 longfile.txt > grep_2.txt

任务三:

统计file.txt所有包含以OS结尾的单词的行,输出到文件grep_3.txt(30分)。

grep 'OS\>' file.txt > grep_3.txt

九、Linux文件搜索

概述

文件搜索的常用命令有:which、whereis、find、locate。

which

which指令会在环境变量$PATH设置的目录里查找符合条件的文件

语法:
which 文件

示例:

which ls

/bin/ls

whereis

该指令会在特定目录中查找符合条件的文件。这些文件应属于源文件、二进制文件,或是man文件。
语法:
whereis [-bfmsu][-B <目录>…][-M <目录>…][-S <目录>…] 文件

选项与参数:

示例:

whereis -b passwd

passwd: /usr/bin/passwd /etc/passwd

locate

locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找符合查找条件的文档或目录

语法:
locate [-d ][–help][–version] 文件

选项与参数:

示例:

locate longfile.txt

/home/jovyan/compress/dir/longfile.txt

/home/jovyan/compress/longfile.txt

/home/jovyan/dirandfile/longfile.txt

/home/jovyan/longfile.txt

/home/jovyan/text-grep/longfile.txt

/home/jovyan/text-sed/longfile.txt

/home/jovyan/text-vi/longfile.txt

find

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法:
find 查找目录 [-option] 查找内容

选项与参数:

示例:

将目前目录及其子目录下文件名后缀是txt的文件列出来

find . -name "*.txt"

将当前目录及其子目录下所有目录列出

find . -type d

查找当前目录下20分钟内被访问过的文件或目录:

find . -amin -20

查找当前目录下大于10k的普通文件,并列出其详细信息

find . -size +10k -type f

实验

新建文件夹search,将file.txt、file2.txt和longfile.txt复制其中,并新建文件夹adir、dir1和dir2和文件dir.txt,并复制longfile.txt分别到dir1和dir2中(20分)。在命令后添加"> 文件名"将内容输出到文件中。

mkdir searchcp file.txt file2.txt longfile.txt search/cd searchmkdir adirmkdir dir1mkdir dir2touch dir.txtcp longfile.txt dir1cp longfile.txt dir2

任务一

使用which搜索"touch",输出结果到search_1.txt(20分)

which touch > search_1.txt

任务二

搜索文件夹search中所有以"dir"开头的文件夹,输出结果到search_2.txt(30分)

find . -name 'dir*' > search_2.txt

任务三

搜索文件夹search中大于1k的普通文件类型文件,输出结果到search_3.txt(30分)

find . -size +1k -type f > search_3.txt

十、Shell数学计算

使用let、(())和[]进行算术运算

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

语法:
let 表达式
$((表达式))
$[表达式]

示例:

计算2*3

num1=2num2=3let result=num1*num2echo $result

6

计算num1++

let num1++echo $num1

3

[]可包含数学运算

result=$[num1*num2]echo $result

9

(())也可包含数学运算

result=$((num1+5))echo $result

8

使用expr进行算术运算

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

语法:
expr 表达式

示例:

数学运算时数字和运算符之间应当有空格,否则数字会被当成字符处理

expr 3+4

3+4

expr 3 + 4

7

通配符*在做乘法运算符时要转义,即写作*

expr 3 \* 4

12

分步计算,是`,不是’

s=`expr 2 + 3`expr $s \* 4

20

使用bc进行算术运算

bc 命令是任意精度计算器语言,通常在linux下当计算器用。它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

语法:
bc [-ilwqvh] 包含计算任务的文件

选项与参数:

示例:

bc# 直接使用 2+3

使用管道

echo "20*3"|bc

设置精度

echo "scale=3; 3.333*2.222" |bc

开方运算

echo "sqrt(10000)"|bc

进制转换

abc=101010echo "obase=8;ibase=2;$abc" |bc

实验

新建文件夹math作为本实验作业目录。(10分)在命令后使用">>文件名"追加内容。

mkdir mathcd math

任务一

使用let计算2*3*4*5,结果追加到文件math.txt中。(30分)

let result=2*3*4*5echo $result >> math.txt

任务二

使用expr计算4的立方(使用乘法,expr不支持乘方),结果追加到文件math.txt中。(30分)

expr 4 \* 4 \* 4 >> math.txt

任务三

使用bc将二进制的1001011转换为十进制数字,结果追加到文件math.txt中。(30分)

abc=1001011echo "obase=10;ibase=2;$abc" | bc >> math.txt

十一、文本分析神器awk

awk介绍

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

语法
awk [选项参数] ‘script’ var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

选项与参数

基础使用

首先查看文件的全部内容

cat file2.txt

1 linux is an os

2 Windows is an os

3 Mac OS is an os

输出每行的第1、3项内容(默认由空格或tab划分)

awk '{print $1,$3}' file2.txt

1 is
2 is
3 OS

将每行以字符’i’划分,输出每行的第1、2项内容

awk -Fi '{print $1,$2}' file2.txt

1 l nux
2 W ndows
3 Mac OS s an os

使用内建变量’i’划分,输出每行的第1、2项内容

awk 'BEGIN{FS="i"} {print $1,$2}' file2.txt

1 l nux
2 W ndows
3 Mac OS s an os

使用多个分隔符划分,例如i和o

awk -F '[io]' '{print $1,$3,$4}' file2.txt

1 l s an s
2 W ws s an
3 Mac OS s

给变量赋值,并使用变量

awk -va=2 -vb=The '{print $1+a,b$2}' file2.txt

3 Thelinux
4 TheWindows
5 TheMac

使用运算符,输出第一项>=2,且第三项等于"is"的行的前四项内容

awk '$1>=2 && $3=="is" {print $1,$2,$3,$4}' file2.txt

2 Windows is an

使用正则表达式,查看包含"os"的行,忽略大小写

awk 'BEGIN{IGNORECASE=1} /os/' file2.txt

1 linux is an os
2 Windows is an os
3 Mac OS is an os

使用脚本

awk脚本应当符合以下形式:
BEGIN{ 执行前语句 }
{执行中语句}
END {执行后语句 }

示例:
在工作目录下新建cal.awk脚本,填入以下内容:
BEGIN{
printf “begin\n”
total=0
}
{
printf “Name is %-8s\n”,$2
total=total+length
}
END{
printf “total length is %2d\n”,total
printf “end”
}
该脚本用于计算文本文件总长度:

awk -f cal.awk file2.txt

begin
Name is linux
Name is Windows
Name is Mac
total length is 51
end

实验

新建文件夹text-awk作为本实验的工作目录,复制文件file2.txt到文件夹中。(10分)在命令后添加"> 文件名"输出内容到文件中。

mkdir text-awk & cp file2.txt text-awk

任务一

使用’s’作为分隔符,输出file2.txt每行的第2个内容到文件awk_1.txt中。(20分)

awk -Fs '{print $2}' file2.txt > awk_1.txt

任务二

默认分隔符,将file2.txt每行的第1项加2,第3项后面加"what"后输出到文件awk_2.txt中(30分)

awk -va=2 -vb=what '{print $1+a,$3b}' file2.txt >awk_2.txt

任务三

新建文件score.txt,填入以下内容:
Marry 78 84 77
Jack 66 78 45
Tom 48 73 71
Mike 87 97 95
Bob 40 57 62
编写awk脚本输出表头为“姓名 总成绩”,中间保留两个空格,之后各行依次输出每个人的名字(占6位)+总成绩(后三项之和,占3位),名字和成绩之间再保留1个空格,结果输出到文件awk_3.txt中。(40分)

vi score.txt>>>Marry  78 84 77Jack   66 78 45Tom   48 73 71Mike   87 97 95Bob   40 57 62:wq
vi q3.awk>>>BEGIN{printf "姓名  总成绩\n"}{printf "%-6s ",$1printf "%-3s\n",$2+$3+$4}END{}:wq
awk -f q3.awk score.txt > awk_3.txt

ux
2 W ndows
3 Mac OS s an os

使用内建变量’i’划分,输出每行的第1、2项内容

awk 'BEGIN{FS="i"} {print $1,$2}' file2.txt

1 l nux
2 W ndows
3 Mac OS s an os

使用多个分隔符划分,例如i和o

awk -F '[io]' '{print $1,$3,$4}' file2.txt

1 l s an s
2 W ws s an
3 Mac OS s

给变量赋值,并使用变量

awk -va=2 -vb=The '{print $1+a,b$2}' file2.txt

3 Thelinux
4 TheWindows
5 TheMac

使用运算符,输出第一项>=2,且第三项等于"is"的行的前四项内容

awk '$1>=2 && $3=="is" {print $1,$2,$3,$4}' file2.txt

2 Windows is an

使用正则表达式,查看包含"os"的行,忽略大小写

awk 'BEGIN{IGNORECASE=1} /os/' file2.txt

1 linux is an os
2 Windows is an os
3 Mac OS is an os

使用脚本

awk脚本应当符合以下形式:
BEGIN{ 执行前语句 }
{执行中语句}
END {执行后语句 }

示例:
在工作目录下新建cal.awk脚本,填入以下内容:
BEGIN{
printf “begin\n”
total=0
}
{
printf “Name is %-8s\n”,$2
total=total+length
}
END{
printf “total length is %2d\n”,total
printf “end”
}
该脚本用于计算文本文件总长度:

awk -f cal.awk file2.txt

begin
Name is linux
Name is Windows
Name is Mac
total length is 51
end

实验

新建文件夹text-awk作为本实验的工作目录,复制文件file2.txt到文件夹中。(10分)在命令后添加"> 文件名"输出内容到文件中。

mkdir text-awk & cp file2.txt text-awk

任务一

使用’s’作为分隔符,输出file2.txt每行的第2个内容到文件awk_1.txt中。(20分)

awk -Fs '{print $2}' file2.txt > awk_1.txt

任务二

默认分隔符,将file2.txt每行的第1项加2,第3项后面加"what"后输出到文件awk_2.txt中(30分)

awk -va=2 -vb=what '{print $1+a,$3b}' file2.txt >awk_2.txt

任务三

新建文件score.txt,填入以下内容:
Marry 78 84 77
Jack 66 78 45
Tom 48 73 71
Mike 87 97 95
Bob 40 57 62
编写awk脚本输出表头为“姓名 总成绩”,中间保留两个空格,之后各行依次输出每个人的名字(占6位)+总成绩(后三项之和,占3位),名字和成绩之间再保留1个空格,结果输出到文件awk_3.txt中。(40分)

vi score.txt>>>Marry  78 84 77Jack   66 78 45Tom   48 73 71Mike   87 97 95Bob   40 57 62:wq
vi q3.awk>>>BEGIN{printf "姓名  总成绩\n"}{printf "%-6s ",$1printf "%-3s\n",$2+$3+$4}END{}:wq
awk -f q3.awk score.txt > awk_3.txt

来源地址:https://blog.csdn.net/weixin_45956028/article/details/129447207

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯