小知识

shell中有些问题很小,又不值得专门写一遍文章来记录。对一些暂时不知道放到哪篇文档的小知识、或者易错点,放到本文来讲。比如sed命令踩得坑。~符号解析问题等。

sed中的[]

注意,下面的的[]用转移符号,转移了,避免当作正则中的特殊符号

sed -i 's|{"repositories":\["||g;s|"\]}||g;s|","|\n|g' image_list.json 
# 下面是试错过程,下面命令都能正常执行,发现出了 [] 的问题
#sed -i 's|{"repositories"||g;' image_list.json 
#sed -i 's|{"repositories":\["||g;' image_list.json 

home路径

~在bash中一般会解析成home路径,但是呢,如果直接放到字符串中,则不会被解析。只是当作简单的文字符号。故,想要被解析,应如下:

# 不要放到 引号 内,会被正常的解析
IMAGE_LIST=~/".image_list.$(echo $DOCKER_HUB|sed "s/:/_/g")"

vim内开终端

:vertical botright terminal
vim里开终端
这样做可以在vim里互相复制粘贴
按 ctrl+\ ctrl+n 就可以用vim键导航

貌似需要版本支持

命令行编辑

终端下输入多行命令,可以进入 vim编辑 后再执行。
需要先 export EDITOR=’vim’ 一下,要不然默认用的emacs
ctrl+x ctrl+e (备注:两个组合键为一个整体。编辑后退出,即执行。/tmp下有临时文件产生)

放到后台

一般用ctrl-z把任务放到后台。比如开着vim时要运行个什么,就ctrl-z。需要恢复的时候,再使用fg,将任务调到前台来执行。

tmux

这个确实是个神器。分屏、会话保持、后台运行等等。

设置代理

使用squid等代理工具,设置好代理。然后在另外一台不能上网的机器上,配置好代理的环境变量,即可实现代理上网。

export http_proxy=http://ip:1080
export proxy=ip:1080
export https_proxy=https://ip:1080

设置终端提示符号

export PS1='\n\e[1m[\u@\h \W]\e[0m\n\[\e[37;46m\] \$\[\e[m\] '

踢用户

pkill -kill  -t  tty0

僵尸进程

# 查看   top 有提示
ps -A -ostat,ppid,pid,cmd | grep -e  '^[Zz]' 
ps -ef |grep defunct |grep -v grep   #或者

# 杀进程
ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9


# 以下两种方式,貌似都在扯蛋,根本没有作用
kill -HUP  <pid>   # 使用父进程
kill -s SIGCHLD <pid>  # 使用父进程

watch 遇到管道

貌似watch后面的命令可以是一个字符串。尤其是遇到>|这些符号时,避免歧义,估计需要加引号保护。

watch ' ps aux|grep lua '

简单的查询

# 查询当前登录的用户
who
whoami
# 查询id   默认当前用户,也可指定用户名
id
# 
whereis
which
ldd /usr/bin/gcc
# 命令类型
type
# 查询文件类型
file
# 查询是否有别名
alias
# 查询文件权限
ls -alh