该文章主要为完成实训任务,详细实现过程及结果见【参考文章】
参考文章:https://howard2005.blog.csdn.net/article/details/127139576?spm=1001.2014.3001.5502
文章目录
一、常用shell命令
1. 管道命令
(1)命令概述
- 管道命令只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入
- 【指令1】正确输出,作为【指令2】的输入,然后【指令2】的输出作为【指令3】的输入 ,【指令3】输出就会直接显示在屏幕上面了。通过管道之后【指令1】和【指令2】的正确输出不显示在屏幕上面。
(2)命令格式 - 命令1 | 命令2,命令1的输入作为命令2的输入
(3)案例演示
任务1、查看/etc目录信息前5行信息
- 执行命令:
ll /etc | head -5
任务2、查看/etc/profile文件后5行信息
- 执行命令:
cat /etc/profile | tail -5
2. grep命令
(1)命令概述
- grep (缩写来自Globally search a Regular Expression and Print - 全局搜索正则表达式并打印)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep、egrep和fgrep。
(2)命令格式
- grep [选项参数] 文件
(3)选项参数
(4)案例演示
任务1、抓取/etc目录下的python信息
- 执行命令:
ll /etc | grep python
- 执行命令:
cat /etc/profile | grep dev
任务3、抓取用户数据文件中以root打头的信息
- 执行命令:
cat /etc/passwd | grep root*
任务4、显示所有以d开头的文件中包含hi的行
- 执行命令:
grep hi d*
任务5、显示两个文件匹配某个字符串的行
- 执行命令:
grep 'hadoop' demo.txt demo1.txt
任务6、显示文件中至少有n个连续小写字符的行
- 执行命令:
grep '[a-z]\{7\}' demo.txt
3. find命令
(1)命令概述
- find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
(2)命令格式 - find 路径 [选项参数]
(3)选项参数
(4)案例演示
任务1、按类型查找
- 执行命令:
find /etc/sysconfig -type 'd'
- 执行命令:
find /etc/sysconfig -type 'l'
- 执行命令:
find /etc/sysconfig -type 'f'
任务2、按名称查找
- 执行命令:
find /etc/sysconfig -name ‘network’
- 执行命令:
find /etc/sysconfig -name 'net*'
(可使用通配符)
任务3、按大小查找
- 执行命令:
find /etc/sysconfig -size 15c
(等于15字节)
- 执行命令:
find /etc/sysconfig -size +10k
(大于10240个字节)
- 执行命令:
find /etc/sysconfig -size -20c
(小于20个字节)
任务4、按权限查找
- 执行命令:
find /etc/sysconfig -perm '777'
(权限字符串:rwxrwxrwx)
- 执行命令:
find /etc/sysconfig -perm '755'
(权限字符串:rwxr-xr-x)
4. sed命令
(1)命令概述
- sed (stream editor)是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
(2)命令格式
- sed “[action]” [filename]
(3)参数说明
(4)案例演示
- 预备工作:创建demo.txt
1)替换操作(s - substitute)
任务1、将所有行的第一个hello替换成HELLO
- 执行命令:
sed "s/hello/HELLO/" demo.txt
- 注意:输出内容是替换了的,但是原文件依然如故。
任务2、将第2行到第3行的第2个hello替换成HELLO
- 执行命令:
sed "2,3s/hello/HELLO/2" demo.txt
- 假设一个文件有5行,要替换的是第2行到第4行
- 执行命令:
sed "2,4s/hello/HELLO/2"
任务3、将第2行的hello全部替换成HELLO
- 执行命令:
sed "2s/hello/HELLO/g" demo.txt
任务4、将全部的hello替换成HELLO后生成新文件
- 执行命令:
sed "s/hello/HELLO/g" demo.txt > demo1.txt
任务5、将全部的hello替换成hi,要求修改原文件
- 执行命令:
sed -i "s/hello/hi/g" demo.txt
2)插入操作(i - insert, a - append)
任务1、在第2行之前插入一行新内容
- 执行命令:
sed "2 i I love Linux" demo.txt
3)删除操作(d - delete)
任务1、删除第2行
- 执行命令:
sed '2d' demo.txt
任务2、删除第2行到第3行
- 执行命令:
sed '2,3d' demo.txt
任务3、删除文件所有行
- 执行命令:
sed 'd' demo.txt
任务4、删除包含指定字符串的行
- 执行命令:
sed '/scala/g' demo.txt
- 删除内容并且删除行,执行命令:
sed '/scala/d' demo.txt
5. tail命令
(1)命令概述
- 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
(2)命令格式
- tail [选项参数] 文件名
(3)选项参数
(4)案例演示
任务1、显示文件最后4行内容*
- 执行命令:
tail -n 4 anaconda-ks.cfg
任务2、显示文件最后4个字符内容
- 执行命令:
tail -c 4 love.txt
任务3、显示文件修改行
-
tail -f filename 显示文件修改的内容。
-
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。
-
查看test.txt内容
-
修改test.txt,在末尾增加10换行内容,然后存盘退出
6. sort命令
(1)命令概述
- Linux sort 命令用于将文本文件内容加以排序。sort 可针对文本文件的内容,以行为单位来排序。
(2)命令格式
- sort [选项参数] 文件
(3)选项参数
(4)案例演示
- 预备工作:创建ips.txt文件
任务1、对文件按行排序
- 执行命令:
sort ips.txt
,按字典排序法升序排列
- 执行命令:
sort -r ips.txt
,按字典排序法降序排列
任务2、对文件按第4节排序
- 执行命令:
sort -t '.' -k 4 ips.txt
,升序排列
- 执行命令:
sort -t '.' -k 4 -r ips.txt
,降序排列
7. cut命令
(1)命令概述
- cut命令就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
(2)命令格式
- cut [选项参数] 文件名
(3)参数说明
(4)案例演示
任务1、提取ips.txt文件第7列字符
- 执行命令:
cut -c 7 ips.txt
- 执行命令:
cut -b 7 ips.txt
任务2、提取ips.txt文件第4节内容
- 执行命令:
cut -d '.' -f 4 ips.txt
,提取第4节内容
- 执行命令:
cut -d '.' -f 2 ips.txt
,提取第2节内容
练习:提取汉字文件内容
- 提取第7列,执行命令:
cut -c 7 districts.txt
- 提取第3节:
cut -d '.' -f 3 districts.txt
8. history命令
(1)命令概述
- Linux中history命令主要用于显示历史指令记录内容, 下达历史纪录中的指令。读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。
(2)命令格式
- history [选项参数]
(3)参数说明
(4)案例演示
任务1、查看历史操作记录
- 执行命令:
history
任务2、查看最近10条历史命令
- 执行命令:
history 10
(写成history -n 10也是一样效果)
任务3、查看最开始10条历史命令
- 执行命令:
history | head -10
任务4、曾多少次使用vim编辑文本文件?
- 执行命令:
history | grep vim
任务5、执行历史第4条命令
- 查看历史第4条命令
- 执行命令:
!4
任务6、执行上一条命令
- 执行命令:
!!
任务7、执行最后一次以his开头的命令
- 执行命令:
!his
!<字符串>
,字符串随便输入,shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。
任务8、将当前历史命令缓冲区命令写入历史命令文件中
- 执行命令:
history -w myhis
- 执行命令:
cat myhis | tail -5
任务9、 清除第5条历史命令
- 查看第5条历史明令
- 执行命令:
history -d 5
- 检查一下原来的第5条历史还是否存在
任务10、清除所有历史命令
- 执行命令:
history -c
- 此命令发布之后,按上方向键就不能调出历史命令了。
任务11、将历史命令文件中的命令读入当前历史命令缓冲区
- 执行命令:
history -r myhis
- 执行命令:
history | head -10
- 观察一下,读取历史命令文件后,以前的命令进入当前命令缓冲区,但是插入的第1条命令是刚才读取历史命令文件的命令。
二、shell脚本
- 注意:脚本文件第一行必须是
#!/bin/bash
,指定命令解释器bash
1. 直接执行脚本
- 创建脚本文件,执行命令:
vim /home/shell.sh
- 此时,shell.sh对于所有者而言,只有读和写的权限,并不是可执行的脚本。
(1)直接执行脚本
- shell.sh文件必须具备可读与可执行(rx) 的权限
- 增加shell.sh的写权限,执行命令:
chmod u+x /home/shell.sh
绝对路径方式执行脚本
- 执行命令:
/home/shell.sh
相对路径方式执行脚本
- 执行命令:
cd /home
- 执行命令:
./shell.sh
(.表示当前目录)
(2)利用source命令执行脚本
- 执行命令:
source shell.sh
(3)利用bash或sh命令执行脚本
- 执行命令:
bash shell.sh
- 执行命令:
sh shell.sh
2. shell脚本实战
任务1、显示当前用户主目录
1)编写脚本
- 执行命令:
vim shell01.sh
2)设置权限
- 执行命令:
chmod u+x shell01.sh
,增加可执行权限
3)执行脚本
- 执行命令:
./shell01.sh
- 为了让其他用户能执行该脚本,那么应该修改权限,让其他人也有执行权限
- 执行命令:
chmod o+x shell01.sh
任务2、编程实现两个数相乘
1)编写脚本
- 执行命令:
vim shell02.sh
#/bin/bash
read -p "a = " a
read -p "b = " b
product=$((a*b))
echo "$a * $b = $product"
2)设置权限
- 执行命令:
chmod u+x shell02.sh
3)执行脚本 - 执行命令:
./shell02.sh