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
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 命令类似于一次性闹钟,到了指定时间执行完操作后任务则会自动删除。
at 20:25
cp /usr/local/nginx/logs/error.log /usr/local/nginx/logs/error.log_bat
at -l
atrm 1
通过下面可以看到执行完任务后再用at -l查看不到任务了。
crond服务
crontab -e
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改成你要移除的端口) |
新增和移除指定端口都需要重启防火墙服务,可以通过组合命令执行一条命令即可
firewall-cmd --permanent --zone=public --add-port=8080/tcp && firewall-cmd --reload
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目录下
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
- 系统启动的天数为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 | 挂载目录 |
4.3.查看显存使用情况
nvidia-smi
4.4.查看服务器上传和下载带宽
使用speedtest工具查看带宽
yum -y install git
git clone https://github.com/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
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 条件
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
DIR=/home/testDir
if [ ! -d $DIR ]
then
echo "创建目录 $DIR"
mkdir -p $DIR
exit 1
else
echo "$DIR 已存在!"
fi
echo "退出程序!"
7.用户管理和文件权限
7.1.用户管理
添加用户组 groupadd 用户组名
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.设置开机自动连接网络
ifconfig -a
cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33
ONBOOT=yes
:wq
9.2.设置linux系统的笔记本盒盖不休眠
vi /etc/systemd/logind.conf
HandleLidSwitch=lock
:wq
systemctl restart systemd-logind
9.3.命令行设置静态ip
ip addr
vim /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO="static"
IPADDR=192.168.0.134
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
service network restart
9.4.修改xftp默认的22端口为其它非标准端口
第一步:修改/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
Port 10022
第二步: 修改SELinux配置:
systemctl restart sshd.service
semanage port -m -t ssh_port_t -p tcp 10022
semanage port -l | grep ssh
如果成功会输出 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
/usr/local/nginx/sbin/nginx
配置开启自启动权限
chmod +x /etc/rc.d/rc.local
systemctl list-dependencies multi-user.target | grep rc-local
systemctl list-dependencies multi-user.target | grep rc-local
9.6 设置系统字符集
vi /etc/sysconfig/il8n
LANG="zh_CN.UTF-8"
LC_ALL="zh_CN.UTF-8"
source /etc/sysconfig/i18n
vi /root/.bash_profile
export LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
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服务配置
第一步:安装服务
yum -y install nfs-utils
systemctl start nfs
systemctl enable nfs
systemctl status nfs
第二步:创建挂载目录并设置权限
mkdir /opt/data
chmod 777 /opt/data
第三步:编辑共享目录访问权限
vi /etc/exports
/opt/data *(rw,)
systemctl restart nfs
9.7.2.客户端程序配置
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.com/hcache
chmod 755 hcache && mv hcache /usr/local/bin/
全局显示10个最大的被缓存文件
hcache --top 10
查看指定进程所使用的缓存使用情况
hcache -pid 进程pid
例如查看了nginx进程的缓存使用情况
9.8.3.手动回收Buffer&Cache
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches:
|