Datawhale Linux组队学习
2021年12月28日 更新
开启更多功能,提升办公效能

Part1 内容介绍

在给大家分享知识的过程中,发现很多同学在学习竞赛和工作中都存在下列问题:

  • Linux不会操作,不知道文件目录创建、命令行等细节
  • Linux不知道如何运行代码,保存模型


而上述问题都是一个竞赛选手、一个算法工程师所必备的。因此我们组织了本次linux实践练习活动。在活动中我们将布置具体任务,参与的同学们不断闯关完成,通过这些实践任务尽可能地帮助大家入门。




Part2 Linux基础使用

学习内容

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。


Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。在全球超级计算机TOP500强操作系统排行榜中,Linux的占比最近十几年长期保持在85%以上,且一直呈现快速上升趋势。根据2016年的排行榜,Linux的占比已经高达98.80%。其实在各种大、中小型企业的服务器应用领域,在企业内部服务器99%的情况下都是Linux系统,如果你想成为一个合格的软件工程师&算法工程师,Linux是你必备的技能。


打卡汇总

任务名称

难度

所需技能

使用命令行登录指定的Linux环境

低、1

ssh

在目录下创建文件夹、删除文件夹

低、1

rm、mkdir

在目录下下载文件、阅读文件

低、1

wget、nano

在目录下使用vi或vim编辑文件

中、2

vi、vim

在目录下创建py文件,并进行运行

中、2

python

在目录下创建py目录,并进行import导入

中、2

python

在Linux系统中后台运行应用程序,并打印日志

中、2

nohup

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

高、3

grep、sed

在目录下创建zip和tar压缩文件,并进行解压

中、2

zip、tar

使用find和locate定位文件

低、1

find、locate

学习资料

https://bilibili.com/video/BV1yr4y1C7RC

https://bilibili.com/video/BV1Zr4y1F7sQ

https://bilibili.com/video/BV1S64y1v7UG


打卡要求

注:

  • 需要使用指定的Linux系统完成打卡任务
  • 需要完成所有的任务细节才算完成一个任务
  • 打卡笔记需要放上所有的任务细节截图,按任务顺序列好,按细节加上标题
  • 鼓励大家加上自己的知识点总结、心得体会、实践代码
  • 可以使用博客平台,也可以使用在线文档,需要能够提供不登录公开阅读权限


任务1:使用命令行登录指定的Linux环境

任务要点:ssh登录、密码输入、环境配置

  • 步骤1:配置本地登录环境
  • 如果是window系统,安装任意一款ssh工具
  • 如果是ubuntu,需要自己手动安装ssh-server。
  • 如果是Mac或CentOS系统,则不需要,可以直接使用ssh
  • 步骤2:使用如下信息登录系统
  • 用户名:datawhale,密码:datawhale,IP:139.198.15.157
  • 如果登录失败,可在组队学习群@航海士协助你解决


任务2:在目录下创建文件夹、删除文件夹

任务要点:创建文件夹、创建文件、删除文件、删除文件夹

  • 步骤3:
  • 在/home/datawhale目录下,新建一个以你英文昵称(中间不要有空格哦)的文件夹A
  • 在文件夹A内部创建一个以datawhale命名的文件夹B
  • 步骤4:在B文件夹内创建一个空txt文件
  • 步骤5:删除步骤4创建的文件
  • 步骤6:删除文件夹B,然后删除文件夹A



任务3:在目录下下载文件、阅读文件

任务要点:下载文件、移动文件、阅读文件

  • 步骤1:
  • 在home/datawhale目录下,新建一个以你英文昵称(中间不要有空格哦)的文件夹A
  • 在文件夹A内部创建一个以datawhale命令的文件夹B
  • 步骤3:使用head、cat、tail命令阅读下载的文件。
  • 步骤4:在命令行使用ipython进入python3环境,并使用pandas读取下载的文件。



任务4:在目录下使用vi或vim编辑文件

任务要点:vi和vim使用

  • 步骤3:分别使用Nano和Vim创建py文件,并输入以下内容,并运行
#!/usr/bin/env python3
print('Hello World!')


任务5:在目录下创建py文件,并进行运行

任务要点:python的os和sys系统接口,文件接口

  • 步骤3:在home/datawhale目录下,在你英文昵称(中间不要有空格哦)的文件夹中,新建一个test5.py文件,改程序可以使用os、sys模块完成以下功能:
  • 功能1:打印命令行参数
命令行输入:
python3 test5.py 参数1 参数2

程序输出:
test5.py
参数1
参数2
  • 功能2:使用os模块打印/usr/bin/路径下所有以m开头的文件。


任务6:在目录下创建py目录,并进行import导入

任务要点:python代码模块化

  • 步骤2:在/home/datawhale目录下在你英文昵称(中间不要有空格哦)的文件夹中创建affairs文件夹。
  • 步骤3:编写test6.py和affairs.py完成以下功能:
  • 功能2:test6.py可以导入affairs.py代码
  • 功能3:test6.py可以进行命令行解析,输出affairs.txt具体的第几行内容。


/home/datawhale/
你英文昵称命名的文件夹/
test6.py
affairs/
affairs.py


实现要求:

在/home/datawhale/你英文昵称命名的文件夹/目录下,可以执行:

python3 test6.py 10
没有bug,并完成第十行内容的输出。


任务7:在Linux系统中后台运行应用程序,并打印日志

任务要点:程序后台运行,进程管理

  • 步骤1:在/home/datawhale目录下在你英文昵称(中间不要有空格哦)的文件夹中创建一个sleep.py文件,该文件需要完成以下功能:
  • 程序一直运行
  • 每10秒输出当前时间
  • 步骤2:学习 & 和 nohup后台执行的方法

