基础

grep命令

从文件中通过关键字过滤文件行

语法:grep [-n] 关键字 文件路径

  • 选项-n,可选,表示在结果中显示匹配的行的行号
  • 参数,关键字,必填,表示过滤的关键字,建议用””包裹
  • 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容的输入端口

wc

通过wc命令统计文件的行数、单词数量等

语法:wc [-c -m -l -w] 文件路径

  • -c 统计bytes数量
  • -m 统计字符数量
  • -l 统计行数
  • -w 统计单词数量
  • 文件路径,被统计的文件

管道符 |

将管道符左边的命令结果,作为右边的输入

echo

echo命令可以在命令行内输出指定内容

语法: echo 输出的内容

反引号 `

被`包围的内容,会被作为命令执行,而非普通字符

echo pwd
# pwd
echo `pwd`
# /home

重定型符 >和>>

  • > 将左侧命令结果,覆盖写入到符号右侧指定的文件中
  • >> 将左侧命令的结果,追加写入到符号右侧指定的文件中
[root@whoami1 cxx]# cat 1.txt
hello
[root@whoami1 cxx]# echo "123" > 1.txt
[root@whoami1 cxx]# cat 1.txt
123
[root@whoami1 cxx]# echo "456" >> 1.txt
[root@whoami1 cxx]# cat 1.txt
123
456
[root@whoami1 cxx]# ls > 1.txt
[root@whoami1 cxx]# cat 1.txt
1.txt
[root@whoami1 cxx]# ls -ll >1.txt
[root@whoami1 cxx]# cat 1.txt
总用量 0
-rw-r--r--. 1 root root 0 11月 10 11:34 1.txt
[root@whoami1 cxx]#

tail命令

可以查看文件尾部内容,跟踪文件最新更改

tail [-f -num] Linux路径

  • -f 表示持续跟踪
  • -num 表示查看尾部多少行,不填默认10行
[root@whoami1 cxx]# ls / > 1.txt
[root@whoami1 cxx]# cat 1.txt
bin
boot
data
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@whoami1 cxx]# tail -3 1.txt
tmp
usr
var
[root@whoami1 cxx]#

vi、vim编辑器

三种工作模式

命令模式

0 移动光标到当前行的开头

$ 移动光标到当前行的结尾

pageup 向上翻页

pagedown 向下翻页

/ 进入搜索模式(/后面加空格)

n 向下继续搜索

N 向上继续搜索

dd 删除光标所在行的内容

ndd n是数字,删除当前光标向下n行

yy 复制当前行

nyy n是数字,复制当前光标向下n行

p 粘贴复制的内容

u 撤销修改

ctrl+r 反向撤销修改

gg 跳到首行

G 跳到尾行

dG 从当前行开始,向下全部删除

dgg 从当前行开始,向上全部删除

d$ 从当前光标开始,删除到本行的结尾

d0 从当前光标开始,删除到本行的开头

输入模式

底线命令模式

:wq 保存并退出

:q 仅退出

:w 仅保存

:set nu 显示行号

:set paste 设置粘贴模式(用于从外部复制内容时使用)

image-20231110114155204

用户和权限

su

用于账户切换的系统命令 来源于:Switch User

语法:su [-] [用户名]

  • -符号是可选的,表示是否在切换用户后加载环境变量,建议加上
  • 参数:用户名,表示要切换的用户,不写是root用户
  • exit退回上一个用户

sudo

当我们知道root密码,可以用su切换到root

不建议长期使用root用户

sudo,为普通命令授权,临时以root身份执行

语法:sudo 其他命令

  • 并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证

为普通用户配置sudo认证

  • root用户执行visudo命令,会通过vi编辑器打开/etc/sudoers文件
  • 在文件的最后添加: 用户名 ALL=(ALL) NOPASSWD:ALL
    • NOPASSWD:ALL 表示使用sudo命令无需输入密码
  • :wq保存

用户用户组

一个用户可以加入多个用户组

用户组管理

groupadd

创建用户组

语法:groupadd 用户组名

groupdel

删除用户组

语法:groupdel 用户组名

用户管理

useradd

创建用户

语法:useradd [-g -a] 用户名

  • -g 指定用户的组,不-g指定,会创建同名组并自动加入
  • -d 指定用户home路径,不指定,默认在:/home/用户名

userdel

删除用户

语法:userdel [-r] 用户名

  • -r 删除用户的home目录,不-r home目录保留

id

查看用户所属组

语法:id [用户名]

如果不加用户名,默认查看自身

usermod

