文章目录
- 1.基础知识
- 1.1.常规命令
- 1.2.重定向符号,管道符号,通配符号,&&符号
- 1.3.vim文本编辑器
- 1.4.定时任务
- 1.5.防火墙firewall-cmd命令
- 1.6.scp远程上传下载文件
- 2.查询服务器硬件信息
- 3.systemctl服务管理命令
- 4.资源监控命令
- 4.1.查看系统的负载信息
- 4.2.查看内存硬盘使用情况
- 4.3.查看显存使用情况
- 4.4.查看服务器上传和下载带宽
- 5.查看系统日志
- 6.shell脚本入门
- 6.1.编写脚本
- 6.2.流程控制和for循环
- 6.3.文件权限判断和运算符
- 7.用户管理和文件权限
- 7.1.用户管理
- 7.2.文件权限
- 8.存储结构和磁盘划分
- 9.其它工具命令
- 9.1.设置开机自动连接网络
- 9.2.设置linux系统的笔记本盒盖不休眠
- 9.3.命令行设置静态ip
- 9.4.修改xftp默认的22端口为其它非标准端口
- 9.5.开启自启动服务
- 9.6 设置系统字符集为UTF8
- 9.7. 安装nfs挂载共享存储
- 9.7.1.nfs服务配置
- 9.7.2.客户端程序配置
- 9.8.查看Buffer&Cache被哪些进程占用
- 9.8.1.Buffer和Cache概念
- 9.8.2.hcache工具下载使用**
- 9.8.3.手动回收Buffer&Cache
1.基础知识
1.1.常规命令
命令 | 描述 |
---|---|
pwd | 查看工作目录,例:pwd 输出 /root |
cd | 切换目录,例:cd /home |
ls | ls用于显示目录的文件,例:ls -la /root (加-l参数查看文件的详细信息,-a 参数查看所有文件包含隐藏文件) |
cp | 文件复制,例 :cp -R /home/test1 /home/test2 (加 -R 表示递归复制目录和文件,把目录/home/test1下文件复制到/home/test2) |
mv | 文件移动,例: mv -R /home/test1 /home/test2 (加 -R 表示递归移动目录和文件,把目录/home/test1下文件复制到/home/test2) |
rm | 文件删除,例:rm -rf /home/test2 (加 -r 表示递归删除目录和文件,加 -f 表示强制删除文件) |
mkdir | 创建目录,例: mkdir -p /home/test2/test3 (加 -p 表示如果父目录不存在,则会递归创建,不加要求/home/test2目录必须存在) |
echo | 打印信息到控制台,例: echo hello word 输出hello word |
cat | 查看文本内容,例: cat -n /usr/local/nginx/conf/nginx.conf (加-n参数显示行号) |
more | 分页查看文本内容,例more /usr/local/nginx/conf/nginx.conf (可以使用空格或回车或者S下翻页) |
tail | 查看实时日志文件,例: tail -f /usr/local/nginx/logs/access.log |
reboot | 重启系统 |
poweroff | 关机 |
top | 查看服务器运行情况 |
ps -ef | grep java | 查看java进程信息 |
wc | 统计文本的行数,字数,字节数 例: wc -lwc /etc/passwd (-l 显示行数,-w 显示字数,-c 显示字节数) |
grep | 在文件中找到内容在多少行例( -n 表示显示行号, http是查找的内容,nginx.conf是要查找的文件) : grep -n http /usr/local/nginx/conf/nginx.conf 输出 28:http { |
find | 查看文件位置,例(在/目录下查找文件名nginx.conf所在位置): find / -name ‘nginx.conf’ 输出/usr/local/nginx/conf/nginx.conf |
kill | 杀死进程 例:kill 1211(杀死进程id为1211的程序,等同 kill -15 1211) kill -9 1211 (强制杀死进程id为1211的程序)killall java (杀死某个服务的所有进程) |
下载文件命令
#用下载资源文件
wget [参数] 下载地址
参数 | 描述 |
---|---|
-b | 后台下载模式 |
-p | 下载到指定目录 |
-t | 最大尝试次数 |
-c | 断点续传 |
-p | 下载页面所有资源 |
-r | 递归下载 |
日期命令
#显示默认格式的日期
date
2020年 05月 04日 星期一 23:40:34 CST
#按照指定格式显示
date "+%Y-%m-%d %H:%M:%S"
2020-05-04 23:39:48
#设置时间为2020年5月3号
date -s '20200503 8:20:00'
Sun May 3 08:20:00 CST 2020
tar文件压缩或解压
#压缩文件
tar -zcvf test1.tar.gz /home/test1
tar -cvf test2.tar /home/test1
#解压文件
tar -zxvf test1.tar.gz
tar -xvf test2.tar
参数 | 描述 |
---|---|
-c | 创建压缩文件 |
-x | 解压文件 |
-t | 查看压缩文件里面有哪些内容 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
1.2.重定向符号,管道符号,通配符号,&&符号
重定向符号
符号 | 描述 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件(覆盖之前的) |
命令 2> 文件 | 将错误输出重定向到一个文件(覆盖之前的) |
命令 >> 文件 | 将标准输出重定向到一个文件(追加) |
命令 2>> 文件 | 将错误输出重定向到一个文件(追加) |
命令 >> 文件 2>&1 或 &>> | 将标准和错误共同输出到文件(追加) |
命令 >/dev/null | /dev/null 称之为黑洞文件,往这个地方输出的等同删除数据 |
例如把硬盘使用情况保存到文件中
df -h > /root/df.txt
#查看这个文件
cat /root/df.txt
管道符号
| 可以把命令组合在一起,如 命令A | 命令B | 命令C | …
ps -ef | grep java
通配符号
* 表示匹配所有
ls -l /dev/sda*
&&符号
&& 表示前一条命令执行成功时,才执行后一条命令 ,如下先切换到home目录下再列出home目录下所有文件
cd /home && ls
1.3.vim文本编辑器
vim /usr/local/nginx/logs/error.log
vim编辑模式中常用的命令
命令 | 作用 |
---|---|
dd | 删除(剪切)光标所在整行 |
5dd | 删除(剪切)光标开始的5行 |
yy | 复制光标所在整行 |
5yy | 复制光标开始的5行 |
n | 显示搜索命令定位的以下个字符串 |
N | 显示搜索命令定位到的上个字符 |
u | 撤销上一布操作 |
p | 将之前删除或复制过的数据粘贴到光标后面 |
G | 跳到文件尾行 |
gg | 调到文件首行 |
末行模式中可用的命令
按Shift键退出编辑模式进入末行模式
命令命令 | 作用 |
---|---|
:w | 保存 |
:q | 退出 |
:q! | 强制退出 |
:wq! | 强制保存退出 |
:set nu | 显示行号 |
:整数 | 跳转到改行 |
: s/one/two | 将当前光标所在行的第一个one替换成two (s前面没空格,因md不能转义导致加的) |
: s/one/two/g | 将当前光标所在行的所有one替换成two (s前面没空格,因md不能转义导致加的) |
:%s/one/two/g | 将全文中的所有one替换成two |
?字符串 | 在文本中从下往上搜索字符串 |
/字符串 | 在文本中重上往下搜索字符串 |
1.4.定时任务
at命令
at 命令类似于一次性闹钟,到了指定时间执行完操作后任务则会自动删除。
#在20:25执行cp命令备份nginx的error.log文件
at 20:25
cp /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error.log_bat
#通过 ctrl+d退出编辑模式
#查看已有的定时任务
at -l
#删除任务Id为1的定时任务,通过 at-l能查看到
atrm 1
通过下面可以看到执行完任务后再用at -l查看不到任务了。
crond服务
#创建任务
crontab -e
#例如创建每天晚上备份nginx的error.log日志
35 20 * * * cp /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error.log_bat2
#查看任务
crontab -l
定时任务表达式 配置顺序为 分 时 日 月 星期 命令
字段 | 作用 |
---|---|
分 | 取值0~59 |
时 | 取值0~23 |
日 | 取值1~31 |
月 | 取值1~12 |
星期 | 取值0~7的任意整数,其中0与7为星期日 |
命令 | 要执行的命令或者脚本文件 |
1.5.防火墙firewall-cmd命令
OSI网络模型需要了解下: 点我跳转
命令 | 功能描述 |
---|---|
firewall-cmd --list-ports | 查看防火墙已开放的所有端口 |
firewall-cmd --permanent --zone=public --add-port=8080/tcp | 开放指定端口,(把8080改成你需要开放的端口) |
firewall-cmd --reload | 重启防火墙(让新配置的端口生效) |
firewall-cmd --permanent --query-port=8080/tcp | 检测端口是否开放,(把8080改成你要查的端口) |
firewall-cmd --zone=public --remove-port=8080/tcp --permanent | 移除指定端口,(把8080改成你要移除的端口) |
新增和移除指定端口都需要重启防火墙服务,可以通过组合命令执行一条命令即可
#添加8080端口,并让防火墙生效
firewall-cmd --permanent --zone=public --add-port=8080/tcp && firewall-cmd --reload
#移除8080端口,并让防火墙生效
firewall-cmd --zone=public --remove-port=8080/tcp && firewall-cmd --reload
1.6.scp远程上传下载文件
Linux scp 命令用于 Linux 之间复制文件和目录,scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令,scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
命令使用: scp [可选参数] file_source file_target
本地上传文件到远程服务器
例如把本地的redis安装包上传到192.168.52.131服务器上面的home目录下
#可用通过-p指定远程服务器的sftp的端口,默认22,如果使用的非标准端口则需要指定
scp -p 22 /usr/local/redis-5.0.9.tar.gz root@192.168.52.131:/home/
重远程服务器下载文件到本地
例如重192.168.52.131服务器上面下载redis安装包到本地的home目录下
scp root@192.168.52.131:/home/redis-5.0.9.tar.gz /home/
2.查询服务器硬件信息
命令 | 描述 |
---|---|
lscpu | 查看cpu详细信息 |
fdisk -l | 查看硬盘详细信息 |
uname -a | 查看版本当前操作系统内核信息(打印内容: 内核名称 主机名 内核发行版本 节点名 系统时间 硬件名称 硬件平台 处理器类型 操作系统名称) |
cat /etc/redhat-release | 查看centos内核版本 |
ipconfig | 查看网卡信息 |
3.systemctl服务管理命令
例如关闭防火墙服务
systemctl stop firewalld.service
命令 | 描述 |
---|---|
systemctl start foo.service | 启动服务 |
systemctl restart foo.service | 重启服务 |
systemctl stop foo.service | 停止服务 |
systemctl reload foo.service | 重新加载服务的配置文件 |
systemctl status foo.service | 查看服务的状态 |
systemctl enable foo.service | 开机自动启动 |
systemctl disable foo.service | 开启不自动启动 |
systemctl is-enabled foo.service | 查看特定服务是否为开机自动启动 |
systemctl list-unit-files --type=service | 查看各个级别下服务的启动与禁用状态 |
4.资源监控命令
4.1.查看系统的负载信息
使用uptime命令查看负载信息
uptime
#17:10:43 up 158 days, 21:33, 2 users, load average: 0.41, 0.29, 0.29
- 系统启动的天数为158,共2个用户使用
- load average为负载值,负载值越低约好,尽量不要长期超过5
4.2.查看内存硬盘使用情况
使用free -h查看内存使用情况
free -h
# total used free shared buff/cache available
#Mem: 62G 47G 5.9G 1.5G 9.4G 13G
参数 | 描述 |
---|---|
total | 内存总量 |
used | 用户已使用 |
free | 还有多少物理内存可用 |
shared | 进程共享的内存量 |
buff/cache | 磁盘缓存的内存量 |
available | 还可以被应用程序使用的物理内存大小 |
使用 df -h查看硬盘使用情况
df -h
#Filesystem Size Used Avail Use% Mounted on
#/dev/mapper/centos-root 453G 180G 250G 42% /
参数 | 描述 |
---|---|
Filesystem | 文件系统名 |
Size | 硬盘大小总量 |
Used | 用户已使用 |
Avail | 硬盘剩余空间 |
Use% | 使用率 |
Mounted on | 挂载目录 |
4.3.查看显存使用情况
nvidia-smi
4.4.查看服务器上传和下载带宽
使用speedtest工具查看带宽
#使用git下载测试软件
yum -y install git
git clone https://github/sivel/speedtest-cli.git
cd speedtest
chmod 755 *
./speedtest.py
5.查看系统日志
查看系统日志
more /var/log/messages
查看用户登录日志
#查看最近一条登录记录
who
#查看所有登录记录
last
查看历史执行过命令
默认是查看最近1000条历史命令,觉得1000少可以修改/etc/profile文件中的HISTSIZE属性
history
执行完可以看到在服务器上面之前执行过的命令记录
清除当前用户在本机执行过的命令记录
history -c
6.shell脚本入门
6.1.编写脚本
编写脚本并接受args参数,脚本中通过$1接收第一个参数,$2第二个,…
vi test.sh
#!/bin/bash
echo "当前脚本的名称:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
#给脚本设置执行的权限
chmod u+x test.sh
#执行脚本 下面两种方式效果是一样的
./test.sh start --port=8080
sh test.sh start --port=8080
设置shell脚本字符编码为unix
有时候shell脚本是在window上编写保存的,内容格式为doc则执行会报错,需要修改成unix编码
vi test.sh
set ff
set ff=unix
:wq
6.2.流程控制和for循环
if条件选择语句
#单if判断
if 条件
then
fi
#多条件判断
if 条件1
then
elif 条件2
then
else
fi
- 编写脚本test2.sh
- 然后执行 sh test.sh 0 控制台会输出为 参数一是0
#!/bin/bash
#多条件判断
if [ $1 -eq 0 ]
then
echo '参数一是0'
elif [ $1 -eq 1 ]
then
echo '参数一是1'
else
echo '参数一非0和1'
fi
case条件选择语句
- 编写test3.sh脚本内容如下代码块
- 执行 test3.sh 1 控制台会输出 参数一是 1
#!/bin/bash
case $1 in
1)
echo '参数一是 1'
;;
2)
echo '参数一是 2'
;;
*)
echo '其它选项,参数一是非1和2的值'
esac
for条件循环语
servers=('manager.jar' 'monitor.jar' 'gateway.jar')
for server in ${servers[@]};
do
echo $server
done
6.3.文件权限判断和运算符
文件权限判断语句
命令 | 作用 |
---|---|
-d | 目录是否存在 |
-e | 文件是否存在 |
-r | 是否有权限读取 |
-w | 是否有权限写入 |
-x | 是否有权限执行 |
整数比较运算符
命令 | 作用 | 等同于 |
---|---|---|
-eq | 是否等于 | == |
-ne | 是否不等于 | != |
-gt | 是否大于 | > |
-lt | 是否小于 | < |
-le | 是否等于或小于 | <= |
-ge | 是否大于或等于 | >= |
字符串比较运算符
命令 | 作用 |
---|---|
= | 字符是否相等 |
!= | 字符是否不相等 |
-z | 判断字符是否为空 |
创建test3.sh脚本并执行两次脚本出现下面两种情况
- 1.目录不存在则创建并退出脚本
- 2.目录存在则不创建,打印退出程序!信息
vi test3.sh
#!/bin/bash
# 创建变量存放目录路径
DIR=/home/testDir
# 判断目录是否存在,如果不存在则创建目录 -d为存在,前面加!取相反条件
if [ ! -d $DIR ]
then
echo "创建目录 $DIR"
mkdir -p $DIR
#执行exit 1 退出脚本不执行后面echo "退出程序!"语句。
exit 1
else
echo "$DIR 已存在!"
fi
echo "退出程序!"
# :wq保存,设置权限
7.用户管理和文件权限
7.1.用户管理
添加用户组
groupadd 用户组名
#添加名称为testGroup的用户组
groupadd testGroup
添加用户
useradd [选项] 用户名
参数 | 说明 |
---|---|
-d | 指定用户的家目录(默认 /home/username) |
-e | 账号到期时间,格式为 YYYY-MM-DD |
-u | 指定该用户的默认UID |
-g | 指定一个初始的用户基本组(必须已存在) |
-G | 指定一个或多个扩展的用户组 |
-N | 不创建与用户同名的基本用户组 |
-s | 指定改用户的默认Shell解释器 |
useradd -u 8888 -g testGroup test
修改用户
usermod [选项] 用户名
参数 | 说明 |
---|---|
-c | 添加用户账号的备注信息 |
-d -m | -d -m连着用,重新指定用户的工作目录并自动把旧的数据迁移过去 |
-e | 用户到期时间 |
-g | 变更所属的用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登录 |
-U | 解锁用户让其允许登录系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
修改用户密码
passwd命令用于修改密码,过期时间,认证信息等,
格式为: passwd [选项] 用户名
参数 | 作用 |
---|---|
-l | 锁定用户,禁止其登录 |
-u | 解除锁定,允许用户登录 |
-d | 使该用户可用空密码登录系统 |
-e | 强制用户在下次登录是修改密码 |
-S | 显示用户密码是否被锁定,以及密码加密的算法 |
删除用户
格式为 userdel [选项] 用户名
参数 | 说明 |
---|---|
-f | 强制删除用户 |
-r | 强制删除用户及用户工作目录 |
7.2.文件权限
给文件分用户组
格式为 chown [参数] 用户:用户组 文件名或目录
chown test:testGroup 文件名或目录名
#递归给目录下所有文件和目录分组
chown -R test:testGroup 目录名
chmod 777 test.sh
- chmod 777 test.sh 表示该文件对应的 [所有者,文件所属组,其他用户]都有读写执行权限。
- chmod 755 test.sh 表示该文件所有者有读写执行权限,[文件所属组,其他用户]只有读和执行权限
- 777中,第一位数值表示文件所有者权限,第二位表示文件所属组权限,第三位表示其他用户权限
通过ls -l可以查看文件权限 - 7包含读写和执行权限, 6包含读写权限,5包含读和执行权限,4代表只有读权限
上图第一列字母对应为下表的 |读|写|执行 |读|写|执行 |读|写|执行 ,权限字母对应的数值参照下表格
权限分配 | 文件所有者 | 文件所属组 | 其他用户 | ||||||
---|---|---|---|---|---|---|---|---|---|
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
8.存储结构和磁盘划分
存储结构
目录名称 | 目录描述 |
---|---|
/boot | 开机需要的文件 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户家目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机需要的函数库 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设置文件的目录 |
/opt | 放置第三放的软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 临时文件 |
/proc | 虚拟文件系统,例如 内核,进程等 |
/usr/local | 用户自行按照的软件 |
/usr/share | 帮助和说明文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件发生错误时,将一些丢失的文件片段放到这 |
物理设备的命名规则
#查看硬盘信息
df -h
硬件设备 | Filesystem名称 |
---|---|
IDE设备 | /dev/hd[a-p] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
IDE设备很少见,基本都是’/dev/sd’开头的设备
挂载硬件设备
mount用于把硬盘挂载到指定的目录
mount /dev/sdb3 /backup
卸载硬盘
umount用于取消硬盘的挂载
umount /dev/sdb3
9.其它工具命令
9.1.设置开机自动连接网络
#1.先查看网络配置情况命令
ifconfig -a
#2.前往网络配置目录
cd /etc/sysconfig/network-scripts/
#3.找到网卡配置,类似于 ifcfg-eth0 的文件。在此提醒大家注意,最后的 eth0 即是你的网络名称,如果你的网络名称不是 eth0,则此处可能有所不同。比如,我的网络名称为 ens33,这里便是 ifcfg-ens33。
vi ifcfg-ens33
ONBOOT=yes # 把此处改成yes
:wq
#可以reboot重启系统测试
9.2.设置linux系统的笔记本盒盖不休眠
vi /etc/systemd/logind.conf
HandleLidSwitch=lock
:wq
#立即生效
systemctl restart systemd-logind
9.3.命令行设置静态ip
#查看当前ip对应的网卡号,如ifcfg-eth0
ip addr
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 修改ip为静态的,把BOOTPROTO=dhcp 改成=static
BOOTPROTO="static"
#添加3行
#静态IP
IPADDR=192.168.0.134
#子网掩码
NETMASK=255.255.255.0
#网关或者路由地址
GATEWAY=192.168.0.1
#按:wq保存
#重启网络配置
service network restart
9.4.修改xftp默认的22端口为其它非标准端口
第一步:修改/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
#找到行下面Port 22行,然后再下面添加一行使用10022作为xftp端口
#Port 22
#添加一行
Port 10022
#:wq保存退出
第二步: 修改SELinux配置:
systemctl restart sshd.service
semanage port -m -t ssh_port_t -p tcp 10022
#然后确认一下是否添加进去
semanage port -l | grep ssh
#如果添加错了可以通过下面的命令删除10022端口
#semanage port -d -t http_port_t -p tcp 10022
如果成功会输出 ssh_port_t tcp 10022, 22
第三步: 修改firewall配置
执行下面命令开放防火墙端口并重启防火墙服务。
firewall-cmd --zone=public --add-port=10022/tcp --permanent && firewall-cmd --reload
第四步: 重启ssh服务
systemctl restart sshd.service
第五步: 测试新端口的ssh连接
ssh xx.xx.xx.xx -p 10022
9.5.开启自启动服务
编辑文件
vi /etc/rc.d/rc.local
#添加nginx开机自动启动命令
/usr/local/nginx/sbin/nginx
# :wq保存修改
配置开启自启动权限
chmod +x /etc/rc.d/rc.local
#执行下面命令没有输出则需要执行第二行命令systemctl daemon-reload启动开机自启动服务
systemctl list-dependencies multi-user.target | grep rc-local
#systemctl daemon-reload
#再次执行命令可以看到 ├─rc-local.service信息表示启动成功
systemctl list-dependencies multi-user.target | grep rc-local
9.6 设置系统字符集为UTF8
查看系统使用的字符集
echo $LANG
如果不是UTF8可以设置下
vi /etc/sysconfig/il8n
#添加下面两行
LANG="zh_CN.UTF-8"
LC_ALL="zh_CN.UTF-8"
#:wq保存退出,执行下面让配置文件生效
source /etc/sysconfig/i18n
#编辑环境变量配置
vi /root/.bash_profile
#添加下面两行
export LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
#:wq保存退出,执行source让环境变量生效
source /root/.bash_profile
9.7. 安装nfs挂载共享存储
安装nfs可以使多台服务器的文件资源共享
- 准备2台及以上机器测试,例:192.168.0.100,192.168.0.101,…服务器
- 在192.168.0.100服务器安装nfs服务
- 在192.168.0.101服务器把目录挂载到nfs服务上面
9.7.1.nfs服务配置
第一步:安装服务
#安装nfs服务
yum -y install nfs-utils
#启动nfs服务
systemctl start nfs
#设置开机自启动
systemctl enable nfs
#查看服务状态
systemctl status nfs
第二步:创建挂载目录并设置权限
mkdir /opt/data
chmod 777 /opt/data
第三步:编辑共享目录访问权限
vi /etc/exports
# *表示所有的客户机都可以挂接此目录,rw表示读写权限
/opt/data *(rw,)
#保存完需要重启nfs
systemctl restart nfs
9.7.2.客户端程序配置
#挂载到nfs服务端的路径 本地路径
mount -t nfs 192.168.0.100:/opt/data /opt/data
#取消挂载
umount /opt/data
然后测试上传文件到192.168.0.100或者101任意一台机器上面的/opt/data目录下,另一台机器上面的路径的/opt/data也可以看到这个文件。
9.8.查看Buffer&Cache被哪些进程占用
9.8.1.Buffer和Cache概念
Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储。
Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。
Linux 中“一切皆文件”,平时提到的“文件”是普通文件,磁盘是块设备文件。
在读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互;而读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/O“。这两种读写方式所使用的缓存是不同的,也就是文中所讲的 Cache 和 Buffer 区别。
Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。
Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。
从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处,应用程序可以在数据真正落盘前,就返回去做其他工作。
从读的角度来说,既可以加速读取那些需要频繁访问的数据,也降低了频繁 I/O 对磁盘的压力。
9.8.2.hcache工具下载使用**
#下载
wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud/hcache
chmod 755 hcache && mv hcache /usr/local/bin/
全局显示10个最大的被缓存文件
hcache --top 10
查看指定进程所使用的缓存使用情况
hcache -pid 进程pid
例如查看了nginx进程的缓存使用情况
9.8.3.手动回收Buffer&Cache
#清除pagecache
echo 1 > /proc/sys/vm/drop_caches
#清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache:
echo 2 > /proc/sys/vm/drop_caches
#清除pagecache和slab分配器中的缓存对象
echo 3 > /proc/sys/vm/drop_caches:
更多推荐
linux常用命令及运维工具汇总
发布评论