openbiox
首发于openbiox
openbiox 的 Linux 系统和 Shell 编程的问题录(长期更新)

openbiox 的 Linux 系统和 Shell 编程的问题录(长期更新)

今天(2019 年 4 月 3 日)是 openbiox 正式成立后过去的整整一个月。真是一点点看着 openbiox 从无到有,从零到整。招募信发布短短几日,我们便已提前完成第一批成员的招募。而在短短一个月的时间内,我们便已提出了 40 多项实践项目创意 ,涵盖了生物信息学的众多方向。

通过第一批启动项目我们发展出了至少 11 支项目团队,并且大多已经完成了后续几个月的进度计划和工作内容安排分配。在未进行成员会费收纳的情况下,我们已经积累了足够满足大多数实践项目的开展的资源:资金超过 1 万 2 千元有余,网页/计算服务器若干。

playcloud 本年度学习目标

除了资金和人员,我们通过常务委员会例会、每周一问、个人月度总结等集体活动也积累到了大量的知识和技能(包括但不限于团队管理、项目管理、时间安排、生物信息学基础知识、数据分析 Pipeline 开发等等)。

这篇文章的内容主要是基于 openbiox 项目团队之一 playcloud 在 GitHub 仓库积累的学习资源,并主要针对 Linux 系统和 Shell 编程专题。

Linux 和 Shell 编程专题

简答题

1. 计算机硬件和软件的关系是什么?

2. 常见的 Linux 发行版本有哪些?它们的主要差别在什么地方?

3. 如何在一台全新的计算机上安装 Linux 操作系统?

4. 在 Win10 自带的子系统下运行 Ubuntu,和独立使用 Ubuntu 系统,前者的优缺点如何?

5. Linux 系统常见的文件系统有哪几种?Windows系统上看到的C盘、D盘,在Linux 系统下是以什么样的形式存在?

6. 什么是“根目录“、“家目录”?

7. 简述文件的绝对路径和相对路径

8. Linux 系统在根目录(/)下一般会有哪些目录,它们分别有什么作用?

9. 什么是 Linux 系统的内核,如何查看内核版本号?

10. 在 Linux 下如何查看电脑的硬件信息(如内存、CPU、硬盘、显卡等)

11. 在 Linux 需要使用哪些命令来挂载一个移动硬盘?如果挂载时报错,一般会有哪几种情况?分别怎么解决?

12. Linux 系统中的 644、755、777 文件权限分别表示什么意思?他们的数字是怎么计算得来的?修改文件权限的命令是什么?怎么设置用户文件的默认权限?

13. rsync,scp 都可以用来在服务器之间传输文件,它们的主要区别是什么?

14. 在命令行界面,如何用 Vim 编辑器打开一个文本文件、创建一个文件、对文件进行修改和保存?

15. 什么是 stderr 和 stdout?

16. 管道在 Shell 中是一个什么样的角色?

17. 如何使用管道将上游的数据传入 Vim 编辑器?

18. 如何将程序的 stdout 和 stderr 通过管道输出到两个文件?

19. 如何查看隐藏文件

20. 如何使用 ROOT 权限?如何切换不同的身份

21. 如果输入的 shell 脚本过长,快速删除有哪些快捷键呢?如何快速调整光标位置

22. Linux 文件操作时,比较 awk/grep/sed 三剑客的用法

23. Linux 系统中哪个文件是黑洞,可以吃掉 Shell 管道中流动的信息

24. Linux 系统如何设置开机自动挂载(mount)你的移动介质(如U盘、移动硬盘)

25. 如何组装服务器和安装Linux系统

26. Linux 有哪些常见系统,以及它们的区别是什么

27. Linux 三剑客是哪三个,常用命令有哪些

28. Windows 子系统(WSL)的安装目录如何迁移?

29. WSL 如何自动挂载硬盘使其目录保持 755,文件保持 644 权限?

30. 如何批量修改某个目录下的目录权限为 755,文件权限为 644?

31. 在 Windows 桌面环境直接编辑 WSL 内的目录和文件(自动挂载的目录和文件除外)有什么后果?

32. 如何设置 Vim 编辑器,使其支持:a) 文件/目录路径提示和自动补全; b) Python 函数自动补全;c) 左侧显示目录树;d) 各种文件的语法高亮

33. 什么是 X server?

34. Manjaro Deepin Linux 是一个什么样的存在?

35. Centos 系统如何开放指定端口的入和出的访问?

36. Centos 和 Ubuntu 系统如何查看当前服务器的 IP地址和 MAC 地址?

37. Centos 和 Ubuntu 系统如何查看即时网速?

38. 如果你没有买域名,如何在本地模拟某个域名的访问?

39. 如何查看并设置当前环境的语言?en_us.utf-8 和 zh_cn.utf-8 分别代表什么?

40. 如何新增一个用户并赋予该用户 root 权限?

41. 跟 nano 相比,vim 的优势在哪里?在 vim 里,`p` 与 `P` 两种指令下粘贴的效果有什么区别?

42. 在 vim 中,编辑完文件后显示 E45: 'readonly' option is set 时,如何强制写入该档案并保存退出?

43. echo $? 的输出表示什么意思?

编程题

1. 使用 bash 实现一个函数,输入整数 n,得到 1 到 n 的累加和

2. 通过 Shell 命令提取 gtf 中编码基因的 gene symbol 和 gene id

3. 假设有如下文件“sample.txt",文件中包含有若干列重复列。请保留一列重复列,并不影响列顺序。

COL1,COL2,COL3,COL1,COL4,COL2
1,2,3,1,4,2
a1,a2,a3,a1,a4,a2
b1,b2,b3,b1,b4,b2
d1,d2,d3,d1,d4,d2

变为

COL1,COL2,COL3,COL4
1,2,3,4
a1,a2,a3,a4
b1,b2,b3,b4
d1,d2,d3,d4

4. 使用 bash 编程实现时间戳功能,如下为 ngsjs 的 `rtime_stamp` 命令行程序(R语言)输出

$ rtime_stamp
[[1]]
[1] "2019_04_03_18_53_44_" "2019_04_03_18_53_"    "2019_04_03_18_"
[4] "2019_04_03_"          "2019_04_"             "2019_"

[[2]]
[1] "2019-04-03-18-53-44-" "2019-04-03-18-53-"    "2019-04-03-18-"
[4] "2019-04-03-"          "2019-04-"             "2019-"

[[3]]
[1] "2019/04/03/18/53/44/" "2019/04/03/18/53/"    "2019/04/03/18/"
[4] "2019/04/03/"          "2019/04/"             "2019/"

$ rtime_stamp -r 'x[[1]]'
2019_04_03_18_56_55_
2019_04_03_18_56_
2019_04_03_18_
2019_04_03_
2019_04_
2019_

$ rtime_stamp -r 'x[[1]][1]'
2019_04_03_18_57_18_

5. 尝试使用源码编译安装最新版本的 R,记录过程中遇到的问题。同时使用系统自带的包管理器(如 centos 的yum;Debian/Ubuntu 的 apt;arch、manjaro 的 pacman)、CondaSpack 安装相同版本的 R。

6. 使用 Spack 在指定不同版本的 gcc 编译器(如8.3、5.4 和 4.8)情况下安装最新版本的R。并比较一些 R 基础函数的速度在计算较大数据量时是否有变化。

编辑于 2019-04-21

文章被以下专栏收录