Linux命令

# 切换目录

cd

# 示例

# 切换到上一层目录

cd ..

# 切换到/opt/software

cd /opt/software

# 显示工作目录

pwd

# 显示指定工作目录下之内容

ls

# 示例

# 列出当前目录中文件及目录的详情

ls -l

# 列出当前目录及其子目录中文件及目录的详情

ls -lR

# 创建目录

mkdir

# 示例

# 创建目录aaa

mkdir aaa

# 在bbb目录下创建目录aaa,如果bbb目录不存在,就创建一个

mkdir -p bbb/aaa

# 删除目录

rmdir

# 示例

# 删除目录aaa

rmdir aaa

# 删除bbb目录下的aaa目录,如果aaa删除后,bbb目录为成为空目录,则将bbb也删除

rmdir -p bbb/aaa

# 将指定文件的访问时间及修改时间设为当前时间,若文件不存在,则会自动创建该文件

touch

# 示例

# 将aaa文件的访问时间及修改时间设为当前时间,如果aaa不存在,则会自动创建该文件

touch aaa

# 删除文件或目录(一旦通过rm命令删除,将无法恢复,务必小心使用)

rm

# 示例

# 删除test.txt(此格式只能rm 文件;如果使用了rm 目录,则会提示是目录,无法删除)

rm  test.txt

# 递归删除test_dir目录及其内容

rm  -r test_dir

# 为文件或目录改名、或将文件或目录移入其它位置

mv

# 示例

# 将test.txt改名为damu.txt

mv test.txt damu.txt

# 将aaa目录放入bbb目录中;如果bbb目录不存在,则将aaa改名为bbb

mv aaa bbb

# 以树状图列出目录的内容

tree

# 杀死进程

kill

# 示例

# 杀死9999这个进程

kill 9999

# 查看信号

kill -l

# 发送SIGHUP信号杀死9999这个进程

kill -HUP 9999

# 使用SIGKILL信号杀死9999这个进程

kill -9 9999

# 将所有行程以树状图显

pstree

# 示例

# 展示该进程的完整指令及参数

pstree -a

# 关机

# 示例:

shutdown

# 立即关机

shutdown -h now

# 10分钟后关机

shutdown -h 10

# 立即重启

shutdown -r now

# 重启

reboot

# 设置或显示环境变量

export

# 示例

# 列出当前的环境变量

export -p

# 设置环境变量JAVA_HOME=xxx

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home

# 设定权限

# u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

# + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

# r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

chmod

# 示例

# 将test.txt设为所有人皆可读取

chmod a+r test.txt

# 将文件test1.txt与test2.txt设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入

chmod ug+w,o-w test1.txt test2.txt

# 使用数字形式设置权限,语法是chmod abc file。其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。

# r=4,w=2,x=1

# 若要rwx属性则4+2+1=7;

# 若要rw-属性则4+2=6;

# 若要r-x属性则4+1=5

chmod 777 file

# 将指定文件或目录的拥有者改为指定的用户或组

chown

# 示例

# 将的拥有者设为nginx,群体的使用者nginx

chown nginx:nginx nginx.conf

# 递归将当前目录下的所有文件与子目录的拥有者皆设为nginx,群体的使用者为nginx

chown -R nginx:nginx *

# 查找文件里符合条件的字符串

grep

# 示例

# 在当前目录中,查找后缀为txt的文件中,包含test字符串的文件,并打印字符串所属的行

grep test *txt

# 递归查找/opt目录中,包含test字符串的文件,并打印字符串所属的行

grep -r test /opt

# 查找1.txt中不包含test的行

grep -v test 1.txt

# 打开文件并输出

# 示例

# 打开1.txt

cat 1.txt

# 为1.txt添加行号,并输出到2.txt中

cat -n 1.txt > 2.txt

# 查找指定目录下的文件

find

# 查找当前目录下的所有txt文件

find . -name *.txt

# 查找机器中所有大于50M的文件

find / -type f -size +50M

# 查找机器中所有小于50M的文件,并用du -h展示出来

find / -type f -size +50M -exec du -h {} \;

系统

查看操作系统发行版本

不同的Linux发行版(例如CentOS与Debain)、以及不同版本(例如CentOS 6.x与CentOS 7.x)查看版本的方式不同,下面罗列了笔者知道的所有方式,总有一款能适用于你的环境。

•方法1:通过 /etc 目录下的文件查看

•/etc/os-release

•/etc/system-release

•/etc/redhat-release

•/etc/centos-release

•/etc/issue

•方法2:执行 lsb_release -a

uname

作用:

显示系统信息

语法:

Usage: uname [OPTION]...

Print certain system information.  With no OPTION, same as -s.

  -a, --all                打印所有信息

  -s, --kernel-name        打印内核名称

  -n, --nodename          打印网络节点主机名

  -r, --kernel-release    打印内核版本

  -v, --kernel-version    打印内核版本

  -m, --machine            打印硬件名称

  -p, --processor          打印处理器类型

  -i, --hardware-platform  打印硬件平台

  -o, --operating-system  打印操作系统

      --help    帮助

      --version  显示版本

