相信大家对 Linux 肯定是不陌生的,很多同学在学习 Linux 的时候比较头疼,觉得比较难学,命令多记不住,其实我们在学习 Linux 的时候,要把我们的大脑当成内存来用,而不是硬盘。
本文用的是 Ubuntu 操作系统,版本为 ubuntu-21.04-desktop-amd64.iso。下载地址:
http://mirrors.aliyun.com/ubuntu-releases/
用的远程连接工具为 FinalShell,下载地址:
http://www.hostbuf.com/t/988.html
帮助命令
Linux 中有很多命令,命令也有很多参数,那我们要怎么去学习呢?我们可以借助帮助文档,这里给大家介绍 3 个帮助命令:
- man
- help
- info
man
man 是 manual 的缩写,有问题找男人,当时这是一句开玩笑的话。
man 命令的使用也非常简单,示例如下:
man ls
man 也是一条命令,分为 9 章,可以使用 man 命令获得 man 的帮助:
man man
有的同学一定会好奇,为什么 man 命令给我们 9 章,这是因为命令和系统文件有的时候会出现重名的情况,比如:
passwd # 这是命令 /etc/passwd # 这是配置文件
如果不知道是命令还是配置文件,加上 -a 参数:
man -a passwd
这个时候会先查看 passwd 命令,退出后会显示:
可以根据提示继续查看,还是跳过当前的命令查看下一个命令:
help 帮助
这里我先要说一个内部命令和外部命令的概念,shell 自带的命令称为内部命令,其他的是外部命令。
那要怎么区分到底是内部还是外部呢?通过 type,后面跟上命令。
juran@juran-virtual-machine:~$ type cd cd 是 shell 内建
如果是内部命令使用 help:
help cd
如果是外部命令使用 --help:
ls --help
info 帮助
info 帮助比 help 更详细,作为 help 的补充,大多数的情况下,我们使用 man 和 help 就足够了。
命令格式
终端的命令组成:
command [-options] [parameter]
- command:命令名,
- [-options]:选项,可以有零个、一个或者多个选项,多个选项可以合并,命令的选项用于调整命令功能
- [parameter]:参数,可以有零个、一个 或者 多个参数,参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作
- []:代表可选
查看目录命令
在 Linux 中一切皆文件,而且 Linux 中是没有盘符的概念的,所有的文件都在根目录下,接下来我们就来看下查看目录的命令有哪些。
ls 命令:列出文件夹中的内容,ls 只能查看一层目录信息:
ls # 查看当前文件夹的内容 ls /bin # 查看 bin 目录下的文件
ls 命令还有一些比较常用的选项:
命令选项 |
说明 |
-l |
以列表方式显示 |
-h |
件大小单位显示,默认是字节 |
-a |
显示隐藏文件和隐藏目录 |
tree 命令:以树状方式显示目录信息,tree 可以查看多层目录信息。
tree # 以树状方式显示当前目录信息 tree /bin # 如果提示没有 tree 命令,可以通过 apt install tree 进行安装
查看当前目录路径
pwd 命令:查看当前目录路径,是 print work directory 的缩写。
切换目录命令
cd 命令:切换目录,是 change directory 的缩写。
cd 命令有几个常用的写法:
命令 |
说明 |
cd 目录 |
切换到指定目录 |
cd ~ |
切换到当前用户的主目录 |
cd .. |
切换到上一级目录 |
cd . |
切换到当前目录 |
cd - |
切换到上一次目录 |
注意:cd 命令切换目录时,这个目录必须存在。cd 后面不写目录等价于 cd ~。
创建、删除文件及目录命令
touch 命令:创建指定文件
touch abc.txt # Linux 里面文件可以没有后缀的 touch a b c # 可以一次创建多个文件
mkdir 命令:创建目录(文件夹)
mkdir movie # 创建 movie 目录 mkdir a b c # 创建 a b c 目录
如果我想创建双层的目录,来试试:
mkdir movie/active # 想要创建 movie 下面的 active 目录,而且 movie 目录是没有被创建过的 mkdir: 无法创建目录 “movie/active”: 没有那个文件或目录
这是我们可以通过选项 -p:
mkdir movie/active -p # 选项和参数之间是没有顺序的,先写那个都可以
我们也可以通过查看帮助文档,man mkdir:
rm 命令:删除指定文件或者目录
rm 命令删除文件:
rm abc.txt
rm 命令删除目录:
mkdir juran rm juran rm: 无法删除 'juran': 是一个目录
rm 命令是无法直接删除目录的,需要加上选项 -r:
rm -r juran
可以通过 man rm 查看选项,下面来自帮助文档:
-r, -R, --recursive remove directories and their contents recursively
rmdir 命令:删除空目录
rmdir juran # juran 目录是空目录
如果删除非空目录:
mkdir -p a/b rmdir a rmdir: 删除 'a' 失败: 目录非空
小结
- touch 表示创建文件
- mkdir 表示创建目录
- rm 表示删除文件或者目录,如果删除目录需要使用 -r 选项,-r 表示递归删除目录及其内容
- rmdir 表示删除空目录
复制、移动文件及目录命令
cp 命令:拷贝文件、拷贝目录
cp 命令复制文件:
cp abc.txt juran # 复制 abc.txt 到 juran 目录下
cp命令复制目录
mkdir a b # 创建 a 和 b 目录 cp a b # 复制 a 目录到 b 目录 cp: 未指定 -r;略过目录'a'
如果想要复制目录的话,需要加上选项 -r:
cp -r a b
mv 命令:移动文件、移动目录、重命名
mv 命令移动文件:
mkdir abc # 创建 abc 目录 touch abc.txt # 创建 abc.txt 文件 mv abc.txt abc
mv 命令移动目录:
mkdir a b mv a b
查看文件内容命令
cat 命令:文本内容显示到终端
查看文件内容:
touch a.txt ls /bin > a.txt cat a.txt
查看文件内容,并显示行号:
cat -n a.txt
查看多个文件:
cat a.txt b.txt
多个文件合并:
cat a.txt b.txt > c.txt
还有一个跟 cat 非常像的命令,tac 命令倒叙输出文本内容。
head 命令:查看文件开头
查看文件:
head a.txt # 默认显示文件前 10 行内容
指定查看文件行数:
head -5 a.txt # 显示文件前 5 行内容
tail 命令:查看文件结尾
tail a.txt # 默认显示文件后 10 行内容
指定查看文件行数:
tail -5 a.txt # 显示文件后 5 行内容
查看文件更新:
tail -f a.txt
在另外一个终端,对文件进行更新:
echo "juran" > a.txt
wc 命令:统计文件内容信息
wc -l a.txt # 统计文件行数
压缩和解压命令
tar 命令:压缩和解压缩命令
tar 命令可以打包,也可以打包压缩:
touch 1.txt 2.txt 3.txt ls /bin > 1.txt ls /etc > 2.txt ls /lib > 3.txt tar -cvf 3.tar ./*.txt
压缩成 .gz 文件:
tar -zcvf backup.tar.gz *.txt
解压 .gz 文件:
tar -zxvf backup.tar.gz
解压到指定的目录:
tar -zxvf backup.tar.gz -C bb/
压缩成 .bz2 文件:
tar -jcvf backup.bz2 *.txt
解压 .bz2 文件:
tar -jxvf backup.bz2
解压到指定目录:
tar -jxvf backup.bz2 -C bb/
压缩 zip 文件:
zip backup *.txt # 默认后缀是.zip
解压缩 zip 文件:
zip backup.zip -d /bb # -d 指定文件夹
vim 的使用
我们在 Windows 中有记事本,也有像 pycharm 这样的代码编辑器。
那在 Linux 中我们用什么来写代码呢(如何优雅的装 X)?
用的就是 vim,大家可以把 vim 想象成 Windows 中的 pycharm,或者你熟悉的编辑器。
vim 安装
sudo apt-get install vim # 这是 Ubuntu 的安装 sudo yum install vim # 这是 centos 的安装
vim 的工作模式
- 命令模式
- 编辑模式
- 末行模式
工作模式效果图:
编辑模式和末行模式之间不能直接进行切换,都需要通过命令模式来完成。
vim 的末行模式命令
- :w 保存
- :wq 保存退出
- :x 保存退出
- :q! 强制退出
vim 的常用命令
命令 |
说明 |
yy |
复制光标所在行 |
p |
粘贴 |
dd |
删除/剪切当前行 |
V |
按行选中 |
u |
撤销 |
ctr+r |
反撤销 |
>> |
往右缩进 |
<< |
往左缩进 |
:/搜索的内容 |
搜索指定内容 |
:%s/要替换的内容/替换后的内容/g |
全局替换 |
:开始行数,结束行数 s/要替换的内容/替换后的内容 |
局部替换 |
. |
重复上一次命令操作 |
G |
回到最后一行 |
gg |
回到第一行 |
数字+G |
回到指定行 |
shift+6 |
回到当前行的行首 |
shift+4 |
回到当前行的行末 |
ctr+f |
下一屏 |
ctr+b |
上一屏 |
vim 交换文件解决办法
当我们用 vim 编辑一个文件,并写入一些数据,发生意外 vim 没有正常退出,这时再去编辑这个文件就会有如下提示:
这时我们可以直接选择编辑,但是下次打开的时候仍然会有这个提示。如果我们执行命令 ls -a 会看到一个隐藏文件 .a.txt.swp。
这个隐藏文件大家可以理解为 Linux 中的缓存文件,为了帮助我们恢复数据的。如果我们不需要的话,可以直接删除,删除掉这个文件后,再次编辑就不会有这个提示了。
用户和用户组管理
用户管理
Linux 支持多任务多用户,用户登录 Linux 之后可以做很多事件,这点和 Windows 很像,但是 Windows 不支持多用户。
useradd 命令:创建(添加)用户
useradd -m juran # 如果是普通用户执行这个命令会报错
创建用户是需要管理员的权限才可以的。我们想要执行这个命令有两种方法
- 切换到 root 用户下去执行
- 在普通用户下,命令前面加上 sudo,这个命令在执行的时候就可以获得管理员的权限
sudo useradd -m juran
创建好的用户,还需要设置密码:
sudo passwd juran
设置好密码后,我们可以切换到 juran 用户下:
su juran
在 Ubuntu 中,默认切换到用户的 bash 是 /bash/sh,这样我们在敲命令的时候特别不方便,我们可以在创建用户的指定解释器:
sudo useradd -m juran -s /bin/bash
查看用户是否创建成功,可以查看 /etc/passwd 这个文件:
tail /etc/passwd
passwd 文件中的每项信息说明,以 root:x:0:0:root:/root:/bin/bash 为例:
第一个:用户名 第二个:密码占位符 第三个:uid, 用户 id 第四个:gid, 用户所在组 id 第五个:用户描述, 可选, 第六个:用户的主目录所在位置 第七个:用户所用 shell 的类型,一般由 bash 或者 sh,默认不设置是 sh 类型
创建用户,默认会自动创建一个同名的用户组,查看用户组是否创建成功,可以查看 /etc/group 这个文件。
group 文件中的每项信息说明,以 laowang:x:1001: 为例:
第一个:用户组名 第二个:用户组密码占位符,一般 Linux 系统的用户组都没有密码的 第三个:组 id
我们也可以通过 id 命令查看用户信息:
id laowang uid=1001(laowang) gid=1001(laowang) 组=1001(laowang) 第一个: uid 表示用户 id 第二个: gid 表示用户组 id 第三个: 组 表示用户所在的用户组
创建用户流程
- useradd juran
- 系统读取 /etc/login.defs 和 /etc/default/useradd 两个文件中定义的规则创建新用户
- 向 /etc/passwd 和 /etc/group 文件中添加用户和组信息,想 /etc/shadow 和 /etc/gshadow 中添加密码信息
- 根据 /etc/default/useradd 文件中配置的信息创建用户家目录
- 把 /etc/skel 中所有的文件复制到新用户家目录中
在 Linux 系统中,UID 为 0,就是超级用户,如果设置管理员用户,可以改为 UID 为 0,系统用户 UID 为 1~999,Linux 安装的服务程序都会创建独有的用户负责运行,普通用户 UID 从 1000 开始,最大值 1000~60000 范围。
修改用户信息
创建的用户没有执行 sudo 命令的权限,那我们想要创建的用户也可以执行这个命令,怎么办呢?
我们可以修改用户的附加组,每个用户都有自己的主组,相当于亲爹,那附加组就相当于干爹,可以有很多个:
sudo usermod -g sudo jr
这时我们创建的用户,就可以执行 sudo 命令了。
用户组相关操作
为了方便管理属于同一组的用户,Linux 系统中还引入了用户组的概念。
一个公司中有多个部门,每个部门中又有很多员工,如果只想让员工访问本部的资源,则可以针对部门而非具体的员工来设置。开发部的小哥哥想要前台小姐姐的信息,肯定不能让他直接访问的。
groupadd 命令:创建(添加)用户组
创建用户前,我们可以先创建好用户组:
sudo groupadd dev # 创建开发组
创建用户指定组:
sudo useradd -m laowang -g dev
修改用户组:
sudo usermod -g dev laowang
删除用户组:
sudo groupdel dev # 这时会报错
如果用户组下面有用户先删除用户在删除用户组。
文件权限命令
执行命令 ls -al 查看文件:
这里以文件 abc 来解释。
第一位:文件类型
- - 表示文件
- d 表示目录
- l 表示链接
后面 9 位表示权限:
命令 |
解释 |
字母表示 |
rw- |
所有者拥有读写权限 |
用 u 表示,代表 user |
r-- |
所属组拥有读权限 |
用 g 表示,代表 group |
r-- |
其他人拥有读权限 |
用 o 表示,代表 other |
减少权限:
chmod u-r abc.txt # 不能读取数据 chmod u-w abc.txt # 不能写入数据
添加只读权限,减少写权限:
chmod u+r,u-w pwd.txt
chmod 数字法的使用,数字法就是 rwx 这些权限也可以用数字来代替。
权限 |
说明 |
r |
可读,权限值是 4 |
w |
可写,权限值是 2 |
x |
可执行,权限值是 1 |
- |
无任何权限,权限值是 0 |
数字法授予权限,所有者可读可写可执行,所属组可读可写,其他人可读:
chmod 764 abc.txt
网络管理
网络配置
网络配置最重要的两个工具就是 ifconfig 和 ip,这两个工具分别来自两个工具包 net-tools 和 iproute2。
ifconfig 命令:配置和显示 Linux 系统网卡的网络参数
ifconfig 通常是用来查看网卡的信息(比如 IP 地址、收发包及丢包情况等),以及配置网卡(如启停网卡,修改网卡 MTU,修改 IP、MAC 地址等)。
这个命令需要安装:
sudo apt-get install net-tools
若 ifconfig 提示找不到命令,安装 net-tools 也未果,可能是因为 ifconfig 已不被推荐使用,可用 ip addr show 命令代替,一样可以显示出 IP 地址。
ip 命令:网络配置工具
ip 是非常强大的工具,可以替换 net-tools 包的所有工具,如常见的 ifconfig、netstat、route、arp 等。
查看网卡信息:
ip addr show
显示系统路由:
ip route show
开启网卡或关闭网卡:
ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡
网络故障排除
当我们遇到服务器的网络出现问题的时候,我们改怎么去排查呢?大家可以通过下面的命令来逐一排查。
ping 命令:测试主机之间网络的连通性
这个命令通常用来判断网络的连通性和网速情况,偶尔用来查看域名的 IP:
ping www.baidu.com
ping 命令并不会自动结束,需要我们 ctrl+c 强制停止,大家可以通过 -c 选项来指定 ping 的次数:
ping www.baidu.com -c 3 # 设置完成要求回应的次数
ping 只能使用 ipv4,要使用 ipv6,可以用 ping6 命令。
telnet 命令:登录远程主机和管理(测试 IP 端口是否连通)
telnet 通常用作远程登录,用来确定远程服务的状态,探测远程服务器的某个端口是否能访问,也可以探测本地的:
telnet localhost 22
telnet localhost 3306
处理这种情况方法:
- 确认 IP 地址是否正确?
- 确认 IP 地址对应的主机是否已经开机?
- 如果主机已经启动,确认路由设置是否设置正确?(使用 route 命令查看)
- 如果主机已经启动,确认主机上是否开启了 telnet 服务?(使用 netstat 命令查看,TCP 的 23 端口是否有 LISTEN 状态的行)
- 如果主机已经启动 telnet 服务,确认防火墙是否放开了 3306 端口的访问?(使用 iptables-save 查看)
traceroute 命令:显示数据包到主机间的路径
traceroute 主要用来探测从源主机到目标主机之间的每一跳路由节点,通常和 ping 结合起来排查网络故障, ping 测连通性和网速,如果网络不通,可以借由 traceroute 进一步排查是哪个路由节点出问题了。
traceroute www.58.com
我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免 DNS 解析,以 IP 格式输出数据。
如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC 服务商也不可能帮助我们解决。
网络连接
netstat 命令:查看 Linux 中网络系统状态信息
netstat 用于查看当前网络的连接情况,能够查看所有的网络连接,包括 Unix Socket 等,也是集多种工具于一身的组合工具。
列出所有端口:
netstat -a # 列出所有端口 netstat -at # 列出所有 tcp 端口 netstat -au # 列出所有 udp 端口
列出所有处于监听状态的 Sockets:
netstat -l # 只显示监听端口 netstat -lt # 只列出所有监听 tcp 端口 netstat -lu # 只列出所有监听 udp 端口
ss 命令:iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息。
ss 和 netstat 类似,也是用来查看网络连接统计的工具,它的输出也和 netstat 类似,甚至显示更多连接状态信息,它最大的优势在于比 netstat 快,在服务器维持上万个连接的情况下,这种优势就体现得比较明显。
显示 TCP 连接:
ss -t -a
列出所有打开的网络连接端口:
ss -l
查看进程使用的 socket:
ss -pl
nc 命令:用于设置路由器
nc 被称为瑞士军刀,非常轻巧但功能强大,能够创建各种不同类型的网络连接、能够实现简单的聊天工具、远程传输文件、debug 分析、扫描端口等。
TCP 端口扫描:
nc -v -z -w2 localhost 1-100
选项解释:
- -v 显示指令执行过程
- -z 使用 0 输入/输出模式,只在扫描通信端口时使用
- -w<超时秒数> 设置等待连线的时间
- 1-100 扫描 TCP 端口
UDP 端口扫描:
nc -u -z -w2 192.168.0.1 1-1000 # 扫描 192.168.0.1 的端口 范围是 1-1000
选项解释:
- -u 使用 UDP 传输协议
域名
host 命令:常用的分析域名查询工具
host 命令是域名分析查询工具,用来测试域名系统工作是否正常。
查看百度域名信息:
host www.baidu.com
nslookup 命令:查询域名 DNS 信息的工具
nslookup 有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
进入交互模式,直接输入 nslookup 命令,不加任何参数,则直接进入交互模式,此时 nslookup 会连接到默认的域名服务器。或者输入 nslookup -nameserver/ip。进入非交互模式,就直接输入 nslookup 域名就可以了。
非交互模式:
nslookup www.baidu.com
交互模式:
nslookup
软件包管理器
Ubuntu 软件安装有两种方式:
- 离线安装(deb 文件格式安装)
- 在线安装(apt-get 方式安装)
- 源码安装
我们绝大多数的时候,都是通过在线安装的方式来进行安装软件。
apt-get 方式安装
在线安装 deb 软件包的命令,主要用于在线从互联网的软件仓库中搜索、安装、升级、卸载软件。
在线安装软件命令格式:
sudo apt–get install 安装包 # 表示在线安装 deb 安装包
源码安装
开源软件都会提供源码下载的方式,对于源代码安装方式的好处即可以定制软件功能,安装需要的模块,不需要的模块可以屏蔽,方便管理,卸载等。
我们以 Redis 为例:
https://redis.io/download # 这是官网 redis 的下载地址
官网中给出了源码安装的方式:
$ wget https://download.redis.io/releases/redis-6.2.5.tar.gz $ tar xzf redis-6.2.5.tar.gz $ cd redis-6.2.5 $ make
这里会使用 make 工具,make 工具就会通过 makefile 文件来实现。makefile 文件是一种按照某种语法来编写且定义了各个文件的依赖关系。
使用 make 命令,一般都需要 gcc 的环境:
sudo apt-get install gcc
更改镜像源
因为使用 apt-get 命令默认是从国外的服务器下载安装软件的,会导致下载安装速度很慢,所以需要更改成国内的镜像源服务器。
镜像源说明:镜像源就是下载软件来源的服务器。
更改镜像源的方式:
- 可视化方式更改镜像源
- 手动方式更改镜像源
可视化的方式适合 Ubuntu 这种有图形化界面的。
第一步:
第二步:
第三步:
第四步:
第五步:
最后执行命令:
sudo apt-get update
手动修改就容易很多:
vim /etc/apt/sources.list # 编辑这个文件,将找好的国内镜像源直接复制到这个文件里面就行
这里是清华大学的镜像源,大家可以找其他的镜像源:
查看进程
ps 命令:用于报告当前系统的进程状态的命令
ps 命令可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
当我们在终端敲下 ps 命令,会显示如下界面:
字段解释:
PID 代表这个进程对应的 ID 号码 TTY 进程所属的控制台号码 TIME 进程所使用 CPUC 的总时间 CMD 就是正在执行的系统命令行是什么
ps 常用选项,显示 Linux 机器所有详细的进程信息:
ps -ef
- -e:列出系统所有运行的进程
- -f:显示 ID PID PPID C 等信息
字段解释:
UID 这个进程是那个用户执行的命令 PID 进程的标识号码 用于启停进程 PPID 进程的父进程标识号 C 表示 CPU 使用的资源百分比 STIME 表示进程开始执行的时间 TTY 进程在那个终端执行的 TIME 该进程使用的 CPU 总时间 CMD 用户执行某条命令 产生的进程信息
过滤出系统指定的信息:
ps -ef | grep vim
查看 named 进程详细信息:
ps -aux | grep named
显示指定用户信息:
ps -u root
把所有进程显示出来,并输出到 ps1.txt 文件:
ps -aux > ps1.txt
ps 命令的参数,分为两种系统形式:
- ps ef,不带减号的参数
- ps -ef,带减号的参数
大家一定要注意带减号和不带减号,表示的含义是不同的。
- e:列出程序时,显示每个程序所使用的环境变量
- -e :列出系统所有运行的进程
大家可以看出来效果是不一样的。
pstree 命令:以树状图的方式展现进程之间的派生关系
pstree 命令需要安装:
sudo apt-get install psmisc
执行 pstree 效果如下:
kill 命令:发送相关信号,给进程达到不同的停止效果
我们通常用的都是 kill -9 进程号,除了 -9 这一个信号,kill 也有很多其他的信号。
kill -l
下面是常用的信号:
HUP 1 终端挂断 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) KILL 9 强制终止 TERM 15 终止,这是 kill 命令默认的 CONT 18 继续(与 STOP 相反,fg/bg 命令) STOP 19 暂停(同 Ctrl + Z)
示例:
ping www.baidu.com
找到 ping 命令的进程号:
ps -ef | grep ping
通过刚才找到的进程号结束掉 ping 命令:
kill -9 进程号
top 命令:显示或管理执行中的程序
可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。
当我们敲下 top 命令,可以看到如下界面:
top 交互命令
在 top 命令执行过程中可以使用的一些交互命令,这些命令都是单字母的。
h:显示帮助画面,给出一些简短的命令总结说明; k:终止一个进程; i:忽略闲置和僵死进程,这是一个开关式命令; q:退出程序; r:重新安排一个进程的优先级别; S:切换到累计模式; s:改变两次刷新之间的延迟时间(单位为 s),如果有小数,就换算成 ms。输入 0 值则系统将不断刷新,默认值是 5s; f 或者 F:从当前显示中添加或者删除项目; o 或者 O:改变显示项目的顺序; l:切换显示平均负载和启动时间信息; m:切换显示内存信息; t:切换显示进程和 CPU 状态信息; c:切换显示命令名称和完整命令行; M:根据驻留内存大小进行排序; P:根据 CPU 使用百分比大小进行排序; T:根据时间/累计时间进行排序; w:将当前设置写入~/.toprc 文件中。
top 命令上面字段:
top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92 Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie Cpu(s): 99.8%us, 0.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4147888k total, 2493092k used, 1654796k free, 158188k buffers Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached
解释:
top - 09:44:56[当前系统时间], 16 days[系统已经运行了 16 天], 1 user[个用户当前登录], load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度] Tasks: 145 total[总进程数], 2 running[正在运行的进程数], 143 sleeping[睡眠的进程数], 0 stopped[停止的进程数], 0 zombie[冻结进程数], Cpu(s): 99.8%us[用户空间占用 CPU 百分比], 0.1%sy[内核空间占用 CPU 百分比], 0.0%ni[用户进程空间内改变过优先级的进程占用 CPU 百分比], 0.2%id[空闲 CPU 百分比], 0.0%wa[等待输入输出的 CPU 时间百分比], 0.0%hi[], 0.0%st[], Mem: 4147888k total[物理内存总量], 2493092k used[使用的物理内存总量], 1654796k free[空闲内存总量], 158188k buffers[用作内核缓存的内存量] Swap: 5144568k total[交换区总量], 56k used[使用的交换区总量], 5144512k free[空闲交换区总量], 2013180k cached[缓冲的交换区总量],
内存查看命令
free 命令:显示内存的使用情况
可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
以总和的形式显示内存的使用信息:
free -t
周期性的查询内存使用信息,每 3s 执行一次命令:
free -s 3
显示内存使用情况:
free -m
服务管理工具 systemctl
systemctl 命令:系统服务管理器指令
systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
启动服务:
service httpd start systemctl start httpd.service
停止服务:
service httpd stop systemctl stop httpd.service
重启服务:
service httpd restart systemctl restart httpd.service
重载服务:
service httpd reload systemctl reload httpd.service
检查服务状态:
service httpd status systemctl status httpd.service
设置开机自启动 MySQL 服务:
systemctl enable mysqld.service
停止开机自启动:
systemctl disable mysqld.service