日常开发中的shell小技巧

时间:2022-04-18 08:04:40

工具推荐

  • 命令行中很方便的代码统计工具---cloc
  • 强大的分屏工具---tmux
  • 最舒服的markdown书写工具---typora
  • markdown图床推荐--七牛云

模拟生成熵(避免暴力手搓键盘)

计算机本身是可预测的系统(比如开始的过程),因此,计算机算法不可能产生真正的随机数。但是机器的环境中充满了各种各样的随机性的噪声,如硬件设备发生中断的时间,用户点击鼠标的时间间隔等,这些事件是完全随机的,事先无法预测。而Linux内核实现的随机数产生器正是利用系统中的这些随机噪声来产生高质量随机数序列。 linux内核维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。可以输入如下命令查看系统熵值:

cat /proc/sys/kernel/random/entropy_avail

有一些需要高质量的系统随机数的命令,例如gpg生成密钥,需要系统熵池维持一个比较高的值,从而生成安全性更高的密码。暴力按键盘肯定是行不通的,这时就要在命令行中输入如下命令来做到快速提高熵值

sudo rngd -r /dev/urandom  -o /dev/random  -f

/dev/urandom和/dev/random是内核提供的输出随机数的字符设备, rngd是与内核随机数生成相关的一种工具,具体信息可以参见:传送门

git提交时不用输入密码的方法

git是日常开发三大利器之一,但是对于git的配置还有很多细节,比如每次提交时要输入密码,如果你有一大堆操作,那么每次都输入账号和密码真实头痛,一个思路是配置ssh密钥,但是对于http方式就行不通了,这时我们可以输入如下命令:

git config --global credential.helper store

这条命令的作用是在本地建立一个证书文件,会自动帮我们保存输入正确的用户名和密码,只需要输入一次,git就会帮我们自动保存,之后的操作就不需要再输入密码了。具体的文档链接:传送门

自动输密码的脚本,基于expect

上文说到了通过保存一个证书来使得git操作不需要输入密码,但是如果在其他的命令中,没有这样方便的命令自带的设置,那我们又该如何操作呢。且如果需要连续输入多次密码,比如给当下文件夹下的所有deb文件进行加密,如果要手动一遍一遍输入,这是个超级痛苦的过程,这是我们就需要去模拟shell中的交互,而except系列命令就是一个很好的工具,示例脚本如下:

#!/usr/bin/expect
set password "xxxxxx" # 定义具体密码的值
set files [glob -nocomplain -- ./*.deb] # 列出当前目录下所有deb文件
puts "[llength $files]" # 输出总文件数量
for {set i 0} {$i<[llength $files]} {incr i 1} { # 遍历每个deb文件
set fileName [lindex $files $i]
spawn sudo dpkg-sig --sign builder $fileName # 启动一个进程进行加密
expect "*Enter passphrase:*" # 监测收到的输入密码的提示信息
send "$password\n" # 输入密码
puts "$fileName"
}
interact

expect的语法是基于tcl的,与bash中的脚本写法有一些不同。

这是tcl语法教程的链接:传送门

这是expect教程的链接:传送门