linux 常用命令
Created at 2019-07-18 Updated at 2021-02-01 Category 基础 views
文件相关
查找文件
find / -name filename根据名称查找对应目录文件find . -name "*.py"递归查找所有 py 结尾的文件find . -name "*xml" | xargs grep "hello"递归查找所有文件内容中包含 hello 的xml文件find ./ -size 0 | xargs rm -rf &删除所有文件大小为 0 的文件
修改文件权限
chmod 777 file.java
chmod -rwxrwxrwx r表示读、w表示写、x表示可执行
压缩
.tar
打包:tar czvf filename.tar dirname
解包:tar zxvf filename.tar
.gz
压缩:gzip filename
解压1:gunzip filename.gz
解压2:gzip -d filename.gz
.tar.gz 和 .tgz
压缩:tar zcvf filename.tar.gz dirname
压缩多个文件:tar zcvf FileName.tar.gz DirName1 DirName2 DirName3
解压:tar zxvf filename.tar.gz
.bz2 或 .bz
压缩:bzip2 -z filename
解压1:bzip2 -d filename.bz2
解压2:bunzip2 filename.bz2
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
tar -tzf test.tar.gz 列出压缩文件列表
查看文件
head -n 10 example.txt 查看文件前 10 行
tail -n 10 example.txt 查看文件后10行
tail -f example.log 实时输出最新写入的数据
cat file 输出文件内容
du -h file 查看文件大小
less file
统计
sort 排序,可以使用 -t 制定分隔符
uniq 去重
进程相关
如何让一个进程在后台运行
- 使用 &
- 输入命令
./a.out &会在终端显示进程号,结果输出到终端 - 键入 Ctrl + C,发出 SIGINT 信号,程序会继续运行
- 如果关闭窗口(SIGHUP),进程也会关闭
- 输入命令
- 使用 nohup
- 结果默认会输出到 nohup.out
- 键入 Ctrl + C(SIGINT),程序直接关闭
- 如果关闭窗口(SIGHUP),进程不会关闭,可以通过 killall 关闭
一般会使用 nohup 配合 & 来启动程序,同时免疫 SIGINT 和 SIGHUP 信号
查询线程数
ps -elf|ec -lpstree -p|wa -l
查最耗 cpu 的进程
ps H -eo pid,pcpu | sort -nk2 | tailtop -c键入 P (进程按照 CPU 使用率排序)
查占用 cpu 最高的线程
通常的做法是:
- 在命令行输入
top,然后shift+p查看占用CPU最高的进程,记下进程号 - 在命令行输入
top -Hp 进程号,查看占用CPU最高的线程 - 使用
printf 0x%x 线程号,得到其16进制线程号 - 使用
jstack 进程号得到java执行栈,然后grep16进制找到相应的信息
另一种方式:
ps -eo %cpu,pid |sort -n -k1 -r | head -n 1 | awk '{print $2}' |xargs top -b -n1 -Hp | grep COMMAND -A1 | tail -n 1 | awk '{print $1}' | xargs printf 0x%x
这一行的意思是:找到使用CPU最高的进程之使用CPU最高的线程的16进制号

