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 的进程。