Linux必备知识(九)

echo命令

echo用于回显,比如

echo “hello world”

msg=“hello world”

echo $msg

$msg带上美元号表示这是一个变量。

回显系统变量。我们可以查下系统变量

env

然后显示某个系统变量,如HOME

echo $HOME

我们可以用echo做一些有趣的事,用-e选项。比如

echo -e “\aHello world”

\a表示发出警报,具体警报声音取决于发行版。

echo -e “This is a\b Linux Server.”

将显示This is Linux Server,去掉a,\b表示退格。

echo -e “This is a Linux\c Server”

\c将截断后面的字符,显示This is a Linux

echo -e “This is a Linux\n Server”

\n是换行转换。

echo -e “This is a\t Linux\t Server”

\t是制表符,输出tab间隔。

我们可以将echo的内容重定向到文件。

echo “Logfile started: $(date +’%D %T’)” >log.txt


bash 历史命令

输入history,可以看到之前输过的命令列表。

history

如果这台服务器是您自己维护的,可能觉得没什么大不了的,但要是是别人维护的服务器,能查出命令的历史就很有用了。通过查询,我们可以知道当前用户或其他用户都做了什么事情。

如果需要重新执行之前的命令,只需执行

!<列出的数字>

比如通过查询 history知道 56号命令是 docker –version,可以执行

!56

有些命令需要管理员权限,可以加上sudo

sudo !56

有时希望看到历史命令的时间,可以修改用户目录下的 .bashrc文件。

添加一行:

HISTTIMEFORMAT=”%Y-%m-%d %T “

注销重新登录后,输入history就会看到命令的执行时间。

.bashrc中还有默认一行

HISTCONTROL=ignoreboth

表示忽略重复行,以及不记录空格开头的命令。

比如我们输入命令:”  apt install nginx”,注意前面有空格。命令是执行了,但未被记录在history中,这在有些场景是有用的,有些带敏感信息的命令不希望被记录,可以在命令前加空格。

我们可以查最后几个历史命令,如

history 4 

表示查最后4条命令。

history当前可以连接管道,比如查看装了什么软件:

history | grep apt

有两个技巧:

  1. 某个命令因为权限不够不能执行,需要重新加sudo执行,只需输 sudo !!,这样就会自动以sudo运行最近一个命令。
  2. 按ctrl+r,然后输入要查找的关键字,会自动查找到匹配到历史命令。如果找到的不是你要的命令,再按ctrl+r进行下一条匹配。退出按ctrl+c。


如果您有root或sudo权限,可以切换到其他用户,查找其他用户的历史命令。


dnf命令

每个linux发行版都有自己独特的包管理器,但dnf是流行的包管理器,几乎所有的linux发行版都支持。

安装htop试试

sudo dnf install htop

如果我们事先不知道包名称,可以用dnf的搜索功能。

dnf search apache

可以查到很多包含这个关键字的包,能查到在ubuntu中apache的包是httpd,之后就可以通过 sudo dnf install httpd来安装了。

查看系统中已安装的包

dnf list installed

查看存储库最近更新的包

dnf list recent

可以同时安装多个软件包

sudo dnf install alacritty ulauncher

删除软件包

sudo dnf remove htop

也可以同时删除多个软件包

sudo dnf remove alacritty ulauncher

更新软件包,比如更新firefox

sudo dnf upgrade firefox

不带具体的软件包名称,升级系统中所有的软件包,这个很重要,我们应该经常升级

sudo dnf upgrade

保持软件最新很重要,因为可能包括一些安全的更新,但有时我们会忘掉定时升级,好在dnf提供了自动升级的功能

sudo dnf install dnf-automatic

安装之后,再编辑 /etc/dnf/automatic.conf

将upgrade_type改成

upgrade_type=security

默认的default将安装所有更新,而security只安装安全更新,对于服务器来说,这个更合适。

在本小节结束之前,再介绍dnf有用的命令:

有时软件包碰到问题,需要重新安装排障,可以使用reinstall

如事先已安装htop

sudo dnf install htop

再来重装

sudo dnf reinstall htop

前面介绍dnf remove时提到它会自动删除依赖项,但在某些场景下,可能未能正确地删除依赖项,可以定期执行

sudo dnf autoremove


理解内存和交换区的用法

本系列前面有谈到过htop,通过htop可以方便查看内存、cpu等状况。我们也可以不借助第三方软件查看。

第一个命令是 free

free

可以查看内存情况,我们也可以以兆字节显示

free -m

显示的结果中,最重要的是 available 列,它显示了当前我们可用的内存还有多少。

还有free内存,有人可能觉得奇怪,它与available有什么区别?

实际上,我们只需关心available列即可,available较多的时候,为提高效率,用来当缓存,剩下的free内存表示目前实际空闲的数量。一旦应用程序需要内存,可以马上腾出缓存的内存。总之,我们只需关心available即可。

我们还看到Swap,used是0,这是好的。我们希望swap的使用永远是0,因为swap是后备内存,当内存用光了动用硬盘的一块区域代替,硬盘相对于内存而言是非常非常慢的,会极大降低性能。目的是为了在内存不足时让应用程序运行起来。目前有些社区的观点是不配置swap,说它只会损害性能,实际是不对的,使用一点swap没什么大不了,有时在内存用光时还会挽救你,而且现在存储硬盘这么便宜,配些swap很合理。

我们可能好奇,系统是如何计算使用swap的,实际有个swappiness值。输入

sysctl vm.swappiness

查看值,不少发行版默认值是 60 。

这个数值越小代表使用swap的概率越小。

有些管理员会考虑修改该值以提高性能。

如果将swappiness设成0,是不是就是禁用swap了?

不是的。

设为0,系统只会尽其所能尽量不用swap,但不是禁用,在紧急必须使用时也是会启用swap的。

发表评论

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