常用命令
#
本文描述 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 文件占用
#
- df(Disk Free)
- 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
2
|
which commend
which -a commend
|
- 快速查找文件
1
2
3
|
# update local db
sudo /usr/libexec/locate.updatedb
locate filename
|
- 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
|
三、文本处理
#
3.1 常用工具高频命令
#
- 切割文本基础操作
1
2
3
4
|
# 根据符号切割
cut -d ':' -f1,1
# 取前 50 字符
cut -c-50
|
-
xargs
-
grep
1
2
|
# 同时匹配多个模式(满足任意一个即可)
grep -e "functio" -e "class" file
|
3.2 日志计算、查询和过滤
#
- 计算日志中重复率最高的 top k
文件大的话非常耗时,注意内存和处理器的波动。以下是计算 access.log 文件中重复日志量最大的前十条,其中日志样本只计算每行的前 50 个字符。
1
|
head -n 20000 access.log | cut -c-50 | sort | uniq -c | sort -n -r | head -n 10
|
- 根据 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}"
|
- 日志特殊字符转译
>
<
&
\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 示例
#
前五行
行 |
描述 |
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 |
完整命令 |
4.2 htop
#
略
五、网络调试
#
telnet
#
5.2 curl
#
curl --data '{"name":"bob"}' --header 'Content-Type: application/json' http://example.com/users/1234
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
#
-
type
检测命令是否为内置命令
-
echo
- read
- /dev/null
黑洞,吞噬一切,下面的命令错误输出重定向到 /dev/null,屏幕只会打印标准输出
1
|
find ./ -name .bashrc 2> /dev/null
|
-
执行顺序
;, ||, &&
-
time
展示命令执行耗时
1
2
|
time ls
# ls -G 0.00s user 0.00s system 57% cpu 0.007 total
|
参考:
《unix 教程》
《CURL 必知必会》