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
more | less |
---|---|
古老的工具 | 在 more 之上添加了更多更强大的功能 |
只能一页一页的往下查看 | 可以一行一行的往下查看 |
可以使用 vim 同样的命令进行跳转、查询、翻页等等 |