一、前言
- 在通过ssh来远程操纵Linux/Unix服务器时,都是使用 shell 而不是用户界面
- 相比于通过点击多个用户界面来执行操作,输入命令行更加直接和快捷
- 利用管道组合各种可用工具,来创建和定制宏工具
- 使用shell script将重复简单的任务自动化
二、Shell 基本语法
Shell常用特殊变量
变量 含义$0
当前脚本的文件名$n
传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2$#
传递给脚本或函数的参数个数$*
传递给脚本或函数的所有参数$@
传递给脚本或函数的所有参数。被双引号(” “)包含时,与 $* 稍有不同$?
上个命令的退出状态,或函数的返回值。成功返回0,失败返回1$$
当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
$*
和$@
都是将参数一个一个返回"$*"
将所有参数当做一个整体字符串返回
常用判断参数
-a file exists.
-b file exists and is a block special file.
-c file exists and is a character special file.
-d file exists and is a directory.
-e file exists (just the same as -a).
-f file exists and is a regular file.
-g file exists and has its setgid(2) bit set.
-G file exists and has the same group ID as this process.
-k file exists and has its sticky bit set.
-L file exists and is a symbolic link.
-n string length is not zero.
-o Named option is set on.
-O file exists and is owned by the user ID of this process.
-p file exists and is a first in, first out (FIFO) special file or named pipe.
-r file exists and is readable by the current process.
-s file exists and has a size greater than zero.
-S file exists and is a socket.
-t file descriptor number fildes is open and associated with a terminal device.
-u file exists and has its setuid(2) bit set.
-w file exists and is writable by the current process.
-x file exists and is executable by the current process.
-z string length is zero.
判断命令
命令 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
ge | 大于等于 |
le | 小于等于 |
三、推荐安装工具
rz与sz的功能
mac 跳板机的上传下载功能
https://github.com/snow-sprite/rzsz
iterm
基本配置
- 查看当前机器安装了哪些shell: cat /etc/shells
- 把bash切换成zsh: chsh -s /bin/zsh
- 切换到bash:chsh -s /bin/bash
- 安装 oh my zsh:curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
高效使用zsh:
- 选中即复制:无需
command+c
- 屏幕分隔
command+d
: 垂直分割command+shift+d
: 水平分割
- 快速唤出:设置热键为:
option+空格键
- 显示复制历史:command+shift+h
- 全屏切换:
command+enter
- 全文查找:
command + f
- 自动补全命令:
command + ; | tab键
- 执行上一条命令:
!!
- 显示所有命令别名:
alias
- 设置别名:
alias pod_update='pod update --verbose --no-repo-update'
- 设置别名:
autojump
- 快速切换路径
brew install autojump
- zsh: command not found: j 报错(在.zshrc文件相应的位置,找到 plugins=() 这行,添加 autojump 记得各插件名之间用英文空格隔开,然后重启item即可) ```bash $j
然后敲击tab键,将会返回/root/home/doc或者/root/home/ddl。
最后,对于高级用户,你可以访问目录数据库,并修改它的内容。可以使用下面的命令来手动添加一个目录:
$j -a[目录]
如果你突然想要把当前目录变成你的最爱和使用最频繁的文件夹,你可以在该目录通过命令的参数 i 来手工增加它的权重
$j -i[权重]
这将使得该目录更可能被选择跳转。相反的例子是在该目录使用参数 d 来减少权重:
$j -d[权重]
要跟踪所有这些改变,输入:
$j -s
这会显示数据库中的统计数据。而以下:
$j —purge
命令将会把不再存在的目录从数据库中移除。
<a name="tree"></a>
## tree
```bash
tree -d -L 2 -I "node_modules"
- 安装tree:
brew install tree
- tree <选项或者是参数> <分区或者是目录>
- 常用参数
- 显示所有文件和目录: -a
- 显示目录名称而非内容: -d
- 在每个文件或目录之前,显示完整的相对路径名称: -f
- 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上
"*","/","=","@","|"号: -F
- 以相反次序排列: -r
- 用文件和目录的更改时间排序: -t
- 只显示 n 层目录: -L n
- 目录显示在前,文件显示在后:
--dirsfirst
- 不常用参数
- -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
- -C 在文件和目录清单加上色彩,便于区分各种类型。
- -D 列出文件或目录的更改时间。
- -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
- -i 不以阶梯状列出文件或目录名称。
- -I 不显示符合范本样式的文件或目录名称。
- -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
- -n 不在文件和目录清单加上色彩。
- -N 直接列出文件和目录名称,包括控制字符。
- -p 列出权限标示。
- -P 只显示符合范本样式的文件或目录名称。
- -q 用”?”号取代控制字符,列出文件和目录名称。
- -s 列出文件或目录大小。
- -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
- -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可以使用下面的命令修复:sudo chown -R whoami/usr/local
mac 取消brew更新
nano ~/.bashrc
# 编辑你对应的shell,末尾加入
export HOMEBREW_NO_AUTO_UPDATE=true
Homebrew
解决 Homebrew 下载更新极慢的问题 | RayDBG
NVM
- 通过 curl 安装:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
- 通过 wget 安装:wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
Node
brew install node
安装完node后建议设置npm镜像以加速后面的过程(或使用科学上网工具)。注意:不要使用cnpm!cnpm安装的模块路径比较奇怪,packager不能正常识别!npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
视频格式转换
// 使用 Homebrew 安装 ffmpeg
brew install ffmpeg
// 调用简单的转换命令
ffmpeg -i input.mp4 -vcodec h264 output.mp4
caniuse
npm install -g caniuse-cmd
caniuse flex
中文man
官网:http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN
yum install man-pages-zh-CN
alias cman='man -M /usr/share/man/zh_CN'
配置npm全局文件路径
在npm中安装全局文件时,npm会把他安装在npm里面配置的prefix路径下
npm config list # 查看prefix
npm config set prefix="/Users/ex-lulu003/nodemodules/node_global"
npm config set cache="/Users/ex-lulu003/nodemodules/node_cache"
配置环境变量
环境变量加载顺序
/etc/profile #系统级别的,系统启动就会加载
/etc/paths #系统级别的,系统启动就会加载
~/.bash_profile #当前用户级的环境变量
~/.bash_login #当前用户级的环境变量
~/.profile #当前用户级的环境变量
~/.bashrc #bash shell打开的时候载入
设置PATH的语法
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
echo $PATH
//查看当前变量值
修改全局文件设置
需要root权限
/etc/paths
(全局建议修改这个文件):- 编辑 paths,将环境变量添加到 paths文件中 ,一行一个路径
- Hint:输入环境变量时,不用一个一个地输入,只要拖动文件夹到 Terminal 里就可以了
/etc/profile
(建议不修改这个文件)- 全局(公有)配置,不管是哪个用户,登录时都会读取该文件
/etc/bashrc
(一般在这个文件中添加系统级环境变量)- 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件
- 可以自己生成新的文件,不用把变量全都放到 paths 一个文件里,方便管理
- 创建一个文件:
sudo touch /etc/paths.d/mysql
- 用 vim 打开这个文件(如果是以 open -t 的方式打开,则不允许编辑:sudo vim /etc/paths.d/mysql
- 编辑该文件,键入路径并保存(关闭该 Terminal 窗口并重新打开一个,就能使用 mysql 命令了:
/usr/local/mysql/bin
修改单个用户设置
vi ~/.bash_profile
(任意一个文件中添加用户级环境变量vi ~/.bashrc
使得环境变量更改后,立即生效
source <相应的文件名>
Yarn
npm install -g yarn
安装完yarn后同理也要设置镜像源:yarn config set registry https://registry.npm.taobao.org --global
yarn config set disturl https://npm.taobao.org/dist --global
Watchman
由Facebook提供的监视文件系统变更的工具。安装此工具可以提高开发时的性能(packager可以快速捕捉文件的变化从而实现实时刷新)brew install watchman
Flow
Flow是一个静态的JS类型检查工具,这一语法并不属于ES标准,只是Facebook自家的代码规范brew install flow
四、Mac-pro 命令行
control + u
mkdir -p
!!
history
&&
reset
open:双击,-a选项要求自行选择打开的程序,或使用-e强制在TextEdit中编辑此文件。open一个目录会在Finder窗口中打开此目录。一个很有用的技巧是open .打开当前目录。
pbcopy 和 pbpaste
mdfind:即Spotlight,-onlyin选项可以约束搜索范围为一个目录
切换用户权限
sudo su # 切换至root用户
su - 用户名 # -和用户名之间有空格
资源
mac下添加sublime text打开快捷键 subl
10 Tools To Power Up Your Command Line