Linux必备知识(十一)

Linux的平均负载

第一个命令是 uptime,它让我们了解服务器已运行多长时间。

uptime

除了告诉我们服务器在线多少时间外,还能看到平均负载情况。还可以通过文件来查看平均负载。

cat /proc/loadavg

之前我们提到过htop,它也可以查看 平均负载。输入 htop 查看下。

各种方式输出平均负载都有3个数字,分别什么意思呢?它分别代表前1分钟、前5分钟、前15分钟的平均负载。

之前的htop程序不仅可以看到负载情况,还能看到有几个CPU。我们可以通过文件查看更详细的CPU信息。

cat /proc/cpuinfo

如果查出有8个CPU核心,那么这3个数值某一个达到8就说明负荷已100%了。

1分钟、5分钟、15分钟的负载,我们要关注哪个呢?一般1分钟的负载可以忽略掉,5分钟及15分钟的平均负载更有意义些。打个比方,想象一个杂货铺只有一个营业员,当顾客结账时,营业员的负载就是100%,短时间1分钟内他的工作负荷很高不代表需要增加人手,而较长时间的高负荷工作则需要引起重视。


Linux文件归档(tar和gzip)

先介绍tar。tar可以将多个文件合并成一个文件,我们先复制一些文件测试,比如复制 /etc 文件夹到当前目录。为避免一些权限问题,修改副本文件夹的所有者。注意一定要选对副本etc文件夹,别加 / 选了实际的 /etc那就搞砸了。

sudo cp -r /etc .

sudo chown kelemi:kelemi -R etc 

tar类似于zip,但它不会压缩,主要用于移动文件,只需一个tar文件就包含了里面的很多文件。我们来创建目录etc的存档

tar -cf etc_backup.tar etc

选项 -c 表示创建;选项 -f 表示提供存档文件名。上面命令执行之后,就在当前目录产生了一个etc_backup.tar文件,包含 目录 /etc的所有内容。我们可以输入 ls -lh 查看当前目录的情况。命名为tar扩展名是非必需的,但为了让其他人能一眼看出来,最好按这些约定来用tar扩展名。

如果要列出tar文件的内容,可以输入

tar -tf etc_backup.tar

选项 -t 表示列出文件清单。结果在屏幕上显示大量文件列表,这是etc目录的所有文件列表。可以统计下行数:tar -tf etc_backup.tar | wc -l。为了显示更多信息,一般建议加 -v 选项,linux中 各命令的 -v 参数一般都表示详细。

tar -tvf etc_backup.tar

如果需要恢复存档的话,该如何操作呢?先用 rm -rf etc 删除文件夹,然后可以键入:

tar -xvf etc_backup.tar

其中 -x 表示解析拆分,一般也加上 -v 显示详细信息,参数 f 一般放在最后,因为后面要接着文件名。执行之后,etc文件夹又回来了。

下面来谈gzip,gzip用于压缩文件,比如我有一个大文件pi_sd_card.img,可以用gzip压缩

gzip pi_sd_card.img

gzip将pi_sd_card.img压缩并命名为 pi_sd_card.img.gz。能看到文件大小确实变小了。解压的话则用gunzip命令。

gunzip pi_sd_card.img.gz

下面我来看一下tar 和 gzip结合的例子。先删除 etc_backup.tar文件:rm etc_backup.tar。然后再来归档压缩 etc 目录。

tar -czvf etc_backup.tar.gz etc

选项 -z 表示将etc目录生成的的存档文件通过管道传给 gzip ,同样的我们加上 -v 选项显示详细,文件名一般约定用 tar.gz 结尾。可以通过 ls -lh 查看结果。

查看tar.gz文件与之前的 tar 完全一致,尽管已被压缩。

tar -tvf etc_backup.tar.gz

恢复压缩存档文件也与之前未压缩的恢复完全一致

tar -xvf etc_backup.tar.gz


Cat命令

cat命令是concatenate的缩写,用来连接文件,或者简单地将文件内容显示在终端上。

假设有两个文件 test_file_1.txt和test_file_2.txt,可以单独查看 比如 :cat test_file_1.txt 或 cat test_file_2.txt,也可以将这两个文件连接起来。

cat test_file_1.txt test_file_2.txt

可以将连接的文件创建新文件。

cat test_file_1.txt test_file_2.txt>combined.txt

cat可以添加行号,用 -n 选项 

cat -n combined.txt

输出的结果将显示行号。cat可以grep结合使用查找特定的内容。

cat combined.txt | grep cats

但这种方法不能很直观显示查到的内容,可以加上 –color 选项,以不同颜色标注查到的内容。

cat combined.txt | grep –color cats

着色 –color 是非常有用的选项,比如我们想查看ssh的端口是多少,就可以:

cat /etc/ssh/sshd_config | grep –color Port

而如果查找整个sshd_config将比较费劲,因为通过 cat /etc/ssh/sshd_config | wc -l    能看到有100多行。


diff命令

diff命令可以找出两个文件的不同之处。如果是比对两个完全不同的文件用diff命令是无意义的,一般用于比对文件修改前后的差别。

假设有两个一样的文件 file1.txt和file2.txt,我们比较下:

diff file1.txt file2.txt

没有任何输出,我们输入 echo $?,能看到输出0,说明两者是一致的。可以让它明确指出比较的情况,可以加参数 -s

diff -s file1.txt file2.txt

输出提示两个文件是一致的。

我们修改下file2.txt,再用diff比较下

diff file1.txt file2.txt

会列出哪些行是不同的

来看一个实际的例子,假设我们发现我们无法远程ssh登陆到服务器了。我们可以到现场进入系统,再比较/etc/ssh/目录下的sshd_config 和 sshd_config.bak文件。因为作为一个好习惯,我们在修改配置文件前一般先备份。

diff sshd_config sshd_config.bak

通过查看备份的ssh配置文件和实际在用的配置文件,我们或许能发现问题,比如端口不一致了等等。发现问题并作修改后,再重启服务 sudo systemctl restart ssh.

说下输出的意义,如图:

再来一个更有代表性的例子:

有一个好用的包可以对diff着色,使用户能更直接看到差异,这个包就是colordiff。

我们查一下确保已安装:

which colordiff

命令与diff 一致,比如:colordiff apache2.conf.1 apache2.conf.2

diff还可以加一个参数 -u 可以使我们更直观,它会详细列出文件不同的比较

diff -u apache2.conf.1 apache2.conf.2

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注