文章目录
本地环境搭建 Linux 服务器
1.示例 Vmware 安装迷你版的 Centos,Nat 模式可访问外网
为了节省文章篇幅,环境安装及网络配置查看如下:
2.也可使用云上服务器(腾讯云、阿里云等等)
这个直接购买云服务器方便很多,看看最近是否有活动,买了一台1核2G的腾讯云服务器玩玩,算下来是一个月7.5,加上域名,100大洋。
3.终端工具使用 Xshell、Xftp、SecureCRT 等等
基础知识篇章
基本操作命令
1.ls 命令:
功能:对于目录,该命令列出该目录下的所有子目录和文件。
示例: ls -l
2.pwd 命令:
功能:显示用户当前所在的目录
pwd
图示:
3.touch 命令:
功能:常用来新建一个文件。
[root@justdoit local]# touch test.txt
[root@justdoit local]# echo "Hello World">test.txt
[root@justdoit local]# cat test.txt
Hello World
[root@justdoit local]#
图示:
4.mkdir 指令:
功能:新建一个目录。
5.head/tail/cat/wc 指令:
6.Vim 编辑器技巧:
首尾跳转:
行首行尾跳转:
显示行数:
Vim 进入后,打上冒号,输入 set nu
删除行:
保存 wq 退出:
或者直接 ZZ 也是保存退出 。
操作系统管理
软件安装
日常安装方式: rpm、yum,推荐 yum,RPM 无法解决软件包的依赖关系。
[root@justdoit ~]# yum install -y wget
初识正则
^ :锁定行的开始 如:'^Example'匹配所有以Example开头的行。
$ :锁定行的结束 如:'Example$'匹配所有以Example结尾的行。
^$ :空行
日常查看配置文件,会有注释还有空行 !
为了方便查看具体配置,可去掉注释还有空行。
[root@Rucoding etc]# cat rsyslog.conf |grep -v "^#"|grep -v "^$"
grep "^#" , 过滤 rsyslog.conf 中的#打头的注释;
grep "^$" ,过滤 rsyslog.conf 中的空行。加上 -v 参数,反向选择。
Shell 命令解释器
Shell 编程基本函数
基本函数调用:
[root@Rucoding opt]# cat rucoding.sh
#!/bin/bash #指此脚本使用/bin/sh来解释执行
function coding () { #函数名称
echo "Toady,Rucoding!"
}
function codingcode () {
echo "ok"
}
coding #调用函数
codingcode #调用函数
[root@Rucoding opt]#
执行函数,调试时,可加参数 -x ,即 sh -x rucoding.sh
[root@Rucoding opt]# sh rucoding.sh
Toady,Rucoding!
ok
[root@Rucoding opt]#
#加参数 -x
[root@Rucoding opt]# sh -x rucoding.sh
+ coding
+ echo $'Toady,Rucoding\357\274\201'
Toady,Rucoding!
+ codingcode
+ echo ok
ok
[root@Rucoding opt]#
算数比较符
expr,用于计算变量等。
用法:expr 表达式
[root@Rucoding opt]# cat computer.sh
#!/bin/bash
x=50
y=100
val=`expr $x + $y`
echo "x + y : $val"
val=`expr $x - $y`
echo "x - y : $val"
val=`expr $x \* $y`
echo "x * y : $val"
val=`expr $y / $x`
echo "y / x : $val"
val=`expr $y % $x`
echo "y % x : $val"
if [ $x == $y ]
then
echo "x 等于 y"
fi
if [ $x != $y ]
then
echo "x 不等于 y"
fi
[root@Rucoding opt]#
定时任务(crontab)
基本格式:
示例:
每天早上 8 点 10 开启ssh服务:10 08 * * * systemctl start sshd
在线解析:
文本操作的三剑客
grep ==》擅长过滤
示例: 查询 server.xml 文件中包含"innodb_data"
[root@justdoit opt]# cat server.xml | grep "innodb_data"
innodb_data_home_dir = /www/server/data
innodb_data_file_path = ibdata1:10M:autoextend
[root@justdoit opt]#
sed ==》擅长取行、替换
示例:取 server.xml 文件中 的第19行
即
[root@justdoit opt]# sed -n "19p" server.xml
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[root@justdoit opt]#
替换:
示例: 注释掉 Example 打头的
[root@justdoit opt]# tail -f server.xml
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
Example #想要注释掉Example打头的
sed 参数解释:
-i :直接修改读取的文件内容,而不是输出到终端;
-e :直接在命令列模式上进行 sed 的动作编辑;
sed函数解释:
s:取代,可以直接进行取代;
[root@justdoit opt]# sed -i -e "s/^Example/#Example/" server.xml #执行
[root@justdoit opt]# tail -f server.xml
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
#Example #已注释
awk ==》过滤内容,擅长取列
示例:执行 df -hT,取输出的第2、3列
[root@justdoit ~]# df -hT |awk '{print $2,$3}'
文件传输
rz上传,sz下载命令。
安装:
[root@justdoit ~]# yum install -y lrzsz
rz的用法
在命令终端输入rz回车后,就会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件。
[root@Rucoding opt]# rz
sz的用法
sz命令可以单下载一个文件,也可以多个文件同时下载。
[root@Rucoding opt]# sz computer.sh rucoding.sh
lftp 传输
命令参数解释如下。
下载文件:
get xx.txt ##下载 xx.txt 文件
mget *.txt ##批量下载所有 txt 文件
mirror xxx/ ##将 xxx 目录整个的下载下来
上传文件:
put xx.txt ##上传 xx.txt 文件
mput *.txt ##批量上传所有 txt 文件
mirror -R xxx/ ##将 xxx 目录整个的上传
示例:
#!/bin/sh
HOST=192.168.137.130 #ip 地址
USER=test_sftp #账号密码信息
PASS=test_2020
echo "Starting to sftp..."
lftp -u ${USER},${PASS} sftp://${HOST} <<EOF
cd /usr/local/logfile
mget *.*
bye
EOF
echo "done"
ftp 传输
常用命令解释:
open:与 ftp 服务器相连接
lcd:目录名(进入本机目录)
mget 下载多个文件
get:下载文件
put:上传文件
格式:
ftp hostname 端口
如:ftp 192.168.137.100 2175 回车,记得先安装好 vsftpd。
图示脚本:
scp 传输方式
scp 命令可进行安全的远程文件拷贝。
简易写法:
scp [可选参数] file_source file_target
例如:
[root@justdoit opt]# scp -r server.xml root@192.168.137.100:/opt
图示:
文件共享
同一主机目录共享:
mount --bind 命令即可
##示例:/var/log/clamav/ 挂载到 /home/test/log_file/。
[root@justdoit opt]# scp -r server.xml root@192.168.137.100:/opt
##断开绑定:
[root@justdoit opt]# umount /home/test/log_file/
图示:
不同主机文件共享:
mount + nfs;
##先了解好相关 NFS、RPC 等知识,比如启动 NFS 之前,RPC 就要先启动了,
##否则 NFS 会无法向 RPC 注册;RPC 若重新启动时,原本注册的数据会不见吗等等。
a.服务端环境搭建:
服务器 ip:192.168.137.130
安装 nfs:
yum -y install nfs-utils rpcbind
图示:
配置 nfs:
示例代码:
[root@server01 ~]# mkdir /data
[root@server01 ~]#
[root@server01 ~]# echo “hello world” >> /data/index.html
[root@server01 ~]#
[root@server01 ~]# vim /etc/exports
[root@server01 ~]#
[root@server01 ~]# cat /etc/exports
/data 192.168.0.0/24(rw,no_root_squash,no_all_squash,sync)
[root@server01 ~]#
[root@server01 ~]# exportfs -r
[root@server01 ~]#
[root@server01 ~]# showmount -e localhost
Export list for localhost:
/data 192.168.0.0/24
[root@server01 ~]#
问题:
nfs 重启时提示:
rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
解决方式:
[root@server01 ~]# service rpcbind restart
停止 rpcbind: [确定]
正在启动 rpcbind: [确定]
[root@server01 ~]# service nfs start
[root@server01 ~]#
b.客户端配置:
客户端 ip:192.168.137.100
安装服务
$ yum -y install nfs-utils
创建挂载目录
$ mkdir /mnt/data
查看服务器共享目录信息
[root@client01 ~]# showmount -e 192.168.137.130
Export list for 192.168.137.130:
/data 192.168.137.*
[root@client01 ~]#
挂载共享:
[root@client01 ~]# mount -t nfs 192.168.137.130:/data /mnt/data -o proto=tcp -o nolock
[root@client01 ~]# df -hT #查看挂载情况
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 18G 14G 2.8G 84% /
tmpfs tmpfs 931M 519M 413M 56% /dev/shm
/dev/sda1 ext4 477M 52M 400M 12% /boot
192.168.137.130:/data
nfs 9.8G 23M 9.2G 1% /mnt/data
[root@client01 ~]# showmount -e 192.168.137.130
Export list for 192.168.137.130:
/data 192.168.137.*
[root@client01 ~]# cd /mnt/data/
[root@client01 data]# ls
index.html lost+found
[root@client01 data]# cat index.html
“hello world”
[root@client01 data]#
日志查看和搜查指令
1.cat 命令:
cat -n file_name 输出带行数编号的文件内容;
2.tail 命令:
指定的文件的最后部分输出
常用参数:
-f 循环读取 ;
-n<行数> 显示文件的尾部 n 行内容。
3.定位日志文件中的错误信息:
cat info.log | grep "error" -C 10
查看日志中出现关键字 “error” 的前后10行内容;
-C 参数:前后内容;
-A 参数:之后内容(After);
-B 参数:之前内容(Before)。
搜索某个文件匹配的字符串:
grep -rn ‘需查找的字符串’ xx.txt
例如:
[root@server01 log_file]# grep -rn "port" server.xml #查找 port 关键词
1:port = 3306
[root@server01 log_file]#
小结:
性能工具知识篇章
CPU 性能工具
top 指令:经常用来监控linux的系统状况,比如cpu、内存的使用。
例如,使用top命令查看所有java进程的状态:
[root@Rucoding opt]# top $(ps -e | grep java | awk '{print $1}' | sed 's/^/-p/')
第一行输出:
17:27:10 当前系统时间
11 days, 7:23 系统已连着运行了11天7小时23分钟
1 users 当前有1个用户登录系统
load average: 0.01, 0.02, 0.05 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。(跟uptime指令查看一样)
第二行输出: 进程任务
系统现在共有1个进程,其中处于运行中的0个,1个在休眠(sleep),stoped 状态的有0个,僵尸状态(zombie)的有0个。
后面三行是CPU、内存状态、交换分区指标,日常看第七行以下:各进程的运行状态监控:
PID 进程id
USER 进程所有者
PR 进程优先级
NI 值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb
RES 进程使用的、未被换出的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计
COMMAND 进程名称
内存性能工具
free 指令: 用来显示系统内存状态。
常用指令查看:
[root@Rucoding ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 602M 79M 372K 1.1G 1.0G
Swap: 1.0G 10M 1.0G
[root@Rucoding ~]#
ps 指令: 即process status,主要是查看当前运行的进程状态。
例如: 显示java所有进程
磁盘 I/O 性能工具
df 指令:用来检查Linux服务器的文件系统的磁盘空间使用情况。
常用指令查看:
[root@justdoit ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
ext4 18G 14G 2.7G 84% /
tmpfs tmpfs 931M 220K 931M 1% /dev/shm
/dev/sda1 ext4 477M 52M 400M 12% /boot
[root@justdoit ~]#
图示解释:
Filesystem:设备名称
Type:显示文件系统类型
Size:整体磁盘空间大小
Used:已使用的磁盘空间大小
Avail:剩余的磁盘空间大小
Use%:磁盘使用率
Mounted on:磁盘挂载的目录
网络性能工具
netstat 指令:用于显示各种网络相关的统计数据
找出程序运行的端口:
[root@justdoit ~]# netstat -ap |grep ssh
图示:
找出运行在指定端口的进程:
[root@Rucoding ~]# netstat -tnlp | grep ':8090'
找出运行在指定端口的进程:
[root@Rucoding ~]# netstat -tnlp | grep ':8090'
小结一段:
[root@Rucoding ~]# lsof -i | grep 14272 #根据进程pid查端口
docker-pr 14272 root4u IPv6 218434 0t0 TCP *:8090 (LISTEN)
[root@Rucoding ~]# lsof -i:8090 #根据端口查进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 14272 root4u IPv6 218434 0t0 TCP *:8090 (LISTEN)
[root@Rucoding ~]# netstat -nap | grep 14272 #根据进程pid查端口
tcp6 0 0 :::8090 :::*LISTEN 14272/docker-proxy
[root@Rucoding ~]# netstat -nap | grep 8090 #根据端口port查进程
tcp6 0 0 :::8090 :::*LISTEN 14272/docker-proxy
[root@Rucoding ~]#
工欲善其事必先利其器
在线分析诊断工具 Arthas
最近在浏览博客发现了 在线分析诊断工具 Arthas,挺实用的。之前,线上问题排查往往需要查网络、jps 等一系列操作,真的费时费力。现在,大多数的常见问题都可以使用 Arthas 轻松定位,迅速解决,省时省力。
Arthas 的安装和简单使用:
[root@Rucoding arthas]# wget https://alibaba.github.io/arthas/arthas-boot.jar
下载并启动 Demo:
[root@Rucoding arthas]# wget https://alibaba.github.io/arthas/arthas-demo.jar
[root@Rucoding arthas]# java -jar arthas-demo.jar
arthas-demo是一个简单的程序,每隔一秒生成一个随机数,再执行质因数分解,并打印出分解结果
启动arthas:
看到此界面就表示启动并关联成功啦。
交互模式下查看帮助 help:
查看 cpu 占用过高
上面的输出结果可以看到 id 为17的这个线程cpu占用率100%,这时通过 thread 加线程 id 输出该线程的栈信息。
更多常用的命令,可查看官方网站:
Linux 常用的强大工具神器
1、文本操作的三剑客:sed、awk、grep 指令
2、sz/rz:交互式文件传输,简单方便
3、htop 进程监控工具,替代 top 命令
图示:
码不停蹄,贵在实践。