linux
修改shell脚本的编码
在window下编写的shell脚本编码为dos,在linux环境下不能直接使用
:set ff #查看当前文本的模式类型,一般为dos,unix
:set ff=dos #设置为dos模式
:set ff=unix#设置为unix模式
>/dev/null 2>&1 & 指令解释
> /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。含义
- > 代表重定向到哪里,例如:echo "123" > /home/123.txt
- 1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
- 2 表示stderr标准错误
- & 表示等同于的意思,2>&1,表示2的输出重定向等同于1
- 尾部 & 用途:在后台运行,当关闭了ssh终端,程序也会关闭
nohup用途:不挂断地运行命令,即使终端ssh关闭了也一直运行。
windows与linux的路径分隔符
在Windows中我们拼接路径时是使用反斜杠的,而在java程序中需要使用双反斜杠,因为第一个反斜杠会被当作转义字符,如下图所示:
但是类似的程序放在Linux中就会报错,因为Linux中文件路径分隔符并不是反斜杠,而是正斜杠,如下图所示:
运行jar包中指定的 main
运行指定的 main 方法:
java -cp XXXX.jar com.smbea.dubbo.bin.Console start
消费KAFKA topic中的消息
查看topology任务的结果
./bin/kafka-console-consumer.sh --bootstrap-server 10.11.6.52:9092 --topic WC_result --from-beginning
linux批量杀死进程
ps -ef |grep ConsoleConsumer|awk '{print $2}'|xargs kill -9 //这个会有多余的进程
ps -ef | grep TaskManagerRunner | grep -v grep | awk '{print $2}' | xargs kill -9 //这个在本机器上可以正常kill多个相同进程,但是kill别的机器上的进程会导致所有无关的进程也被杀。慎用!!!!
//一个机器杀死多个机器上的多个进程:比如我杀死2个TaskManagerRunner
ssh 10.11.6.52 "kill -9 `ssh 10.11.6.52 ps -ef | grep TaskManagerRunner | grep -v grep | awk '{print $2}'| head -n 1`" >/dev/null 2>&1
ssh 10.11.6.52 "kill -9 `ssh 10.11.6.52 ps -ef | grep TaskManagerRunner | grep -v grep | awk '{print $2}'| head -n 1`" >/dev/null 2>&1
//运行两次
ps -ef
查询当前用户下所有进程grep ConsoleConsumer
匹配出ConsoleConsumer的进程grep -v grep
排除grep ConsoleConsumer的进程 (可选)awk '{print $2}'
获取进程号xargs kill -9
执行kill -9的操作
一些启动指令
./apache-storm-1.2.1/bin/storm logviewer > /dev/null 2>&1 & #storm的logviewer后台启动
nohup ./kafka-manager-1.3.3.17/bin/kafka-manager & #kafka-manager后台启动
./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 & #kafka后台启动
SSH免密登录
- 本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件
- 本地机器执行命令如:ssh-copy-id -i ~/.ssh/id_rsa.pub dss@10.164.194.42, 将公钥文件传输的远程机器,并生效
- 远程机器的.ssh目录需要700权限,authorized_keys文件需要600权限
chmod 600 authorized_keys
遇到这样操作还是失效,需要输入密码登录,先检查authorized_keys写入了没,权限等。
修改".."对应的文件夹为700,然后成功免密登录,不知道什么原因......
僵尸进程
查看:
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
命令注解:
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数
杀死:
先kill -9 ppid
再kill -9 pid
移动文件夹
命令格式:mv [-fiv] source destination
例如:
如将/test1目录下的file1复制到/test3 目录,并将文件名改为file2,可输入以下命令:
mv /test1/file1 /test3/file2
路径和目录
./
同级目录
../
上级目录,父级目录
~/
/home/user
pwd
显示当前路径
hadoop
hdfs
- 创建目录
hdfs dfs -mkdir /demo1
- 上传到hdfs
hdfs dfs -put /home/hadoop/core-site.xml /demo1
- 下载到本地
hdfs dfs -get /demo1/core-site.xml /home
- 删除文件
hdfs dfs -rm -r -skipTrash /flink-checkpoints/*
yum任何指令无响应
rm /var/lib/rpm/.dbenv.lock
用户环境变量
.bashrc和.bash_profile是用来定义用户环境变量。而且.bash_profile里还会调用bashrc。
全局linux有一个JDK1.7,我想修改自己的JDK1.8。直接在.bashrc里面添加
export JAVA_HOME=/home/wxt/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
特别注意export PATH=${JAVA_PATH}:$PATH
。$PATH要放在最后面,不然JAVA_PATH会被前面全局的覆盖。顺序是前面的变量覆盖后面的变量。
手动清理内存
1.sudo sync //把缓存的写入磁盘
2.sudo sh -c "echo 3 > /proc/sys/vm/drop_caches" //清空所有缓存
3.sudo sh -c "echo 0 > /proc/sys/vm/drop_caches" //重新分配回0,不释放的默认状态