Linux基础3

目录

压缩与解压

格式 压缩命令 解压命令
tar tar czvf filename.tar dirname tar zxvf filename.tar
zip zip filename.zip dirname unzip filename.zip
gz tar zcvf filename.tar.gz dirname
gzip filename.tar.gz
gzip filename.tgz
tar zxvf filename.tar.gz
gunzip filename.gz
gzip -d filename.gz
bz2 tar jcvf filename.tar.bz2 dirname
bzip2 -z filename.tar.bz2
tar jxvf filename.tar.bz2
bzip2 -d filename.bz2

tar命令详解:

  • 功能(五选一,必选)
    • -c:压缩
    • -r:向压缩包追加文件
    • -x:解压
    • -t:查看
    • -u:更新压缩包
  • 其他必须参数
    • -f:文件,此参数需放置在末尾
  • 可选参数
    • -v:显示所有过程
    • -z:处理有gzip属性的文档
    • -j:处理有bz2属性的文档
    • -Z:处理有compress属性的文档

文件操作

grep命令

grep用于查找文件中满足查找条件的内容

  • 基本命令
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][查找内容格式(可用正则)][文件/目录...]
  • 参数说明
参数 含义 示例 解释
-a 不要忽略二进制的数据 - -
-b 标示出该行第一个字符的编号 - -
-c 统计符合查找格式的列数 grep -c 超人 jaychou_lyrics.txt 同济jaychou_lyrics.txt文件中包含“超人”的行数
-h 在显示符合样式的那一行之前,不标示该行所属的文件名称 - -
-H 在显示符合样式的那一行之前,表示该行所属的文件名称 - -
-i 忽略字符大小写的差别 - -
-n 在显示符合样式的那一行之前,标示出该行的列数编号 - -
-q 不显示任何信息 - -
-r 以递归的方式查找符合条件的文件 grep -v test /home/test/ 查找/home/test/文件夹及其子文件夹下所有包含test的文件
-s 不显示错误信息 - -
-v 显示不包含匹配文本的所有行 grep -v test test.txt 查找test.txt文件中所有不包含test的行
-V 显示版本信息 - -
-w 只显示全字符合的列 - -
-x 只显示全列符合的列 - -

sed命令

sed可以用来对文件进行增、删、改、查。

  • 基本命令
sed [-nefri] ‘command’ 文件名
  • 参数说明
参数 含义
-n 只显示经sed特殊处理的内容
-e 直接在指令列模式上进行 sed 的动作编辑
-f 将 sed 的动作写在一个档案内
-r sed的动作可以是延伸型正规表示语法
-i 直接修改读取的档案内容
  • 指令说明
参数 含义 示例 解释
a add,新增 sed ‘1,3a test’ test.txt 在test.txt文件第1行到第3行后增加test
c 替换 sed ‘1,3c test’ test.txt 将test.txt文件第1行到第3行替换为一行test
d delete,删除 sed ‘2,$d’ test.txt 删除test.txt文件第2行至最后一行
i insert,插入 sed ‘1,3i test’ test.txt 在test.txt文件第1行到第3行前增加test
p print,列印 sed -n ‘/超人/p’ test.txt 查找test.txt文件中包含“超人”的行
s 替换 sed -n ‘/我/p’ test.py | sed ‘s/我/你/g’ 将test.txt中的“我”替换为“你”
w write,写入 sed ‘1,3w test2.txt’ test.txt 将test.txt中的第1行至第3行写到test2.txt文件中

find命令

find查找指定目录下的文件。

  • 基本命令
find   path   -option   [   -print ][ -exec   -ok   command ] 
  • 参数说明
参数 含义
-mount 只检查和指定目录在同一个文件系统下的文件
-amin n 在过去 n 分钟内被读取过
-anewer file 比文件 file 更晚被读取过的文件
-atime n 在过去n天内被读取过的文件
-cmin n 在过去 n 分钟内被修改过
-cnewer file 比文件 file 更新的文件
-ctime n 在过去n天内被修改过的文件
-empty 空的文件
-ipath p, -path p 路径名称符合 p 的文件,ipath 会忽略大小写
-name name 文件名称符合 name 的文件
-size n 文件大小 是 n 单位
-type c 文件类型是 c 的文件

locate命令

locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查找到文件

  • 基本命令
Locate [-参数] [格式]
  • 参数说明
参数 含义
-e 寻找不满足条件的文件
-n 至多显示 n个输出
-r 使用正规运算式做寻找的条件
-d 指定资料库的路径
-h 显示辅助讯息

Tasks

文件压缩

  • 任务
    • 在指定目录下下载https://mirror.coggle.club/dataset/jaychou_lyrics.txt.zip
    • 打包指定文件夹为zip格式
    • 打包指定文件夹为tar格式。
    • 打包指定文件夹为tar.gz格式。
  • 代码

