架构&设计&技术大数据技术IT面试

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

2017-09-20  本文已影响15人  现代愚公BevisWu

Linux系统命令相关

系统相关

date
$date
2017年 09月 18日 星期一 18:01:06 CST
$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
top

top
top查看对应pid的信息

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

在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行(最老的)。

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.最后一定要以分号结尾

上一篇 下一篇

猜你喜欢

热点阅读