使用:

[root@localhost ~]# uname -a

Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

结果解读:

•Linux:内核名称

•localhost.localdomain:主机名

•3.10.0-327.el7.x86_64:内核版本

•#1 SMP Thu Nov 19 22:10:57 UTC 2015:内核版本

•x86_64:硬件名称

•x86_64:处理器类型

•x86_64:硬件平台

•GNU/Linux:操作系统

常见用法:

uname -a

uptime

作用:

展示系统启动运行了多久

语法:

Usage:

uptime [options]

Options:

-p, --pretty  对输出结果格式化

-h, --help    展示帮助

-s, --since    展示操作系统的启动时间

-V, --version  展示版本

使用:

[root@localhost ~]# uptime

18:52:01 up 48 days, 18:24,  4 users,  load average: 0.00, 0.01, 0.05

结果解读:

•18:52:01:当前时间

•48 days, 18:24:启动了48 days, 18:24这么久

•4 users:当前登录了2个用户

•load average: 0.00, 0.01, 0.05:平局负载,后面的数字分别是最近1分钟、5分钟、15分钟的平均负载

用户相关

id

作用:展示用户的ID、以及所属群组的ID

语法:

Usage: id [OPTION]... [USER]

Print user and group information for the specified USER,

or (when USER omitted) for the current user.

  -a            忽略,只是为了和其他版本兼容

  -Z, --context  只打印当前用户的安全上下文

  -g, --group    只打印有效的group ID

  -G, --groups  打印所有group ID

  -n, --name    打印名称而不是号码,和-u/-g/-G配合使用

  -r, --real    打印真实ID而非有效ID,和-u/-g/-G配合使用

  -u, --user    只打印有效的用户ID

  -z, --zero    以NULL而非空格分隔结果

      --help    帮助

      --version  展示版本

Without any OPTION, print some useful set of identified information.

GNU coreutils online help:

For complete documentation, run: info coreutils 'id invocation'

使用:

# 查看当前用户相关信息

[root@localhost ~]# id

uid=0(root) gid=0(root) groups=0(root)

结果解读:

•uid:用户id及名称

•gid:用户当前所使用的组的id及名称

•groups:用户拥有的所有组的id及名称

常见用法:

# 查看当前用户相关信息

id

# 查看MySQL这个用户的相关信息

id mysql

TIPS

如果大家不知道什么是有效ID、什么是真实ID,可以阅读下这个文章:https://www.annhe.net/article-4458.html[1]

w

作用:

展示当前登录系统的用户信息

语法:

Usage:

w [options]

Options:

-h, --no-header    do not print header

-u, --no-current    ignore current process username

-s, --short        short format

-f, --from          show remote hostname field

-o, --old-style    old style output

-i, --ip-addr      display IP address instead of hostname (if possible)

    --help    display this help and exit

-V, --version  output version information and exit

使用:

[root@localhost ~]# w

18:55:14 up 48 days, 18:28,  4 users,  load average: 0.05, 0.03, 0.05

USER    TTY      FROM            LOGIN@  IDLE  JCPU  PCPU WHAT

root    pts/0    222.94.228.56    18:07  42:34  0.04s  0.04s -bash

root    pts/1    222.94.228.56    18:18  24:50  0.25s  0.06s -bash

root    pts/2    222.94.228.56    18:41  13:48  0.02s  0.02s -bash

root    pts/3    222.94.228.56    18:49    2.00s  0.05s  0.02s w

结果解读:

第一行:类似uptime

USER:当前登录的用户有哪些

TTY:虚拟终端的别名,可以认为是一个会话的名称

FROM:你从那台机器登录进来的

LOGIN:什么时候登录的

IDLE:空闲时间

JCPU:是指连接上这个TTY的所有进程所占用的时间,不包括过去的后台作业时间;

PCPU:当前进程所占用的时间

WHAT:这个用户当前运行的进程是什么

who

作用:展示当前登录用户的信息

语法:

Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]

Print information about users who are currently logged in.

  -a, --all        等价于-b -d --login -p -r -t -T -u

  -b, --boot        系统启动时间

  -d, --dead        打印死亡的进程

  -H, --heading    打印标题

  -l, --login      打印系统登录过程

      --lookup      尝试通过DNS规范化主机名

  -m                相当于who am i

  -p, --process    打印由init产生的活动进程

  -q, --count      显示登入系统的用户名和总人数

  -r, --runlevel    打印当前运行级别

  -s, --short      仅打印name, line, time(默认)

  -t, --time        打印最近的系统时钟修改

  -T, -w, --mesg    将用户的消息状态添加为+,-或?

  -u, --users      列出登录的用户

      --message    和-T相同

      --writable    和-T相同

      --help    帮助

      --version  版本

