一、前言

  • 在通过ssh来远程操纵Linux/Unix服务器时,都是使用 shell 而不是用户界面
  • 相比于通过点击多个用户界面来执行操作,输入命令行更加直接和快捷
  • 利用管道组合各种可用工具,来创建和定制宏工具
  • 使用shell script将重复简单的任务自动化

二、Shell 基本语法

Shell常用特殊变量

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(” “)包含时,与 $* 稍有不同
$? 上个命令的退出状态,或函数的返回值。成功返回0,失败返回1
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

  • $*$@ 都是将参数一个一个返回
  • "$*"将所有参数当做一个整体字符串返回

常用判断参数

  1. -a file exists.
  2. -b file exists and is a block special file.
  3. -c file exists and is a character special file.
  4. -d file exists and is a directory.
  5. -e file exists (just the same as -a).
  6. -f file exists and is a regular file.
  7. -g file exists and has its setgid(2) bit set.
  8. -G file exists and has the same group ID as this process.
  9. -k file exists and has its sticky bit set.
  10. -L file exists and is a symbolic link.
  11. -n string length is not zero.
  12. -o Named option is set on.
  13. -O file exists and is owned by the user ID of this process.
  14. -p file exists and is a first in, first out (FIFO) special file or named pipe.
  15. -r file exists and is readable by the current process.
  16. -s file exists and has a size greater than zero.
  17. -S file exists and is a socket.
  18. -t file descriptor number fildes is open and associated with a terminal device.
  19. -u file exists and has its setuid(2) bit set.
  20. -w file exists and is writable by the current process.
  21. -x file exists and is executable by the current process.
  22. -z string length is zero.

判断命令

命令 含义
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
ge 大于等于
le 小于等于

三、推荐安装工具

rz与sz的功能

mac 跳板机的上传下载功能
https://github.com/snow-sprite/rzsz

iterm

基本配置

高效使用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

命令将会把不再存在的目录从数据库中移除。

  1. <a name="tree"></a>
  2. ## tree
  3. ```bash
  4. 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更新

  1. nano ~/.bashrc
  2. # 编辑你对应的shell,末尾加入
  3. export HOMEBREW_NO_AUTO_UPDATE=true

Homebrew
解决 Homebrew 下载更新极慢的问题 | RayDBG

NVM

https://github.com/nvm-sh/nvm

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

视频格式转换

  1. // 使用 Homebrew 安装 ffmpeg
  2. brew install ffmpeg
  3. // 调用简单的转换命令
  4. ffmpeg -i input.mp4 -vcodec h264 output.mp4

caniuse

  1. npm install -g caniuse-cmd
  2. caniuse flex

中文man

官网:http://pkgs.fedoraproject.org/repo/pkgs/man-pages-zh-CN

  1. yum install man-pages-zh-CN
  2. alias cman='man -M /usr/share/man/zh_CN'

image.png

配置npm全局文件路径

在npm中安装全局文件时,npm会把他安装在npm里面配置的prefix路径下

  1. npm config list # 查看prefix
  2. npm config set prefix="/Users/ex-lulu003/nodemodules/node_global"
  3. npm config set cache="/Users/ex-lulu003/nodemodules/node_cache"

配置环境变量

环境变量加载顺序

  1. /etc/profile #系统级别的,系统启动就会加载
  2. /etc/paths #系统级别的,系统启动就会加载
  3. ~/.bash_profile #当前用户级的环境变量
  4. ~/.bash_login #当前用户级的环境变量
  5. ~/.profile #当前用户级的环境变量
  6. ~/.bashrc #bash shell打开的时候载入

设置PATH的语法

export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
echo $PATH //查看当前变量值

修改全局文件设置

需要root权限

  1. /etc/paths (全局建议修改这个文件):
    • 编辑 paths,将环境变量添加到 paths文件中 ,一行一个路径
    • Hint:输入环境变量时,不用一个一个地输入,只要拖动文件夹到 Terminal 里就可以了
  2. /etc/profile(建议不修改这个文件)
    • 全局(公有)配置,不管是哪个用户,登录时都会读取该文件
  3. /etc/bashrc (一般在这个文件中添加系统级环境变量)
    • 全局(公有)配置,bash shell执行时,不管是何种方式,都会读取此文件
  4. 可以自己生成新的文件,不用把变量全都放到 paths 一个文件里,方便管理
  • 创建一个文件:sudo touch /etc/paths.d/mysql
  • 用 vim 打开这个文件(如果是以 open -t 的方式打开,则不允许编辑:sudo vim /etc/paths.d/mysql
  • 编辑该文件,键入路径并保存(关闭该 Terminal 窗口并重新打开一个,就能使用 mysql 命令了:/usr/local/mysql/bin

修改单个用户设置

  1. vi ~/.bash_profile (任意一个文件中添加用户级环境变量
  2. 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 命令行

  1. control + u
  2. mkdir -p
  3. !!
  4. history
  5. &&
  6. reset
  7. open:双击,-a选项要求自行选择打开的程序,或使用-e强制在TextEdit中编辑此文件。open一个目录会在Finder窗口中打开此目录。一个很有用的技巧是open .打开当前目录。
  8. pbcopy pbpaste
  9. mdfind:即Spotlight,-onlyin选项可以约束搜索范围为一个目录

切换用户权限

  1. sudo su # 切换至root用户
  2. su - 用户名 # -和用户名之间有空格

资源

mac下添加sublime text打开快捷键 subl
10 Tools To Power Up Your Command Line