文章目录
- 前言
- 目录文件查看
- ls
- 1、查看详细信息(文件大小用K、M等显示)
- 2、按照文件创建时间排序(常在查看日志时使用)
- sort
- 1、排序数字
- df 、du
- 1、查看目录的大小
- 2、查看目录 从大到小排序 显示前n个
- 3、查看磁盘使用情况
- tailf
- 一些目录操作
- find
- 1、查找 /etc 目录下以 conf 结尾的文件
- 2、 /etc 目录下,所属用户为 zhangsan 的所有文件
- 3、查找 /etc 目录下,大于 1M 的文件
- 4、搜索 /etc 目录下的文件(非目录),文件以 conf 结尾,且大于 10k,然后将其删除。
- 查看进程信息
- ps
- 1、查看所有用户下所有进程
- 2、查看指定用户下的进程
- 3、查看指定进程信息
- 4、查看指定进程的子进程
- 5、指定进程的展示字段
- 6、查看线程信息
- 7、打印进程树
- 8、配合grep查看想要的进程
- pstack
- top
- 1、监控每个逻辑CPU的状况
- 2、高亮显示当前运行进程
- 3、进程字段排序
- htop
- 调试
- file
- 1、用于辨识文件类型
- 2、查看core文件信息
- gdb
- 1、调试core文件
- 2、查看相关信息
- 3、设置相关信息
- strace
- perf(root)
- 查看内核对象
- ipcs、ipcrm
- 1、查看共享内存
- 2、查看消息队列
- 3、查看信号量
- lsof
- 1、获取网络信息
- 文本操作
- grep
- 1、显示行号
- 2、过滤出不匹配的
- 3、统计行数
- 4、显示匹配文件名,递归匹配
- 5、忽略大小写
- awk
- 1、切片打印
- 2、内置变量
- 3、内置函数
- 4、条件使用
- 5、if 语句
- sed
- 1、取消默认输出
- 2、多次编辑
- 压缩解压命令
- tar
- 其他
- rz sz
- watch
- 1、5秒一次输出系统的平均负载
- 2、每隔一秒高亮显示网络链接数的变化情况
- crontab
- hexdump
- 1、查看文件
前言
在linux中,有非常多的工具可以使用,并且通过|
、>
等功能串起来使用,相当的强大。
平时在遇到一些线上问题的时候多一个工具的使用,可能就会多一种定位问题的方案。
刚刚接触linux的小伙伴可能会比迷茫,因为工具实在是太多了,虽然有自带的帮助手册(用系统自带的
man
命令看),但是参数和用法也是真的很多。
这边不介绍的特别详细,具体可以自己百度,只记录一些我常用的。(不常用的想不起来了,像那些vim什么的就不记录了,应该都会的)
目录文件查看
ls
用来查看文件信息
选项 | 含义 |
---|---|
-a | 查看所有文件包括隐藏文件 |
-l | 查看文件的详细信息 |
-d | 查看目录信息 |
-h | 显示文件大小时候便于人阅读 |
-i | 查看文件的inode节点 |
-t | 将文件依建立时间之先后次序列出 |
-r | 将文件以相反次序显示(原定依英文字母次序) |
1、查看详细信息(文件大小用K、M等显示)
[appadmin@VM-4-7-centos ~]$ ls -lha
total 32K
drwx------ 4 appadmin appadmin 4.0K Mar 22 15:29 .
drwxr-xr-x. 4 root root 4.0K Mar 22 15:26 ..
-rw------- 1 appadmin appadmin 144 Mar 22 16:11 .bash_history
-rw-r--r-- 1 appadmin appadmin 18 Apr 1 2020 .bash_logout
-rw-r--r-- 1 appadmin appadmin 193 Apr 1 2020 .bash_profile
-rw-r--r-- 1 appadmin appadmin 231 Apr 1 2020 .bashrc
drwxrwxr-x 3 appadmin appadmin 4.0K Mar 22 15:29 .cache
drwxrwxr-x 3 appadmin appadmin 4.0K Mar 22 15:29 .config
2、按照文件创建时间排序(常在查看日志时使用)
最近修改的排在最后面
[appadmin@VM-4-7-centos ~]$ ls -ltr
total 286996
-rw-rw-rw- 1 appadmin users 31457304 Feb 24 22:51 xxx_debug9.log
-rw-rw-rw- 1 appadmin users 31457417 Feb 28 17:01 xxx_debug0.log
-rw-rw-rw- 1 appadmin users 31457524 Mar 4 11:08 xxx_debug1.log
-rw-rw-rw- 1 appadmin users 31457423 Mar 8 05:16 xxx_debug2.log
-rw-rw-rw- 1 appadmin users 31457382 Mar 11 23:23 xxx_debug3.log
-rw-rw-rw- 1 appadmin users 31457323 Mar 15 17:31 xxx_debug4.log
-rw-rw-rw- 1 appadmin users 31457524 Mar 19 11:39 xxx_debug5.log
-rw-rw-rw- 1 appadmin users 31457324 Mar 23 05:47 xxx_debug6.log
-rw-rw-rw- 1 appadmin users 31457330 Mar 26 23:30 xxx_debug7.log
-rw-rw-rw- 1 appadmin users 2396917 Mar 27 15:53 xxx_error0.log
-rw-rw-rw- 1 appadmin users 2429754 Mar 27 15:54 xxx_run0.log
-rw-rw-rw- 1 appadmin users 5598702 Mar 27 15:54 xxx_debug8.log
sort
将文本文件内容按ASCII码值以行为单位来排序
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][文件][-k field1[,field2]]
选项 | 含义 |
---|---|
-b | 忽略每行前面开始出的空格字符 |
-c | 检查文件是否已经按照顺序排序 |
-d | 排序时,处理英文字母、数字及空格字符外,忽略其他的字符 |
-f | 排序时,将小写字母视为大写字母 |
-i | 排序时,除了040至176之间的ASCII字符外,忽略其他的字符 |
-m | 将几个排序好的文件进行合并 |
-M | 将前面3个字母依照月份的缩写进行排序 |
-n | 依照数值的大小排序 |
-u | 意味着是唯一的(unique),输出的结果是去完重了的 |
-o<输出文件> | 将排序后的结果存入指定的文件 |
-r | 以相反的顺序来排序 |
-t<分隔字符> | 指定排序时所用的栏位分隔字符 |
+<起始栏位>-<结束栏位> | 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位 |
[-k field1[,field2]] | 按指定的列进行排序 |
1、排序数字
按照:
分割,第三列数字倒序排序
root@iZ0jlefid9553qupva7d3fZ:/etc# sort -nr -t: -k3 passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:115:125:MySQL Server,,,:/nonexistent:/bin/false
...
df 、du
du 查看目录大小
选项 | 含义 |
---|---|
-a | 显示目录中文件的大小 单位KB |
-b | 显示目录中文件的大小 单位BYTE |
-m | 显示目录中文件的大小 单位MB |
-c | 显示目录中文件的大小 同时也显示总和 单位KB |
-s | 仅显示目录的总值 单位KB |
-h | 以KB、MB、GB为单位显示 提高可读性 |
–max-depth | 显示层级 |
df 查看磁盘使用情况
选项 | 含义 |
---|---|
-a | 查看全部文件系统 单位KB |
-h | 以KB、MB、GB为单位显示 提高可读性 |
1、查看目录的大小
[appadmin@VM-4-7-centos local]$ du -sh ./*
[root@VM-4-7-centos etc]# du -sh ./*
40K ./abrt
24K ./acpi
4.0K ./adjtime
4.0K ./aliases
12K ./aliases.db
4.0K ./alternatives
4.0K ./anacrontab
4.0K ./asound.conf
4.0K ./at.deny
20K ./audisp
24K ./audit
44K ./bash_completion.d
4.0K ./bashrc
4.0K ./binfmt.d
4.0K ./centos-release
4.0K ./centos-release-upstream
4.0K ./chkconfig.d
4.0K ./chrony.conf
4.0K ./chrony.keys
...
2、查看目录 从大到小排序 显示前n个
[root@VM-4-7-centos etc]# du -s * | sort -nr | head -15
25588 selinux
8708 udev
1936 pki
656 services
616 ssh
376 sysconfig
272 depmod.d
152 postfix
148 lvm
144 rc.d
144 libreport
112 dbus-1
108 pam.d
100 bash_completion.d
92 systemd
3、查看磁盘使用情况
[appadmin@VM-4-7-centos etc]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 908M 0 908M 0% /dev
tmpfs 919M 24K 919M 1% /dev/shm
tmpfs 919M 860K 919M 1% /run
tmpfs 919M 0 919M 0% /sys/fs/cgroup
/dev/vda1 40G 4.5G 34G 12% /
tmpfs 184M 0 184M 0% /run/user/0
tmpfs 184M 0 184M 0% /run/user/1001
tailf
实时查看日志信息
tailf 文件名
一些目录操作
# 递归创建目录
mkdir -p
# 递归删除
rm -r
# 递归拷贝
cp -r
find
查找文件
find [路径] [选项] [操作]
选项 | 含义 |
---|---|
-name | 根据文件名字搜索 |
-iname | 根据文件名字搜索(不区分大小写) |
-size | 根据文件大小查找(+n 大于 -n小于 n等于 n为数据块0.5k) |
-user | 根据文件所有者查找 |
-group | 根据所属组查找 |
-amin | 根据文件被访问的时间查找 |
-cmin | 根据文件属性被改变的时间查找 |
-mmin | 根据文件内容是否改变查找 |
-a | 两个条件同时满足 |
-o | 两个条件满足任意一个即可 |
-exec/-ok 命令 {} \; | 对搜索结果进行操作 |
-type | 根据文件类型查找(f — 文件 d — 目录 c — 字符设备文件 b — 块设备文件 l — 链接文件 p — 管道文件 ) |
-inum | 根据i节点查找 |
-mindepth n | 从第 n 级目录开始搜索 |
-maxdepth n | 至多搜索到第 n-1 级子目录 |
1、查找 /etc 目录下以 conf 结尾的文件
find /etc -name '*.conf'
2、 /etc 目录下,所属用户为 zhangsan 的所有文件
find /etc -user zhangsan
3、查找 /etc 目录下,大于 1M 的文件
find /etc -size +1M
4、搜索 /etc 目录下的文件(非目录),文件以 conf 结尾,且大于 10k,然后将其删除。
find /etc -type f -name '*.conf' -size +10k -exec rm -f {} \;
查看进程信息
ps
1、查看所有用户下所有进程
ubuntu@VM-4-4-ubuntu:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 May17 ? 00:02:55 /sbin/init
root 2 0 0 May17 ? 00:00:04 [kthreadd]
...
STAT:进程的状态
字符 | 意义 |
---|---|
D | 无法中断的休眠状态 (通常 IO 的进程) |
I(大写i) | 空闲内核线程 |
R | 正在运行或可运行(在运行队列) |
S | 可中断休眠(等一个时间来完成) |
T | 因作业控制信号而停止 |
t | 在跟踪期间被调试器停止 |
Z | 不存在但暂时无法消除 |
W | 分页(内核2.6.x版本后无效) |
X | 已杀死(应该永远不会看到) |
Z | 僵尸进程 |
BSD格式:
字符 | 意义 |
---|---|
< | 高优先级 |
N | 低优先级 |
L | 内存有被锁定的页(实时和自定义IO) |
s | 是会话领导 |
l(小写L) | 是多线程的 |
+ | 在前台进程组里 |
ubuntu@VM-4-4-ubuntu:~$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 169284 11116 ? Ss May17 2:55 /sbin/init
root 2 0.0 0.0 0 0 ? S May17 0:04 [kthreadd]
...
2、查看指定用户下的进程
ubuntu@VM-4-4-ubuntu:~$ ps -fu ubuntu
UID PID PPID C STIME TTY TIME CMD
ubuntu 2811946 1 0 11:06 ? 00:00:00 /lib/systemd/systemd --user
ubuntu 2811952 2811946 0 11:06 ? 00:00:00 (sd-pam)
...
3、查看指定进程信息
ubuntu@VM-4-4-ubuntu:~$ ps -uf 1333
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1333 0.0 0.2 12160 4316 ? Ss May17 1:31 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
4、查看指定进程的子进程
ubuntu@VM-4-4-ubuntu:~$ ps -f --ppid=1
UID PID PPID C STIME TTY TIME CMD
root 411 1 0 May17 ? 00:09:30 /lib/systemd/systemd-journald
root 442 1 0 May17 ? 00:00:41 /lib/systemd/systemd-udevd
...
5、指定进程的展示字段
ubuntu@VM-4-4-ubuntu:~$ ps -o pid,ppid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm -u ubuntu
PID PPID TID CLS RTPRIO NI PRI PSR %CPU STAT WCHAN COMMAND
2811946 1 2811946 TS - 0 19 0 0.0 Ss ep_poll systemd
2811952 2811946 2811952 TS - 0 19 1 0.0 S - (sd-pam)
...
6、查看线程信息
ubuntu@VM-4-4-ubuntu:~$ ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 42321 - May17 ? 00:02:55 /sbin/init
1 S root 2 0 0 80 0 - 0 - May17 ? 00:00:04 [kthreadd]
...
7、打印进程树
ubuntu@VM-4-4-ubuntu:~$ ps -ejH
PID PGID SID TTY TIME CMD
...
1333 1333 1333 ? 00:01:31 sshd
2811934 2811934 2811934 ? 00:00:00 sshd
2812115 2811934 2811934 ? 00:00:00 sshd
2812116 2812116 2812116 pts/0 00:00:00 bash
2837661 2837661 2837661 ? 00:00:00 sshd
2837797 2837661 2837661 ? 00:00:00 sshd
2837835 2837835 2837835 pts/1 00:00:00 bash
2839712 2839712 2837835 pts/1 00:00:00 ps
2837694 2837694 2837694 ? 00:00:00 sshd
2837834 2837694 2837694 ? 00:00:00 sshd
2837842 2837842 2837842 ? 00:00:00 sftp-server
...
ubuntu@VM-4-4-ubuntu:~$ ps -axjf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
...
1333 2837661 2837661 2837661 ? -1 Ss 0 0:00 \_ sshd: ubuntu [priv]
2837661 2837797 2837661 2837661 ? -1 S 1000 0:00 | \_ sshd: ubuntu@pts/1
2837797 2837835 2837835 2837835 pts/1 2843878 Ss 1000 0:00 | \_ -bash
2837835 2843878 2843878 2837835 pts/1 2843878 R+ 1000 0:00 | \_ ps -axjf
1333 2837694 2837694 2837694 ? -1 Ss 0 0:00 \_ sshd: ubuntu [priv]
2837694 2837834 2837694 2837694 ? -1 S 1000 0:00 \_ sshd: ubuntu@notty
2837834 2837842 2837842 2837842 ? -1 Ss 1000 0:00 \_ /usr/lib/openssh/sftp-server
...
8、配合grep查看想要的进程
ubuntu@VM-4-4-ubuntu:~$ ps -aux | grep ssh
root 1333 0.0 0.2 12160 4316 ? Ss May17 1:31 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 2811934 0.0 0.4 13920 8804 ? Ss 11:06 0:00 sshd: ubuntu [priv]
...
pstack
显示每个进程的栈跟踪,定位具体的函数。
ubuntu@VM-4-4-ubuntu:~$ pstack 32761
#0 0x00007f264e6ba7e0 in __read_nocancel () from /lib64/libc.so.6
#1 0x000000000049d959 in rl_getc ()
#2 0x000000000049e184 in rl_read_key ()
#3 0x000000000048a0e3 in readline_internal_char ()
#4 0x000000000048a755 in readline ()
#5 0x000000000041e66a in yy_readline_get ()
#6 0x00000000004205d2 in shell_getc ()
#7 0x0000000000422f9a in read_token.constprop.6 ()
#8 0x0000000000426369 in yyparse ()
#9 0x000000000041df4a in parse_command ()
#10 0x000000000041e00c in read_command ()
#11 0x000000000041e20c in reader_loop ()
#12 0x000000000041c8ee in main ()
top
性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。
选项 | 含义 |
---|---|
-b | 批处理 |
-c | 显示完整的治命令 |
-I | 忽略失效过程 |
-s | 保密模式 |
-S | 累积模式 |
-i<时间> | 设置间隔时间 |
-u<用户名> | 指定用户名 |
-p<进程号> | 指定进程 |
-n<次数> | 循环显示的次数 |
效果:
第一行 任务队列信息
内容 | 含义 |
---|---|
17:51:27 | 当前系统时间 |
up 104 days, 23:39 | 系统运行时间 |
1 user | 当前登录用户个数 |
load average: 0.00, 0.03, 0.05 | 任务队列平均长度,1分钟、5分钟、15分钟的平均负载 |
第二行 Tasks — 任务(进程)
内容 | 含义 |
---|---|
total | 进程总数 |
running | 正在运行的进程数 |
sleeping | 休眠的进程数 |
stopped | 停止的进程数 |
zombie | 僵尸进程数 |
第三行 cpu状态信息
内容 | 含义 |
---|---|
us | 用户空间占用CPU的百分比 |
sy | 内核空间占用CPU的百分比 |
ni | 改变过优先级的进程占用CPU的百分比 |
id | 空闲CPU百分比 |
wa | IO等待占用CPU的百分比 |
hi | 硬中断占用CPU的百分比 |
si | 软中断占用CPU的百分比 |
st | 虚拟 CPU 等待实际 CPU 的时间的百分比 |
第四行 内存状态
内容 | 含义 |
---|---|
total | 物理内存总量 |
used | 使用中的内存总量 |
free | 空闲内存总量 |
buffers | 缓存的内存量 |
第五行 swap交换分区信息
内容 | 含义 |
---|---|
total | 交换区总量 |
used | 使用的交换区总量 |
free | 空闲交换区总量 |
buffers | 缓冲的交换区总量 |
第六行 空行
第七行 各进程(任务)的状态监控
内容 | 含义 |
---|---|
PID | 进程id |
USER | 进程所有者 |
PR | 进程优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
S | 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称 |
1、监控每个逻辑CPU的状况
按键盘数字“1”
2、高亮显示当前运行进程
按键盘“b”(打开/关闭加亮效果)
3、进程字段排序
默认进入top时,各进程是按照CPU的占用量来排序的
敲击键盘大写“P”:CPU占用百分比排序,%CPU
敲击键盘大写“M”:占据内存百分比排序,%MEM
敲击键盘大写“T”:累计占据CPU时间排序,TIME+
htop
具体信息和top类似
选项 | 含义 |
---|---|
-C --no-color | 使用单色配色方案 |
-d --delay=DELAY | 设置刷新间隔时间,单位十分之一秒 |
-h --help | 打印帮助信息 |
-s --sort-key=COLUMN | 按照指定列排序选择 |
-t --tree | 默认值,按照树结构视图显示 |
-u --user=USERNAME | 只显示指定用户进程信息 |
-p --pid=PID,[,PID,PID…] | 只显示指定pid进程信息 |
-v --version | 打印命令版本 |
快捷键 | 含义 |
---|---|
F1 | 获取功能键命令帮助 |
F2 | 设置区域二展示内容,可以设置颜色方案、列等等 |
F3 | 搜索,可以搜索command列中的信息 |
F4 | 过滤,可以过滤command列中匹配的进程 |
F5 | 按照进程树样式展示 |
F6 | 排序,根据选择的列排序 |
F7 | 设置进程优先级,减小优先级 |
F8 | 设置进程优先级,增加优先级 |
F9 | 杀死进程,需要先选中进程,然后选择需要发送的信号量 |
F10 | 退出 |
调试
file
1、用于辨识文件类型
ubuntu@VM-4-4-ubuntu:/usr/local/comm/lib$ file libjsoncpp.so
libjsoncpp.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=7ecef70859a65f3717a8416eb691304b69ac5706, not stripped
2、查看core文件信息
ubuntu@VM-4-4-ubuntu:~$ file core.10343
core.10343: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '执行命令', real uid: 1000, effective uid: 1000, real gid: 100, effective gid: 100, execfn: '文件', platform: 'x86_64'
gdb
调试可执行文件,功能非常强大
选项 | 含义 |
---|---|
-e | 指定可执行文件名 |
-c | 指定coredump文件 |
-d | 指定目录加入到源文件搜索路径 |
–cd | 指定目录作为路径运行gdb |
-s | 指定文件读取符号表 |
-p | 指定attach进程 |
调试命令:
命令 | 命令缩写 | 命令说明 |
---|---|---|
set args | 设置主程序的参数 | |
break | b | 设置断点 |
clear | 删除一个断点 | |
start | 单步执行,运行程序,停在第一执行语句 | |
run | r | 开始运行程序。运行到第一个断点位置,如果没有断点就直接运行结束 |
continue | c | 继续运行程序,直到下一个断点或者程序结束 |
next | n | 执行当前行。如果当前行包含函数调用,不会进入函数 |
step | s | 执行当前行。如果当前行包含函数调用,则进入函数,执行函数体第一条语句 |
finish | 结束当前函数,返回到函数调用点 | |
list | l | 查看原代码 |
backtrace | bt | 查看函数的调用的栈帧和层级关系 |
frame | f | 切换函数的栈帧 |
p | 显示变量或表达式的值 | |
info | i | 查看函数内部局部变量的数值 |
watch | 使你能监视一个变量的值而不管它何时被改变 | |
set var name = value | 设置变量的值 | |
quit | q | 退出gdb环境 |
1、调试core文件
gdb -c core.7707 执行文件
bt
2、查看相关信息
选项 | 含义 |
---|---|
info share | 列出当前共享库 |
info files | 列出当前文件 |
info frame | 列出栈帧 |
info register | 列出寄存器 |
info thread | 列出线程 |
3、设置相关信息
选项 | 含义 |
---|---|
set solib-search-path | 设置so解析路径 |
strace
用于诊断、调试和教学的 Linux 用户空间跟踪器。
运行模式 | 含义 |
---|---|
-p pid | 跟踪查看某个正在运行的进程的系统调用 |
cmd | 直接通过strace启动应用程序 |
选项 | 含义 |
---|---|
-tt | 在每行输出的前面,显示毫秒级别的时间 |
-T | 显示每次系统调用所花费的时间 |
-v | 对于某些相关调用,把完整的环境变量,文件 stat 结构等打出来 |
-f | 跟踪目标进程,以及目标进程创建的所有子进程 |
-e | 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称 |
-e trace=set | 仅跟踪指定的系统调用集。例如,trace=open,close,read,write表示仅跟踪这四个系统调用 |
-e trace=file | 跟踪所有以文件名作为参数的系统调用 |
-e trace=process | 跟踪涉及过程管理的所有系统调用 |
-e trace=network | 跟踪所有与网络相关的系统调用 |
-e trace=signal | 跟踪所有与信号相关的系统调用 |
-e trace=ipc | 跟踪所有与IPC相关的系统调用 |
-o | 把 strace 的输出单独写到指定的文件 |
-s | 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是 32 个字节 |
[root@VM-4-7-centos ~]# strace -e trace=file ls
execve("/usr/bin/ls", ["ls"], 0x7ffeb72daa20 /* 23 vars */) = 0
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
statfs("/sys/fs/selinux", 0x7fff5be61af0) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7fff5be61af0) = -1 ENOENT (No such file or directory)
open("/proc/filesystems", O_RDONLY) = 3
stat("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned", 0x7fff5be61670) = -1 ENOENT (No such file or directory)
access("/etc/selinux/config", F_OK) = 0
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
compose-project data
+++ exited with 0 +++
perf(root)
软件性能分析的工具
(目前我用的少,以后再补充)
perf record 收集一段时间内的性能事件到文件
perf report 显示分析数据
效果
查看内核对象
ipcs、ipcrm
查看、删除消息队列、共享内存、信号
ipcs
选项 | 含义 |
---|---|
-m | 查看共享内存 |
-q | 查看消息队列 |
-s | 信号量 |
ipcrm
选项 | 含义 |
---|---|
-M | 以shmkey删除共享内存 |
-m | 以shmid删除共享内存 |
-Q | 以msgkey删除消息队列 |
-q | 以msgid删除消息队列 |
-S | 以semkey删除信号 |
-s | 以semid删除信号 |
1、查看共享内存
[appadmin@VM-4-7-centos ~]$ ipcs -m
------------ 共享内存段 --------------
shmkey shmid 拥有者 权限 字节 nattch status
0x00000000 0 root 600 657056 5 dest
0x20140304 32769 appadmin 766 4 28
...
dest表示共享内存段已经被删除,但还有程序在连接着它。
2、查看消息队列
[appadmin@VM-4-7-centos ~]$ ipcs -q
--------- 消息队列 -----------
键 msqid 拥有者 权限 已用字节数 消息
0x0bf4f5c9 0 appadmin 666 0 0
0x01312d65 32769 appadmin 666 154 1
...
3、查看信号量
[appadmin@VM-4-7-centos ~]$ ipcs -s
--------- 信号量数组 -----------
键 semid 拥有者 权限 nsems
0x00000000 98304 root 600 14
0x10120110 229377 appadmin 666 1
lsof
列出被各种进程打开的文件信息
打印信息的含义:
-- COMMAND: 命令名称
-- PID: 进程ID
-- USER: 用户ID号或登录名
-- FD: 文件描述符
-- TYPE: 与文件关联结点的类型
-- DEVICE: 设备号
-- SIZE/OFF: 文件大小/偏移量,以字节为单位
-- NODE: 文件结点
-- NAME: 文件挂载点和文件所在的系统
1、获取网络信息
-i [46] [protocol] [@hostname|hostaddr][:service|port]
46: 分别指 IPv4、IPv6
protocol: 指 TCP 或 UDP
hostname: 网络主机名
hostaddr: IP 地址
service: 包含在 /etc/services 中的名称
port: 端口号,可以是多个
查看端口被占用
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
AliYunDun 478066 root 13u IPv4 4408120 0t0 TCP iZ0jlefid9553qupva7d3fZ:40994->172.16.12.5:http (ESTABLISHED)
加上ip
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i @172.16.12.5:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
AliYunDun 478066 root 13u IPv4 4408120 0t0 TCP iZ0jlefid9553qupva7d3fZ:40994->172.16.12.5:http (ESTABLISHED)
找出监听端口
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 630 root 19u IPv6 25463 0t0 TCP *:24444 (LISTEN)
systemd-r 264882 systemd-resolve 13u IPv4 2701294 0t0 TCP localhost:domain (LISTEN)
...
找出已经建立的连接
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i -sTCP:ESTABLISHED
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 630 root 21u IPv6 3084978 0t0 TCP iZ0jlefid9553qupva7d3fZ:24444->92.63.196.97:53453 (ESTABLISHED)
node 630 root 22u IPv6 26413 0t0 TCP localhost:24444->localhost:44860 (ESTABLISHED)
...
ipv4信息(ipv6信息把后面的4换成6)
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i 4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 632 root 25u IPv4 26412 0t0 TCP localhost:44860->localhost:24444 (ESTABLISHED)
chronyd 860 _chrony 5u IPv4 25062 0t0 UDP localhost:323
...
TCP信息(UDP信息把后面的TCP换成UDP)
root@iZ0jlefid9553qupva7d3fZ:~# lsof -i TCP
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 630 root 19u IPv6 25463 0t0 TCP *:24444 (LISTEN)
node 630 root 21u IPv6 3084978 0t0 TCP iZ0jlefid9553qupva7d3fZ:24444->92.63.196.97:53453 (ESTABLISHED)
...
文本操作
grep
主要用来:数据查找定位
可使用正则表达式来搜索
选项 | 含义 |
---|---|
-i | 不区分大小写 |
-n | 显示结果所在行号 |
-c | 统计匹配到的行数 |
-w | 匹配整个单词 |
-o | 只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 |
-e | 指定字符串做为查找文件内容的样式 |
-E | 使用扩展正则表达式 |
-v | 排除指定字符串所在的行 |
-l | 列出文件内容符合指定的范本样式的文件名称 |
-L | 列出文件内容不符合指定的范本样式的文件名称 |
-A<显示行数> | 除了显示符合范本样式的那一列之外,并显示该行之后的内容 |
-B<显示行数> | 除了显示符合样式的那一行之外,并显示该行之前的内容 |
-C<显示行数> | 除了显示符合样式的那一行之外,并显示该行之前后的内容 |
-f FILE | 从FILE获取PATTERN匹配 |
-F | 相当于fgrep |
-r | 递归查找 |
1、显示行号
ubuntu@VM-4-4-ubuntu:~$ grep -n ubuntu /etc/passwd
32:ubuntu:x:1000:1000:ubuntu:/home/ubuntu:/bin/bash
2、过滤出不匹配的
ubuntu@VM-4-4-ubuntu:~$ grep -v ubuntu /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
3、统计行数
ubuntu@VM-4-4-ubuntu:~$ grep -c ubuntu /etc/passwd
1
4、显示匹配文件名,递归匹配
ubuntu@VM-4-4-ubuntu:~$ grep -lr ubuntu /etc
/etc/depmod.d/ubuntu.conf
/etc/PackageKit/Vendor.conf
...
5、忽略大小写
ubuntu@VM-4-4-ubuntu:~$ grep -i Ubuntu /etc/passwd
ubuntu:x:1000:1000:ubuntu:/home/ubuntu:/bin/bash
awk
主要用来:数据切片
1、切片打印
根据空格和制表符(-F参数指定分隔符),将每一行分成若干字段
$0 代表标准输入
$1 代表第一个字段
$2 代表第二个字段
以此类推
ubuntu@VM-4-4-ubuntu:~$ awk -F ':' '{ print $1 }' /etc/passwd
root
bin
daemon
...
2、内置变量
变量 | 含义 |
---|---|
NF | 最后一个字段 |
NR | 当前处理行数 |
FILENAME | 当前文件名 |
FS | 字段分隔符,默认是空格和制表符 |
RS | 行分隔符,用于分割每一行,默认是换行符 |
OFS | 输出字段的分隔符,用于打印时分隔字段,默认为空格 |
ORS | 输出记录的分隔符,用于打印时分隔记录,默认为换行符 |
OFMT | 数字输出的格式,默认为%.6g |
ubuntu@VM-4-4-ubuntu:~$ awk -F ':' '{ print NR ":" $1 }' /etc/passwd
1:root
2:bin
3:daemon
...
3、内置函数
函数 | 含义 |
---|---|
toupper | 字符转为大写 |
tolower | 字符转为小写 |
length | 返回字符串长度 |
substr | 返回子字符串 |
sin | 正弦 |
cos | 余弦 |
sqrt | 平方根 |
rand | 随机数 |
ubuntu@VM-4-4-ubuntu:~$ awk -F ':' '{ print NR ":" toupper($1) }' /etc/passwd
1:ROOT
2:BIN
3:DAEMON
...
4、条件使用
ubuntu@VM-4-4-ubuntu:~$ awk -F ':' 'NR > 1 { print NR ":" toupper($1) }' /etc/passwd
2:BIN
3:DAEMON
4:ADM
...
5、if 语句
ubuntu@VM-4-4-ubuntu:~$ awk -F ':' '{ if (NR > 1) print NR ":" toupper($1); else print FILENAME }' /etc/passwd
/etc/passwd
2:BIN
3:DAEMON
...
sed
主要用来:数据修改
参数
选项 | 含义 |
---|---|
-e | 它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项 |
-f | 后跟保存了sed指令的文件 |
-i | 直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改 |
-n | 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行 |
命令
命令 | 含义 |
---|---|
a-追加 | 向匹配行后面插入内容 |
i-插入 | 向匹配行前插入内容 |
c-更改 | 更改匹配行的内容 |
d-删除 | 删除匹配的内容 |
s/正则/替换内容/g-替换 | 替换掉匹配的内容 |
p-打印 | 打印出匹配的内容,通常与-n选项和用 |
1、取消默认输出
ubuntu@VM-4-4-ubuntu:~$ sed -n "2,3p" /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
2、多次编辑
ubuntu@VM-4-4-ubuntu:~$ sed -n -e "1p" -e "2,3p" /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
压缩解压命令
tar
选项 | 含义 |
---|---|
-c | 打包 |
-v | 显示详细信息 |
-f | 指定文件名 |
-z .gz -j .bz2 | 打包同时压缩 |
-x | 解包 |
tar –cvf jpg.tar *.jpg // 将目录里所有jpg文件打包成 tar.jpg
tar –czf jpg.tar.gz *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg // 将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg // rar格式的压缩,需要先下载 rar for linux
zip jpg.zip *.jpg // zip格式的压缩,需要先下载 zip for linux
tar –xvf file.tar // 解压 tar 包
tar -xzvf file.tar.gz // 解压 tar.gz
tar -xjvf file.tar.bz2 // 解压 tar.bz2
tar –xZvf file.tar.Z // 解压 tar.Z
unrar e file.rar // 解压 rar
unzip file.zip // 解压 zip
其他
rz sz
rz - 文件上传
sz - 文件下载
watch
以周期性的方式执行给定的指令,指令输出以全屏方式显示。
选项 | 含义 |
---|---|
-n | 指定间隔的时间 |
-d | 高亮显示变化的区域 |
-d=cumulative | 变动过的地方(不管最近的那次有没有变动)都高亮显示出来 |
-t | 关闭watch命令在顶部的时间间隔 |
-h | 查看帮助文档 |
1、5秒一次输出系统的平均负载
watch -n 5 'cat /proc/loadavg'
2、每隔一秒高亮显示网络链接数的变化情况
watch -n 1 -d netstat -ant
crontab
置定时任务
选项 | 含义 |
---|---|
–e | 修改 crontab 文件。如果文件不存在会自动创建。 |
–l | 显示 crontab 文件 |
-r | 删除 crontab 文件 |
hexdump
查看二进制文件
选项 | 含义 |
---|---|
-n | 只格式化输入文件的前length个字节 |
-c | 每一字节以ASCII字符显示 |
-C | 每一字节以16进制显示,尾部附加16个相应的ASCII字符 |
-s | 从偏移量开始输出 |
1、查看文件
[appadmin@VM-4-7-centos prometheus]$ hexdump -C prometheus.yml
00000000 67 6c 6f 62 61 6c 3a 0a 20 20 73 63 72 61 70 65 |global:. scrape|
00000010 5f 69 6e 74 65 72 76 61 6c 3a 20 20 20 20 20 36 |_interval: 6|
00000020 30 73 0a 20 20 65 76 61 6c 75 61 74 69 6f 6e 5f |0s. evaluation_|
...