cat
cat a.txt > b.txt 将a.txt中的内容写入b.txt(如有有b.txt则覆盖,没有则创建)。
cat a.txt >> b.txt 将 a.txt的的内容追加到b.txt,如果b.txt不存在,则创建。
vi
vi 打开文件时
dd:移动光标到指定行,摁dd可删除该行。
ctrl + f:往下翻页
ctrl + b:往上翻页
gg:移动该文件的第一行的第一个非空白处
:n:移动到第 n 行,如果 n > 总行数,则移动到最后一行
/:查找
grep
grep -r 'xxx' a.txt:输出a.txt中匹配xxx的行
grep -c 'xxx' a.txt:输出a.txt中匹配xxx的行数
grep -i 'xxx' a.txt:忽略大小写输出匹配xxx的行数
ps
ps -ef:查看进程
ps x|grep java:查看java进程
zip / unzip
zip -r a.zip a/ :将 a/压缩为 a.zip,有多个文件则以空格分割
unzip a.zip 解压缩
unzip -v a.zip 不解压缩,查看文件里的内容
sudo
sudo -u admin ls 以 admin 用户执行 ls 命令
lsof -i:port
查看端口占用情况
jstack 命令
jstack pid:查看该 pid 的线程信息
注:如果返回 pid: well-known file is not secure,说明 pid 不是当前用户启动的,可以去 /tmp/hsperfdata_$USER/$PID ,找到对应的 pid 的父目录,就知道是谁启动的了。比如是 admin 启动的,则用 sudo -u admin jstack pid 就行
可通过打出来的结果查看线程信息,是否死锁,是否等待中的线程过多,如打印出的线程状态:
java.lang.Thread.State:
BLOCKED: 被阻塞,可能死锁
Runnable: 线程准备运行或正在运行
Wait on condition: 线程等待某个条件才发生(比如网络读写),或者该线程正在 sleep
Waiting for monitor entry:线程等待进入 synchronized 的代码段,排队等候时就进入了 entry set,此时的状态就是:Waiting for monitor entry。该状态会马上变为 Runnable
in Object.wait():对象调用了 wait() 方法,则加入到 wait set 中,此时的状态就是 in Object.wait(),等待别的线程在该对象上调用 notify() 或 notifyAll()方法,才有机会重新进入 entry set
Waiting:线程闲置中,等待任务来。(可能是设置的线程池太大,可考虑减小)
df -h
查看磁盘容量