If FILE is not specified, use /var/run/utmp.  /var/log/wtmp as FILE is common.

If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.

GNU coreutils online help:

For complete documentation, run: info coreutils 'who invocation'

使用:

[root@localhost ~]# who

root    pts/0        2020-06-27 23:51 (222.94.228.56)

root    pts/1        2020-06-27 21:54 (222.94.228.56)

结果解读:

•root:登录的用户是谁

•pts/0:虚拟终端别名

•2020-06-27 23:51 (222.94.228.56):登录时间与远程IP

常见用法:

# 显示当前登录系统的用户

who

# 展示详情,相当于who -b -d --login -p -r -t -T -u

who -a

# 显示自己的信息

who am i

# 打印标题

who -H

# 显示登入系统的用户名和总人数

who -q

whoami

作用:

显示自身用户名称

语法:

Usage: whoami [OPTION]...

Print the user name associated with the current effective user ID.

Same as id -un.

      --help    帮助

      --version  版本

GNU coreutils online help:

For complete documentation, run: info coreutils 'whoami invocation'

使用:

whoami

last

作用:

显示用户最近登录信息

语法:

Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]

常用参数:

•-R:结果省略从哪里登录的一栏

•-num/-n/num:展示前num条

•username:展示指定用户的登录信息

•tty:只显示指定虚拟终端的登录信息

更多参数详见 man last

使用:

[root@localhost ~]# last

root    pts/1        222.94.228.56    Mon Jun 29 22:53  still logged in 

root    pts/0        222.94.228.56    Mon Jun 29 22:47  still logged in 

root    pts/5        222.94.228.56    Sat Jun 27 23:58 - 03:07  (03:08)   

root    pts/0        222.94.228.56    Sat Jun 27 23:51 - 00:56  (01:04)   

root    pts/4        222.94.228.56    Sat Jun 27 23:39 - 00:56  (01:17)

结果解读:

•root:谁登陆的

•pts/1:虚拟终端的别名,可以认为是一个会话的名称

•222.94.228.56:展示登录机器的主机名,表示从哪里登陆的

•Mon Jun 29 22:53 still:登录的起止时间

•logged in:持续了多久

常见用法:

# 只显示2条

last -2

# 展示root用户的登录信息

last username root

# 显示虚拟终端别名为pts/1的登录信息

last tty pts/1

CPU相关

cpuinfo

作用:查看CPU信息

使用:

cat /proc/cpuinfo

结果解读:

# 概念:

1. 物理CPU数:主板上实际插入的cpu数量

2. CPU核心数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等

3. 逻辑CPU数:一般来说:

  逻辑CPU=物理CPU个数×每颗核数      # 不支持超线程技术或未开启此技术

  逻辑CPU=物理CPU个数×每颗核数 *2     # 表示服务器的CPU支持超线程技术(简单来说,它可使处理器中的1 颗内核如2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,提高了系统的整体性能)

# 逻辑处理核心数的编号,从0开始排序

processor      : 0

# CPU厂商

vendor_id      : GenuineIntel

# CPU产品系列代号

cpu family      : 6

# CPU属于其系列中的哪一代的代号

model          : 45

# CPU的型号、主频

model name      : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz

# CPU所属制作更新版本

stepping        : 7

# 微代码

microcode      : 0xffffffff

# CPU当前所使用的主频

cpu MHz        : 1999.994

# 二级缓存大小

cache size      : 15360 KB

# 物理id

physical id    : 0

# 单个物理CPU的逻辑CPU数

siblings        : 8

# 当前物理核在其所处CPU中的编号,这个编号不一定连续

core id        : 0

# CPU核心数

cpu cores      : 8

# 用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续

apicid          : 0

# 初始的apicid

initial apicid  : 0

# 是否具有浮点运算单元(Floating Point Unit)

fpu            : yes

# 是否支持浮点计算异常

fpu_exception  : yes

# 执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容

cpuid level    : 13

# 表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)

wp              : yes

# 当前CPU支持的功能

flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt

# 在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)

bogomips        : 3999.98

# 每次刷新缓存的大小单位

clflush size    : 64

# 缓存地址对齐单位

cache_alignment : 64

# 可访问地址空间位数

address sizes  : 42 bits physical, 48 bits virtual

# 对能源管理的支持

power management:

常见用法:

# 查询系统有几颗物理CPU(结果有几行说明有几个物理CPU)

cat /proc/cpuinfo | grep "physical id" |sort |uniq

# 查询系统每颗物理CPU的核心数

cat /proc/cpuinfo | grep "cpu cores" | uniq

# 每颗物理CPU核心是否启用超线程技术。如果启用此技术那么,每个物理核心又可分为两个逻辑处理器

cat /proc/cpuinfo | grep -e "cpu cores"  -e "siblings" | sort | uniq

# 查询系统具有多少个逻辑CPU

cat /proc/cpuinfo | grep "processor" | wc -l

TIPS