https://blog.csdn.net/a736933735/article/details/89577557

http://ipcmen.com/jobs

  • 步骤3:学习tmux的使用,将步骤1的程序进行后台运行,并将输出结果写入到txt文件。


任务8:使用grep和awk从文件中筛选字符串

任务要点:字符筛选

  • 步骤1:下载周杰伦歌词文本,并进行解压。

https://mirror.coggle.club/dataset/jaychou_lyrics.txt.zip

  • 步骤2:利用grep命令完成以下操作,并输出到屏幕

https://blog.csdn.net/baidu_41388533/article/details/107610827

https://www.runoob.com/linux/linux-comm-grep.html

  • 统计歌词中 包含【超人】的歌词
  • 统计歌词中 包含【外婆】但不包含【期待】的歌词
  • 统计歌词中 以【我】开头的歌词
  • 统计歌词中 以【我】结尾的歌词
  • 步骤3:利用sed命令完成以下操作,并输出到屏幕

https://www.cnblogs.com/JohnLiang/p/6202962.html

  • 将歌词中 第2行 至 第40行 删除
  • 将歌词中 所有【我】替换成【你】


任务9:在目录下创建zip和tar压缩文件,并进行解压

任务要点:文件压缩

https://www.cnblogs.com/wxlf/p/8117602.html

  • 步骤2:使用zip 压缩/home/datawhale目录下在你英文昵称(中间不要有空格哦)的文件夹
  • 将步骤3:步骤3:将 /home/datawhale目录下在你英文昵称(中间不要有空格哦)的文件夹,打包为tar格式。
  • 步骤4:将 /home/datawhale目录下在你英文昵称(中间不要有空格哦)的文件夹,打包为tar.gz格式。


任务10:使用find和locate定位文件

任务要点:文件搜索

https://www.runoob.com/linux/linux-comm-find.html

https://www.cnblogs.com/linjiqin/p/11678012.html

  • 步骤1:使用find统计文件系统中以py为后缀名的文件个数
  • 步骤2:使用find寻找/home/文件夹下文件内容包含datawhale的文件
  • 步骤3:时候用locate寻找到python3.6.1.gz文件


Part3 提问&回答

感谢热心答疑的助教“Halo”大佬、“tomo”大佬


  1. 具体的活动是怎么安排的?
根据具体任务安排,自己先尝试,然后可在组队学习群内提问和讨论。


  1. 环境和配置是什么?
Linux上进行学习,python3环境。


  1. 服务器登录不上?
使用校园网可能会无法访问,可使用手机热点登录。


  1. 教程文档中的链接打不开?
石墨文档上的链接点击后可能会把链接后的中文也加上,可以看看浏览器地址栏,若有链接以外的字符需要删除。
(感谢“366℃”同学)


  1. 找不到pandas库?
python默认是调用2.7 里面没有pandas,需要用python3执行。
可以在py文件加一行 #!/bin/python3,加上x权限。
(感谢“哪儿吃”同学)


  1. from模块import函数不报错,直接import函数出错?
在affairs文件夹创建一个__init__.py的空文件。
弄清运行的代码和被import的代码文件路径关系,默认当前目录 . 是在 pythonpath的。
(感谢“366℃”同学、“哪儿吃”同学)


  1. 在服务器上操作被拒绝访问?
root账户才能在home下操作。可以在用户主目录下用mkdir创建自己的目录,在自己的个人目录下创建文件。
cd ~ 就是到当前用户的主目录了。
(感谢“哪儿吃”同学、“披头”同学)


  1. 没有后缀的都是文件夹?
linux文件可以没有后缀。
/usr/bin目录里一般放的是二进制可执行文件。
(感谢“披头”同学)


  1. nohup和nohup+&有什么区别呢
nohup执行后默认会将输出保存在nohup.out文件,但执行后无法接受标准输入,关闭窗口后仍然会运行。
&无法将标准输出保存到文件中,关闭窗口后程序就会停止。
nohup &一起使用综合了两者的优点,既能标准输入也能将标准输出的日志输入到文件,关闭窗口后仍然会运行。


  1. 为什么放到后台的程序,输出到nohup.out的结果回又几分钟的延迟

这个日志内容没变,可能还是上一次的日志。上一次是结束了后台程序所以文件最后有keyboardinterrupt。
至于为什么这次没输出,可以查一下 python stdout 缓存,修改方法是 python 指令加参数 -u 取消缓存
(感谢“MarioZZJ”同学)


  1. 使用jobs命令,输出里看不到进程,但是程序一直在跑
jobs命令只能显示当前控制台创建的任务,关闭窗口就看不到了,可以用ps命令来看。


  1. 如何实现输出到文件?
tmux是输出到屏幕,不过后台运行看不到了,现在需要将输出输入到txt中。
使用输出重定向操作。
(感谢“MarioZZJ”同学、“哪儿吃”同学、“Dehua”同学)


  1. nohup 执行的命令怎么关闭exit 也不能停止,nohup.out一直在打印。
kill -9 进程号。
(感谢“哪儿吃”同学、“JZTang”同学)


  1. 代码照搬不能运行

目录层级不对,需要在自己昵称命名的文件夹下运行。
(感谢披头同学)


  1. 代码中的“*”是什么意思?

在python3.8之后函数参数中允许出现/和*号。单独出现在参数中的*参数表示*后面的参数必须为关键字参数的形式。如果你希望强迫调用者使用某些参数,且必须以关键字参数的形式传参,那么你只需要在所需位置的前一个位置放置一个*。


16.如何统计包含【外婆】但不包含【期待】的歌词

使用管道符号“|”将grep 和 grep -v连接起来,前一个的输出接着作为下一个的输入。
(感谢“Hoo7.256”同学、“MarioZZJ”同学)