修改用户所在组

语法:usermod -aG 用户组 用户名

将指定用户加入指定用户组

getent

查看系统中有哪些用户

语法:getent passwd

共七份信息:

用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)

软件安装

yum

rpm包软件管理器,用于自动化安装配置Linux软件,并自动解决依赖问题

apt

dep包软件管理器,用于自动化安装配置Linux软件,并自动解决依赖

systemctl

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制启动、停止、开机自启

能够被systemctl管理的软件,一般也称为:服务

语法:systemctl start|stop|status|enable|disable 服务名

  • start 启动
  • stop 关闭
  • status 查看状态
  • enable 开启开机自启
  • disable 关闭开机自启

防火墙服务:firewalld

# 关闭防火墙
systemctl stop firewalld

ln

软链接

类似于Windows中的快捷方式

语法:ln -s 参数1 参数2

  • -s,创建软链接
  • 参数一:被链接的文件或文件夹
  • 参数二:要链接去的目的地

日期和时区

date

查看系统的时间

语法:date [-d] [+格式化字符串]

  • -d 按照给定的字符串显示日期,一般用于日期计算
  • 格式化字符串: 通过特定的字符串标记,来控制显示日期的格式
    • %Y 年
    • %y 年份后两位数字
    • %m 月份
    • %d 日
    • %H 小时
    • %M 分钟
    • %S 秒
    • %s 自1970-01-01 00:00:00 UTC 到现在的秒数
[root@whoami1 ~]# date "+%Y-%m-%d %H:%M:%S"
2023-11-10 14:47:54
[root@whoami1 ~]#

修改时区

rm -f /etc/localtime
in -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ntp

我们可以通过ntp程序自动校准系统时间

安装ntp:yum install -y ntp

启动并开机自启:

systemctl start ntpd

systemctl enable ntpd

自动定期校准

手动校准:ntpdate -u ntp.aliyun.com

IP地址和主机名

IP地址

IPv4格式:a.b.c.d,其中abcd表示0-255的数字

ens33:主网卡

127.0.0.1:代表本机

0.0.0.0:特殊IP地址

  • 可以用于指代本机
  • 可以在端口绑定中用来确定绑定关系
  • 在一些ip地址限制中,表示所有ip的意思,如放行规则设置为0.0.0.0,表示允许任意ip访问

主机名

每一台电脑出了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名

命令:hostname

修改主机名:hostnamectl set-hostname 新名字

域名解析

image-20231111162132749

虚拟机配置固定IP

为什么需要固定IP

当前我们虚拟机的Linux系统,其IP地址是通过DHCP服务获取的

DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更

在VMware Workstation中配置固定IP

第一步

编辑–>虚拟网络编辑器

image-20231111163359158

image-20231111163450875

第二步

在Linux系统中修改固定IP

vi /etc/sysconfig/network-scripts/ifcfg-ens33

image-20231111164537693

IPADDR="192.168.52.141"
NETMASK="255.255.255.0"
GATEWAY="192.168.52.2"
DNS1="192.168.52.2"

然后执行systemctl restart network重启网卡即可

网络传输

ping

检查指定网络服务请是否可以连通

语法:ping [-c num] ip或者主机名

  • -c:检查的次数,不适用-c,将无限次数持续检查
# 检查4次
ping -c 4 www.baidu.com

wget

wget是非交互式的文件下载器,可以在命令行中下载网络文件

语法:wget [-b] url

  • -b:可选,后台下载,会将日志写在当前工作目录下的wget-log文件
    • 可以tail -f wget-log持续查看
  • url:下载链接

curl

可以发送http网络请求,可用于:下载文件、获取信息等

语法:curl [-O] url O是大写

  • -O:用于下载文件,当url是下载连接时,可以使用次选项保存文件
  • url:要发起请求的网络地址
[root@whoami ~]# curl cip.cc
IP : 101.66.216.162
地址 : 中国 浙江 舟山
运营商 : 联通

数据二 : 浙江省金华市 | 联通

数据三 : 中国浙江省舟山市 | 联通

URL : http://www.cip.cc/101.66.216.162
[root@whoami ~]#

端口

端口是设备和外界通信交流的出入口。可分为物理端口和虚拟端口

  • 物理端口:又可以称之为接口,是可见端口,如usb接口RJ45网口,HDMI端口等
  • 虚拟端口:值计算机内部端口,是不可见的,是用来操作系统和外部进行交互使用的

