screen

安装

1
2
3
4
# CentOS
yum install screen
# Debian/Ubuntu
apt install screen

创建

1
2
3
4
5
# 创建一个叫Hello的虚拟终端
screen -S Hello
screen -R Hello
#使用-R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
#使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen(也就是会创建同名的screen)

Ctril+a,再按d ,回到主界面,screen后台运行,处于Detached

操作

1
2
3
screen -ls # 查看已开的screen
screen -r|R [pid/name] # 进入screen,pid/name:为虚拟终端PID或Name

kill掉screen

1
2
screen -S {session_name} -X quit # kill
进入终端,输入exit,退出

两者本质一样,第一个在主终端指定screen并执行exit命令,第二个直接进入screen执行exit命令

ss(Socket Statistics )

ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。

常用选项

-h, –help 帮助
-V, –version 显示版本号
-t, –tcp 显示 TCP 协议的 sockets
-u, –udp 显示 UDP 协议的 sockets
-x, –unix 显示 unix domain sockets,与 -f 选项相同
-n, –numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”
-l, –listening 只显示处于监听状态的端口
-p, –processes 显示监听端口的进程(Ubuntu 上需要 sudo)
-a, –all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
-r, –resolve 把 IP 解释为域名,把端口号解释为协议名称

例子

1
ss -tlp

参考

https://cloud.tencent.com/developer/article/1721800

ag(递归搜索文件内容)

1
apt-get install silversearcher-ag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ag类似grep 和 find,但是执行效率比后两者高。

ag -g <File Name> 类似于 find . -name <File Name>

ag -i PATTERN: 忽略大小写搜索含PATTERN文本

ag -A PATTERN:搜索含PATTERN文本,并显示匹配内容之后的n行文本,例如:ag -A 5 abc会显示搜索到的包含abc的行以及它之后5行的文本信息。

ag -B PATTERN:搜索含PATTERN文本,并显示匹配内容之前的n行文本

ag -C PATTERN:搜索含PATTERN文本,并同时显示匹配内容以及它前后各n行文本的内容。

ag --ignore-dir <Dir Name>:忽略某些文件目录进行搜索。

ag -w PATTERN: 全匹配搜索,只搜索与所搜内容完全匹配的文本。

ag --java PATTERN: 在java文件中搜索含PATTERN的文本。

ag --xml PATTERN:在XML文件中搜索含PATTERN的文本。

jq(处理json)

安装

1
2
3
4
5
# Debian系,如 Ubuntu
sudo apt-get install jq

# RedHat系, 如 CentOS
yum install jq

使用

1
2
3
4
5
6
cat json.txt | jq '.' #美化输出
cat json.txt | jq '.[0]' #输出列表中的第一个元素,可以使用[index]:
cat json.txt | jq '.[0] | {name:.name,city:.address.city}'
# 取出第0个,.name取出第0个name的值
cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]"
# 如果希望把jq的输出当作一个数组,可以在前后加上[]:
  • 取出数组中的键
1
2
3
4
5
6
7
$ echo '{"abc": 1, "abcd": 2, "Foo": 3}' | jq 'keys'                                        
[
"Foo",
"abc",
"abcd"
]

  • 使用多个过滤器
1
2
3
$ echo '{ "foo": 42, "bar": "something else", "baz": true}' | jq '.foo, .bar' 
42
"something else"
  • 通过管道将一个过滤器的输出当做下一个过滤器的输入
1
2
3
$ echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[] | .name'                                                 
"JSON"
"XML"

shellcheck(shell脚本静态检查工具,能够识别语法错误以及不规范的写法。)

1
2
3
4
$ apt-get install shellcheck
centos下:

$ yum -y install epel-release
1
shellcheck myscript.sh

fzf(命令行下模糊搜索工具)

安装

搭配zsh使用

1
2
3
4
5
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
source ~/.zshrc

使用

  • ctrl-r 模糊匹配历史命令
  • CTRL-T 查找目录下条目

在输出交换窗口里
Ctrl-J/Ctrl-K/Ctrl-N/Ctrlk-N可以用来将光标上下移动
Enter键用来选中条目, Ctrl-C/Ctrl-G/Esc用来退出
在多选模式下(-m), TAB和Shift-TAB用来多选
Mouse: 上下滚动, 选中, 双击; Shift-click或shift-scoll用于多选模式

  • fzf --preview 'cat {}' # 动态预览文本

axel(多线程下载工具,下载文件时可以替代curl、wget)

1
apt-get install axel
  • 下载单个文件
1
axel link
  • 用不同的名称保存文件
1
axel -o filename link
  • 恢复未完成的下载(执行相同命令会自动继续下载)

  • 不显示文件下载进度

1
axel -q link

tmux(终端复用工具,替代screen、nohup。)

1
apt-get install tmux
  • 创建会话
1
2
3
4
5
tmux new -s roclinux 
#会话起名叫作 roclinux

tmux
默认起名0
  • 在会话中创建子会话
1
2
3
第一步:按 Ctrl+B 组合键,然后松开。
第二步:再单独按一下 c 键。

  • 窗口间切换
1
2
3
4
5
6
7
8
9
10
第一步:按 Ctrl-B 组合键,然后松开。
第二步:按数字 0 键。


在会话中
# 使用会话编号
$ tmux switch -t 0

# 使用会话名称
$ tmux switch -t <session-name>
  • kill 会话
1
2
3
4
5
6
7
8
9
10
会话中 exit 或 ctrl+d



主机中
# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t <name>
  • 会话后台运行
1
2
3
4
5
第一步:输入组合键 Ctrl+B,然后松开。
第二步:输入字母 d。


tmux detach
  • 主机查看会话
1
tmux ls
  • 主机进入会话
1
tmux a -t roclinux
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
54
55
56
57
58
59
60
61
62
63
64
65
66
# 开启新session
tmux
# 开启新session并命名
tmux new -s my_session


# 显示所有session
tmux ls


# 使用session编号接入
tmux attach -t 0
# 使用session名称接入
tmux attach -t <session-name>
tmux a -t name #简写


# 使用session编号kill
tmux kill-session -t 0
# 使用session名称kill
tmux kill-session -t <session-name>


# 使用session编号切换
tmux switch -t 0
# 使用session名称切换
tmux switch -t <session-name>


# 重命名会话
tmux rename-session -t 0 <new-name>



# 选择需要跳转的session会话
C + b s

# 重命名当前会话
C + b $

# 断开当前session
C + b d

# 在当前session中多加一个window
C + b c

# 在一个session中的多个window中作出选择
C + b w

# 关闭当前session中的当前window
C + b x

# 进入tmux翻屏模式, 实现上下翻页
C + b [
### 进入翻屏模式后PgUp PgDn 实现上下翻页(mac可以用fn + ↑ ↓实现上下翻页)
### q 退出翻屏模式

#############
# 其他常用快捷键
##############

C + b ! #关闭一个session中所有窗口
C + b % #将当前窗口分成左右两分
C + b " #将当前窗口分成上下两分
C + b 方向键 #让光标在不同的窗口中跳转
C + b 方向键 #按住C+b不放,同时按住方向键,可以调节光标所在窗口的大小