Skip to content

Linux 常用命令

find 文件查找

bash
find / -name 'access.log'           # 从根路径开始查找 access.log 文件
find . -type f -exec file '{}' \;   # 从当前路径开始查找所有文件,并输出其类型
find /data/logs -name '*.log'       # 从 /data/logs 路径查看所有 .log 文件

# 从 /data/logs 路径查看所有 .log 文件,然后清空文件
find /data/logs -name '*.log' -exec sh -c '> {}' \;
find /data/logs/ -mtime +7 -type f -name '*.log' -exec sh -c '> {}' \;

# 将所有 .vue 文件中的 tab 转为两个空格
find . -name '*.vue' -exec sh -c 'sed -i "s/\t/  /g" {}' \;

# 过滤指定的目录
find ./ -name '*.md' -not -path './node_modules/*'
  • -amin n 对文件的最近一次访问是在 n 分钟之前
  • -atime n 对文件的最近一次访问是在 n*24 小时之前
  • -cmin n 对文件状态的最近一次修改是在 n 分钟之前
  • -ctime n 对文件状态的最近一次修改是在 n*24 小时之前
  • -mmin n 对文件数据的最近一次修改是在 n 分钟之前。
  • -mtime n 对文件数据的最近一次修改是在 n*24 小时之前

grep 文本搜索命令

bash
# 在当前目录递归查询 TODO
grep -r 'TODO' ./

# 在历史操作中搜索 start,并打印前后 5 行内容
history | grep -C 5 'start'


# 系统别名设置
alias grep='grep -n --color=auto'
  • -A NUM, --after-context=NUM
    打印出紧随匹配的行之后的下文 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行。
  • -B NUM, --before-context=NUM
    打印出匹配的行之前的上文 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行。
  • -C NUM, --context=NUM
    打印出匹配的行的上下文前后各 NUM 行。在相邻的匹配组之间将会打印内容是 -- 的一行。
  • -r, --recursive
    递归查询所有目录文件
  • -v, --invert-match
    改变匹配的意义,只选择不匹配的行。
  • -w, --word-regexp
    只选择含有能组成完整的词的匹配的行。判断方法是匹配的子字符串必须是一行的开始,或者是在一个不可能是词的组成的字符之后。与此相似,它必须是一行的结束,或者是在一个不可能是词的组成的字符之前。词的组成字符是字母,数字,还有下划线。
  • -H, --with-filename
    为每个匹配打印文件名。
  • -h, --no-filename
    当搜索多个文件时,禁止在输出的前面加上文件名前缀。
  • -n, --line-number
    在输出的每行前面加上它所在的文件中它的行号。
  • --include=PATTERN
    仅仅在搜索匹配 PATTERN 的文件时在目录中递归搜索。
  • --exclude=PATTERN
    在目录中递归搜索,但是跳过匹配 PATTERN 的文件。
  • --exclude-dir
    跳过匹配的目录

sed 替换

bash
# 变量使用双引号,如果变量中有斜杠,则将分隔符替换成其它字符,比如 #
sed "s#http.*.myshopify.com#$bing#g" test

# 查找并替换整行
sed -i 's/^var port.*/var port = 80;/g' server.js

# 匹配并删除之后的 999 行(包括匹配行)
sed '/service/,999d' test.yaml

# 在文件末尾添加新行
sed '$ a \ \ xxx\nyyy' test.yaml
  • 当替换的文本中既有双引号"也有单引号'的时候,外层必须使用双引号
  • 因为此时文本中的双引号可以使用\进行转义,但是单引号不行

du 查询磁盘占用

bash
du -sh      # 查询当前目录所占磁盘空间
du -sh *    # 查询当前目录下所有子目录和文件各自所占磁盘空间
du -sh * | sort -h

# 查询隐藏目录占用磁盘空间大小,加上 -c 可以进行汇总统计
du -sh .[^.]* | sort -h
du -sch .[!.]* | sort -h

sort 排序

bash
# 以整数进行排序
cat number.txt | sort -n

awk 文本处理&分析

bash
# 最后一列 $NF
ps -ef | grep mysql-proxy | grep -v grep | awk -F '/' '{print $NF}' | sort | uniq

# 倒数第二列
awk '{print $(NF-1)}'

# 整行
awk '{print $0}'

# 所有输出拼接到一行中
awk '{printf "%s,", $(NF-1)}'
awk '{print $(NF-1)}' | sort -n | paste -sd ','

# 根据第二列分组统计
ps -ef | grep mysql-proxy | grep -v grep | awk '{print $9}' | awk -F '_' '{count[$2]++;} END {for(i in count) {print i,count[i]}}'

nohup 后台运行

bash
nohup /data/goim/job -conf /data/goim/configs/job.toml >/dev/null 2>&1 &

ls 列出目录与文件

bash
# 仅列出当前目录下的目录
ll | grep "^d"
ll -d */

# 统计当前目录下文件的个数(包括子目录)
ls -lR | grep "^-" | wc -l
for i in `ls`; do echo $i; ls -lR $i | grep "^-" | wc -l; done

ps 查看进程

bash
# 只列出 command 那一列
ps -e -o cmd | grep kong | grep -v grep

less 浏览文件内容

bash
less 123.log
moreless
古老的工具more 之上添加了更多更强大的功能
只能一页一页的往下查看可以一行一行的往下查看
可以使用 vim 同样的命令进行跳转、查询、翻页等等