工程师工具包-Linux常用命令及常用操作-持续更新中

Linux系统命令相关

系统相关

date
  • date 查看系统时间
$date
2017年 09月 18日 星期一 18:01:06 CST
  • date -R查看系统时间,并且在时间后面加上时区的显示
$date -R
Mon, 18 Sep 2017 17:57:30 +0800

磁盘操作相关

du

命令格式:
du [选项] [文件]
常用选项:
-h -以K,M,G为单位,提高信息的可读性
-L -把软链接的源文件大小也列出来。
常用命令:
du -h . //显示当前目录下所有文件及目录的大小,并以G,M等人类可理解的方式显示

网络相关

nslookup

nslookup是查询dns域名和ip解析的命令
nslookup github.com //查询github.com域名对应的ip
nslookup 202.xx.xx.xx //查询 202.xx.xx.xxIP对应域名

ifconfig
ping
netstat
ls

ls -l : 以详细列表的方式展示
ls -R : -R 分目录展示
ls -lt : -t表示用文件和目录的更改时间排序.
ls -ltr : 表示用文件和目录的更改时间倒序排序.
ls -lS : 表示用文件和目录的大小排序,注意是大写的S
ls -lSr : 表示用文件和目录的大小倒序排序
ls -lh : 显示文件大小时,以M,G等更人性化的单位显示。-h这个参数很有用
ls -lk:显示文件大小时,以K为单位显示。

-r表示是倒序排序

ps
  • 查看系统中java线程
    ps -ef|grep java
top

top
top查看对应pid的信息

  • 第一行:top - 01:00:01 up 1064 days, 4:29, 2 users, load average: 0.25, 0.39, 0.47
    • 01:00:01为当前系统时间
    • 1064 days 表示当前已经运行1064天。
    • 2 users表示当前有两个用户在线。
    • load average: 0.25, 0.39, 0.47 表示当过去的1分、5分钟、15分钟的系统负载。

其中load的理解,load average表示系统处理的任务队列数。
对于一个cpu核心的,load值大于0表示超负荷运行。
如果对于4核心,则

  • 第二行: Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie
    显示当前系统的进程运行情况,目前总共有114个进程,其中1个正在运行,113个处于sleep状态。
  • 第三行: Cpu(s): 1.8%us, 1.8%sy, 0.2%ni, 68.7%id, 27.4%wa, 0.0%hi, 0.0%si, 0.0%st显示的是cpu的信息。
    • id 为空闲时间时间占比
    • us 是指 用户空间占用 cpu 的时间百分比
    • sy 是指 系统空间占用 cpu 时间的百分比
    • st 这个项只有主机是虚拟机的时候,才会存在,全称为 steel ,意味着虚拟机从宿主机获取cpu时间片的耗时百分比,如果这个值过多,则需要查看宿主机的是否过多的分配虚拟机,引起资源不足.

在top命令界面里,按数字“1”,将显示每个cpu的信息,也可以看到现在系统有几颗cpu.

  • 第四和第五行为内存信息
Mem:   3921732k total,  3483860k used,   437872k free,   102556k buffers
Swap:        0k total,        0k used,        0k free,  1808492k cached

第一行 Mem 显示的是机器的真实内存数
第二行 Swap 显示的是交换内存数

Mem中,total 显示的是内存的总量, 这里的单位是大K , 也就约是 4g 左右内存总数,used 表示已使用内存数,free 是空闲内存数,buffer 是 buffer 内存数,chache 为 cache 的内存数。
Swap 中, total ,used ,free 三个参数的表示内存交换空间中的总量,已使用内存与空闲内存。

接下来一个个来整理下, total 内存总数, used+free = total ,前三个很好理解,无论是真实内存还是交换空间内存都一样,我们重点来看下 buffers 和 cache 这块的内存占用如何说明。

used 的内存占了将近 3.3g ,并不意味着机器内存全部被耗完,windows 下用多少申请多少内存,但 linux 下则不然,内存总是不嫌多的,linux 会将读取过的数据都缓存起来,以便下次读取时减少读取的时间。即使你的程序运行结束后,内存也不会自动释放。这就会导致你在 linux 系统中程序频繁读写文件后,你会发现可用物理内存变少。