查看堆栈
- 首先将线程 PID 转化为 16 进制:
printf "%x\n" 10804(线程ID) - 查看堆栈:
jstack 10765 | grep '0x2a34' -C5
查找进程
ps -ef以标准格式输出所有在运行的进程ps aux以 bsd 格式输出所有在运行的进程ll /proc/pid可以打印出全路径ps -ef | grep tomcat查看所有有关 tomcat 的进程ps -ef | grep --color java高亮要查询的关键字ps aux查看所有进程
终止进程
kill -9 pid终止进程
终止进程和所有子进程
ps j -A | grep XX得到sidpkill -s <SID>
查看某个端口的连接情况
/user/sbin/lsof -i:22022netstat -tln | grep 8080查看端口 8080 的使用情况lsof -i :8080查看8080的详细信息
文本处理
awk
- 原理:逐行处理文件中的数据
- 语法
awk 'pattern + {action}'- ‘’ 是为了和 shell 命令区分开
- {} 表示一个命令分组
- pattern 是一个过滤器,正则使用 /pattern/
- action 是处理动作,默认是 print
- 使用 # 作为注释
- 内置变量
- NR 当前行数,从1 开始
- NF 当前记录字段个数
- $0 当前记录
- $1 ~ $N 当前记录第 n 个字段
- 实例:
cat hello.txt | awk 'NR==3, NR==5{print $1,$NF}'显示 hello.txt 中的第三行至第五行的第一列与最后一列cat hello.txt | awk 'length($0)>80{print NR}'显示 hello.txt 中,长度大于 100 的行号
sed
匹配模式
sed -n '1,4 p' file.txt(参数、范围、操作)
- 参数:
-nsed 会在处理一行文本前,将待处理的文本打印出来,-n 参数关闭了这个功能-i表示所有改动将在原文件上进行
- 操作
p对匹配内容进行打印d对匹配内容进行删除w将匹配内容写到其他地方
替换模式
sed '/^sys/S/a/b/g' file

- 基本命令
- a\ 在匹配行后面加入一条文本
- i\ 在匹配行前面加入一行文本
- c\ 将匹配行替换为目的行
- d 将匹配行删除
- s 将匹配行替换
s/被替换的串/替换成这个串/gg 代表全部替换
sed -n '2,$'p hello.txt打印第二行到最后一行,$ 表示最后一行sed -n '/100/'p hello.txt打印 hello.txt 中 正则匹配 100 的行sed '/100/'i\ "new line" hello.txt
grep
grep 用来对内容进行过滤,带上 --color 参数,可以高亮,参数n输出具体的行数,用来快速定位。
grep -rn --color POST access.log 查看 nginx 中的 POST 请求
grep -rn --color Exception [-A10 -B10]/[-C 10] error.log 查看内容前后 10 行
Vim
命令模式
按 : 进入命令模式
set number 打开行号,set nonumber 关闭行号 set number? 查询打开还是关闭 help number 查看帮助
syntax on打开语法高亮set showmode在底部显示,当前处于命令模式还是插入模式。set mouse=a支持使用鼠标filetype indent on开启文件类型检查,并且载入与该类型对应的缩进规则。比如,如果编辑的是.py文件,Vim 就是会找 Python 的缩进规则~/.vim/indent/python.vim。set autoident按下回车键后,下一行的缩进会自动跟上一行缩进保持一致
普通模式
G用于直接跳转到文件尾ZZ用于存盘退出ViZQ用于不存盘退出Vi/word向下查询,n向下重复前一个搜索动作,N向上重复前一个搜索动作?word向上查询n继续查找下一个yy复制一行p粘帖在下一行,P粘贴在前一行dd删除一行文本x删除光标所在的字符u取消上一次编辑操作(undo)
插入模式
i 在光标之前,进入插入模式
a在光标之后,进入插入模式
o在本行之后新增一行,进入插入模式
磁盘相关
du 和 df
- du 通过搜索文件来计算每个文件的大小然后累加得到值。
- df 通过文件系统来获取空间大小信息。
如果用户删除了一个正在运行的应用程序所打开的某个目录下的文件。du 返回的值是删除了文件后的大小,df 返回的值,不显示减去该文件后的大小。
如果要删除某个日志:echo "" > access.log
如何查看已删除文件
lsof | grep deleted
远程拷贝
scp sourceFile name@ip:addr
Leetcode
192. 统计词频
cat words.txt | awk '{for(i=1;i<=NF;i++){arr[$i]++;}};END{for(w in arr){print arr[w],w;}}' | sort -rn|awk '{print $2,$1}'
cat words.txt | xargs -n1 | sort | uniq -c | sort -rn | awk '{print $2,$1}'