参考:https://www.cnblogs.com/wxxjianchi/p/10522049.html[2]

top

作用:

显示、管理执行中的程序

语法:

Usage:

  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

常用参数:

•d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s

•q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行

•c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来

•s : 安全模式,将交谈式指令取消, 避免潜在的危机

•i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程

•n : 更新的次数,完成后将会退出 top

•b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

使用:

[root@localhost ~]# top

top - 18:57:49 up 48 days, 18:30,  4 users,  load average: 0.02, 0.03, 0.05

Tasks: 288 total,  1 running, 279 sleeping,  8 stopped,  0 zombie

%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :  1009368 total,    74540 free,  519392 used,  415436 buff/cache

KiB Swap:  1048572 total,  570600 free,  477972 used.  249136 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM    TIME+ COMMAND                                                                                                                                         

2737 mongod    20  0 1571560  64216  5156 S  1.0  6.4 534:08.38 mongod                                                                                                                                         

1783 root      20  0  148336  2260  1428 R  0.7  0.2  0:00.10 top                                                                                                                                             

14047 root      20  0      0      0      0 S  0.3  0.0  0:21.71 kworker/6:2                                                                                                                                     

    1 root      20  0  49860  2212  1300 S  0.0  0.2  28:02.47 systemd

结果解读:

•第一行:展示了系统运行的时间、有几个用户,平均负载等信息。这个结果和uptime一样

•第二行:展示了任务的相关信息,包括总共有多少任务、多少任务在任务在运行;多少在睡眠、多少停止了,多少个僵尸状态的任务等

•第三行:CPU状态

•us(user):运行用户进程的CPU时间

•sy(system):运行内核进程的CPU时间

•ni(niced):运行已调整优先级的用户进程的CPU时间

•id(idle):空闲时间

•wa(IO wait):用于等待IO完成的CPU时间

•hi:处理硬件中断的CPU时间

•si:处理软件中断的CPU时间

•st:被hypervisor偷去的CPU时间

•第四行:内存状态,包括全部可用内存、已使用内存、空闲内存、缓冲内存

•第七行开始:各个进程任务的的状态监控

•PID:进程号

•USER:运行这个进程的用户是谁

•PR:展示进程的实时优先级,取值0-99,越大则会持有更多的CPU时间片。

•NI:展示进程的nice值,值越小,优先级越高。意味着越高的优先级

•VIRT:virtual memory usage,进程使用的虚拟内存。VIRT = SWAP + RES

•RES:resident memory usage,常驻内存,驻留内存是进程使用的非交换物理内存。RES = CODE + DATA

•SHR:shared memory,共享内存

•S:进程状态,取值如下:

•D:不可中断的睡眠态。

•R:运行态

•S:睡眠态

•T:被跟踪或已停止

•Z:僵尸态

•CPU:自从上一次更新时到现在任务所使用的CPU时间百分比

•MEM:进程使用的可用物理内存百分比

•TIME:进程使用的总CPU时间,精确到0.01秒

•COMMAND:进程所使用的命令

常见用法:

# 展示完整命令(COMMAND)

top -c

# 设置更新次数(更新2次后就退出)

top -n 2

# 指定更新周期(每隔3秒刷新一次)

top -d 3

# 查看指定进程的信息

top -p 139

# 显示指定进程中线程的运行信息

top -Hp 139

参考文章:https://www.cnblogs.com/fuqu/p/10230385.html[3]

进程相关

ps

作用:

展示程序运行情况

语法:

Usage:

ps [options]

Basic options:

-A, -e              all processes

-a                  all with tty, except session leaders

  a                  all with tty, including other users

-d                  all except session leaders

-N, --deselect      negate selection

  r                  only running processes

  T                  all processes on this terminal

  x                  processes without controlling ttys

Selection by list:

-C         command name

-G, --Group     real group id or name

-g, --group   session or effective group name

-p, p, --pid   process id

        --ppid   parent process id

-q, q, --quick-pid

                      process id (quick mode)

-s, --sid   session id

-t, t, --tty   terminal

-u, U, --user   effective user id or name

-U, --User     real user id or name

  The selection options take as their argument either:

    a comma-separated list e.g. '-u root,nobody' or

    a blank-separated list e.g. '-p 123 4567'

Output formats:

-F                  extra full

-f                  full-format, including command lines

  f, --forest        ascii art process tree

-H                  show process hierarchy

-j                  jobs format

  j                  BSD job control format

-l                  long format

  l                  BSD long format

-M, Z                add security data (for SELinux)

-O           preloaded with default columns

  O           as -O, with BSD personality

-o, o, --format

                      user-defined format

  s                  signal format

  u                  user-oriented format

  v                  virtual memory format

  X                  register format

-y                  do not show flags, show rss vs. addr (used with -l)

    --context        display security context (for SELinux)

    --headers        repeat header lines, one per page

    --no-headers    do not print header at all

    --cols, --columns, --width

                      set screen width

    --rows, --lines

                      set screen height