下载压缩文档

[没有名字!@i-ym8u2kyp ~]$ cd ling
[没有名字!@i-ym8u2kyp ling]$ wget https://mirror.coggle.club/dataset/jaychou_lyrics.txt.zip
--2021-12-21 10:58:54--  https://mirror.coggle.club/dataset/jaychou_lyrics.txt.zip
正在解析主机 mirror.coggle.club (mirror.coggle.club)... 139.215.234.228, 2408:8731:c001:2:3::3fb
正在连接 mirror.coggle.club (mirror.coggle.club)|139.215.234.228|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:52607 (51K) [application/zip]
正在保存至: “jaychou_lyrics.txt.zip”

100%[======================================>] 52,607      --.-K/s 用时 0.02s   

2021-12-21 10:58:55 (2.30 MB/s) - 已保存 “jaychou_lyrics.txt.zip” [52607/52607])

压缩文件夹

[没有名字!@i-ym8u2kyp ~]$ zip ling.zip ling
  adding: ling/ (stored 0%)
[没有名字!@i-ym8u2kyp ~]$ tar czvf ling.tar ling
ling/
ling/datawhale/
ling/datawhale/affairs.txt
ling/vimtest.py
ling/nanotest.py
ling/test5.py
ling/affairs/
ling/affairs/affairs.py
ling/affairs/__pycache__/
ling/affairs/__pycache__/affairs.cpython-36.pyc
ling/test6.py
ling/sleep.py
ling/nohup.out
ling/sleeplog.txt
ling/jaychou_lyrics.txt.zip
[没有名字!@i-ym8u2kyp ~]$ tar zcvf ling.tar.gz ling
ling/
ling/datawhale/
ling/datawhale/affairs.txt
ling/vimtest.py
ling/nanotest.py
ling/test5.py
ling/affairs/
ling/affairs/affairs.py
ling/affairs/__pycache__/
ling/affairs/__pycache__/affairs.cpython-36.pyc
ling/test6.py
ling/sleep.py
ling/nohup.out
ling/sleeplog.txt
ling/jaychou_lyrics.txt.zip

结果
ling.tar、ling.tar.gz、ling.zip三个压缩包。

Linux基础3

使用grep和awk从文件中筛选字符串

  • 任务:

    • 下载周杰伦歌词文本,并进行解压
    • 利用grep命令完成以下操作,并输出到屏幕:
      • 统计歌词中包含【超人】的歌词
      • 统计歌词中包含【外婆】但不包含【期待】的歌词
      • 统计歌词中以【我】开头的歌词
      • 统计歌词中以【我】结尾的歌词
    • 利用sed命令完成以下操作,并输出到屏幕:
      • 将歌词中第2行至第40行删除
      • 将歌词中所有【我】替换成【你】
  • 代码

解压下载好的歌词

[没有名字!@i-ym8u2kyp ling]$ unzip jaychou_lyrics.txt.zip
Archive:  jaychou_lyrics.txt.zip
  inflating: jaychou_lyrics.txt     

统计歌词中包含【超人】的歌词

[没有名字!@i-ym8u2kyp ling]$ grep -c 超人 jaychou_lyrics.txt
5

[没有名字!@i-ym8u2kyp ling]$ grep 超人 jaychou_lyrics.txt
如果超人会飞 那就让我在空中停一停歇
不要问我哭过了没 因為超人不能流眼泪
只能说当超人真的好难
如果超人会飞 那就让我在空中停一停歇
不要问我哭过了没 因為超人不能流眼泪

统计歌词中包含【外婆】但不包含【期待】的歌词

[没有名字!@i-ym8u2kyp ling]$ grep -c 外婆 jaychou_lyrics.txt|grep -v 期待
17

[没有名字!@i-ym8u2kyp ling]$ grep 外婆 jaychou_lyrics.txt|grep -v 期待
我想带你 回我的外婆家
我想带你 回我的外婆家
今天是外婆生日
载着外婆开着拉风的古董车兜兜兜风
外婆她脸上的涟漪
外婆她的无奈
记得去年外婆的生日
表哥带我和外婆参加
是因为看到外婆失落而失落
我告诉外婆 我没输 不需要改变
只要外婆觉得好听
外婆露出了笑容 说她以我为荣
外婆她的无奈
外婆她的无奈

统计歌词中以【我】开头的歌词

[没有名字!@i-ym8u2kyp ling]$ grep -c ^我 jaychou_lyrics.txt
768

统计歌词中以【我】结尾的歌词

[没有名字!@i-ym8u2kyp ling]$ grep -c $我 jaychou_lyrics.txt
0

将歌词中第2行至第40行删除
删除前文件前41行

