—— 功能列表 ——
1. 服务器基础了解
① 基本查询
一台服务器刚到手,首先当然就是要先认识它啦
1) 查看系统信息
uname -a
2) 查看操作系统版本
cat /etc/redhat-release
3) 查看网络配置信息
ifconfig
4) 查看磁盘信息,加 -h 会将单位转化为 G,M 这些
df -h
5) 查看内存实用情况,-h 同上
free -h
② 修改主机名字
对于刚到手的服务器,主机名字通常是一堆乱码,很影响观感
这时候,只需要以下一句,然后重新连接服务器,就完成了
hostname <自定义名称>
2. 基础技巧
① 文件查找
很多情况下,我们想快速知道某个文件的位置,这时候就需要用到查找命令了
常见的查找命令有:find
,whereis
,which
1) 查找某目录下某个文件
文件名支持通配符,加上 -ls 可以顺带列出文件信息
find <目录名> -name <文件名> [-ls]
2) 查找命令机器邦族文件所在位置
whereis <命令名>(如 whereis ls)
3) 查找 PATH 下的可执行文件
which <文件名>(如 which ls)
通常来说,find
命令我们用的最多,可以满足基本的查找需求了
② 命令高亮
在很多 docker 容器中,ls 列出来的文件并没有高亮,看着很难受
而我们也知道,使用 ls --color
列出来的文件就有颜色
那其实修改也很简单,就是在 /etc/bashrc
文件中给 ls
命令起别名(alias),如下:
vim /etc/.bashrc
在文件最后面补上:alias ls='ls --color' 就完毕啦
3. 常见命令安装
各种 docker 容器通常为精简版的,很多命令都是 not found,这里列出各种命令的下载方法
1) 更新资源
apt-get update
2) 安装--ping
apt-get install iputils-ping
3) 安装--ps
apt-get install procps
4) 安装--sudo
apt-get install sudo
yum install sudo
5) 安装--service
yum install initscripts
6) 安装--ifconfig
yum install net-tools
7) 安装--ssh
yum install openssh
yum install openssh-server
yum install openssh-clients
4. 服务器通讯
① ssh 免密登录
ssh 免密登录的实现原理,就是在 A 服务器
上生成公钥,然后将公钥放到 B 服务器
上
往后 A 服务器
访问 B 服务器
时,如果 B 服务器
中检查到了 A 服务器
的公钥
就表明 A 服务器
被 B 服务器
信任,可以不需要输入 B 服务器
的密码而直接连接
明白了原理,实现起来思路就很清晰了,接下来是步骤:
1) 首先下载 ssh,以下三步(安装了服务端和客户端)
yum install openssh
yum install openssh-server
yum install openssh-clients
2) 然后检查配置文件,查看以下两个配置是否一样(默认应该都是这样的)
vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
这两个配置允许外网通过 ssh 连接该服务器
3) 如果发现不是这样,就修改它,同时需要重启 ssh 是指生效
service sshd restart
同样该命令可能不存在,就下载它
yum install initscripts
4) 然后在想要免密登录其他服务器的服务器中
生成公钥和私钥(一路回车到底就行了,不需要输入内容)
ssh-keygen -t rsa
其中 id_rsa 为私钥,id_rsa.pub 为公钥
5) 将该服务器的公钥拷贝到目标服务器
ssh-copy-id <目标服务器 IP 地址>
完成以上操作后,以后就可以直接通过 ssh <目标服务器 IP>
连接到该服务器,而无需密码了
这在很多场合下的作用很大,尤其是在需要自动访问的情况下,人不在旁边无法输入密码,就得靠免密登录了
② scp rsync 实现服务器之间传输文件
这个脚本是基于上边 ssh 免密登录的,用起来才丝滑,不然每次都要输入密码
一般情况下我们向其他服务器发送文件,使用的应该是 scp
命令
这个命令是将整一份文件都拷贝到目标服务器,若该服务器指定路径下已存在同名文件,则将其删除,命令示例如下:
以下指令将目标服务器,以 USER 身份放在指定 IP 的指定目录下
scp [-r] <目标文件全路径> <USER>@<IP>:<目标存放地址>
-r 表示递归复制,支持复制非空文件夹
但我们知道这样效率不高,如果能够实现同名文件只更改差异地方就好了,而 rsync
正是实现了这个功能,示例代码如下:
rsync -av <目标文件全路径> <USER>@<IP>:<目标存放地址>
-a 可以替代-r,除了能递归同步以外,还可以同步元信息(比如修改时间、权限等)
-v 可以将结果输出到终端,这样就可以看到哪些内容被同步了
③ xsync 脚本实现集群分发文件
上边第 ② 步做完,也可以实现基本的集群分发和保证基本的效率了,但每一次都需要手动输入服务器IP,目标存放地址,而且每次只能发送给一台服务器,这对一个集群来说就很不友好,所以我们基于 rsync
命令,再封装一个 xsync
命令,shell 脚本如下(参考:尚硅谷):
注意:里边的 hadoop001 这些,还要自行手动修改成自己集群的名字(如果没有配置 host 映射,则需要写入 IP 地址)
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
for host in hadoop001 hadoop002 hadoop003
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$(basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname root@$host:$pdir
else
echo $file does not exists!
fi
done
done
脚本编写完,执行以下赋予执行权限同时分发到集群中的各个服务器上
1) 给予执行权限
chmod 777 xsync
2) 分发到集群各台服务器(这里顺带测试看了脚本本身)
如果希望能直接使用 xsync 执行命令,则可以将其放到 bin 目录下(即:将 xsync 先放到 bin 目录下,再使用以下命令进行分发,就可以将该文件分发到各台服务器的 bin 目录了)
./xsync xsync
5. Vim 编辑器
① 出现中文乱码 (2021-10-3)
这种情况多出现在没有 vim 而新装上 vim 的时候
解决方法是在配置文件中加配置,同样找到 /etc/vimrc
,在最后添加:
set encoding=UTF-8
set langmenu=zh_CN.UTF-8
set fileencoding=utf-8
② Tab 键空格数过多 (2021-10-21)
在一些 vim 编辑器中,tab 键默认的空格数是 8,有时候看起来会太过于宽不舒服
要修改它也是在 /etc/vimrc
配置文件中进行,最后面添加:
set tabstop=4
其中 4 表示 4 个空格的长度,可以根据需求任意修改
③ 选择、复制、剪切、粘贴 (2021-10-21)
v + 光标移动 -> 按字符选择
V -> 按行选择
p -> 在光标之后粘贴内容
P -> 在光标之前粘贴内容
d -> v 或 V 选中后,进行剪切
y -> v 或 V 选中后,进行复制
yy -> 复制当前行,并自动使用 p 粘贴
:reg -> 查看剪切板内容
6. 内存管理
由于是个人练习(再加上穷- -),所以买的服务器是 1 和 2G 的,这到后面就出现了程序一多服务器直接死机的情况
那么怎么避免这种情况的出现呢?
这时,查看当前内存信息,决定要让哪些程序跑起来,就显得很重要啦
① free 指令探索 (2021-10-25)
该指令可以查看当前的内存总量,使用量,空闲量,缓存量以及可供程序使用量,如下图:
这张图是在启动了 tomcat,nginx, 3 个 docker,每个 docker 里各启动一个 zookeeper 的情况
可以看到,当前空闲量只剩 557M,这时如果我想再启动 3 个 Kafka(每个占 256M)就需要 768M,这是不是不够启动了呢?
一开始我也是这么想的,心想为什么后边的 buff/cache 那么高可不可以去掉
但后边经过了解才发现,原来 Linux 会自动将空闲的内存一部分作为缓存,来提高程序的运行速度
而这部分缓存,在我们需要其他程序需要用到时,将会自行释放出来给我们用
所以,真正看我们到底还能跑多少程序,并不是看 free,而应该看 available,这里边显示了我们还可以使用多少
所以,在启动了 3 个 Kafka 后,变成了下图:
可以清晰看到,很大一部分 buff/cache 腾出来了,而 3 个 Kafka 也成功启动并没有撑爆内存
嘛,虽说即使这样,也很难再跑其他程序就是了
下面再简单补充下 free 的用法
free -h 即 -human,代表人能看懂的,会自动转化成 K M G 等单位
-m 即全部单位转化为 M
-k 即全部单位转化为 K
-B 即全部单位转化为 B
② swap 交换分区解决内存不足问题 (2021-10-26)
很多时候会出现服务器内存不够使用的情况,这时如果不想多买服务器或者升级服务器,就可以考虑交换分区了
交换分区类似于 Windows 的虚拟内存,可以指定一部分磁盘空间当成内存使用
由于文章篇幅较长,这里单独写成了一篇,如下:
【Linux之轨迹】1核2G 内存不够怎么办?Swap 交换分区解决内存不足问题
…待续
趴在石头上的狮子,与巡回的大猩猩(IceClean)