常用命令

常用命令 #

本文描述 shell 内置命令和 coreutils 补充命令的高频用法和常用技巧。

一、文件管理 #

1.1 文件类型 #

类型 描述
d 目录
- 文件
l link file
b 可随机存取设备
c 一次性读取设备,键鼠等

1.2 文件权限 #

1
2
# chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录
chmod u+r .vimrc

1.3 文件占用 #

  1. df(Disk Free)
1
df -h
  1. du(Disk Used)
1
2
3
4
5
# 查看当前文件夹下,存储空间占用情况
du -h --max-depth=1

# 查看当前目录下,占用存储空间最大的文件
du -s ./* | sort -nr

1.4 文件传输 #

scp: Secure copy. Copy files between hosts using Secure Copy Protocol over SSH.

scp [参数] [原路径] [目标路径]

1
2
3
4
5
6
7
8
# -l参数将限制要使用的总带宽。如果您制作了一个自动化脚本来复制许多文件,但是您不希望SCP进程浪费带宽,这将很有用。
scp -l 400 rumenz.tar.gz root@json.im:/tmp/

#复制rumenz目录到远程服务器
scp -r rumenz root@json.im:/tmp

#从远程服务器下载rumenz.tar.gz文件到本地
scp root@json.im:/tmp/rumenz.tar.gz ./tmp

二、查找 #

  1. 查找命令
1
2
which commend
which -a commend
  1. 快速查找文件
1
2
3
# update local db
sudo /usr/libexec/locate.updatedb
locate filename
  1. find 普通查找
1
find [path] [option] [action]

根据变更时间查找

1
2
3
4
5
6
7
8
# 三天内修改
find /var -mtime -3

# 三天前修改
find /var -mtime +3

# 大大前天修改(三天前的那天)
find /var -mtime 3

sQBUJO.png

三、文本处理 #

3.1 常用工具高频命令 #

  1. 切割文本基础操作
1
2
3
4
# 根据符号切割
cut -d ':' -f1,1
# 取前 50 字符
cut -c-50
  1. xargs

  2. grep

1
2
# 同时匹配多个模式(满足任意一个即可)
grep -e "functio" -e "class" file

3.2 日志计算、查询和过滤 #

  1. 计算日志中重复率最高的 top k

文件大的话非常耗时,注意内存和处理器的波动。以下是计算 access.log 文件中重复日志量最大的前十条,其中日志样本只计算每行的前 50 个字符。

1
head -n 20000 access.log | cut -c-50 | sort | uniq -c | sort -n -r | head -n 10
  1. 根据 http code 筛选 nginx 相应的访问日志
1
2
3
# HTTP1.0 200
# HTTP1.1 404
cat access.log | grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}"
  1. 日志特殊字符转译 > < & \u003e \u0026

有时,日志中 > < & 符号会以 \u003e \u0026 的形式打印,为方便阅读需要进行转译操作

1
cat "hello word" | sed 's/\\u003e/\>/g' | sed 's/\\u0026/\&/g' | sed 's/\\u003c/\</g'

四、进程管理 #

4.1 top #

4.1.1 示例 #

f5It4x.jpg

前五行

描述
1 load average: 1min, 5min, 15min loadaverage; (每隔 5s 计算一次活跃进程数)
2 Tasks: 进程数; zombie: 僵尸进程
3 1.0 us: user 用户态占用; 1.2 sy: system, 内核空间占用cpu百分比; 0.0 ni: 改变过优先级的进程; 97.8 id: 空闲cpu; 0.0 wa: io等待百分比 0.0 hi: 硬中断(Hardware IRQ)占用百分比;0.0 si:软中断(Sofeware Interrupts)占用百分比, 0.0 st: 被强制等待虚拟cpu的时间
4 内存描述; 5924848 buff/cache 缓存的内存量
5 交换分区描述;

最后一行

标识 描述
NI 负值表示高优先级;VIRT:进程使用虚拟内存量 kb VIRT = SWAP+RES
RES 进程使用的、未被换出的物理内存大小 kb
SHR 共享内存大小 kb
S 进程状态: D,不可中断的睡眠状态; R,运行; S,睡眠; T,跟踪/停止; Z,僵尸进程;
CPU 上一次更新到现在 cpu 时间占用比例
MEM 进程使用物理内存比例
TIME 进程使用cpu时间总计,单位 1/100s
COMMEND 进程名称

4.1.2 交互命令 #

命令 描述
P 按照cpu排序
M 按照内存排序;1
1 查看多核;b
b 高亮当前运行的进程
x 高亮排序字段
< > 切换排序方式
c 完整命令

五、网络调试 #

5.1 telnet #

5.2 curl #

5.3 ping #

netstat -na | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

5.4 nc(netcat) #

用于设置路由器,是网络工具中的瑞士军刀。它能通过 TCP 和 UDP 在网络中读写数据。

语法

1
2
nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>]
[-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
1
2
3
4
5
6
7
8
# 1. 持续检测,是否本地 mysql 启动
until nc -z -w 2 milvus-mysql 3306 && echo mysql database ok; 
do
  sleep 2;
done;

# 2. 扫描 tcp 端口
nc -v -z -w2 127.0.0.1 1-100 

六、Bash 内置命令 & 保留字 & other #

  1. type 检测命令是否为内置命令

  2. echo

1
echo $? // 打印上次命令执行的错误
  1. read
1
2
read name
echo $name
  1. /dev/null 黑洞,吞噬一切,下面的命令错误输出重定向到 /dev/null,屏幕只会打印标准输出
1
find ./ -name .bashrc  2> /dev/null
  1. 执行顺序 ;, ||, &&

  2. time 展示命令执行耗时

1
2
time ls
# ls -G  0.00s user 0.00s system 57% cpu 0.007 total

参考:

《unix 教程》

《CURL 必知必会》