而 cache 与 buffer 就属于linux系统的缓存内存,这部分的缓存内存在其他程序真实需要使用内存的时候,则会释放。所以程序真实使用的内存数应该是 used - buffer - cache ,就上图而言,应该(粗暴的以g计算)是 3.48g - 0.1g - 1.8g 大约是 2.58g 左右。

  • 最后一部分,列出系统中的所有进程
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 9813 root      20   0  989m  17m 2140 S  2.3  0.5   7927:13 /opt/xxxx
 1640 admin     20   0 3665m 1.0g  26m S  1.3 27.6   2:41.70 /opt/xx/java/bin/java
15159 admin     20   0 21204 1328 1000 R  0.7  0.0   0:00.03 top
15284 root      31  11  178m  20m  752 S  0.7  0.5   0:00.04 /usr/bin/xx

PID 是进程的 进程号
USER 是启动进程的用户

pr 和 ni 都是与进程优先级相关的

ni 我们在之前已经讲过了,全称是 nice ,pr 的全称是 Priority

一个进程的整体运行优先级是 pr 值与 ni 值 相加
优先级 = ni + pr ,pr 默认值是20(默认权重因子) ,ni 的范围是-20至19,默认是 0

nice 的值可以按照命令或进程进行修改,使用 nice,renice 修改

优先级数值越小,优先级越高

VIRT 表示 Virtual Memory 虚拟内存
RES 表示 Resident Memory 驻留内存
SHR 表示 shared memory 共享内存

free -m

free -m查看内存信息

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3829       3633        195          0         78       2085
-/+ buffers/cache:       1470       2359
Swap:            0          0          0

第一行 Mem 显示的是机器的真实内存数。

Mem中,total 显示的是内存的总量, 这里的单位是大M , 也就约是 4g 左右内存总数,used 表示已使用内存数,free 是空闲内存数,buffer 是 buffer 内存数,chache 为 cache 的内存数。

接下来一个个来整理下, total 内存总数, used+free = total ,前三个很好理解,无论是真实内存还是交换空间内存都一样,我们重点来看下 buffers 和 cache 这块的内存占用如何说明。

used 的内存占了将近 3.3g ,并不意味着机器内存全部被耗完,windows 下用多少申请多少内存,但 linux 下则不然,内存总是不嫌多的,linux 会将读取过的数据都缓存起来,以便下次读取时减少读取的时间。即使你的程序运行结束后,内存也不会自动释放。这就会导致你在 linux 系统中程序频繁读写文件后,你会发现可用物理内存变少。

而 cache 与 buffer 就属于linux系统的缓存内存,这部分的缓存内存在其他程序真实需要使用内存的时候,则会释放。所以程序真实使用的内存数应该是 used - buffer - cache ,就上图而言,应该(粗暴的以g计算)是 3.633g - 0.078g - 2.8g

上图中的第二行,第一列表示 used - cache - buffer ,第二列表示 free + cache + buffer

history

history查看用户的历史执行命令。
也可以通过less ~/.bash_history命令查看。

who/w

whow可以查看当前系统在线的用户。

$ who
admin    pts/1        2017-10-16 19:27 (30.20.80.139)
admin    pts/2        2017-10-16 19:32 (30.55.80.67)
$ w
 01:07:18 up 1064 days,  4:36,  2 users,  load average: 0.33, 0.44, 0.47
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
admin    pts/1    30.20.80.139     19:27    1:42m  0.04s  0.04s -bash
admin    pts/2    30.55.80.67      19:32    0.00s  0.12s  0.00s w
less

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.
less命令使用格式:
less [参数] 文件
示例:
less -i -N systemx.log
常用参数:
-i 忽略搜索时的大小写
-N 显示每行的行号
常用命令
/ 字符串:向下搜索"字符串"的功能
? 字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
G:向下移动到最后一行
g:向上移动到第一行
b:往上(往后)翻一页
space(空格):往下(往前)翻一页
q:退出

tail

tail -f *.log //动态显示当前目录下所有以.log结尾的文件的内容

grep

