linux 入门系列 5-- 新手必会的 linux 命令
上一篇文章“linux入门系列4--vi/vim编辑器”我们讨论了在linux下如何快速高效对文本文件进行编辑和管理,本文将进一步学习必须掌握的linux命令,掌握这些命令才能让计算机更懂你。
就我们前文已经装好的centos操作系统而言,我们操作通常有2种方式:第一种就是通过桌面图形化操作;另外一种则是通过终端输入命令。
针对服务器而言我们通常是采用远程连接工具连接到服务器,然后以命令的方式进行管理。我们输入命令后计算机怎么就知道该做什么呢?那就得靠命令行工具(也称终端)进行翻译解释,然后调用相应的接口服务完成特定的功能。
用户与linux系统的交互是通过shell终端,下文讲先分析shell命令行工具,再讲解最基础的linux命令。
一、shell简介
计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux 系统的内核负责完成对硬件资源的分配、调度等管理任务。因此,系统内核对计算机的正常运行至关重要,一般不建议直接去编辑内核中的参数,而是让用户通过基于系统调用接口开发出的程序或服务来管理计算机,以满足日常工作的需要。而shell就是这样一个客户端命令行工具,充当用户与系统内核沟通的桥梁。
Shell也称“终端”、“壳”,是一种用c语言写的命令行工具, 充当人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。
1.1 shell版本
以下列举几种shell版本
sh(Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用 。在shell编程方面做的很优秀,但是在处理与用户的交互方面做得不如其他几种shell。
*bash*(Bourne Again Shell):Linux默认,是Bourne Shell的扩展。完全兼容Bourne Shell,并在他基础上增加了很多特性如命令补全、命令历史等。它还包含了很多C Shell和Korn Shell中的优点,有灵活和强大的编辑接口,同时有很友好的用户界面。
csh(C Shell):一种比Bourne Shell更适合的变种Shell,语法与C语言很相似。
Tcsh:Linux提供的C Shell的一个扩展版本。 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数 。
ksh(Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
pdksh: Linux 系统提供的 ksh 的扩展。 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
现在包括红帽系统在内的许多主流 Linux 系统默认使用的终端是 *Bash*(Bourne-Again SHell)解释器 。 主流 Linux 系统选择 Bash 解释器作为命令行终端主要有以下 4 项优势 :
通过上下方向键来调取过往执行过的 Linux 命令;
>
命令或参数仅需输入前几位就可以用 Tab 键补全;
>
具有强大的批处理脚本;
>
具有实用的环境变量功能。
我们装好的centos7默认也是采用的bash终端,当采用远程连接工具连接到centos7,默认开启的终端就是bash,可以通过在终端中输入命令:echo $SHELL 进行查看,得到的结果为:/bin/bash。
如何判断当前终端的类型?
通过"echo $SHELL" 命令或通过"evn"终端命令
如何更改登录的终端类型?
通过终端命令chsh,如:chsh -s /bin/bash将登录终端改为bash
1.2 shell命令类型
shell是一个程序,用于用户和操作系统进行交互,相当于是一个命令解析器。
作为用户和内核交互的接口,既是一种命令语言又是一种程序设计语言。shell命令又分为内置命令和外部命令。
内置命令
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常*在linux系统加载运行时shell就被加载并驻留在系统内存中*。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等 。
外部命令
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,*在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的*。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等
如何区分是内部命令还是外部命令?
通过type命令,如:type cd 可以看到是内部命令;type mkdir可以看到是外部命令。
通过man命令,如:man cd,会提示是bash的内置命令;man ls,会提示是外部命令。
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
二、最常用命令
既然 Linux 系统中已经有了 Bash 这么好用的“翻译官”,那么接下来就有必要好好学习怎么跟它沟通了。要想准确、高效地完成各种任务,仅依赖于命令本身是不够的,还应该根 据实际情况来灵活调整各种命令的参数 。
linux执行命令一般格式:*命令名称 [命令参数] [命令对象]*
命令名称、命令参数、命令对象之间用空格键分隔。命令对象一般是指要处理的文件、目录、用户等资源 ,命令参数则可以用长格式(--)或短格式(-)。
长格式:man --help
>
短格式:man -h
linux命令很多,最重要的是各种参数的搭配使用,新手记住所有参数是不可能的,需要经常通过帮助命令进行查阅。
>特别说明:在终端中,有时候显示的内容很多,可以通过快捷键进行翻看。
>
>shift PgUp:向上翻页
>
>shift PgDn:向下翻页
2.1 帮助命令
帮助命令主要有2个:man、help。平时要多于帮助命令,遇到不清楚的命令就用帮助命令查看,无须死记硬背,熟能生巧。
2.1.1 man命令
语法:man [命令或配置文件]
作用:获取帮助信息
案例:
~~~
[root@heimatengyun ~]# man date
~~~
比如欲查看date命令的用法,输入命令man date之后出现下图信息
由于帮助信息比较多,需要翻页才能看完,因此先说明一下本界面可能需要用到按键及用途。
>
| 按键 | 用途 |
| ------------------ | :----------------------------- |
| 空格键 | 向下翻页 |
| PgDn (page down) | 向下翻页 |
| PgUp (page up) | 向上翻页 |
| home | 前往首页 |
| end | 前往页尾 |
| / | 从上至下搜索关键字,如“/linux” |
| ? | 从下至上搜索关键字,如“?linux” |
| n | 定位到下一个搜索到的关键词 |
| N | 定位到上一个搜索到的关键词 |
| q | 退出帮助文档 |
初学者一看,这么多的帮助信息反而感到困惑了,其实很简单的,我们来理一下帮助信息的结构(上图中圈红线的部分)。
| 结构名称 | 说明 |
| ----------- | -------------------------------------- |
| NAME | 命令的名称 |
| SYNOPSIS | 命令的基本语法格式 |
| DESCRIPTION | 详细说明语法格式对应的选项和参数的用法 |
| EXAMPLES | 如何使用命令的示例 |
| OVERVIEW | 概述 |
| DEFAULTS | 默认功能 |
| OPTIONS | 具体的可用选项 |
| ENVIRONMENT | 环境变量 |
| SEE ALSO | 相关的资料,通常是手册页 |
通过这些帮助信息,就可以轻松的掌握各个命令的用法。
2.1.2 help命令
语法:help 命令
作用:获取shell内置命令的帮助信息
案例:
~~~
[root@heimatengyun ~]# help cd
~~~
在正式进入命令学习之前,再介绍几个*linux常用的快捷键*
| 快捷键 | 作用 |
| :----- | -------------------------------------- |
| ctrl l | 清屏 |
| ctrl q | 退出 |
| ctrl c | 停止进程 |
| 上下键 | 查找曾今执行过的命令 |
| tab | 命令补全,多用不仅提高效率还能防止敲错 |
既然linux一切皆文件,了解万能的帮助命令后,我们就从目录文件命令开始学习。
2.2 目录相关命令
目录可以对文件进行分类管理,因此在讲解文件命令之前先讲解目录相关命令。
2.2.1 pwd
语法:pwd
功能描述:显示当前工作目录的绝对路径
案例:
~~~
[root@heimatengyun ~]# pwd
/root
~~~
2.2.2 ls
语法:ls [选项] [目录或文件]
功能描述:列出目录下的文件
选项:
-a(--all):显示全部文件,包括隐藏文件(以.开头的文件)
-d:directory,列出目录本身
-l:long长数据串列出,包含文件的属性和权限等。每行列出的信息依次为:*文件类型与权限、链接数、文件属性、文件属组、文件大小(byte)、创建或最近修改时间、名字*
案例:
~~~
[root@heimatengyun test]# ls -al
total 12
drwxr-xr-x. 2 root root 37 Nov 24 10:43 .
dr-xr-x---. 16 root root 4096 Nov 24 00:02 ..
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
~~~
2.2.3 cd
语法:cd [选项][目录名称]
功能描述:切换到指定目录
案例:
cd 绝对路径或相对路径 (跳转到指定目录)
cd 或cd ~ (返回当前用户家目录)
cd - (返回上一次所在的目录)
cd .. (返回当前目录的上一级目录)
2.2.4 mkdir
语法:mkdir [选项] 目录名称
功能描述:创建指定目录
选项:
-p :parents,创建多层目录
案例:
[root@heimatengyun ~]# mkdir test
[root@heimatengyun ~]# mkdir -p test1/test1
2.2.5 rmdir
语法: rmdir [选项] 目录名称
功能描述:删除空目录
选项:
-p:删除多级目录
案例:
[root@heimatengyun ~]# rmdir test
[root@heimatengyun ~]# rmdir -p test1/test1/ (如果不指定-p参数,则只删除最后一级不为空的目录)
2.2.6 cp
语法:cp 源目录或文件 目标目录或文件
功能描述:复制目录或文件
选项:
-r:recursive,递归复制整个文件夹
案例:
将test复制为test.txt,复制时重命名
~~~
[root@heimatengyun ~]# cp test test.txt
~~~
将所有test目录内容复制到test1目录(自动创建test1目录)
~~~
[root@heimatengyun ~]# cp -r test test1
~~~
2.2.7 mv
语法:mv [选项] 源 目标
功能描述:移动文件或重命名文件
案例:
将test文件重命名为test.txt
~~~
[root@heimatengyun test]# mv test test.txt
~~~
将test目录及其里边所有内容移动到test2目录,自动创建test2目录(可以理解为将test文件夹重命名为test2)
~~~
[root@heimatengyun ~]# mv test/ test2
~~~
2.2.8 rm
语法:rm [选项] 文件
功能描述:删除文件及目录
选项:
-f:force强制执行
-r:recursive递归执行
案例:
递归删除目录及其下所有内容
~~~
[root@heimatengyun ~]# rm -rf test2/
~~~
2.3 文件相关命令
linux一切皆文件,在连接目录相关命令后,本节学习文件相关命令。
2.3.1 touch
语法:touch [选项] 文件名
功能描述:创建空文件
案例:
~~~
[root@heimatengyun test]# touch test.txt
~~~
echo
语法:echo 字符串或变量
功能描述:输出字符串或变量值,还可以搭配从定向符将内容存储到文件
案例:
~~~
[root@heimatengyun test]# echo hello
hello
[root@heimatengyun test]# echo $SHELL
/bin/bash
[root@heimatengyun test]# echo linux >> test.txt
~~~
2.3.2 cat
语法:cat [选项] 文件名
功能描述:查看文件内容,从第一行开始显示
选项:
-A:列出特殊字符而非空白
-b:列出行号,空白行不算行号
-n:列出行号,空白行也会有行号
-v:列出一些看不出来的特殊字符
案例:
~~~
[root@heimatengyun test]# cat test.txt
hello
who are you
where are you from
[root@heimatengyun test]# cat -A test.txt
hello$
who are you$
$
where are you from$
[root@heimatengyun test]# cat -b test.txt
1 hello
2 who are you
3 where are you from
[root@heimatengyun test]# cat -n test.txt
1 hello
2 who are you
3
4 where are you from
~~~
2.3.3 more
语法:more [选项] 文件
功能描述:查看文件内容,一页一页的显示
使用说明:
空格键(space):向下翻一页
enter:向下翻一行
q:退出more,不在显示文件内容
ctrl f:向下滚动一屏
ctrl b:返回上一屏
=:输出当前行的行号
:f:输出文件名和当前行号
2.3.4 head
语法:head [选项] 文件
功能描述:查看文件内容,只看头几行
选项:
-n:查看头n行
案例:
[root@heimatengyun test]# head -n 2 test.txt
2.3.5 tail
语法:tail [选项] 文件
功能描述:查看文件内容,只查看文件末尾几行
选项:
-n:末尾几行
-f:follow输出文件修改的内容,用于追踪文件修改
案例:
[root@heimatengyun test]# tail -n 2 test.txt
2.3.6 wc
语法:wc [选项] 文本
功能描述:统计指定文本的行数、字数、字节数
选项:
-l:lines显示行数
-w:显示单词数
-c:显示字节数
案例:
~~~
[root@heimatengyun test]# cat test.txt
hello
who are you
where are you form?
wellcome
hahah
test
[root@heimatengyun test]# wc -l test.txt
8 test.txt
[root@heimatengyun test]# wc -c test.txt
60 test.txt
[root@heimatengyun test]# wc -w test.txt
11 test.txt
~~~
2.3.7 stat
语法:stat [选项] 文件
功能描述:查看文件的具体存储信息和时间等信息
案例:
~~~
[root@heimatengyun test]# stat test.txt
File: ‘test.txt’
Size: 60 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 2160373 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfinedu:objectr:adminhomet:s0
Access: 2019-11-23 18:27:02.153101936 0800
Modify: 2019-11-23 18:26:56.254259870 0800
Change: 2019-11-23 18:26:56.254259870 0800
Birth: -
~~~
2.3.8 cut
语法:cut [选项] 文件
功能描述:按列提取文本字符
选项:
-d:delimiter分隔符
-f:fields要提取的列
案例:
查询系统所有用户名
~~~
[root@heimatengyun test]# cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
...省略部分内容
~~~
2.3.9 diff
语法:diff [选项] 文件1,文件2
功能描述:比较多个文本的差异
选项:
--brief: 显示比较文件是否相同
-c:context标记显示不同的内容
2.3.10 dd
语法:dd [参数或选项]
功能描述:按照指定大小或个数的数据库来复制文件或转换文件
参数:
if:输入的文件名称
of:输出的文件名称
count:设置要复制的块的个数
bs:bytes文件块大小
案例:
创建指定大小为10M的文件
~~~
[root@heimatengyun test]# dd if=/dev/zero of=10_file count=1 bs=10M
1 0 records in
1 0 records out
10485760 bytes (10 MB) copied, 0.0102506 s, 1.0 GB/s
[root@heimatengyun test]# ll
total 10248
-rw-r--r--. 1 root root 10485760 Nov 23 21:05 10_file
~~~
2.3.11 file
语法:file 文件名
功能描述:查看文件类型
案例:
~~~
[root@heimatengyun test]# file test.txt
test.txt: ASCII text
~~~
2.3.12 wget
语法:wget [参数] [url地址]
功能:下载网络文件
参数:
-b:background后台下载
-P:directory-prefix下载到指定目录
-t:tries 最大尝试次数
-c:continue断点续传
-p:page-requisites下载页面所有内容,包括图片、视频等
-r:recursive递归下载
案例:
下载百度logo图片
~~~
[root@heimatengyun test]# wget https://www.baidu.com/img/bd_logo1.png
--2019-11-23 22:29:45-- https://www.baidu.com/img/bd_logo1.png
Resolving www.baidu.com (www.baidu.com)... 14.215.177.38, 14.215.177.39
Connecting to www.baidu.com (www.baidu.com)|14.215.177.38|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7877 (7.7K) [image/png]
Saving to: ‘bd_logo1.png’
100%[======================>] 7,877 --.-K/s in 0.002s
2019-11-23 22:29:45 (4.43 MB/s) - ‘bd_logo1.png’ saved [7877/7877]
~~~
2.4 查找命令
有时候需要从大量文件中找出需要的文件或者从指定文件中查找特定内容,这就需要用到查找相关的命令。
2.4.1 find
语法:find [搜索范围] [匹配条件]
功能描述:查找文件或目录
参数说明
-name:按文件名称查找
-user:按文件拥有者查找
-size:根按文件大小查找文件( n大于,-n小于,n等于)
案例
在test目录下查找test1.txt文件
~~~
[root@heimatengyun ~]# find test/ -name test1.txt
test/test1.txt
~~~
查找test目录下查找用户root的文件
~~~
[root@heimatengyun ~]# find test/ -user root
test/
test/test.txt
~~~
在test目录下查找小于100M的文件
~~~
[root@heimatengyun ~]# find test/ -size -102400
test/
test/test.txt
~~~
2.4.2 grep
语法:grep [参数] 查找内容 源文件
功能描述:在文件内搜索字符串匹配的行并输出
参数:
-c:count只输出匹配行的计数
-n:line-number显示匹配行及行号
案例:
~~~
[root@heimatengyun test]# grep -n who test.txt
3:who are you
[root@heimatengyun test]# grep -c who test.txt
1
~~~
2.4.3 which
语法:which [选项] 命令
功能描述:搜索命令所在目录及别名信息
案例:
搜索cd命令所在的目录
~~~
[root@heimatengyun test]# which cd
/usr/bin/cd
~~~
2.5 压缩解压
为了便于传输或节省存储空间有时候文件是以压缩包的形式存在,因此就需要了解压缩与解压相关命令。
2.5.1 tar
语法:tar [参数] 包名.tar.gz 待打包的内容
功能描述:打包目录,压缩后的文件格式为.tar.gz
参数:
-c:create生成.tar打包文件
-x:extract解包.tar文件
-v:verbose显示详细信息
-f:file指定压缩后的文件名
-z:打包同时压缩
-C:解压到指定目录
案例:
压缩多个文件,将test.txt和test1.txt压缩为test.tar.gz
~~~
[root@heimatengyun test]# tar -zcvf test.tar.gz test.txt test1.txt
test.txt
test1.txt
[root@heimatengyun test]# ll
total 10252
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 210 Nov 23 23:57 test.tar.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
~~~
压缩目录
~~~
[root@heimatengyun ~]# tar -zcvf test.tar.gz test/
~~~
解压到当前目录
~~~
[root@heimatengyun test]# tar -zxvf test.tar.gz
~~~
2.5.2 zip和unzip
语法:
压缩:zip [参数] 包名.zip 待压缩内容
解压:uzip 包名.zip
功能描述:压缩文件和目录,windows和linux通用且可以压缩目录并保留源文件
参数:
-r:recurse-paths递归压缩目录
案例:
压缩test.txt或test1.txt为test.zip
~~~
[root@heimatengyun test]# zip test.zip test.txt test1.txt
adding: test.txt (deflated 15%)
adding: test1.txt (stored 0%)
~~~
解压test.zip
~~~~
[root@heimatengyun test]# unzip test.zip
Archive: test.zip
inflating: test.txt
extracting: test1.txt
~~~~
2.5.3 gzip和gunzip
语法:
压缩:gzip [参数] 文件
解压:gzip [参数] 文件.gz
功能描述:
压缩:压缩文件,只能将文件压缩为\.gz文件。只能压缩文件不能压缩目录,压缩解压后不保留原来的文件。对单个文件压缩*
解压:解压文件
案例:
压缩文件
~~~
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gzip test1.txt
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
~~~
解压文件
~~~
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 54 Nov 23 20:40 test1.txt.gz
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
[root@heimatengyun test]# gunzip test1.txt.gz
[root@heimatengyun test]# ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
~~~
2.6 日期命令
日期相关命令用于设置或获取系统日期。
2.6.1 date
语法:date [选项] [格式]
功能描述:显示或设置时间
参数:
-s:set 以字符串格式设置时间
格式:*(注意区分大小写)*
%Y:显示当前年份
%m:显示当前月份
%d:显示当前是哪一天
%H:显示当前小时
%M:显示当前分钟
%S:显示当前秒数
%Y%m%d:显示当前年月日
" %Y-%m-%d %H:%M:%S":显示当前年月日时分秒 (用引号括起来)
案例:
设置时间
~~~
[root@heimatengyun test]# date -s "2019-11-24 11:05:10"
Sun Nov 24 11:05:10 CST 2019
~~~
显示时间
~~~
[root@heimatengyun test]# date
Sun Nov 24 11:02:21 CST 2019
[root@heimatengyun test]# date %Y%m%d
20191124
[root@heimatengyun test]# date " %Y-%m-%d %H:%M:%S"
2019-11-24 11:02:55
~~~
date查看非当前时间(比如前一天,后一天、取下周周一等等)以及cal查看日历命令暂时不做讨论,以后有机会在讨论。
2.7 进程线程命令
任务都以进程或线程的形式存在,因此需要随时关注系统的进程,查看是否有异常进程以及各进程占用系统资源的情况并使用不同的进程管理命令对进程管理和控制。
2.7.1 ps
语法:ps [选项]
功能描述:查看系统中所有进程
参数:
-a:all 显示现行终端机下的所有程序,包括其他用户的程序(比如多克隆几个会话执行不同命令,也会列出来)
-u:userlist 以用户为主的格式来显示程序状况
-x: 显示所有程序,不以终端机来区分 (前面讲过终端有很多类型,不仅显示当前终端)
案例:
~~~
[root@heimatengyun test]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2966 0.0 0.1 116340 3192 pts/0 Ss Nov22 0:03 -bash
...省略部分内容
~~~
每一项内容的解释
| 项 | 含义 |
| ------- | ------------------------------------------------------------ |
| USER | 进程是由哪个用户产生的 |
| PID | 进程ID |
| %CPU | 该进程占用CPU的百分比,占用越高,进程越耗费资源 |
| %MEM | 该进程占用内存的百分比,占用越高,进程越耗费资源 |
| VSZ | 占用虚拟内存的大小,单位KB |
| RSS | 占用实际物理内存的大小,单位KB |
| TTY | 表示该进程在哪个终端中运行,tty1-tty7代表本地控制台终端(tty1-tty6是本地的字符界面终端,tty7是图形终端),pts/0-255代表虚拟终端 |
| STAT | 进程状态,常用状态有:R(运行)、S(睡眠)、T(停止状态)、s(包含子进程)、 (位于后台) |
| START | 进程启动时间 |
| TIME | 进程执行时间,即占用cpu的运算时间,不是系统时间 |
| COMMAND | 产生此进程的命令名 |
2.7.2 top
语法:top [选项]
功能描述:查看系统健康状态
参数:
-d 秒数:Delay-time,指定top命令每隔几秒更新,默认是3秒。
-i:Idle-process,使top命令不显示任何闲置或者僵死进程
-p:Monitor-PIDs ,通过指定监控进程ID来仅仅监控某个进程的状态
-s:Secure-mode,使top在安全模式运行,去除交互命令所带来的潜在危险
案例:
查看非僵死进程,一秒钟刷新一次
~~~
[root@heimatengyun test]# top -i -d 1
top - 12:39:19 up 1 day, 14:31, 3 users, load average: 0.04, 0.04, 0.05
Tasks: 395 total, 1 running, 391 sleeping, 3 stopped, 0 zombie
%Cpu(s): 0.0 us, 1.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1870784 total, 720520 used, 1150264 free, 880 buffers
KiB Swap: 2097148 total, 0 used, 2097148 free. 238616 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND
29987 root 20 0 123936 1868 1160 R 2.0 0.1 0:08.32 top
...省略部分内容
~~~
在此界面可以通过如下相应按键进行排序操作
| 操作键 | 说明 |
| :------ | :------------------------ |
| shift n | 以PID排序 |
| shift m | 以内存排序 |
| shift p | 以cpu使用率排序,默认选项 |
| q | 退出top |
命令结果解释
第一行:任务队列信息
| 内容 | 说明 |
| :----------------------------- | :----------------------------------------------------------- |
| 12:20:42 | 当前系统时间 |
| up 1 day, 14:12 | 系统运行时间 |
| 3 users | 当前登录用户数 |
| load average: 0.08,0.01, 0.05 | 系统在之前1分钟、5分钟、15分钟的平均负载,一般认为小于1时,负载较小,如果大于1说明系统已经超出负载 |
第二行:进程信息
| 内容 | 说明 |
| :--------------- | :---------------------------------------- |
| Tasks: 395 total | 系统中的总进程数 |
| 1 running | 正在运行的进程数 |
| 391 sleeping | 睡眠的进程 |
| 3 stopped | 正在停止的进程 |
| 0 zombie | 僵尸进程,如果不是0,需要手工检查僵尸进程 |
第三行:cpu信息
| 内容 | 说明 |
| ---------------- | :----------------------------------------------------------- |
| %Cpu(s): 0.0 us | 用户模式占用的cpu百分比 |
| 1.0 sy | 系统模式占用的cpu百分比 |
| 0.0 ni | 改变过优先级的用户进程占用的cpu百分比 |
| 99.0 id | 空闲cpu的百分比 |
| 0.0 wa | 等待输入、输出的进程占用cpu的百分比 |
| 0.0 hi | 硬中断请求服务占用的cpu百分比 |
| 0.0 si | 软中断请求服务占用的cpu百分比 |
| 0.0 st | steal time虚拟世界百分比,当有虚拟机时,虚拟cpu等待时机cpu的时间百分比 |
ps:如果服务器有多个cpu,将显示多行
第四行:物理内存信息
| 内容 | 说明 |
| ------------------------ | :--------------------- |
| KiB Mem: 1870784 total | 物理内存的总量,单位KB |
| 720520 used | 已使用的物理内存数量 |
| 1150264 free | 空闲的物理内存数量 |
| 880 buffers | 作为缓冲的内存数量 |
第五行:交换分区信息
| 内存 | 说明 |
| ------------------------ | ---------------------------- |
| KiB Swap: 2097148 total | 交换分区(虚拟内存)的总大小 |
| 0 used | 已经使用的交换分区的大小 |
| 2097148 free | 空闲交换分区的大小 |
| 238616 cached Mem | 作为缓存的交换分区的大小 |
第六行:空行
第七行:表头信息
| 内容 | 说明 |
| ------- | ------------------------------------------------------------ |
| PID | 进程id |
| USER | 进程所有者 |
| PR | 进程优先级 |
| NI | 负值表示高优先级,正值表示低优先级 |
| 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 | 进程名称(命令名/命令行) |
2.7.3 pidof
语法:pidof [参数] 服务名称
功能描述:查询某个指定服务进程的pid值
案例:
查看sshd服务的进程id
~~~
[root@heimatengyun test]# pidof sshd
2962 2247
~~~
2.7.4 pstree
语法:pstree [选项]
功能描述:查看进程树
选项:
-p:显示进程的PID
案例:
~~~
[root@heimatengyun test]# pstree -p
systemd(1)─┬─ModemManager(948)─┬─{ModemManager}(1004)
│ └─{ModemManager}(1031)
├─NetworkManager(1123)─┬─{NetworkManager}(1284)
│ └─{NetworkManager}(1312)
...省略部分内容
~~~
2.7.5 kill
语法:kill [选项] 进程id
功能描述:终止某个指定pid的服务进程
选项:
-9:强迫进程立即停止
案例:
~~~
[root@heimatengyun test]# kill -9 20385
~~~
2.7.6 killall
语法:killall [选项] 服务名
功能描述:终止某个指定名称的服务对应的所有进程
案例:
终止httpd服务的所有进程
~~~
[root@heimatengyun test]# killall httpd
~~~
2.8 系统状态检测命令
通过相关命令检查系统状态以及资源耗用情况,保证系统健康稳定运行。
2.8.1 ifconfig
语法:ifconfig [网络设备] [参数]
功能描述:获取网卡配置和网络状态信息
案例:
~~~
[root@heimatengyun test]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.78.100 netmask 255.255.255.0 broadcast 192.168.78.255
inet6 fe80::20c:29ff:febc:5eef prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bc:5e:ef txqueuelen 1000 (Ethernet)
RX packets 143336 bytes 103106029 (98.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 92576 bytes 143399144 (136.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
~~~
主要查看内容:网卡名称(eno16777736 )、ip地址(inet之后)物理网卡地址即mac地址(ether)、TX和TX接收和发送数据包的个数和累计流量
2.8.2 netstat
语法:netstat [参数]
功能描述:显示整个系统目前网络情况,比如目前的链接、数据包传递数据、路由表内容等
案例:
~~~
[root@heimatengyun test]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 96 192.168.78.100:ssh 192.168.78.1:59688 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 13149 /run/systemd/shutdownd
...省略部分内容
~~~
2.8.3 uname
语法:uname [选项]
功能描述:查看系统内核和系统版本等信息
参数:
-a:all显示系统完整信息
-s:kernel-name系统内核名称
-n:nodename节点名称
-r:kernel-release内核发行版
-v:kernel-version内核版本
-m:machine硬件名称
-i:hardware-platform硬件平台
-p:processor处理器类型
-o:operating-system操作系统名称
案例:
~~~
[root@heimatengyun test]# uname
Linux
[root@heimatengyun test]# uname -a
Linux heimatengyun 3.10.0-123.el7.x8664 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x8664 x8664 x8664 GNU/Linux
~~~
显示信息依次为:内核名称(Linux)、主机名(heimatengyun)、内核发行版(3.10.0-123.el7.x8664)、内核版本(#1 SMP Mon Jun 30 12:09:22 UTC 2014)、硬件名称(x8664)、硬件平台(x8664)、处理器类型(x8664)及操作系统名称(GNU/Linux)。
如果要查看单签系统版本的详细信息,通过查看/etc/redhat-release文件
~~~
[root@heimatengyun test]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
~~~
2.8.4 uptime
语法:uptime [选项]
功能描述:查看系统的负载信息,可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指系统在最近1分钟、5分钟、15分钟内的压力情况,负载值越低越好,尽量不要长期超过1,生产环境不要超过5.
案例:
~~~
[root@heimatengyun test]# uptime
21:30:44 up 1 day, 23:23, 3 users, load average: 0.00, 0.01, 0.05
~~~
2.8.5 free
语法:free [选项]
功能描述:显示当前系统中内存的使用信息
选项:
-m:megabytes以兆字节显示
-h:human带单位输出
案例:
~~~
[root@heimatengyun test]# free -h
total used free shared buffers cached
Mem: 1.8G 702M 1.1G 8.9M 880K 233M
-/ buffers/cache: 468M 1.3G
Swap: 2.0G 0B 2.0G
~~~
字段说明:total(内存总量)、used(已用量)、free(可用量)、shared(进程共享的内存量)、buffers(磁盘缓存的内存量)、cached(缓存的内存量)
2.8.5 who
语法:who [参数]
功能描述:查看当前登入主机的用户终端信息
案例:
~~~
[root@heimatengyun test]# who
root pts/0 2019-11-22 22:10 (192.168.78.1)
root pts/1 2019-11-23 11:53 (192.168.78.1)
~~~
2.8.6 last
语法:last [参数]
功能描述:查看所有的系统登录记录。但是要注意,这些信息是以日志文件保存的,因此黑客可以很容易进行修改,所以不能单纯以该命令来判断是否有黑客入侵。
案例:
~~~
[root@heimatengyun test]# last
root pts/2 192.168.78.1 Sun Nov 24 13:09 - 13:36 (00:26)
root pts/1 192.168.78.1 Sat Nov 23 11:53 still logged in
... 省略部分内容
~~~
2.8.7 history
语法:history [参数]
功能描述:显示历史执行过的命令
选项:
-c:清除所有历史记录,但是.bash_history文件内容不会删除
案例:
~~~
[root@heimatengyun test]# history
1 history
2 ll
3 ls
4 history
[root@heimatengyun test]# !2
ll
total 8
-rw-r--r--. 1 root root 26 Nov 23 20:40 test1.txt
-rw-r--r--. 1 root root 66 Nov 23 21:56 test.txt
~~~
可以用“!编号”执行某一次曾经执行过的命令
>
默认可以查看1000条历史记录,但可以在/etc/profile中修改HISTSIZE的值
>
历史命令保存在一个农户家目录的.bash_history文件中(.开头为隐藏文件通过ls或ll -a列出),可以用cat命令查看
2.9关机命令
linux一般用在服务器上,很少遇到关机的情况,毕竟关机服务就会中断,除非特殊情况不得已才会关闭。
正确的关机流程:sync>shutdown或reboot或halt
*无论重启还是关机,都需要先sync将内存数据同步到硬盘中,避免数据丢失*
2.9.1 reboot
语法:reboot [ 选项]
功能描述:重启系统,等同于shutdown -r now
案例:
~~~
[root@heimatengyun ~]# reboot
~~~
2.9.2 poweroff
语法:poweroff [选项]
功能描述:关闭系统
案例:
~~~
[root@heimatengyun ~]# poweroff
~~~
2.9.3 halt
语法:halt [选项]
功能描述:关闭系统,等同于shutdown -h now和poweroff
案例:
~~~
[root@heimatengyun ~]# halt
~~~
2.9.4 shutdown
语法:shutdown [选项] [关机时间] [提示内容]
功能描述:关机
选项:
-h:关机
-r:重启
关机时间:
hh:mm:指定24小时制的小时和分钟后关机
m:m分钟后关机( 1:默认值,1分钟后关机; 0:now,立刻关机)
案例:
1分钟后关机并提示所有已登录系统的用户
~~~
[root@heimatengyun ~]# shutdown -h 1 "this server will shutdown after 1min"
this server will shutdown after 1min
The system is going down for power-off at Sun 2019-11-24 22:25:55 CST!
~~~
用户及文件相关权限命令将在以后的文章中讲解,还有很多其他的命令,由于篇幅所限不在此讨论。下一篇文章文章将分享“linux入门系列6--软件包管理之rpm和yum仓库”。
自学帮
版权声明: 本文为 InfoQ 作者【黑马腾云】的原创文章。
原文链接:【http://xie.infoq.cn/article/a87a02a228b8d95a74c5d6c0a】。未经作者许可,禁止转载。
评论