tips: 紧接上一篇,Linux 常用命令指南【上】
[TOC]
2.4 文件解压缩
2.4.1 官宣的 linux 压缩工具:tar
tar 的基本命令格式为
tar [参数选项] [文件或目录]
我们前面学的命令凡是参数选项都要加 -,tar 命令有点特殊,加不加都可以,如 tar -z 可以写成 tar z。
tar 常用命令:
tar -zcvf [压缩包名] [待打包文件或目录]
# [压缩包名] 一般为 tar.gz 后缀
# z:通过 gzip 压缩或解压
# c:创建新的 tar 包
# v:显示命令执行过程
# f:指定压缩文件的名字
# t : 不解压查看 tar 包内容
tar tvf [压缩包]
# 不解压查看压缩包内容
tar zxvf [压缩包] -C [解压路径]
# 将压缩参数的 c 换成 x,便是解压
# -C: 指定解压路径,不加 - C 解压到当前目录
常用命令示例:
# 先来准备点数据
cd ~
# 返回用户根目录
mkdir -p /var/www/yaojiaxiaoyuan/html
# 创建多级目录
touch /var/www/yaojiaxiaoyuan/html/yaomaomao{01..10}.html
# 在上面的目录中批量创建多个文件
tar zcvf www.tar.gz /var/www/yaojiaxiaoyuan/html
# 将目录 /var/www/yaojiaxiaoyuan/html 打包为 www 的 tar 包
mkdir /var/www/yaojiaxiaoyuan/html/test
find /var/www/yaojiaxiaoyuan/html ! -type d| xargs tar zcvf www2.tar.gz
# 查找 /var/www/yaojiaxiaoyuan/html 下不是目录的文件,将其打包为 www2.tar.gz
# 根据之前 find 学到的命令,组合打包
# tar 命令的 --exclude 参数也有排除打包的功能,自行研究,不再赘述。tar -tvf www2.tar.gz
# 不解压查看压缩包 www2.tar.gz 中文件
mkdir ./yao/ yao2
tar zxvf www.tar.gz -C ./yao/
# 解压 www.tar.gz 到 yao 目录下
# 可以看到连 var 这个目录打打包进来了
如果不想打包那么多层级怎么办,直接 cd 到需要打包的目录进行打包。
2.4.2 gzip
gzip 只能打包文件,不能打包目录。
gzip 打包文件后会将源文件删除。
gzip 参数:
gzip【参数选项】【待压缩文件或压缩包】# -d:解压
# -v:显示解压过程
# -l : 列出压缩文件内容信息
# -c : 不改变原始文件
# -r:递归压缩目录下所有文件
# -t:检查压缩文件完整性
# - 数字 <1-9>:指定压缩率,值越大压缩率越高,默认为 6
gzip 常用命令示例:
cd /var/www/yaojiaxiaoyuan/html
gzip *.html
# 打包所有 html 文件,可以看到 html 压缩成 gz 文件后不见了。
gzip -l *.gz
# 不解压展示压缩包内信息
gzip -dv *.gz
# 解压 gz 文件
可以发现,解压后 gz 包也不见了。那怎么保留源文件?
echo '试试' >> yaomaomao01.html
# 先在 yaomaomao01.html 文件中添加点内容,echo 在这里的作用与 sed 类似
gzip -c yaomaomao01.html > 01.gz
# 使用 -c + 重定向符号,将 yaomaomao01.html 压缩为 01.gz,并且不删除源文件,解压也是一样的操作
gzip -dc 01.gz > 01.html
# 将 01.gz 解压为 01.html,可以看到源文件 01.gz 还存在
扩展:可以使用 zcat、zgrep、zless、zdiff 等扩展组件查看压缩文件,与 cat、grep、less 和 diff 等命令一样,如图:
zcat 01.gz
gz 不能压缩目录,这个开头说了,报错如下:
gzip test
# ==>> gzip: test is a directory -- ignored
2.4.3 zip/unzip
2.4.3.1 zip
zip 压缩格式,windows、linux、mac 上都是通用的压缩格式,并且跟 tar 一样,可以压缩目录。
zip yao.zip *
# 压缩当前目录下所有文件
但是这样打包并不能压缩子目录下文件,只能压缩子目录本身,如图:
cd test
touch test01.txt
cd ../
zip yao2.zip *
如同其他命令样,zip 也有个 - r 参数,可以递归压缩
zip -r yao2.zip *
# ==>> adding: test/test01.txt (stored 0%)
当前目录下已经有压缩包,想打包本目录的时候不将上个压缩包打进去,排除掉,怎么打包?使用 - x 参数:
zip -r yao3.zip * -x yao2.zip
小结,zip 几种打包方式,并有三个参数:
zip yao2.zip *
# 普通打包
zip -r yao3.zip *
# 递归打包
zip -r yao3.zip * -x yao2.zip
# 递归打包,排除某文件
zip -rq yao4.zip *
# 递归打包,不显示压缩信息
# 无参数,普通压缩
# -r:递归压缩
# -x:排除某个文件压缩
# -q:不显示压缩信息
2.4.3.2 unzip
unzip 可以解压 zip 命令打包的或其他例如 windows 上的 rar、360 压缩等软件打包的 zip 格式文件。
不解压查看压缩文件:
unzip -l yao.zip
指定目录解压:
unzip -d yao01 yao.zip
# 解压到 test 文件夹下
# -d : 指定目录,无此目录则创建一个,解压的部分信息 ===>> creating: yao01/test/
# 没有 - d 参数则默认解压到当前文件夹
# -o : 解压时不提示是否覆盖文件;如果我们现在解压到当前目录就会提示是否覆盖,因为已经有此文件了,使用 - o 可以直接覆盖
# -v:展示解压时的详细信息
2.4.4 7za
7z 也是一种高效率的压缩文件格式,7z 常用命令如下。
压缩:
7za a -r yao.7z *.html
# 压缩所有 html 到 yao.7z 包中
# a:添加文件、目录
# -r:递归
不解压查看文件内部信息:
7za l yao.7z
# l:不解压查看
解压:
7za x yao.7z -r -oyao7z
# x : 解压,x 换成 e 也可以解压;但是一般用 x,x 解压全路径,用 e 会将所有文件解压到一个目录中
# -r:递归解压子目录
# -o:指定解压目录,注意的是,- o 参数与目录间没有空格,这是比较奇特的一点
2.5 用户、文件与权限
2.5.1 权限升级:su 与 sudo
提到用户与权限,则首先得说说一个不能避过的命令:su 与 sudo。
su 与 sudo 的共同点是,都可以用另一个用户权限执行命令。
不同点是:su 要切换成另一个用户,sudo 不需要。
切换用户,su 的常用命令:
whoami
# 查看自己是哪个用户,我们这里可以看到是 root 登录的
su yao
# root 用户切换为普通用户不需要输入密码
su root
# 普通用户切换回 root 用户需要输入密码
# 小知识: su root == su,su 切换 root 不需要输入 root 用户名
# 注意:这种切换虽然可以成功,但是环境变量还是原用户的,所以要用下面的命令切换
su - yao
# su - [用户名],这种切换方式可以切换到相应用户,还能将登陆后的环境变量一并切换
其实 su 也可以不用切换过去就能执行命令,只需要加一个参数 - c 就行:
su - yao -c 'pwd'
# 使用 yao 执行 pwd 命令
可以看到,其实是执行成功了,正确返回了 yao 的 home 路径。
但是这种方式毕竟没有 sudo 来的方便,接下来看看不用切换用户的 sudo:
su - yao
# 切换为普通用户登录
whoami
# 查看切换成功了没
ls /root
# 访问 root 文件夹
可以看到,没权限。怎么办?sudo 呀。
sudo ls /root
# 访问 root 目录,输入 yao 用户的登录密码就行了
所有用户都可以使用 sudo 吗?当然不是了,我们可以查看下赋予 sudo 权限的用户:
sudo -l
# 查看当前用户被授权的 sudo 权限
怎么赋予 sudo 权限?
在 /etc/sudoers 文件中添加用户就行了
sudo cat /etc/sudoers
用 vi 还是 sed 都可以,但是最好使用 visudo。
sudo visudo
# root 用户不用 sudo
visudo 是专门来编辑 /etc/sudoers 文件的,它还有语法检查作用,赶快添加你的 sudo 用户吧。
2.5.2 用户增删改:useradd、usermod、userdel
2.5.2.1 用户新增:useradd、passwd
最常用,不带任何参数的添加用户:
useradd wfy
# 新增用户 wfy
passwd wfy
# 设置密码,密码一般为大小写加数字和一个特殊字符
passwd 小技巧,一条命令设置用户密码:
echo "123456" | passwd --stdin wfy
# --stdin:可从标准输入获取密码
# 批量修改密码时,此命令比较有用
# 此外,还有个 chpasswd 命令也可以批量修改密码
passwd 密码到期提醒策略:
passwd -n 7 -x 60 -w 10 -i 30 wfy
# 7 天内不能修改密码,60 天以后必须修改密码,过期前 10 天通知用户,过期后 30 天禁止用户登录
# -n : 7 表示不能修改密码天数
# -x:60 表示必须修改密码天数
# -w:10 表示过期前 10 天通知
# -i : 30 表示过期后 30 天禁止登录
useradd 不带任何参数时,系统会先读取 /etc/login.defs(用户定义)、/etc/deault/useradd(用户默认配置)文件,然后根据其中所设置的规则添加用户同时向 /etc/passwd(密码文件)、/etc/group(用户组)文件添加新用户和新用户组记录。
建好了之后,可以到 /home 目录下看下,已经创建了属于此用户的家目录。
cd /home/wfy
chage -l wfy
# 查看用户的有效期
查看用户所属信息:
id wfy
# 这个信息其实就在 /etc/passwd 中,可以用 grep wfy /etc/passwd 查看比对下
# uid : 用户 id
# gid:用户组 id
后续说道 group 的时候再来看看 gid 的作用。
禁止登陆用户创建:
useradd -s /sbin/nologin ftp_ymm
# -s:指定用户登录的 shell,/sbin/nologin 表示禁止登陆,部署 ftp 等中间件会经常用到
useradd -M -s /sbin/nologin nginx_wfy
# 部署 nginx、mysql 等中间件会经常用到
# -M : 不创建家目录
其他参数:
useradd -u 806 -s /bin/sh -c "这是测试用户" -G root -e "2019/12/21" -f 2 -d /tmp/wfy test_wfy
# -u:指定 uid
# -c:用户说明
# -G:设置用户组
# -e : 设置过期时间
# -f:2 表示过期两天停权
# -d:用户每次登录时的家目录
tail -1 /etc/passwd
# 查看 passwd 文件最后一行,可以看到刚才添加的用户信息
tail -1 /etc/shadow
# 查看 /etc/shadow 文件最后一行,可以看到刚才 - f 添加的参数 2
拓展:使用 useradd -D 参数就是修改用户的初始配置文件:/etc/deault/useradd,来看下这个文件有什么。
[root@VM_0_3_centos wfy]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
# 依赖于 /etc/login.defs 的 USERGROUPS_ENAB 参数,如果为 no,则此处控制
HOME=/home
# 把用户的家目录建在 /home 中
INACTIVE=-1
# 是否启用用户国企停权,- 1 表示不启用
EXPIRE=
# 用户终止日期,不设置表示不启用
SHELL=/bin/bash
# 新用户默认所用的 shell 类型
SKEL=/etc/skel
# 家目录默认文件存放路径,新增用户时,从这个配置目录拷贝过去
CREATE_MAIL_SPOOL=yes
# 创建 mail 文件
用 useradd - D 来修改下看看,当然,先做好备份:
cp /etc/default/useradd{,.bak}
# 做个备份
cd /etc/default
# 可以看到创建 useradd.bak 文件
useradd -D -s /bin/sh
# -D:改变 /etc/default/useradd 文件
# -s:改变默认 shell
# -b : 定义家目录
# -e:设置用户过期日期
# -f:过期后几日停权
# -g:设置用户组
diff /etc/default/useradd{,.bak}
可以看到前后对比的效果
2.5.2.2 用户修改:usermod
usermod 的参数大部分与 useradd 相同,无非一个新增一个修改而已。不同的参数如下:
usermod -l wfy2 wfy
# 将 wfy 这个用户的登录名改为 wfy2
# -l:修改用户名称
# -L:lock,锁定用户密码
# -U:unlock,解除密码锁定
# -a:追加用户组,与 - G 参数连用
将 useradd 替换为 usermod,其他参数不变,来修改下用户信息
usermod -u 806 -s /bin/sh -c "修改了测试用户" -G root -e "2019/12/21" -f 2 -d /tmp/wfy test_wfy
grep test_wfy /etc/passwd
grep test_wfy /etc/shadow
2.5.2.3 用户删除:userdel
userdel -r test_wfy
# -r : 删除用户及家目录
# -f : 强制删除用户,即使用户登录了
# 不加 - r 参数删除不会删除家目录
注意:实际工作中,一般不使用 userdel,而是去 /etc/passwd 中将用户信息注释。
2.5.3 用户查看:id、w、who、whoami、last
id,查看用户 id 信息:
id wfy
# 显示 wfy 的 uid 及 gid 信息
w,最常用,查看已登录用户信息:
w
# 展示所有已登录用户信息
# 展示字段含义如下
# USER : 用户
# TTY : 用户 tty 名称
# FROM : 从哪登录的
# LOGIN : 登录时间
# IDLE:终端空闲时间
# JCPU:终端上所有进程及子进程使用系统的总时间
# PCPU:活动进程使用的系统时间
# WHAT:当前用户执行的进程
who 查看所有已登录用户信息:
who
# 显示已登录用户信息,与 w 略有不同
users 查看所有已登录用户名:
users
# 只显示用户
whoami 查看当前登录用户信息:
whoami
# 查看当前登录的用户名
last:
last
# 显示用户登录列表,读取 /var/log/wtmp
last -10
# 显示最近 10 次的登录信息
last root -10
# 显示 root 用户的最近 10 次登录信息
lastb
# 展示用户登录失败信息,读取 /var/log/btmp
lastb -10
# 展示最近 10 条用户登录失败信息
lastb root -10
# 展示 root 用户登录失败信息,最近 10 条
lastlog
# 展示所有用户最近一次登录记录, 读取 /var/log/lastlog
2.5.4 文件权限:chown、chmod
2.5.4.1 改变文件用户组:chown
chown 常用命令如下:
cd ~
# 返回 root 家目录
chown wfy wfy.txt
# 更改 wfy.txt 的所属用户为 wfy
chown wfy:wfy wfy2.txt
# 将 wfy2.txt 的所属用户更改为 wfy,用户组从 root 更改为 wfy
chown -R wfy:wfy yao
# 将 yao 这个目录及其子目录全都赋权给 wfy
# 可以看到 yao 下的 var 目录页赋权给了 wfy 这个用户及用户组
2.5.4.2 改变文件权限范围:chmod
chmod 可以改变文件及目录的权限范围,它有两种赋权模式:1)使用权限字母 + 操作符;2)使用数字。
常用命令示例:
chmod 777 wfy.txt
# 更改 wfy.txt 权限为所有人可访问
修改前:
修改后:
7 代表 rwx,777 所代表的 9 位字符权限为 rwxrwxrwx。
- “r” = 4, 可读权限;目录、子目录及其文件都可被访问。
- “w” = 2,可写权限;可修改文件内容、目录名称。
- “x” = 1,可执行权限;目录没有 x 权限无法进入,sh 脚本文件没有 x 无法执行。
- “-” = 0,无权限。
赋予目录只读权限:
chmod -R 555 yao
# 5 = 4 + 0 +1, 即 r -x,可读与可执行权限,但是不能被修改。执行下看看效果,是否与预期一样。
可以看到第一位字符是 d,d 代表目录,后续 9 位字符为 r -x(属主权限位)、r-x(属组权限位)、r-x(其他用户权限位)。
此外还有一种常用的赋权模式,为 +x, 赋予文件可执行权限,一般用来执行 shell 脚本:
chmod +x [脚本名].sh
shell 脚本一般有四种执行方式,最常用的为 + x 赋权后使用下面命令执行:
./ 脚本名.sh
其他三种方式:
. / 脚本名.sh
# . 后有空格
source 脚本名.sh
sh 脚本名.sh
当然,也可以用来执行 txt 文件,示例如下:
. wfy.txt
source
sh wfy.txt
可以看到我们的 wfy.txt 文件并不是一个 shell 文件,没有找到响应的命令去执行,后续的 shell 入门会说下.sh 的脚本文件是怎样编写的。
注意:普通用户还需有 r 权限才能执行,root 则不需要。
2.6 资源监控与管理
2.6.1 虚拟文件管理系统:proc
说到资源管理这块,/proc 文件夹是 linux 上不得不说的一个目录。
ls /proc
可以看到红框 /proc 目录下红框圈的那一片数字文件夹,这其实就是我们 linux 系统中所有进程文件存放的地方。每生成一个进程,就会在这里有个对应的文件夹,也就是我们以后会经常打交道的 pid。
有很多的 inux 命令都是调用此目录中的文件来显示系统相关信息。例如内存、cpu 等信息。
为什么 proc 下面的文件能存放内存、进程、cpu 这些跟磁盘文件没任何关系的东西呢?
因为 proc 实际是一个伪文件系统,或者说虚拟文件系统。我们在文章开头就说了,linux 中的一切都是以文件形式存在的,就是 proc 做到的。
对于用户、应用程序,它们是从 proc 中得到系统的一些信息,甚至可以改变内核的某些参数。
而 proc 中的文件内容并不是全然不变的,它们会随着系统进程的变化而变化,当用户读取它们时,proc 文件系统就动态地从系统内核中读出所需要的信息并提交。
一些我们常用的命令会用到下面的一些文件,如磁盘、cpu、内存相关的。
/proc/cmdline | 内核命令行,核心启动参数 |
---|---|
/proc/cpuinfo | cpu 的相关信息 |
/proc/devices | 挂载设备 |
/proc/Loadavg | 负载均衡 |
/proc/meminfo | 内存信息 |
/proc/mounts | 加载文件系统 |
/proc/stat | 全面统计状态表 |
/proc/swaps | 交换空间表 |
/proc/version | 内核版本 |
/proc/uptime | 系统正常运行时间 |
关于 /proc 目录的详解可以参考这篇文章 https://www.cnblogs.com/aofo/p/6151266.html
关于 proc 也不用深究,知道这么个东西就行了。
接下来看看关于磁盘、网络、cpu、内存的一些基本命令。
2.6.2 磁盘空间监视器:df
df 命令可以说 linux 上最常用的命令之一,因为一旦磁盘空间不够就会出现各种故障,数据库、应用都可能会处于瘫痪状态。
常用命令示例:
[root@VM_0_3_centos ~]# df -h
# 以适合人类阅读的方式展示磁盘空间大小
文件系统 容量 已用 可用 已用 % 挂载点
/dev/vda1 50G 43G 4.3G 91% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 10G 666M 9.4G 7% /dev/shm
tmpfs 1.9G 324K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 380M 0 380M 0% /run/user/1005
tmpfs 380M 0 380M 0% /run/user/0
[root@VM_0_3_centos ~]# df -i
# -i : 显示 inode 的使用情况
# linux 文件有个 inode 的文件数量限制,一旦无可用 inode,则无法再产生新的文件,会在磁盘空间未满的情况下报“No space left on device”, 解决方案是删除无用(多天前)的小文件或者 log 文件
文件系统 Inode 已用 (I) 可用 (I) 已用 (I)% 挂载点
/dev/vda1 3276800 215486 3061314 7% /
devtmpfs 482932 308 482624 1% /dev
tmpfs 485254 258 484996 1% /dev/shm
tmpfs 485254 354 484900 1% /run
tmpfs 485254 16 485238 1% /sys/fs/cgroup
tmpfs 485254 1 485253 1% /run/user/1005
tmpfs 485254 1 485253 1% /run/user/0
[root@VM_0_3_centos ~]# df -Th
# -T:查看文件系统类型
# 本机展示的挂载盘 /dev/vda1 文件系统类型为 ext3
文件系统 类型 容量 已用 可用 已用 % 挂载点
/dev/vda1 ext3 50G 43G 4.3G 91% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 10G 666M 9.4G 7% /dev/shm
tmpfs tmpfs 1.9G 324K 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs tmpfs 380M 0 380M 0% /run/user/1005
tmpfs tmpfs 380M 0 380M 0% /run/user/0
2.6.2 内存空间监视器:free
一台电脑、服务器,内存、存储(磁盘)、处理器(cpu)、操作系统是最基本的组成。
free 就是用来监视 linux 系统使用内存的命令。
常用命令示例:
[root@VM_0_3_centos ~]# free -h
# 以人类可读方式展示内存使用情况,根据实际大小自动转换为 KB、MB、GB
total used free shared buff/cache available
Mem: 3.7G 275M 144M 48M 3.3G 3.1G
Swap: 2.0G 658M 1.4G
Mem 为物理内存使用情况,Swap 为虚拟内存使用情况(一般是划分一部分磁盘空间作为虚拟内存)。
total:总内存;3.7G 一般为 4G 内存机器。
used:已使用内存。
free:自由内存。
shared:共享内存。
buff/cache : 缓存,3.3G。
available:可用内存。
在以前没有 available 这个展示字段的时候,我们通常是将 free + buff/cache 的总量作为可用内存。
linux 系统的特性就是将不用的物理内存缓存起来,因为千万以为 free 的 144M 内存就是真实的系统剩余内存了。所以当前可用内存为 available:3.1G。
常用命令之二:定时查询内存
free -hs 5
# 每 5 秒显示内存使用情况,ctrl + c 终端
# -s:根据指定间隔显示内存使用情况,单位为秒
[root@localhost ca_ga]# free -hs 5
total used free shared buff/cache available
Mem: 62G 27G 359M 65M 34G 34G
Swap: 31G 6.7G 25G
total used free shared buff/cache available
Mem: 62G 27G 348M 65M 34G 34G
Swap: 31G 6.7G 25G
total used free shared buff/cache available
Mem: 62G 27G 354M 65M 34G 34G
Swap: 31G 6.7G 25G
^C
2.6.3 网络探测器:ping
ping 命令与 windows 下用 cmd 打出的 ping 命令相似,都是用来探测主机之间网络是否通畅。
常用命令示例:
ping www.baidu.com
# ping 域名或 ip,会一直显示 ping 结果,ctrl + c 中断
# 不同于 windows 的是,windos 上 ping - t 才会一直显示 ping 结果
[root@VM_0_3_centos ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=54 time=3.97 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=54 time=4.01 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=54 time=3.97 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=4 ttl=54 time=4.03 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=5 ttl=54 time=3.97 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 3.971/3.993/4.031/0.024 ms
从结果行第一行可以看到,baidu 的域名被转换成了 www.a.shifen.com,发送了 56 字节的数据。
而从第二行开始,是目标返回信息。目标受到的字节是 64,icmp_seq 就是受到包的序列号,ttl 是数据包的生存周期,time 是延时,3.97 毫秒。
最后三行是统计结果信息,发送了 5 个包,接收了 5 个包,一个包没有丢失,总共用时 4004 毫秒。min/avg/max/mdev 为最小 / 平均 / 最大 / 平均偏差(Mean Deviation)延时。
ttl 为 time to life,即 icmp 包在网络上的存活时间。
常用 ping 命令示例:
ping -c 3 -i 3 -s 1024 -t 255 www.csdn.com
# -c:固定 ping 次数,本次为 3 次
# -i:发送间隔,本次为 3 秒
# -s:数据包大小,单位字节,本次 1024 为 1KB
# -t:255,ttl 值
[root@VM_0_3_centos ~]# ping -c 3 -i 3 -s 1024 -t 255 www.csdn.com
PING www.csdn.com (47.95.164.112) 1024(1052) bytes of data.
1032 bytes from 47.95.164.112 (47.95.164.112): icmp_seq=1 ttl=250 time=38.4 ms
1032 bytes from 47.95.164.112 (47.95.164.112): icmp_seq=2 ttl=250 time=38.3 ms
1032 bytes from 47.95.164.112 (47.95.164.112): icmp_seq=3 ttl=250 time=38.4 ms
--- www.csdn.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6006ms
rtt min/avg/max/mdev = 38.334/38.402/38.447/0.167 ms
ping 失败案例:
ping -c 3 -i 3 -s 1024 -t 255 www.yaojiaxiaoyuan.com
PING www.yaojiaxiaoyuan.com.qiniudns.com (1.1.1.1) 1024(1052) bytes of data.
--- www.yaojiaxiaoyuan.com.qiniudns.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 5999ms
可以看到,因为我的网站 www.yaojiaxiaoyuan.com 备案过期了,所以探测的时候发送 3 个包都丢失了,丢失率 100%。
ping 只能探测 ip 及域名,但是没法探测端口,下期的进阶命令会说道 telnet,可以远程探测端口。
2.6.4 cpu、进程及内存监视器:top
top 命令可以用于实时监控 cpu 的状态,显示系统中各个进程的资源占用情况。
常用命令示例:
top
# 对,无参数的 top 命令是最长用的资源监控命令。# 再往下会说些常用的交互命令。[root@VM_0_3_centos ~]# top
top - 23:03:23 up 127 days, 13:56, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 79 total, 1 running, 78 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3882032 total, 145996 free, 283752 used, 3452284 buff/cache
KiB Swap: 2097148 total, 1422392 free, 674756 used. 3218052 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
964 redis 20 0 142960 7244 988 S 0.3 0.2 168:01.87 redis-server
15515 root 20 0 260068 123108 3988 S 0.3 3.2 20:12.97 YDService
30378 root 20 0 155536 2132 1540 R 0.3 0.1 0:00.06 top
…………
# 后面还有很多,省略了
因为域名已经被注销了,目前没法截图,所以只能复制文字出来了。
结果第一行,为 uptime 命令的执行结果。后面进阶命令会说道,大家感兴趣可以自行执行下。
23:03:23 # 当前系统时间
up 127 days, 13:56 # 系统已运行 127 天 13 小时 56 分
2 users # 两个用户在登录
load average: 0.00, 0.01, 0.05 # 最近 1 分钟、5 分钟、15 分钟的负载情况
第二行,进程信息。共 79 个进程,1 个运行,78 个睡眠,停止的 0 个,僵死的 0 个。
第三行,cpu 状态信息。
0.2 us # 用户空间占比
0.0 sy # 内核空间占比
0.0 ni # 改变过优先级的进程占用比
99.7 id # 空闲 CPU 百分比
0.2 wa # I/ O 等待占用 cpu 百分比
0.0 hi # 硬中断占用 cpu 百分比
0.0 si # 软中断占用 cpu 百分比
0.0 st # 虚拟机占用比
第四行、第五行,分别是物理内存状态及虚拟内存状态。
total # 内存总量
free # 空闲内存
used # 已用内存
buff/cache # 缓存
第六行为空行,第七行以后就是系统中各进程的监控状态。
PID # 进程 id
USER # 用户,进程所有者
PR # 优先级
NI # nice 值,负值高优先
VIRT # 进程使用的虚拟内存总量,KB
RES # 所用物理内存大小,KB
SHR # 共享内存大小
S # 进程状态。S= 睡眠 sleep,R= 运行 running,D= 不可终端的休眠状态,T=stopped,Z=zombie 僵尸进程
%CPU # 占用 CPU 百分比
%MEM # 占用物理内存百分比
TIME+ # 进程使用 CPU 时间统计
COMMAND # 进程名
其他常用命令示例:
top -c
# 第七行后进程信息显示进程全路径
top -n 2
# -n:指定更新次数两次不再刷新,无参数会一直刷新
top 的交互模式:
按 1 可以显示多核 CPU 的信息。
按 b 可以高亮选中某列,再使用符号 ”<“ 或“>”来向左或向右降序排序。
关于资源监控还有许多很实用的工具:如 iostat、mpstat、iftop、vmstat、iotop、sar 等工具,有兴趣可以自行研究,或者等下一篇 linux 进阶命令出来再看一看。
三、结束语
这篇文断断续续写了一个多月,终于在今天完结了,下一篇是 linux 核心命令进阶及 shell 入门。
本来在大纲里已经把 shell 入门放进这篇来了,但是想想,还是放到下篇吧。就这样吧,linux 的命令实在太多了,但是常用的其实本篇大部分都囊括了。
可能还有些一些涉及文件上传、下载、安装的常用命令如 curl、wget、yum、rpm、ssh、scp 等等,还有系统管理、网络管理等等命令都放在下篇了。
最后,感谢老婆给了我这么大动力。感谢。
撒花,结束,退场。
公众号注册的比较晚,没有评论功能,所以一般用来发长文。
知识星球相当于技术朋友圈,有问题大家可以提问,讨论。
欢迎关注我的公众号:姚毛毛的博客
欢迎加入我的知识星球,目前免费哦。
知识星球:姚毛毛的私密花园