Show threads:

  H                  as if they were processes

-L                  possibly with LWP and NLWP columns

-m, m                after processes

-T                  possibly with SPID column

Miscellaneous options:

-c                  show scheduling class with -l option

  c                  show true command name

  e                  show the environment after command

  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]

  L                  show format specifiers

  n                  display numeric uid and wchan

  S,    --cumulative  include some dead child process data

-y                  do not show flags, show rss (only with -l)

-V, V, --version    display version information and exit

-w, w                unlimited output width

        --help

                      display help and exit

常用参数:

•-A或e:列出所有的行程

•-w:显示加宽可以显示较多的资讯

•-f:“全格式”展示,返回的字段较多

•a:展示当前运行的所有程序,包括其他用户的程序

•...其他的大家自己看下help吧,没动力翻译了……

示例:

# 全格式展示所有进程

ps -ef

# 显示较详细的信息,比如进程占用的CPU、内存等

ps -au

# 显示所有包含其他使用者的行程

ps -aux

jobs

个人经验,使用较少

作用:

显示Linux中的任务列表及任务状态

•按Ctrl+Z组合键将当前进程挂起(调入后台并停止运行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,我们使用windows系统是有时候在本地计算机搜索东西时,发现他搜索的老慢了甚至电脑都有点卡,我们突然不想让它搜了,就想马上让它停止搜索,就是这种感觉。使用jobs命令,可以查看当前终端在后台的进程任务

•任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号

语法:

jobs [-lnprs] [ jobspec ... ]

jobs -x command [ args ... ]

第一种格式列出活动的任务,选项含义如下:

-l    除常规信息外,还列出进程号

-n    仅显示有关自从上次通知用户状态以来,更改状态的任务信息

-p    只显示任务的进程组leader的进程id

-r    只显示正在运行的任务

-s    只显示已停止的任务

如果指定了jobspec,则只展示jobspec的相关信息

如果指定了-x选项,则job会替换在command或args中找到的所有jobspec与相应的进程组id,并将其传递给command

常见用法:

jobs -l

pgrep

作用:根据特定条件查询进程PID信息

语法:

Usage:

pgrep [options]

Options:

-d, --delimiter   指定分隔符

-l, --list-name          列出PID和进程名称

-a, --list-full          列出PID和完整命令行

-v, --inverse            反向匹配,展示不匹配条件的结果

-w, --lightweight        列出所有TID

-c, --count              展示匹配的进程个数

-f, --full                使用完整进程名进行匹配

-g, --pgroup   展示匹配的进程组id

-G, --group     展示匹配的GID

-n, --newest              展示最近启动的进程

-o, --oldest              展示启动的进程

-P, --parent   只匹配指定PPID的子进程

-s, --session   匹配SID

-t, --terminal   匹配tty

-u, --euid       匹配有效用户id

-U, --uid         匹配真实id

-x, --exact              与命令名称完全匹配

-F, --pidfile       从文件中读取PID

-L, --logpidfile          如果未锁定PID文件则失败

--ns                 匹配和PID属于指定namespace的进程

--nslist         列出指定的namespace的信息。可选那么space:ipc, mnt, net, pid, user, uts

-h, --help    帮助

-V, --version  版本

使用:

# 展示命令行为java的进程的进程号

pgrep java

# 查找命令行为java的进程,并列出完整命令行

pgrep -a java

# 查看root用户运行的所有进程

pgrep -U root

# 组合使用

pgrep -a -U root

内存相关

meminfo

作用:查看内存信息

使用:

cat /proc/meminfo

结果解读:

# 总内存

MemTotal:        1009368 kB

# 空闲内存

MemFree:          77320 kB

# 可用内存

MemAvailable:    268716 kB

# Buffer使用的大小

Buffers:              0 kB

# Cache使用的大小

Cached:          329420 kB

# 被高速缓冲存储用的交换空间大小

SwapCached:        18440 kB

# 活跃中的高速缓冲存储器页面文件大小

Active:          493144 kB

# 不活跃的高速缓冲存储器页面文件大小

Inactive:        268208 kB

Active(anon):    245240 kB

Inactive(anon):  237316 kB

Active(file):    247904 kB

Inactive(file):    30892 kB

Unevictable:          0 kB

Mlocked:              0 kB

# 交换区总大小

SwapTotal:      1048572 kB

# 空闲交换区大小

SwapFree:        570568 kB

# 等待被写回到磁盘的大小

Dirty:                52 kB

# 正在被写回的大小

Writeback:            0 kB

# 未映射的页的大小

AnonPages:        421380 kB

# 设备和文件映射的大小

Mapped:            27068 kB

Shmem:            50624 kB

# 内核数据结构缓存的大小,可减少申请和释放内存带来的消耗

Slab:              99168 kB

# 可收回slab的大小

SReclaimable:      50444 kB

# 不可收回的slab的大小

SUnreclaim:        48724 kB

KernelStack:        6992 kB

# 管理内存分页的索引表的大小

PageTables:        7496 kB

# 已经发给NFS服务器,但尚未被确认(committed)写入到稳定存储的页表

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:    1553256 kB

Committed_AS:    1597364 kB

# 虚拟内存大小

VmallocTotal:  34359738367 kB

# 已使用的虚拟内存大小

VmallocUsed:      53608 kB

# 在vmalloc区域中可用的最大的连续内存块的大小

VmallocChunk:  34359681024 kB

HardwareCorrupted:    0 kB

AnonHugePages:    229376 kB

# 大页面的分配

HugePages_Total:      0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:      2048 kB

DirectMap4k:      63424 kB

DirectMap2M:      985088 kB

TIPS

•在Linux文档中有更加详细的描述,详见:https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst[4]

•Buffer与Cache:

•Linux Page cache和Block I/O layer[5]

•Linux内存Cache和Buffer理解[6]

free

作用:查看内存运行情况

语法:

Usage:

free [options]

Options:

-b, --bytes        以Byte为单位显示内存使用情况

-k, --kilo          以KB为单位显示内存使用情况

-m, --mega          以MB为单位显示内存使用情况

-g, --giga          以GB为单位显示内存使用情况

    --tera          以TB为单位显示内存使用情况

-h, --human        自动以合适的单位显示内存使用情况

    --si            以1000为底而非1024

-l, --lohi          展示最低/最高内存的统计信息

-t, --total        显示内存总和(RAM + swap)

-s N, --seconds N  每隔N秒刷新

-c N, --count N    打印N次后退出

-w, --wide          宽屏模式打印,将buff和cache分开显示

    --help    帮助

-V, --version  展示版本

For more details see free(1).

示例:

[root@localhost ~]# free

              total        used        free      shared  buff/cache  available

Mem:        1009368      519640      77092      50732      412636      250392

Swap:      1048572      477968      570604

结果解读:

•total:物理内存总量

•used:已使用的内存,used = total - free - buffers - cache

•free:空闲的内存数

•shared:多个进程共享的内存

•buff/cache:代表的是 buff(对应/proc/meminfo里的Buffers)和cache的内存(对应/proc/meminfo 里的Cached and Slab)。

•available:在CentOS 7中,available是真正可用内存。available包括了buff/cache中一些可以被释放的内存,当物理内存不够用的时候,内核会把非活跃的数据清空。

•Mem:

TIPS

不同版本的CentOS,free结果不同。可参考:https://www.cnblogs.com/operationhome/p/10362776.html[7]

vmstat

作用:全称Virtual Meomory Statistics(虚拟内存统计),可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视

语法:

Usage:

vmstat [options] [delay [count]]

Options:

-a, --active          展示active/inactive的内存

-f, --forks            显示此系统启动以来的forks的总数,包括fork、vfork和clone system calls

-m, --slabs            展示slabinfo信息

-n, --one-header      只展示1次header,而非周期展示

-s, --stats            显示各种事件计数器和内存统计(只显示1次)

-d, --disk            展示磁盘信息

-D, --disk-sum        显示磁盘统计数据

-p, --partition   展示分区详情

-S, --unit       控制输出的单位,k(1000字节) K(1024字节) 或 M(1048576字节),默认为K

-w, --wide            宽屏输出模式

-t, --timestamp        打印时间戳

-h, --help    帮助

-V, --version  版本

For more details see vmstat(8).

使用:

[root@localhost ~]# vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r  b  swpd  free  buff  cache  si  so    bi    bo  in  cs us sy id wa st

1  0 478632  93272      0 390596    0    0    0    1    0    0  0  0 100  0  0

结果解读:

•procs

•r:可运行的进程数(runnable processes),包括了running的进程和等待运行的进程(running or waiting for run time)。如果此值过大,则意味着CPU非常繁忙。如果此参数长期 >= 逻辑CPU个数,则表示CPU可能存在瓶颈,考虑增加CPU

•处在非终端睡眠(uninterruptible sleep)状态的进程数。此值表示被阻塞的进程数。主要是指被资源阻塞的进程对列数(比如IO资源、页面调度等)

•memory

•swpd:已使用的虚拟内存大小

•free:空闲内存大小

•buff:用做buffer的内存大小

•cache:用来做cache的内存大小

•inact:inactive的内存总量(-a)

•active:active的内存总量(-a)

•swap

•si:每秒从磁盘交换到内存的大小,单位:KB/秒

•so:每秒从内存交换到磁盘的大小,单位:KB/秒

•当内存够用时,这两个值都是0。如果这两个值长期大于0,则会影响系统性能,磁盘IO和CPU资源都会被消耗。当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,是不正确的。不能光看这一点,还要结合si和so。如果free很少,但是si和so也很少(大多时候是0),可以不用担心。此时,系统性能不会受到影响的。

•io

•bi:每秒从块存储设备接收到的块数

•bo:每秒发送到块存储设备的块数

•随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大

•system

•in:每秒中断数,包括时钟中断

•cs:每秒上下文切换数

•这两个值越小越好

•cpu

•us:用户CPU时间(非内核进程占用时间)百分比

•sy:系统使用的CPU时间百分比

•id:空闲CPU时间百分比

•wa:等待IO的CPU时间百分比

•st:被虚拟机偷去的CPU时间百分比

常见用法:

# 每隔一秒展示一次

vmstat 1

vmstat -a

磁盘相关

df

作用:

展示磁盘使用情况

语法:

Usage: df [OPTION]... [FILE]...

Mandatory arguments to long options are mandatory for short options too.

  -a, --all            包含具有0Blocks的文件系统

  -B, --block-size=SIZE  指定打印单位,可用单位:K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印

      --direct          显示文件的统计信息而不是挂载点

      --total          在末尾产生一个汇总行

  -h, --human-readable  自动以合适的单位显示磁盘使用情况

  -H, --si              以1000为底而非1024

  -i, --inodes          列出inode的信息,而非block的使用信息

  -k                    相当于--block-size=1K

  -l, --local          将列表限制为本地文件系统

      --no-sync        在获取使用情况信息之前不调用同步(默认)

      --output[=FIELD_LIST]  使用FIELD_LIST定义的打印格式,如果省略FIELD_LIST则打印所有字段。FIELD_LIST是一个以逗号分隔的字段列表,可选的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file','target'     

  -P, --portability    使用POSIX输出格式

      --sync            在获取使用情况信息之前调用同步

  -t, --type=TYPE      将列表限制为TYPE类型的文件系统。

  -T, --print-type      在结果中,多出来一个Type列,其中打印文件系统类型

  -x, --exclude-type=TYPE  将列表限制为非TYPE类型的文件系统

  -v                    (忽略)

      --help    帮助

      --version  显示版本

使用:

df

结果解读:

•Filesystem:文件系统的名称

•1K-blocks:占用多少个1K-block,相当于展示占用了多少Kb的磁盘

•Used:使用了多少磁盘

•Avail:可用磁盘

•Use:使用的百分比

•Mounted on:挂载点

常见用法:

# 自动以合适的单位显示磁盘使用情况

df -h

# 查看gc.log这个文件所属的文件系统信息

df gc.log

# 指定输出格式

df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target

拓展阅读:

Linux 深入理解inode/block/superblock[8]

du

作用:

显示目录或文件的大小

语法:

Usage: du [OPTION]... [FILE]...

  or:  du [OPTION]... --files0-from=F

Mandatory arguments to long options are mandatory for short options too.

  -0, --null            以0字节而不是换行符结束每条输出(即:直接输出下一行,不换行)

  -a, --all            显示所有文件大小,不限于目录

      --apparent-size  打印“apparent size”,而非磁盘占用情况

  -B, --block-size=SIZE  指定打印单位,可用单位:K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印

  -b, --bytes          相当于'--apparent-size --block-size = 1'

  -c, --total          在末尾产生一个汇总行

  -D, --dereference-args  取消引用命令行上列出的符号链接

  -d, --max-depth=N    指定要展示的最大深度,--max-depth=0相当于--summarize

      --files0-from=F  总结文件F中指定的NUL终止文件名的磁盘使用情况;如果F为-,则从标准输入中读取名称

  -H                    等价于--dereference-args (-D)

  -h, --human-readable  自动以合适的单位显示磁盘使用情况

      --inodes          列出inode的信息,而非block的使用信息

  -k                    相当于--block-size=1K

  -L, --dereference    取消引用所有符号链接

  -l, --count-links    如果是硬链接,则计数很多次

  -m                    相当于--block-size=1M

  -P, --no-dereference  不遵循任何符号链接(这是默认设置)

  -S, --separate-dirs  不统计子目录的大小

      --si              类似于-h,但以1000为底而非1024

  -s, --summarize      只展示每个参数的统计信息

  -t, --threshold=SIZE  如果SIZE为正,则排除小于SIZE的条目;如果为负,则排除大于SIZE的条目

      --time            展示文件的修改时间

      --time=WORD      在time字段展示WORD字段而非修改时间,WORD取值:atime, access, use, ctime or status

      --time-style=STYLE  指定时间的显示格式,取值:full-iso, long-iso, iso, 或+FORMAT,FORMAT的解释类似于“date”

  -X, --exclude-from=FILE  排除匹配FILE中的正则的文件

      --exclude=PATTERN    排除匹配正则的文件

  -x, --one-file-system    跳过不同文件系统上的目录

      --help    帮助

      --version  版本

常见用法:

# 当前目录及子目录的大小,以及大小汇总

du

# 展示1.txt文件的大小

du 1.txt

# 自动以合适的单位显示目录的大小

du -h some_dir

# 排除 < 1000m的文件,展示当前目录及子目录的大小,以及大小汇总

du -t 1000m

# 以合适的单位展示指定目录的大小

du -sh some_dir

网络相关

netstat

作用:展示网络状态

语法:

usage: netstat [-vWeenNcCF] [] -r        netstat {-V|--version|-h|--help}

      netstat [-vWnNcaeol] [ ...]

      netstat { [-vWeenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route              展示路由表

        -I, --interfaces= 展示网卡Iface的信息

        -i, --interfaces        展示网卡信息列表

        -g, --groups            显示多播组的成员信息

        -s, --statistics        展示网卡网络统计信息

        -M, --masquerade        显示伪装的网络连接(masqueraded connections)

        -v, --verbose            展示更多详情信息

        -W, --wide              不截断IP地址

        -n, --numeric            不解析名称

        --numeric-hosts          不解析主机名

        --numeric-ports          不解析端口

        --numeric-users          不解析

        -N, --symbolic          解析硬件名称

        -e, --extend            展示更多信息

        -p, --programs          为socket展示PID或程序名称

        -o, --timers            在结果中显示Timer列

        -c, --continuous        持续列出结果

        -l, --listening          展示监听的服务器socket

        -a, --all                展示所有的socket(默认connected,指定-a则会展示监听/为监听的socket)

        -F, --fib                展示转发信息库(Forwarding Information Base)(default)

        -C, --cache              展示路由缓存而非FIB

        -Z, --context            为socket展示SELinux安全上下文

  ={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}

          {-x|--unix} --ax25 --ipx --netrom

  =Use '-6|-4' or '-A ' or '--'; default: inet

  List of possible address families (which support routing):

    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)

    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)

    x25 (CCITT X.25)

使用:

netstat

结果解读:

使用不同参数,展示的结果不用,详情大家看下 man netstat里面的结果吧

常见用法:

# 查看全部的socket

netstat -a

# 查看使用tcp协议的网络信息

netstat -t

# 查看使用udp协议的网络信息

netstat -u

# 展示所有所有状态的tcp监听,并打印程序名称

netstat -antp

route

作用:显示和操作路由表

语法:

Usage: route [-nNvee] [-FC] []          列出内核路由表

      route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.

      route {-h|--help} []              修改AF的路由表

      route {-V|--version}                  展示版本

        -v, --verbose            展示更多详情信息

        -n, --numeric            不解析名称

        -e, --extend            展示更多信息

        -F, --fib                展示转发信息库(Forwarding Information Base)(default)

        -C, --cache              展示路由缓存而非FIB

  =Use -4, -6, '-A ' or '--'; default: inet

  List of possible address families (which support routing):

    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)

    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)

    x25 (CCITT X.25)

