0%

1. 特殊参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 扩展为位置参数, 从 1 开始.
如果扩展发生在双引号中, 它扩展为一个词, 值是各个参数, 以特殊变量 IFS 的第一个字符分隔.
也 就是说, "$*" 等价于 "$1c$2c...", 这里 c 是变量 IFS 的第一个字符.
如果没有设置 IFS, 那么参数将用空格分隔.
IFS
$*
# 扩展为位置参数, 从 1 开始.
如果扩展发生在双引号中, 每个参数都将扩展为一个词.
也就是说, "$@" 等价于 "$1" "$2" ... 如果位置参数不存在, "$@"$@ 扩展为空 (即, 它们被删除了).

$@
# 扩展为位置参数的个数, 以十进制表示.

$#
# 扩展为最近执行的前台管道的状态.

$?
# 扩展为当前选项标志.
标志是在启动时或以内建命令 set 指定的, 或者是 shell 自身设置的 (例如选项 -i ).

$-
# 扩展为 shell 的进程 ID.
在一个 () 子 shell 中, 它扩展为当前 shell 的 进程 ID 而不是子 shell 的.

$$
# 扩展为最近一次执行的后台 (异步) 命令的进程号.

$!
# 扩展为 shell 或者 shell 脚本的名称.
这个变量是在 shell 初始化时设置的.
如果 bash 是执行脚本文件时启动的, $0 将设置 为那个文件的名称.
如果 bash 启动时的参数包含 -c, 那么 $0 被设置为启动命令行被执行后的第一个参数, 如果有的话.
否则, 它被设置为用来启动 bash 的文件名, 就是参数 0.

$0
# shell 启动时, 设置为 shell 或参数中被执行的 shell 脚本的绝对路径名.
然后, 在扩展时扩展为上一个命令的最后一个参数.
它也被设置为被执行的每个命令的文件全名并且 被设置到这个命令执行的环境当中.
当检查邮件时, 这个参数保存着正在检查的邮件文件的名称.

$_

2. 参数表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Use Default Values(使用默认值).
如果 parameter 未定义或值为空, 将替换为 word 的扩展.
否则, 将替换为 parameter 的值.

${parameter:-word}
# Assign Default Values(赋默认值).
如果 parameter 未定义或值为空, word 的扩展将赋予 parameter. parameter 的值将被替 换.
位置参数和特殊参数不能用这种方式赋值.

${parameter:=word}
# Display Error if Null or Unset(显示错误, 如果未定义或值为空).
如果 parameter 未定义或值为空, word (或一条信息, 如果 word 不存在) 的扩展将写入到标准错误; shell 如果不是交互的, 则将退出.
否则, parameter 的值将被替换.

${parameter:?word}
# Use Alternate Value(使用可选值).
如果 parameter 未定义或非空, 不会进行替换; 否则将替换为 word 扩展后的值.

${parameter:+word}
# Substring Expansion(子字符串扩展).
扩展为parameter 的最多 length 个字符, 从 offset 指定的字符开始.
如果忽略了 length, 扩展为 parameter 的子字符串, 从 offset 指定的字符串开始.
length 和 offset 是算术表达式 (参见下面的 ARITHMETIC EVALUATION 算术求值 段落).
length 必须是一个大于等于 0 的数值.
如果 offset 求值结果小于 0, 值将当作从 parameter 的值的末尾算起的偏移量.
如果 parameter 是 @, 结果是 length 个位置参数, 从 offset 开始.
如果 parameter 是 一个数组名, 以 @ 或 * 索引, 结果是数组的 length 个成员, 从 ${parameter[offset]} 开始.
子字符串的下标是从 0 开始 的, 除非使用位置参数时, 下标从 1 开始.

${parameter:offset}
${parameter:offset:length}
# 扩展为名称以 prefix 开始的变量名, 以特殊变量 IFS 的第一个字符分隔.

${!prefix*}
# word 被扩展为一个模式, 就像路径扩展中一样.
如果这个模式匹配 parameter 扩展后的值的尾部, 那么扩展的结果是将 parameter 扩展后的值中, 最短的匹配 (``%'' 的情况) 或者最长的匹配 (``%%''的情况) 删除的结果.
如果 parameter 是 @ 或者是 *, 则模 式删除操作将依次施用于每个位置参数, 最后扩展为结果的列表.
如果 parameter 是一个数组变量, 下标是 @ 或者是 *, 模式删除 将依次施用于数组中的每个成员, 最后扩展为结果的列表.

${parameter%word}
${parameter%%word}
# patterm 被扩展为一个模式, 就像路径扩展中一样.
parameter 被扩展, 其值中最长的匹配 pattern 的内容被替换为 string.
在 第一种形式中, 只有第一个匹配被替换.
第二种形式使得 pattern 中所有匹配都被替换为 string.
如果 pattern 以 # 开始, 它 必须匹配 parameter 扩展后 值的首部.
如果 pattern 以 % 开始, 它必须匹配 parameter 扩展后值的尾部.
如果 string 是空 值, pattern 的匹配都将被删除, pattern 之后的 / 将被忽略.
如果 parameter 是 @ 或者是 *, 则替换操作将依次施用于每个位 置参数, 最后扩展为结果的列表.
如果 parameter 是一个数组变量, 下标是 @ 或者是 *, 模式删除将依次施用于数组中的每个成 员, 最后扩展为结果的列表.

