grep
# 查找多个字段
grep -P "field1|field2|field3" <file>
命令结果作为其他命令的文件输入
set -u
set -e
data_file=$1
# count from one
line_num=$2
echo "=================="
echo "line_num=$line_num"
echo "=================="
row_data=`sed -n "${line_num}p;d" $data_file`
col_data=`awk -F"\t" '{for(i=1;i<=NF;i++) print $i}' <(echo "$row_data")`
schema=`grep -v "#" conf/schema.yaml | grep -v "^$"`
paste <(echo "$schema") <(echo "$col_data")
sed -n "${start_line_num},${end_line_num}p"
提取一个文件中第line_num行, 行号从1开始计数echo "$schema"
和echo $schema
的区别,变量带引号时,变量中的newline符号不会丢失
sed
从文件的第n行开始输出
sed -n '2,$p' file
文件过滤
忽略某个模式的后几行
忽略thread.txt文件中,包含pthread_cond_wait字符串的行和其随后的行,共计8行 awk -v nlines=8 '/.pthread_cond_wait./ {for (i=0; i<nlines; i++) {getline}; next} 1' thread.txt
find
# 忽略./test目录
find . -name "*.cpp" -not -path "./test*"
# 查找大文件
find . -type f -size +800M
find . -type f -size +300M -exec ls -l {} \;
exec 和 xargs
# -exec 将所有匹配结果同时传递给命令
find . -type f -size +300M -exec ls -l {} \;
# xargs 可以控制传递给命令的参数
find . -type f -size +300M | xargs ls -l
正则表达式
. 单个任意字符
? 匹配0个或1个
机器的启动时间点
who -b
查看机器历史登录用户
who /var/log/wtmp 机器的用户登录历史
内存
内存使用情况
free -h
total used free shared buffers cached
Mem: 252G 248G 3.7G 1.1G 169M 187G
-/+ buffers/cache: 60G 191G
Swap: 8.0G 4.1G 3.9G
第二行的(-/+ buffers/cache:)表示在第一行used和free列基础上减去和加上buffers/cache的使用
cached是cpu与内存间的, 读缓冲
buffers是内存与磁盘间的,都是为了解决速度不对等的问题
sync 将buffers写入磁盘
系统状态
https://github.com/sysstat/sysstat
进程的上下文切换
pidstat -w -p <pid>
02:51:58 PM UID PID cswch/s nvcswch/s Command
02:51:58 PM 1018 75278 0.75 0.00 rankserver
# 每秒刷新输出上下文切换情况
pidstat -w 1 -p 41242
02:57:36 PM UID PID cswch/s nvcswch/s Command
02:57:37 PM 1020 41242 534.00 0.00 rankserver
02:57:38 PM 1020 41242 512.00 0.00 rankserver
02:57:39 PM 1020 41242 554.00 0.00 rankserver
# 线程的每秒上下文切换情况
pidstat -wt 1 -p <pid>
cswch/s是主动地上下文切换,nvcswch/s是被动执行上下文切换的次数。
进程
查看进程的线程
ps -T -p [pid]
PID SPID TTY TIME CMD
185260 185260 ? 00:00:04 rankserver_qa
top -H -p [pid]
进程的网络连接和端口
进程打开的文件描述符
lsof -p [pid]
网络
netstat -nap | grep [pid]
# 查看机器正在listen的端口
netstat -tlp
-p 显示进程名称信息
-a 显示所有连接(LISTEN,CONNECTED, ESTABLISHED)
-l 只显示listen状态的连接
-n 不显示域名而是显示ip
磁盘
查看硬盘种类 lsblk -d -o name,rota rota=1 表示硬盘可旋转,所以为机械硬盘
tps:每秒I/O次数=[(Δrd_ios+Δwr_ios)/Δt]
r/s:每秒读操作的次数=[Δrd_ios/Δt]
w/s:每秒写操作的次数=[Δwr_ios/Δt]
await:每个I/O平均所需的时间=[Δrd_ticks+Δwr_ticks]/[Δrd_ios+Δwr_ios] (不仅包括硬盘设备处理I/O的时间,还包括了在kernel队列中等待的时间。)
util: 硬盘设备的繁忙比率(该设备有I/O(即非空闲)的时间比率)[Δio_ticks/Δt]
iostat -dxk 2 2
/proc/
包管理
查找包
apt-cache search [package]
查看包的状态,是否安装,版本信息等
dpkg -s python-dev
用户和组
查看当前用户
whoami
用户属于哪几个用户组
groups