在Linux中支持65535个端口,分为三类进行使用:

  • 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如ssh服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用
  • 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序或服务
  • 动态端口:49152~65535,通常不会绑定固定的程序,而是当程序对外进行网络链接时,临时使用

查看端口占用

使用nmap命令,查看对外暴露的端口

安装nmap:yum install nmap

语法:nmap 被查看的IP地址

[root@whoami ~]# nmap 127.0.0.1

Starting Nmap 6.40 ( http://nmap.org ) at 2023-11-11 00:22 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp

Nmap done: 1 IP address (1 host up) scanned in 1.68 seconds
[root@whoami ~]#

使用netstat命令:查看指定端口的占用情况

安装:yum install net-tools

语法:netstat -anp | grep 端口号

进程管理

程序运行在操作系统中,是被操作系统管理的

为了管理运行的程序,每一个程序在运行的时候,便会被操作系统注册为系统中的一个进程

并为每个进程都分配一个独有的:进程ID(进程号)

查看进程

语法:ps [-e -f]

  • -e 显示出全部的进程
  • -f 以完全格式化的形式展示信息(展示全部信息)

固定用法:ps -ef 列出全部进程的全部信息

uid pid ppid c stime tty time cmd
进程所属的用户id 进程的进程号id 进程的父id(启动此进程的其他进程) 此进程的cpu占用率 进程启动时间 启动此进程的终端序号,如?,表示非终端启动,而是系统内置启动 进程占用cpu的时间 进程对应的名称或启动路径或启动命令

关闭进程

kill

语法:kill [-9] 进程id

-9:表示强制关闭。不使用-9,表示向进程发送信号要求其关闭,是否关闭看进程自身的处理机制

主机状态

top

查看系统资源占用

image-20231111180451451

image-20231111181353474

image-20231111181428856

df

磁盘信息监控

语法:df [-h]

-h:以更加人性化的单位显示

网络状态监控

image-20231111182427296

环境变量

在Linux中执行:env 可以查看当前系统中记录的环境变量

env | grep PATH

$ 取出变量

echo $PATH

自行设置环境变量

  • 临时设置 语法:exprot 变量名=变量值
  • 永久生效
    • 针对当前用户生效,配置在当前用户的:~/.bashrc文件中
    • 针对所有用户生效,配置在系统的:/etc/profile文件中
    • 并通过语法:source 配置文件,进行立刻生效,或者重新登陆ssh工具

自定义环境变量PATH

环境变量PATH这个项目记录了系统执行命令的搜索路径

这些搜索路径我们也可以自行添加到PATH中去

  • 临时修改PATH:export PATH=$PATH:/home/whoami/cxx,再次执行hello,无论在哪都可以执行了
  • 永久修改PATH:将export PATH=$PATH:/home/whoami/cxx填入环境变量文件:用户:~/.bashrc 所有:/etc/profile,再source 配置文件
[root@whoami ~]# mkdir cxx
[root@whoami ~]# ls
anaconda-ks.cfg cxx mysql
[root@whoami ~]# cd cxx/
[root@whoami cxx]# vi hello
[root@whoami cxx]# chmod +x ./hello
[root@whoami cxx]# ls -ll
总用量 4
-rwxr-xr-x. 1 root root 12 11月 11 19:31 hello
[root@whoami cxx]# vi /etc/profile
[root@whoami cxx]# source /etc/profile
[root@whoami cxx]# hello
hello,linux
[root@whoami cxx]# cd /
[root@whoami /]# hello
hello,linux
[root@whoami /]#

上传下载

rz、sz

要使用rz、sz命令需要安装,yum install lrzsz

  • rz 上传 输入rz
  • sz下载 输入sz 要下载的文件

文件会自动下载到桌面的fsdownload文件夹中

压缩解压

tar

Linux和Mac系统中常用的2中压缩格式分别是:

  • .tar,称之为tarball,归档文件,简单的将文件组装到一个.tar文件内,没有太多的文件体积减少,仅仅是简单的封装
  • .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大减少压缩后的体积

针对这两种格式,使用tar命令均可以进行压缩和解压

语法:tar [-c -v -x -f -z -C] 参数1 参数2 … 参数n

-c 创建压缩文件,用于压缩模式

-v 显示压缩,解压过程,用于查看进度

-x 解压模式

-f 要创建的文件,或要解压的文件,-f选项必须在所有选项中位置处于最后一个

-z gzip模式,不适用-z就是不同的tarball格式,如果使用,一般处于选项的第一位

-c 选择我解压的目的地,用于解压模式

image-20231111213729372

zip

可以使用zip命令,压缩文件为zip压缩包

语法:zip [-r] 参数1 参数2 … 参数n

  • -r,被压缩东西的包含文件夹的时候,需要使用-r,和rm、cp等命令的-r效果一致

unzip

使用unzip命令,可以方便的解压zip压缩包

语法:unzip [-d] 参数

-d 适当要解压去的位置,同tar的-C选项

参数 被压缩的zip压缩包文件

集群

配置多台Linux虚拟机

克隆3台centos7

改名:分别改为123:hostnamectl set-hostname node1 2 3

配置IP地址:vi /etc/sysconfig/network-scripts/ifcfg-ens33

只需要修改IP地址 (第二台,第三台改一下UUID(只需要改一个数字就行))

然后重启网卡 systemctl restart network

准备主机名映射

Windows中:

C:\Windows\System32\drivers\etc

管理员身份打开记事本打开hosts,在最后写上

192.168.52.161 node1

192.168.52.162 node2

192.168.52.163 node3

三台Linux中:

vi /etc/hosts 下填入

192.168.52.161 node1

192.168.52.162 node2

192.168.52.163 node3

配置SSH免密登录

1、在每台机器上都执行:ssh-keygen -t rsa -b 4096,一路回车

2、在每台机器都执行:

ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

# 记得输入yes 之后还有密码

然后就可以ssh node2 …. 三台主机之间随意穿梭

配置jdk环境

https://www.oracle.com/java/technologies/downloads/

image-20231112155235298

上传到Linux的root目录

# 创建一个目录
[root@node1 ~]# mkdir -p /export/server

#解压到这个目录
[root@node1 ~]# tar -zxvf jdk-8u391-linux-x64.tar.gz -C /export/server/

# 进入这个目录
[root@node1 ~]# cd /export/server/
[root@node1 server]# ls -l
总用量 4
drwxr-xr-x. 8 root root 4096 11月 12 15:56 jdk1.8.0_391

# 软链接 把jdk1.8.0_391 链接为 jdk
[root@node1 server]# ln -s /export/server/jdk1.8.0_391 /export/server/jdk
[root@node1 server]# ls -ll
总用量 4
lrwxrwxrwx. 1 root root 27 11月 12 15:57 jdk -> /export/server/jdk1.8.0_391
drwxr-xr-x. 8 root root 4096 11月 12 15:56 jdk1.8.0_391

# 配置环境变量 -->1.编辑这个文件
[root@node1 server]# vi /etc/profile
# 2.最底部填写如下:
export JAVA_HOME=/exprot/server/jdk
export PATH=$PATH:$JAVA_HOME/bin

# 3.使其生效
[root@node1 server]# source /etc/profile

# 检查是否生效
[root@node1 server]# echo $JAVA_HOME
/exprot/server/jdk
[root@node1 server]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/exprot/server/jdk/bin

# 删除系统自带的Java(有可能没有自带)
[root@node1 server]# rm -f /usr/bin/java

# 创建软链接
[root@node1 server]# ln -s /export/server/jdk/bin/java /usr/bin/java

# 显示Java版本号
[root@node1 server]# java -version
java version "1.8.0_391"
Java(TM) SE Runtime Environment (build 1.8.0_391-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.391-b13, mixed mode)
[root@node1 server]#

关闭防火墙和SELinux

集群化软件之间需要通过端口相互通讯,为了避免出现网络不通的问题,我们可以简单的在集群内部关闭防火墙

关闭防火墙(每台都执行):

systemctl stop firewalld
systemctl disable firewalld

Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,用来确保系统的安全稳定

SELinux的配置同防火墙一样,非常复杂

当前,我们只需要关闭SELinux功能,避免后面的软件运行出现问题

vi /etc/sysconfig/selinux
# 将SELINUX=enforcing(第七行)改为
SELINUX=disabled
# 保存退出后,重启虚拟机即可 disabled不要写错,写错就开不了机了

输入:init 0 关机 ,init 6 是重启

防火墙

查看防火墙状态

systemctl status firewalld

启动防火墙

systemctl start firewalld

停止防火墙

systemctl stop firewalld

查看防火墙已经开放的端口

firewall-cmd --list-port

添加开放指定端口

firewall-cmd --zone=public --add-port=需要开启的端口号/tcp --permanent

# 注
--permanent参数是永久生效
但是需要重新加载防火墙才能生效

关闭指定端口

firewall-cmd --zone=public --remove-port=需要开启的端口号/tcp --permanent

设置完成后要重新加载防火墙

firewall-cmd --reload