积累一些shell的命令和用法。
shell 压缩文件夹
1 | tar zcvf [打包后生成的文件名全路径(也可以是相对路径)] 要打包的目录 |
比如,想把当前文件夹的dist文件夹打包成压缩包:
1 | tar zcvf dist.tar.gz ./dist |
解压缩文件
1 | tar zxvf [需要解压缩的文件] |
解压会解压在当前文件夹。
将文件上传到服务器
1 | scp [文件所在本地路径] username@servername:[服务器路径] |
例如,我需要将上面生成的压缩文件上传到服务器的data路径,那么可以:
1 | scp ./dist.tar.gz root@121.41.40.138:/data |
但这样是需要输入的内容比较多,而且要再次输入服务器的密码。那能不能再服务器的shell里面直接上传呢?🤔
可以使用pem格式的私钥,.pem
格式的文件既是私钥,也是公钥。用pem的密钥方式登录就可以不用输入密码。
1 | scp -r -i ~/.ssh/aliyun-tcs.pem ./blog-$(date +%Y%m%d-%H-%M).tar.gz root@121.41.40.138:/data/wwwroot/hexo_blog |
解压zip文件:
1 | unzip filename.zip |
由于Windows下的压缩包多为zip,所以在mac上解压缩的时候会有乱码的问题,如果解压出错(err22)的话需要命令:
1 | ditto -V -x -k --sequesterRsrc filename.zip destination |
filename.zip
是你要解压的zip压缩文件,destination
是解压后的文件存放的路径。
生成ssh
1 | ssh-keygen -t rsa -C "your_mail@example.com" -f github_rsa |
给文件权限
比如想给我们的发布脚本执行权限:
1 | chmod +x deploy.sh |
递归查找字符串
比如我们想在src/app
文件夹中查找english
这个字符串:
1 | grep -rn 'english' src/app |
grep选项:
-r
是递归查找-n
在找到的结果中显示行号-R
查找所有文件包含子目录-i
忽略大小写
批量重命名
(macOS)重命名可以采用rename
命令,这个需要从brew
中安装:
1 | brew install rename |
重命名当前的文件:
1 | rename 's/old/new/' *.png |
那假如有一个angular的项目,现在希望从less转换到scss,想把项目文件夹里面的所有.less
文件转换为.scss
文件,怎么搞?
需要结合find
和xargs
命名。find命名找到所有的文件,然后通过xargs
传递给rename
命令:
1 | find . -name '*.less' | xargs rename 's/less/scss/' |
即可全部转换为scss文件。
也可以使用正则表达式,比如我现在有文件:
1 | 3491699_photos.tcs-y.com.key |
我先删除掉前面的数字和下划线,只留下后面的名字,那只需要运行:
1 | rename "s/(\d+)_//" * |
very good! o( ̄▽ ̄)d
批量删除
有文件分布在不同的目录,需要全部删掉,那么需要。比如,我在拉了代码后发现有很多的.DS_Store
:
1 | Untracked files: |
先用find
命令找到这些文件:
1 | find -name '.DS_Store' |
可以看到:
1 | $ find . -name '.DS_Store' 130 ↵ |
然后组合这个命令将找到的文件路径传递给rm -rf
命令即可:
1 | find . -name '.DS_Store' | xargs rm -rf |
然后再用git status
查看,发现这些文件都删除了,nice!
npm/yarn 安装node-sass缓慢
安装过几次node-sass
都非常缓慢,甚至于没有响应(其实就是非常慢而已)。怎么办?
确保已经将源设置为了淘宝的源:
1 | npm config set registry https://registry.npm.taobao.org |
还是很慢,因为除了npm的部分代码外,还会下载二进制文件binding.node
,默认源是github
。所以我们将这个改为国内的源:
1 | SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ yarn add node-sass |
alias 别名
有时候装的一些软件(比如Ohmyzsh)会自动附带一些插件(比如git)会有自带的alias
别名,假设我们定义的一些别名有冲突的话就很麻烦,我们需要找到这个插件是在哪里定义的,我们可以用下面的命令找(这里用gm来做演示):
1 | bash -ixlc : 2>&1 | grep gm |
如果找不到的话就用:
1 | $ zsh -ixlc : 2>&1 | grep gm |
如果找到的话,会在羡慕列出对应的别名在哪个文件中。
对于一些讨厌的alias,我们可以直接取消它:
1 | unalias gm |
😊
参考文章:为什么node-sass总是安装失败