Skip to content

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//io 进程的io累计信息

包管理

查找包

apt-cache search [package]

查看包的状态,是否安装,版本信息等

dpkg -s python-dev

用户和组

查看当前用户

whoami

用户属于哪几个用户组

groups