The missing semester 5 习题(待更新完毕)

95 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天

命令行环境

任务控制

1.我们可以使用类似 ps aux | grep 这样的命令来获取任务的 pid ,然后您可以基于pid 来结束这些进程。但我们其实有更好的方法来做这件事。在终端中执行 sleep 10000 这个任务。然后用 Ctrl-Z 将其切换到后台并使用 bg来继续允许它。现在,使用 pgrep 来查找 pid 并使用 pkill 结束进程而不需要手动输入pid。(提示:: 使用 -af 标记)。

输入sleep 10000
输入pgrep sleep得到其pid
输入pkill sleep直接杀死所有sleep
习题解答中提到使用 pkill -af sleep但是在我的机器上不适用。希望能有大佬解决这个问题。

2.如果您希望某个进程结束后再开始另外一个进程, 应该如何实现呢?在这个练习中,我们使用 sleep 60 & 作为先执行的程序。一种方法是使用 wait 命令。尝试启动这个休眠命令,然后待其结束后再执行 ls 命令。

答案的sleep 60 & pgrep sleep | wait; ls在我的机器上并不起作用 我自己的答案sleep 60 || grep sleep | wait ;ls这个能获得预期的效果,但是与要求不太对应

3.但是,如果我们在不同的 bash 会话中进行操作,则上述方法就不起作用了。因为 wait 只能对子进程起作用。之前我们没有提过的一个特性是,kill 命令成功退出时其状态码为 0 ,其他状态则是非0。kill -0 则不会发送信号,但是会在进程不存在时返回一个不为0的状态码。请编写一个 bash 函数 pidwait ,它接受一个 pid 作为输入参数,然后一直等待直到该进程结束。您需要使用 sleep 来避免浪费 CPU 性能。

终端多路复用

1.请完成这个 tmux 教程 参考这些步骤来学习如何自定义 tmux。

按照教程即可,或者可以看这个教程。

别名

1.创建一个 dc 别名,它的功能是当我们错误的将 cd 输入为 dc 时也能正确执行。

输入alias dc="cd" 然后输入 dc ~即可验证结果

2.执行 history | awk '{1="";printsubstr(1="";print substr(0,2)}' | sort | uniq -c | sort -n | tail -n 10 来获取您最常用的十条命令,尝试为它们创建别名。注意:这个命令只在 Bash 中生效,如果您使用 ZSH,使用history 1 替换 history。

输入上述命令获取常用的命令,然后按照问题1来解决即可

配置文件

让我们帮助您进一步学习配置文件:

1.为您的配置文件新建一个文件夹,并设置好版本控制。
2.在其中添加至少一个配置文件,比如说您的 shell,在其中包含一些自定义设置(可以从设置 $PS1 开始)。
3.建立一种在新设备进行快速安装配置的方法(无需手动操作)。最简单的方法是写一个 shell 脚本对每个文件使用 ln -s,也可以使用专用工具
4.在新的虚拟机上测试该安装脚本。
5.将您现有的所有配置文件移动到项目仓库里。
6.将项目发布到GitHub。

远端设备

进行下面的练习需要您先安装一个 Linux 虚拟机(如果已经安装过则可以直接使用),如果您对虚拟机尚不熟悉,可以参考这篇教程来进行安装。

由于手头没有额外设备暂且搁置。 1.前往 ~/.ssh/ 并查看是否已经存在 SSH 密钥对。如果不存在,请使用ssh-keygen -o -a 100 -t ed25519来创建一个。建议为密钥设置密码然后使用ssh-agent,更多信息可以参考这里

xuqiuming@xuqiuming-computer:~$ cd ~/.ssh xuqiuming@xuqiuming-computer:~/.ssh$ ls
id_rsa id_rsa.pub known_hosts known_hosts. old
我这里已经有了,所以新建一个 输入ssh-keygen -o -a 100 -t ed25519
然后会提示输入密码,输入或是不输入都行,不输入直接回车
到~/.ssh下可以看到新建的

2.在.ssh/config加入下面内容:

    User username_goes_here
    HostName ip_goes_here
    IdentityFile ~/.ssh/id_ed25519
    LocalForward 9999 localhost:8888 

切换搭配对应目录使用vim添加即可,vim怎么用?请见我前面的文章请STFW或者STFM。

3.使用 ssh-copy-id vm 将您的 ssh 密钥拷贝到服务器。

4.使用python -m http.server 8888 在您的虚拟机中启动一个 Web 服务器并通过本机的http://localhost:9999 访问虚拟机上的 Web 服务器。
5.使用sudo vim /etc/ssh/sshd_config 编辑 SSH 服务器配置,通过修改PasswordAuthentication的值来禁用密码验证。通过修改PermitRootLogin的值来禁用 root 登录。然后使用sudo service sshd restart重启 ssh 服务器,然后重新尝试。
6.(附加题) 在虚拟机中安装mosh并启动连接。然后断开服务器/虚拟机的网络适配器。mosh可以恢复连接吗?
7.(附加题) 查看ssh的-N 和 -f 选项的作用,找出在后台进行端口转发的命令是什么?