grep全称是Global Regular Expression Print。grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.
使用格式:grep [options] ‘pattern’ filename
例:
grep -in 'searchtext' filex.log --col or grep -in --color=auto 'searchtext' filex.log //不区分大小写查询,输出行号,并且把结果高亮。
grep -c -i 'searchtext' * // 统计seachtext字符串在当前目录文件中分别出现多少行
grep -in --col searchtext * //不区分大小查询当前目录下所有的文件中出现searchtext出现的文件名、行号及所在行,并且高亮匹配的字符串。
grep -li -r searchtext *//不区分大小写的查询当前目录(子目录)的文件中包含searchtext的文件名
grep -B 5 --col searchtext * //查询匹配的后5行(最新的)。
grep -A 5 --col searchtext * //查询匹配的前5行(最老的)。

  • [options]主要参数:
    -c:只输出匹配行的计数。
    -i:不区分大 小写(只适用于单字符)。
    -h:查询多文件时不显示文件名。
    -l:查询多文件时只输出包含匹配字符的文件名。
    -n:显示匹配行及 行号。
    -s:不显示不存在或无匹配文本的错误信息。
    -v:显示不包含匹配文本的所有行。
sudo
find

find是文件查询命令。
最常用的格式:
find path -option
常用option:
-mtime n:根据文件内容最后修改时间查询,n表示以天的维度区间查询;
-mmin n:根据文件内容最后修改时间查询,n表示以分钟的维度区间查询;
-name pattern:按文件名匹配查询;
find . -size [+|-]n[G|M..]:按文件大小查询,n的单位可选,常用可选值为GorMor k
find . -type [d|f]:按文件类型查询,参数常用可选值为dorf,d表示目标,f表示文件。

示例
find . -name 'my*' //查询当前目录下name是以my开头的所有文件。
find . -size +512k //查找当前目录下文件大小大于512k的文件
find . -size -512k //查找当前目录下文件大小小于512k的文件
find . -mmin -5 // 查找在当前目录下距离当前时间,5分钟内修改过的文件
find . -mtime -1 // 查询距离当前时间在24小时内里修改过的文件
find . -mtime +1 // 查询距离当前时间在24小时之前修改过的文件
find . -type f // 查询当前目录下的文件,不包括目录。

注1:
一般find和-exec一起使用
find . -mtime -1 -exec ls -l {} \;
find . -mtime -1 -exec grep -i xxx {} \;

注2:
1.mtime,ctime,atime区别:1)atime的意思是access file time; 2)ctime表示是change file time,ctime是指修改文件状态的时间,比如权限、分组等等,并不是修改文件内容;3)mtime表示修改文件内容的时间;
2.-mtime n、-mtime +n、-mtime -n的异别:1)-mtime:是针对文件内容修改时间进行查询,n,+n,-n三者查询时间区间完全不同; 2)-mtime n查询区间为,距离现在时间差在(n+1)*24hour ~ n*24hour 这个时间区间; 3) -mtime +n表示的查询区间是-∞ ~ n*24hour,即距离当前时间n24hour这个时间点之前的时间区间; 4)-mtime -n表示的查询区间是n*24hour ~ ∞,即距离当前时间n24hour这个时间点之后的时间区间
3.对于-mmin n,-mmin +n,-mmin -n的使用与-mtime n、-mtime +n、-mtime -n一样,区别是mmin搜索的时间维度是分钟。

stat

stat filename查看文件的相关信息。包括修改文件状态时间,最后一次进入时间,修改内容时间

exec

exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。
自己通常的用法是和find grep命令一起使用。
比如有这么一个场景,在/home/logs目录有很多日志文件,现在要查询一个错误日志,日志发生在昨天,但是具体不清楚在哪个文件里。
如果此时使用grep 'errorcodex' *在当前目录下查询所有文件的话将会很慢。
此时可使用如下命令
find . -mtime -1 -exec grep 'errorcodex' {}\;//此命令的作用是先用find查询出最近1天修改的文件,然后用exec调用grep命令在find查询出来的文件列表里查询(而不是查询全部的文件)。
注意:
1.这里的-exec后面的{} \; "空格" + “一对括号”+ \ + '空格'+ ;
2.花括号前面一定要有一个空格
3.最后一定要以分号结尾

你可能感兴趣的:(工程师工具包-Linux常用命令及常用操作-持续更新中)