使用:详见 https://blog.csdn.net/u011857683/article/details/83795435[9] 里面有非常详细的描述

lsof

作用:列出当前系统当前打开的文件

语法:

usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]

[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]

[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]

Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.

  -?|-h list help          -a AND selections (OR)    -b avoid kernel blocks

  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files

  -d s  select by FD set  +D D  dir D tree *SLOW?*  +|-e s  exempt s *RISKY*

  -i select IPv[46] files  -K list tasKs (threads)    -l list UID numbers

  -n no host names        -N select NFS files        -o list file offset

  -O no overhead *RISKY*  -P no port names          -R list paRent PID

  -s list file size        -t terse listing          -T disable TCP/TPI info

  -U select Unix socket    -v list version info      -V verbose search

  +|-w  Warnings (+)      -X skip TCP&UDP* files    -Z Z  context [Z]

  -- end option scan   

  +f|-f  +filesystem or -file names    +|-f[gG] flaGs

  -F [f] select fields; -F? for help 

  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)

                                        +m [m] use|create mount supplement

  +|-M  portMap registration (-)      -o o  o 0t offset digits (8)

  -p s  exclude(^)|select PIDs        -S [t] t second stat timeout (15)

  -T qs TCP/TPI Q,St (s) info

  -g [s] exclude(^)|select and print process group IDs

  -i i  select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]

  +|-r [t[m]] repeat every t seconds (15);  + until no files, - forever.

      An optional suffix to t is m; m must separate t from and

      is an strftime(3) format for the marker line.

  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).

  -u s  exclude(^)|select login|UID set s

  -x [fl] cross over +d|+D File systems or symbolic Links

  names  select named files or files on named file systems

Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

常见用法:

# 列出所有打开的文件

lsof

# 查看哪些进程正在使用1.txt

lsof 1.txt

# 递归查看test_dir目录及其文件的信息

lsof +D test_dir

# 查看java进程打开的文件

lsof -c mysql

# 查看java或mysql打开的文件

lsof -c java -c mysql

# 列出所有的网络连接

lsof -i

# 列出所有tcp连接

lsof -i tcp

# 列出所有udp连接

lsof -i udp

# 列出谁在使用8080端口

lsof -i:8080

# 列出谁在用tcp协议使用8080端口

lsof -i tcp:8080

你可能感兴趣的:(Linux命令)