文章目录

前言

在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 {} \;

chmod

修改文件或目录的访问权限‌

chmod [who] [+ | - | =] [mode] 文件名
who含义
u用户(user),即文件或目录的所有者。
g同组(group)用户,即与文件属主有相同组ID的所有用户。
o其他(others)用户
a所有(all)用户。它是系统默认值。
操作符号含义
+添加某个权限
-取消某个权限
=赋予给定权限并取消其他所有权限(如果有的话)
mode含义
r可读
w可写
x可执行
X只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性
s在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t将文件依建立时间之先后次序列出
u与文件属主拥有一样的权限
g与和文件属主同组的用户拥有一样的权限
o与其他用户拥有一样的权限

mode的八进制模式‌:使用三个八进制数字来表示权限。每个数字分别对应文件所有者、所属组和其他用户的权限。
每个数字由三个位组成,分别表示读(r)、写(w)和执行(x)的权限。例如,755表示所有者有读、写、执行权限,所属组和其他用户有读和执行权限。

1、给文件添加执行权限

chmod +x 文件名

查看进程信息

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百分比
waIO等待占用CPU的百分比
hi硬中断占用CPU的百分比
si软中断占用CPU的百分比
st虚拟 CPU 等待实际 CPU 的时间的百分比

第四行 内存状态

内容含义
total物理内存总量
used使用中的内存总量
free空闲内存总量
buffers缓存的内存量

第五行 swap交换分区信息

内容含义
total交换区总量
used使用的交换区总量
free空闲交换区总量
buffers缓冲的交换区总量

第六行 空行

第七行 各进程(任务)的状态监控

内容含义
PID进程id
USER进程所有者
PR进程优先级
NInice值。负值表示高优先级,正值表示低优先级
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设置主程序的参数
breakb设置断点
clear删除一个断点
start单步执行,运行程序,停在第一执行语句
runr开始运行程序。运行到第一个断点位置,如果没有断点就直接运行结束
continuec继续运行程序,直到下一个断点或者程序结束
nextn执行当前行。如果当前行包含函数调用,不会进入函数
steps执行当前行。如果当前行包含函数调用,则进入函数,执行函数体第一条语句
finish结束当前函数,返回到函数调用点
listl查看原代码
backtracebt查看函数的调用的栈帧和层级关系
framef切换函数的栈帧
printp显示变量或表达式的值
infoi查看函数内部局部变量的数值
watch使你能监视一个变量的值而不管它何时被改变
set var name = value设置变量的值
quitq退出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

3、替换windows换行符

sed -i 's/\r//' demo.sh

压缩解压命令

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         // 解压 tartar -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_|
...
Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