${parameter/pattern/string}
${parameter//pattern/string}

3. 事件指示器

事件指示器 (event designator) 是一个对历史列表中某个命令行条目的引用.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 开始一个命令替换, 除非后面跟随的是 blank, newline, = 或是 (.
!
# 引用命令行 n.
!n
# 引用当前命令行减去 n.
!-n
# 引用上一条命令.
这是 `!-1' 的同义词.

!!
# 引用最近的以 string 开始的命令.

!string
# 引用最近的包含 string 的命令.
尾部的 ? 可以被忽略, 如果 string 之后紧接着一个新行符.

!?string[?]
# 快速替换.
重复上一条命令, 将 string1 替换为 string2. 与 ``!!:s/string1/string2/'' 等价
^string1^string2^

4. 词指示器

词指示器 (word designator) 用于从 event 中选择期望的词.
分隔 event 规则与 word 指示器.
它可以忽略, 如果词指示器以 ^, $, *, -, 或 % 开始.
词被从行首开始编号, 第一个词被表示为 0.
插入当前行中的词以单个空格分隔.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 第 0 个词.
对 shell 来将, 这是命令名.

0
# 第 n 个词.

n
# 第一个参数.
也就是, 第 1 个词.

^
# 最后的参数.

$
# 最近一次搜索 `?string?' 匹配的词.

%
x
# 所有词, 除了第 0 个.
这是 `1-$' 的同义词.
如果 event 中只有一个词, 使用 * 也不是错误; 这种情况下将返回空字符串.
-y 一组词; `-y' 是 `0-y' 的简写.

*
# x-$ 的简写.

x*
# -$ 的简写, 就像 x* 一样, 但是忽略最后一个词.

x-

如果给出了一个 word 指示器, 没有给出 event 规则, 前一个命令将用作 event.

5. 常见问题

5.1. 脚本中使用 exit 1 会退出会话

检查 .bashrc 等地方是否设置了 set -e

6. Resources

1. 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add -
echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list
sudo apt install sublime-text

# 解决 linux 下无法输入中文的问题
git clone https://github.com/lyfeyaj/sublime-text-imfix.git
cd sublime-text-imfix && ./sublime-imfix


# 设置代理
# "http_proxy": "http://127.0.0.1:8087",
# "https_proxy": "http://127.0.0.1:8087"

# 解决 package control 安装失败
# 在 hosts 文件添加
# 50.116.34.243 sublime.wbond.net
# 50.116.34.243 packagecontrol.io

# 执行命令 add channel
# http://www.feyon.net/channel_v3.json

2. 配置

2.1. 快捷键

1
2
3
[
{ "keys": ["ctrl+shift+r"], "command": "reveal_in_side_bar"}
]

3. 常用插件

  • ConvertToUTF8
  • HTML-CSS-JS Prettify
  • OmniMarkupPreviewer

4. Resource

1
2
3
4
5
# 查找 *.java 文件 | 文件中带有 xxx | 以 : 为分隔符, 取第一列 | 去重 | 用 atom 打开
find . -name '*.java' | xargs grep 'xxx ' | awk -F: '{print $1}' | sort -u | xargs atom

# 查找 *.java 或 *.md 文件
find . -name '*.java' -o -name '*.md'

1. 安装

1
2
3
4
5
6
# 下载并执行安装
curl -s "https://get.sdkman.io" | bash
# 初始化
source "/home/raven/.sdkman/bin/sdkman-init.sh"
# 查看是否安装成功
sdk version

2. Resource

一个项目代码中有以下几个部分

  • 依赖管理
    maven, gradle
  • 项目管理
    日志, 事务等
  • 公共组件
    constant, util, 统一异常
  • 业务逻辑
    对业务逻辑发封装
  • 持久
    rdb, nosql 等依赖

一个项目的开发文档有

  • 需求文档
  • 前端, 后端设计文档
  • 开发计划
  • 测试用例
  • bug管理

为 hadoop 提供 SQL 支持, 性能比 hive 好.

  • Impala不需要把中间结果写入磁盘, 省掉了大量的I/O开销.

  • 省掉了MapReduce作业启动的开销.
    MapReduce启动task的速度很慢(默认每个心跳间隔是3秒钟), Impala直接通过相应的服务进程来进行作业调度, 速度快了很多.

  • Impala完全抛弃了MapReduce这个不太适合做SQL查询的范式, 而是像Dremel一样借鉴了MPP并行数据库的思想另起炉灶, 因此可做更多的查询优化, 从而省掉不必要的shuffle, sort等开销.

  • 通过使用LLVM来统一编译运行时代码, 避免了为支持通用编译而带来的不必要开销.

  • 用C++实现, 做了很多有针对性的硬件优化, 例如使用SSE指令.

  • 使用了支持Data locality的I/O调度机制, 尽可能地将数据和计算分配在同一台机器上进行, 减少了网络开销.

  • Impala可以根据Apache许可证作为开源免费提供.

  • Impala支持内存中数据处理, 它访问/分析存储在Hadoop数据节点上的数据, 而无需数据移动.

  • 使用类SQL查询访问数据.

  • Impala为HDFS中的数据提供了更快的访问.

  • 可以将数据存储在Impala存储系统中, 如Apache HBase和Amazon s3.

  • Impala支持各种文件格式, 如LZO, 序列文件, Avro, RCFile和Parquet.

1. Impala 支持的数据类型

  1. 原生类型:
  • TINYINT
  • SMALLINT
  • INT
  • BIGINT
  • BOOLEAN
  • FLOAT
  • DOUBLE
  • DECIMAL
  • STRING
  • CHAR
  • VARCHAR
  • TIMESTAMP
  1. 复合类型:
  • struct_type
  • array_type
  • map_type

2. Kudu

Kudu 不支持 TIMESTAMP 类型的字段

3. Docker

1
2
3
4
5
6
7
8
9
$ docker run -i -t cloudera/impala-dev:minimal /bin/bash
[container]$ docker-boot # starts Postgres and SSH both needed to run Impala
[container]$ cd Impala
[container]$ . bin/impala-config.sh # sets the Impala environment variables
[container]$ ./buildall.sh -format -skiptests
[container]$ run-all.sh # starts dependent services -- HDFS, Hive metastore, etc
[container]$ start-impala-cluster.py
[container]$ impala-shell.sh
[localhost:21000] > create database test;

4. Resource

http://impala.apache.org/docs/build/html/
http://impala.apache.org/docs/build/html/topics/impala_langref_sql.html
http://impala.apache.org/docs/build/html/topics/impala_functions_overview.html#functions

1. 装机配置

装机时 /home,/var 需要配的大一些, 其次还有 /opt

2. 配置

2.1. dolphin 中双击打开文件夹

系统设置 / 硬件部分 / 输入设备 / 鼠标部分
双击打开文件和文件夹

3. 常用软件

sogou input
postman
atom
astah-community uml工具
mysql-workbeanch
seahorse 钥匙环,mysql-workbeanch记住密码需要这个
sysv-rc-conf 管理开机服务
redshift 护眼
miredo IPv6 虚拟网卡
sdkman 开发环境安装工具
docker
preload 优化应用启动速度
browsh 命令行浏览器
flameshot 截图工具
Spectacle 截图工具, 没flameshot好用
xclip 剪贴板辅助工具
partitionmanager 磁盘工具 for KDE, gparted for GNOME

4. 常用目录

  • /etc/apt/sources.list.d 应用资源
  • /usr/share/applications 应用快捷键

5. 常用快捷键

Alt + Shift + F12 关闭混淆器, 可关闭透明效果

5.1. 自定义命令快捷键

  • 翻译
    Meta + Shift + D /home/raven/Documents/script/run-config/chrome/dict.sh

  • 矩形截屏
    Meta + Shift + Print flameshot gui

  • 防打扰截屏
    Ctrl + Print /home/raven/Documents/script/run-config/workspace/snip_suspend_picture.sh > /tmp/snip.log

6. Problem

6.1. 输入法有时候不能切换了

重启fcitx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 先 kill 掉 fcitx,sogou-qimpanel

pidof fcitx | xargs kill
pidof sogou-qimpanel | xargs kill

nohup fcitx >/tmp/fcitx.log 2>&1 &
nohup sogou-qimpanel >/tmp/sogou-qimpanel.log 2>&1 &


# 正常会有一下一些进程
# /usr/bin/fcitx
# /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 15 --config-file /usr/share/fcitx/dbus/daemon.conf
# /usr/bin/fcitx-dbus-watcher unix:abstract=/tmp/dbus-GSY0LOV3Fx,guid=fe970e1739b765410121b40a5b34b23a 925
#
# /usr/bin/ssh-agent /usr/bin/sogou-session /usr/bin/im-launch /usr/bin/startkde
# sogou-qimpanel-watchdog
# sogou-qimpanel

6.2. 声音突然变最大

1
2
3
4
# 也可以修改~/.pulse/daemon.conf
echo "flat-volumes = no" > /etc/pulse/daemon.conf
pulseaudio -k
pulseaudio --start

不知道上面的命令有没有用, 后来应该是关闭了控制台声音才好的

1
2
3
4
5
6
7
8
9
10
11
12
# 临时起效
rmmod pcspkr

# 重新打开
modprobe pcspkr

# 只对当前用户有效
setterm -blength 0
xset -b

# 永久有效
# 在 `.bashrc` 下添加

7. 查看启动日志

新建 /etc/default/bootlogd 打开启动日志

/etc/default/bootlogd
1
BOOTLOGD_ENABLE=Yes

以后启动之后日志在 /var/log/boot

内网转发工具