目录
| 目录 | 说明 |
|---|---|
| /root | root用户家目录 |
| /home | 家目录 |
| /usr | 用户目录 |
| /etc | 配置文件目录 |
| /dev | 设备文件目录 |
| /tmp | 临时文件目录 |
| /mnt | 挂载目录 |
cd 进入目录
- 进入目录
cd directory
mkdir 创建目录
- 创建目录
mkdir directory - 创建同级目录
mkdir {directory0,directory1} - 创建多级目录
mkdir -p directory,若目录存在则不创建 - 显示创建信息
mkdir -v directory
ls 查看目录
- 查看文件列表
ls directory - 查看文件属性
ls -l directory或者ll directory - 模糊匹配
ls *pem
tree 目录树状图
- 显示目录结构
tree directory - 有色彩的显示目录结构
tree -C directory
文件
rm 删除文件
- 删除文件
rm file - 强制删除
rm -f file - 删除目录
rm -r directory
mv 剪切文件
- 重命名文件
mv source_file dest_file - 将源文件移动到目标目录中
mv source_file dest_directory - 移动目录
mv source_file dest_file,如果目标目录已存在则将源目录移动到目标目录下
cp 复制文件
- 复制文件
cp source_file dest_file - 复制源目录到新目录下
cp -r source_directory dest_directory
tar 解压文件
-c新建,-x解压,-v详情,-f文件
- 压缩
tar -zcvf nginx.tar.gz ./nginx - 解压
tar -zxvf nginx.tar.gz - 压缩
tar -jcvf nginx.tar.bz2 ./nginx - 解压
tar -jxvf nginx.tar.bz2
cat 查看文件
- 查看文件
cat file - 显示行号
cat -n file - 构建文件
cat > demo << EOF Hello World! EOF
du 查看文件占用大小
- 查看文件占用大小
du -h file,显示KB、MB单位 - 查看当前目录下所有文件占用大小
du -h *
head 文件开头
- 查看文件开头10行
head file - 查看文件开头200行
head -n 200 file - 查看文件开头200个字节
head -c 200 file
tail 文件结尾
- 查看文件尾部10行
tail file - 查看文件尾部200行
tail -n 200 file - 查看文件尾部200个字节
tail -c 200 file - 持续读取文件尾部
tail -f file
chmod 文件权限
# 文件所有者(u) 用户组(g) 其他用户(o)
# rwx r-x r--
# 421 4-1 4--
chmod u+x check_apiserver.sh #为check_apiserver.sh文件拥有者添加可执行权限
chmod 754 check_apiserver.sh #类似于chmod u=rwx,g=rx,o=r check_apiserver.sh
ln 文件链接
- 硬链接
ln source_file dest_file,删除源文件不会影响硬链接- 不支持目录
- 不得跨文件系统
- 软链接
ln -s source_file dest_file,删除源文件会导致软链接不可用- 支持目录
- 查看软连接本身内容
readlink dest_file,其实存储的是源文件路径
inode 文件元数据
硬盘在格式化的时候,系统自动将硬盘分为2部分,一部分是元数据区域,存放文件inode信息,另一部分才是真正存放文件数据的区域。并且每个inode的大小在格式化分区时已经确定,默认是128byte或256byte。
查看文件inode信息ls -li file,其中除了文件名剩下的都存于inode,文件的元数据包含:文件大小、用户,用户组,文件权限数字、文件修改时间,文件实体指针(指向block的位置)。
小知识:硬盘最小的存储单元是 sector (扇区 512byte),操作系统将连续的8个扇区合并为 block (块 4KB),block是操作系统读写文件的最小单位。
硬连接的原理
硬链接与源文件使用相同的inode,新增硬链接会使inode号码计数+1,计数为0时文件数据丢失。
grep 文本搜索
- 查看文件含指定文本的内容
grep "hello" file - 查看文件不含指定文本的内容
grep -v "hello" file - 忽略大小写
grep -i "hello" file - 显示行号
grep -n "hello" file - 查看文件含指定文本的行数
grep -c "hello" file - 使用正则表达式
grep -E "^g(oo|la)d" file
BRE 基本正则表达式
| 符号 | 说明 |
|---|---|
| ^ | 匹配最左侧 |
| $ | 匹配最右侧 |
| ^$ | 表示空行 |
| . | 匹配任意字符1次 |
| \ | 转义符 |
| * | 匹配前一个字符0次或多次 |
| .* | 匹配所有内容 |
| [abcd] | 匹配[]集合内任意一个字符,也可以写成[a-d] |
| [^abcd] | [^abcd]的取反操作,匹配除了a或b或c或d剩下的任意字符 |
ERE 扩展正则表达式
| 符号 | 说明 |
|---|---|
| + | 匹配前一个字符1次或多次 |
| [abcd]+ | 匹配括号内字符a或b或c或d,1次或多次 |
| ? | 匹配前一个字符0次或1次 |
| | | 表示或者 |
| () | 分组过滤,被括起来的内容代表一个整体,例如:g(oo|la)d,匹配good或者glad |
| a{n,m} | 匹配前一个字符最少n次,最多m次 |
| a{n,} | 匹配前一个字符最少n次,也可以写成a{n} |
| a{,m} | 匹配前一个字符最多m次 |
sed 流编辑器
- 查看文件含指定文本的内容
sed "/hello/p" file,但是发现除了被查找的内容有输出,其他内容也输出了,这是因为sed逐行匹配,并将匹配到的内容重定向到当前行后一同输出。 - 查看文件含指定文本的内容,并取消重定向直接输出
sed -n "/hello/p" file,p打印匹配行的内容 - 直接将替换结果写入文件
sed -i "s/hella/hello/g" file - 支持多次编辑,减少管道符的使用
sed -e "s/hella/hello/g" -e "s/word/world/g" file - 支持正则扩展
sed -r "s/^he.*a/hello/g" file - 在指定行后面追加内容
sed "1a Where are you from?" file - 在指定行前面插入内容
sed "1i Start go! go! go!" file - 替换匹配行
sed "1c Hello World\!" file - 删除匹配行
sed "/hello/d" file - 替换匹配内容
sed "s/正则/替换内如/g" file,g代表全局匹配 - 匹配内容
sed -n "/pattern/" file,多个pattern用,隔开,如:sed -n "/pattern1/,/pattern2/" file - 打印10~20行的文本
sed -n "10,20p" file - 步长是2,打印10~20行的文本
sed -n "10~2,20p" file,即10,12,14…20行的内容
awk 文本格式化
- 打印文件第二列内容
awk '{print $2}' file,默认分割符是空格,多个空格按一个空格处理$0全部输出$NF最后一列$NF-1倒数第二列,打印文件倒数第二列内容awk '{print "倒数第二列":$(NF-2)}' file
- 打印第3到第7行内容
awk 'NR=3,NR=7{print $0}' file - 打印指定字符串开头的行
awk '/^start/{print $0}' file - 打印指定多个字符串开头的行
awk '/^http/,/^https/{print $0}' file - 支持正则扩展
sed -r '/^he.*a/{print $0}' file - 设置开始和结束行内容
awk 'BEGIN{print "第一列 第二列"} {print $1 $2} END{print "第一页"}' file - 指定
,分隔符awk -F ',' '{print $2}' file
内部变量
修改内部变量,以达到-F的作用awk -v FS=',' '{print $2}' file
| 变量 | 说明 |
|---|---|
| FS | 输入分割符 |
| OFS | 输出分割符 |
| RS | 输入换行符 |
| ORS | 输出换行符 |
| NF | 文件列数 |
| NR | 文件行数 |
| FILENAME | 文件名 |
| ARGC | 命令行参数的数目 |
| ARGV | 命令行参数的数组 |
printf
打印文件第一列和第二列内容awk '{printf "%d %-25s\n",$1,$2;printf "--分割--\n"}' file,并要求第二列内容左对齐且最多占用25个字符
| 占用符 | 说明 |
|---|---|
| %d | 整数(十进制) |
| %f | 浮点数 |
| %s | 字符串 |
| %% | %自身 |
| – | 左对齐 |
| + | 显示数值符号 |
PATH 环境变量
- 进入
/etc/profile.d文件夹cd /etc/profile.d - 假如我们要将 mysql 加入到环境变量中,只需创建如下
mysql.sh脚本文件export MYSQL_HOME=/user/local/mysql-8.0.26 export PATH=$PATH:${MYSQL_HOME}/bin - 立即生效
source /etc/profile
USER 用户管理
用户组
- 新建用户组
groupadd groupname - 新建用户组并指定ID
groupadd -g groupid groupname - 修改用户组ID
groupmod -g groupid groupname - 修改用户组名
groupmod -n dest_groupname source_groupname - 删除用户组
groupdel groupname - 查询用户所属的用户组
groups username
用户
查看用户信息cat /etc/passwd
- 新建用户
useradd username - 新建用户并指定用户组
useradd -g groupname username - 新建用户并指定家目录
useradd -d directory username - 修改用户所属的用户组
usermod -g groupname username - 删除用户
userdel username - 删除用户及家目录
userdel -r username - 切换用户
su - username
chown 文件所有
- 修改文件所有者
chown username:groupname file - 修改文件夹所有者
chown -R username:groupname directory
postfix 邮箱
安装yum install -y mailx
发送邮件
mailx -s "主体" root #发送邮件给root用户
正文
. #结束符
发送文件到邮箱
mailx -s "主体" root < file
进入邮箱
mail
# Heirloom Mail version 12.5 7/5/10. Type ? for help.
# "/var/spool/mail/root": 3 messages 3 new
# >N 1 root Tue Feb 14 11:18 18/627 "主体"
#
& 1
# Message 1:
# From root@localhost.localdomain Tue Feb 14 11:18:11 2023
# Return-Path:
# X-Original-To: root
# Delivered-To: root@localhost.localdomain
# Date: Tue, 14 Feb 2023 11:18:11 +0800
# To: root@localhost.localdomain
# Subject: 主体
# User-Agent: Heirloom mailx 12.5 7/5/10
# Content-Type: text/plain; charset=utf-8
# From: root@localhost.localdomain (root)
# Status: R
#
# 正文
#
& exit
定时任务
timeout
运行指定的命令,如果在指定时间后仍在运行,则杀死该进程,执行1秒timeout 1 echo "hello"
at
- 安装
yum install -y at - 运行服务
systemctl start atd - 一分钟后执行,执行完后发送邮件
at now+1min at> echo "guanyu" at>#Ctrl+D 保存退出 # 您在 /var/spool/mail/root 中有新邮件 - 指定时间执行
at HH:mm或at YYYY-mm-dd - 指定时间间隔
at now+1minutes/hours/days/weeks/months/years
- 指定时间执行
crontabs
- 安装
yum install -y crontabs - 运行服务
systemctl status crond - 每分钟执行,执行完后发送邮件
crontab -u nobody -e # 等效于 vi /var/spool/cron/nobody # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * echo "hello" # 注意:day of month 和 day of week 不能同时指定 # -e 编辑 # -u 指定用户 # 1-5 * * * * 每1-5分钟执行 # 1,5 * * * * 每1和5分钟执行 # /3 * * * * 每0,3,6...60分钟执行,n表示可以整除的数字 - 查看crontab任务
crontab -l - 删除crontab任务
crontab -r
systemd 系统管理
Systemd是Linux启动和管理系统的一套工具,它取代了initd成为系统第一进程(PID=1),其他进程都是它的子进程。
systemclt
systemctl是 Linux 的服务管理工具,它融合之前service和chkconfig的功能于一体。
- 重新加载配置文件
systemctl daemon-reload - 启动服务
systemctl start firewalld.service - 关闭服务
systemctl stop firewalld.service - 重启服务
systemctl restart firewalld.service - 开机启动服务
systemctl enable firewalld.service - 开机禁用服务
systemctl disable firewalld.service - 查看服务状态
systemctl status firewalld.service - 查看开机启动的服务列表
systemctl is-enabled firewalld.service - 查看已启动的服务列表
systemctl list-unit-files|grep enabled - 查看启动失败的服务列表
systemctl --failed
systemd-analyze
systemd-analyze命令用于查看启动耗时。
- 查看服务启动耗时
systemd-analyze blame
unit 配置文件
Systemd默认从目录/etc/systemd/system读取配置文件,但里面大多只存放软链接,真正的配置文件一般存放于/usr/lib/systemd/system目录。
[Unit]区块配置当前Unit于其他Unit的关系,规则如下:
| 字段 | 描述 |
|---|---|
| Description | 简单描述 |
| Requires | 该字段指定的Unit如果没有运行,当前Unit启动失败 |
| BindsTo | 与Requires类似,该字段指定的Unit一旦退出,会导致当前Unit停止运行 |
| Wants | 该字段指定的Unit如果没有运行,当前Unit不会启动失败 |
| Before | 该字段指定的Unit启动之前,都会确保当前Unit已启动完成 |
| After | 该字段指定的Unit启动之后,才会启动当前Unit |
[Install]区块配置当前Unit执行方式,规则如下:
| 字段 | 描述 |
|---|---|
| WantedBy | 弱依赖,指定当前Unit所属的Target |
| RequiredBy | 强依赖,指定当前Unit所属的Target |
| Alias | 当前Unit的启动别名 |
| Also | 当前Unit启动时,同时启动其他Unit |
[Service]区块配置程序的启动方式,规则如下:
| 字段 | 描述 |
|---|---|
| Type | simple默认值,串行执行ExecStart指定的命令, 启动后常驻内存。forking以fork子进程的方式启动,启动结束后父进程终止。oneshot与simple类似,当前进程工作完毕后结束,不会常驻内存。dbus与simple类似,当前进程必须在取得一个D-Bus名称后才会运作(BusNname=)。notify在启动完成后会发送一个通知消息,需要配合NotifyAccess来让Systemd接收消息。idle与simple类似,当前进程必须等到所有的工作都顺利执行完毕后才会运作。 |
| ExecStart | 启动当前服务的命令 |
| ExecStartPre | 启动当前服务前的命令 |
| ExecStartPost | 启动当前服务后的命令 |
| ExecReload | 重启当前服务的命令 |
| ExecStop | 停止当前服务的命令 |
| ExecStopPost | 停止当前服务后的命令 |
| RestartSec | 自动重启当前服务间隔的秒数 |
| Restart | 定义何种情况下Systemd需要自动重启当前服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog |
| TimeoutSec | Systemd停止当前服务之前等待的秒数 |
| Environment | 指定环境变量 |
| EnvironmentFile | 环境配置文件 |
例如:
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.targcaet
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
firewall 防火墙
启动
- 启动
systemctl start firewalld - 关闭
systemctl stop firewalld - 查看状态
systemctl status firewalld - 开机启动
systemctl enable firewalld - 开机禁用
systemctl disable firewalld
端口
- 添加
firewall-cmd --zone=public --add-port=80/tcp --permanent,--permanent永久生效,不写此参数重启后失效 - 删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent - 查看所有
firewall-cmd --zone=public --list-ports - 查看特定
firewall-cmd --zone=public --query-port=80/tcp
配置
- 查看帮助
firewall-cmd --help - 查看版本
firewall-cmd --version - 查看状态
firwall-cmd --state - 更新规则
firewall-cmd --reload
RPM
- 安装软件包
rpm -ivh wget-1.14-18.el7_6.1.x86_64.rpm-i表示安装-v显示详细过程-h进度条显示,每个#表示2%进度
- 升级软件包
rpm -Uvh wget-1.14-18.el7_6.1.x86_64.rpm - 卸载软件包
rpm -e wget - 查看已安装的所有软件包
rpm -qa - 查看软件详情
rpm -qpi wget-1.14-18.el7_6.1.x86_64.rpm-q使用询问模式,当遇到任何问题时,rpm指令会先询问用户-i显示软件包的相关信息-p查询指定的软件包,省略-p亦可如此rpm -qi wget
- 查看软件包文件列表
rpm -qpl wget-1.14-18.el7_6.1.x86_64.rpm - 查看命令所属安装包
rpm -qf /usr/bin/wget
RPM包下载网站
- http://rpm.pbone.net/ (比较全,下载速度较慢)
- https://fr2.rpmfind.net/ (推荐)
YUM
- 搜索服务器上与关键字相关的软件包
yum search mysql - 列出所有已安装的软件包
yum list,列出指定软件包信息yum list wget - 安装软件
yum install -y java - 升级软件
yum update java - 卸载软件
yum remove java - 显示所有仓库
yum repolist all
修改国内yum源
yum -y install wget
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update
制作RPM
yum install yum-plugin-downloadonly
yum install --downloadonly --downloaddir=/home/dependency/ openssl-devel
常用软件
yum install -y gcc gcc-c++ make perl
yum groupinstall "Development Tools" # yum group 安装
yum groupinstall "Server Platform Development"
bash 脚本
#!/bin/bash
nohup /root/jdk1.8.0_333/bin/java -jar /home/fitter/fitter-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > /home/fitter/error.log 2>&1 &
echo $! > /home/fitter/fitter-service.pid
IO 硬盘
| 硬盘类型 | Linux显示路径 |
|---|---|
| IDE硬盘 | /dev/hd[a-d] |
| SCSI/SATA/USB硬盘 | /dev/sd[a-p] |
| 软盘 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-2] |
| USB打印机 | /dev/usb/lp[0-15] |
| 鼠标 | /dev/psaux 或 /dev/usb/mouse[0-15] |
| 当前鼠标 | /dev/mouse |
| 当前CD/DVE | /dev/cdrom |
注意:CentOS 6 和 CentOS 7 统统将硬盘设备文件标识为/dev/sd[a-z]
分区
/dev/sda 第一块硬盘
|
|--- 主分区 /dev/sda1
|--- 扩展分区 /dev/sda2
|------ 逻辑分区 /dev/sda3
|------ 逻辑分区 /dev/sda4
fdisk
分区格式:dos,该分区表格式不能在超过2TB。
- 查看所有硬盘设备分区信息
fdisk -l - 查看指定硬盘设备分区信息
fdisk -l /dev/sdb - 修改硬盘分区
fdisk /dev/sdbm获取帮助p查看分区信息n创建分区p主分区e扩展分区l逻辑分区
t修改分区类型L支持的分区类型及id,swap分区类型id为82
d删除分区w保存q退出
parted
分区格式:gpt
- 修改硬盘分区
parted /dev/sdbhelp获取帮助p查看分区信息mklabel gpt修改分区格式为gptmklabel msdos修改分区格式为dosmkpart primary 0.00T 30%创建主分区,默认xfs文件系统mkpart logical 3221MB 100%创建逻辑分区rm 2删除/dev/sdb2分区
-s不输出提示信息,例如:parted -s /dev/sdb mkpart logical xfs 3221MB 100%
文件系统
| 操作系统 | 文件系统 | 版本 |
|---|---|---|
| windows | FAT | windows 98 |
| FAT16 | ||
| FAT32 | ||
| NTFS | windows 2000 | |
| linux | ext2 | |
| ext3 | centos5 | |
| ext4 | centos6 | |
| xfs | centos7 | |
| 网络共享文件系统 | nfs | |
| smb | ||
| 分布式文件系统 | ceph | |
| 集群文件系统 | gfs | |
| ocfs | ||
| 交换文件系统 | swap |
格式化
- 查询所有设备的文件系统信息
lsblk -f - 查询当前操作系统支持的文件系统,输入
mkfs.命令后再按Tab键即可。 - 分区格式化xfs文件系统
mkfs.xfs /dev/sdb1
swap 格式化
当物理内存不足时,操作系统将一部分暂时没在使用的内存数据写入到swap分区,从而释放更多内存。(类似windows的虚拟内存)
- swap分区格式化
mkswap /dev/sdb2 - 开启swap分区
swapon /dev/sdb2 - 关闭swap分区
swapoff /dev/sdb2
CentOS 7 当内存小于2G时,swap和内存一样大;当内存大于2G时,swap为2G。
mount 挂载
- 挂载
mount /dev/sdb1 /mnt,临时生效 - 挂载并指定文件系统类型
mount -t nfs 192.168.201.35:/home/nfs /mnt -o nolock,nolock不加锁 - 取消挂载
umount /mnt,只能在所有用户不使用该目录时才能取消成功 - 查看所有挂载信息
mount -l - 挂载并设置功能
mount -o ro /dev/sdb1 /mnt-o参数详解参数 说明 async/sync 异步/同步 处理文件系统IO。异步方式不会直接写入数据到磁盘,而是先写入缓冲区,直到缓冲区将满再写入磁盘。 atime/noatime 记录/不记录 修改文件时间戳 auto/noauto 自动/不自动 挂载 exec/noexec 执行/不执行 可执行文件 ro/rw 只读/读写 defaults 默认参数(rw,relatime,seclabel,attr2,inode64,noquota) CentOS 7 新增
参数 说明 att2 在磁盘上存储内联扩展属性,提升磁盘性能 inode64 允许文件系统在任意位置创建inode noquota 强制关闭文件系统的限额功能
永久生效
若要使mount永久生效,可编辑/etc/fstab文件
# /etc/fstab
# Created by anaconda on Thu Jul 7 23:16:00 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos-root / xfs defaults 0 0
UUID=b364ad1f-c3f0-45b1-8382-583eabb3afa7 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /mnt xfs defaults 0 0
# 第一个0表示dump,备份目录:0.不备份 1.备份
# 第二个0表示fsck,磁盘检查:0.不检查 1.检查
重新读取/etc/fstab文件mount -a
df 查看挂载点
查看挂载点使用情况df -hT
-h显示KB、MB单位-i显示inode数量-T显示文件类型
Mem 内存
buffers(缓冲区):用户在执行写入操作时,先保存数据到内存,等数据量达到一定程度后集中写入磁盘,减少IO。
cahed(缓存):用户首次访问数据,会将数据从磁盘加载到内存并保存,以便下次读取,减少IO。
- 释放buff/cahe:
sysctl -w vm.drop_caches=1等效于echo 1 > /proc/sys/vm/drop_caches - 清除目录缓存和inodes:
sysctl -w vm.drop_caches=2等效于echo 2 > /proc/sys/vm/drop_caches - 清除内存页缓存(不常用):
sysctl -w vm.drop_caches=3等效于echo 3 > /proc/sys/vm/drop_caches - 将缓冲区内的数据写入磁盘:
sync
free
Pid 进程
top 资源管理器
# 15:45:09 up 当前机器时间,date命令查看
# 50 min 当前系统运行时间
# 1 user 当前系统有几个用户使用
# load average: 0.00, 0.01, 0.02 系统的平均负载,分别是 1分钟,5分钟,15分钟的平均值(值越小,负载越低)
top - 15:45:09 up 50 min, 1 user, load average: 0.00, 0.01, 0.02
# 进程统计情况
# total 总共进程数量
# running 运行中的进程数量
# sleeping 睡眠中的进程数量
# stopped 已暂停的进程数量
# zombie 僵尸进程数量
Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie
# CPU使用百分比情况
# us 用户占用CPU百分比
# sy 系统内核空间占用CPU百分比
# ni 用户进程空间占用CPU百分比
# id 空闲进程的CPU百分比
# wa 等待输入输出的CPU百分比
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 内存使用情况
# total 物理内存总大小
# free 空闲内存大小
# used 已使用的内存大小
# buff/cache 缓存大小
KiB Mem : 995672 total, 640628 free, 205056 used, 149988 buff/cache
# swap使用情况
KiB Swap: 2097148 total, 2097148 free, 0 used. 632992 avail Mem
# PID 进程id号
# USER 执行进程的用户
# PR 进程的优先级
# NI nice值,越高表示优先级越高
# VIRT 进程使用的虚拟内存总量,VIRT=swap+RES
# RES 进程使用的物理内存总量
# SHR 共享内存大小,单位KB
# S 进程状态
# %CPU CPU使用百分比
# %MEM 内存使用百分比
# TIME+ CPU执行时间
# COMMAND 命令
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1515 root 20 0 0 0 0 S 0.3 0.0 0:00.43 kworker/0:2
1557 root 20 0 162080 2204 1548 R 0.3 0.2 0:00.09 top
1 root 20 0 128016 6628 4144 S 0.0 0.7 0:01.33 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.22 kworker/u256:0
- 进入top命令后,键入数字
1指令,表示查看系统逻辑CPU个数 - 进入top命令后,键入大写字母
P指令,CPU使用量倒叙排列,默认如此 - 进入top命令后,键入大写字母
M指令,内存使用量倒叙排列 - 显示进程命令绝对路径
top -c - 设置刷新间隔
top -d 1,默认为1,单位为秒 - 刷新3次后结束
top -n 3 - 指定查看某一进程信息
top -p pid
ps 进程状态
ps
# 进程号 进程所属终端号 进程使用CPU总时间 执行的命令
# PID TTY TIME CMD
# 7031 pts/0 00:00:00 bash
ps -ef
# 用户 进程号 父进程号 CPU占用率 开始执行时间 进程所属终端号 进程使用CPU总时间 执行的命令
# UID PID PPID C STIME TTY TIME CMD
# root 7031 7029 0 18:29 pts/0 00:00:00 -bash
# -e 显示所有运行的进程
# -f 显示更多信息,UID PPID C STIME
# -H 显示进程父子树形结构
ps -u user #指定查看某用户的进程信息
ps aux
# 用户名 进程号 CPU占用率 内存占用率 swap占用大小(K) 常驻内存大小(K) 终端 进程状态 开始时间 使用CPU时间 执行的命令
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# root 7031 0.0 0.1 115544 1936 pts/0 Ss 18:29 0:00 -bash
# a 显示当前终端的所有进程
# u 显示cpu和内存占用,USER %CPU %MEM VSZ RSS STAT START
# x 显示所有进程,不以终端机来区分
# e 列出执行的命令的环境变量,注意不带-,带-是Unix系统命令模式
# f 显示进程父子树形结构
# STAT 进程状态
# S 终端睡眠中,可以被唤醒
# s 该进程含有子进程
# R 进程运行中
# D 该进程睡眠中,且不可被中断
# T 进程已停止
# Z 僵尸进程,父进程异常崩溃
# + 前台进程
# N 低优先级进程
# < 高优先级进程
# L 进程已被锁定
lsof 进程状态
- 查看端口占用
lsof -i :8080
kill 结束进程
- 终止进程
kill pid - 立即杀死进程
kill -9 pid
常用信号
列出所有终止信号kill -l
| 信号 | 说明 |
|---|---|
| 1) SIGHUP | 挂起进程,如终端突然掉线、用户突然退出 |
| 2) SIGINT | 中断信号 (Ctrl + C) |
| 3) SIGQUIT | 退出信号 (Ctrl + \) |
| 9) SIGKILL | 强制中断信号,可立即杀死进程 |
| 15) SIGTERM | 终止进程,默认 |
| 20) SIGTSTP | 暂停进程 (Ctrl + Z) |
| 0) | kill的特殊信号,kill -0 pid不会发送任何信号给pid,但会对pid进行检查,如果执行结果为0,表示该进程存在,如果为1,则为不存在。 |
pkill 连坐
pkill可以通过进程名杀死多个进程,包含父进程和子进程,例如pkill nginx
Net 网络
| IP地址 | 说明 |
|---|---|
| 127.0.0.1 | 本地回环地址(LOOPBACK),用于机器硬件之间的IP通信,只能内部访问 |
| 192.168.201.35 | 对外提供服务访问的IP地址,由网卡提供服务 |
| 0.0.0.0 | 表示绑定服务到这台机器的所有网卡地址,一台服务器可能有多个网卡,都能通过这个IP地址访问 |
配置IP地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# TYPE=Ethernet
# PROXY_METHOD=none
# BROWSER_ONLY=no
# BOOTPROTO=static #static静态IP,dhcp动态IP
# DEFROUTE=yes
# IPV4_FAILURE_FATAL=no
# IPV6INIT=yes
# IPV6_AUTOCONF=yes
# IPV6_DEFROUTE=yes
# IPV6_FAILURE_FATAL=no
# IPV6_ADDR_GEN_MODE=stable-privacy
# NAME=ens33
# UUID=f4f51c94-c3ef-4b0c-bb1e-5b517130e6c1
# DEVICE=ens33
# ONBOOT=yes #设置开机启动
#
# IPADDR=192.168.232.132 #IP地址
# NETMASK=255.255.255.0 #子网掩码
# GATEWAY=192.168.232.1 #网关
# DNS1=114.114.114.114 #DNS服务器地址
配置DNS地址
vi /etc/resolv.conf
# Generated by NetworkManager
# nameserver 114.114.114.114 #DNS服务器地址
ip 网络管理工具
link 设备
- 查看网络设备
ip link - 查看网络设备收发速率
ip -s link,RX:接收,TX:发送 - 关闭网络设备(慎用)
ip link set ens33 down - 开启网络设备
ip link set ens33 up - 修改MAC地址
ip link set ens33 address 00:0c:29:c6:5c:dd
address 地址
- 查看IP地址
ip address - 添加IP地址
ip address add 192.168.216.160/24 dev ens33 - 删除IP地址
ip address del 192.168.216.160/24 dev ens33
route 路由
- 查看路由信息
ip route
ping 地址检测
ping 192.168.216.100
# PING 192.168.216.100 (192.168.216.100) 56(84) bytes of data.
# 64 bytes from 192.168.216.100: icmp_seq=1 ttl=64 time=0.040 ms
telnet 端口检测
yum install -y telnet
telnet 192.168.216.100 16443
# Trying 192.168.216.100...
# Connected to 192.168.216.100.
# Escape character is '^]'.
ss 网络状态
- 查看正在运行的所有端口及对应的进程情况
ss -tunlp-a显示所有socket(套接字)信息-t显示TCP协议的socket-u显示UDP协议的socket-x显示unix domain socket-l只显示处于监听状态的端口-p显示端口的进程信息-n不解析服务名,如22端口不会显示成ssh-r解析服务名,默认
- 查看网卡信息
ss -anNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 0:694 * p_dgr UNCONN 0 0 arp:ens33 * u_str LISTEN 0 100 private/tlsmgr 21149 * 0 raw UNCONN 0 0 [::]:58 [::]:* udp UNCONN 0 0 127.0.0.1:323 *:* tcp LISTEN 0 128 *:22 *:* # State socket状态,三次握手/四次挥手的状态 # Recv-Q 远程主机还未拷贝的字节数 # Send-Q 远程主机还未确认的字节数 # Local Address:Port 本地主机地址和端口 # Peer Address:Port 远程主机地址和端口
其他命令
hostnamectl 主机信息
hostnamectl命令用于查看主机信息。
- 设置主机名
hostnamectl set-hostname <hostname>
ssh 远程登录
登录远程Linux终端ssh -p 22 root@192.168.201.35,-p指定端口,默认22端口
scp 远程连接
复制本地文件到远程scp source_file root@192.168.216.132:/root
复制本地目录到远程scp -r source_directory root@192.168.216.132:/root
nohup 后台运行
后台执行nohup /home/start.sh &,&表示即使 Terminal(终端) 关闭程序依然运行
操作系统中常用的三个流:
| 编号 | 说明 |
|---|---|
| 0 | 标准输入流 stdin |
| 1 | 标准输出流 stdout |
| 2 | 标准错误流 stderr |
一般当我们用> error.log,实际是1 > error.log的省略用法;< info.log ,实际是0 < info.log的省略用法。
nohup /home/jdk1.8.0_333/bin/java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > error.log 2>&1 &
# 2>&1 这个意思是把标准错误(2)重定向到标准输出(1)中,而标准输出(1)又导入error.log文件中。
# 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而标准输出有。如果我们这样写:nohup /home/start.sh >error.log 2>error.log 会导致error.log文件被两个流都打开,使得stdout和stderr竞争覆盖彼此内容。
# 最后谈一下/dev/null文件的作用,它是一个无底洞,任何流都可以定向到这里,但却无法打开。所以当我们不关心stdou和stderr的时候可以定向到这里。
history 历史命令
- 查看历史命令
history - 清除内存中历史命令
history -c - 从
~/.bash_history文件中恢复历史命令
wget 下载命令
wget支持http、ftp协议,支持代理,支持断点续传,即使网络环境很差也能下载。
- 下载Nginx RPM
wget https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm - 下载并重命名
wget -O /root/nginx-1.20.rpm https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm - 断点续传
wget -c https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm - 后台运行
wget -b https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm
