Grep
- -i/–ignore-case 搜索时忽略大小写区分, grep -i ‘hello world’ menu.h main.c命令从两个文件中搜索hello world字符串。默认情况下grep会打印匹配的整行内容
- -v, 反向选择
ps aux |grep '~/ch-config/' | grep -v grep | awk '{print $2}' | xargs kill -9
- kill -9
grep PID /data01/db/status | grep '\d+' -Po
- -a –text 等价于 –binary-files=text ,将二进制文件当作文本文件处理
- $ grep -Rn -i “current” *.sql | cut -d “:” -f 1 | sort | uniq | wc -l
Shell-snipaste
!$
: 代表上条命令的最后一个参数.ssh-copy-id -i ~/.ssh/id_rsa.pub root@host
: 快速与root@host建立免密连接lsof -i :7070 | awk 'NR==2 {print $2}' | xargs kill -9
: 杀死占用端口为7070的进程for i in {1..10}; do ll | wc -l; sleep 2; done
: 打印当前系统中句柄的打开数量ll | awk '{print $9}'
: 只取文件名find * | grep .DS_Store |xargs rm -rf
: 删除所有 .DS_Storeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
: 切换时区pbcopy < ~/.ssh/id_rsa.pub
: 将公钥内容复制到剪切板du -hsx * | sort -rh | head -n
: 打印当前目录下占磁盘空间最多的n个文件/var/log
: 各个组件的 log, /var/log/messages 内核日志在这里.CPU占用最多的前10个进程:
1
2ps auxw|head -1;ps auxw|sort -rn -k3|head -10
top (然后按下M,注意大写)内存消耗最多的前10个进程
1
2ps auxw|head -1;ps auxw|sort -rn -k4|head -10
top (然后按下P,注意大写)虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
配置 Linux 自启动 :
a. 把命令加到/etc/rc.local
b. 将脚本放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本
c. cp启动文件到 /etc/init.d/或者/etc/rc.d/init.d/(前者是后者的软连接),chkconfig --add cloudera-scm-agent
,chkconfig cloudera-scm-agent on
,chkconfig --list cloudera-scm-agent
关闭防火墙 :
service iptables status
,service iptables stop
,chkconfig iptables off
,service iptables status
卸载 rpm 包 :
1
2rpm -qa|grep -i java
rpm -e --nodeps xxx yyy zzzdu -sh, du -h –max-depth=1, df -h
find / -type f -name "*.log" | xargs grep "ERROR"
: 统计所有的log文件中,包含Error字符的行ps -efL | grep [PID] | wc -l
: 查看某个进程创建的线程数nohub
mount
find .-name *iso >/tmp/res.txt &
, 加&放到后台执行,bg
可以查看后台运行的任务,fg %进程id
放到前台执行find / -name zkCli.sh
: /opt/cloudera/parcels/CDH-5.11.2-1.cdh5.11.2.p0.4/lib/zookeeper/bin/zkCli.sh
也可以在cdh的节点上, 直接 z 然后 tab, 会发现有 zookeeper-client 这样一个命令.
找某个目录下是否有包含某各类的 jar 包:
grep -r "SparkSession" jars
1
2
3
4
5grep -r "SparkSession" jars
Binary file jars/spark-hive_2.11-2.2.1.jar matches
Binary file jars/spark-sql_2.11-2.2.1.jar matches
Binary file jars/hive-exec-1.2.1.spark2.jar matches
Binary file jars/spark-repl_2.11-2.2.1.jar matcheshadoop classpath
,/var/log
,/usr/hdp/2.4.0.0-169/
hive 默认 db 放的 HDFS 路径
/user/hive/warehouse
, HIVE 查看表元数据:desc formatted TEST_TIME
./spark-shell --master yarn --executor-cores 5 --executor-memory 5g --num-executors 3
pip 切换 Python 版本
1 | cd /usr/local/bin |
w !sudo tee %
: 就相当于从vim外部修改了当前编辑的文件(root修改只读文件)grep 怎么样不出现
grep --color=auto
, 加个[]:ps -aux | grep "[c]lickhouse server" | awk '{print $2}' | xargs kill
socat TCP-LISTEN:2280,fork,reuseaddr TCP:ip:port
端口转发, sudo sshuttle -v -r taojiatao@ip 0.0.0.0/0不包含 to_json 的文件列表,
ls |grep stack| xargs grep -L "to_json" | wc -l
$ grep -Rn -i “current” *.sql | cut -d “:” -f 1 | sort | uniq | wc -l
Linux 两个文件求交集、并集、差集:
- 交集: sort a.txt b.txt | uniq -d
- 并集: sort a.txt b.txt | uniq
- 差集: a.txt-b.txt: sort a.txt b.txt b.txt | uniq -u
git reset HEAD^
git 只保留 master: $ git branch | grep -v “(^*|master)” | xargs git branch -D
在本机在远程执行命令: ssh tiger@xxx /opt/tiger/ss_bin/doas /opt/tiger/presto-bench/boot/run_local.sh restart
hdfs 打印二层目录: $ hadoop fs -ls /user/taojiatao/tpcds-text/tpcds-data-50g/ |awk -F” “ ‘{print $8}’ | xargs hadoop fs -ls | awk -F” “ ‘{print $8}’
Scala test: mvn test -pl :spark-it -Dtest=moo -Dsuites=’io.kyligence.kap.ut.TestScalaTest @query’ -DfailIfNoTests=false
perf record -F 99 -p pid –call-graph dwarf – sleep 25
ps aux |grep ‘/data01/taojiatao/config/ch-config/‘ | grep -v grep | awk ‘{print $2}’ | xargs kill -9
cat ~/hosts | while read host; do scp -o StrictHostKeyChecking=no ~/project/xxx tiger@$host:/opt/xxx/;done
Java
- jstat -gc [pid] : 查看gc情况
- jmap -histo [pid] : 按照对象内存大小排序, 注意会导致full gc
- jstack -l pid : 用于查看线程是否存在死锁
shell 基础知识
1 | $@ 传递给脚本或函数的所有参数 |
meta字符 | meta字符作用 |
---|---|
= | 设定变量 |
$ | 作变量或运算替换(请不要与shell prompt 混淆) |
> | 输出重定向(重定向stdout) |
< | 输入重定向(重定向stdin) |
| | 命令管道 |
& | 重定向file descriptor或将命令至于后台(bg)运行 |
() | 将其内部的命令置于nested subshell执行,或用于运算或变量替换 |
{} | 将其内的命令置于non-named function中执行,或用在变量替换的界定范围 |
; | 在前一个命令执行结束时,而忽略其返回值,继续执行下一个命令 |
&& | 在前一个命令执行结束时,若返回值为true,继续执行下一个命令 |
|| | 在前一个命令执行结束时,若返回值为false,继续执行下一个命令 |
! | 执行histroy列表中的命令 |
… | … |
snipaste
1 | DIR="$( cd "$(dirname "$0")" ; pwd -P )" |
$0 类似于python中的sys.argv[0]等。 $0指的是Shell本身的文件名。类似的有如果运行脚本的时候带参数,那么$1 就是第一个参数,依此类推。
dirname 用于取指定路径所在的目录 ,如 dirname /home/ikidou 结果为 /home。
$ 返回该命令的结果
pwd -P 如果目录是链接时,格式:pwd -P 显示出实际路径,而非使用连接(link)路径。
############################################################################
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
会 cd 到脚本所在的目录
Note: A double dash (–) is used in commands to signify the end of command options, so files containing dashes or other special characters won’t break the command.
Always use -P
flag with cd
command, alias cd=’cd -P’
若将一个文件夹自己的快捷方式放到文件夹里,这样写脚本的时候就有可能会出现无限循环,当前路径名就会变得无限长,但是加上了-P命令后就可以避免无限循环的情况.
A
./myscript
B
source myscript
Short answer: sourcing will run the commands in the current shell process. executing will run the commands in a new shell process.
variable
若从技术的细节来看,shell会依据IFS(Internal Field Seperator) 将command line所输入的文字拆解为”字段”(word/field)。 然后再针对特殊字符(meta)先作处理,最后重组整行command line。
变量替换(substitution) shell 之所以强大,其中的一个因素是它可以在命令行中对变量作 替换(substitution)处理。 在命令行中使用者可以使用$符号加上变量名称(除了用=定义变量名称之外), 将变量值给替换出来,然后再重新组建命令行。
比方:
1 | $ A=ls |
会得到:ls -la /tmp
echo命令只单纯将其argument送至”标准输出”(stdout, 通常是我们的屏幕)
1 | $ echo $A -$B $C |
export
严格来说,我们在当前shell中所定义的变量,均属于 “本地变量”(local variable), 只有经过export命令的 “输出”处理,才能成为”环境变量”(environment variable):
()与{}差在哪?
要从一些命令执行的先后次序中得到结果, 如算术运算的2*(3+4)那样, 这时候,我们就可以引入”命令群组”(command group) 的概念:将许多命令集中处理。
-
()
将command group
置于sub-shell
(子shell
)中去执行,也称nested sub-shell
。 -
{}
则是在同一个shell
内完成,也称non-named command group
。
在bash shell中, $()与``(反引号)都是用来做 命令替换(command substitution)的。
Liunx 目录
- 通常从源码包编译安装的软件默认会放在/usr/local下
/etc/ld.so.conf
这个文件记录了编译时使用的动态链接库的路径, 默认情况下,编译器只会使用**/lib和/usr/lib**这两个目录下的库文件- /etc, /bin, /sbin, /lib :系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上
- /usr/bin,/usr/sbin,/usr/lib:操作系统核心功能,可以单独分区
- /usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man:这个用于安装第三方程序,分别对应了二进制文件、库文件、配置文件、帮助文档的目录, 通常来说我们安装程序就安装在 /usr/local目录下
- 在传统的unix系统中,/usr通常只包含系统发行时自带的程序,而/usr/local则是本地系统管理员用来自由添加程序的目录
- 从用户权限的角度看, /sbin目录下的命令通常只有管理员才可以运行,/bin下的命令管理员和一般的用户都可以使用。
- 从可运行时间角度看, /sbin,/bin能够在挂载其他文件系统前就可以使用, /bin,/sbin目录是在系统启动后挂载到根文件系统中的,所以/sbin,/bin目录必须和根文件系统在同一分区。
- /opt这个目录是一些大型软件的安装目录,或者是一些服务程序的安装目录