Linux基本命令(下)

---
typora-copy-images-to: ./media

---

# Linux基本命令(下)

# 一、磁盘内存相关命令

## 1、df命令

命令:df

作用:查看磁盘的空间(disk  free)

语法:# df   [-h]

选项:-h表示可读性较高的形式展示大小

![image-20181228154738660](https://s2.51cto.com/images/100/blog/error_t.png)

![image-20181228154822711](https://s2.51cto.com/images/100/blog/error_t.png)

这几列依次是:==Filesystem=>磁盘名称、Size=>总大小、Used=>被使用的大小、Avail=>剩余大小、Use%=>使用百分比、Mounted on=>挂载路径(相当于Windows 的磁盘符)==

## 2、free命令

命令:free

作用:查看内存使用情况

语法:#free  -m 

选项:-m 表示以mb为单位查看(1g = 1024mb,1mb = 1024kb)

![image-20181228155501071](https://s2.51cto.com/images/100/blog/error_t.png)

如上图所示,系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内存有如下几个加减法:

☆ **used=total-free** 即 **total=used+free**

☆ 实际内存占用:**used-buffers-cached** 即 **total-free-buffers-cached**

☆ 实际可用内存:**buffers+cached+free**

​```powershell
第1行Mem数据:
total 内存总数: 979
used 已经使用的内存数: 539
free 空闲的内存数: 440
shared 共享内存数: 4
buffers Buffer Cache块设备缓存区内存数: 34
cached Page Cache文件缓存内存数: 182

第2行-/+ buffers/cache:
-buffers/cache 的内存数:323 (等于第1行的 used - buffers - cached)
+buffers/cache 的内存数: 656 (等于第1行的 free + buffers + cached)
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第3行数据是Swap交换分区,也就是我们通常所说的虚拟内存。可以在内存不够使用的情况下当临时内存来使用,交换分区并不是越大越好,一般话它就等同于实际内存的大小。
​```

# 二、与文件内容相关命令

## 1、head命令

命令:head

作用:查看一个文件的前n 行,如果不指定n,则默认显示前10 行。

语法:#head  -n  文件路径 【n 表示数字】

==示例代码:显示install.log 文件的前3行==

![image-20181228172225539](https://s2.51cto.com/images/100/blog/error_t.png)

==示例代码:显示install.log 文件的前10行,使用head命令不指定的行数(默认10 行)==

![image-20181228172324506](https://s2.51cto.com/images/100/blog/error_t.png)

## 2、tail命令

命令:tail

作用:查看一个文件的末n 行,如果n 不指定默认显示后10 行

语法:# tail   -n   文件路径 【n 表示数字】

==示例代码:显示install.log 文件的最后5行==

![image-20181228172929022](https://s2.51cto.com/images/100/blog/error_t.png)

==示例代码:显示install.log文件的最后10行==

![image-20181228173243478](https://s2.51cto.com/images/100/blog/error_t.png)

==tail命令扩展==

语法:# tail  -f  文件路径

作用:查看一个文件动态变化的内容【变化的内容不能是用户手动增加的,必须要求是计算机帮我们写入的内容】

说明:tail   -f命令一般用于查看系统的日志

![image-20181228175141022](https://s2.51cto.com/images/100/blog/error_t.png)

> 退出tail -f 卡屏状态可以按下ctrl+c 键,在命令行中c 不再表示copy,而表示cancel(取消)

## 3、less与more命令

### ① less命令(推荐)

命令:less

作用:查看文件,按下辅助功能键(==数字+回车、空格键(向下翻页)、上下方向键==)查看更多

语法:# less  需要查看的文件路径

==流程:不是加载整个文件,而是一点一点进行加载,相对而言,读取大文件时,效率比较高。==

示例代码:使用less命令查看/root/install.log的文件内容

![image-20181228182523723](https://s2.51cto.com/images/100/blog/error_t.png)

> 在退出的只需要按下q 键(quit)即可(此时ctrl+c 不好使)

扩展:less命令我们还可以进行关键词检索功能

​```powershell
/关键字,搜索成功后,文档中的所有关键字都会高亮。
n : next,向下切换关键字
N : shift + n,向上切换关键字
​```

### ② more命令

命令:more

作用:查看文件,按下辅助功能键(空格、字母键b等价于back)查看更多

语法:#more  需要查看的文件路径

==流程:more在读取文件时,默认已经加载文件的全部内容。==

![image-20181228183111811](https://s2.51cto.com/images/100/blog/error_t.png)

> 在退出的只需要按下q 键(quit)即可(此时ctrl+c 不好使)

## 4、wc命令

命令:wc,wc = word count

作用:用于统计文件内容信息(包含行数、单词数、字节数)

语法:# wc   -lwc   需要统计的文件路径

==-l:表示lines,行数(以回车/换行符为标准)==

![image-20181231132704552](https://s2.51cto.com/images/100/blog/error_t.png)

==-w:表示words,单词数 依照空格来判断单词数量==

![image-20181231132754316](https://s2.51cto.com/images/100/blog/error_t.png)

==-c:表示bytes,   字节数(空格,回车,换行)==

![image-20181231132821898](https://s2.51cto.com/images/100/blog/error_t.png)

> 特别注意:wc命令选项可以混在一起搭配使用,但选项的顺序不影响输出结果,第一个是行数,第二个是单词数,第三个数字节数。

![image-20181231133031175](https://s2.51cto.com/images/100/blog/error_t.png)

## 5、du命令

命令:du

作用:查看文件或目录(会递归显示子目录)占用磁盘空间大小

语法:# du  [-sh]

选项:-s :summaries,只显示汇总的大小,统计文件夹的大小

​	        -h:表示以高可读性的形式进行显示,如果不写-h,默认以KB的形式显示文件大小

==示例代码:统计/root/install.log文件大小==

![image-20190102110137270](https://s2.51cto.com/images/100/blog/error_t.png)

==示例代码:统计/etc目录大小==

![image-20190102110214914](https://s2.51cto.com/images/100/blog/error_t.png)

## 6、find命令

命令:find

作用:用于查找文档(其选项有55 个之多)

语法:# find  路径范围  选项1  选项1的值 [选项2  选项2 的值…]

选项:

-name:按照文档名称进行搜索(支持模糊搜索)

> \* : 通配符,匹配任意个任意字符

-type:按照文档的类型进行搜索

文档类型:`"-"` 表示文件(在使用find 的时候需要用f 来替换),`"d"`表示文件夹

==示例代码:使用find 来搜索httpd.conf 文件==

![image-20190102111526667](https://s2.51cto.com/images/100/blog/error_t.png)

==示例代码:搜索/etc 目录下所有的conf 后缀文件(*.conf),*表示通配符==

![image-20190102111728495](https://s2.51cto.com/images/100/blog/error_t.png)

> 注:如果使用了*,建议给整个文件名加上引号,谨记!!!

> \* :通配符不仅可以用于搜索,还可以用于删除

==示例代码:使用find 来搜索/etc/ppp目录下所有的文件夹==

![image-20190102112509797](https://s2.51cto.com/images/100/blog/error_t.png)

# 三、日期时间命令

## 1、date命令(重点)

### ① 获取时间

命令:date

作用:表示获取系统时间

==语法1:# date 输出的形式:2018 年 3 月 24 日 星期六 15:54:28 CST==

==语法2:# date "+%F" (等价于# date "+%Y-%m-%d" ) 输出形式:2018-03-24==

==语法3:# date "+%F %T" 引号表示让 "年月日与时分秒" 成为一个不可分割的整体==

> 等价操作# date "+%Y-%m-%d %H:%M:%S",输出的形式:2018-03-24 16:01:00

==语法4:获取之前或者之后的某个时间(备份)==

\# date  -d  "-1 day"  "+%Y-%m-%d %H:%M:%S"

符号的可选值:+(之后) 或者 - (之前)

单位的可选值:day(天)、month(月份)、year(年)

| 序号 | 格式符 | 说明                             |
| ---- | ------ | -------------------------------- |
| 1    | %F     | 表示完整的年月日,形如2018-12-31 |
| 2    | %T     | 表示完整的时分秒,形如08:00:00   |
| 3    | %Y     | (year)表示四位年份             |
| 4    | %m     | (month)表示两位月份(带前导0) |
| 5    | %d     | (day)表示日期(带前导0)       |
| 6    | %H     | (hour)表示小时(带前导0)      |
| 7    | %M     | (minute)表示分钟(带前导0)    |
| 8    | %S     | (second)表示秒数(带前导0)    |

示例代码:输出当前系统时间,时间格式:"日/月/年 时:分:秒"

![image-20181231134432061](https://s2.51cto.com/images/100/blog/error_t.png)

![image-20181231144402466](https://s2.51cto.com/images/100/blog/error_t.png)

示例代码:获取7 天之前的时间,格式为年-月-日 时:分:秒

![image-20181231145358476](https://s2.51cto.com/images/100/blog/error_t.png)

![image-20181231151000920](https://s2.51cto.com/images/100/blog/error_t.png)

### ② 设置时间

命令:date

作用:表示设置系统时间

选项:-s, --set=STRING,设置系统时间

![image-20181231154106211](https://s2.51cto.com/images/100/blog/error_t.png)

## 2、hwclock命令

### ① 获取时间

命令:hwclock

作用:表示获取计算机硬件RTC时间

![image-20181231155411799](https://s2.51cto.com/images/100/blog/error_t.png)

### ② 设置时间

命令:hwclock

作用:设置计算机硬件RTC时间

选项1:-w,将Linux系统时间保存到硬件RTC中

![image-20181231160623246](https://s2.51cto.com/images/100/blog/error_t.png)

选项2:-s,将RTC中的时间保存到Linux系统时间中

![image-20181231160502724](https://s2.51cto.com/images/100/blog/error_t.png)

## 3、cal命令(了解)

命令:cal

作用:操作系统日历

==语法1:# cal 等价于 #cal -1 直接输出当前月份的日历==

![image-20181231151810984](https://s2.51cto.com/images/100/blog/error_t.png)

==语法2:# cal -3 表示输出上一个月+本月+下个月的日历==

![image-20181231151716395](https://s2.51cto.com/images/100/blog/error_t.png)

==语法3:# cal -y 年份数字 表示输出某一个年份的日历(1-9999)==

![image-20181231151512093](https://s2.51cto.com/images/100/blog/error_t.png)

## 4、扩展:bash中的引号

==☆ 双引号""   :  会把引号的内容当成整体来看待,允许通过$符号引用其他变量值==

![image-20181231161031772](https://s2.51cto.com/images/100/blog/error_t.png)

==☆ 单引号''    :  会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符==

![image-20181231161127227](https://s2.51cto.com/images/100/blog/error_t.png)

![image-20181231161204733](https://s2.51cto.com/images/100/blog/error_t.png)

==☆ 反撇号`` :  反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用==

![image-20181231163048517](https://s2.51cto.com/images/100/blog/error_t.png)

# 四、管道命令(重点)

## 1、管道符

管道符:`|`

作用:管道是一种通信机制,通常用于进程间的通信。它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。

![1553758589435](https://s2.51cto.com/images/100/blog/error_t.png)

## 2、过滤功能

​```powershell
# ls / | grep “y”
grep 指令用于“过滤”
grep 语法:grep 选项 文件路径/内容

针对上面这个命令说明:
① 以管道作为分界线,前面的命令有个输出,后面需要先输入(缺少查找范围),然后再过滤,最后再输出,通俗的讲就是管道前面的输出就是后面指令的输入。
为了便于理解,上述的指令变相实现可以如下:
# ls / > xxx.txt 将ls /的结果保存到xxx.txt文件中
# grep “y” xxx.txt 使用grep指令搜索xxx.txt中的包含y的行

② grep 指令:主要用于过滤
语法:# grep [选项] “搜索关键词” 搜索范围
​```

示例代码:获取/根目录下包含关键字"y"的文件信息

![image-20181231171559577](https://s2.51cto.com/images/100/blog/error_t.png)

示例代码:搜索/root/install.log文件中包含mysql关键词的行信息

![image-20181231171713098](https://s2.51cto.com/images/100/blog/error_t.png)

## 3、特殊功能

通过管道的操作方法来实现less 的等价效果(了解)

例如:源指令是"less xxx.txt"使用管道的话则可以写成:cat xxx.txt | less

之前可以通过less命令查看一个文件,可以# less  路径

现在通过管道还可以:#cat 路径 | less

示例代码:

![image-20181231172142270](https://s2.51cto.com/images/100/blog/error_t.png)

## 4、扩展处理

问题:请使用学过的命令,来统计某个目录下的文档的总个数?

示例代码:使用Linux命令统计“/”下的文档的个数

![image-20181231174012071](https://s2.51cto.com/images/100/blog/error_t.png)

示例代码:用户在计算机中有一个配置文件(/etc/passwd),一般情况下,一个用户会占用一行配置,请你使用现学的管道统计当前计算机中一共有多少个用户个信息

![image-20181231174148619](https://s2.51cto.com/images/100/blog/error_t.png)

## 5、xargs命令扩展

问题:为什么需要xargs命令?

答:之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令。

首先来看一个命令:

​```powershell
find /etc -name "*.conf" | ls -l (错误)
find /etc -name "*.conf" | xargs ls -l (正确)
​```

![image-20190115151257465](https://s2.51cto.com/images/100/blog/error_t.png)

xargs特别说明:

​```powershell
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
​```

示例代码:多行输入单行输出

![image-20190115151439038](https://s2.51cto.com/images/100/blog/error_t.png)

示例代码:-n 选项多行输出

![image-20190115151550811](https://s2.51cto.com/images/100/blog/error_t.png)

# 五、Linux高级命令

## 1、hostname命令

命令:hostname

作用:操作服务器的主机名(读取、设置)

语法1:# hostname,获取主机名.完整域名

语法2:# hostname   -f   全限定域名(FQDN)

> web01.itcast.cn
>
> web02.itcast.cn

![image-20181231174640858](https://s2.51cto.com/images/100/blog/error_t.png)

语法3:# hostname FQDN全限定域名,临时设置主机名称

 ![1553826648613](https://s2.51cto.com/images/100/blog/error_t.png)

## 2、id命令

命令:id

作用:查看一个用户的一些基本信息(包含用户id,用户组id,附加组id…),该指令如果不指定用户则默认当前用户。

语法1:# id  `默认显示当前执行该命令的用户的基本信息`

![image-20181231174843916](https://s2.51cto.com/images/100/blog/error_t.png)

语法2:# id `用户名`, 显示指定用户的基本信息

![image-20181231175031053](https://s2.51cto.com/images/100/blog/error_t.png)

如何验证以上信息是否正确?

==答:验证用户信息:通过文件/etc/passwd,验证用户组信息:通过文件/etc/group==

## 3、ps命令(重点)

指令:ps【process show】

作用:主要是查看服务器的进程信息

选项含义:

-e:等价于“-A”,表示列出全部(all)的进程

-f :   表示full,显示全部的列(显示全字段)

![image-20181231175508092](https://s2.51cto.com/images/100/blog/error_t.png)

​```powershell
列的含义:
UID  :该进程执行的用户ID
PID  :进程ID
PPID :该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID)
C	 :Cpu的占用率,其形式是百分数
STIME:进程的启动时间
TTY	 :终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起
扩展:Ctrl + Alt + F1 ~ F6,可以进入到不同的终端设备
TIME :进程实际使用CPU的时间
CMD  :该进程的名称或者对应的路径
​```

示例代码:在ps的结果中过滤出想要查看的进程状态"crond"进程(100%使用的命令)

==语法:ps -ef | grep "进程名称"【Linux/Unix命令格式】==

![image-20181231180029934](https://s2.51cto.com/images/100/blog/error_t.png)

注意查询结果:其中如果只有一条则表示没查到对应的进程(这1 条表示刚才ps 指令的自身)。只有查到的结果多余1 条,才表示有对应的进程。

> 补充:针对上述情况的优化:如果没有对应的进程,则什么都不显示。

思路:在现有的基础之上再次使用管道去处理下(-v 选项表示“排除”)。

![image-20190102102708548](https://s2.51cto.com/images/100/blog/error_t.png)

> 注意:使用以上指令时,需要提前启动Firefox浏览器

![image-20190102102859878](https://s2.51cto.com/images/100/blog/error_t.png)

==扩展:ps  aux【BSD格式命令,注意没有横杠"-"】==

![image-20190102103733191](https://s2.51cto.com/images/100/blog/error_t.png)

​```powershell
USER:该 process 属于哪个使用者账号
PID :该 process 的ID
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
​```

## 4、top命令(重点)

作用:查看服务器的进程占的资源(100%使用) Plants VS zombies

语法:# top (动态显示)

退出命令:按下q 键

补充:load average,一般单核情况,这个值不能超过1,超过1代表CPU超负荷运行。

用1分钟、5分钟、15分钟的数值/逻辑的CPU数量

CPU:2颗CPU,每颗2核,所以逻辑CPU数量 = 4

![image-20190102104814598](https://s2.51cto.com/images/100/blog/error_t.png)

​```powershell
表头含义:
PID	:进程ID
USER:该进程对应的用户
PR	:优先级
VIRT:虚拟内存
RES	:常驻内存
SHR	:共享内存,计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR)
S	:表示进程的状态status(sleeping,其中S 表示睡眠,R 表示运行)
%CPU:表示CPU 的占用百分比
%MEM:表示内存的占用百分比
TIME+  :执行的时间
COMMAND:进程的名称或者路径
​```

> 注:在运行top 的时候,可以按下方便的快捷键:

M(大写):表示将结果按照内存(MEM)从高到低进行降序排列;

P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列;

1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息;

![image-20190102105354301](https://s2.51cto.com/images/100/blog/error_t.png)

## 5、service命令(重点)

命令:service

作用:用于控制一些软件的服务启动/停止/重启

语法:# service  服务名  start/stop/restart/status状态

> 注:服务名可以去/etc/init.d 目录下寻找

​```powershell
服务和进程有啥区别?
服务≠进程
进程是指运行的程序(状态不一定是正在运行:run/sleep/stop/zombieˈzɑ:mbi']僵尸)
服务是进程的一个"外壳",用于控制对进程的启动/停止/重启操作
​```

==示例代码:启动本机中的sshd服务==

​```powershell
# service  sshd   start|stop|restart|status
​```

==示例代码:重启网络network服务==

​```powershell
# service  network restart
​```

==示例代码:启动本机安装的Apache(网站服务器软件),其服务名httpd==

![image-20190102113218366](https://s2.51cto.com/images/100/blog/error_t.png)

通过`ps -ef` 得到的结果发现apache启动的进程存在父子关系

> 了解:在centos7 中,service 命令将会被systemctl 所替代(#systemctl  start/restart/stop  服务名)。但是,service 命令在centos7 中同时兼容。

## 6、kill命令

命令:kill

作用:表示杀死进程 (当遇到僵尸进程或者出于某些原因需要关闭进程的时候)

语法:# kill   进程ID (语法需要配合ps 一起使用)如果需要杀死子进程,则可以直接杀父进程

==示例代码:使用kill命令干掉Apache的进程==

![image-20190102114731565](https://s2.51cto.com/images/100/blog/error_t.png)

> 备注:在互联网中,经常看到kill  -9  进程PID,强制杀死某个进程,kill -l

## 7、killall命令

命令:killall

作用:与kill 命令作用相似,但是比kill 更加好用的杀死进程的命令

语法:# killall   进程名称

![image-20190102144443451](https://s2.51cto.com/images/100/blog/error_t.png)

> 扩展:pkill   进程名称,与killall类似,杀死所有进程

## 8、ifconfig命令

命令:ifconfig

作用:获取网卡的相关信息

语法:# ifconfig 

![image-20190102144857435](https://s2.51cto.com/images/100/blog/error_t.png)

在上述的信息中,可以得知以下信息:

这里有2 个网卡;其IP地址是inet addr(圈红的地方)

==☆ eth0 是默认的第一块网卡==

==☆ lo(loop,循环)表示回环网卡==

## 9、uname命令

命令:uname

作用:获取计算机操作系统相关信息

语法1:# uname 获取操作系统的类型

语法2:# uname   -a,选项-a代表all,表示获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划)

![image-20190102145514286](https://s2.51cto.com/images/100/blog/error_t.png)

## 10、netstat命令

命令:netstat

作用:查看网络连接状态

语法:netstat   -tnlp

选项:-t:表示只列出tcp 协议的连接;

​	   -n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;

​	   -l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;

​	   -p:表示显示发起连接的进程pid 和进程名称;

![image-20190102150056420](https://s2.51cto.com/images/100/blog/error_t.png)

​```powershell
Protocol:协议(tcp、upd、http、https、icmp、ssh…)
Receive:接收
Send:发送
​```

# 六、练习题

1、如何通过命令行重启linux 操作系统?

==2、如何在命令行中快速删除光标前/后的内容? 前:ctrl + u 后:ctrl + k==

3、如何删除/tmp 下(不要求递归)所有A 开头的文件?

答:rm     /tmp/A*

4、系统重要文件需要备份,如何把/etc/passwd 备份到/tmp 目录下?

5、如何查看系统最后创建的3 个用户?

答:tail  -3   /etc/passwd

6、什么命令可以统计当前系统中一共有多少账户?

答:可以统计一下/etc/passwd文件中一共有多少行,这个问题就解决了

7、如何创建/tmp/test.conf 文件?

8、如何查看/etc/passwd 的头3 行和尾3 行?

9、如何一次性创建目录/text/1/2/3/4?

10、如何最快的返回到当前账户的家目录?

11、如何查看/etc 所占的磁盘空间(文件夹大小)?

12、如何删除/tmp 下所有的文档?

13、尝试启动Apache 的服务,并且检查是否启动成功。

14、使用已学命令杀死Apache 的进程。