[没有名字!@i-ym8u2kyp ling]$ sed -n '1,41p' jaychou_lyrics.txt
想要有直升机
想要和你飞到宇宙去
想要和你融化在一起
融化在宇宙里
我每天每天每天在想想想想著你
这样的甜蜜
让我开始乡相信命运
感谢地心引力
让我碰到你
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
想要有直升机
想要和你飞到宇宙去
想要和你融化在一起
融化在宇宙里
我每天每天每天在想想想想著你
这样的甜蜜
让我开始乡相信命运
感谢地心引力
让我碰到你
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人

删除命令

[没有名字!@i-ym8u2kyp ling]$ sed -i '2,40d' jaychou_lyrics.txt

删除后文件前50行

[没有名字!@i-ym8u2kyp ling]$ sed -n '1,50p' jaychou_lyrics.txt
想要有直升机
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
漂亮的让我面红的可爱女人
温柔的让我心疼的可爱女人
透明的让我感动的可爱女人
坏坏的让我疯狂的可爱女人
坏坏的让我疯狂的可爱女人
如果说怀疑 可以造句如果说分离 能够翻译
如果这一切 真的可以
我想要将我的寂寞封闭
然后在这里 不限日期
然后将过去 慢慢温习
让我爱上你 那场悲剧
是你完美演出的一场戏
宁愿心碎哭泣 再狠狠忘记 你爱过我的证据
让晶莹的泪滴 闪烁成回忆 伤人的美丽
你的完美主义 太彻底
让我连恨都难以下笔
将真心抽离写成日记 像是一场默剧
你的完美主义 太彻底
分手的话像语言暴力
我已无能为力再提起 决定中断熟悉
然后在这里 不限日期
然后将过去 慢慢温习
让我爱上你 那场悲剧
是你完美演出的一场戏
宁愿心碎哭泣 再狠狠忘记 你爱过我的证据
让晶莹的泪滴 闪烁成回忆 伤人的美丽
你的完美主义 太彻底
让我连恨都难以下笔
将真心抽离写成日记 像是一场默剧
你的完美主义 太彻底
分手的话像语言暴力
我已无能为力再提起 决定中断熟悉
周杰伦 周杰伦
一步两步三步四步望著天 看星星
一颗两颗三颗四颗 连成线一步两步三步四步望著天 看星星
一颗两颗三颗四颗 连成线乘著风 游荡在蓝天边
一片云掉落在我面前
捏成你的形状
随风跟著我
一口一口吃掉忧愁
载著你 彷彿载著阳光
不管到哪里都是晴天
蝴蝶自在飞
花也布满天
一朵一朵因你而香
试图让夕阳飞翔

将歌词中所有【我】替换成【你】

[没有名字!@i-ym8u2kyp ling]$  sed -n '/我/p' jaychou_lyrics.txt | sed 's/我/你/g'
透明的让你感动的可爱女人
坏坏的让你疯狂的可爱女人
坏坏的让你疯狂的可爱女人
漂亮的让你面红的可爱女人
温柔的让你心疼的可爱女人
透明的让你感动的可爱女人
坏坏的让你疯狂的可爱女人
坏坏的让你疯狂的可爱女人
你想要将你的寂寞封闭

使用find和locate定位文件

  • 任务:
    • 使用find统计文件系统中以py为后缀名的文件个数
    • 使用find寻找/home/文件夹下文件内容包含datawhale的文件
    • 使用locate找到python3.6.1.gz文件
  • 代码

统计文件系统中以py为后缀名的文件个数

[没有名字!@i-ym8u2kyp ling]$ find / -name '*.py'|wc -l 

find: ‘/usr/share/polkit-1/rules.d’: 权限不够
find: ‘/usr/libexec/initscripts/legacy-actions/auditd’: 权限不够
find: ‘/boot/efi/EFI/centos’: 权限不够
find: ‘/boot/grub2’: 权限不够
5810

寻找/home/文件夹下文件内容包含datawhale的文件

[没有名字!@i-ym8u2kyp ling]$ find /home -type d|grep 'datawhale'
/home/datawhale
/home/datawhale/liuy
/home/datawhale/liuy/datawhale
/home/datawhale/jane
/home/datawhale/jane/datawhale
/home/datawhale/jane/affairs
/home/datawhale/catherine
/home/datawhale/catherine/datawhale

#个数
[没有名字!@i-ym8u2kyp ling]$ find /home -type d|grep 'datawhale'|wc -l
2716

定位python3.6.1.gz文件

[没有名字!@i-ym8u2kyp ling]$ locate python3.6.1.gz
/usr/share/man/man1/python3.6.1.gz

参考

Datawhale Linux组队学习

上一篇:第二次作业


下一篇:【Android】Android开源项目分类汇总