linux 常用命令

Created at 2019-07-18 Updated at 2021-02-01 Category 基础 Tag Linux

文件相关

查找文件

  • 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 -l
  • pstree -p|wa -l

查最耗 cpu 的进程

  • ps H -eo pid,pcpu | sort -nk2 | tail
  • top -c 键入 P (进程按照 CPU 使用率排序)

查占用 cpu 最高的线程

通常的做法是:

  1. 在命令行输入top,然后shift+p查看占用CPU最高的进程,记下进程号
  2. 在命令行输入top -Hp 进程号,查看占用CPU最高的线程
  3. 使用printf 0x%x 线程号,得到其16进制线程号
  4. 使用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 得到sid
  • pkill -s <SID>

查看某个端口的连接情况

  • /user/sbin/lsof -i:22022
  • netstat -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(参数、范围、操作)

  • 参数:
    • -n sed 会在处理一行文本前,将待处理的文本打印出来,-n 参数关闭了这个功能
    • -i 表示所有改动将在原文件上进行
  • 操作
    • p 对匹配内容进行打印
    • d 对匹配内容进行删除
    • w 将匹配内容写到其他地方

替换模式

sed '/^sys/S/a/b/g' file

  • 基本命令
    • a\ 在匹配行后面加入一条文本
    • i\ 在匹配行前面加入一行文本
    • c\ 将匹配行替换为目的行
    • d 将匹配行删除
    • s 将匹配行替换 s/被替换的串/替换成这个串/g g 代表全部替换
  • 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用于存盘退出Vi
  • ZQ用于不存盘退出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}'

参考资料

Site by Cellophane using Hexo & Random

Hide