WorkShop 笔记:Linux shell 命令密室逃脱之旅

Thanks to 讲师/谈一秀、杜屹东

内容前瞻

在日常工作中,命令行工具已凭借其强大的功能和简洁的交互形式称霸类 Unix 操作系统。

你是否在使用命令行工具的时候为找不到合适的工具而烦恼?是否在面对复杂任务的时候感到力不从心?

本次 workshop 将为你揭开 shell command 的神秘面纱!通过本次 Linux 密室逃脱之旅,你将会掌握一些实用的 shell 技能,超越 GUI 限制,提升工作效率。

正式开工

场景:vagrant 启动虚拟机,使用 ssh「快速」登录 Linux 机器,发现 Tomcat 没启动,启动后发现端口被占用 http://192.168.33.20:8080/,然后 kill 掉进程却发现内容被压缩然后找不到了,切换用户(找到密码)才发现文件,解压后却发现内容被篡改,然后一键替换内容才最终还原网页。
命令/快捷键 解释/作用/备注
ssh-keygen -t rsa 后续选择文件夹可以在当前位置生成密钥对
scp id_rsa.pub dev@192.168.33.20:/.ssh 拷贝公钥(id_rsa.pub)到服务器上
cat id_rsa.pub >> authorized_keys 快速添加内容到特定文件 > 覆盖、>> 增加
ssh -i ./id_rsa dev@192.168.33.20 (--identity_file 带上身份认证秘钥)
echo IdentityFile $PWD/id_rsa >> ~/.ssh/config 一行命令 id_rsa 文件路径增加到指定配置文件
ssh bws ssh + 别名 Host,快速登录到 Linux 机器
tldr systemctl » man tldr 好于 man,只是比较慢
命令/快捷键 解释/作用/备注
set -o emacs 设置 bash 的快捷键模式
Ctrl + A 跳到行首
Ctrl + E 跳到行尾
Ctrl + U 清除当前输入
Ctrl + R 搜索历史命令
Ctrl + L 清屏,但保留记录
Ctrl + K 从当前位置删除至尾
Ctrl + W 删除单词
命令/快捷键 解释/作用/备注
grep -v ^# .README.md 找出非注释消息
lsof -i:8080 查找特定端口进程
ps -ef | grep java 查找特定程序进程
sudo systemctl restart tomcat systemctl 是系统命令,需要 sudo
cat /proc/version 查看当前系统信息
Linux version 3.10.0-327.18.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu May 12 11:03:55 UTC 2016
命令/快捷键 解释/作用/备注
grep -rI 747339117 . 查找特定文字的文件
set encoding:utf-8 vim 设置编码
Ctrl + Z vim 转入后台进程
fg + Enter 返回 vim 后台进程
find root_path -name '*.tar.gz' 找到特定后缀名的文件
find / -name "*.tar.gz" 2>>/dev/null 过滤无用错误信息(2)
cat /etc/passwd 查看所用用户
su - Darker 切换到用户并新建 shell(带环境变量)(A mere - implies -l, --login.)
[dev@localhost ~]$ su Darker
Password:
[Darker@localhost dev]$ sudo -iu dev
[dev@localhost ~]$
grep -r "Darker" 找到密码 U2Fsd, 再查找一次 tar 包
.README.md:This is the message: Check the port and kill the process, you can start tomcat right. # Kissing your hand may make you feel very good, but a diamond and sapphire bracelet lasts for ever. -- Darker:U2Fsd,
命令/快捷键 解释/作用/备注
tldr locate 也可以快速定位文件并且省内存,但是需要 sudo 权限
alias ll='ls -al' 设置别名(只在当前进程生效,写入 .bashrc
tar -zxvf /home/Darker/.src/20/.web.tar.gz 解压文件,注意 -z 参数在不同系统作用不同
sudo mv index.html /usr/share/tomcat/webapps/ROOT/ 页面正常但是发现网页内容被篡改了
sudo sed -i 's/Darker/ThoughtWorkers/g' index.html 替换文本 /find/replace/
sed -r 's/regex/replace/g' filename 则用于替换正则表达式
cd /etc/sudoers.d/ 可以新建文件给每个用户设置 sudo 权限
sudo -l 查看当前用户的 sudo 权限
history 查看所有命令记录
Ctrl + D 返回上一个 Session,用于连续退出
pstree 树状显示所有的进程

禁止网页右键? 使用 JavaScript 可以做到,监听事件永远返回 false

Installing the Z Shell (zsh) on Linux, Mac OS X and Windows,可惜也需要 sudo 权限。

Finally!!!

另外不得不说 Dash 太好用了,好用到哭,/(ㄒ o ㄒ)/~~

一点儿小思考

  • 关于 DevOps 的一个疑问?其工作的持续时间是一阵一阵的吗?如果一次性都做完了,那么性质就变成了一劳永逸的事情,岂不是之后都不用再维护了吗?
  • 那么 DevOps 如何使得需求源源不断来保证自己工作的必要性呢,(手动微笑)而这样的性质似乎很适合拿来做咨询项目呀?
  • 另一方面的思考就是,正因为其不持续的必要性,DevOps 应当作为开发者的基本素质而不应为其专门设置职位,在迭代开始的最早期就把最困难的部分做好做完善,一劳永逸。
  • 而随着 AWS 等各类“服务”性质平台的不断完善,这方面的工作大概会越来越少并且现有工具、脚本都将成为资产,值得被维护,也应当被持续维护,但属于 Developer 分内的事情。