Linux 操作手册
本文最后更新于 984 天前,其中的信息可能已经有所发展或是发生改变。

目录

目录说明
/rootroot用户家目录
/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 文件链接

  1. 硬链接ln source_file dest_file,删除源文件不会影响硬链接
    • 不支持目录
    • 不得跨文件系统
  2. 软链接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" filep打印匹配行的内容
  • 直接将替换结果写入文件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" fileg代表全局匹配
  • 匹配内容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 环境变量

  1. 进入/etc/profile.d文件夹
    cd /etc/profile.d
  2. 假如我们要将 mysql 加入到环境变量中,只需创建如下mysql.sh脚本文件
    export MYSQL_HOME=/user/local/mysql-8.0.26
    export PATH=$PATH:${MYSQL_HOME}/bin
  3. 立即生效source /etc/profile

USER 用户管理

用户组

  • 新建用户组groupadd groupname
  • 新建用户组并指定IDgroupadd -g groupid groupname
  • 修改用户组IDgroupmod -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

  1. 安装yum install -y at
  2. 运行服务systemctl start atd
  3. 一分钟后执行,执行完后发送邮件
    at now+1min
    at> echo "guanyu"
    at>  #Ctrl+D 保存退出
    # 您在 /var/spool/mail/root 中有新邮件
    • 指定时间执行at HH:mmat YYYY-mm-dd
    • 指定时间间隔at now+1minutes/hours/days/weeks/months/years

crontabs

  1. 安装yum install -y crontabs
  2. 运行服务systemctl status crond
  3. 每分钟执行,执行完后发送邮件
    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表示可以整除的数字
  4. 查看crontab任务crontab -l
  5. 删除crontab任务crontab -r

systemd 系统管理

Systemd是Linux启动和管理系统的一套工具,它取代了initd成为系统第一进程(PID=1),其他进程都是它的子进程。

systemclt

systemctl是 Linux 的服务管理工具,它融合之前servicechkconfig的功能于一体。

  • 重新加载配置文件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]区块配置程序的启动方式,规则如下:

字段描述
Typesimple默认值,串行执行ExecStart指定的命令, 启动后常驻内存。forkingfork子进程的方式启动,启动结束后父进程终止。oneshotsimple类似,当前进程工作完毕后结束,不会常驻内存。dbussimple类似,当前进程必须在取得一个D-Bus名称后才会运作(BusNname=)。notify在启动完成后会发送一个通知消息,需要配合NotifyAccess来让Systemd接收消息。idlesimple类似,当前进程必须等到所有的工作都顺利执行完毕后才会运作。
ExecStart启动当前服务的命令
ExecStartPre启动当前服务前的命令
ExecStartPost启动当前服务后的命令
ExecReload重启当前服务的命令
ExecStop停止当前服务的命令
ExecStopPost停止当前服务后的命令
RestartSec自动重启当前服务间隔的秒数
Restart定义何种情况下Systemd需要自动重启当前服务,可能的值包括always(总是重启)、on-successon-failureon-abnormalon-aborton-watchdog
TimeoutSecSystemd停止当前服务之前等待的秒数
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包下载网站

  1. http://rpm.pbone.net/ (比较全,下载速度较慢)
  2. 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/sdb
    • m获取帮助
    • p查看分区信息
    • n创建分区
      • p主分区
      • e扩展分区
      • l逻辑分区
    • t修改分区类型
      • L支持的分区类型及id,swap分区类型id为82
    • d删除分区
    • w保存
    • q退出

parted

分区格式:gpt

  • 修改硬盘分区parted /dev/sdb
    • help获取帮助
    • p查看分区信息
    • mklabel gpt修改分区格式为gpt
    • mklabel msdos修改分区格式为dos
    • mkpart primary 0.00T 30%创建主分区,默认xfs文件系统
    • mkpart logical 3221MB 100%创建逻辑分区
    • rm 2删除/dev/sdb2分区
  • -s不输出提示信息,例如:parted -s /dev/sdb mkpart logical xfs 3221MB 100%

文件系统

操作系统文件系统版本
windowsFATwindows 98
FAT16
FAT32
NTFSwindows 2000
linuxext2
ext3centos5
ext4centos6
xfscentos7
网络共享文件系统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 nolocknolock不加锁
  • 取消挂载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 -an
    Netid	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 RPMwget 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
如果觉得本文对您有帮助,记得收藏哦~
上一篇
下一篇