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